36#include <libFreeWRL.h>
38#include "../vrml_parser/Structs.h"
39#include "../main/headers.h"
40#include "../vrml_parser/CParseGeneral.h"
41#include "../vrml_parser/CRoutes.h"
42#include "../main/Snapshot.h"
43#include "../scenegraph/Collision.h"
44#include "../scenegraph/quaternion.h"
45#include "../scenegraph/Viewer.h"
46#include "../input/EAIHelpers.h"
47#include "../input/SensInterps.h"
48#include "../x3d_parser/Bindable.h"
54#include "jsVRMLClasses.h"
55#include "jsVRMLBrowser.h"
58#ifndef JSCLASS_GLOBAL_FLAGS
60#define JSCLASS_GLOBAL_FLAGS 0
63#ifdef JAVASCRIPTVERBOSE
64int ActualrunScript(
int num,
char *script, jsval *rval,
char *fn,
int line);
66int ActualrunScript(
int num,
char *script, jsval *rval);
70static JSClass staticGlobalClass = {
76 JS_StrictPropertyStub,
95typedef struct pJScript{
101 jsval JSglobal_return_value;
107void *JScript_constructor(){
108 void *v = MALLOCV(
sizeof(
struct pJScript));
109 memset(v,0,
sizeof(
struct pJScript));
112void JScript_init(
struct tJScript *t){
114 t->JSglobal_return_val = NULL;
116 t->prv = JScript_constructor();
118 ppJScript p = (ppJScript)t->prv;
121 memcpy(&p->globalClass,&staticGlobalClass,
sizeof(staticGlobalClass));
122 t->JSglobal_return_val = &p->JSglobal_return_value;
123 p->current_script = NULL;
130void sm_js_cleanup_script_context(
int counter){
133 #if JS_VERSION <= 185
135 #define CATCH_JS_GC_THROWS 1
136 #if defined(CATCH_JS_GC_THROWS) && defined(_MSC_VER) && defined(W_DEBUG)
141 __except(EXCEPTION_EXECUTE_HANDLER) {
142 printf(
"bad js_gc for script num %d\n", counter);
143 if(crss->scriptText){
144 struct X3D_Node *scnode = crss->script->ShaderScriptNode;
146 const char* nn = getNodeName(X3D_NODE(scnode));
147 if(nn) printf(
"DEF %s \n",nn);
148 if(crss->scriptText) printf(
"%s\n",crss->scriptText);
158 ppJScript p = (ppJScript)tg->JScript.prv;
161 JS_MaybeGC(getScriptControlIndex(counter)->cx);
175void sm_process_eventsProcessed() {
182 for (counter = 0; counter <= tg->CRoutes.max_script_found_and_initialized; counter++) {
183 scriptcontrol = getScriptControlIndex(counter);
184 if(scriptcontrol->thisScriptType != NOSCRIPT ){
185 if (scriptcontrol->eventsProcessed == NULL) {
186#if defined(JS_THREADSAFE)
187 JS_BeginRequest(scriptcontrol->cx);
189 scriptcontrol->eventsProcessed = (
void *)JS_CompileScript(
192 "eventsProcessed()", strlen (
"eventsProcessed()"),
193 "compile eventsProcessed()", 1);
195 if (!JS_AddObjectRoot(scriptcontrol->cx,(JSSCRIPT**)(&scriptcontrol->eventsProcessed))) {
196 printf (
"can not add object root for compiled eventsProcessed() for script %d\n",counter);
199#if defined(JS_THREADSAFE)
200 JS_EndRequest(scriptcontrol->cx);
204#if defined(JS_THREADSAFE)
205 JS_BeginRequest(scriptcontrol->cx);
207 if (!JS_ExecuteScript( scriptcontrol->cx,
209 scriptcontrol->eventsProcessed, &retval)) {
211 printf (
"can not run eventsProcessed() for script %d thread %u\n",counter,(
unsigned int)pthread_self().x);
213 printf (
"can not run eventsProcessed() for script %d thread %p\n",counter,(
void *)pthread_self());
216#if defined(JS_THREADSAFE)
217 JS_EndRequest(scriptcontrol->cx);
228void sm_jsClearScriptControlEntries(
int num)
231 ScriptControl = getScriptControlIndex(num);
232 if (ScriptControl->eventsProcessed != NULL) {
234 if (ScriptControl->cx != NULL) {
235 JS_RemoveObjectRoot(ScriptControl->cx,(JSSCRIPT**)(&ScriptControl->eventsProcessed));
238 ScriptControl->eventsProcessed = NULL;
248#define MAX_RUNTIME_BYTES 0x4000000L
253#define STACK_CHUNK_SIZE 8192
255static int JSaddGlobalECMANativeProperty(
int num,
const char *name);
256static int JSaddGlobalAssignProperty(
int num,
const char *name,
const char *str);
291static char *DefaultScriptMethods =
"function initialize() {}; " \
292 " function shutdown() {}; " \
293 " function eventsProcessed() {}; " \
294 " TRUE=true; FALSE=false; " \
295 " function print(x) {Browser.print(x)}; " \
296 " function println(x) {Browser.println(x)}; " \
297 " function getName() {return Browser.getName()}; "\
298 " function getVersion() {return Browser.getVersion()}; "\
299 " function getCurrentSpeed() {return Browser.getCurrentSpeed()}; "\
300 " function getCurrentFrameRate() {return Browser.getCurrentFrameRate()}; "\
301 " function getWorldURL() {return Browser.getWorldURL()}; "\
302 " function replaceWorld(x) {Browser.replaceWorld(x)}; "\
303 " function loadURL(x,y) {Browser.loadURL(x,y)}; "\
304 " function setDescription(x) {Browser.setDescription(x)}; "\
305 " function createVrmlFromString(x) {Browser.createVrmlFromString(x)}; "\
306 " function createVrmlFromURL(x,y,z) {Browser.createVrmlFromURL(x,y,z)}; "\
307 " function createX3DFromString(x) {Browser.createX3DFromString(x)}; "\
308 " function createX3DFromURL(x,y,z) {Browser.createX3DFromURL(x,y,z)}; "\
309 " function addRoute(a,b,c,d) {Browser.addRoute(a,b,c,d)}; "\
310 " function deleteRoute(a,b,c,d) {Browser.deleteRoute(a,b,c,d)}; "\
311 " function _rename_function(obj,oldf,newf) {if(typeof obj[oldf] === 'function') {obj[newf]=obj[oldf]; delete obj[oldf];}}; "\
318 ppJScript p = (ppJScript)gglobal()->JScript.prv;
319 return p->runtime ? 1 : 0;
321void sm_JSDeleteScriptContext(
int num){
325 ScriptControl = getScriptControlIndex(num);
327 if (ScriptControl->eventsProcessed != NULL) {
328 JS_RemoveObjectRoot(ScriptControl->cx,(JSSCRIPT **)(&ScriptControl->eventsProcessed));
332 JS_DestroyContextMaybeGC(ScriptControl->cx);
339 ppJScript p = (ppJScript)tg->JScript.prv;
341 JS_DestroyRuntime(p->runtime);
347static struct keyname {
351{JSGC_MAX_BYTES,
"JSGC_MAX_BYTES"},
352{JSGC_MAX_MALLOC_BYTES,
"JSGC_MAX_MALLOC_BYTES"},
353{JSGC_BYTES,
"JSGC_BYTES"},
354{JSGC_NUMBER,
"JSGC_NUMBER"},
355{JSGC_MAX_CODE_CACHE_BYTES,
"JSGC_MAX_CODE_CACHE_BYTES"},
356{JSGC_MODE,
"JSGC_MODE"},
357{JSGC_UNUSED_CHUNKS,
"JSGC_UNUSED_CHUNKS"},
358{JSGC_TOTAL_CHUNKS,
"JSGC_TOTAL_CHUNKS"},
359{JSGC_SLICE_TIME_BUDGET,
"JSGC_SLICE_TIME_BUDGET"},
360{JSGC_MARK_STACK_LIMIT,
"JSGC_MARK_STACK_LIMIT"},
361{JSGC_HIGH_FREQUENCY_TIME_LIMIT,
"JSGC_HIGH_FREQUENCY_TIME_LIMIT"},
362{JSGC_HIGH_FREQUENCY_LOW_LIMIT,
"JSGC_HIGH_FREQUENCY_LOW_LIMIT"},
363{JSGC_HIGH_FREQUENCY_HIGH_LIMIT,
"JSGC_HIGH_FREQUENCY_HIGH_LIMIT"},
364{JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MAX,
"JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MAX"},
365{JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MIN,
"JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MIN"},
366{JSGC_LOW_FREQUENCY_HEAP_GROWTH,
"JSGC_LOW_FREQUENCY_HEAP_GROWTH"},
367{JSGC_DYNAMIC_HEAP_GROWTH,
"JSGC_DYNAMIC_HEAP_GROWTH"},
368{JSGC_DYNAMIC_MARK_SLICE,
"JSGC_DYNAMIC_MARK_SLICE"},
369{JSGC_ANALYSIS_PURGE_TRIGGER,
"JSGC_ANALYSIS_PURGE_TRIGGER"},
374static struct keyname {
378{JSGC_MAX_BYTES,
"JSGC_MAX_BYTES"},
379{JSGC_MAX_MALLOC_BYTES,
"JSGC_MAX_MALLOC_BYTES"},
380{JSGC_STACKPOOL_LIFESPAN,
"JSGC_STACKPOOL_LIFESPAN"},
381{JSGC_TRIGGER_FACTOR,
"JSGC_TRIGGER_FACTOR"},
382{JSGC_BYTES,
"JSGC_BYTES"},
383{JSGC_NUMBER,
"JSGC_NUMBER"},
384{JSGC_MAX_CODE_CACHE_BYTES,
"JSGC_MAX_CODE_CACHE_BYTES"},
385{JSGC_MODE,
"JSGC_MODE"},
386{JSGC_UNUSED_CHUNKS,
"JSGC_UNUSED_CHUNKS"},
390const char *getgcparamname(
int key){
392 while(gcparamname[i].name != NULL){
393 if(gcparamname[i].
key ==
key){
394 return gcparamname[i].name;
411void sm_JSCreateScriptContext(
int num) {
414 JSObject *_globalObj;
416 ppJScript p = (ppJScript)gglobal()->JScript.prv;
419 ScriptControl = getScriptControlIndex(num);
422 if (p->runtime == NULL) {
423 p->runtime = JS_NewRuntime(MAX_RUNTIME_BYTES);
424 if (!p->runtime) freewrlDie(
"JS_NewRuntime failed");
425 #ifdef JAVASCRIPTVERBOSE
426 printf(
"\tJS runtime created,\n");
430 int iend = JS_VERSION == 185 ? 8 : JS_VERSION == 186 ? 19 : 0;
431 for(
unsigned int i=0; i<= iend; i++){
432 unsigned int gcparam = JS_GetGCParameter(p->runtime,i);
433 printf(
"%s = %u\n",getgcparamname(i),gcparam);
443 _context = JS_NewContext(p->runtime, STACK_CHUNK_SIZE);
444 if (!_context) freewrlDie(
"JS_NewContext failed");
446 unsigned int opts = JS_GetOptions(_context);
447 printf(
"options %x\n",opts);
451 #ifdef JAVASCRIPTVERBOSE
452 printf(
"\tJS context created,\n");
455#if defined(JS_THREADSAFE)
456 JS_BeginRequest(_context);
463 #if JS_VERSION >= 185
464 if (num == 0 && JS_VERSION < 186) {
466 _globalObj = JS_NewCompartmentAndGlobalObject(_context, &p->globalClass, NULL);
470 JS_SetGlobalObject(_context,cs->glob);
471 _globalObj = JS_NewGlobalObjectFw(_context,&p->globalClass);
472 JS_SetGlobalObject(_context,_globalObj);
475 _globalObj = JS_NewObject(_context, &p->globalClass, NULL, NULL);
480#if defined(JS_THREADSAFE)
481 JS_EndRequest(_context);
483 if (!_globalObj) freewrlDie(
"JS_NewObject failed");
485 #ifdef JAVASCRIPTVERBOSE
486 printf(
"\tJS global object created,\n");
491#if defined(JS_THREADSAFE)
492 JS_BeginRequest(_context);
494 if (!JS_InitStandardClasses(_context, _globalObj))
495#if defined(JS_THREADSAFE)
496 { JS_EndRequest(_context);
498 freewrlDie(
"JS_InitStandardClasses failed");
499#if defined(JS_THREADSAFE)
501 JS_EndRequest(_context);
504 #ifdef JAVASCRIPTVERBOSE
505 printf(
"\tJS standard classes initialized,\n");
508 #ifdef JAVASCRIPTVERBOSE
512 JS_SetErrorReporter(_context, errorReporter);
514 #ifdef JAVASCRIPTVERBOSE
515 printf(
"\tJS error reporter set,\n");
521 ScriptControl->cx = _context;
522 ScriptControl->glob = _globalObj;
524 JS_SetPrivateFw(_context,_globalObj,ScriptControl->script);
528#if defined(JS_THREADSAFE)
529 JS_BeginRequest(_context);
531 if (!loadVrmlClasses(_context, _globalObj))
532#if defined(JS_THREADSAFE)
533 { JS_EndRequest(_context);
535 freewrlDie(
"loadVrmlClasses failed");
536#if defined(JS_THREADSAFE)
538 JS_EndRequest(_context);
543 #ifdef JAVASCRIPTVERBOSE
544 printf(
"\tVRML classes loaded,\n");
547#if defined(JS_THREADSAFE)
548 JS_BeginRequest(_context);
550 if (!VrmlBrowserInit(_context, _globalObj, br))
551#if defined(JS_THREADSAFE)
552 { JS_EndRequest(_context);
554 freewrlDie(
"VrmlBrowserInit failed");
555#if defined(JS_THREADSAFE)
557 JS_EndRequest(_context);
561 #ifdef JAVASCRIPTVERBOSE
562 printf(
"\tVRML Browser interface loaded,\n");
566 if (!ACTUALRUNSCRIPT(num,DefaultScriptMethods,&rval))
567 cleanupDie(num,
"runScript failed in VRML::newJS DefaultScriptMethods");
570 CRoutes_js_new (num, JAVASCRIPT);
572 #ifdef JAVASCRIPTVERBOSE
573 printf(
"\tVRML browser initialized, thread %u\n",pthread_self());
576int getJsEngineVariant();
578 return getJsEngineVariant() == 2? 2 : 0;
584#ifdef JAVASCRIPTVERBOSE
585int ActualrunScript(
int num,
char *script, jsval *rval,
char *fn,
int line) {
587int ActualrunScript(
int num,
char *script, jsval *rval) {
591 JSObject *_globalObj;
594 ScriptControl = getScriptControlIndex(num);
596 _context = (JSContext*)ScriptControl->cx;
597 _globalObj = (JSObject*)ScriptControl->glob;
599 #ifdef JAVASCRIPTVERBOSE
600 printf(
"ActualrunScript script called at %s:%d num: %d cx %p \"%s\", \n",
601 fn, line, num, _context, script);
604#if defined(JS_THREADSAFE)
605 JS_BeginRequest(_context);
608 js_cleanup_script_context(num);
609#if defined(JS_THREADSAFE)
610 JS_EndRequest(_context);
613 len = (int) strlen(script);
614#if defined(JS_THREADSAFE)
615 JS_BeginRequest(_context);
617 if (!JS_EvaluateScript(_context, _globalObj, script, len, FNAME_STUB, LINENO_STUB, rval)) {
618 printf (
"ActualrunScript - JS_EvaluateScript failed for %s", script);
620 ConsoleMessage (
"ActualrunScript - JS_EvaluateScript failed for %s", script);
621#if defined(JS_THREADSAFE)
622 JS_EndRequest(_context);
625#if defined(JS_THREADSAFE)
627 JS_EndRequest(_context);
630 #ifdef JAVASCRIPTVERBOSE
631 printf (
"runscript passed\n");
637int sm_jsActualrunScript(
int num,
char *script) {
639 return ACTUALRUNSCRIPT(num,script,&rval);
643int jsrrunScript(JSContext *_context, JSObject *_globalObj,
char *script, jsval *rval) {
647 #ifdef JAVASCRIPTVERBOSE
648 printf(
"jsrrunScript script cx %p \"%s\", \n",
652 len = (int) strlen(script);
653#if defined(JS_THREADSAFE)
654 JS_BeginRequest(_context);
656 if (!JS_EvaluateScript(_context, _globalObj, script, len,
657 FNAME_STUB, LINENO_STUB, rval)) {
658 ConsoleMessage (
"jsrunScript - JS_EvaluateScript failed for %s", script);
659#if defined(JS_THREADSAFE)
660 JS_EndRequest(_context);
663#if defined(JS_THREADSAFE)
665 JS_EndRequest(_context);
669 #ifdef JAVASCRIPTVERBOSE
670 printf (
"runscript passed\n");
678int sizeofSForMF(
int itype);
679void *AnyNativeNew(
int type,
union anyVrml* source,
int *valueChanged){
684 ptr->valueChanged = valueChanged;
688 ptr->v = MALLOC(
void *,sizeofSForMF(type));
689 memset(ptr->v,0,sizeofSForMF(type));
694void shallow_copy_field(
int typeIndex,
union anyVrml* source,
union anyVrml* dest);
695void AnyNativeAssign(
void *top,
void *fromp)
700 if(to->type == from->type){
702 (*to->valueChanged) ++;
705 shallow_copy_field(from->type,from->v,to->v);
710void *SFNodeNativeNew()
718 ptr->valueChanged = 0;
719 if(SM_method() == 0){
720 ptr->X3DString = NULL;
721 ptr->fieldsExpanded = FALSE;
727int SFNodeNativeAssign(
void *top,
void *fromp)
736 to->handle = from->handle;
738 to->X3DString = STRDUP(from->X3DString);
740 #ifdef JAVASCRIPTVERBOSE
741 printf (
"SFNodeNativeAssign, copied %p to %p, handle %p, string %s\n", from, to, to->handle, to->X3DString);
746 to->X3DString = STRDUP(
"from a NULL assignment");
752int SFNodeNativeEquals(
void *top,
void *fromp)
761 if(to->handle == from->handle)
768void *SFColorRGBANativeNew()
772 ptr->valueChanged = 0;
776void SFColorRGBANativeAssign(
void *top,
void *fromp)
784void *SFColorNativeNew()
788 ptr->valueChanged = 0;
792void SFColorNativeAssign(
void *top,
void *fromp)
800void *SFImageNativeNew()
804 ptr->valueChanged = 0;
808void SFImageNativeAssign(
void *top,
void *fromp)
818void *SFRotationNativeNew()
822 ptr->valueChanged = 0;
826void SFRotationNativeAssign(
void *top,
void *fromp)
834void *SFVec2fNativeNew()
838 ptr->valueChanged = 0;
842void SFVec2fNativeAssign(
void *top,
void *fromp)
850void *SFVec3fNativeNew() {
853 ptr->valueChanged = 0;
857void SFVec3fNativeAssign(
void *top,
void *fromp) {
864void *SFVec3dNativeNew() {
867 ptr->valueChanged = 0;
871void SFVec3dNativeAssign(
void *top,
void *fromp) {
878void *SFVec4fNativeNew() {
881 ptr->valueChanged = 0;
885void SFVec4fNativeAssign(
void *top,
void *fromp) {
892void *SFVec4dNativeNew() {
895 ptr->valueChanged = 0;
899void SFVec4dNativeAssign(
void *top,
void *fromp) {
908static char* re_strcat(
char *_Dest,
char *_Source,
int *destLen,
int *destDim)
929 int srclen = (int) strlen(_Source);
930 *destLen = *destLen + srclen;
931 if(*destLen > *destDim -1)
933 *destDim = *destDim + srclen + 1 + 100;
934 _Dest = REALLOC(_Dest,*destDim);
936 _Dest = strcat(_Dest,_Source);
949void InitScriptField(
int num, indexT kind, indexT type,
const char* field,
union anyVrml value) {
951 char *smallfield = NULL;
959 int rowCount, eleCount;
968 float defaultFloat[] = {0.0f,0.0f,0.0f,0.0f};
969 int defaultInt[] = {0,0,0,0};
970 double defaultDouble[] = {0.0, 0.0, 0.0, 0.0};
972 struct X3D_Node *defaultVoid[] = {NULL,NULL};
975 #ifdef JAVASCRIPTVERBOSE
976 printf (
"calling InitScriptField from thread %u\n",pthread_self());
977 printf (
"\nInitScriptField, num %d, kind %s type %s field %s value %d\n", num,PROTOKEYWORDS[kind],FIELDTYPES[type],field,value);
980 if ((kind != PKW_inputOnly) && (kind != PKW_outputOnly) && (kind != PKW_initializeOnly) && (kind != PKW_inputOutput)) {
981 ConsoleMessage (
"InitScriptField: invalid kind for script: %d\n",kind);
985 if (type >= FIELDTYPES_COUNT) {
986 ConsoleMessage (
"InitScriptField: invalid type for script: %d\n",type);
989 ScriptControl = getScriptControlIndex(num);
996 if (kind == PKW_inputOutput) {
1002 cx = (JSContext*)ScriptControl->cx;
1003 obj = (JSObject*)ScriptControl->glob;
1005 if (JS_GetProperty(cx,obj,field,&retval)){
1006 if (JSVAL_IS_OBJECT(retval)){
1008 char runstring[STRING_SIZE];
1010 sprintf(runstring,
"_rename_function(this,'%s','set_%s');",field,field);
1012 #if defined(JS_THREADSAFE)
1013 JS_BeginRequest(cx);
1015 if(!JS_EvaluateScript(cx,obj, runstring, (
int) strlen(runstring), FNAME_STUB, LINENO_STUB, &retval)){
1016 printf(
"sorry couldn't rename function: %s",runstring);
1018 #if defined(JS_THREADSAFE)
1023 strcpy(mynewname,field);
1025 }
else strcpy(mynewname,field);
1030 case FIELDTYPE_SFBool:
1031 case FIELDTYPE_SFFloat:
1032 case FIELDTYPE_SFTime:
1033 case FIELDTYPE_SFDouble:
1034 case FIELDTYPE_SFInt32:
1035 case FIELDTYPE_SFString: {
1037 if (kind != PKW_inputOnly) {
1038 JSaddGlobalECMANativeProperty(num, field);
1039 if (kind == PKW_initializeOnly || kind == PKW_inputOutput) {
1040 if (type == FIELDTYPE_SFString) {
1041 tlen = (int) strlen(value.sfstring->strptr) + strlen(field) + 20;
1043 tlen = (int) strlen(field) + 400;
1045 smallfield = MALLOC (
char *, tlen);
1046 smallfield[0] =
'\0';
1049 case FIELDTYPE_SFFloat: sprintf (smallfield,
"%s=%f\n",field,value.sffloat);
break;
1050 case FIELDTYPE_SFTime: sprintf (smallfield,
"%s=%f\n",field,value.sftime);
break;
1051 case FIELDTYPE_SFDouble: sprintf (smallfield,
"%s=%f\n",field,value.sftime);
break;
1052 case FIELDTYPE_SFInt32: sprintf (smallfield,
"%s=%d\n",field,value.sfint32);
break;
1053 case FIELDTYPE_SFBool:
1054 if (value.sfbool == 1) sprintf (smallfield,
"%s=true",field);
1055 else sprintf (smallfield,
"%s=false",field);
1057 case FIELDTYPE_SFString:
1058 sprintf (smallfield,
"%s=\"%s\"\n",field,value.sfstring->strptr);
break;
1061 if (!ACTUALRUNSCRIPT(num,smallfield,&rval))
1062 printf (
"huh??? Field initialization script failed %s\n",smallfield);
1074 case FIELDTYPE_MFString:
1075 case FIELDTYPE_MFTime:
1076 case FIELDTYPE_MFBool:
1077 case FIELDTYPE_MFInt32:
1078 case FIELDTYPE_MFFloat:
1079 JSaddGlobalECMANativeProperty(num, field);
1080 MFhasECMAtype = TRUE;
1083 MFhasECMAtype = FALSE;
1093 if (kind == PKW_initializeOnly || kind == PKW_inputOutput) {
1098 case FIELDTYPE_SFNode:
1099 VoidPtr = (
struct X3D_Node **) (&(value.sfnode)); elements = 1;
1101 case FIELDTYPE_MFColor:
1102 FloatPtr = (
float *) value.mfcolor.p; elements = value.mfcolor.n;
1104 case FIELDTYPE_MFColorRGBA:
1105 FloatPtr = (
float *) value.mfcolorrgba.p; elements = value.mfcolorrgba.n;
1107 case FIELDTYPE_MFVec2f:
1108 FloatPtr = (
float *) value.mfvec2f.p; elements = value.mfvec2f.n;
1110 case FIELDTYPE_MFVec3f:
1111 FloatPtr = (
float *) value.mfvec3f.p; elements = value.mfvec3f.n;
1113 case FIELDTYPE_MFRotation:
1114 FloatPtr = (
float *) value.mfrotation.p; elements = value.mfrotation.n;
1116 case FIELDTYPE_SFVec2f:
1117 FloatPtr = (
float *) value.sfvec2f.c; elements = 1;
1119 case FIELDTYPE_SFColor:
1120 FloatPtr = value.sfcolor.c; elements = 1;
1122 case FIELDTYPE_SFColorRGBA:
1123 FloatPtr = value.sfcolorrgba.c; elements = 1;
1125 case FIELDTYPE_SFRotation:
1126 FloatPtr = value.sfrotation.c; elements = 1;
1128 case FIELDTYPE_SFVec3f:
1129 FloatPtr = value.sfvec3f.c; elements =1;
1131 case FIELDTYPE_SFVec3d:
1132 DoublePtr = value.sfvec3d.c; elements =1;
1134 case FIELDTYPE_MFString:
1135 SVPtr = value.mfstring.p; elements = value.mfstring.n;
1137 case FIELDTYPE_MFTime:
1138 DoublePtr = value.mftime.p; elements = value.mftime.n;
1140 case FIELDTYPE_MFBool:
1141 IntPtr = value.mfbool.p; elements = value.mfbool.n;
1143 case FIELDTYPE_SFImage:
1144 case FIELDTYPE_MFInt32:
1145 IntPtr = value.mfint32.p; elements = value.mfint32.n;
1147 case FIELDTYPE_MFNode:
1148 VoidPtr = (
struct X3D_Node **)(value.mfnode.p); elements = value.mfnode.n;
1150 case FIELDTYPE_MFFloat:
1151 FloatPtr = value.mffloat.p; elements = value.mffloat.n;
1153 case FIELDTYPE_SFVec4f:
1154 FloatPtr = value.sfvec4f.c; elements = 1;
1156 case FIELDTYPE_SFVec4d:
1157 DoublePtr = value.sfvec4d.c; elements = 1;
1161 printf (
"unhandled type, in InitScriptField %d\n",type);
1171 case FIELDTYPE_SFNode:
1172 case FIELDTYPE_MFNode:
1173 VoidPtr = (
struct X3D_Node **) &defaultVoid;
1177 case FIELDTYPE_MFColor:
1178 case FIELDTYPE_MFColorRGBA:
1179 case FIELDTYPE_MFVec2f:
1180 case FIELDTYPE_MFVec3f:
1181 case FIELDTYPE_MFRotation:
1182 case FIELDTYPE_SFVec2f:
1183 case FIELDTYPE_SFColor:
1184 case FIELDTYPE_SFColorRGBA:
1185 case FIELDTYPE_SFRotation:
1186 case FIELDTYPE_SFVec3f:
1187 case FIELDTYPE_SFVec4f:
1188 case FIELDTYPE_MFFloat:
1189 FloatPtr = defaultFloat;
1193 case FIELDTYPE_MFBool:
1194 case FIELDTYPE_MFInt32:
1195 IntPtr = defaultInt;
1199 case FIELDTYPE_SFString:
1200 case FIELDTYPE_MFString:
1201 sptr[0] = newASCIIString(
"");
1206 case FIELDTYPE_SFImage:
1207 IntPtr = defaultInt;
1211 case FIELDTYPE_SFVec2d:
1212 case FIELDTYPE_SFVec3d:
1213 case FIELDTYPE_MFTime:
1214 case FIELDTYPE_SFTime:
1215 case FIELDTYPE_SFDouble:
1216 case FIELDTYPE_SFVec4d:
1217 DoublePtr = defaultDouble;
1221 printf (
"unhandled type, in InitScriptField part 2 %d\n",type);
1228 rows = returnElementRowSize (type);
1230 #ifdef JAVASCRIPTVERBOSE
1231 printf (
"in fieldSet, we have ElementRowSize %d and individual elements %d\n",rows,elements);
1258 int dstlen, dstdim, tdim;
1260 thisValue = MALLOC(
char *, tdim+1);
1261 dstdim = (rows+1)*(elements*15) + 100;
1263 smallfield = MALLOC (
char *, dstdim+1);
1265 if (type != convertToSFType(type)) haveMulti = TRUE;
1266 else haveMulti = FALSE;
1269 sftype = STRDUP((
char *)FIELDTYPES[convertToSFType(type)]);
1272 if (strncmp(sftype,
"SFString",8)==0) strcpy (sftype,
"String");
1276 smallfield[0] =
'\0';
1280 smallfield = re_strcat(smallfield,
"new ",&dstlen,&dstdim);
1281 smallfield = re_strcat(smallfield, (
char *)FIELDTYPES[type],&dstlen,&dstdim);
1282 smallfield = re_strcat(smallfield,
"(",&dstlen,&dstdim);
1286 for (eleCount=0; eleCount<elements; eleCount++) {
1288 if (!MFhasECMAtype) {
1289 smallfield = re_strcat(smallfield,
"new ",&dstlen,&dstdim);
1290 smallfield = re_strcat(smallfield, sftype,&dstlen,&dstdim);
1291 smallfield = re_strcat(smallfield,
"(",&dstlen,&dstdim);
1295 for (rowCount=0; rowCount<rows; rowCount++ ) {
1296 if (IntPtr != NULL) {
1297 sprintf (thisValue,
"%d",*IntPtr); IntPtr++;
1298 }
else if (FloatPtr != NULL) {
1299 sprintf (thisValue,
"%f",*FloatPtr); FloatPtr++;
1300 }
else if (DoublePtr != NULL) {
1301 sprintf (thisValue,
"%f",*DoublePtr); DoublePtr++;
1302 }
else if (SVPtr != NULL) {
1303 sptr[0] = *SVPtr; SVPtr++;
1304 if((
int)strlen(sptr[0]->strptr)+2 > tdim-1)
1306 tdim = (int) strlen(sptr[0]->strptr) + 1 + 100;
1307 thisValue = REALLOC(thisValue,tdim);
1309 sprintf (thisValue,
"\"%s\"",sptr[0]->strptr);
1313 sprintf (thisValue,
"\"%p\"", VoidPtr[0]); VoidPtr++;
1315 smallfield = re_strcat(smallfield, thisValue,&dstlen,&dstdim);
1316 if (rowCount < (rows-1)) smallfield = re_strcat(smallfield,
",",&dstlen,&dstdim);
1319 if (!MFhasECMAtype) smallfield = re_strcat(smallfield,
")",&dstlen,&dstdim);
1320 if (eleCount < (elements-1)) smallfield = re_strcat(smallfield,
",",&dstlen,&dstdim);
1326 smallfield = re_strcat(smallfield,
")",&dstlen,&dstdim);
1329 FREE_IF_NZ (thisValue);
1332 #ifdef JAVASCRIPTVERBOSE
1333 printf (
"JScript, for non-ECMA newname %s, sending :%s:\n",mynewname,smallfield);
1336 JSaddGlobalAssignProperty (num,mynewname,smallfield);
1343 if (kind == PKW_outputOnly) {
1350 fptr = JSparamIndex (field, FIELDTYPES[type],kind);
1353 touched = get_valueChanged_flag (fptr, num);
1356 resetScriptTouchedFlag(num, fptr);
1358 ScriptControl = getScriptControlIndex(num);
1359#if defined(JS_THREADSAFE)
1360 JS_BeginRequest(ScriptControl->cx);
1363 js_cleanup_script_context(num);
1364#if defined(JS_THREADSAFE)
1365 JS_EndRequest(ScriptControl->cx);
1368 FREE_IF_NZ (smallfield);
1369 FREE_IF_NZ (sftype);
1371 #ifdef JAVASCRIPTVERBOSE
1372 printf (
"finished InitScriptField\n");
1376void InitScriptFieldB(
int num, indexT kind, indexT type,
const char* field,
union anyVrml value) {
1381 #ifdef JAVASCRIPTVERBOSE
1382 printf (
"calling InitScriptField from thread %u\n",pthread_self());
1383 printf (
"\nInitScriptField, num %d, kind %s type %s field %s value %d\n", num,PROTOKEYWORDS[kind],FIELDTYPES[type],field,value);
1386 if ((kind != PKW_inputOnly) && (kind != PKW_outputOnly) && (kind != PKW_initializeOnly) && (kind != PKW_inputOutput)) {
1387 ConsoleMessage (
"InitScriptField: invalid kind for script: %d\n",kind);
1391 ScriptControl = getScriptControlIndex(num);
1401 if( kind == PKW_inputOutput) {
1405 cx = (JSContext*)ScriptControl->cx;
1406 obj = (JSObject*)ScriptControl->glob;
1408 if (JS_GetProperty(cx,obj,field,&retval)){
1409 if (JSVAL_IS_OBJECT(retval)){
1411 char runstring[STRING_SIZE];
1413 sprintf(runstring,
"_rename_function(this,'%s','set_%s');",field,field);
1415 #if defined(JS_THREADSAFE)
1416 JS_BeginRequest(cx);
1418 if(!JS_EvaluateScript(cx,obj, runstring, (
int) strlen(runstring), FNAME_STUB, LINENO_STUB, &retval)){
1419 printf(
"sorry couldn't rename function: %s",runstring);
1421 #if defined(JS_THREADSAFE)
1431 JSaddGlobalECMANativeProperty(num, field);
1436static int JSaddGlobalECMANativeProperty(
int num,
const char *name) {
1437 JSContext *_context;
1438 JSObject *_globalObj;
1439 jsval rval = INT_TO_JSVAL(0);
1442 ScriptControl = getScriptControlIndex(num);
1444 _context = (JSContext*)ScriptControl->cx;
1445 _globalObj = (JSObject*)ScriptControl->glob;
1447 #ifdef JAVASCRIPTVERBOSE
1448 printf(
"addGlobalECMANativeProperty: name \"%s\"\n", name);
1451#if defined(JS_THREADSAFE)
1452 JS_BeginRequest(_context);
1459 if (!JS_DefineProperty(_context, _globalObj, name, rval, getECMANative, setECMANative,
1462 0 | JSPROP_PERMANENT
1467 printf(
"JS_DefineProperty failed for \"%s\" in addGlobalECMANativeProperty.\n", name);
1468#if defined(JS_THREADSAFE)
1469 JS_EndRequest(_context);
1472#if defined(JS_THREADSAFE)
1474 JS_EndRequest(_context);
1481static int JSaddGlobalAssignProperty(
int num,
const char *name,
const char *str) {
1482 jsval _rval = INT_TO_JSVAL(0);
1483 JSContext *_context;
1484 JSObject *_globalObj;
1487 ScriptControl = getScriptControlIndex(num);
1490 _context = (JSContext*)ScriptControl->cx;
1491 _globalObj = (JSObject*)ScriptControl->glob;
1493 #ifdef JAVASCRIPTVERBOSE
1494 printf(
"addGlobalAssignProperty: cx: %p obj %p name \"%s\", evaluate script \"%s\"\n",
1495 _context, _globalObj, name, str);
1498#if defined(JS_THREADSAFE)
1499 JS_BeginRequest(_context);
1501 if (!JS_EvaluateScript(_context, _globalObj, str, (
int) strlen(str), FNAME_STUB, LINENO_STUB, &_rval)) {
1502 ConsoleMessage (
"JSaddGlobalAssignProperty - JS_EvaluateScript failed for %s", str);
1503#if defined(JS_THREADSAFE)
1504 JS_EndRequest(_context);
1507#if defined(JS_THREADSAFE)
1509 JS_EndRequest(_context);
1512#if defined(JS_THREADSAFE)
1513 JS_BeginRequest(_context);
1515 if (!JS_DefineProperty(_context, _globalObj, name, _rval, getAssignProperty, setAssignProperty, 0 | JSPROP_PERMANENT)) {
1516 printf(
"JS_DefineProperty failed for \"%s\" in addGlobalAssignProperty.\n", name);
1517#if defined(JS_THREADSAFE)
1518 JS_EndRequest(_context);
1521#if defined(JS_THREADSAFE)
1523 JS_EndRequest(_context);
1532#if defined(JS_THREADSAFE)
1533# define JSBEGINREQUEST_SUBSTITUTION(mycx) JS_BeginRequest(mycx);
1534# define JSENDREQUEST_SUBSTITUTION(mycx) JS_EndRequest(mycx);
1536# define JSBEGINREQUEST_SUBSTITUTION(mycx)
1537# define JSENDREQUEST_SUBSTITUTION(mycx)
1542#define GETJSPTR_TYPE_A(thistype) \
1543 case FIELDTYPE_##thistype: { \
1544 thistype##Native *ptr; \
1546 if ((ptr = (thistype##Native *)JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(*(jsval *)(tg->JScript.JSglobal_return_val)))) == NULL) { \
1547 printf( "JS_GetPrivate failed in get_valueChanged_flag\n"); \
1548 JSENDREQUEST_SUBSTITUTION(cx) \
1552 tg->CRoutes.JSSFpointer = (void *)ptr; \
1553 touched = ptr->valueChanged; \
1557#define RESET_TOUCHED_TYPE_A(thistype) \
1558 case FIELDTYPE_##thistype: { \
1559 ((thistype##Native *)tg->CRoutes.JSSFpointer)->valueChanged = 0; \
1563#define GETJSPTR_TYPE_MF_A(thisMFtype,thisSFtype) \
1564 case FIELDTYPE_##thisMFtype: { \
1565 thisSFtype##Native *ptr; \
1566 jsval mainElement; \
1569 if (!JS_GetProperty(cx, JSVAL_TO_OBJECT(*(jsval *)(tg->JScript.JSglobal_return_val)), "length", &mainElement)) { \
1570 printf ("JS_GetProperty failed for \"length\" in get_valueChanged_flag\n"); \
1571 JSENDREQUEST_SUBSTITUTION(cx) \
1574 len = JSVAL_TO_INT(mainElement); \
1576 for (i = 0; i < len; i++) { \
1577 if (!JS_GetElement(cx, JSVAL_TO_OBJECT(*(jsval*)(tg->JScript.JSglobal_return_val)), i, &mainElement)) { \
1578 printf ("JS_GetElement failed for %d in get_valueChanged_flag\n",i); \
1579 JSENDREQUEST_SUBSTITUTION(cx) \
1582 if ((ptr = (thisSFtype##Native *)JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(mainElement))) == NULL) { \
1583 printf( "JS_GetPrivate failed for obj in setField_javascriptEventOut.\n"); \
1584 JSENDREQUEST_SUBSTITUTION(cx) \
1587 if (ptr->valueChanged > 0) touched = TRUE; \
1593#define RESET_TOUCHED_TYPE_MF_A(thisMFtype,thisSFtype) \
1594 case FIELDTYPE_##thisMFtype: { \
1595 thisSFtype##Native *ptr; \
1596 jsval mainElement; \
1600 cx = scriptcontrol->cx; \
1601 JSBEGINREQUEST_SUBSTITUTION(cx) \
1602 if (!JS_GetProperty(cx, JSVAL_TO_OBJECT(*(jsval*)(tg->JScript.JSglobal_return_val)), "length", &mainElement)) { \
1603 printf ("JS_GetProperty failed for \"length\" in get_valueChanged_flag\n"); \
1604 JSENDREQUEST_SUBSTITUTION(cx) \
1607 len = JSVAL_TO_INT(mainElement); \
1609 for (i = 0; i < len; i++) { \
1610 if (!JS_GetElement(cx, JSVAL_TO_OBJECT(*(jsval*)(tg->JScript.JSglobal_return_val)), i, &mainElement)) { \
1611 printf ("JS_GetElement failed for %d in get_valueChanged_flag\n",i); \
1612 JSENDREQUEST_SUBSTITUTION(cx) \
1615 if ((ptr = (thisSFtype##Native *)JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(mainElement))) == NULL) { \
1616 printf( "JS_GetPrivate failed for obj in setField_javascriptEventOut.\n"); \
1617 JSENDREQUEST_SUBSTITUTION(cx) \
1620 ptr->valueChanged = 0; \
1622 JSENDREQUEST_SUBSTITUTION(cx) \
1630OLDCODE #define savedBool Bool
1638#define GET_ECMA_TOUCHED(thistype) \
1639 case FIELDTYPE_SF##thistype: { \
1640 touched = findNameInECMATable( scriptcontrol->cx,fullname);\
1644#define GET_ECMA_MF_TOUCHED(thistype) \
1645 case FIELDTYPE_MF##thistype: {\
1646 jsval mainElement; \
1648 if (!JS_GetProperty(cx, JSVAL_TO_OBJECT(*(jsval*)(tg->JScript.JSglobal_return_val)), "MF_ECMA_has_changed", &mainElement)) { \
1649 printf ("JS_GetProperty failed for \"MF_ECMA_HAS_changed\" in get_valueChanged_flag\n"); \
1651 touched = JSVAL_TO_INT(mainElement);\
1655#define RESET_ECMA_MF_TOUCHED(thistype) \
1656 case FIELDTYPE_##thistype: {\
1657 jsval myv = INT_TO_JSVAL(0); \
1659 JSBEGINREQUEST_SUBSTITUTION(scriptcontrol->cx) \
1660 if (!JS_SetProperty(scriptcontrol->cx, JSVAL_TO_OBJECT(*(jsval*)(tg->JScript.JSglobal_return_val)), "MF_ECMA_has_changed", &myv)) { \
1661 printf( "JS_SetProperty failed for \"MF_ECMA_has_changed\" in RESET_ECMA_MF_TOUCHED.\n"); \
1667 JSENDREQUEST_SUBSTITUTION(scriptcontrol->cx) \
1671#define RESET_TOUCHED_TYPE_ECMA(thistype) \
1672 case FIELDTYPE_##thistype: { \
1673 JSBEGINREQUEST_SUBSTITUTION(scriptcontrol->cx) \
1674 resetNameInECMATable( scriptcontrol->cx,JSparamnames[fptr].name); \
1675 JSENDREQUEST_SUBSTITUTION(scriptcontrol->cx) \
1681OLDCODE #define Bool savedBool
1733int sm1_get_valueChanged_flag (
int fptr,
int actualscript) {
1738 JSObject *interpobj;
1747 scriptcontrol = getScriptControlIndex(actualscript);
1748 interpobj = (JSObject*)scriptcontrol->glob;
1749 cx = (JSContext*)scriptcontrol->cx;
1750 fullname = JSparamnames[fptr].name;
1752#if defined(JS_THREADSAFE)
1753 JS_BeginRequest(cx);
1756 printf (
"\ngetting property for fullname %s, cx %p, interpobj %d script %d, fptr %d (%s:%s)\n",
1757 fullname,cx,interpobj,actualscript, fptr,
1758 JSparamnames[fptr].name, FIELDTYPES[JSparamnames[fptr].type]);
1761 if (!JS_GetProperty(cx, interpobj ,fullname,tg->JScript.JSglobal_return_val)) {
1762 printf (
"cant get property for %s\n",fullname);
1763#if defined(JS_THREADSAFE)
1769 printf (
"so, property is %d (%p)\n",*(jsval*)tg->JScript.JSglobal_return_val,*(jsval *)tg->JScript.JSglobal_return_val);
1770 printf(
"get_valueChanged_flag: node type: %s name %s\n",FIELDTYPES[JSparamnames[fptr].type],JSparamnames[fptr].name);
1773 switch (JSparamnames[fptr].type) {
1775 GETJSPTR_TYPE_A(SFNode)
1782 GETJSPTR_TYPE_A(SFImage)
1787 GETJSPTR_TYPE_MF_A(MFNode,SFNode)
1788 GETJSPTR_TYPE_MF_A(MFVec2f,
SFVec2f)
1789 GETJSPTR_TYPE_MF_A(MFVec3f,
SFVec3f)
1790 GETJSPTR_TYPE_MF_A(MFVec4f,
SFVec4f)
1791 GETJSPTR_TYPE_MF_A(MFVec4d,
SFVec4d)
1793 GETJSPTR_TYPE_MF_A(MFColor,
SFColor)
1796 GET_ECMA_MF_TOUCHED(Int32)
1797 GET_ECMA_MF_TOUCHED(Bool)
1798 GET_ECMA_MF_TOUCHED(Time)
1799 GET_ECMA_MF_TOUCHED(Double)
1800 GET_ECMA_MF_TOUCHED(Float)
1801 GET_ECMA_MF_TOUCHED(String)
1803 GET_ECMA_TOUCHED(Int32)
1804 GET_ECMA_TOUCHED(Bool)
1805 GET_ECMA_TOUCHED(Float)
1806 GET_ECMA_TOUCHED(Time)
1807 GET_ECMA_TOUCHED(Double)
1808 GET_ECMA_TOUCHED(String)
1810 default: {printf (
"not handled yet in get_valueChanged_flag %s\n",FIELDTYPES[JSparamnames[fptr].type]);
1813#if defined(JS_THREADSAFE)
1819 if (JSparamnames[fptr].type == FIELDTYPE_MFString) {
1824 unsigned CRCCheck = 0;
1825 cx = p->ScriptControl[actualscript].cx;
1826#if defined(JS_THREADSAFE)
1827 JS_BeginRequest(cx);
1829 if (!JS_GetProperty(cx, JSglobal_return_val,
"length", &mainElement)) {
1830 printf (
"JS_GetProperty failed for length_flag\n");
1832 len = JSVAL_TO_INT(mainElement);
1834 for (i = 0; i < len; i++) {
1835 if (!JS_GetElement(cx, JSglobal_return_val, i, &mainElement)) {
1836 printf (
"JS_GetElement failed for %d in get_valueChanged_flag\n",i);
1839 CRCCheck += (unsigned) mainElement;
1850 printf (
"CRCcheck %u\n",CRCCheck);
1851#if defined(JS_THREADSAFE)
1865void sm1_resetScriptTouchedFlag(
int actualscript,
int fptr) {
1872 printf (
"resetScriptTouchedFlag, name %s type %s script %d, fptr %d\n",JSparamnames[fptr].name, stringFieldtypeType(JSparamnames[fptr].type), actualscript, fptr);
1874 scriptcontrol = getScriptControlIndex(actualscript);
1875 switch (JSparamnames[fptr].type) {
1877 RESET_TOUCHED_TYPE_A(SFNode)
1884 RESET_TOUCHED_TYPE_A(SFImage)
1887 RESET_TOUCHED_TYPE_MF_A(MFRotation,
SFRotation)
1888 RESET_TOUCHED_TYPE_MF_A(MFNode,SFNode)
1889 RESET_TOUCHED_TYPE_MF_A(MFVec2f,
SFVec2f)
1890 RESET_TOUCHED_TYPE_MF_A(MFVec3f,
SFVec3f)
1891 RESET_TOUCHED_TYPE_MF_A(MFVec4f,
SFVec4f)
1892 RESET_TOUCHED_TYPE_MF_A(MFVec4d,
SFVec4d)
1894 RESET_TOUCHED_TYPE_MF_A(MFColor,
SFColor)
1897 RESET_TOUCHED_TYPE_ECMA (SFInt32)
1898 RESET_TOUCHED_TYPE_ECMA (SFBool)
1899 RESET_TOUCHED_TYPE_ECMA (SFFloat)
1900 RESET_TOUCHED_TYPE_ECMA (SFTime)
1901 RESET_TOUCHED_TYPE_ECMA (SFDouble)
1902 RESET_TOUCHED_TYPE_ECMA (SFString)
1903 RESET_ECMA_MF_TOUCHED(MFInt32)
1904 RESET_ECMA_MF_TOUCHED(MFBool)
1905 RESET_ECMA_MF_TOUCHED(MFFloat)
1906 RESET_ECMA_MF_TOUCHED(MFTime)
1907 RESET_ECMA_MF_TOUCHED(MFString)
1910 default: {printf (
"can not reset touched_flag for %s\n",stringFieldtypeType(JSparamnames[fptr].type));
1916int sm2_get_valueChanged_flag (
int fptr,
int actualscript){
1919 int type, kind, ifield, found;
1926 scriptcontrol = getScriptControlIndex(actualscript);
1927 script = scriptcontrol->script;
1928 node = script->ShaderScriptNode;
1929 fullname = JSparamnames[fptr].name;
1930 found = getFieldFromNodeAndName(node,fullname,&type,&kind,&ifield,&value);
1932 field = Shader_Script_getScriptField(script, ifield);
1933 gglobal()->JScript.JSglobal_return_val = (
void *)&field->value;
1934 return field->valueChanged;
1936 gglobal()->JScript.JSglobal_return_val = NULL;
1939void sm2_resetScriptTouchedFlag(
int actualscript,
int fptr){
1942 int type, kind, ifield, found;
1949 scriptcontrol = getScriptControlIndex(actualscript);
1950 script = scriptcontrol->script;
1951 node = script->ShaderScriptNode;
1952 fullname = JSparamnames[fptr].name;
1953 found = getFieldFromNodeAndName(node,fullname,&type,&kind,&ifield,&value);
1955 field = Shader_Script_getScriptField(script, ifield);
1956 field->valueChanged = 0;
1961int sm_get_valueChanged_flag (
int fptr,
int actualscript){
1962 if(SM_method() == 2)
1963 return sm2_get_valueChanged_flag(fptr,actualscript);
1965 return sm1_get_valueChanged_flag(fptr,actualscript);
1967void sm_resetScriptTouchedFlag(
int actualscript,
int fptr){
1968 if(SM_method() == 2)
1969 sm2_resetScriptTouchedFlag(actualscript,fptr);
1971 sm1_resetScriptTouchedFlag(actualscript,fptr);
1974int jsActualrunScript(
int num,
char *script);
1975void sm_JSInitializeScriptAndFields (
int num) {
1989 int i,nfields,kind,itype;
1990 const char *fieldname;
1991 char longfieldname[256];
1995 ScriptControl = getScriptControlIndex(num);
1998 if(1)
if (!jsActualrunScript(num, ScriptControl->scriptText)) {
1999 ConsoleMessage (
"JSInitializeScriptAndFields, script failure\n");
2000 ScriptControl->scriptOK = FALSE;
2001 ScriptControl->_initialized = TRUE;
2011 script = ScriptControl->script;
2013 nfields = Shader_Script_getScriptFieldCount(script);
2014 for(i=0;i<nfields;i++){
2015 field = Shader_Script_getScriptField(script,i);
2016 fieldname = ScriptFieldDecl_getName(field);
2017 kind = ScriptFieldDecl_getMode(field);
2018 itype = ScriptFieldDecl_getType(field);
2019 longfieldname[0] = 0;
2020 if(kind == PKW_inputOnly)
2021 strcat(longfieldname,
"__eventIn_Value_");
2022 strcat(longfieldname,fieldname);
2023 if(SM_method() == 2)
2024 InitScriptFieldB(num, kind, itype, longfieldname, field->value);
2026 InitScriptField(num, kind, itype, longfieldname, field->value);
2030 if(0)
if (!jsActualrunScript(num, ScriptControl->scriptText)) {
2031 ConsoleMessage (
"JSInitializeScriptAndFields, script failure\n");
2032 ScriptControl->scriptOK = FALSE;
2033 ScriptControl->_initialized = TRUE;
2038 ScriptControl->_initialized = TRUE;
2039 ScriptControl->scriptOK = TRUE;
2046void sm_SaveScriptField (
int num, indexT kind, indexT type,
const char* field,
union anyVrml value) {
2063void getJSMultiNumType (JSContext *cx,
struct Multi_Vec3f *tn,
int eletype) {
2074#if JS_VERSION >= 185
2087 elesize = returnElementLength(eletype) * returnElementRowSize(eletype);
2091 #ifdef SETFIELDVERBOSE
2092 printf (
"getJSMultiNumType, JSCreate_global_return_val %u, JSglobal_return_val %u\n",
2093 (
unsigned int) JSVAL_TO_INT(*(jsval *)tg->jsVRMLBrowser.JSCreate_global_return_val),
2094 (
unsigned int) JSVAL_TO_INT(*(jsval *)tg->JScript.JSglobal_return_val));
2097 if (JSVAL_TO_INT(*(jsval*)(tg->jsVRMLBrowser.JSCreate_global_return_val)) != 0) {
2098 myJSVal = (jsval *)tg->jsVRMLBrowser.JSCreate_global_return_val;
2099 *(jsval *)(tg->jsVRMLBrowser.JSCreate_global_return_val) = INT_TO_JSVAL(0);
2101 #ifdef SETFIELDVERBOSE
2102 printf (
"getJSMultiNumType: using JSCreate_global_return_val\n");
2105 #ifdef SETFIELDVERBOSE
2106 printf (
"getJSMultiNumType: using JSglobal_return_val\n");
2109 myJSVal = tg->JScript.JSglobal_return_val;
2112 if (!JSVAL_IS_OBJECT(*myJSVal)) {
2113 printf (
"getJSMultiNumType - did not get an object\n");
2117 #ifdef SETFIELDVERBOSE
2118 printf (
"getJSMultiNumType, tn %p dest has %s size %d\n",tn,stringFieldtypeType(eletype), elesize);
2120 printf(
"getJSMulitNumType, node type of myJSVal is :");
2121 printJSNodeType (cx,myJSVal);
2124 if (!JS_GetProperty(cx, JSVAL_TO_OBJECT(*myJSVal), MF_LENGTH_FIELD, &mainElement)) {
2125 printf (
"JS_GetProperty failed for \"%s\" in getJSMultiNumType\n", MF_LENGTH_FIELD);
2128 len = JSVAL_TO_INT(mainElement);
2129 #ifdef SETFIELDVERBOSE
2130 printf (
"getmuiltie length of grv is %d old len is %d\n",len,tn->n);
2140 tn->p = MALLOC (
struct SFVec3f *, (
unsigned)(elesize*len));
2142 #ifdef SETFIELDVERBOSE
2143 printf (
"MALLOCing memory for elesize %d len %d new pointer now is %p\n",elesize,len,tn->p);
2147 if (eletype == FIELDTYPE_SFString) {
2148 #ifdef SETFIELDVERBOSE
2149 printf (
"getJSMultiNumType, this is a MFString, so making tiny strings for now\n");
2153 for (i=0; i<len; i++) {
2154 *ms = newASCIIString (
"(getJSMultiNumType null)");
2161 fl = (
float *) tn->p;
2163 dl = (
double *) tn->p;
2168 for (i = 0; i < len; i++) {
2169 if (!JS_GetElement(cx, JSVAL_TO_OBJECT(*myJSVal), i, &mainElement)) {
2170 printf (
"WARNING: JS_GetElement failed for %d in getJSMultiNumType\n",i);
2172 case FIELDTYPE_SFNode:
2173 *nl = 0; nl++;
break;
2174 case FIELDTYPE_SFInt32:
2176 case FIELDTYPE_SFDouble:
2177 case FIELDTYPE_SFTime:
2178 *dl=0.0; dl++;
break;
2179 case FIELDTYPE_SFFloat:
2180 *fl = (float) 0.0; fl++;
break;
2181 case FIELDTYPE_SFVec2f:
2182 *fl = (float) 0.0; fl++; *fl = (float) 0.0; fl++;
break;
2183 case FIELDTYPE_SFVec3f:
2184 case FIELDTYPE_SFColor:
2185 *fl = (float) 0.0; fl++; *fl = (float) 0.0; fl++; *fl = (float) 0.0; fl++;
break;
2186 case FIELDTYPE_SFRotation:
2187 *fl = (float) 0.0; fl++; *fl = (float) 0.0; fl++; *fl = (float) 0.0; fl++; *fl = (float) 0.0; fl++;
break;
2188 case FIELDTYPE_SFString:
2189 verify_Uni_String (*ms,
"(empty value)"); ms++;
break;
2191 default : {printf (
"getJSMultiNumType unhandled eletype: %d\n",
2197 #ifdef SETFIELDVERBOSE
2200 _tmpStr = JS_ValueToString(cx, mainElement);
2202 strp = JS_GetStringBytes(_tmpStr);
2204 strp = strpp = JS_EncodeString(cx,_tmpStr);
2206 printf (
"sub element %d is \"%s\" \n",i,strp);
2207#if JS_VERSION >= 185
2211 if (JSVAL_IS_OBJECT(mainElement)) printf (
"sub element %d is an OBJECT\n",i);
2212 if (JSVAL_IS_PRIMITIVE(mainElement)) printf (
"sub element %d is an PRIMITIVE\n",i);
2217 case FIELDTYPE_SFNode: {
2219 if (JS_InstanceOf (cx, JSVAL_TO_OBJECT(mainElement), &SFNodeClass, NULL)) {
2223 if ((_vec = (
SFNodeNative *)JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(mainElement))) == NULL) {
2224 printf (
"error getting native\n");
2232 printf (
"hmm - not an SFNode class\n");
2239 case FIELDTYPE_SFInt32: {
2240 if (!JS_ValueToInt32(cx, mainElement ,il)) {
2247 case FIELDTYPE_SFDouble:
2248 case FIELDTYPE_SFTime: {
2249 if (!JS_ValueToNumber(cx, mainElement ,dl)) *dl=0.0;
2253 case FIELDTYPE_SFFloat: {
2254 if (!JS_ValueToNumber(cx, mainElement, &dtmp)) dtmp=0.0;
2260 case FIELDTYPE_SFVec2f: {
2261 if (JSVAL_IS_OBJECT(mainElement)) {
2262 if ((sfvec2f = (
SFVec2fNative *)JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(mainElement))) == NULL) {
2263 printf(
"JS_GetPrivate failed for obj in setField_javascriptEventOut.\n");
2266 memcpy ((
void *)fl, (
void *)&(sfvec2f->v),2*
sizeof(
float));
2270 *fl = (float) 0.0; fl++; *fl = (float) 0.0; fl++;
2274 case FIELDTYPE_SFVec3f:
2275 case FIELDTYPE_SFColor: {
2276 if (JSVAL_IS_OBJECT(mainElement)) {
2277 if ((sfvec3f = (
SFVec3fNative *)JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(mainElement))) == NULL) {
2278 printf(
"JS_GetPrivate failed for obj in setField_javascriptEventOut.\n");
2281 memcpy ((
void *)fl, (
void *)&(sfvec3f->v),3*
sizeof(
float));
2285 *fl = (float) 0.0; fl++;
2286 *fl = (float) 0.0; fl++;
2287 *fl = (float) 0.0; fl++;
2291 case FIELDTYPE_SFRotation: {
2292 if (JSVAL_IS_OBJECT(mainElement)) {
2293 if ((sfrotation = (
SFRotationNative *)JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(mainElement))) == NULL) {
2294 printf(
"JS_GetPrivate failed for obj in setField_javascriptEventOut.\n");
2297 memcpy ((
void *)fl, (
void *)&(sfrotation->v),4*
sizeof(
float));
2301 *fl = (float) 0.0; fl++; *fl = (float) 0.0; fl++;
2302 *fl = (float) 0.0; fl++; *fl = (float) 0.0; fl++;
2307 case FIELDTYPE_SFString: {
2310 strval = JS_ValueToString(cx, mainElement);
2312 strp = JS_GetStringBytes(strval);
2314 strp = strpp = JS_EncodeString(cx,strval);
2318 #ifdef SETFIELDVERBOSE
2319 printf (
"getJSMultiNumType, got string %s\n",strp);
2323 verify_Uni_String (*ms,strp);
2325#if JS_VERSION >= 185
2331 default : {printf (
"getJSMultiNumType unhandled eletype: %d\n",
2339 #ifdef SETFIELDVERBOSE
2340 printf (
"getJSMultiNumType, setting old length %d to length %d\n",tn->n, len);
2350void getMFStringtype (JSContext *cx, jsval *from,
struct Multi_String *to) {
2355 char *valStr, *OldvalStr;
2366 if (!JS_ValueToObject(cx, *from, &obj))
2367 printf (
"JS_ValueToObject failed in getMFStringtype\n");
2369 if (!JS_GetProperty(cx, obj, MF_LENGTH_FIELD, &_v)) {
2370 printf (
"JS_GetProperty failed for \"%s\" in getMFStringtype.\n", MF_LENGTH_FIELD);
2373 newlen = JSVAL_TO_INT(_v);
2379 if (newlen > oldlen) {
2382 to->p = MALLOC(
struct Uni_String **, newlen *
sizeof(to->p));
2386 for (count = 0; count <oldlen; count ++) {
2394 for (count = oldlen; count < newlen; count ++) {
2400 *newp = newASCIIString(
"");
2419 for (i = 0; i < newlen; i++) {
2421 OldvalStr = svptr[i]->strptr;
2425 if (!JS_GetElement(cx, obj, i, &_v)) {
2427 "JS_GetElement failed for %d in getMFStringtype\n",i);
2430 strval = JS_ValueToString(cx, _v);
2432 valStr = JS_GetStringBytes(strval);
2434 valStr = JS_EncodeString(cx,strval);
2440 if (strcmp(valStr,OldvalStr) != 0) {
2442 svptr[i] = newASCIIString(valStr);
2444#if JS_VERSION >= 185
2461void setField_javascriptEventOut(
struct X3D_Node *tn,
unsigned int tptr,
int fieldType,
unsigned len,
int extraData, JSContext *scriptContext) {
2468#if JS_VERSION >= 185
2476 memptr = offsetPointer_deref(
char *, tn, tptr);
2478 #ifdef SETFIELDVERBOSE
2479 strval = JS_ValueToString(scriptContext, *(jsval *)tg->JScript.JSglobal_return_val);
2481 strp = JS_GetStringBytes(strval);
2483 strp = strpp = JS_EncodeString(scriptContext,strval);
2485 printf (
"start of setField_javascriptEventOut, to %ld:%d = %p, fieldtype %d string %s\n",(
long)tn, tptr, memptr, fieldType, strp);
2486#if JS_VERSION >= 185
2487 JS_free(scriptContext,strpp);
2491#define GETJSVAL_TYPE_A(thistype,field) \
2492 case FIELDTYPE_##thistype: { \
2494 memcpy ((void *)memptr, (void *) &(((thistype##Native *)tg->CRoutes.JSSFpointer)->field),len); \
2498#define GETJSVAL_TYPE_MF_A(MFtype,SFtype) \
2499 case FIELDTYPE_##MFtype: {getJSMultiNumType (scriptContext, (struct Multi_Vec3f *)memptr,FIELDTYPE_##SFtype); break;}
2501 switch (fieldType) {
2514 GETJSVAL_TYPE_MF_A(MFVec2d,
SFVec2d)
2515 GETJSVAL_TYPE_MF_A(MFVec3d,
SFVec3d)
2516 GETJSVAL_TYPE_MF_A(MFVec4d,
SFVec4d)
2517 GETJSVAL_TYPE_MF_A(MFVec2f,
SFVec2f)
2518 GETJSVAL_TYPE_MF_A(MFVec3f,
SFVec3f)
2519 GETJSVAL_TYPE_MF_A(MFVec4f,
SFVec4f)
2520 GETJSVAL_TYPE_MF_A(MFColor,
SFColor)
2524 case FIELDTYPE_SFInt32:
2525 case FIELDTYPE_SFBool: {
2526 if (!JS_ValueToInt32(scriptContext, *(jsval*)(tg->JScript.JSglobal_return_val),&ival)) {
2530 memcpy ((
void *)memptr, (
void *)&ival,len);
2534 case FIELDTYPE_SFDouble:
2535 case FIELDTYPE_SFTime: {
2536 if (!JS_ValueToNumber(scriptContext, *(jsval*)(tg->JScript.JSglobal_return_val),&tval)) tval=0.0;
2537 memcpy ((
void *)memptr, (
void *)&tval,len);
2541 case FIELDTYPE_SFFloat: {
2542 if (!JS_ValueToNumber(scriptContext, *(jsval*)(tg->JScript.JSglobal_return_val),&tval)) tval=0.0;
2544 fl[0] = (float) tval;
2545 memcpy ((
void *)memptr, (
void *)fl,len);
2549 case FIELDTYPE_SFImage: {
2551 strval = JS_ValueToString(scriptContext, *(jsval*)(tg->JScript.JSglobal_return_val));
2553 strp = JS_GetStringBytes(strval);
2555 strp = strpp = JS_EncodeString(scriptContext,strval);
2558 Parser_scanStringValueToMem(tn, tptr, FIELDTYPE_SFImage, strp, FALSE);
2559#if JS_VERSION >= 185
2560 JS_free(scriptContext,strpp);
2565 case FIELDTYPE_SFString: {
2569 strval = JS_ValueToString(scriptContext, *(jsval*)(tg->JScript.JSglobal_return_val));
2571 strp = JS_GetStringBytes(strval);
2573 strp = strpp = JS_EncodeString(scriptContext,strval);
2579 newptr = (intptr_t *)memptr;
2581 verify_Uni_String (ms,strp);
2582#if JS_VERSION >= 185
2583 JS_free(scriptContext,strpp);
2590 case FIELDTYPE_MFFloat: {getJSMultiNumType (scriptContext, (
struct Multi_Vec3f *)memptr,FIELDTYPE_SFFloat);
break;}
2591 case FIELDTYPE_MFInt32: {getJSMultiNumType (scriptContext, (
struct Multi_Vec3f *)memptr,FIELDTYPE_SFInt32);
break;}
2592 case FIELDTYPE_MFTime: {getJSMultiNumType (scriptContext, (
struct Multi_Vec3f *)memptr,FIELDTYPE_SFTime);
break;}
2593 case FIELDTYPE_MFDouble: {getJSMultiNumType (scriptContext, (
struct Multi_Vec3f *)memptr,FIELDTYPE_SFDouble);
break;}
2594 case FIELDTYPE_MFNode: {
2597 strval = JS_ValueToString(scriptContext, *(jsval*)(tg->JScript.JSglobal_return_val));
2599 strp = JS_GetStringBytes(strval);
2601 strp = strpp = JS_EncodeString(scriptContext,strval);
2605 while ((*strp >
'\0') && (*strp <=
' ')) strp ++;
2607 if (*strp ==
'[') strp ++;
2608 while ((*strp >
'\0') && (*strp <=
' ')) strp ++;
2612 mynode = X3D_NODE(atol(strp));
2613#if JS_VERSION >= 185
2614 JS_free(scriptContext,strpp);
2622 getMFNodetype (mynode,(
struct Multi_Node *)memptr,X3D_NODE(tn),extraData);
break;
2624 case FIELDTYPE_MFString: {
2627 (jsval *)tg->JScript.JSglobal_return_val,
2632 case FIELDTYPE_SFNode: {
2636 memcpy ((
void *)memptr, (
void *) &(((
SFNodeNative *)tg->CRoutes.JSSFpointer)->handle),returnElementLength(FIELDTYPE_SFNode));
2644 default: { printf(
"WARNING: unhandled from type %s\n", stringFieldtypeType(fieldType));
2648 #ifdef SETFIELDVERBOSE
2649 printf (
"done setField_javascriptEventOut\n");
2650 if (fieldType == FIELDTYPE_MFInt32) {
2651 printf (
"setField_javascriptEventOut, checking the pointers...\n");
2652 printf (
"node type is %s\n",stringNodeType(X3D_NODE(tn)->_nodeType));
2654 if (fieldType == FIELDTYPE_SFNode) {
2655 printf (
"setField_javascriptEventOut, checking the pointers...\n");
2656 printf (
"node type is %s\n",stringNodeType(X3D_NODE(tn)->_nodeType));
2662void Parser_scanStringValueToMem_B(
union anyVrml* any, indexT ctype,
const char *value,
int isXML);
2664void setField_javascriptEventOut_B(
union anyVrml* any,
2665 int fieldType,
unsigned len,
int extraData, JSContext *scriptContext)
2676#if JS_VERSION >= 185
2684 memptr = (
char *)any;
2686 #ifdef SETFIELDVERBOSE
2687 strval = JS_ValueToString(scriptContext, *(jsval *)tg->JScript.JSglobal_return_val);
2689 strp = JS_GetStringBytes(strval);
2691 strp = strpp = JS_EncodeString(scriptContext,strval);
2693 printf (
"start of setField_javascriptEventOut, to %ld:%d = %p, fieldtype %d string %s\n",(
long)any, fieldType, memptr, fieldType, strp);
2694#if JS_VERSION >= 185
2695 JS_free(scriptContext,strpp);
2699#define GETJSVAL_TYPE_A(thistype,field) \
2700 case FIELDTYPE_##thistype: { \
2702 memcpy ((void *)memptr, (void *) &(((thistype##Native *)tg->CRoutes.JSSFpointer)->field),len); \
2706#define GETJSVAL_TYPE_MF_A(MFtype,SFtype) \
2707 case FIELDTYPE_##MFtype: {getJSMultiNumType (scriptContext, (struct Multi_Vec3f *)memptr,FIELDTYPE_##SFtype); break;}
2709 switch (fieldType) {
2722 GETJSVAL_TYPE_MF_A(MFVec2d,
SFVec2d)
2723 GETJSVAL_TYPE_MF_A(MFVec3d,
SFVec3d)
2724 GETJSVAL_TYPE_MF_A(MFVec4d,
SFVec4d)
2725 GETJSVAL_TYPE_MF_A(MFVec2f,
SFVec2f)
2726 GETJSVAL_TYPE_MF_A(MFVec3f,
SFVec3f)
2727 GETJSVAL_TYPE_MF_A(MFVec4f,
SFVec4f)
2728 GETJSVAL_TYPE_MF_A(MFColor,
SFColor)
2732 case FIELDTYPE_SFInt32:
2733 case FIELDTYPE_SFBool: {
2734 if (!JS_ValueToInt32(scriptContext, *(jsval*)(tg->JScript.JSglobal_return_val),&ival)) {
2738 memcpy ((
void *)memptr, (
void *)&ival,len);
2742 case FIELDTYPE_SFDouble:
2743 case FIELDTYPE_SFTime: {
2744 if (!JS_ValueToNumber(scriptContext, *(jsval*)(tg->JScript.JSglobal_return_val),&tval)) tval=0.0;
2745 memcpy ((
void *)memptr, (
void *)&tval,len);
2749 case FIELDTYPE_SFFloat: {
2750 if (!JS_ValueToNumber(scriptContext, *(jsval*)(tg->JScript.JSglobal_return_val),&tval)) tval=0.0;
2752 fl[0] = (float) tval;
2753 memcpy ((
void *)memptr, (
void *)fl,len);
2757 case FIELDTYPE_SFImage: {
2759 strval = JS_ValueToString(scriptContext, *(jsval*)(tg->JScript.JSglobal_return_val));
2761 strp = JS_GetStringBytes(strval);
2763 strp = strpp = JS_EncodeString(scriptContext,strval);
2766 Parser_scanStringValueToMem_B(any, FIELDTYPE_SFImage, strp, FALSE);
2767#if JS_VERSION >= 185
2768 JS_free(scriptContext,strpp);
2773 case FIELDTYPE_SFString: {
2777 strval = JS_ValueToString(scriptContext, *(jsval*)(tg->JScript.JSglobal_return_val));
2779 strp = JS_GetStringBytes(strval);
2781 strp = strpp = JS_EncodeString(scriptContext,strval);
2787 newptr = (intptr_t *)memptr;
2791 *newptr = (intptr_t) ms;
2794 ms->touched = FALSE;
2796 verify_Uni_String (ms,strp);
2797#if JS_VERSION >= 185
2798 JS_free(scriptContext,strpp);
2805 case FIELDTYPE_MFFloat: {getJSMultiNumType (scriptContext, (
struct Multi_Vec3f *)memptr,FIELDTYPE_SFFloat);
break;}
2806 case FIELDTYPE_MFInt32: {getJSMultiNumType (scriptContext, (
struct Multi_Vec3f *)memptr,FIELDTYPE_SFInt32);
break;}
2807 case FIELDTYPE_MFTime: {getJSMultiNumType (scriptContext, (
struct Multi_Vec3f *)memptr,FIELDTYPE_SFTime);
break;}
2808 case FIELDTYPE_MFDouble: {getJSMultiNumType (scriptContext, (
struct Multi_Vec3f *)memptr,FIELDTYPE_SFDouble);
break;}
2809 case FIELDTYPE_MFNode: {
2812 strval = JS_ValueToString(scriptContext, *(jsval*)(tg->JScript.JSglobal_return_val));
2814 strp = JS_GetStringBytes(strval);
2816 strp = strpp = JS_EncodeString(scriptContext,strval);
2820 while ((*strp >
'\0') && (*strp <=
' ')) strp ++;
2822 if (*strp ==
'[') strp ++;
2823 while ((*strp >
'\0') && (*strp <=
' ')) strp ++;
2827 mynode = X3D_NODE(atol(strp));
2828#if JS_VERSION >= 185
2829 JS_free(scriptContext,strpp);
2840 any->mfnode.p[0] = mynode;
2844 case FIELDTYPE_MFString: {
2847 (jsval *)tg->JScript.JSglobal_return_val,
2852 case FIELDTYPE_SFNode: {
2856 memcpy ((
void *)memptr, (
void *) &(((
SFNodeNative *)tg->CRoutes.JSSFpointer)->handle),returnElementLength(FIELDTYPE_SFNode));
2864 default: { printf(
"WARNING: unhandled from type %s\n", stringFieldtypeType(fieldType));
2868 #ifdef SETFIELDVERBOSE
2869 printf (
"done setField_javascriptEventOut\n");
2870 if (fieldType == FIELDTYPE_MFInt32) {
2871 printf (
"setField_javascriptEventOut, checking the pointers...\n");
2872 printf (
"node type is %s\n",stringNodeType(X3D_NODE(any)->_nodeType));
2874 if (fieldType == FIELDTYPE_SFNode) {
2875 printf (
"setField_javascriptEventOut, checking the pointers...\n");
2876 printf (
"node type is %s\n",stringNodeType(X3D_NODE(any)->_nodeType));
2882void sm_js_setField_javascriptEventOut(
struct X3D_Node *tn,
unsigned int tptr,
int fieldType,
unsigned len,
int extraData,
int actualscript) {
2885 scriptcontrol = getScriptControlIndex(actualscript);
2886#if defined(JS_THREADSAFE)
2887 JS_BeginRequest(scriptcontrol->cx);
2889 setField_javascriptEventOut(tn,tptr,fieldType, len, extraData, scriptcontrol->cx);
2890#if defined(JS_THREADSAFE)
2891 JS_EndRequest(scriptcontrol->cx);
2895void sm_js_setField_javascriptEventOut_B(
union anyVrml* any,
int fieldType,
unsigned len,
int extraData,
int actualscript){
2898 scriptcontrol = getScriptControlIndex(actualscript);
2899#if defined(JS_THREADSAFE)
2900 JS_BeginRequest(scriptcontrol->cx);
2902 setField_javascriptEventOut_B(any,fieldType, len, extraData, scriptcontrol->cx);
2904#if defined(JS_THREADSAFE)
2905 JS_EndRequest(scriptcontrol->cx);
2912void sm_set_one_ECMAtype (
int tonode,
int toname,
int dataType,
void *Data,
int datalen) {
2913 char scriptline[256];
2921 #ifdef SETFIELDVERBOSE
2922 printf (
"set_one_ECMAtype, to %d namepointer %d, fieldname %s, datatype %d length %d\n",
2923 tonode,toname,JSparamnames[toname].name,dataType,datalen);
2925 ScriptControl = getScriptControlIndex(tonode);
2927 cx = (JSContext*)ScriptControl->cx;
2928 obj = (JSObject*)ScriptControl->glob;
2930#if defined(JS_THREADSAFE)
2931 JS_BeginRequest(cx);
2937 kind = JSparamnames[toname].kind;
2938 if(SM_method() == 2){
2939 int type, iifield, *valueChanged, ifound;
2943 fieldname = JSparamnames[toname].name;
2945 ifound = getFieldFromScript(script,fieldname,&type,&kind,&iifield,&value,&valueChanged);
2946 if(ifound && type == dataType && isSFType(type)){
2950 shallow_copy_field(type,any,value);
2953 (*valueChanged) = 1;
2955 ConsoleMessage(
"sm_set_one_ECMAtype did not find field %s type %d\n",fieldname, dataType);
2960 X3D_ECMA_TO_JS(cx, Data, datalen, dataType, &newval);
2964 if(kind == PKW_inputOnly)
2965 strcat(scriptline,
"__eventIn_Value_");
2967 strcat(scriptline,JSparamnames[toname].name);
2968 #ifdef SETFIELDVERBOSE
2969 printf (
"set_one_ECMAtype, calling JS_DefineProperty on name %s obj %u, setting setECMANative, 0 \n",scriptline,obj);
2972 if (!JS_DefineProperty(cx,obj, scriptline, newval, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB3, JSPROP_PERMANENT)) {
2973 printf(
"JS_DefineProperty failed for \"ECMA in\" at %s:%d.\n",__FILE__,__LINE__);
2974#if defined(JS_THREADSAFE)
2984 COMPILE_FUNCTION_IF_NEEDED_SET(toname,kind)
2987 RUN_FUNCTION (toname)
2990#if defined(JS_THREADSAFE)
3004void sm_setScriptECMAtype (
int num) {
3010 struct CRStruct *CRoutes = getCRoutes();
3013 fn = offsetPointer_deref(
void *, CRoutes[num].routeFromNode, CRoutes[num].fnptr);
3014 len = CRoutes[num].len;
3016 for (to_counter = 0; to_counter < CRoutes[num].tonode_count; to_counter++) {
3019 to_ptr = &(CRoutes[num].tonodes[to_counter]);
3020 myObj = X3D_SCRIPT(to_ptr->routeToNode)->__scriptObj;
3022 tptr = to_ptr->foffset;
3023 set_one_ECMAtype (myObj->num, tptr, JSparamnames[tptr].type, fn,len);
3029void sm_set_one_MFElementType(
int tonode,
int toname,
int dataType,
void *Data,
int datalen) {
3034 char scriptline[20000];
3048 ScriptControl = getScriptControlIndex(tonode);
3049 cx = (JSContext*)ScriptControl->cx;
3050 obj = (JSObject*)ScriptControl->glob;
3052#if defined(JS_THREADSAFE)
3053 JS_BeginRequest(cx);
3056 kind = JSparamnames[toname].kind;
3057 if(SM_method() == 2){
3058 int type, iifield, *valueChanged, ifound;
3062 fieldname = JSparamnames[toname].name;
3064 ifound = getFieldFromScript(script,fieldname,&type,&kind,&iifield,&value,&valueChanged);
3065 if(ifound && type == dataType && !isSFType(type)){
3068 any.mfbool.n = datalen;
3069 any.mfbool.p = Data;
3074 shallow_copy_field(type,&any,value);
3081 (*valueChanged) = 1;
3083 ConsoleMessage(
"sm_set_one_MFElementType did not find field %s type %d\n",fieldname, dataType);
3089 COMPILE_FUNCTION_IF_NEEDED_SET(toname,kind)
3090 RUN_FUNCTION(toname)
3097 case FIELDTYPE_MFRotation: {
3098 JSObject *newMFObject;
3099 JSObject *newSFObject;
3101 float *fp, *fp_in=(
float *)Data;
3104 newMFObject = JS_ConstructObjectFw(cx, &MFRotationClass, NULL ,JS_GetParentFw(cx, obj));
3105 ADD_ROOT (cx, newMFObject)
3108 DEFINE_LENGTH_NORV(cx,newMFObject,datalen)
3111 elementlen = (int)
sizeof (
float);
3112 for (x=0; x<datalen; x++) {
3114 newSFObject = JS_ConstructObjectFw(cx,&SFRotationClass,NULL, newMFObject);
3115 if ((SFRPptr = (
SFRotationNative *)JS_GetPrivateFw(cx, newSFObject)) == NULL) {
3116 ConsoleMessage (
"failure in getting SF class at %s:%d\n",__FILE__,__LINE__);
3117#if defined(JS_THREADSAFE)
3124 fp = (
float *)fp_in; SFRPptr->v.c[0] = *fp; fp_in = offsetPointer_deref(
float *,fp_in,elementlen);
3125 fp = (
float *)fp_in; SFRPptr->v.c[1] = *fp; fp_in = offsetPointer_deref(
float *,fp_in,elementlen);
3126 fp = (
float *)fp_in; SFRPptr->v.c[2] = *fp; fp_in = offsetPointer_deref(
float *,fp_in,elementlen);
3127 fp = (
float *)fp_in; SFRPptr->v.c[3] = *fp; fp_in = offsetPointer_deref(
float *,fp_in,elementlen);
3130 if (!JS_DefineElement(cx, newMFObject, (jsint) x, OBJECT_TO_JSVAL(newSFObject),
3131 JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB3, JSPROP_ENUMERATE)) {
3132 printf(
"failure in inserting SF class at %s:%d\n",__FILE__,__LINE__);
3137 SET_LENGTH (cx,newMFObject,datalen)
3140 SET_EVENTIN_VALUE (cx,obj,toname,newMFObject)
3143 COMPILE_FUNCTION_IF_NEEDED_SET(toname,kind)
3144 RUN_FUNCTION(toname)
3148 case FIELDTYPE_MFVec3f: {
3149 JSObject *newMFObject;
3150 JSObject *newSFObject;
3152 float *fp, *fp_in=(
float *)Data;
3155 newMFObject = JS_ConstructObjectFw(cx, &MFVec3fClass, NULL ,JS_GetParentFw(cx, obj));
3156 ADD_ROOT (cx, newMFObject)
3159 DEFINE_LENGTH_NORV(cx,newMFObject,datalen)
3162 elementlen = (int)
sizeof (
float);
3163 for (x=0; x<datalen; x++) {
3165 newSFObject = JS_ConstructObjectFw(cx,&SFVec3fClass,NULL, newMFObject);
3166 if ((SFRPptr = (
SFVec3fNative *)JS_GetPrivateFw(cx, newSFObject)) == NULL) {
3167 ConsoleMessage (
"failure in getting SF class at %s:%d\n",__FILE__,__LINE__);
3168#if defined(JS_THREADSAFE)
3175 fp = (
float *)fp_in; SFRPptr->v.c[0] = *fp; fp_in = offsetPointer_deref(
float *,fp_in,elementlen);
3176 fp = (
float *)fp_in; SFRPptr->v.c[1] = *fp; fp_in = offsetPointer_deref(
float *,fp_in,elementlen);
3177 fp = (
float *)fp_in; SFRPptr->v.c[2] = *fp; fp_in = offsetPointer_deref(
float *,fp_in,elementlen);
3180 if (!JS_DefineElement(cx, newMFObject, (jsint) x, OBJECT_TO_JSVAL(newSFObject),
3181 JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB3, JSPROP_ENUMERATE)) {
3182 printf(
"failure in inserting SF class at %s:%d\n",__FILE__,__LINE__);
3187 SET_LENGTH (cx,newMFObject,datalen)
3190 SET_EVENTIN_VALUE (cx,obj,toname,newMFObject)
3193 COMPILE_FUNCTION_IF_NEEDED_SET(toname,kind)
3194 RUN_FUNCTION(toname)
3198 case FIELDTYPE_MFColor: {
3199 JSObject *newMFObject;
3200 JSObject *newSFObject;
3202 float *fp, *fp_in=(
float *)Data;
3205 newMFObject = JS_ConstructObjectFw(cx, &MFColorClass, NULL ,JS_GetParentFw(cx, obj));
3206 ADD_ROOT (cx, newMFObject)
3209 DEFINE_LENGTH_NORV(cx,newMFObject,datalen)
3212 elementlen = (int)
sizeof (
float);
3213 for (x=0; x<datalen; x++) {
3215 newSFObject = JS_ConstructObjectFw(cx,&SFColorClass,NULL, newMFObject);
3216 if ((SFRPptr = (
SFColorNative *)JS_GetPrivateFw(cx, newSFObject)) == NULL) {
3217 ConsoleMessage (
"failure in getting SF class at %s:%d\n",__FILE__,__LINE__);
3218#if defined(JS_THREADSAFE)
3225 fp = (
float *)fp_in; SFRPptr->v.c[0] = *fp; fp_in = offsetPointer_deref(
float *,fp_in,elementlen);
3226 fp = (
float *)fp_in; SFRPptr->v.c[1] = *fp; fp_in = offsetPointer_deref(
float *,fp_in,elementlen);
3227 fp = (
float *)fp_in; SFRPptr->v.c[2] = *fp; fp_in = offsetPointer_deref(
float *,fp_in,elementlen);
3230 if (!JS_DefineElement(cx, newMFObject, (jsint) x, OBJECT_TO_JSVAL(newSFObject),
3231 JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB3, JSPROP_ENUMERATE)) {
3232 printf(
"failure in inserting SF class at %s:%d\n",__FILE__,__LINE__);
3237 SET_LENGTH (cx,newMFObject,datalen)
3240 SET_EVENTIN_VALUE (cx,obj,toname,newMFObject)
3243 COMPILE_FUNCTION_IF_NEEDED_SET(toname,kind)
3244 RUN_FUNCTION(toname)
3248 case FIELDTYPE_MFVec2f: {
3249 JSObject *newMFObject;
3250 JSObject *newSFObject;
3252 float *fp, *fp_in=(
float *)Data;
3255 newMFObject = JS_ConstructObjectFw(cx, &MFVec2fClass, NULL ,JS_GetParentFw(cx, obj));
3256 ADD_ROOT (cx, newMFObject)
3259 DEFINE_LENGTH_NORV(cx,newMFObject,datalen)
3262 elementlen = (int)
sizeof (
float);
3263 for (x=0; x<datalen; x++) {
3265 newSFObject = JS_ConstructObjectFw(cx,&SFVec2fClass,NULL, newMFObject);
3266 if ((SFRPptr = (
SFVec2fNative *)JS_GetPrivateFw(cx, newSFObject)) == NULL) {
3267 ConsoleMessage (
"failure in getting SF class at %s:%d\n",__FILE__,__LINE__);
3268#if defined(JS_THREADSAFE)
3275 fp = (
float *)fp_in; SFRPptr->v.c[0] = *fp; fp_in = offsetPointer_deref(
float *,fp_in,elementlen);
3276 fp = (
float *)fp_in; SFRPptr->v.c[1] = *fp; fp_in = offsetPointer_deref(
float *,fp_in,elementlen);
3279 if (!JS_DefineElement(cx, newMFObject, (jsint) x, OBJECT_TO_JSVAL(newSFObject),
3280 JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB3, JSPROP_ENUMERATE)) {
3281 ConsoleMessage(
"failure in inserting SF class at %s:%d\n",__FILE__,__LINE__);
3286 SET_LENGTH (cx,newMFObject,datalen)
3289 SET_EVENTIN_VALUE (cx,obj,toname,newMFObject)
3292 COMPILE_FUNCTION_IF_NEEDED_SET(toname,kind)
3293 RUN_FUNCTION(toname)
3298 case FIELDTYPE_MFFloat: {
3299 JSObject *newMFObject;
3301 float *fp, *fp_in=(
float *)Data;
3303 newMFObject = JS_ConstructObjectFw(cx, &MFFloatClass, NULL ,JS_GetParentFw(cx, obj));
3304 ADD_ROOT (cx, newMFObject)
3307 DEFINE_LENGTH_NORV(cx,newMFObject,datalen)
3310 elementlen = (int)
sizeof (
float);
3311 for (x=0; x<datalen; x++) {
3314 fp = (
float *)fp_in;
3315 JS_NewNumberValue(cx,(
double)*fp,&newjsval);
3316 fp_in = offsetPointer_deref(
float *,fp_in,elementlen);
3319 if (!JS_DefineElement(cx, newMFObject, (jsint) x, newjsval,
3320 JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB3, JSPROP_ENUMERATE)) {
3321 printf(
"failure in inserting SF class at %s:%d\n",__FILE__,__LINE__);
3326 SET_LENGTH (cx,newMFObject,datalen)
3329 SET_EVENTIN_VALUE (cx,obj,toname,newMFObject)
3332 COMPILE_FUNCTION_IF_NEEDED_SET(toname,kind)
3333 RUN_FUNCTION(toname)
3336 case FIELDTYPE_MFTime: {
3337 JSObject *newMFObject;
3339 double *dp, *dp_in=(
double *)Data;
3342 newMFObject = JS_ConstructObjectFw(cx, &MFTimeClass, NULL ,JS_GetParentFw(cx, obj));
3343 ADD_ROOT (cx, newMFObject)
3346 DEFINE_LENGTH_NORV(cx,newMFObject,datalen)
3349 elementlen = (int)
sizeof (
double);
3350 for (x=0; x<datalen; x++) {
3353 dp = (
double *)dp_in;
3354 JS_NewNumberValue(cx,(
double)*dp,&newjsval);
3355 dp_in = offsetPointer_deref(
double *,dp_in,elementlen);
3358 if (!JS_DefineElement(cx, newMFObject, (jsint) x, newjsval,
3359 JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB3, JSPROP_ENUMERATE)) {
3360 printf(
"failure in inserting SF class at %s:%d\n",__FILE__,__LINE__);
3365 SET_LENGTH (cx,newMFObject,datalen)
3368 SET_EVENTIN_VALUE (cx,obj,toname,newMFObject)
3371 COMPILE_FUNCTION_IF_NEEDED_SET(toname,kind)
3372 RUN_FUNCTION(toname)
3375 case FIELDTYPE_MFInt32: {
3376 JSObject *newMFObject;
3378 int *ip, *ip_in=(
int *)Data;
3381 newMFObject = JS_ConstructObjectFw(cx, &MFInt32Class, NULL ,JS_GetParentFw(cx, obj));
3382 ADD_ROOT (cx, newMFObject)
3385 DEFINE_LENGTH_NORV(cx,newMFObject,datalen)
3388 elementlen = (int)
sizeof (
float);
3389 for (x=0; x<datalen; x++) {
3393 newjsval = INT_TO_JSVAL((
int)ip);
3394 ip_in = offsetPointer_deref(
int *,ip_in,elementlen);
3397 if (!JS_DefineElement(cx, newMFObject, (jsint) x, newjsval,
3398 JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB3, JSPROP_ENUMERATE)) {
3399 printf(
"failure in inserting SF class at %s:%d\n",__FILE__,__LINE__);
3404 SET_LENGTH (cx,newMFObject,datalen)
3407 SET_EVENTIN_VALUE (cx,obj,toname,newMFObject)
3410 COMPILE_FUNCTION_IF_NEEDED_SET(toname,kind)
3411 RUN_FUNCTION(toname)
3414 case FIELDTYPE_MFString: {
3415 JSObject *newMFObject;
3420 newMFObject = JS_ConstructObjectFw(cx, &MFStringClass, NULL ,JS_GetParentFw(cx, obj));
3421 ADD_ROOT (cx, newMFObject)
3427 DEFINE_LENGTH_NORV(cx,newMFObject,datalen)
3430 for (x=0; x<datalen; x++) {
3433 chptr = uniptr[x]->strptr;
3434 newjsval = STRING_TO_JSVAL( JS_NewStringCopyZ(cx,chptr));
3437 if (!JS_DefineElement(cx, newMFObject, (jsint) x, newjsval,
3438 JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB3, JSPROP_ENUMERATE)) {
3439 printf(
"failure in inserting SF class at %s:%d\n",__FILE__,__LINE__);
3444 SET_LENGTH (cx,newMFObject,datalen)
3447 SET_EVENTIN_VALUE (cx,obj,toname,newMFObject)
3450 COMPILE_FUNCTION_IF_NEEDED_SET(toname,kind)
3451 RUN_FUNCTION(toname)
3454 case FIELDTYPE_MFNode: {
3455 JSObject *newMFObject;
3457 double *ip, *ip_in=(
double *)Data;
3459 newMFObject = JS_ConstructObjectFw(cx, &MFNodeClass, NULL ,JS_GetParentFw(cx, obj));
3460 ADD_ROOT (cx, newMFObject)
3463 DEFINE_LENGTH_NORV(cx,newMFObject,datalen)
3466 elementlen = (int)
sizeof (
void *);
3467 for (x=0; x<datalen; x++) {
3469 newjsval = INT_TO_JSVAL((
int)ip);
3470 ip_in = offsetPointer_deref(
double *,ip_in,elementlen);
3473 if (!JS_DefineElement(cx, newMFObject, (jsint) x, newjsval,
3474 JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB3, JSPROP_ENUMERATE)) {
3475 printf(
"failure in inserting SF class at %s:%d\n",__FILE__,__LINE__);
3480 SET_LENGTH (cx,newMFObject,datalen)
3483 SET_EVENTIN_VALUE (cx,obj,toname,newMFObject)
3486 COMPILE_FUNCTION_IF_NEEDED_SET(toname,kind)
3487 RUN_FUNCTION(toname)
3491 case FIELDTYPE_SFImage: {
3492 JSObject *newMFObject;
3494 int *ip_in=(
int *)Data;
3497 newMFObject = JS_ConstructObjectFw(cx, &SFImageClass, NULL ,JS_GetParentFw(cx, obj));
3498 ADD_ROOT (cx, newMFObject)
3501 DEFINE_LENGTH_NORV(cx,newMFObject,datalen)
3504 for (x=0; x<datalen; x++) {
3505 newjsval = INT_TO_JSVAL(ip_in[x]);
3507 if (!JS_DefineElement(cx, newMFObject, (jsint) x, newjsval,
3508 JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB3, JSPROP_ENUMERATE)) {
3509 printf(
"failure in inserting SF class at %s:%d\n",__FILE__,__LINE__);
3514 SET_LENGTH (cx,newMFObject,datalen)
3517 SET_EVENTIN_VALUE (cx,obj,toname,newMFObject)
3520 COMPILE_FUNCTION_IF_NEEDED_SET(toname,kind)
3521 RUN_FUNCTION(toname)
3527 printf (
"setMFElement, SHOULD NOT DISPLAY THIS\n");
3528 strcat (scriptline,
"(");
3531#if defined(JS_THREADSAFE)
3547void **getInternalDataPointerForJavascriptObject(JSContext *cx, JSObject *obj,
int tnfield,
int *iflag) {
3548 char scriptline[256];
3560 if(JSparamnames[tnfield].kind == PKW_inputOnly)
3561 strcat(scriptline,
"__eventIn_Value_");
3562 strcat(scriptline,JSparamnames[tnfield].name);
3563 #ifdef SETFIELDVERBOSE
3564 printf (
"getInternalDataPointerForJavascriptObject: line %s\n",scriptline);
3567 if (!JS_GetProperty(cx,obj,scriptline,&retval)){
3572 printf (
"JS_GetProperty failed in set_one_MultiElementType.\n");
3576 if (!JSVAL_IS_OBJECT(retval)){
3581 if (!JS_GetProperty(cx,obj,JSparamnames[tnfield].name,&retval)){
3583 printf (
"no field for eventIn function: %s\n",JSparamnames[tnfield].name);
3586 if (!JSVAL_IS_OBJECT(retval)){
3587 printf (
"no field for eventIn function: %s\n",JSparamnames[tnfield].name);
3593 sfObj = JSVAL_TO_OBJECT(retval);
3595 if ((_privPtr = JS_GetPrivateFw(cx, sfObj)) == NULL)
3596 printf(
"JS_GetPrivate failed set_one_MultiElementType.\n");
3598 if (_privPtr == NULL)
return NULL;
3605 if (JS_InstanceOf(cx, sfObj, &SFVec3fClass, NULL)) {
3607 return (
void **) &me->v;
3609 }
else if (JS_InstanceOf(cx, sfObj, &SFVec3dClass, NULL)) {
3611 return (
void **) &me->v;
3613 }
else if (JS_InstanceOf(cx, sfObj, &SFRotationClass, NULL)) {
3615 return (
void **) &me->v;
3617 }
else if (JS_InstanceOf(cx, sfObj, &SFVec2fClass, NULL)) {
3619 return (
void **) &me->v;
3621 }
else if (JS_InstanceOf(cx, sfObj, &SFColorClass, NULL)) {
3623 return (
void **) &me->v;
3625 }
else if (JS_InstanceOf(cx, sfObj, &SFColorRGBAClass, NULL)) {
3627 return (
void **) &me->v;
3629 }
else if (JS_InstanceOf(cx, sfObj, &SFVec4fClass, NULL)) {
3631 return (
void **) &me->v;
3633 }
else if (JS_InstanceOf(cx, sfObj, &SFVec4dClass, NULL)) {
3635 return (
void **) &me->v;
3637 }
else if (JS_InstanceOf(cx, sfObj, &SFNodeClass, NULL)) {
3639 return (
void **) &me->handle;;
3642 }
else if (JS_InstanceOf(cx, sfObj, &SFImageClass, NULL)) {
3648 ConsoleMessage (
"getInternalDataPointerForJavascriptObject malfunction");
3662void sm_set_one_MultiElementType (
int tonode,
int tnfield,
void *Data,
int dataLen ) {
3663 char scriptline[256];
3667 int iflag, kind, toname;
3672 ScriptControl = getScriptControlIndex(tonode);
3673 cx = (JSContext*)ScriptControl->cx;
3674 obj = (JSObject*)ScriptControl->glob;
3676#if defined(JS_THREADSAFE)
3677 JS_BeginRequest(cx);
3680 kind = JSparamnames[toname].kind;
3681 if(SM_method() == 2){
3682 int type, iifield, *valueChanged, ifound, datatype;
3687 fieldname = JSparamnames[toname].name;
3688 datatype = JSparamnames[toname].type;
3691 ifound = getFieldFromScript(script,fieldname,&type,&kind,&iifield,&value,&valueChanged);
3692 if(ifound && type == datatype && isSFType(type)){
3694 shallow_copy_field(type,Data,value);
3695 (*valueChanged) = 1;
3697 ConsoleMessage(
"sm_set_one_MultiElementType did not find field %s type %d\n",fieldname, datatype);
3703 COMPILE_FUNCTION_IF_NEEDED_SET(toname,kind)
3704 RUN_FUNCTION(toname)
3711 pp = getInternalDataPointerForJavascriptObject(cx,obj,tnfield,&iflag);
3714 printf(
"function not found\n");
3717 memcpy (pp,Data, dataLen);
3725 COMPILE_FUNCTION_IF_NEEDED_SET(tnfield,kind)
3728 #ifdef SETFIELDVERBOSE
3729 printf (
"set_one_MultiElementType: running script %s\n",scriptline);
3732 RUN_FUNCTION (tnfield)
3734#if defined(JS_THREADSAFE)
3739int sm_runQueuedDirectOutputs(){
3741 static int doneOnce = 0;
3744 printf(
"javascript engine spidermonkey version %ld %s\n", (
long)JS_VERSION, SM_method() == 2?
"SM2" :
"SM1");