39int JS_SetPrivateFw(JSContext *cx, JSObject* obj,
void *data);
40JSObject* JS_NewGlobalObjectFw(JSContext *cx, JSClass *clasp);
41void * JS_GetPrivateFw(JSContext *cx,JSObject*_obj);
42JSObject* JS_GetParentFw(JSContext *cx, JSObject *me);
43JSObject * JS_ConstructObjectWithArgumentsFw(JSContext *cx, JSClass *clasp, JSObject *parent,
unsigned argc, jsval *argv);
44JSObject * JS_ConstructObjectFw(JSContext *cx, JSClass *clasp,
void *whatever, JSObject *parent);
45JSObject * JS_GetPrototypeFw(JSContext *cx, JSObject * obj);
46JSClass * JS_GetClassFw(JSContext *cx, JSObject * obj);
47#define STRING_SIZE 256
51#define jsuint uint32_t
53#define jsdouble double
55#define JS_FinalizeStub NULL
56#define JSSCRIPT2 JSScript
57#define JS_GET_CLASS JS_GetClassFw
58JSBool JS_NewNumberValue(JSContext *cx, jsdouble d, jsval *rval);
71#include <system_threads.h>
75#include <libFreeWRL.h>
94#include "jsUtils_sm.h"
95#include "jsVRMLClasses_sm.h"
102void _get4f(
double *ret,
double *mat,
int row);
103void _set4f(
double len,
double *mat,
int row);
106#define ECMAValueTableSize 300
108struct ECMAValueStruct {
119typedef struct pjsVRMLClasses{
120 struct ECMAValueStruct ECMAValues[ECMAValueTableSize];
123void *jsVRMLClasses_constructor(){
124 void *v = MALLOCV(
sizeof(
struct pjsVRMLClasses));
125 memset(v,0,
sizeof(
struct pjsVRMLClasses));
128void jsVRMLClasses_init(
struct iiglobal::tjsVRMLClasses *t){
131 t->prv = jsVRMLClasses_constructor();
133 ppjsVRMLClasses p = (ppjsVRMLClasses)t->prv;
145#define JS_DeletePropertyStub JS_PropertyStub
147JSClass SFColorClass = {
151 JS_DeletePropertyStub,
160JSPropertySpec (SFColorProperties)[] = {
161 {
"r", 0, JSPROP_SHARED | JSPROP_ENUMERATE},
162 {
"g", 1, JSPROP_SHARED | JSPROP_ENUMERATE},
163 {
"b", 2, JSPROP_SHARED | JSPROP_ENUMERATE},
169JSFunctionSpec (SFColorFunctions)[] = {
170 {
"getHSV", SFColorGetHSV, 0},
171 {
"setHSV", SFColorSetHSV, 0},
172 {
"toString", SFColorToString, 0},
173 {
"assign", SFColorAssign, 0},
179JSClass SFColorRGBAClass = {
183 JS_DeletePropertyStub,
184 SFColorRGBAGetProperty,
185 SFColorRGBASetProperty,
192JSPropertySpec (SFColorRGBAProperties)[] = {
193 {
"r", 0, JSPROP_SHARED | JSPROP_ENUMERATE},
194 {
"g", 1, JSPROP_SHARED | JSPROP_ENUMERATE},
195 {
"b", 2, JSPROP_SHARED | JSPROP_ENUMERATE},
196 {
"a", 3, JSPROP_SHARED | JSPROP_ENUMERATE},
200JSFunctionSpec (SFColorRGBAFunctions)[] = {
201 {
"getHSV", SFColorRGBAGetHSV, 0},
202 {
"setHSV", SFColorRGBASetHSV, 0},
203 {
"toString", SFColorRGBAToString, 0},
204 {
"assign", SFColorRGBAAssign, 0},
210JSClass SFImageClass = {
214 JS_DeletePropertyStub,
223JSPropertySpec (SFImageProperties)[] = {
224 {
"width", 0, JSPROP_SHARED | JSPROP_ENUMERATE},
225 {
"height", 1, JSPROP_SHARED | JSPROP_ENUMERATE},
226 {
"comp", 2, JSPROP_SHARED | JSPROP_ENUMERATE},
227 {
"array", 3, JSPROP_SHARED | JSPROP_ENUMERATE},
231JSFunctionSpec (SFImageFunctions)[] = {
232 {
"toString", SFImageToString, 0},
233 {
"assign", SFImageAssign, 0},
239JSClass SFNodeClass = {
243 JS_DeletePropertyStub,
252JSPropertySpec (SFNodeProperties)[] = {
267JSFunctionSpec (SFNodeFunctions)[] = {
269 {
"getNodeName", SFNodeGetNodeName, 0},
270 {
"getNodeType", SFNodeGetNodeType, 0},
271 {
"getFieldDefinitions",SFNodeGetFieldDefs, 0},
272 {
"toVRMLString",SFNodeToVRMLString, 0},
273 {
"toXMLString", SFNodeToXMLString, 0},
275 JS_FS(
"equals", SFNodeEquals, 1,0),
276 JS_FS(
"toString", SFNodeToString, 0, 0),
277 JS_FS(
"valueOf", SFNodeValueOf, 0, 0),
278 {
"assign", SFNodeAssign, 0, 0},
284JSClass SFRotationClass = {
288 JS_DeletePropertyStub,
289 SFRotationGetProperty,
290 SFRotationSetProperty,
297JSPropertySpec (SFRotationProperties)[] = {
298 {
"x", 0, JSPROP_SHARED | JSPROP_ENUMERATE},
299 {
"y", 1, JSPROP_SHARED | JSPROP_ENUMERATE},
300 {
"z", 2, JSPROP_SHARED | JSPROP_ENUMERATE},
301 {
"angle",3, JSPROP_SHARED | JSPROP_ENUMERATE},
305JSFunctionSpec (SFRotationFunctions)[] = {
306 {
"getAxis", SFRotationGetAxis, 0},
307 {
"inverse", SFRotationInverse, 0},
308 {
"multiply", SFRotationMultiply, 0},
309 {
"multVec", SFRotationMultVec, 0},
310 {
"multiVec", SFRotationMultVec, 0},
311 {
"setAxis", SFRotationSetAxis, 0},
312 {
"slerp", SFRotationSlerp, 0},
313 {
"toString", SFRotationToString, 0},
314 {
"assign", SFRotationAssign, 0},
320JSClass SFVec2fClass = {
324 JS_DeletePropertyStub,
333JSPropertySpec (SFVec2fProperties)[] = {
334 {
"x", 0, JSPROP_SHARED | JSPROP_ENUMERATE},
335 {
"y", 1, JSPROP_SHARED | JSPROP_ENUMERATE},
339JSFunctionSpec (SFVec2fFunctions)[] = {
340 {
"add", SFVec2fAdd, 0},
341 {
"divide", SFVec2fDivide, 0},
342 {
"dot", SFVec2fDot, 0},
343 {
"length", SFVec2fLength, 0},
344 {
"multiply", SFVec2fMultiply, 0},
345 {
"normalize", SFVec2fNormalize, 0},
346 {
"subtract", SFVec2fSubtract, 0},
347 {
"toString", SFVec2fToString, 0},
348 {
"assign", SFVec2fAssign, 0},
353JSClass SFVec2dClass = {
357 JS_DeletePropertyStub,
366JSPropertySpec (SFVec2dProperties)[] = {
367 {
"x", 0, JSPROP_SHARED | JSPROP_ENUMERATE},
368 {
"y", 1, JSPROP_SHARED | JSPROP_ENUMERATE},
372JSFunctionSpec (SFVec2dFunctions)[] = {
373 {
"add", SFVec2dAdd, 0},
374 {
"divide", SFVec2dDivide, 0},
375 {
"dot", SFVec2dDot, 0},
376 {
"length", SFVec2dLength, 0},
377 {
"multiply", SFVec2dMultiply, 0},
378 {
"normalize", SFVec2dNormalize, 0},
379 {
"subtract", SFVec2dSubtract, 0},
380 {
"toString", SFVec2dToString, 0},
381 {
"assign", SFVec2dAssign, 0},
387JSClass SFVec4fClass = {
391 JS_DeletePropertyStub,
400JSPropertySpec (SFVec4fProperties)[] = {
401 {
"x", 0, JSPROP_SHARED | JSPROP_ENUMERATE},
402 {
"y", 1, JSPROP_SHARED | JSPROP_ENUMERATE},
403 {
"z", 2, JSPROP_SHARED | JSPROP_ENUMERATE},
404 {
"w", 3, JSPROP_SHARED | JSPROP_ENUMERATE},
408JSFunctionSpec (SFVec4fFunctions)[] = {
410 {
"toString", SFVec4fToString, 0},
411 {
"assign", SFVec4fAssign, 0},
416JSClass SFVec4dClass = {
420 JS_DeletePropertyStub,
429JSPropertySpec (SFVec4dProperties)[] = {
430 {
"x", 0, JSPROP_SHARED | JSPROP_ENUMERATE},
431 {
"y", 1, JSPROP_SHARED | JSPROP_ENUMERATE},
432 {
"z", 2, JSPROP_SHARED | JSPROP_ENUMERATE},
433 {
"w", 3, JSPROP_SHARED | JSPROP_ENUMERATE},
437JSFunctionSpec (SFVec4dFunctions)[] = {
439 {
"toString", SFVec4dToString, 0},
440 {
"assign", SFVec4dAssign, 0},
447JSClass SFVec3fClass = {
451 JS_DeletePropertyStub,
469JSPropertySpec (SFVec3fProperties)[] = {
470 {
"x", 0, JSPROP_SHARED | JSPROP_ENUMERATE, NULL, NULL },
471 {
"y", 1, JSPROP_SHARED | JSPROP_ENUMERATE, NULL, NULL },
472 {
"z", 2, JSPROP_SHARED | JSPROP_ENUMERATE, NULL, NULL },
476JSFunctionSpec (SFVec3fFunctions)[] = {
477 {
"add", SFVec3fAdd, 0},
478 {
"cross", SFVec3fCross, 0},
479 {
"divide", SFVec3fDivide, 0},
480 {
"dot", SFVec3fDot, 0},
481 {
"length", SFVec3fLength, 0},
482 {
"multiply", SFVec3fMultiply, 0},
483 {
"negate", SFVec3fNegate, 0},
484 {
"normalize", SFVec3fNormalize, 0},
485 {
"subtract", SFVec3fSubtract, 0},
486 {
"toString", SFVec3fToString, 0},
487 {
"assign", SFVec3fAssign, 0},
492JSClass SFVec3dClass = {
496 JS_DeletePropertyStub,
505JSPropertySpec (SFVec3dProperties)[] = {
506 {
"x", 0, JSPROP_SHARED | JSPROP_ENUMERATE},
507 {
"y", 1, JSPROP_SHARED | JSPROP_ENUMERATE},
508 {
"z", 2, JSPROP_SHARED | JSPROP_ENUMERATE},
512JSFunctionSpec (SFVec3dFunctions)[] = {
513 {
"add", SFVec3dAdd, 0},
514 {
"cross", SFVec3dCross, 0},
515 {
"divide", SFVec3dDivide, 0},
516 {
"dot", SFVec3dDot, 0},
517 {
"length", SFVec3dLength, 0},
518 {
"multiply", SFVec3dMultiply, 0},
519 {
"negate", SFVec3dNegate, 0},
520 {
"normalize", SFVec3dNormalize, 0},
521 {
"subtract", SFVec3dSubtract, 0},
522 {
"toString", SFVec3dToString, 0},
523 {
"assign", SFVec3dAssign, 0},
529JSClass SFMatrix3fClass = {
533 JS_DeletePropertyStub,
534 SFMatrix3fGetProperty,
535 SFMatrix3fSetProperty,
542JSPropertySpec(SFMatrix3fProperties)[] = {
546JSFunctionSpec(SFMatrix3fFunctions)[] = {
548 {
"toString", SFMatrix3fToString, 0},
549 {
"assign", SFMatrix3fAssign, 0},
554JSClass SFMatrix3dClass = {
558 JS_DeletePropertyStub,
559 SFMatrix3dGetProperty,
560 SFMatrix3dSetProperty,
567JSPropertySpec(SFMatrix3dProperties)[] = {
571JSFunctionSpec(SFMatrix3dFunctions)[] = {
573 {
"toString", SFMatrix3dToString, 0},
574 {
"assign", SFMatrix3dAssign, 0},
579JSClass SFMatrix4fClass = {
583 JS_DeletePropertyStub,
584 SFMatrix4fGetProperty,
585 SFMatrix4fSetProperty,
592JSPropertySpec(SFMatrix4fProperties)[] = {
596JSFunctionSpec(SFMatrix4fFunctions)[] = {
598 {
"toString", SFMatrix4fToString, 0},
599 {
"assign", SFMatrix4fAssign, 0},
604JSClass SFMatrix4dClass = {
608 JS_DeletePropertyStub,
609 SFMatrix4dGetProperty,
610 SFMatrix4dSetProperty,
617JSPropertySpec(SFMatrix4dProperties)[] = {
621JSFunctionSpec(SFMatrix4dFunctions)[] = {
623 {
"toString", SFMatrix4dToString, 0},
624 {
"assign", SFMatrix4dAssign, 0},
629JSClass MFColorClass = {
633 JS_DeletePropertyStub,
642JSFunctionSpec (MFColorFunctions)[] = {
643 {
"toString", MFColorToString, 0},
644 {
"assign", MFColorAssign, 0},
649JSClass MFColorRGBAClass = {
652 MFColorRGBAAddProperty,
653 JS_DeletePropertyStub,
654 MFColorRGBAGetProperty,
655 MFColorRGBASetProperty,
662JSFunctionSpec(MFColorRGBAFunctions)[] = {
663 {
"toString", MFColorRGBAToString, 0},
664 {
"assign", MFColorRGBAAssign, 0},
672JSClass MFFloatClass = {
676 JS_DeletePropertyStub,
683 JSCLASS_NO_OPTIONAL_MEMBERS
686JSFunctionSpec (MFFloatFunctions)[] = {
687 {
"toString", MFFloatToString, 0},
688 {
"assign", MFFloatAssign, 0},
694JSClass MFInt32Class = {
698 JS_DeletePropertyStub,
707JSFunctionSpec (MFInt32Functions)[] = {
708 {
"toString", MFInt32ToString, 0},
709 {
"assign", MFInt32Assign, 0},
714JSClass MFBoolClass = {
718 JS_DeletePropertyStub,
727JSFunctionSpec (MFBoolFunctions)[] = {
728 {
"toString", MFBoolToString, 0},
729 {
"assign", MFBoolAssign, 0},
734JSClass MFDoubleClass = {
747JSFunctionSpec (MFDoubleFunctions)[] = {
748 {
"toString", MFDoubleToString, 0},
749 {
"assign", MFDoubleAssign, 0},
755JSClass MFImageClass = {
768JSFunctionSpec (MFImageFunctions)[] = {
769 {
"toString", MFImageToString, 0},
770 {
"assign", MFImageAssign, 0},
775JSClass MFVec2dClass = {
788JSFunctionSpec (MFVec2dFunctions)[] = {
789 {
"toString", MFVec2dToString, 0},
790 {
"assign", MFVec2dAssign, 0},
794JSClass MFVec3dClass = {
807JSFunctionSpec (MFVec3dFunctions)[] = {
808 {
"toString", MFVec3dToString, 0},
809 {
"assign", MFVec3dAssign, 0},
815JSClass MFNodeClass = {
819 JS_DeletePropertyStub,
828JSFunctionSpec (MFNodeFunctions)[] = {
829 {
"toString", MFNodeToString, 0},
830 {
"assign", MFNodeAssign, 0},
836JSClass MFRotationClass = {
839 MFRotationAddProperty,
840 JS_DeletePropertyStub,
841 MFRotationGetProperty,
842 MFRotationSetProperty,
849JSFunctionSpec (MFRotationFunctions)[] = {
850 {
"toString", MFRotationToString, 0},
851 {
"assign", MFRotationAssign, 0},
858JSClass MFStringClass = {
863 MFStringDeleteProperty,
869 MFStringEnumerateProperty,
870 MFStringResolveProperty,
871 MFStringConvertProperty,
875JSFunctionSpec (MFStringFunctions)[] = {
876 {
"toString", MFStringToString, 0},
877 {
"assign", MFStringAssign, 0},
883JSClass MFTimeClass = {
887 JS_DeletePropertyStub,
898JSPropertySpec(MFTimeProperties)[] = {
902JSFunctionSpec(MFTimeFunctions)[] = {
903 {
"toString", MFTimeToString, 0},
904 {
"assign", MFTimeAssign, 0},
908JSPropertySpec(MFDoubleProperties)[] = {
912JSFunctionSpec(MFDoubleFunctions)[] = {
913 {
"toString", MFDoubleToString, 0},
914 {
"assign", MFDoubleAssign, 0},
919JSClass MFDoubleClass = {
923 JS_DeletePropertyStub,
932JSClass MFVec2fClass = {
936 JS_DeletePropertyStub,
945JSFunctionSpec (MFVec2fFunctions)[] = {
946 {
"toString", MFVec2fToString, 0},
947 {
"assign", MFVec2fAssign, 0},
953JSClass MFVec3fClass = {
957 JS_DeletePropertyStub,
966JSFunctionSpec (MFVec3fFunctions)[] = {
967 {
"toString", MFVec3fToString, 0},
968 {
"assign", MFVec3fAssign, 0},
973JSClass MFVec4fClass = {
977 JS_DeletePropertyStub,
986JSFunctionSpec(MFVec4fFunctions)[] = {
987 {
"toString", MFVec4fToString, 0},
988 {
"assign", MFVec4fAssign, 0},
993JSClass MFVec2dClass = {
997 JS_DeletePropertyStub,
1006JSFunctionSpec(MFVec2dFunctions)[] = {
1007 {
"toString", MFVec2dToString, 0},
1008 {
"assign", MFVec2dAssign, 0},
1013JSClass MFVec3dClass = {
1015 JSCLASS_HAS_PRIVATE,
1017 JS_DeletePropertyStub,
1026JSFunctionSpec(MFVec3dFunctions)[] = {
1027 {
"toString", MFVec3dToString, 0},
1028 {
"assign", MFVec3dAssign, 0},
1033JSClass MFVec4dClass = {
1035 JSCLASS_HAS_PRIVATE,
1037 JS_DeletePropertyStub,
1046JSFunctionSpec(MFVec4dFunctions)[] = {
1047 {
"toString", MFVec4dToString, 0},
1048 {
"assign", MFVec4dAssign, 0},
1053JSClass MFMatrix3fClass = {
1055 JSCLASS_HAS_PRIVATE,
1056 MFMatrix3fAddProperty,
1057 JS_DeletePropertyStub,
1058 MFMatrix3fGetProperty,
1059 MFMatrix3fSetProperty,
1066JSFunctionSpec(MFMatrix3fFunctions)[] = {
1067 {
"toString", MFMatrix3fToString, 0},
1068 {
"assign", MFMatrix3fAssign, 0},
1073JSClass MFMatrix4fClass = {
1075 JSCLASS_HAS_PRIVATE,
1076 MFMatrix4fAddProperty,
1077 JS_DeletePropertyStub,
1078 MFMatrix4fGetProperty,
1079 MFMatrix4fSetProperty,
1086JSFunctionSpec(MFMatrix4fFunctions)[] = {
1087 {
"toString", MFMatrix4fToString, 0},
1088 {
"assign", MFMatrix4fAssign, 0},
1093JSClass MFMatrix3dClass = {
1095 JSCLASS_HAS_PRIVATE,
1096 MFMatrix3dAddProperty,
1097 JS_DeletePropertyStub,
1098 MFMatrix3dGetProperty,
1099 MFMatrix3dSetProperty,
1106JSFunctionSpec(MFMatrix3dFunctions)[] = {
1107 {
"toString", MFMatrix3dToString, 0},
1108 {
"assign", MFMatrix3dAssign, 0},
1113JSClass MFMatrix4dClass = {
1115 JSCLASS_HAS_PRIVATE,
1116 MFMatrix4dAddProperty,
1117 JS_DeletePropertyStub,
1118 MFMatrix4dGetProperty,
1119 MFMatrix4dSetProperty,
1126JSFunctionSpec(MFMatrix4dFunctions)[] = {
1127 {
"toString", MFMatrix4dToString, 0},
1128 {
"assign", MFMatrix4dAssign, 0},
1134JSClass MFImageClass = {
1136 JSCLASS_HAS_PRIVATE,
1138 JS_DeletePropertyStub,
1147JSFunctionSpec(MFImageFunctions)[] = {
1148 {
"toString", MFImageToString, 0},
1149 {
"assign", MFImageAssign, 0},
1155JSClass VrmlMatrixClass = {
1157 JSCLASS_HAS_PRIVATE,
1158 VrmlMatrixAddProperty,
1159 JS_DeletePropertyStub,
1160 VrmlMatrixGetProperty,
1161 VrmlMatrixSetProperty,
1168JSFunctionSpec (VrmlMatrixFunctions)[] = {
1169 {
"setTransform", VrmlMatrixsetTransform, 0},
1170 {
"getTransform", VrmlMatrixgetTransform, 0},
1171 {
"inverse", VrmlMatrixinverse, 0},
1172 {
"transpose", VrmlMatrixtranspose, 0},
1173 {
"multLeft", VrmlMatrixmultLeft, 0},
1174 {
"multRight", VrmlMatrixmultRight, 0},
1175 {
"multVecMatrix", VrmlMatrixmultVecMatrix, 0},
1176 {
"multMatrixVec", VrmlMatrixmultMatrixVec, 0},
1177 {
"toString", VrmlMatrixToString, 0},
1178 {
"assign", VrmlMatrixAssign, 0},
1182JSPropertySpec(VrmlMatrixProperties)[] = {
1188JSClass X3DMatrix3Class = {
1190 JSCLASS_HAS_PRIVATE,
1191 X3DMatrix3AddProperty,
1192 JS_DeletePropertyStub,
1193 X3DMatrix3GetProperty,
1194 X3DMatrix3SetProperty,
1201JSFunctionSpec (X3DMatrix3Functions)[] = {
1202 {
"getTransform", X3DMatrix3getTransform, 0},
1203 {
"setTransform", X3DMatrix3setTransform, 0},
1204 {
"inverse", X3DMatrix3inverse, 0},
1205 {
"transpose", X3DMatrix3transpose, 0},
1206 {
"multLeft", X3DMatrix3multLeft, 0},
1207 {
"multRight", X3DMatrix3multRight, 0},
1208 {
"multVecMatrix", X3DMatrix3multVecMatrix, 0},
1209 {
"multMatrixVec", X3DMatrix3multMatrixVec, 0},
1210 {
"toString", X3DMatrix3ToString, 0},
1211 {
"assign", X3DMatrix3Assign, 0},
1215JSPropertySpec(X3DMatrix3Properties)[] = {
1221JSClass X3DMatrix4Class = {
1223 JSCLASS_HAS_PRIVATE,
1225 JS_DeletePropertyStub,
1226 X3DMatrix4GetProperty,
1227 X3DMatrix4SetProperty,
1234JSFunctionSpec (X3DMatrix4Functions)[] = {
1235 {
"toString", X3DMatrix4ToString, 0},
1236 {
"assign", X3DMatrix4Assign, 0},
1237 {
"getTransform", X3DMatrix4getTransform, 0},
1238 {
"setTransform", X3DMatrix4setTransform, 0},
1239 {
"inverse", X3DMatrix4inverse, 0},
1240 {
"transpose", X3DMatrix4transpose, 0},
1241 {
"multLeft", X3DMatrix4multLeft, 0},
1242 {
"multRight", X3DMatrix4multRight, 0},
1243 {
"multVecMatrix", X3DMatrix4multVecMatrix, 0},
1244 {
"multMatrixVec", X3DMatrix4multMatrixVec, 0},
1247JSPropertySpec(X3DMatrix4Properties)[] = {
1262struct JSLoadPropElement {
1265 JSBool (*constr)(JSContext*,
unsigned int, jsval*);
1272struct JSLoadPropElement JSLoadProps [] = {
1274 { &X3DMatrix3Class, X3DMatrix3Constr, &X3DMatrix3Functions, &X3DMatrix3Properties,
"X3DMatrix3Class"},
1275 { &X4DMatrix4Class, X4DMatrix4Constr, &X4DMatrix4Functions, &X4DMatrix4Properties,
"X4DMatrix4Class"},
1279 { &SFColorClass, &SFColorConstr, &SFColorFunctions, &SFColorProperties,
"SFColorClass"},
1280 { &SFColorRGBAClass, &SFColorRGBAConstr, &SFColorRGBAFunctions, &SFColorRGBAProperties,
"SFColorRGBAClass"},
1281 { &SFVec2fClass, &SFVec2fConstr, &SFVec2fFunctions, &SFVec2fProperties,
"SFVec2fClass"},
1282 { &SFVec3fClass, &SFVec3fConstr, &SFVec3fFunctions, &SFVec3fProperties,
"SFVec3fClass"},
1283 { &SFVec4fClass, &SFVec4fConstr, &SFVec4fFunctions, &SFVec4fProperties,
"SFVec4fClass"},
1284 { &SFVec2dClass, SFVec2dConstr, &SFVec2dFunctions, &SFVec2dProperties,
"SFVec2dClass"},
1285 { &SFVec3dClass, &SFVec3dConstr, &SFVec3dFunctions, &SFVec3dProperties,
"SFVec3dClass"},
1286 { &SFVec4dClass, &SFVec4dConstr, &SFVec4dFunctions, &SFVec4dProperties,
"SFVec4dClass"},
1287 { &SFRotationClass, &SFRotationConstr, &SFRotationFunctions, &SFRotationProperties,
"SFRotationClass"},
1288 { &SFNodeClass, &SFNodeConstr, &SFNodeFunctions, &SFNodeProperties,
"SFNodeClass"},
1289 { &SFImageClass, &SFImageConstr, &SFImageFunctions, &SFImageProperties,
"SFImageClass"},
1290 { &SFMatrix3fClass, &SFMatrix3fConstr, &SFMatrix3fFunctions, &SFMatrix3fProperties,
"SFMatrix3fClass"},
1291 { &SFMatrix4fClass, &SFMatrix4fConstr, &SFMatrix4fFunctions, &SFMatrix4fProperties,
"SFMatrix4fClass"},
1292 { &SFMatrix3dClass, &SFMatrix3dConstr, &SFMatrix3dFunctions, &SFMatrix3dProperties,
"SFMatrix3dClass"},
1293 { &SFMatrix4dClass, &SFMatrix4dConstr, &SFMatrix4dFunctions, &SFMatrix4dProperties,
"SFMatrix4dClass"},
1295 { &MFFloatClass, &MFFloatConstr, &MFFloatFunctions, NULL,
"MFFloatClass"},
1296 { &MFBoolClass, MFBoolConstr, &MFBoolFunctions, NULL,
"MFBoolClass"},
1297 { &MFInt32Class, &MFInt32Constr, &MFInt32Functions, NULL,
"MFInt32Class"},
1298 { &MFTimeClass, &MFTimeConstr, &MFTimeFunctions, &MFTimeProperties,
"MFTimeClass"},
1299 { &MFDoubleClass, MFDoubleConstr, &MFDoubleFunctions, &MFDoubleProperties,
"MFDoubleClass"},
1300 { &MFNodeClass, &MFNodeConstr, &MFNodeFunctions, NULL,
"MFNodeClass"},
1302 { &MFColorClass, &MFColorConstr, &MFColorFunctions, NULL,
"MFColorClass"},
1303 { &MFColorRGBAClass, MFColorRGBAConstr, &MFColorRGBAFunctions, NULL,
"MFColorRGBAClass"},
1305 { &MFVec2fClass, &MFVec2fConstr, &MFVec2fFunctions, NULL,
"MFVec2fClass"},
1306 { &MFVec3fClass, &MFVec3fConstr, &MFVec3fFunctions, NULL,
"MFVec3fClass"},
1307 { &MFVec4fClass, &MFVec4fConstr, &MFVec4fFunctions, NULL,
"MFVec4fClass"},
1308 { &MFVec2dClass, MFVec2dConstr, &MFVec2dFunctions, NULL,
"MFVec2dClass"},
1309 { &MFVec3dClass, MFVec3dConstr, &MFVec3dFunctions, NULL,
"MFVec3dClass"},
1310 { &MFVec4dClass, MFVec4dConstr, &MFVec4dFunctions, NULL,
"MFVec4dClass"},
1312 { &MFMatrix3fClass, MFMatrix3fConstr, &MFMatrix3fFunctions, NULL,
"MFMatrix3fClass"},
1313 { &MFMatrix4fClass, MFMatrix4fConstr, &MFMatrix4fFunctions, NULL,
"MFMatrix4fClass"},
1314 { &MFMatrix3dClass, MFMatrix3dConstr, &MFMatrix3dFunctions, NULL,
"MFMatrix3dClass"},
1315 { &MFMatrix4dClass, MFMatrix4dConstr, &MFMatrix4dFunctions, NULL,
"MFMatrix4dClass"},
1318 { &MFRotationClass, &MFRotationConstr, &MFRotationFunctions, NULL,
"MFRotationClass"},
1319 { &MFStringClass, &MFStringConstr, &MFStringFunctions, NULL,
"MFStringClass"},
1320 { &MFImageClass, &MFImageConstr, &MFImageFunctions, NULL,
"MFImageClass"},
1322 { &VrmlMatrixClass, &VrmlMatrixConstr, &VrmlMatrixFunctions, VrmlMatrixProperties,
"VrmlMatrixClass"},
1323 { &X3DMatrix3Class, &X3DMatrix3Constr, &X3DMatrix3Functions, X3DMatrix3Properties,
"X3DMatrix3Class"},
1324 { &X3DMatrix4Class, &X3DMatrix4Constr, &X3DMatrix4Functions, X3DMatrix4Properties,
"X3DMatrix4Class"},
1326 { NULL, NULL, NULL, NULL, NULL }
1332const char *classToString(JSClass *myClass) {
1340 while (JSLoadProps[i].fwclass != NULL) {
1341 if (JSLoadProps[i].fwclass == myClass) {
1343 return JSLoadProps[i].id;
1347 return "class unknown";
1351void printJSNodeType (JSContext *context, JSObject *myobj) {
1355 #ifdef JSVRMLCLASSESVERBOSE
1356 printf (
"printJSNodeType, obj pointer is %p\n",myobj);
1360 while (JSLoadProps[i].fwclass != NULL) {
1361 if (JS_InstanceOf(context, myobj, JSLoadProps[i].fwclass, NULL)) {
1362 printf (
"'%s'\n",JSLoadProps[i].
id);
1367 printf (
"'unknown class'\n");
1371JSBool _simplecopyElements (JSContext *cx,
1382 #ifdef JSVRMLCLASSESVERBOSE
1383 printf (
"simpleCopyElements, count %d\n",count);
1386 for (i = 0; i < count; i++) {
1387 if (!JS_GetElement(cx, fromObj, (jsint) i, &val)) {
1388 printf(
"failed in get %d index %d.\n",type, i);
1392 if ((type == FIELDTYPE_SFFloat) || (type == FIELDTYPE_SFTime)) {
1394 if (JSVAL_IS_INT(val)) {
1395 ii = JSVAL_TO_INT(val);
1398 if (JS_NewNumberValue(cx,dd,&val) == JS_FALSE) {
1399 printf(
"JS_NewNumberValue failed for %f in simplecopyelements.\n",dd);
1413 if (!JS_SetElement(cx, toObj, (jsint) i, &val)) {
1414 printf(
"failed in set %d index %d.\n", type, i);
1423JSBool _standardMFAssign(JSContext *cx,
1431 JSObject *_from_obj;
1435 JSString *_id_jsstr;
1438 if (!JS_InstanceOf(cx, obj, myClass, argv)) {
1439 printf(
"JS_InstanceOf failed for fieldType %s.\n",stringFieldtypeType(type));
1443 if (!JS_ConvertArguments(cx, argc, argv,
"oS", &_from_obj, &_id_jsstr)) {
1444 printf(
"JS_ConvertArguments failed in %s.\n",stringFieldtypeType(type));
1449 if (!JS_InstanceOf(cx, _from_obj, myClass, argv)) {
1450 printf(
"JS_InstanceOf failed for fieldType %s.\n",stringFieldtypeType(type));
1453 if (!JS_GetProperty(cx, _from_obj, MF_LENGTH_FIELD, &val)) {
1454 printf(
"JS_GetProperty failed for \"%s\" in %s.\n",MF_LENGTH_FIELD,stringFieldtypeType(type));
1458 if (!JS_SetProperty(cx, obj, MF_LENGTH_FIELD, &val)) {
1459 printf(
"JS_SetProperty failed for \"%s\" in %s\n",MF_LENGTH_FIELD,stringFieldtypeType(type));
1463 len = JSVAL_TO_INT(val);
1465 #ifdef JSVRMLCLASSESVERBOSE
1466#if JS_VERSION >= 185
1467 _id_str = JS_EncodeString(cx,_id_jsstr);
1469 printf(
"StandardMFAssign %s: obj = %p, id = \"%s\", from = %p, len = %d\n",stringFieldtypeType(type),
1470 obj, _id_str, _from_obj, len);
1471#if JS_VERSION >= 185
1472 JS_free(cx,_id_str);
1477 *rval = OBJECT_TO_JSVAL(obj);
1481 if (type == FIELDTYPE_SFImage) {
1482 if ((ptr = (SFImageNative *)JS_GetPrivateFw(cx, obj)) == NULL) {
1483 printf(
"JS_GetPrivate failed in standard MF assign.\n");
1486 ptr->valueChanged = 1;
1489 return _simplecopyElements(cx, _from_obj, obj, len,type);
1491void X3D_SF_TO_JS_B(JSContext *cx,
void *Data,
unsigned datalen,
int dataType,
int *valueChanged, jsval *newval);
1494_standardMFGetProperty(JSContext *cx,
1499 const char *makeNewElement,
1502 int32 _length, _index;
1511 if (!JS_IdToValue(cx,iid,&
id)) {
1516 #ifdef JSVRMLCLASSESVERBOSE
1517 printf (
"_standardMFGetProperty starting for type %d\n",type);
1518 printJSNodeType (cx,obj);
1521 if(SM_method() == 2){
1525 if ((ptr = (AnyNative *)JS_GetPrivateFw(cx,obj)) == NULL) {
1526 printf(
"JS_GetPrivate failed in standardMFGetterProperty\n");
1529 sftype = type2SF(ptr->type);
1530 sfsize = sizeofSForMF(sftype);
1532 if (JSVAL_IS_INT(
id)) {
1536 int index = JSVAL_TO_INT(
id);
1537 if(index < 0)
return JS_FALSE;
1540 newlength = index + 1;
1541 mf_n = ptr->v->mfbool.n;
1542 mf_p = (
char *)ptr->v->mfbool.p;
1543 if(newlength > mf_n ) {
1546 mf_p = (
char *)malloc(sfsize*upper_power_of_two(newlength));
1547 memset(mf_p,0,sfsize*upper_power_of_two(newlength));
1550 mf_p = (
char *)realloc(mf_p,
sizeof(
int) + sfsize*upper_power_of_two(newlength));
1551 for(k=mf_n;k<newlength;k++)
1552 memset(mf_p + (
size_t)sfsize*k,0,sfsize);
1554 ptr->v->mfbool.n = newlength;
1556 ptr->v->mfbool.p = (
int*)mf_p;
1559 any = (
union anyVrml*)(mf_p + (index * sfsize));
1560 switch(type2SF(ptr->type)){
1561 case FIELDTYPE_SFBool:
1562 case FIELDTYPE_SFFloat:
1563 case FIELDTYPE_SFTime:
1564 case FIELDTYPE_SFDouble:
1565 case FIELDTYPE_SFInt32:
1566 X3D_ECMA_TO_JS(cx, any,sfsize,sftype,vp);
1568 case FIELDTYPE_SFString:
1569 if(any->sfstring == NULL){
1571 memset(any->sfstring,0,
sizeof(
struct Uni_String));
1573 X3D_ECMA_TO_JS(cx, any,sfsize,sftype,vp);
1575 case FIELDTYPE_SFColor:
1576 case FIELDTYPE_SFColorRGBA:
1577 case FIELDTYPE_SFVec2f:
1578 case FIELDTYPE_SFVec3f:
1579 case FIELDTYPE_SFVec4f:
1580 case FIELDTYPE_SFVec2d:
1581 case FIELDTYPE_SFVec3d:
1582 case FIELDTYPE_SFVec4d:
1583 case FIELDTYPE_SFMatrix3f:
1584 case FIELDTYPE_SFMatrix4f:
1585 case FIELDTYPE_SFMatrix3d:
1586 case FIELDTYPE_SFMatrix4d:
1587 case FIELDTYPE_SFRotation:
1588 case FIELDTYPE_SFImage:
1589 X3D_SF_TO_JS_B(cx, any,sfsize, sftype, ptr->valueChanged, vp);
1591 case FIELDTYPE_SFNode:
1592 X3D_SF_TO_JS_BNode(cx, any,sfsize, sftype, ptr->valueChanged, vp);
1594 default: printf (
"invalid type in standardMFGetProperty method 2\n");
return JS_FALSE;
1597 }
else if(JSVAL_IS_STRING(
id)){
1601 _idStr = JS_ValueToString(cx,
id);
1603 _id_c = JS_EncodeString(cx,_idStr);
1604 if (strcmp (
"length",_id_c) == 0) {
1611 mf_n = ptr->v->mfbool.n;
1612 retval = INT_TO_JSVAL(mf_n);
1620 if (!JS_GetProperty(cx, obj, MF_LENGTH_FIELD, &_length_val)) {
1621 printf(
"JS_GetProperty failed for \"%s\" in %d.\n",MF_LENGTH_FIELD,type);
1625 _length = JSVAL_TO_INT(_length_val);
1626 #ifdef JSVRMLCLASSESVERBOSE
1627 printf (
"standarg get property, len %d\n",_length);
1630 if (JSVAL_IS_INT(
id)) {
1631 _index = JSVAL_TO_INT(
id);
1632 #ifdef JSVRMLCLASSESVERBOSE
1633 printf (
"standard get property, index requested %d length is %d\n",_index,_length);
1636 if (_index >= _length) {
1637 #ifdef JSVRMLCLASSESVERBOSE
1638 printf (
"\n\nconstructing new object\n");
1644 newElemenLen = (int)strlen(makeNewElement);
1646 if (!JS_EvaluateScript(cx, obj, makeNewElement, newElemenLen,
1647 FNAME_STUB, LINENO_STUB, &newEle)) {
1648 ConsoleMessage (
"standardMFGetProperty: JS_EvaluateScript failed for %s", makeNewElement);
1656 #ifdef JSVRMLCLASSESVERBOSE
1657 printf (
"defining element %d now... is %d %#x\n",_index,(
int)*vp,(
unsigned int)*vp);
1660 if (!JS_DefineElement(cx, obj, (jsint) _index, *vp,
1661 JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB8,
1662 JSPROP_ENUMERATE)) {
1663 printf(
"JS_DefineElement failed in %d.\n",type);
1667 if (!doMFSetProperty(cx,obj,
1670 printf (
"wow, cant assign property\n");
1673 #ifdef JSVRMLCLASSESVERBOSE
1674 printf (
"object might already have this index\n");
1676 if (!JS_LookupElement(cx, obj, _index, vp)) {
1677 printf(
"JS_LookupElement failed in %d.\n",type);
1680 if (JSVAL_IS_NULL(*vp)) {
1681 printf(
"warning: %d: obj = %p, jsval = %d does not exist!\n",type,
1685 }
else if (JSVAL_IS_STRING(
id)) {
1686 #ifdef JSVRMLCLASSESVERBOSE
1690 printf (
"HAVE STRING HERE!\n");
1691 _str = JS_ValueToString(cx,
id);
1692 #if JS_VERSION < 185
1693 asciiStr = JS_GetStringBytes(_str);
1695 asciiStr = JS_EncodeString(cx,_str);
1697 printf (
"we have as a parameter :%s:\n",asciiStr);
1698 #if JS_VERSION >= 185
1699 JS_free(cx,asciiStr);
1705 #ifdef JSVRMLCLASSESVERBOSE
1706 printf (
"_standardMFGetProperty finishing; element is %u\n",(
unsigned int)*vp);
1735char *mf2str(
int type,
union anyVrml *ptr);
1736char *sf2str(
int sftype,
union anyVrml *any){
1742 case FIELDTYPE_SFBool:
1743 if(any->sfbool) str = strdup(
"true");
1744 else str = strdup(
"false");
1746 case FIELDTYPE_SFInt32:
1747 sprintf(strbuf,
"%d",any->sfint32);
1748 str = strdup(strbuf);
1750 case FIELDTYPE_SFFloat:
1751 sprintf(strbuf,
"%g",any->sffloat);
1752 str = strdup(strbuf);
1754 case FIELDTYPE_SFDouble:
1755 case FIELDTYPE_SFTime:
1756 sprintf(strbuf,
"%g",any->sfdouble);
1757 str = strdup(strbuf);
1759 case FIELDTYPE_SFString:{
1760 str = (
char *)malloc(strlen(any->sfstring->strptr)+3);
1762 str = strcat(str,any->sfstring->strptr);
1763 str = strcat(str,
"\"");
1766 case FIELDTYPE_SFVec2f:
1768 sprintf(strbuf,
"%f %f",any->sfvec2f.c[0],any->sfvec2f.c[1]);
1769 str = strdup(strbuf);
1772 case FIELDTYPE_SFVec2d:
1774 sprintf(strbuf,
"%g %g",any->sfvec2d.c[0],any->sfvec2d.c[1]);
1775 str = strdup(strbuf);
1778 case FIELDTYPE_SFVec3f:
1779 case FIELDTYPE_SFColor:
1781 sprintf(strbuf,
"%f %f %f",any->sfvec3f.c[0],any->sfvec3f.c[1],any->sfvec3f.c[2]);
1782 str = strdup(strbuf);
1785 case FIELDTYPE_SFVec3d:
1787 sprintf(strbuf,
"%g %g %g",any->sfvec3d.c[0],any->sfvec3d.c[1],any->sfvec3d.c[2]);
1788 str = strdup(strbuf);
1791 case FIELDTYPE_SFColorRGBA:
1792 case FIELDTYPE_SFRotation:
1793 case FIELDTYPE_SFVec4f:
1795 sprintf(strbuf,
"%f %f %f %f",any->sfvec4f.c[0],any->sfvec4f.c[1],any->sfvec4f.c[2],any->sfvec4f.c[3]);
1796 str = strdup(strbuf);
1799 case FIELDTYPE_SFVec4d:
1801 sprintf(strbuf,
"%g %g %g %g",any->sfvec4d.c[0],any->sfvec4d.c[1],any->sfvec4d.c[2],any->sfvec4d.c[3]);
1802 str = strdup(strbuf);
1805 case FIELDTYPE_SFNode:
1806 sprintf(strbuf,
"%p",any->sfnode);
1807 str = strdup(strbuf);
1809 case FIELDTYPE_SFImage:
1810 str = mf2str(FIELDTYPE_MFInt32,any);
1812 case FIELDTYPE_SFMatrix3f:
1813 case FIELDTYPE_SFMatrix3d:
1814 case FIELDTYPE_SFMatrix4f:
1815 case FIELDTYPE_SFMatrix4d:
1822char *mf2str(
int type,
union anyVrml *ptr){
1823 int len, elen, sftype, i;
1824 char *p, *str = NULL;
1825 static int showType = 0;
1828 if(showType) len += strlen(FIELDTYPES[type]);
1829 str = (
char *)malloc(len +1);
1831 if(showType) strcat(str,FIELDTYPES[type]);
1832 str = strcat(str,
"[ ");
1834 sftype = type2SF(type);
1835 p = (
char *)ptr->mfbool.p;
1836 elen = sizeofSF(sftype);
1837 for(i=0;i<ptr->mfbool.n;i++)
1839 char * sf = sf2str(sftype,(
union anyVrml*)p);
1840 str = (
char *)realloc(str,strlen(str)+strlen(sf)+2);
1841 str = strcat(str,sf);
1842 str = strcat(str,
" ");
1846 str[strlen(str)-1] =
']';
1850JSBool doMFToString(JSContext *cx, JSObject *obj,
const char *className, jsval *rval)
1852 if(SM_method() == 2){
1857 if((ptr = (AnyNative*)JS_GetPrivateFw(cx,obj)) == NULL){
1858 printf(
"in doMFToString - not a Native\n");
1862 str = mf2str(ptr->type,any);
1863 _str = JS_NewStringCopyZ(cx,str);
1864 *rval = STRING_TO_JSVAL(_str);
1868 JSString *_str, *_tmpStr;
1870 char *_buff, *_tmp_valStr, *_tmp_buff;
1871 const char *_empty_array =
"[]";
1873 size_t buff_size = 0, tmp_valStr_len = 0, tmp_buff_len = 0;
1874 JSBool isString = JS_FALSE;
1875 JSBool isImage = JS_FALSE;
1877 JSBool encodedTmpValstr = JS_FALSE;
1879 if (!JS_GetProperty(cx, obj, MF_LENGTH_FIELD, &_v)) {
1880 printf(
"JS_GetProperty failed for \"%s\" in doMFToString for %s.\n",
1881 MF_LENGTH_FIELD,className);
1884 len = JSVAL_TO_INT(_v);
1886 #ifdef JSVRMLCLASSESVERBOSE
1887 printf (
"doMFToString, obj %p len %d\n",obj, len);
1888 printJSNodeType (cx,obj);
1892 _str = JS_NewStringCopyZ(cx, _empty_array);
1893 *rval = STRING_TO_JSVAL(_str);
1894 #ifdef JSVRMLCLASSESVERBOSE
1895 printf (
"doMFToString, len is zero, returning JS_TRUE, and %d\n",(
int)*rval);
1900 if (!strcmp(className,
"MFString")) {
1903 if (!strcmp(className,
"SFImage")) {
1905 #ifdef JSVRMLCLASSESVERBOSE
1906 printf (
"doMFToString - doing an image\n");
1910 buff_size = LARGESTRING;
1911 _buff = MALLOC(
char *, buff_size *
sizeof(
char));
1912 memset(_buff, 0, buff_size);
1914 for (i = 0; i < len; i++) {
1915 if (!JS_GetElement(cx, obj, i, &_v)) {
1916 printf(
"warning, no element %d of %d in doMFToString for a type of %s.\n",
1918 _tmp_valStr = strdup(
"NULL");
1921 #ifdef JSVRMLCLASSESVERBOSE
1922 if (JSVAL_IS_NUMBER(_v)) printf (
"is a number\n");
1923 if (JSVAL_IS_INT(_v)) printf (
"is an integer\n");
1924 if (JSVAL_IS_DOUBLE(_v)) printf (
"is an double\n");
1927 _tmpStr = JS_ValueToString(cx, _v);
1928 if (_tmpStr==NULL) {
1929 _tmp_valStr = strdup(
"NULL");
1931 _tmp_valStr = JS_EncodeString(cx,_tmpStr);
1932 encodedTmpValstr = JS_TRUE;
1936 #ifdef JSVRMLCLASSESVERBOSE
1937 printf (
"doMFToString, element %d is %#x, string %s\n",i,(
unsigned int)_v,_tmp_valStr);
1940 tmp_valStr_len = strlen(_tmp_valStr) + 1;
1941 tmp_buff_len = strlen(_buff);
1943 if ((buff_size - (tmp_buff_len + 1)) < (tmp_valStr_len + 1)) {
1944 buff_size += LARGESTRING;
1947 JS_realloc(cx, _buff, buff_size *
sizeof(
char *)))
1949 printf(
"JS_realloc failed for %d in doMFToString for %s.\n", i, className);
1951 if (encodedTmpValstr == JS_TRUE) JS_free(cx,_tmp_valStr);
1952 if(_tmp_valStr) {free(_tmpStr); _tmpStr = NULL;}
1959 sprintf(_buff,
"[ \"%.*s\" ]", (
int) tmp_valStr_len, _tmp_valStr);
1961 sprintf(_buff,
"[ %.*s ]", (
int) tmp_valStr_len, _tmp_valStr);
1964 if (encodedTmpValstr == JS_TRUE) {
1965 JS_free(cx,_tmp_valStr);
1966 encodedTmpValstr = JS_FALSE;
1968 if(_tmp_valStr) {free(_tmpStr); _tmpStr = NULL;}
1973 _tmp_buff = MALLOC(
char *, (tmp_buff_len + 1) *
sizeof(
char));
1974 memset(_tmp_buff, 0, tmp_buff_len + 1);
1975 memmove(_tmp_buff, _buff, tmp_buff_len);
1976 memset(_buff, 0, buff_size);
1978 if (i == 0 && len > 1) {
1980 sprintf(_buff,
"[ \"%.*s\"",
1981 (
int) tmp_valStr_len, _tmp_valStr);
1983 sprintf(_buff,
"[ %.*s", (
int) tmp_valStr_len, _tmp_valStr);
1985 }
else if (i == (len - 1)) {
1987 sprintf(_buff,
"%.*s, \"%.*s\" ]",
1988 (
int) tmp_buff_len, _tmp_buff, (
int) tmp_valStr_len, _tmp_valStr);
1990 sprintf(_buff,
"%.*s, %.*s ]",
1991 (
int) tmp_buff_len, _tmp_buff, (
int) tmp_valStr_len, _tmp_valStr);
1995 sprintf(_buff,
"%.*s, \"%.*s\"",
1996 (
int) tmp_buff_len, _tmp_buff, (
int) tmp_valStr_len, _tmp_valStr);
1998 sprintf(_buff,
"%.*s, %.*s",
1999 (
int) tmp_buff_len, _tmp_buff, (
int) tmp_valStr_len, _tmp_valStr);
2003 FREE_IF_NZ (_tmp_buff);
2005 if (encodedTmpValstr == JS_TRUE) {
2006 JS_free(cx,_tmp_valStr);
2007 encodedTmpValstr = JS_FALSE;
2009 if(_tmp_valStr) {free(_tmpStr); _tmpStr = NULL;}
2016 for (i=0; i<(int)strlen(_buff); i++) {
2017 if (_buff[i] ==
',') _buff[i]=
' ';
2018 if (_buff[i] ==
']') _buff[i]=
' ';
2019 if (_buff[i] ==
'[') _buff[i]=
' ';
2023 _str = JS_NewStringCopyZ(cx, _buff);
2024 *rval = STRING_TO_JSVAL(_str);
2031doMFAddProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp,
const char *name) {
2039 if (!JS_IdToValue(cx,iid,&
id)) {
2040 printf(
"\tdoMFAddProperty:%s JS_IdToValue failed\n",name);
2047 #ifdef JSVRMLCLASSESVERBOSE
2048 printf(
"\tdoMFAddProperty:%s id %d (%d) NodeType: ",name,(
int)
id,ind);
2049 printJSNodeType(cx,obj);
2052 str = JS_ValueToString(cx,
id);
2053 p = JS_EncodeString(cx,str);
2055 #ifdef JSVRMLCLASSESVERBOSE
2056 printf(
"\tid string %s\n ",p);
2059 if (!strcmp(p, MF_LENGTH_FIELD) ||
2060 !strcmp(p,
"MF_ECMA_has_changed") ||
2061 !strcmp(p,
"_parentField") ||
2062 !strcmp(p,
"toString") ||
2063 !strcmp(p,
"setTransform") ||
2064 !strcmp(p,
"assign") ||
2065 !strcmp(p,
"inverse") ||
2066 !strcmp(p,
"transpose") ||
2067 !strcmp(p,
"multLeft") ||
2068 !strcmp(p,
"multRight") ||
2069 !strcmp(p,
"multVecMatrix") ||
2070 !strcmp(p,
"multMatrixVec") ||
2071 !strcmp(p,
"constructor") ||
2072 !strcmp(p,
"getTransform")) {
2073 #ifdef JSVRMLCLASSESVERBOSE
2074 printf(
"property \"%s\" is one of the standard properties. Do nothing.\n", p);
2082 #ifdef JSVRMLCLASSESVERBOSE
2083 printf(
"\tdoMFAddProperty:%s id %d NodeType: ",name,(
int)
id);
2084 printJSNodeType(cx,obj);
2085 printf(
"\tdoMFAddProperty:%s id %d string %s ",name,(
int)
id,p);
2091 if (!JSVAL_IS_INT(
id)){
2092 printf(
"JSVAL_IS_INT failed for id in doMFAddProperty.\n");
2095 if (!JS_GetProperty(cx, obj, MF_LENGTH_FIELD, &v)) {
2096 printf(
"JS_GetProperty failed for \"%s\" in doMFAddProperty.\n",MF_LENGTH_FIELD);
2099 ind = JSVAL_TO_INT(
id);
2101 len = JSVAL_TO_INT(v);
2105 #ifdef JSVRMLCLASSESVERBOSE
2106 printf (
"doMFAddProperty, len %d ind %d\n",len,ind);
2109 v = INT_TO_JSVAL(len);
2110 if (!JS_SetProperty(cx, obj, MF_LENGTH_FIELD, &v)) {
2111 printf(
"JS_SetProperty failed for \"%s\" in doMFAddProperty.\n",MF_LENGTH_FIELD);
2116 #ifdef JSVRMLCLASSESVERBOSE
2117 printf(
"index = %d, length = %d\n", ind, len);
2123void JS_ECMA_TO_X3D(JSContext *cx,
void *Data,
unsigned datalen,
int dataType, jsval *newval);
2124void JS_SF_TO_X3D(JSContext *cx,
void *Data,
unsigned datalen,
int dataType, jsval *newval);
2125void JS_SF_TO_X3D_B(JSContext *cx,
void *Data,
int dataType,
int *valueChanged, jsval *newval);
2128doMFSetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp,
int type) {
2145 if (!JS_IdToValue(cx,iid,&
id)) {
2146 printf(
"doMFSetProperty, JS_IdToValue failed.\n");
2150 if(SM_method() == 2){
2156 if ((ptr = (AnyNative *)JS_GetPrivateFw(cx,obj)) == NULL) {
2157 printf(
"JS_GetPrivate failed in standardMFGetterProperty\n");
2160 valueChanged = ptr->valueChanged;
2161 sftype = type2SF(ptr->type);
2162 sfsize = sizeofSForMF(sftype);
2164 if (JSVAL_IS_INT(
id)) {
2169 int index = JSVAL_TO_INT(
id);
2170 if(index < 0)
return JS_FALSE;
2172 newlength = index + 1;
2173 mf_n = ptr->v->mfbool.n;
2174 mf_p = (
char *)ptr->v->mfbool.p;
2175 iupper = upper_power_of_two(newlength);
2176 if(newlength > mf_n ) {
2179 mf_p = (
char *)malloc(sfsize*iupper);
2180 memset(mf_p,0,(
size_t)sfsize*iupper);
2183 mf_p = (
char *)realloc(mf_p,(
size_t)sfsize*iupper);
2184 memset(mf_p + (
size_t)sfsize*mf_n,0,(
size_t)(iupper - mf_n)*sfsize);
2186 ptr->v->mfbool.n = newlength;
2188 ptr->v->mfbool.p = (
int*)mf_p;
2189 any = (
union anyVrml*)(mf_p + (index * sfsize));
2190 switch(type2SF(ptr->type)){
2191 case FIELDTYPE_SFBool:
2192 case FIELDTYPE_SFFloat:
2193 case FIELDTYPE_SFTime:
2194 case FIELDTYPE_SFDouble:
2195 case FIELDTYPE_SFInt32:
2196 case FIELDTYPE_SFString:
2198 JS_ECMA_TO_X3D(cx, any, sfsize,sftype,vp);
2203 case FIELDTYPE_SFColor:
2204 case FIELDTYPE_SFColorRGBA:
2205 case FIELDTYPE_SFVec2f:
2206 case FIELDTYPE_SFVec3f:
2207 case FIELDTYPE_SFVec4f:
2208 case FIELDTYPE_SFVec2d:
2209 case FIELDTYPE_SFVec3d:
2210 case FIELDTYPE_SFVec4d:
2211 case FIELDTYPE_SFMatrix3f:
2212 case FIELDTYPE_SFMatrix4f:
2213 case FIELDTYPE_SFMatrix3d:
2214 case FIELDTYPE_SFMatrix4d:
2215 case FIELDTYPE_SFRotation:
2216 case FIELDTYPE_SFImage:
2217 JS_SF_TO_X3D_B(cx, any, sftype, valueChanged, vp);
2220 case FIELDTYPE_SFNode:
2221 JS_SF_TO_X3D_BNode(cx, any, sftype, valueChanged, vp);
2223 default: printf (
"invalid type in standardMFGetProperty method 2\n");
return JS_FALSE;
2226 }
else if(JSVAL_IS_STRING(
id)){
2230 _idStr = JS_ValueToString(cx,
id);
2231 _id_c = JS_EncodeString(cx,_idStr);
2232 if (strcmp (
"length",_id_c) == 0) {
2236 if(JSVAL_IS_INT(*vp)){
2239 int newlength = JSVAL_TO_INT(*vp);
2241 mf_n = ptr->v->mfbool.n;
2242 mf_p = (
char *)ptr->v->mfbool.p;
2243 iupper = upper_power_of_two(newlength);
2244 if(newlength > mf_n ) {
2247 mf_p = (
char *)malloc(sfsize*iupper);
2248 memset(mf_p,0,(
size_t)sfsize*iupper);
2251 mf_p = (
char *)realloc(mf_p,(
size_t)sfsize*iupper);
2252 memset(mf_p + (
size_t)sfsize*mf_n,0,(
size_t)(iupper - mf_n)*sfsize);
2255 ptr->v->mfbool.n = newlength;
2256 ptr->v->mfbool.p = (
int*)mf_p;
2265 #ifdef JSVRMLCLASSESVERBOSE
2268 printf (
"doMFSetProperty, for object %p, vp %u\n", obj,(
unsigned int)*vp);
2269 _str = JS_ValueToString(cx,
id);
2271 _c = JS_GetStringBytes(_str);
2273 _c = JS_EncodeString(cx,_str);
2275 printf (
"id is %s\n",_c);
2277 _sstr = JS_ValueToString(cx, *vp);
2278 printf (
"looking up value for %d %#x object %p\n",(
int)*vp,(
unsigned int)*vp,obj);
2280 _cc = JS_GetStringBytes(_sstr);
2282 _cc = JS_EncodeString(cx,_sstr);
2284 printf(
"\tdoMFSetProperty:%d: obj = %p, id = %s, vp = %s\n",type,
2286 if (JSVAL_IS_OBJECT(*vp)) { printf (
"doMFSet, vp is an OBJECT\n"); }
2287 if (JSVAL_IS_PRIMITIVE(*vp)) { printf (
"doMFSet, vp is an PRIMITIVE\n"); }
2289 printf (
"parent is a "); printJSNodeType(cx,obj);
2291#if JS_VERSION >= 185
2298 if (type == FIELDTYPE_MFInt32) {
2299 #ifdef JSVRMLCLASSESVERBOSE
2300 printf (
"doMFSetProperty, this should be an int \n");
2303 if (!JSVAL_IS_INT(*vp)) {
2304 #ifdef JSVRMLCLASSESVERBOSE
2305 printf (
"is NOT an int\n");
2324 *vp = INT_TO_JSVAL(i);
2326 }
else if ((type == FIELDTYPE_MFFloat) || (type == FIELDTYPE_MFTime)) {
2327 #ifdef JSVRMLCLASSESVERBOSE
2328 printf (
"doMFSetProperty - ensure that this is a DOUBLE ");
2329 _sstr = JS_ValueToString(cx, *vp);
2331 _cc = JS_GetStringBytes(_sstr);
2333 _cc = JS_EncodeString(cx,_sstr);
2335 printf (
"value is %s \n",_cc);
2336#if JS_VERSION >= 185
2341 if (JSVAL_IS_INT(*vp)) {
2342 ii = JSVAL_TO_INT(*vp);
2345 if (JS_NewNumberValue(cx,dd,vp) == JS_FALSE) {
2346 printf(
"JS_NewNumberValue failed for %f in simplecopyelements.\n",dd);
2352 #ifdef JSVRMLCLASSESVERBOSE
2353 printf (
"setting changed flag on %p\n",obj);
2358 case FIELDTYPE_MFInt32:
2359 case FIELDTYPE_MFBool:
2360 case FIELDTYPE_MFTime:
2361 case FIELDTYPE_MFFloat:
2362 case FIELDTYPE_MFString: {
2363 SET_MF_ECMA_HAS_CHANGED
2370 if (JSVAL_IS_INT(
id)) {
2373 #ifdef JSVRMLCLASSESVERBOSE
2374 printf (
"saving element %d\n",JSVAL_TO_INT(
id));
2377 if (!JS_DefineElement(cx, obj, JSVAL_TO_INT(
id), *vp,
2378 JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK,
2379 JSPROP_ENUMERATE)) {
2380 printf(
"JS_DefineElement failed in doMFSetProperty.\n");
2385 if (!JS_GetProperty(cx, obj, MF_LENGTH_FIELD, &myv)) {
2386 printf(
"JS_GetProperty failed for \"%s\" in doMFSetProperty.\n", MF_LENGTH_FIELD);
2390 #ifdef JSVRMLCLASSESVERBOSE
2391 printf (
"object %p old length %d, possibly new length is going to be %d\n",obj,JSVAL_TO_INT(myv), JSVAL_TO_INT(
id)+1);
2394 if (JSVAL_TO_INT(myv) < (JSVAL_TO_INT(
id)+1)) {
2395 printf (
"new length is %d\n",JSVAL_TO_INT(
id)+1);
2396 myv = INT_TO_JSVAL(JSVAL_TO_INT(
id)+1);
2397 if (!JS_SetProperty(cx, obj, MF_LENGTH_FIELD, &myv)) {
2398 printf(
"JS_SetProperty failed for \"%s\" in doMFSetProperty.\n", MF_LENGTH_FIELD);
2404 #ifdef JSVRMLCLASSESVERBOSE
2405 printf (
"doMFSetProperty, lets see if we have an SFNode somewhere up the chain...\n");
2415 par = JS_GetParentFw(cx, me);
2416 while (par != NULL) {
2417 #ifdef JSVRMLCLASSESVERBOSE
2418 printf (
"for obj %p: ",me);
2419 printJSNodeType(cx,me);
2420 printf (
"... parent %p\n",par);
2421 printJSNodeType(cx,par);
2424 if (JS_InstanceOf (cx, par, &SFNodeClass, NULL)) {
2425 #ifdef JSVRMLCLASSESVERBOSE
2426 printf (
" the parent IS AN SFNODE - it is %p\n",par);
2430 if (!JS_GetProperty(cx, obj,
"_parentField", &pf)) {
2431 printf (
"doMFSetProperty, can not get parent field from this object\n");
2435 nf = OBJECT_TO_JSVAL(me);
2437 #ifdef JSVRMLCLASSESVERBOSE
2438 #if JS_VERSION < 185
2439 printf (
"parentField is %u \"%s\"\n", (
unsigned int)pf, JS_GetStringBytes(JSVAL_TO_STRING(pf)));
2441 _cc = JS_EncodeString(cx,JSVAL_TO_STRING(pf));
2442 printf (
"parentField is %u \"%s\"\n", (
unsigned int)pf, _cc);
2447 if (!JS_ValueToId(cx,pf,&oid)) {
2448 printf(
"doMFSetProperty: JS_ValueToId failed.\n");
2476 par = JS_GetParentFw(cx, me);
2484doMFStringUnquote(JSContext *cx, jsval *vp)
2486 JSString *_str, *_vpStr;
2487 char *_buff, *_tmp_vpStr;
2489 unsigned int i, j = 0;
2491 _str = JS_ValueToString(cx, *vp);
2492 _buff = JS_EncodeString(cx,_str);
2494 _buff_len = strlen(_buff) + 1;
2496 #ifdef JSVRMLCLASSESVERBOSE
2497 printf(
"doMFStringUnquote: vp = \"%s\"\n", _buff);
2500 if (memchr(_buff,
'"', _buff_len) != NULL) {
2501 _tmp_vpStr = MALLOC(
char *, _buff_len *
sizeof(
char));
2503 memset(_tmp_vpStr, 0, _buff_len);
2505 for (i = 0; i <= (_buff_len-1); i++) {
2506 if (_buff[i] !=
'"' ||
2507 (i > 0 && _buff[i - 1] ==
'\\')) {
2508 _tmp_vpStr[j++] = _buff[i];
2511 #ifdef JSVRMLCLASSESVERBOSE
2512 printf (
"new unquoted string %s\n",_tmp_vpStr);
2515 _vpStr = JS_NewStringCopyZ(cx, _tmp_vpStr);
2516 *vp = STRING_TO_JSVAL(_vpStr);
2518 FREE_IF_NZ (_tmp_vpStr);
2528globalResolve(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid){
2529 JSObject *obj = *hobj.address();
2530 jsid
id = *hiid.address();
2540JSBool loadVrmlClasses(JSContext *context, JSObject *globalObj) {
2547 while (JSLoadProps[i].fwclass != NULL) {
2548 #ifdef JSVRMLCLASSESVERBOSE
2549 printf (
"loading %s\n",JSLoadProps[i].
id);
2553 if (( myProto = JS_InitClass(context, globalObj, NULL, JSLoadProps[i].fwclass,
2554 (JSNative)JSLoadProps[i].constr, INIT_ARGC, (JSPropertySpec*)JSLoadProps[i].Properties,
2555 (JSFunctionSpec *)JSLoadProps[i].Functions, NULL, NULL)) == NULL) {
2556 printf(
"JS_InitClass for %s failed in loadVrmlClasses.\n",JSLoadProps[i].
id);
2560 v = OBJECT_TO_JSVAL(myProto);
2561 if (!JS_SetProperty(context, globalObj, JSLoadProps[i].
id, &v)) {
2562 printf(
"JS_SetProperty for %s failed in loadVrmlClasses.\n",JSLoadProps[i].
id);
2572int findNameInECMATable(JSContext *context,
char *toFind) {
2574 ppjsVRMLClasses p = (ppjsVRMLClasses)gglobal()->jsVRMLClasses.prv;
2575 #ifdef JSVRMLCLASSESVERBOSE
2576 printf (
"findNameInECMATable, looking for %s context %p\n",toFind,context);
2580 while (i < p->maxECMAVal) {
2581 #ifdef JSVRMLCLASSESVERBOSE
2582 printf (
" %d: %s==%s cx %p==%p\n",i,p->ECMAValues[i].name,toFind,p->ECMAValues[i].context,context);
2586 if ((p->ECMAValues[i].context == context) && (strcmp(p->ECMAValues[i].name,toFind)==0)) {
2587 #ifdef JSVRMLCLASSESVERBOSE
2588 printf (
"fineInECMATable: found value at %d\n",i);
2590 return p->ECMAValues[i].valueChanged;
2596 #ifdef JSVRMLCLASSESVERBOSE
2597 printf (
"findInECMATable - did not find %s\n",toFind);
2604void resetNameInECMATable(JSContext *context,
char *toFind) {
2606 ppjsVRMLClasses p = (ppjsVRMLClasses)gglobal()->jsVRMLClasses.prv;
2607 #ifdef JSVRMLCLASSESVERBOSE
2608 printf (
"findNameInECMATable, looking for %s\n",toFind);
2612 while (i < p->maxECMAVal) {
2613 #ifdef JSVRMLCLASSESVERBOSE
2614 printf (
" %d: %s==%s cx %p==%p\n",i,p->ECMAValues[i].name,toFind,p->ECMAValues[i].context,context);
2618 if ((p->ECMAValues[i].context == context) && (strcmp(p->ECMAValues[i].name,toFind)==0)) {
2619 #ifdef JSVRMLCLASSESVERBOSE
2620 printf (
"fineInECMATable: found value at %d\n",i);
2622 p->ECMAValues[i].valueChanged = FALSE;
2633void setInECMATable(JSContext *context,
char *toFind) {
2635 ppjsVRMLClasses p = (ppjsVRMLClasses)gglobal()->jsVRMLClasses.prv;
2636 #ifdef JSVRMLCLASSESVERBOSE
2637 printf (
"setInECMATable, looking for %s\n",toFind);
2641 while (i < p->maxECMAVal) {
2642 #ifdef JSVRMLCLASSESVERBOSE
2643 printf (
" %d: %s==%s cx %p==%p\n",i,p->ECMAValues[i].name,toFind,p->ECMAValues[i].context,context);
2647 if ((p->ECMAValues[i].context == context) && (strcmp(p->ECMAValues[i].name,toFind)==0)) {
2648 #ifdef JSVRMLCLASSESVERBOSE
2649 printf (
"setInECMATable: found value at %d\n",i);
2651 p->ECMAValues[i].valueChanged = TRUE;
2658 #ifdef JSVRMLCLASSESVERBOSE
2659 printf (
"setInECMATable - new entry at %d for %s\n",p->maxECMAVal, toFind);
2663 if (p->maxECMAVal == ECMAValueTableSize) {
2664 ConsoleMessage (
"problem in setInECMATable for scripting\n");
2665 p->maxECMAVal = ECMAValueTableSize - 10;
2668 p->ECMAValues[p->maxECMAVal-1].JS_address = INT_TO_JSVAL(0);
2670 p->ECMAValues[p->maxECMAVal-1].valueChanged = TRUE;
2671 p->ECMAValues[p->maxECMAVal-1].name = STRDUP(toFind);
2672 p->ECMAValues[p->maxECMAVal-1].context = context;
2706void X3D_ECMA_TO_JS(JSContext *cx,
void *Data,
int datalen,
int dataType, jsval *newval);
2707void X3D_MF_TO_JS(JSContext *cx, JSObject *obj,
void *Data,
int dataType, jsval *newval,
char *fieldName);
2708void X3D_MF_TO_JS_B(JSContext *cx,
void *Data,
int dataType,
int *valueChanged, jsval *newval);
2709void X3D_SF_TO_JS(JSContext *cx, JSObject *obj,
void *Data,
unsigned datalen,
int dataType, jsval *newval);
2710void X3D_SF_TO_JS_B(JSContext *cx,
void *Data,
unsigned datalen,
int dataType,
int *valueChanged, jsval *newval);
2713getECMANative(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
2714 JSObject *obj = *hobj.address();
2715 jsid iid = *hiid.address();
2716 jsval *vp = hvp.address();
2718 if(SM_method() == 2){
2722 JSString *_idStr, *_vpStr;
2723 char *_id_c, *fieldname, *_vp_c;
2727 if (!JS_IdToValue(cx,iid,&
id)) {
2728 printf(
"getECMANative: JS_IdToValue failed -- returning JS_TRUE anyways\n");
2732 _idStr = JS_ValueToString(cx,
id);
2735 _id_c = JS_EncodeString(cx,_idStr);
2762 if(!strncmp(fieldname,
"__eventIn_Value_",strlen(
"__eventIn_Value_")))
2763 fieldname = &fieldname[strlen(
"__eventIn_Value_")];
2766 int type, kind, iifield, ifound, sfsize, sftype;
2772 script = (
struct Shader_Script*)JS_GetSecondContextPrivate(cx);
2774 valueChanged = NULL;
2776 ifound = getFieldFromScript(script,fieldname,&type,&kind,&iifield,&value,&valueChanged);
2778 sftype = type2SF(type);
2779 sfsize = sizeofSForMF(sftype);
2784 case FIELDTYPE_SFBool:
2785 case FIELDTYPE_SFFloat:
2786 case FIELDTYPE_SFTime:
2787 case FIELDTYPE_SFDouble:
2788 case FIELDTYPE_SFInt32:
2789 case FIELDTYPE_SFString:
2790 X3D_ECMA_TO_JS(cx, value,sfsize,type,vp);
2792 case FIELDTYPE_SFColor:
2793 case FIELDTYPE_SFColorRGBA:
2794 case FIELDTYPE_SFNode:
2795 case FIELDTYPE_SFVec2f:
2796 case FIELDTYPE_SFVec3f:
2797 case FIELDTYPE_SFVec4f:
2798 case FIELDTYPE_SFVec2d:
2799 case FIELDTYPE_SFVec3d:
2800 case FIELDTYPE_SFVec4d:
2801 case FIELDTYPE_SFMatrix3f:
2802 case FIELDTYPE_SFMatrix4f:
2803 case FIELDTYPE_SFMatrix3d:
2804 case FIELDTYPE_SFMatrix4d:
2805 case FIELDTYPE_SFRotation:
2806 case FIELDTYPE_SFImage:
2808 X3D_SF_TO_JS_B(cx, value,sfsize, type, valueChanged, vp);
2810 case FIELDTYPE_MFBool:
2811 case FIELDTYPE_MFInt32:
2812 case FIELDTYPE_MFFloat:
2813 case FIELDTYPE_MFDouble:
2814 case FIELDTYPE_MFTime:
2815 case FIELDTYPE_MFString:
2816 case FIELDTYPE_MFNode:
2817 case FIELDTYPE_MFColor:
2818 case FIELDTYPE_MFColorRGBA:
2819 case FIELDTYPE_MFVec2f:
2820 case FIELDTYPE_MFVec3f:
2821 case FIELDTYPE_MFVec4f:
2822 case FIELDTYPE_MFVec2d:
2823 case FIELDTYPE_MFVec3d:
2824 case FIELDTYPE_MFVec4d:
2825 case FIELDTYPE_MFMatrix3f:
2826 case FIELDTYPE_MFMatrix4f:
2827 case FIELDTYPE_MFMatrix3d:
2828 case FIELDTYPE_MFMatrix4d:
2829 case FIELDTYPE_MFRotation:
2830 case FIELDTYPE_MFImage:
2832 X3D_MF_TO_JS_B(cx, value, type, valueChanged, vp);
2835 printf (
"unhandled type FIELDTYPE_ %d in ___getSFNodeField\n", type) ;
2839 printf(
"getECMANative didn't find field %s in script\n",fieldname);
2855setECMANative(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
2856 JSObject *obj = *hobj.address();
2857 jsid iid = *hiid.address();
2858 jsval *vp = hvp.address();
2861 JSString *_vpStr, *_newVpStr;
2862 JSBool ret = JS_TRUE;
2863 char *_id_c, *fieldname;
2865 char *_vp_c, *_new_vp_c;
2869 if (!JS_IdToValue(cx,iid,&
id)) {
2870 printf(
"JS_IdToValue failed\n");
2874 _idStr = JS_ValueToString(cx,
id);
2875 _id_c = JS_EncodeString(cx,_idStr);
2881 if(!strncmp(fieldname,
"__eventIn_Value_",strlen(
"__eventIn_Value_")))
2882 fieldname = &fieldname[strlen(
"__eventIn_Value_")];
2883 if(SM_method() == 2){
2884 int type, kind, iifield, *valueChanged, ifound;
2886 valueChanged = NULL;
2891 script = (
struct Shader_Script*)JS_GetSecondContextPrivate(cx);
2893 ifound = getFieldFromScript(script,fieldname,&type,&kind,&iifield,&value,&valueChanged);
2908 if (JSVAL_IS_NULL(*vp)){
2909 if(type == FIELDTYPE_SFNode)
2910 value->sfnode = NULL;
2914 }
else if ((*vp).isObject()) {
2916 if ((rhs = (AnyNative *)JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(*vp))) == NULL) {
2922 if(type == rhs->type){
2927 shallow_copy_field(rhs->type,rhs->v,value);
2934 int sfsize = sizeofSForMF(type);
2936 switch(type2SF(type)){
2937 case FIELDTYPE_SFBool:
2938 case FIELDTYPE_SFFloat:
2939 case FIELDTYPE_SFTime:
2940 case FIELDTYPE_SFDouble:
2941 case FIELDTYPE_SFInt32:
2942 case FIELDTYPE_SFString:
2944 JS_ECMA_TO_X3D(cx, value, sfsize,type,vp);
2957 printf(
"set didn't find field %s in script\n",fieldname);
2961 setInECMATable(cx, _id_c);
2963 if (JSVAL_IS_STRING(*vp)) {
2964 _vpStr = JS_ValueToString(cx, *vp);
2965 _vp_c = JS_EncodeString(cx,_vpStr);
2967 len = strlen(_vp_c);
2971 _new_vp_c = MALLOC(
char *, (len + 3) *
sizeof(
char));
2977 memset(_new_vp_c, 0, len);
2979 sprintf(_new_vp_c,
"%.*s", (
int) len, _vp_c);
2980 _newVpStr = JS_NewStringCopyZ(cx, _new_vp_c);
2981 *vp = STRING_TO_JSVAL(_newVpStr);
2983 #ifdef JSVRMLCLASSESVERBOSE
2984 printf(
"setECMANative: have string obj = %p, id = \"%s\", vp = %s\n",
2985 obj, _id_c, _new_vp_c);
2987 FREE_IF_NZ (_new_vp_c);
2991 #ifdef JSVRMLCLASSESVERBOSE
2992 _vpStr = JS_ValueToString(cx, *vp);
2994 _vp_c = JS_GetStringBytes(_vpStr);
2996 _vp_c = JS_EncodeString(cx,_vpStr);
2998 printf(
"setECMANative: obj = %p, id = \"%s\", vp = %s\n",
3000#if JS_VERSION >= 185
3014getAssignProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
3015 JSObject *obj = *hobj.address();
3016 jsid iid = *hiid.address();
3017 jsval *vp = hvp.address();
3021 #ifdef JSVRMLCLASSESVERBOSE
3022 JSString *_idStr, *_vpStr;
3023 char *_id_c, *_vp_c;
3025#if JS_VERSION >= 185
3027 if (!JS_IdToValue(cx,iid,&
id)) {
3028 printf(
"getAssignProperty: JS_IdToValue failed -- returning JS_TRUE anyways\n");
3032 _idStr = JS_ValueToString(cx,
id);
3033 _vpStr = JS_ValueToString(cx, *vp);
3035 _id_c = JS_GetStringBytes(_idStr);
3036 _vp_c = JS_GetStringBytes(_vpStr);
3038 _id_c = JS_EncodeString(cx,_idStr);
3039 _vp_c = JS_EncodeString(cx,_vpStr);
3041 printf(
"getAssignProperty: obj = %p, id = \"%s\", vp = %s\n",
3043 printf (
"what is vp? \n");
3044 if (JSVAL_IS_OBJECT(*vp)) printf (
"is OBJECT\n");
3045 if (JSVAL_IS_STRING(*vp)) printf (
"is STRING\n");
3046 if (JSVAL_IS_INT(*vp)) printf (
"is INT\n");
3047 if (JSVAL_IS_DOUBLE(*vp)) printf (
"is DOUBLE\n");
3049#if JS_VERSION >= 185
3061setAssignProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
3062 JSObject *obj = *hobj.address();
3063 jsid iid = *hiid.address();
3064 jsval *vp = hvp.address();
3068 const uintN _argc = 2;
3070 jsval newVal, initVal, _argv[2];
3072 jsval newVal, initVal, _argv[_argc];
3079 if (!JS_IdToValue(cx,iid,&
id)) {
3080 printf(
"setAssignProperty: JS_IdToValue failed.\n");
3085 if (JSVAL_IS_STRING(
id)) {
3086 if (!JS_ConvertValue(cx, *vp, JSTYPE_OBJECT, &newVal)) {
3087 printf(
"JS_ConvertValue failed in setAssignProperty.\n");
3091 _str = JSVAL_TO_STRING(
id);
3092 _id_c = JS_EncodeString(cx,_str);
3093 if (!JS_GetProperty(cx, obj, _id_c, &initVal)) {
3094 printf(
"JS_GetProperty failed in setAssignProperty.\n");
3098 #ifdef JSVRMLCLASSESVERBOSE
3099 printf(
"setAssignProperty: obj = %p, id = \"%s\", from = %d, to = %d\n",
3100 obj, _id_c, (
int)newVal, (
int)initVal);
3102 if (JSVAL_IS_OBJECT(initVal)) printf (
"initVal is an OBJECT\n");
3103 if (JSVAL_IS_STRING(initVal)) printf (
"initVal is an STRING\n");
3104 if (JSVAL_IS_NUMBER(initVal)) printf (
"initVal is an NUMBER\n");
3105 if (JSVAL_IS_DOUBLE(initVal)) printf (
"initVal is an DOUBLE\n");
3106 if (JSVAL_IS_INT(initVal)) printf (
"initVal is an INT\n");
3108 if (JSVAL_IS_OBJECT(newVal)) printf (
"newVal is an OBJECT\n");
3109 if (JSVAL_IS_STRING(newVal)) printf (
"newVal is an STRING\n");
3110 if (JSVAL_IS_NUMBER(newVal)) printf (
"newVal is an NUMBER\n");
3111 if (JSVAL_IS_DOUBLE(newVal)) printf (
"newVal is an DOUBLE\n");
3112 if (JSVAL_IS_INT(newVal)) printf (
"newVal is an INT\n");
3114 if (JSVAL_IS_OBJECT(
id)) printf (
"id is an OBJECT\n");
3115 if (JSVAL_IS_STRING(
id)) printf (
"id is an STRING\n");
3116 if (JSVAL_IS_NUMBER(
id)) printf (
"id is an NUMBER\n");
3117 if (JSVAL_IS_DOUBLE(
id)) printf (
"id is an DOUBLE\n");
3118 if (JSVAL_IS_INT(
id)) printf (
"id is an INT\n");
3121 printf (
"id is %s\n",JS_GetStringBytes(JS_ValueToString(cx,
id)));
3122 printf (
"initVal is %s\n",JS_GetStringBytes(JS_ValueToString(cx,initVal)));
3123 printf (
"newVal is %s\n",JS_GetStringBytes(JS_ValueToString(cx,newVal)));
3125 printf (
"id is %s\n",JS_EncodeString(cx,JS_ValueToString(cx,
id)));
3126 printf (
"initVal is %s\n",JS_EncodeString(cx,JS_ValueToString(cx,initVal)));
3127 printf (
"newVal is %s\n",JS_EncodeString(cx,JS_ValueToString(cx,newVal)));
3133 _o = JSVAL_TO_OBJECT(initVal);
3135 #ifdef xxJSVRMLCLASSESVERBOSE
3136 printf (
"in setAssignProperty, o is %u type ",_o);
3137 printJSNodeType(cx,_o);
3144 if (!JS_CallFunctionName(cx, _o,
"assign", _argc, _argv, vp)) {
3145 printf(
"JS_CallFunctionName failed in setAssignProperty.\n");
3149 #ifdef JSVRMLCLASSESVERBOSE
3150 _str = JS_ValueToString(cx,
id);
3152 _id_c = JS_GetStringBytes(_str);
3154 _id_c = JS_EncodeString(cx,_str);
3156 printf(
"setAssignProperty: obj = %p, id = \"%s\"\n",
3158#if JS_VERSION >= 185