40int JS_SetPrivateFw(JSContext *cx, JSObject* obj,
void *data);
41JSObject* JS_NewGlobalObjectFw(JSContext *cx, JSClass *clasp);
42void * JS_GetPrivateFw(JSContext *cx,JSObject*_obj);
43JSObject* JS_GetParentFw(JSContext *cx, JSObject *me);
44JSObject * JS_ConstructObjectWithArgumentsFw(JSContext *cx, JSClass *clasp, JSObject *parent,
unsigned argc, jsval *argv);
45JSObject * JS_ConstructObjectFw(JSContext *cx, JSClass *clasp,
void *whatever, JSObject *parent);
46JSObject * JS_GetPrototypeFw(JSContext *cx, JSObject * obj);
47JSClass * JS_GetClassFw(JSContext *cx, JSObject * obj);
48#define STRING_SIZE 256
52#define jsuint uint32_t
54#define jsdouble double
56#define JS_FinalizeStub NULL
57#define JSSCRIPT2 JSScript
58#define JS_GET_CLASS JS_GetClassFw
59JSBool JS_NewNumberValue(JSContext *cx, jsdouble d, jsval *rval);
79#include "../vrml_parser/CRoutes.h"
80#include "../opengl/OpenGL_Utils.h"
82#include "../main/ProdCon.h"
83#include "../scenegraph/RenderFuncs.h"
94void getCurrentSpeed();
97#include "../ui/common.h"
105struct X3D_Anchor* get_EAIEventsIn_AnchorNode();
113int capabilitiesHandler_getTableLength(
int* table);
114int capabilitiesHandler_getComponentLevel(
int *table,
int comp);
115int capabilitiesHandler_getProfileLevel(
int prof);
116const int *capabilitiesHandler_getProfileComponent(
int prof);
117const int *capabilitiesHandler_getCapabilitiesTable();
118typedef struct intTableIndex{
132struct X3D_Node* broto_search_DEFname(
struct X3D_Proto* context,
const char* name);
133struct X3D_Node* broto_search_ALLnames(
struct X3D_Proto* context,
const char* name,
int* source);
134void remove_node_from_parents_children(
struct X3D_Node* node);
136void remove_node_from_def_list(
struct X3D_Proto* ec,
struct X3D_Node* node,
char* defname) {
137 if (ec->__DEFnames) {
139 for (
int i = 0; i < vectorSize((
Vector*)ec->__DEFnames); i++) {
141 if (!strcmp(bd->name, defname)) {
151void* addDeleteRoute0(
void* ec,
const char* callingFunc,
struct X3D_Node* fromNode,
const char* sfromField,
struct X3D_Node* toNode,
const char* stoField);
152void update_weakRoutes(
struct X3D_Proto* context);
156#include "jsUtils_sm.h"
157#include "jsVRMLClasses_sm.h"
158#include "jsVRMLBrowser_sm.h"
162int lookup_tinyid(
char* fieldname, JSPropertySpec* properties) {
163 JSPropertySpec* p = &properties[0];
167 if (!strcmp(p->name, fieldname)) {
182#define SetPropertyStub JS_StrictPropertyStub
187BrowserGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
190BrowserSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
192int jsrrunScript(JSContext *_context, JSObject *_globalObj,
char *script, jsval *rval);
248#define JS_DeletePropertyStub JS_PropertyStub
258struct string_int lookup_X3DConstants[] = {
259 {
"INITIALIZED_EVENT",1},
260 {
"SHUTDOWN_EVENT",1},
261 {
"CONNECTION_ERROR",1},
262 {
"INITIALIZED_ERROR",1},
263 {
"NOT_STARTED_STATE",1},
264 {
"IN_PROGRESS_STATE",1},
265 {
"COMPLETE_STATE",1},
267 {
"SFBool",FIELDTYPE_SFBool},
268 {
"MFBool",FIELDTYPE_MFBool},
269 {
"MFInt32",FIELDTYPE_MFInt32},
270 {
"SFInt32",FIELDTYPE_SFInt32},
271 {
"SFFloat",FIELDTYPE_SFFloat},
272 {
"MFFloat",FIELDTYPE_MFFloat},
273 {
"SFDouble",FIELDTYPE_SFDouble},
274 {
"MFDouble",FIELDTYPE_MFDouble},
275 {
"SFTime",FIELDTYPE_SFTime},
276 {
"MFTime",FIELDTYPE_MFTime},
277 {
"SFNode",FIELDTYPE_SFNode},
278 {
"MFNode",FIELDTYPE_MFNode},
279 {
"SFVec2f",FIELDTYPE_SFVec2f},
280 {
"MFVec2f",FIELDTYPE_MFVec2f},
281 {
"SFVec3f",FIELDTYPE_SFVec3f},
282 {
"MFVec3f",FIELDTYPE_MFVec3f},
283 {
"SFVec3d",FIELDTYPE_SFVec3d},
284 {
"MFVec3d",FIELDTYPE_MFVec3d},
285 {
"SFRotation",FIELDTYPE_SFRotation},
286 {
"MFRotation",FIELDTYPE_MFRotation},
287 {
"SFColor",FIELDTYPE_SFColor},
288 {
"MFColor",FIELDTYPE_MFColor},
289 {
"SFImage",FIELDTYPE_SFImage},
291 {
"SFColorRGBA",FIELDTYPE_SFColorRGBA},
292 {
"MFColorRGBA",FIELDTYPE_MFColorRGBA},
293 {
"SFString",FIELDTYPE_SFString},
294 {
"MFString",FIELDTYPE_MFString},
338 {
"inputOnly",PKW_inputOnly},
339 {
"outputOnly",PKW_outputOnly},
340 {
"inputOutput",PKW_inputOutput},
341 {
"initializeOnly",PKW_initializeOnly},
345struct string_int* lookup_string_int(
struct string_int* table,
const char* searchkey,
int* index) {
349 if (!table)
return NULL;
352 if (!strcmp(table[i].c, searchkey)) {
362X3DConstantsGetProperty(JSContext* cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp) {
363 JSObject* obj = *hobj.address();
364 jsid iid = *hiid.address();
365 jsval* vp = hvp.address();
373 if (!JS_IdToValue(cx, iid, &
id)) {
374 printf(
"JS_IdToValue failed in X3DRouteGetProperty.\n");
377 if (JSVAL_IS_STRING(
id)) {
378 str = (
char*)JS_EncodeString(cx, JSVAL_TO_STRING(
id));;
379 string_int* iret = lookup_string_int(lookup_X3DConstants, str, &index);
380 rval = INT_TO_JSVAL(iret->i);
381 JS_SET_RVAL(cx, vp, rval);
389 int len = (
sizeof(lookup_X3DConstants) /
sizeof(
struct string_int)) - 1;
393static JSClass X3DConstantsClass = {
397 JS_DeletePropertyStub,
398 X3DConstantsGetProperty,
399 JS_StrictPropertyStub,
408static JSPropertySpec(FieldDefinitionProperties)[] = {
409 {
"name", 0, JSPROP_ENUMERATE},
410 {
"accessType", 1, JSPROP_ENUMERATE},
411 {
"dataType", 2, JSPROP_ENUMERATE},
416FieldDefinitionGetProperty(JSContext* cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp) {
417 JSObject* obj = *hobj.address();
418 jsid iid = *hiid.address();
419 jsval* vp = hvp.address();
430 if (!JS_IdToValue(cx, iid, &
id)) {
431 printf(
"JS_IdToValue failed in X3DRouteGetProperty.\n");
435 if ((ptr = (
struct ProtoFieldDecl*)JS_GetPrivateFw(cx, obj)) == NULL) {
436 printf(
"JS_GetPrivate failed in FieldDefinitionGetProperty.\n");
443 if (JSVAL_IS_INT(
id))
444 index = JSVAL_TO_INT(
id);
446 index = lookup_tinyid(JS_EncodeString(cx, JSVAL_TO_STRING(
id)), FieldDefinitionProperties);
451 _str = JS_NewStringCopyZ(cx,ptr->cname);
452 rval = STRING_TO_JSVAL(_str);
454 JS_SET_RVAL(cx, vp, rval);
460 rval = INT_TO_JSVAL(ptr->mode);
461 JS_SET_RVAL(cx, vp, rval);
467 rval = INT_TO_JSVAL(ptr->type);
468 JS_SET_RVAL(cx, vp, rval);
476FieldDefinitionSetProperty(JSContext* cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp) {
477 JSObject* obj = *hobj.address();
478 jsid iid = *hiid.address();
479 jsval* vp = hvp.address();
484static JSClass FieldDefinitionClass = {
488 JS_DeletePropertyStub,
489 FieldDefinitionGetProperty,
490 FieldDefinitionSetProperty,
499static JSPropertySpec(FieldDefinitionArrayProperties)[] = {
500 {
"length", -1, JSPROP_READONLY | JSPROP_SHARED | JSPROP_PERMANENT},
505FieldDefinitionArrayGetProperty(JSContext* cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp) {
506 JSObject* obj = *hobj.address();
507 jsid iid = *hiid.address();
508 jsval* vp = hvp.address();
517 if (!JS_IdToValue(cx, iid, &
id)) {
518 printf(
"JS_IdToValue failed in FieldDefinitionArrayGetProperty.\n");
522 if ((pd = (
struct ProtoDefinition*)JS_GetPrivateFw(cx, obj)) == NULL) {
523 printf(
"JS_GetPrivate failed in ProtoDeclarationArrayGetProperty.\n");
529 if (JSVAL_IS_INT(
id))
530 index = JSVAL_TO_INT(
id);
532 index = lookup_tinyid(JS_EncodeString(cx, JSVAL_TO_STRING(
id)), FieldDefinitionArrayProperties);
534 int _length = vectorSize(pd->iface);
535 JS_SET_RVAL(cx, vp, INT_TO_JSVAL(_length));
537 else if (index > -1 && index < vectorSize(pd->iface))
542 _obj = JS_NewObject(cx, &FieldDefinitionClass, NULL, obj);
543 if (0)
if (!JS_DefineProperties(cx, _obj, FieldDefinitionProperties)) {
544 printf(
"JS_DefineProperties failed in FieldDefinitionProperties.\n");
548 if (!JS_SetPrivateFw(cx, _obj, (
void*)pfield)) {
549 printf(
"JS_SetPrivate failed in FieldDefinitionArray.\n");
553 JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(_obj));
560FieldDefinitionArraySetProperty(JSContext* cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp) {
561 JSObject* obj = *hobj.address();
562 jsid iid = *hiid.address();
563 jsval* vp = hvp.address();
569static JSClass FieldDefinitionArrayClass = {
570 "FieldDefinitionArray",
573 JS_DeletePropertyStub,
574 FieldDefinitionArrayGetProperty,
575 FieldDefinitionArraySetProperty,
585ProtoDeclaration_newInstance(JSContext* cx, uintN argc, jsval* vp) {
586 JSObject* obj = JS_THIS_OBJECT(cx, vp);
587 jsval* argv = JS_ARGV(cx, vp);
597 if ((ptr = (
struct X3D_Proto*)JS_GetPrivateFw(cx, obj)) == NULL) {
598 printf(
"in ProtoDeclaration_newInstance() - not a Native\n");
607 struct X3D_Node* dest = X3D_NODE(brotoInstance(X3D_PROTO(X3D_PROTO(proto)->__prototype), ciflag_get(ec->__protoFlags, 0)));
609 AnyNative* nany = MALLOC(AnyNative*,
sizeof(AnyNative));
610 memset(nany, 0,
sizeof(AnyNative));
611 nany->type = FIELDTYPE_SFNode;
613 memset(nany->v, 0,
sizeof(
union anyVrml));
615 nany->v->sfnode = dest;
617 JSObject* _obj = JS_NewObject(cx, &SFNodeClass, NULL, obj);
618 if (0)
if (!JS_DefineProperties(cx, _obj, SFNodeProperties)) {
619 printf(
"JS_DefineProperties failed in Route sourceNode.\n");
622 if (0)
if (!JS_DefineFunctions(cx, _obj, SFNodeFunctions)) {
623 printf(
"JS_DefineFunctions failed in Route sourceNode.\n");
627 if (!JS_SetPrivateFw(cx, _obj, (
void*)nany)) {
628 printf(
"JS_SetPrivate failed in Route sourceNode.\n");
632 JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(_obj));
637JSFunctionSpec(ProtoDeclarationFunctions)[] = {
638 {
"newInstance", ProtoDeclaration_newInstance, 0},
642static JSPropertySpec(ProtoDeclarationProperties)[] = {
643 {
"name", 0, JSPROP_ENUMERATE},
644 {
"fields", 1, JSPROP_ENUMERATE},
645 {
"isExternProto", 2, JSPROP_ENUMERATE},
650ProtoDeclarationGetProperty(JSContext* cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp) {
651 JSObject* obj = *hobj.address();
652 jsid iid = *hiid.address();
653 jsval* vp = hvp.address();
664 if (!JS_IdToValue(cx, iid, &
id)) {
665 printf(
"JS_IdToValue failed in ProtoDeclarationGetProperty.\n");
669 if ((ptr = (
struct X3D_Proto*)JS_GetPrivateFw(cx, obj)) == NULL) {
670 printf(
"JS_GetPrivate failed in ProtoDeclarationGetProperty.\n");
679 if (JSVAL_IS_INT(
id))
680 index = JSVAL_TO_INT(
id);
682 index = lookup_tinyid(JS_EncodeString(cx, JSVAL_TO_STRING(
id)), ProtoDeclarationProperties);
690 _str = JS_NewStringCopyZ(cx, pd->protoName);
691 rval = STRING_TO_JSVAL(_str);
693 JS_SET_RVAL(cx, vp, rval);
699 _obj = JS_NewObject(cx, &FieldDefinitionArrayClass, NULL, obj);
700 if (0)
if (!JS_DefineProperties(cx, _obj, FieldDefinitionArrayProperties)) {
701 printf(
"JS_DefineProperties failed in FieldDefinitionArrayProperties.\n");
705 if (!JS_SetPrivateFw(cx, _obj, (
void*)pd)) {
706 printf(
"JS_SetPrivate failed in ProtoDeclarationArray.\n");
710 JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(_obj));
716 char flagInstance, flagExtern;
717 flagInstance = ciflag_get(proto->__protoFlags, 2);
718 flagExtern = ciflag_get(proto->__protoFlags, 3);
720 JS_SET_RVAL(cx, vp, BOOLEAN_TO_JSVAL(flagExtern == 0 ?
false :
true));
728ProtoDeclarationSetProperty(JSContext* cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp) {
729 JSObject* obj = *hobj.address();
730 jsid iid = *hiid.address();
731 jsval* vp = hvp.address();
736static JSClass ProtoDeclarationClass = {
740 JS_DeletePropertyStub,
741 ProtoDeclarationGetProperty,
742 ProtoDeclarationSetProperty,
751static JSPropertySpec(ProtoDeclarationArrayProperties)[] = {
752 {
"length", -1, JSPROP_READONLY | JSPROP_SHARED | JSPROP_PERMANENT},
757ProtoDeclarationArrayGetProperty(JSContext* cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp) {
758 JSObject* obj = *hobj.address();
759 jsid iid = *hiid.address();
760 jsval* vp = hvp.address();
769 if (!JS_IdToValue(cx, iid, &
id)) {
770 printf(
"JS_IdToValue failed in ProtoDeclarationArrayGetProperty.\n");
774 if ((protos = (Stack*)JS_GetPrivateFw(cx, obj)) == NULL) {
775 printf(
"JS_GetPrivate failed in ProtoDeclarationArrayGetProperty.\n");
781 if (JSVAL_IS_INT(
id))
782 index = JSVAL_TO_INT(
id);
784 index = lookup_tinyid(JS_EncodeString(cx, JSVAL_TO_STRING(
id)), ProtoDeclarationArrayProperties);
786 int _length = vectorSize(protos);
787 JS_SET_RVAL(cx, vp, INT_TO_JSVAL(_length));
789 else if (index > -1 && index < vectorSize(protos))
792 _obj = JS_NewObject(cx, &ProtoDeclarationClass, NULL, obj);
793 if (0)
if (!JS_DefineProperties(cx, _obj, ProtoDeclarationProperties)) {
794 printf(
"JS_DefineProperties failed in ProtoDeclarationProperties.\n");
798 if (!JS_SetPrivateFw(cx, _obj, (
void*)proto)) {
799 printf(
"JS_SetPrivate failed in ProtoDeclarationArray.\n");
803 JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(_obj));
810ProtoDeclarationArraySetProperty(JSContext* cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp) {
811 JSObject* obj = *hobj.address();
812 jsid iid = *hiid.address();
813 jsval* vp = hvp.address();
819static JSClass ProtoDeclarationArrayClass = {
820 "ProtoDeclarationArray",
823 JS_DeletePropertyStub,
824 ProtoDeclarationArrayGetProperty,
825 ProtoDeclarationArraySetProperty,
836static JSClass BrowserClass = {
840 JS_DeletePropertyStub,
855static JSBool doVRMLRoute(JSContext *context, JSObject *obj, uintN argc, jsval *argv,
const char *browserFunc);
857static JSFunctionSpec (BrowserFunctions)[] = {
858 {
"getName", VrmlBrowserGetName, 0},
859 {
"getVersion", VrmlBrowserGetVersion, 0},
860 {
"getCurrentSpeed", VrmlBrowserGetCurrentSpeed, 0},
861 {
"getCurrentFrameRate", VrmlBrowserGetCurrentFrameRate, 0},
862 {
"getWorldURL", VrmlBrowserGetWorldURL, 0},
863 {
"replaceWorld", VrmlBrowserReplaceWorld, 0},
864 {
"loadURL", VrmlBrowserLoadURL, 0},
865 {
"setDescription", VrmlBrowserSetDescription, 0},
866 {
"createVrmlFromString", VrmlBrowserCreateVrmlFromString, 0},
867 {
"createVrmlFromURL", VrmlBrowserCreateVrmlFromURL, 0},
868 {
"createX3DFromString", VrmlBrowserCreateX3DFromString, 0},
869 {
"createX3DFromURL", VrmlBrowserCreateVrmlFromURL, 0},
870 {
"addRoute", VrmlBrowserAddRoute, 0},
871 {
"deleteRoute", VrmlBrowserDeleteRoute, 0},
872 {
"print", VrmlBrowserPrint, 0},
873 {
"println", VrmlBrowserPrintln, 0},
896ComponentInfoGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
897 JSObject *obj = *hobj.address();
898 jsid iid = *hiid.address();
899 jsval *vp = hvp.address();
903 int _index, *_table, _nameIndex;
910 if (!JS_IdToValue(cx,iid,&
id)) {
911 printf(
"JS_IdToValue failed in ComponentInfoGetProperty.\n");
915 if ((ptr = (IntTableIndex)JS_GetPrivateFw(cx, obj)) == NULL) {
916 printf(
"JS_GetPrivate failed in ExecutionContextGetProperty.\n");
924 if (JSVAL_IS_INT(
id))
926 int index = JSVAL_TO_INT(
id);
930 _nameIndex = _table[2*_index];
931 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,COMPONENTS[_nameIndex])));
935 int level = capabilitiesHandler_getComponentLevel(_table,_index);
936 JS_SET_RVAL(cx,vp,INT_TO_JSVAL(level));
940 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,
"freewrl.sourceforge.net")));
947ComponentInfoSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
948 JSObject *obj = *hobj.address();
949 jsid iid = *hiid.address();
950 jsval *vp = hvp.address();
955ComponentInfoFinalize(JSContext *cx, JSObject *obj)
958 if ((ptr = (IntTableIndex)JS_GetPrivateFw(cx, obj)) == NULL) {
966static JSClass ComponentInfoClass = {
970 JS_DeletePropertyStub,
971 ComponentInfoGetProperty,
972 ComponentInfoSetProperty,
979static JSPropertySpec (ComponentInfoProperties)[] = {
981 {
"name", 0, JSPROP_ENUMERATE},
982 {
"title", 1, JSPROP_ENUMERATE},
983 {
"level", 2, JSPROP_ENUMERATE},
984 {
"providerUrl", 3, JSPROP_ENUMERATE},
993static JSPropertySpec(ComponentInfoArrayProperties)[] = {
994 {
"length", -1, JSPROP_READONLY | JSPROP_SHARED | JSPROP_PERMANENT},
999ComponentInfoArrayGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
1000 JSObject *obj = *hobj.address();
1001 jsid iid = *hiid.address();
1002 jsval *vp = hvp.address();
1011 if (!JS_IdToValue(cx,iid,&
id)) {
1012 printf(
"JS_IdToValue failed in ComponentInfoArrayGetProperty.\n");
1016 if ((_table = (
int *)JS_GetPrivateFw(cx, obj)) == NULL) {
1017 printf(
"JS_GetPrivate failed in ComponentInfoGetProperty.\n");
1022 if (JSVAL_IS_INT(
id))
1023 index = JSVAL_TO_INT(
id);
1025 index = lookup_tinyid(JS_EncodeString(cx, JSVAL_TO_STRING(
id)), ComponentInfoArrayProperties);
1030 int _length = capabilitiesHandler_getTableLength(_table);
1031 JS_SET_RVAL(cx,vp,INT_TO_JSVAL(_length));
1032 }
else if(index > -1 && index < COMPONENTS_COUNT )
1035 IntTableIndex tableindex = (IntTableIndex)MALLOC(
void *,
sizeof(
struct intTableIndex));
1037 _obj = JS_NewObject(cx,&ComponentInfoClass,NULL,obj);
1038 tableindex->index = index;
1039 tableindex->table = _table;
1040 if(0)
if (!JS_DefineProperties(cx, _obj, ComponentInfoProperties)) {
1041 printf(
"JS_DefineProperties failed in ComponentInfoProperties.\n");
1045 if (!JS_SetPrivateFw(cx, _obj, (
void*)tableindex)) {
1046 printf(
"JS_SetPrivate failed in ComponentInfoArray.\n");
1050 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1057ComponentInfoArraySetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1058 JSObject *obj = *hobj.address();
1059 jsid iid = *hiid.address();
1060 jsval *vp = hvp.address();
1066static JSClass ComponentInfoArrayClass = {
1067 "ComponentInfoArray",
1068 JSCLASS_HAS_PRIVATE,
1070 JS_DeletePropertyStub,
1071 ComponentInfoArrayGetProperty,
1072 ComponentInfoArraySetProperty,
1089ProfileInfoGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
1090 JSObject *obj = *hobj.address();
1091 jsid iid = *hiid.address();
1092 jsval *vp = hvp.address();
1101 if (!JS_IdToValue(cx,iid,&
id)) {
1102 printf(
"JS_IdToValue failed in ProfileInfoGetProperty.\n");
1106 if ((ptr = (
int *)JS_GetPrivateFw(cx, obj)) == NULL) {
1107 printf(
"JS_GetPrivate failed in ProfileInfoGetProperty.\n");
1114 if (JSVAL_IS_INT(
id))
1116 int index = JSVAL_TO_INT(
id);
1120 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,PROFILES[_index])));
1124 int level = capabilitiesHandler_getProfileLevel(_index);
1125 JS_SET_RVAL(cx,vp,INT_TO_JSVAL(level));
1130 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,
"freewrl.sourceforge.net")));
1134 const int *_table = capabilitiesHandler_getProfileComponent(_index);
1137 _obj = JS_NewObject(cx,&ComponentInfoArrayClass,NULL,obj);
1138 if(0)
if (!JS_DefineProperties(cx, _obj, ComponentInfoArrayProperties)) {
1139 printf(
"JS_DefineProperties failed in ComponentInfoArrayProperties.\n");
1143 if (!JS_SetPrivateFw(cx, _obj, (
void*)_table)) {
1144 printf(
"JS_SetPrivate failed in ComponentInfoArray.\n");
1147 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1155ProfileInfoSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1156 JSObject *obj = *hobj.address();
1157 jsid iid = *hiid.address();
1158 jsval *vp = hvp.address();
1164static JSClass ProfileInfoClass = {
1166 JSCLASS_HAS_PRIVATE,
1168 JS_DeletePropertyStub,
1169 ProfileInfoGetProperty,
1170 ProfileInfoSetProperty,
1177static JSPropertySpec (ProfileInfoProperties)[] = {
1179 {
"name", 0, JSPROP_ENUMERATE},
1180 {
"Title", 1, JSPROP_ENUMERATE},
1181 {
"level", 2, JSPROP_ENUMERATE},
1182 {
"providerUrl", 3, JSPROP_ENUMERATE},
1183 {
"components", 4, JSPROP_ENUMERATE},
1191static JSPropertySpec(ProfileInfoArrayProperties)[] = {
1192 {
"length", -1, JSPROP_READONLY | JSPROP_SHARED | JSPROP_PERMANENT},
1197ProfileInfoArrayGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
1198 JSObject *obj = *hobj.address();
1199 jsid iid = *hiid.address();
1200 jsval *vp = hvp.address();
1208 if (!JS_IdToValue(cx,iid,&
id)) {
1209 printf(
"JS_IdToValue failed in ProfileInfoArrayGetProperty.\n");
1214 if (JSVAL_IS_INT(
id))
1215 index = JSVAL_TO_INT(
id);
1217 index = lookup_tinyid(JS_EncodeString(cx, JSVAL_TO_STRING(
id)), ProfileInfoArrayProperties);
1219 int _length = PROFILES_COUNT;
1220 JS_SET_RVAL(cx,vp,INT_TO_JSVAL(_length));
1225 int* _index = (
int*)MALLOC(
void *,
sizeof(
int));
1226 _obj = JS_NewObject(cx,&ProfileInfoClass,NULL,obj);
1228 if (!JS_DefineProperties(cx, _obj, ProfileInfoProperties)) {
1229 printf(
"JS_DefineProperties failed in ProfileInfoArray.\n");
1233 if (!JS_SetPrivateFw(cx, _obj, (
void*)_index)) {
1234 printf(
"JS_SetPrivate failed in ProfileInfoArray.\n");
1238 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1244ProfileInfoArraySetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1245 JSObject *obj = *hobj.address();
1246 jsid iid = *hiid.address();
1247 jsval *vp = hvp.address();
1254static JSClass ProfileInfoArrayClass = {
1256 JSCLASS_HAS_PRIVATE,
1258 JS_DeletePropertyStub,
1259 ProfileInfoArrayGetProperty,
1260 ProfileInfoArraySetProperty,
1269X3DRouteToString(JSContext* cx, uintN argc, jsval* vp) {
1270 JSObject* obj = JS_THIS_OBJECT(cx, vp);
1271 jsval* argv = JS_ARGV(cx, vp);
1281 if ((ptr = (
long long)JS_GetPrivateFw(cx, obj)) == NULL) {
1282 printf(
"in route.toString() - not a Native\n");
1285 int _index = ptr - 1;
1290 char* fromName = lookup_brotoDefname(ec,route->from.node);
1291 char* toName = lookup_brotoDefname(ec,route->from.node);
1292 char *fromfield = findFIELDNAMESfromNodeOffset0(route->from.node, route->from.ifield);
1293 char *tofield = findFIELDNAMESfromNodeOffset0(route->to.node, route->to.ifield);
1295 sprintf(str,
"[ROUTE %s.%s TO %s.%s]", fromName, fromfield, toName, tofield);
1296 _str = JS_NewStringCopyZ(cx, str);
1297 rval = STRING_TO_JSVAL(_str);
1299 JS_SET_RVAL(cx, vp, rval);
1304JSFunctionSpec(X3DRouteFunctions)[] = {
1305 {
"toString", X3DRouteToString, 0},
1309static JSPropertySpec(X3DRouteProperties)[] = {
1311 {
"sourceNode", 0, JSPROP_ENUMERATE},
1312 {
"sourceField", 1, JSPROP_ENUMERATE},
1313 {
"destinationNode", 2, JSPROP_ENUMERATE},
1314 {
"destinationField", 3, JSPROP_ENUMERATE},
1319X3DRouteGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
1320 JSObject *obj = *hobj.address();
1321 jsid iid = *hiid.address();
1322 jsval *vp = hvp.address();
1328 struct X3D_Node *fromNode, *toNode;
1329 int fromOffset, toOffset;
1330 const char *fieldname;
1336 if (!JS_IdToValue(cx,iid,&
id)) {
1337 printf(
"JS_IdToValue failed in X3DRouteGetProperty.\n");
1341 if ((ptr = (
long long)JS_GetPrivateFw(cx, obj)) == NULL) {
1342 printf(
"JS_GetPrivate failed in X3DRouteGetProperty.\n");
1352 char* fromName = lookup_brotoDefname(ec,route->from.node);
1353 char* toName = lookup_brotoDefname(ec,route->to.node);
1356 if (JSVAL_IS_INT(
id))
1357 index = JSVAL_TO_INT(
id);
1359 index = lookup_tinyid(JS_EncodeString(cx, JSVAL_TO_STRING(
id)), X3DRouteProperties);
1368 AnyNative* nany = MALLOC(AnyNative*,
sizeof(AnyNative));
1369 memset(nany, 0,
sizeof(AnyNative));
1370 nany->type = FIELDTYPE_SFNode;
1372 memset(nany->v, 0,
sizeof(
union anyVrml));
1374 nany->v->sfnode = route->from.node;
1376 nany->v->sfnode = route->to.node;
1378 _obj = JS_NewObject(cx,&SFNodeClass,NULL,obj);
1379 if(0)
if (!JS_DefineProperties(cx, _obj, SFNodeProperties)) {
1380 printf(
"JS_DefineProperties failed in Route sourceNode.\n");
1383 if(0)
if (!JS_DefineFunctions(cx, _obj, SFNodeFunctions)) {
1384 printf(
"JS_DefineFunctions failed in Route sourceNode.\n");
1388 if (!JS_SetPrivateFw(cx, _obj, (
void*)nany)) {
1389 printf(
"JS_SetPrivate failed in Route sourceNode.\n");
1393 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1398 fieldname = findFIELDNAMESfromNodeOffset0(route->from.node, route->from.ifield);
1399 _str = JS_NewStringCopyZ(cx,fieldname);
1400 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
1403 fieldname = findFIELDNAMESfromNodeOffset0(route->to.node, route->to.ifield);
1404 _str = JS_NewStringCopyZ(cx,fieldname);
1405 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
1413X3DRouteSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1414 JSObject *obj = *hobj.address();
1415 jsid iid = *hiid.address();
1416 jsval *vp = hvp.address();
1421static JSClass X3DRouteClass = {
1423 JSCLASS_HAS_PRIVATE,
1425 JS_DeletePropertyStub,
1426 X3DRouteGetProperty,
1427 X3DRouteSetProperty,
1440static JSPropertySpec(RouteArrayProperties)[] = {
1441 {
"length", -1, JSPROP_READONLY | JSPROP_SHARED | JSPROP_PERMANENT},
1446RouteArrayGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
1447 JSObject *obj = *hobj.address();
1448 jsid iid = *hiid.address();
1449 jsval *vp = hvp.address();
1458 if (!JS_IdToValue(cx,iid,&
id)) {
1459 printf(
"JS_IdToValue failed in RouteArrayGetProperty.\n");
1464 ec = (
struct X3D_Proto*)JS_GetContextPrivate(cx);
1467 if (JSVAL_IS_STRING(
id)) {
1468 char* field = (
char*)JS_EncodeString(cx, JSVAL_TO_STRING(
id));
1469 index = lookup_tinyid(field, RouteArrayProperties);
1472 int _length = vectorSize(ec->__ROUTES);
1473 JS_SET_RVAL(cx, vp, INT_TO_JSVAL(_length));
1476 else if (JSVAL_IS_INT(
id)) {
1477 index = JSVAL_TO_INT(
id);
1481 _obj = JS_NewObject(cx,&X3DRouteClass,NULL,obj);
1483 if(0)
if (!JS_DefineProperties(cx, _obj, X3DRouteProperties)) {
1484 printf(
"JS_DefineProperties failed in RouteArray.\n");
1487 long long iindex = index+1;
1488 if (!JS_SetPrivateFw(cx, _obj, (
void*)iindex)) {
1489 printf(
"JS_SetPrivate failed in RouteArray.\n");
1493 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1500RouteArraySetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1501 JSObject *obj = *hobj.address();
1502 jsid iid = *hiid.address();
1503 jsval *vp = hvp.address();
1509static JSClass RouteArrayClass = {
1511 JSCLASS_HAS_PRIVATE,
1513 JS_DeletePropertyStub,
1514 RouteArrayGetProperty,
1515 RouteArraySetProperty,
1524X3DExecutionContext_createNode(JSContext* context, uintN argc, jsval* vp) {
1525 JSObject* obj = JS_NewObject(context, &SFNodeClass, NULL, NULL);
1528 jsval* argv = JS_ARGV(context, vp);
1529 const char* _c_format =
"S";
1539 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
1540 _c = JS_EncodeString(context, js_c);
1542 printf(
"X3DExecutionContext_createNode: obj = %u, str = \"%s\"\n",
1548 ctype = findFieldInNODES(_c);
1552 ec = (
struct X3D_Proto*)JS_GetContextPrivate(context);
1555 node = (
struct X3D_Node*)createNewX3DNode(ctype);
1556 add_node_to_broto_context(ec, node);
1559 if ((lhs = (AnyNative*)AnyNativeNew(FIELDTYPE_SFNode, NULL, NULL)) == NULL) {
1560 printf(
"AnyNativeNew failed in SFNodeConstr.\n");
1563 if (!JS_SetPrivateFw(context, obj, lhs)) {
1564 printf(
"JS_SetPrivate failed in SFNodeConstr.\n");
1568 lhs->v->sfnode = node;
1571 printf(
"\nIncorrect argument format for createNode('nodetype').\n");
1572 JS_free(context, _c);
1576 JS_free(context, _c);
1579 printf(
"\nIncorrect argument format for createNode('nodetype').\n");
1583 JS_SET_RVAL(context, vp, OBJECT_TO_JSVAL(obj));
1588X3DExecutionContext_createProto(JSContext* context, uintN argc, jsval* vp) {
1589 JSObject* obj = JS_NewObject(context, &SFNodeClass, NULL, NULL);
1591 jsval* argv = JS_ARGV(context, vp);
1592 const char* _c_format =
"S";
1602 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
1603 _c = JS_EncodeString(context, js_c);
1605 printf(
"X3DExecutionContext_createProto: obj = %u, str = \"%s\"\n", obj, _c);
1607 ec = (
struct X3D_Proto*)JS_GetContextPrivate(context);
1608 if (isAvailableBroto(_c, ec, &proto))
1611 node = X3D_NODE(brotoInstance(proto, 1));
1612 node->_executionContext = X3D_NODE(ec);
1613 add_node_to_broto_context(ec, node);
1617 source = X3D_PROTO(X3D_PROTO(node)->__prototype);
1618 dest = X3D_PROTO(node);
1619 deep_copy_broto_body2(&source, &dest);
1622 if ((lhs = (AnyNative*)AnyNativeNew(FIELDTYPE_SFNode, NULL, NULL)) == NULL) {
1623 printf(
"AnyNativeNew failed in SFNodeConstr.\n");
1626 if (!JS_SetPrivateFw(context, obj, lhs)) {
1627 printf(
"JS_SetPrivate failed in SFNodeConstr.\n");
1631 lhs->v->sfnode = node;
1634 printf(
"\nIncorrect argument for createProto('prototype').\n");
1635 JS_free(context, _c);
1638 JS_free(context, _c);
1641 printf(
"\nIncorrect argument format for createNode('nodetype').\n");
1644 JS_SET_RVAL(context, vp, OBJECT_TO_JSVAL(obj));
1671X3DExecutionContext_getNamedNode(JSContext* context, uintN argc, jsval* vp) {
1672 JSObject* obj = JS_NewObject(context, &SFNodeClass, NULL, NULL);
1674 jsval* argv = JS_ARGV(context, vp);
1675 const char* _c_format =
"S";
1680 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
1681 _c = JS_EncodeString(context, js_c);
1683 printf(
"X3DExecutionContext_getNamedNode: obj = %u, str = \"%s\"\n",
1690 ec = (
struct X3D_Proto*)JS_GetContextPrivate(context);
1691 node = broto_search_DEFname(ec, _c);
1695 if ((lhs = (AnyNative*)AnyNativeNew(FIELDTYPE_SFNode, NULL, NULL)) == NULL) {
1696 printf(
"AnyNativeNew failed in SFNodeConstr.\n");
1699 if (!JS_SetPrivateFw(context, obj, lhs)) {
1700 printf(
"JS_SetPrivate failed in SFNodeConstr.\n");
1704 lhs->v->sfnode = node;
1707 printf(
"\nIncorrect argument for getNamedNode('DEFname').\n");
1708 JS_free(context, _c);
1712 JS_free(context, _c);
1715 printf(
"\nIncorrect argument format for getNamedNode('DEFname').\n");
1719 JS_SET_RVAL(context, vp, OBJECT_TO_JSVAL(obj));
1724X3DExecutionContext_removeNamedNode(JSContext* context, uintN argc, jsval* vp) {
1725 jsval* argv = JS_ARGV(context, vp);
1726 const char* _c_format =
"S";
1731 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
1732 _c = JS_EncodeString(context, js_c);
1734 printf(
"X3DExecutionContext_removeNamedNode: obj = %u, str = \"%s\"\n",
1741 ec = (
struct X3D_Proto*)JS_GetContextPrivate(context);
1742 node = broto_search_DEFname(ec, _c);
1745 remove_node_from_parents_children(node);
1746 remove_broto_node(ec, node);
1747 remove_node_from_def_list(ec, node, _c);
1750 printf(
"\nIncorrect argument for removeNamedNode('DEFname').\n");
1751 JS_free(context, _c);
1755 JS_free(context, _c);
1758 printf(
"\nIncorrect argument format for removeNamedNode('DEFname').\n");
1765X3DExecutionContext_updateNamedNode(JSContext* context, uintN argc, jsval* vp) {
1766 jsval* argv = JS_ARGV(context, vp);
1767 const char* _c_format =
"S";
1776 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
1777 defname = JS_EncodeString(context, js_c);
1778 if (argv[1].isObject()) {
1779 _ob2 = JSVAL_TO_OBJECT(argv[1]);
1780 AnyNative* _node = NULL;
1781 if ((_node = (AnyNative*)JS_GetPrivateFw(context, _ob2)) == NULL) {
1782 printf(
"JS_GetPrivate failed for arg format \"o d\" in SFRotationConstr.\n");
1785 node = _node->v->sfnode;
1788 printf(
"X3DExecutionContext_removeNamedNode: obj = %u, str = \"%s\"\n",
1794 ec = (
struct X3D_Proto*)JS_GetContextPrivate(context);
1795 if (ec->__DEFnames) {
1796 struct Vector* defnames = (
struct Vector*)ec->__DEFnames;
1797 for (
int i = 0; i < vectorSize(defnames); i++) {
1801 if (!strcmp(bd->name, defname)) {
1806 if (bd->node == node) {
1807 bd->name = strdup(defname);
1815 if (!ec->__DEFnames)
1820 bd2.name = strdup(defname);
1824 printf(
"\nIncorrect argument for updateNamedNode('DEFname').\n");
1825 JS_free(context, defname);
1829 JS_free(context, defname);
1832 printf(
"\nIncorrect argument format for updateNamedNode('DEFname').\n");
1839static JSBool X3DExecutionContext_addRoute(JSContext* context, uintN argc, jsval* vp) {
1840 JSObject* obj = JS_THIS_OBJECT(context, vp);
1841 jsval* argv = JS_ARGV(context, vp);
1843 JSObject* fromNodeObj, * toNodeObj;
1845 char * fromField, * toField;
1846 const char* _c_args =
1847 "SFNode fromNode, SFString fromEventOut, SFNode toNode, SFString toEventIn",
1848 * _c_format =
"oSoS";
1849 JSString* fromFieldStringJS, * toFieldStringJS;
1852 int fromOfs, toOfs, len;
1853 int fromtype, totype;
1859 printf(
"Problem with script - add/delete route command needs 4 parameters\n");
1864 if (JS_ConvertArguments(context, argc, argv, _c_format,
1865 &fromNodeObj, &fromFieldStringJS, &toNodeObj, &toFieldStringJS)) {
1866 fromField = JS_EncodeString(context, fromFieldStringJS);
1867 toField = JS_EncodeString(context, toFieldStringJS);
1869 if ((_cls[0] = JS_GET_CLASS(context, fromNodeObj)) == NULL) {
1870 printf(
"JS_GetClass failed for arg 0 in doVRMLRoute called from %s.\n",
1874 if ((_cls[1] = JS_GET_CLASS(context, toNodeObj)) == NULL) {
1875 printf(
"JS_GetClass failed for arg 2 in doVRMLRoute called from %s.\n",
1881 if (memcmp(
"SFNode", (_cls[0])->name, strlen((_cls[0])->name)) != 0 &&
1882 memcmp(
"SFNode", (_cls[1])->name, strlen((_cls[1])->name)) != 0) {
1883 printf(
"\nArguments 0 and 2 must be SFNode in doVRMLRoute called from %s(%s): %s\n",
1884 "addRoute", _c_args,
"addRoute");
1889 AnyNative* fromNative;
1890 AnyNative* toNative;
1891 if ((fromNative = (AnyNative*)JS_GetPrivateFw(context,fromNodeObj)) == NULL) {
1892 printf(
"problem getting native props first node\n");
1895 if ((toNative = (AnyNative*)JS_GetPrivateFw(context, toNodeObj)) == NULL) {
1896 printf(
"problem getting native props second node\n");
1901 fromNode = X3D_NODE(fromNative->v->sfnode);
1902 toNode = X3D_NODE(toNative->v->sfnode);
1905 printf(
"routing from a node of type %s to a node of type %s\n",
1906 stringNodeType(fromNode->_nodeType),
1907 stringNodeType(toNode->_nodeType));
1911 ec = (
struct X3D_Proto*)JS_GetContextPrivate(context);
1915 xroute = addDeleteRoute0(ec,
"addRoute", fromNode, fromField, toNode, toField);
1919 for (
int j = 0; j < vectorSize(routes); j++) {
1921 if ((
void*)route == (
void*)xroute) {
1929 _obj = JS_NewObject(context, &X3DRouteClass, NULL, obj);
1930 ADD_ROOT(context, _obj)
1932 long long iindex = index + 1;
1933 if (!JS_SetPrivateFw(context, _obj, (
void*)iindex)) {
1934 printf(
"JS_SetPrivate failed in RouteArray.\n");
1937 JS_SET_RVAL(context, vp, OBJECT_TO_JSVAL(_obj));
1939 JS_free(context, fromField);
1940 JS_free(context, toField);
1943 printf(
"\nIncorrect argument format for %s(%s).\n",
1944 "addRoute", _c_args);
1949static JSBool X3DExecutionContext_deleteRoute(JSContext* context, uintN argc, jsval* vp) {
1950 JSObject* obj = JS_THIS_OBJECT(context, vp);
1951 jsval* argv = JS_ARGV(context, vp);
1954 const char* _c_args =
1960 printf(
"Problem with script - delete route command needs 1 parameter\n");
1965 if (JS_ConvertArguments(context, argc, argv, _c_format,
1968 if ((_cls[0] = JS_GET_CLASS(context, routeObj)) == NULL) {
1969 printf(
"JS_GetClass failed for arg 0 in deleteRoute \n");
1974 if (memcmp(
"X3DRoute", (_cls[0])->name, strlen((_cls[0])->name)) != 0 ) {
1975 printf(
"\nArguments 0 must be X3DRoute in deleteRoute \n");
1979 if ((iindex = (
long long)JS_GetPrivateFw(context, routeObj)) == 0) {
1980 printf(
"problem getting native prop for route\n");
1984 ec = (
struct X3D_Proto*)JS_GetContextPrivate(context);
1989 int index = iindex -1;
1991 CRoutes_RemoveSimpleB(broute->from.node, broute->from.ifield, broute->from.builtIn, broute->to.node, broute->to.ifield, broute->to.builtIn, broute->ft);
1992 vector_remove_elem(
struct brotoRoute*, routes, index);
1995 printf(
"\nIncorrect argument format for deleteRoute.\n");
2000struct X3D_Node* broto_search_DEFname(
struct X3D_Proto* context,
const char* name);
2001struct IMEXPORT* broto_search_IMPORTname(
struct X3D_Proto* context,
const char* name);
2002struct IMEXPORT* broto_search_EXPORTname(
struct X3D_Proto* context,
const char* name);
2005X3DExecutionContext_getImportedNode(JSContext* context, uintN argc, jsval* vp) {
2007 JSObject* obj = JS_NewObject(context, &SFNodeClass, NULL, NULL);
2009 jsval* argv = JS_ARGV(context, vp);
2010 const char* _c_format =
"S";
2015 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
2016 _c = JS_EncodeString(context, js_c);
2018 printf(
"X3DExecutionContext_getNamedNode: obj = %u, str = \"%s\"\n",
2025 ec = (
struct X3D_Proto*)JS_GetContextPrivate(context);
2033 node = broto_search_ALLnames(ec, _c, &source);
2034 if (source == 0) node = NULL;
2037 if ((lhs = (AnyNative*)AnyNativeNew(FIELDTYPE_SFNode, NULL, NULL)) == NULL) {
2038 printf(
"AnyNativeNew failed in SFNodeConstr.\n");
2041 if (!JS_SetPrivateFw(context, obj, lhs)) {
2042 printf(
"JS_SetPrivate failed in SFNodeConstr.\n");
2046 lhs->v->sfnode = node;
2049 printf(
"Incorrect argument for getImportedNode('DEFname').\n");
2052 JS_free(context, _c);
2055 printf(
"\nIncorrect argument format for getImportedNode('DEFname').\n");
2059 JS_SET_RVAL(context, vp, OBJECT_TO_JSVAL(obj));
2063X3DExecutionContext_removeImportedNode(JSContext* context, uintN argc, jsval* vp) {
2064 jsval* argv = JS_ARGV(context, vp);
2065 const char* _c_format =
"S";
2070 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
2071 _c = JS_EncodeString(context, js_c);
2073 printf(
"X3DExecutionContext_getNamedNode: obj = %u, str = \"%s\"\n",
2080 ec = (
struct X3D_Proto*)JS_GetContextPrivate(context);
2081 struct IMEXPORT* im = broto_search_IMPORTname(ec, _c);
2085 struct Vector* imports = (
struct Vector*)ec->__IMPORTS;
2087 for (
int i = 0; i < vectorSize(imports); i++) {
2088 def = vector_get(
struct IMEXPORT*, imports, i);
2089 vector_set(
struct IMEXPORT*, imports, i, def);
2095 JS_free(context, _c);
2098 printf(
"\nIncorrect argument format for getImportedNode('DEFname').\n");
2107X3DExecutionContext_updateImportedNode(JSContext* context, uintN argc, jsval* vp) {
2115 jsval* argv = JS_ARGV(context, vp);
2116 const char* _c_format =
"SS";
2117 JSString* js_1, * js_2, * js_3;
2121 const char* as, * mxname, * impname;
2127 JS_ConvertArguments(context, argc, argv,
"SS", &js_1, &js_2);
2129 as = JS_EncodeString(context, js_1);
2130 mxname = JS_EncodeString(context, js_2);
2131 impname = strdup(mxname);
2133 const char* dot = strstr(mxname,
".");
2135 nline = strdup(mxname);
2136 nline[dot - mxname] = 0;
2137 impname = strdup(&dot[1]);
2139 printf(
"as [%s] impname [%s] nline [%s]\n", as, impname, nline);
2141 printf(
"X3DExecutionContext_removeNamedNode: obj = %u, str = \"%s\"\n",
2147 ec = (
struct X3D_Proto*)JS_GetContextPrivate(context);
2148 struct Vector* imports = (
struct Vector*)ec->__IMPORTS;
2150 for (
int i = 0; i < vectorSize(imports); i++) {
2151 mxp = vector_get(
struct IMEXPORT*, imports, i);
2154 int inlineOK = !nline || !strcmp(nline, mxp->inlinename);
2155 int asOK = !strcmp(as, mxp->as);
2156 int impOK = !strcmp(impname, mxp->mxname);
2157 if(inlineOK && impOK){
2159 printf(
"updating import new as [%s] old import [%s] inline [%s]\n", as, impname, nline);
2160 mxp->as = strdup(as);
2169 ec->__IMPORTS = newVector(
struct IMEXPORT*, 4);
2171 mxp->mxname = strdup(impname);
2172 mxp->as = strdup(as);
2173 mxp->inlinename = nline ? strdup(nline) : NULL;
2174 printf(
"adding import mapping as [%s] import [%s] inline [%s]\n", impname, as, nline);
2175 stack_push(
struct IMEXPORT*, (
struct Vector *)ec->__IMPORTS, mxp);
2177 update_weakRoutes(ec);
2181 printf(
"\nIncorrect argument format for updateImportedNode('DEFname').\n");
2188X3DExecutionContext_toString(JSContext* cx, uintN argc, jsval* vp) {
2189 JSObject* obj = JS_THIS_OBJECT(cx, vp);
2190 jsval* argv = JS_ARGV(cx, vp);
2201 sprintf(str,
"%p", (
void*)ec);
2202 _str = JS_NewStringCopyZ(cx, str);
2203 rval = STRING_TO_JSVAL(_str);
2205 JS_SET_RVAL(cx, vp, rval);
2210X3DScene_getExportedNode(JSContext* context, uintN argc, jsval* vp) {
2212 JSObject* obj = JS_NewObject(context, &SFNodeClass, NULL, NULL);
2214 jsval* argv = JS_ARGV(context, vp);
2215 const char* _c_format =
"S";
2220 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
2221 _c = JS_EncodeString(context, js_c);
2223 printf(
"X3DExecutionContext_getNamedNode: obj = %u, str = \"%s\"\n",
2230 ec = (
struct X3D_Proto*)JS_GetContextPrivate(context);
2232 struct IMEXPORT * ex = broto_search_EXPORTname(ec, _c);
2233 if (ex) node = ex->nodeptr;
2236 if ((lhs = (AnyNative*)AnyNativeNew(FIELDTYPE_SFNode, NULL, NULL)) == NULL) {
2237 printf(
"AnyNativeNew failed in SFNodeConstr.\n");
2240 if (!JS_SetPrivateFw(context, obj, lhs)) {
2241 printf(
"JS_SetPrivate failed in SFNodeConstr.\n");
2245 lhs->v->sfnode = node;
2248 printf(
"Incorrect argument for getExportedNode('DEFname').\n");
2251 JS_free(context, _c);
2254 printf(
"\nIncorrect argument format for getExportedNode('DEFname').\n");
2258 JS_SET_RVAL(context, vp, OBJECT_TO_JSVAL(obj));
2262X3DScene_removeExportedNode(JSContext* context, uintN argc, jsval* vp) {
2263 jsval* argv = JS_ARGV(context, vp);
2264 const char* _c_format =
"S";
2269 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
2270 _c = JS_EncodeString(context, js_c);
2272 printf(
"X3DExecutionContext_getNamedNode: obj = %u, str = \"%s\"\n",
2279 ec = (
struct X3D_Proto*)JS_GetContextPrivate(context);
2280 struct IMEXPORT* ex = broto_search_EXPORTname(ec, _c);
2284 struct Vector* exports = (
struct Vector*)ec->__EXPORTS;
2286 for (
int i = 0; i < vectorSize(exports); i++) {
2287 def = vector_get(
struct IMEXPORT*, exports, i);
2288 vector_set(
struct IMEXPORT*, exports, i, def);
2294 JS_free(context, _c);
2297 printf(
"\nIncorrect argument format for removeExportedNode('DEFname').\n");
2306X3DScene_updateExportedNode(JSContext* context, uintN argc, jsval* vp) {
2307 jsval* argv = JS_ARGV(context, vp);
2308 const char* _c_format =
"SS";
2309 JSString* js_1, * js_2, * js_3;
2313 const char* as, * mxname, * nline;
2319 JS_ConvertArguments(context, argc, argv,
"SS", &js_1, &js_2);
2321 JS_ConvertArguments(context, argc, argv,
"SSS", &js_1, &js_2, &js_3);
2323 nline = JS_EncodeString(context, js_1);
2324 mxname = JS_EncodeString(context, js_2);
2327 as = JS_EncodeString(context, js_3);
2331 printf(
"X3DExecutionContext_removeNamedNode: obj = %u, str = \"%s\"\n",
2337 ec = (
struct X3D_Proto*)JS_GetContextPrivate(context);
2338 struct Vector* exports = (
struct Vector*)ec->__EXPORTS;
2340 for (
int i = 0; i < vectorSize(exports); i++) {
2341 mxp = vector_get(
struct IMEXPORT*, exports, i);
2344 if (!strcmp(nline, mxp->inlinename) && !strcmp(mxp->mxname, mxname)) {
2345 mxp->as = strdup(as);
2354 ec->__EXPORTS = newVector(
struct IMEXPORT*, 4);
2356 mxp->mxname = strdup(mxname);
2357 mxp->as = strdup(as);
2358 mxp->inlinename = strdup(nline);
2359 stack_push(
struct IMEXPORT*, (
struct Vector*)ec->__EXPORTS, mxp);
2361 update_weakRoutes(ec);
2365 printf(
"\nIncorrect argument format for updateImportedNode('DEFname').\n");
2373X3DScene_getMetaData(JSContext* context, uintN argc, jsval* vp) {
2375 jsval* argv = JS_ARGV(context, vp);
2376 const char* _c_format =
"S";
2378 char* name, *content;
2381 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
2382 name = JS_EncodeString(context, js_c);
2384 printf(
"X3DScene_getMetaData: obj = %u, str = \"%s\"\n",
2391 ec = (
struct X3D_Proto*)JS_GetContextPrivate(context);
2395 for (
int i = 0; i < vectorSize(metalist); i++) {
2396 mr = vector_get_ptr(
struct metarecord, metalist, i);
2397 if (!strcmp(mr->name, name)) {
2398 content = strdup(mr->content);
2404 JS_free(context, name);
2407 printf(
"\nIncorrect argument format for Scene.getMetaData('name').\n");
2411 JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(JS_NewStringCopyZ(context, content)));
2415X3DScene_setMetaData(JSContext* context, uintN argc, jsval* vp) {
2417 jsval* argv = JS_ARGV(context, vp);
2418 const char* _c_format =
"SS";
2419 JSString* js_name, *js_content;
2420 char* name, * content;
2423 JS_ConvertArguments(context, argc, argv, _c_format, &js_name, &js_content)) {
2424 name = JS_EncodeString(context, js_name);
2425 content = JS_EncodeString(context, js_content);
2427 printf(
"X3DScene_getMetaData: obj = %u, str = \"%s\"\n",
2434 ec = (
struct X3D_Proto*)JS_GetContextPrivate(context);
2436 ec->__META = newVector(
struct metarecord, 10);
2441 for (
int i = 0; i < vectorSize(metalist); i++) {
2442 mr = vector_get_ptr(
struct metarecord, metalist, i);
2443 if (!strcmp(mr->name, name)) {
2444 mr->content = strdup(content);
2452 mr2.name = strdup(name);
2453 mr2.content = strdup(content);
2454 vector_pushBack(
struct metarecord, metalist, mr2);
2457 JS_free(context, name);
2458 JS_free(context, content);
2461 printf(
"\nIncorrect argument format for Scene.setMetaData('name','content').\n");
2468static JSFunctionSpec (ExecutionContextFunctions)[] = {
2470 {
"addRoute", X3DExecutionContext_addRoute, 0},
2471 {
"deleteRoute", X3DExecutionContext_deleteRoute, 0},
2472 {
"createNode", X3DExecutionContext_createNode, 0},
2473 {
"createProto", X3DExecutionContext_createProto, 0},
2474 {
"getImportedNode", X3DExecutionContext_getImportedNode, 0},
2475 {
"updateImportedNode", X3DExecutionContext_updateImportedNode, 0},
2476 {
"removeImportedNode", X3DExecutionContext_removeImportedNode, 0},
2477 {
"getNamedNode", X3DExecutionContext_getNamedNode, 0},
2478 {
"updateNamedNode", X3DExecutionContext_updateNamedNode, 0},
2479 {
"removeNamedNode", X3DExecutionContext_removeNamedNode, 0},
2480 {
"toString", X3DExecutionContext_toString, 0},
2482 {
"setMetaData", X3DScene_setMetaData, 0},
2483 {
"getMetaData", X3DScene_getMetaData, 0},
2484 {
"getExportedNode", X3DScene_getExportedNode, 0},
2485 {
"updateExportedNode", X3DScene_updateExportedNode, 0},
2486 {
"removeExportedNode", X3DScene_removeExportedNode, 0},
2491static JSPropertySpec (ExecutionContextProperties)[] = {
2493 {
"specificationVersion", 0, JSPROP_ENUMERATE},
2494 {
"encoding", 1, JSPROP_ENUMERATE},
2495 {
"profile", 2, JSPROP_ENUMERATE},
2496 {
"components", 3, JSPROP_ENUMERATE},
2497 {
"worldURL", 4, JSPROP_ENUMERATE},
2498 {
"rootNodes", 5, JSPROP_ENUMERATE},
2499 {
"protos", 6, JSPROP_ENUMERATE},
2500 {
"externprotos", 7, JSPROP_ENUMERATE},
2501 {
"routes", 8, JSPROP_ENUMERATE},
2504 {
"isScene", 9, JSPROP_ENUMERATE},
2511typedef struct X3D_Node * ExecutionContextNative;
2514ExecutionContextGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
2515 JSObject *obj = *hobj.address();
2516 jsid iid = *hiid.address();
2517 jsval *vp = hvp.address();
2528 if (!JS_IdToValue(cx,iid,&
id)) {
2529 printf(
"JS_IdToValue failed in ExecutionContextGetProperty.\n");
2535 if ((ptr = (
struct X3D_Proto*)JS_GetPrivateFw(cx, obj)) == NULL) {
2536 printf(
"JS_GetPrivate failed in ExecutionContextGetProperty.\n");
2542 if (JSVAL_IS_STRING(
id)) {
2543 char* field = (
char*)JS_EncodeString(cx, JSVAL_TO_STRING(
id));
2544 index = lookup_tinyid(field, ExecutionContextProperties);
2547 else if (JSVAL_IS_INT(
id)) {
2548 index = JSVAL_TO_INT(
id);
2554 sprintf(cs,
"{%d,%d,%d}",inputFileVersion[0],inputFileVersion[1],inputFileVersion[2]);
2555 _str = JS_NewStringCopyZ(cx,cs);
2557 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
2561 _str = JS_NewStringCopyZ(cx,
"not filled in yet sb. VRML or XML or ..");
2562 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
2566 int index = gglobal()->Mainloop.scene_profile;
2569 int* _index = MALLOC(
int *,
sizeof(
int));
2570 _obj = JS_NewObject(cx,&ProfileInfoClass,NULL,obj);
2572 if (!JS_DefineProperties(cx, _obj, ProfileInfoProperties)) {
2573 printf(
"JS_DefineProperties failed in ExecutionContextProfileInfoProperties.\n");
2577 if (!JS_SetPrivateFw(cx, _obj, (
void*)_index)) {
2578 printf(
"JS_SetPrivate failed in ExecutionContextProfileInfoArray.\n");
2582 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
2589 const int *_table = gglobal()->Mainloop.scene_components;
2592 _obj = JS_NewObject(cx,&ComponentInfoArrayClass,NULL,obj);
2593 if (!JS_DefineProperties(cx, _obj, ComponentInfoArrayProperties)) {
2594 printf(
"JS_DefineProperties failed in ExecutionContext_ComponentInfoArrayProperties.\n");
2598 if (!JS_SetPrivateFw(cx, _obj, (
void*)_table)) {
2599 printf(
"JS_SetPrivate failed in ExecutionContext_ComponentInfoArray.\n");
2602 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
2606 _str = JS_NewStringCopyZ(cx, gglobal()->Mainloop.url);
2608 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
2617 _obj = JS_NewObject(cx,&MFNodeClass,NULL,obj);
2619 if ((nany = (AnyNative*)AnyNativeNew(FIELDTYPE_MFNode, (
anyVrml*) & ec->__children, 0)) == NULL) {
2620 printf(
"AnyNativeNew failed in ExecutionContext..\n");
2624 if (!JS_SetPrivateFw(cx, _obj, nany)) {
2625 printf(
"JS_SetPrivate failed in ExecutionContext..\n");
2629 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
2636 _obj = JS_NewObject(cx, &ProtoDeclarationArrayClass, NULL, obj);
2637 if (0)
if (!JS_DefineProperties(cx, _obj, RouteArrayProperties)) {
2638 printf(
"JS_DefineProperties failed in ExecutionContext_X3DRouteArrayProperties.\n");
2641 if (!JS_SetPrivateFw(cx, _obj, ptr->__protoDeclares)) {
2642 printf(
"JS_SetPrivate failed in ExecutionContext_X3DRouteArray.\n");
2645 JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(_obj));
2654 _obj = JS_NewObject(cx, &ProtoDeclarationArrayClass, NULL, obj);
2655 if (!JS_SetPrivateFw(cx, _obj, ptr->__externProtoDeclares)) {
2656 printf(
"JS_SetPrivate failed in ExecutionContext_X3DRouteArray.\n");
2659 JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(_obj));
2667 _obj = JS_NewObject(cx,&RouteArrayClass,NULL,obj);
2668 if(0)
if (!JS_DefineProperties(cx, _obj, RouteArrayProperties)) {
2669 printf(
"JS_DefineProperties failed in ExecutionContext_X3DRouteArrayProperties.\n");
2676 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
2681 JS_SET_RVAL(cx,vp,BOOLEAN_TO_JSVAL(JS_TRUE));
2690ExecutionContextSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
2691 JSObject *obj = *hobj.address();
2692 jsid iid = *hiid.address();
2693 jsval *vp = hvp.address();
2697static JSClass ExecutionContextClass = {
2699 JSCLASS_HAS_PRIVATE,
2701 JS_DeletePropertyStub,
2702 ExecutionContextGetProperty,
2703 ExecutionContextSetProperty,
2711static JSPropertySpec (BrowserProperties)[] = {
2712 {
"name", 0, JSPROP_ENUMERATE},
2713 {
"version", 1, JSPROP_ENUMERATE},
2714 {
"currentSpeed", 2, JSPROP_ENUMERATE},
2715 {
"currentFrameRate", 3, JSPROP_ENUMERATE},
2716 {
"description", 4, JSPROP_ENUMERATE},
2717 {
"supportedComponents", 5, JSPROP_ENUMERATE},
2718 {
"supportedProfiles", 6, JSPROP_ENUMERATE},
2719 {
"currentScene", 7, JSPROP_ENUMERATE},
2722struct X3D_Node* getExecutionContextFromCx(
void *cx) {
2724 struct X3D_Node* executionContext = NULL;
2725 int nscript = getScriptControlCount();
2726 for (
int i = 0; i <= nscript; i++) {
2727 sc = getScriptControlIndex(i);
2729 executionContext = sc->script->ShaderScriptNode->_executionContext;
2733 return executionContext;
2736BrowserGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
2737 JSObject *obj = *hobj.address();
2738 jsid iid = *hiid.address();
2739 jsval *vp = hvp.address();
2752 if (!JS_IdToValue(cx,iid,&
id)) {
2753 printf(
"JS_IdToValue failed in BrowserGetProperty.\n");
2763 if ((ptr = (BrowserNative *)JS_GetPrivateFw(cx, obj)) == NULL) {
2764 printf(
"JS_GetPrivate failed in BrowserGetProperty.\n");
2767 ec = (
struct X3D_Proto*)JS_GetContextPrivate(cx);
2770 if (JSVAL_IS_INT(
id))
2771 index = JSVAL_TO_INT(
id);
2773 index = lookup_tinyid(JS_EncodeString(cx, JSVAL_TO_STRING(
id)), BrowserProperties);
2777 _str = JS_NewStringCopyZ(cx,BrowserName);
2778 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
2781 _str = JS_NewStringCopyZ(cx, libFreeWRL_get_version());
2782 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
2787 d = gglobal()->Mainloop.BrowserSpeed;
2788 if (JS_NewNumberValue(cx, d, vp) == JS_FALSE) {
2789 printf(
"JS_NewDouble failed for %f in BrowserGetProperty.\n",d);
2794 d = gglobal()->Mainloop.BrowserFPS;
2795 if (JS_NewNumberValue(cx, d, vp) == JS_FALSE) {
2796 printf(
"JS_NewDouble failed for %f in BrowserGetProperty.\n",d);
2801 _str = JS_NewStringCopyZ(cx, get_status());
2802 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
2808 _obj = JS_NewObject(cx,&ComponentInfoArrayClass,NULL,obj);
2809 if(0)
if (!JS_DefineProperties(cx, _obj, ComponentInfoArrayProperties)) {
2810 printf(
"JS_DefineProperties failed in ComponentInfoArrayProperties.\n");
2817 if (!JS_SetPrivateFw(cx, _obj, (
void*)capabilitiesHandler_getCapabilitiesTable())) {
2818 printf(
"JS_SetPrivate failed in ExecutionContext.\n");
2822 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
2830 _obj = JS_NewObject(cx,&ProfileInfoArrayClass,NULL,obj);
2831 if (!JS_DefineProperties(cx, _obj, ProfileInfoArrayProperties)) {
2832 printf(
"JS_DefineProperties failed in ExecutionContextProperties.\n");
2845 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
2858 _obj = JS_NewObject(cx,&ExecutionContextClass,NULL,obj);
2861 if(0)
if (!JS_DefineProperties(cx, _obj, ExecutionContextProperties)) {
2862 printf(
"JS_DefineProperties failed in ExecutionContextProperties.\n");
2865 if(0)
if (!JS_DefineFunctions(cx, _obj, ExecutionContextFunctions)) {
2866 printf(
"JS_DefineProperties failed in ExecutionContextFunctions.\n");
2870 if (!JS_SetPrivateFw(cx, _obj, ec)) {
2871 printf(
"JS_SetPrivate failed in ExecutionContext.\n");
2875 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
2887BrowserSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
2888 JSObject *obj = *hobj.address();
2889 jsid iid = *hiid.address();
2890 jsval *vp = hvp.address();
2898 if (!JS_IdToValue(cx,iid,&
id)) {
2899 printf(
"JS_IdToValue failed in BrowserSetProperty.\n");
2904 if ((ptr = (BrowserNative *)JS_GetPrivateFw(cx, obj)) == NULL) {
2905 printf(
"JS_GetPrivate failed in BrowserSetProperty.\n");
2910 if (!JS_ConvertValue(cx, *vp, JSTYPE_STRING, &_val)) {
2911 printf(
"JS_ConvertValue failed in BrowserSetProperty.\n");
2915 if (JSVAL_IS_INT(
id)) {
2916 switch (JSVAL_TO_INT(
id)) {
2923 ss = JS_ValueToString(cx, _val);
2924 cs = JS_EncodeString(cx, ss);
2946typedef struct pjsVRMLBrowser{
2949 jsval JSCreate_global_return_val;
2953void *jsVRMLBrowser_constructor(){
2954 void *v = MALLOC(
void *,
sizeof(
struct pjsVRMLBrowser));
2955 memset(v,0,
sizeof(
struct pjsVRMLBrowser));
2958void jsVRMLBrowser_init(
struct iiglobal::tjsVRMLBrowser *t){
2961 t->prv = jsVRMLBrowser_constructor();
2963 ppjsVRMLBrowser p = (ppjsVRMLBrowser)t->prv;
2966 t->JSCreate_global_return_val = &p->JSCreate_global_return_val;
2975void jsRegisterRoute(
2976 struct X3D_Node* from,
int fromOfs,
2978 int len,
const char *adrem) {
2981 if (strcmp(
"addRoute",adrem) == 0)
2985 CRoutes_Register(ad, from, fromOfs, to, toOfs , len,
2986 returnInterpolatorPointer(to->_nodeType), 0, 0);
2991void conCat (
char *out,
char *in) {
2993 while (strlen (in) > 0) {
2994 strcat (out,
" :loadURLStringBreak:");
2995 while (*out !=
'\0') out++;
2997 if (*in ==
'[') in++;
2998 while ((*in !=
'\0') && (*in ==
' ')) in++;
3002 while (*in !=
'"') { *out = *in; out++; in++; }
3008 if (*in ==
'"') in++;
3009 if (*in ==
',') in++;
3010 if (*in ==
']') in++;
3016void createLoadUrlString(
char *out,
int outLen,
char *url,
char *param) {
3036 commacount1 = 0; commacount2 = 0;
3037 tptr = url;
while (*tptr !=
'\0') {
if (*tptr ==
'"') commacount1 ++; tptr++; }
3038 tptr = param;
while (*tptr !=
'\0') {
if (*tptr ==
'"') commacount2 ++; tptr++; }
3039 commacount1 = commacount1 / 2;
3040 commacount2 = commacount2 / 2;
3042 if ((
int)(strlen(url) +
3044 (commacount1 * strlen (
" :loadURLStringBreak:")) +
3045 (commacount2 * strlen (
" :loadURLStringBreak:"))) > (outLen - 20)) {
3046 printf (
"createLoadUrlString, string too long\n");
3050 sprintf (out,
"%d %d",commacount1,commacount2);
3053 while (*out !=
'\0') out++;
3057 while (*out !=
'\0') out++;
3063VrmlBrowserInit(JSContext *context, JSObject *globalObj, BrowserNative *brow)
3066 ttglobal tg = gglobal();
3067 *(jsval *)tg->jsVRMLBrowser.JSCreate_global_return_val = INT_TO_JSVAL(0);
3070 printf(
"VrmlBrowserInit\n");
3073 obj = JS_DefineObject(context, globalObj,
"Browser", &BrowserClass, NULL,
3074 JSPROP_ENUMERATE | JSPROP_PERMANENT);
3075 if (!JS_DefineFunctions(context, obj, BrowserFunctions)) {
3076 printf(
"JS_DefineFunctions failed in VrmlBrowserInit.\n");
3081 if (!JS_DefineProperties(context, obj, BrowserProperties)) {
3082 printf(
"JS_DefineProperties failed in VrmlBrowserInit.\n");
3086 if (!JS_SetPrivateFw(context, obj, brow)) {
3087 printf(
"JS_SetPrivate failed in VrmlBrowserInit.\n");
3095VrmlBrowserGetName(JSContext *context, uintN argc, jsval *vp) {
3096 JSObject *obj = JS_THIS_OBJECT(context,vp);
3097 jsval *argv = JS_ARGV(context,vp);
3105 _str = JS_NewStringCopyZ(context,BrowserName);
3106 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
3114VrmlBrowserGetVersion(JSContext *context, uintN argc, jsval *vp) {
3115 JSObject *obj = JS_THIS_OBJECT(context,vp);
3116 jsval *argv = JS_ARGV(context,vp);
3124 _str = JS_NewStringCopyZ(context, libFreeWRL_get_version());
3125 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
3131VrmlBrowserGetCurrentSpeed(JSContext *context, uintN argc, jsval *vp) {
3132 JSObject *obj = JS_THIS_OBJECT(context,vp);
3133 jsval *argv = JS_ARGV(context,vp);
3144 sprintf (
string,
"%f",gglobal()->Mainloop.BrowserSpeed);
3145 _str = JS_NewStringCopyZ(context,
string);
3146 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
3152VrmlBrowserGetCurrentFrameRate(JSContext *context, uintN argc, jsval *vp) {
3153 JSObject *obj = JS_THIS_OBJECT(context,vp);
3154 jsval *argv = JS_ARGV(context,vp);
3157 char FPSstring[1000];
3163 sprintf (FPSstring,
"%6.2f",gglobal()->Mainloop.BrowserFPS);
3164 _str = JS_NewStringCopyZ(context,FPSstring);
3165 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
3171VrmlBrowserGetWorldURL(JSContext *context, uintN argc, jsval *vp) {
3172 JSObject *obj = JS_THIS_OBJECT(context,vp);
3173 jsval *argv = JS_ARGV(context,vp);
3181 _str = JS_NewStringCopyZ(context,BrowserFullPath);
3182 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
3188VrmlBrowserReplaceWorld(JSContext *context, uintN argc, jsval *vp) {
3189 jsval *argv = JS_ARGV(context,vp);
3193 jsval _rval = INT_TO_JSVAL(0);
3194 const char *_c_args =
"MFNode nodes",
3198 if (JS_ConvertArguments(context, argc, argv, _c_format, &_obj)) {
3199 if ((_cls = JS_GET_CLASS(context, _obj)) == NULL) {
3200 printf(
"JS_GetClass failed in VrmlBrowserReplaceWorld.\n");
3204 if (memcmp(
"MFNode", _cls->name, strlen(_cls->name)) != 0) {
3205 printf(
"\nIncorrect argument in VrmlBrowserReplaceWorld.\n");
3208 _str = JS_ValueToString(context, argv[0]);
3209 _costr = JS_EncodeString(context,_str);
3213 while (*tptr !=
'\0') {
3214 if(*tptr ==
'[') *tptr =
' ';
3215 if(*tptr ==
']') *tptr =
' ';
3216 if(*tptr ==
',') *tptr =
' ';
3221 JS_free(context,_costr);
3223 printf(
"\nIncorrect argument format for replaceWorld(%s).\n", _c_args);
3226 JS_SET_RVAL(context,vp,_rval);
3232VrmlBrowserLoadURL(JSContext *context, uintN argc, jsval *vp) {
3233 jsval *argv = JS_ARGV(context,vp);
3237 const char *_c_args =
"MFString url, MFString parameter",
3239 #define myBufSize 2000
3241 char myBuf[myBufSize];
3243 if (JS_ConvertArguments(context, argc, argv, _c_format, &(_obj[0]), &(_obj[1]))) {
3244 if ((_cls[0] = JS_GET_CLASS(context, _obj[0])) == NULL) {
3245 printf(
"JS_GetClass failed for arg 0 in VrmlBrowserLoadURL.\n");
3248 if ((_cls[1] = JS_GET_CLASS(context, _obj[1])) == NULL) {
3249 printf(
"JS_GetClass failed for arg 1 in VrmlBrowserLoadURL.\n");
3252 if (memcmp(
"MFString", (_cls[0])->name, strlen((_cls[0])->name)) != 0 &&
3253 memcmp(
"MFString", (_cls[1])->name, strlen((_cls[1])->name)) != 0) {
3254 printf(
"\nIncorrect arguments in VrmlBrowserLoadURL.\n");
3257 _str[0] = JS_ValueToString(context, argv[0]);
3258 _costr[0] = JS_EncodeString(context,_str[0]);
3260 _str[1] = JS_ValueToString(context, argv[1]);
3261 _costr[1] = JS_EncodeString(context,_str[1]);
3268 createLoadUrlString(myBuf,myBufSize,_costr[0], _costr[1]);
3269 createLoadURL(myBuf);
3272 setAnchorsAnchor( get_EAIEventsIn_AnchorNode());
3274 gglobal()->RenderFuncs.BrowserAction = TRUE;
3276 JS_free(context,_costr[0]);
3277 JS_free(context,_costr[1]);
3279 printf(
"\nIncorrect argument format for loadURL(%s).\n", _c_args);
3282 JS_SET_RVAL(context,vp,INT_TO_JSVAL(0));
3289VrmlBrowserSetDescription(JSContext *context, uintN argc, jsval *vp) {
3290 jsval *argv = JS_ARGV(context,vp);
3292 const char *_c_format =
"S", *_c_args =
"SFString description";
3298 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
3303 JS_SET_RVAL(context,vp,INT_TO_JSVAL(0));
3305 printf(
"\nIncorrect argument format for setDescription(%s).\n", _c_args);
3314VrmlBrowserCreateVrmlFromString(JSContext* context, uintN argc, jsval* vp) {
3316 JSObject* obj = JS_NewObject(context, &MFNodeClass, NULL, NULL);
3319 jsval* argv = JS_ARGV(context, vp);
3320 const char* _c_format =
"S", * _c_args =
"SFString vrmlSyntax";
3330 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
3331 _c = JS_EncodeString(context, js_c);
3334 printf(
"VrmlBrowserCreateVrmlFromString: obj = %u, str = \"%s\"\n",
3339 resource_item_t* res = resource_create_from_string(_c);
3341 res->whereToPlaceData = myGroup;
3342 res->ectx = JS_GetContextPrivate(context);
3343 res->offsetFromWhereToPlaceData = (int)offsetof(
struct X3D_Group, children);
3344 res->media_type = resm_vrml;
3345 res->parsed_request = strdup(
"From the EAI bootcamp of life ");
3346 parser_process_res_VRML_X3D(res);
3347 newHandle = &(myGroup->children);
3350 if ((lhs = (AnyNative*)AnyNativeNew(FIELDTYPE_MFNode, NULL, NULL)) == NULL) {
3351 printf(
"AnyNativeNew failed in SFNodeConstr.\n");
3354 if (!JS_SetPrivateFw(context, obj, lhs)) {
3355 printf(
"JS_SetPrivate failed in SFNodeConstr.\n");
3359 lhs->v->mfnode = *newHandle;
3362 JS_free(context, _c);
3365 printf(
"\nIncorrect argument format for createVrmlFromString(%s).\n", _c_args);
3369 JS_SET_RVAL(context, vp, OBJECT_TO_JSVAL(obj));
3377VrmlBrowserCreateX3DFromString(JSContext* context, uintN argc, jsval* vp) {
3379 JSObject* obj = JS_NewObject(context, &MFNodeClass, NULL, NULL);
3382 jsval* argv = JS_ARGV(context, vp);
3383 const char* _c_format =
"S", * _c_args =
"SFString x3dSyntax";
3393 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
3394 _c = JS_EncodeString(context, js_c);
3397 printf(
"VrmlBrowserCreateVrmlFromString: obj = %u, str = \"%s\"\n",
3402 resource_item_t* res = resource_create_from_string(_c);
3404 res->whereToPlaceData = myGroup;
3405 res->ectx = JS_GetContextPrivate(context);
3406 res->offsetFromWhereToPlaceData = (int)offsetof(
struct X3D_Group, children);
3407 res->media_type = resm_x3d;
3408 res->parsed_request = strdup(
"From the EAI bootcamp of life ");
3409 parser_process_res_VRML_X3D(res);
3410 newHandle = &(myGroup->children);
3413 if ((lhs = (AnyNative*)AnyNativeNew(FIELDTYPE_MFNode, NULL, NULL)) == NULL) {
3414 printf(
"AnyNativeNew failed in SFNodeConstr.\n");
3417 if (!JS_SetPrivateFw(context, obj, lhs)) {
3418 printf(
"JS_SetPrivate failed in SFNodeConstr.\n");
3422 lhs->v->mfnode = *newHandle;
3425 JS_free(context, _c);
3428 printf(
"\nIncorrect argument format for createX3dFromString(%s).\n", _c_args);
3432 JS_SET_RVAL(context, vp, OBJECT_TO_JSVAL(obj));
3437VrmlBrowserCreateVrmlFromURL(JSContext *context, uintN argc, jsval *vp) {
3438 jsval *argv = JS_ARGV(context,vp);
3440 jsval *rval = &_my_rval;
3444 SFNodeNative *oldPtr;
3448 #define myFileSizeLimit 4000
3459 resource_item_t *res = NULL;
3468 printf (
"JS start of createVrmlFromURL\n");
3472 *rval = INT_TO_JSVAL(0);
3476 if (argv[0].isObject()) {
3477 if ((_cls[0] = JS_GET_CLASS(context, JSVAL_TO_OBJECT(argv[0]))) == NULL) {
3478 printf(
"JS_GetClass failed for arg 0 in VrmlBrowserLoadURL.\n");
3482 printf (
"VrmlBrowserCreateVrmlFromURL - expect first parameter to be an object\n");
3488 if (argv[1].isObject()) {
3489 if ((_cls[1] = JS_GET_CLASS(context, JSVAL_TO_OBJECT(argv[1]))) == NULL) {
3490 printf(
"JS_GetClass failed for arg 1 in VrmlBrowserLoadURL.\n");
3494 printf (
"VrmlBrowserCreateVrmlFromURL - expect first parameter to be an object\n");
3499 printf (
"JS createVrml - step 2\n");
3500 printf (
"JS create - we should havve a MFString and SFNode, have :%s: :%s:\n",(_cls[0])->name, (_cls[1])->name);
3504 if (memcmp(
"MFString", (_cls[0])->name, strlen((_cls[0])->name)) != 0 &&
3505 memcmp(
"SFNode", (_cls[1])->name, strlen((_cls[1])->name)) != 0) {
3506 printf(
"Incorrect arguments in VrmlBrowserLoadURL.\n");
3511 if (JSVAL_IS_STRING(argv[2])) {
3512 _str[1] = JSVAL_TO_STRING(argv[2]);
3513 fieldStr = JS_EncodeString(context,_str[1]);
3516 printf (
"field string is :%s:\n",fieldStr);
3519 printf (
"Expected a string in createVrmlFromURL\n");
3524 printf (
"passed object type tests\n");
3528 _str[0] = JS_ValueToString(context, argv[0]);
3529 _costr0 = JS_EncodeString(context,_str[0]);
3532 printf (
"URL string is %s\n",_costr0);
3537 if ((oldPtr = (SFNodeNative *)JS_GetPrivateFw(context, JSVAL_TO_OBJECT(argv[1]))) == NULL) {
3538 printf(
"JS_GetPrivate failed in VrmlBrowserLoadURL for SFNode parameter.\n");
3540 JS_free(context,_costr0);
3541 JS_free(context,fieldStr);
3545 myptr = X3D_NODE(oldPtr->handle);
3546 if (myptr == NULL) {
3547 printf (
"CreateVrmlFromURL, internal error - SFNodeNative memory pointer is NULL\n");
3549 JS_free(context,_costr0);
3550 JS_free(context,fieldStr);
3557 printf (
"SFNode handle %d, old X3DString %s\n",oldPtr->handle, oldPtr->X3DString);
3558 printf (
"myptr %d\n",myptr);
3559 printf (
"points to a %s\n",stringNodeType(myptr->_nodeType));
3564 if (
sizeof (_costr0) > (myFileSizeLimit-200)) {
3565 printf (
"VrmlBrowserCreateVrmlFromURL, url too long...\n");
3567 JS_free(context,_costr0);
3568 JS_free(context,fieldStr);
3583 Parser_scanStringValueToMem(X3D_NODE(&url),0,FIELDTYPE_MFString, _costr0, FALSE);
3586 res = resource_create_multi(&url);
3587 res->whereToPlaceData = myptr;
3591 fieldInt = findRoutedFieldInFIELDNAMES (myptr, fieldStr, TRUE);
3594 findFieldInOFFSETS(myptr->_nodeType, fieldInt, &offs, &type, &accessType);
3596 ConsoleMessage (
"Can not find field :%s: in nodeType :%s:",fieldStr,stringNodeType(myptr->_nodeType));
3598 JS_free(context,_costr0);
3599 JS_free(context,fieldStr);
3605 res->offsetFromWhereToPlaceData = offs;
3606 parser_process_res_VRML_X3D(res);
3614 MARK_EVENT(myptr,offs);
3616 JS_SET_RVAL(context,vp,*rval);
3617 JS_free(context,fieldStr);
3618 JS_free(context,_costr0);
3624VrmlBrowserAddRoute(JSContext *context, uintN argc, jsval *vp) {
3625 JSObject *obj = JS_THIS_OBJECT(context,vp);
3626 jsval *argv = JS_ARGV(context,vp);
3628 if (!doVRMLRoute(context, obj, argc, argv,
"addRoute")) {
3629 printf(
"doVRMLRoute failed in VrmlBrowserAddRoute.\n");
3632 JS_SET_RVAL(context,vp,INT_TO_JSVAL(0));
3637VrmlBrowserPrint(JSContext *context, uintN argc, jsval *vp) {
3638 JSObject *obj = JS_THIS_OBJECT(context,vp);
3639 jsval *argv = JS_ARGV(context,vp);
3644 UNUSED (context); UNUSED(obj);
3646 for (count=0; count < argc; count++) {
3647 if (JSVAL_IS_STRING(argv[count])) {
3648 _str = JSVAL_TO_STRING(argv[count]);
3649 _id_c = JS_EncodeString(context,_str);
3651 #if defined(AQUA) || defined(_MSC_VER)
3652 ConsoleMessage(_id_c);
3653 gglobal()->ConsoleMessage.consMsgCount = 0;
3655 #ifdef HAVE_NOTOOLKIT
3656 printf (
"%s", _id_c);
3658 printf (
"%s\n", _id_c);
3659 ConsoleMessage(_id_c);
3660 gglobal()->ConsoleMessage.consMsgCount = 0;
3663 JS_free(context,_id_c);
3670 JS_SET_RVAL(context,vp,INT_TO_JSVAL(0));
3675VrmlBrowserPrintln(JSContext *context, uintN argc, jsval *vp) {
3689 JSObject* obj = JS_THIS_OBJECT(context, vp);
3690 jsval* argv = JS_ARGV(context, vp);
3695 UNUSED(context); UNUSED(obj);
3697 for (count = 0; count < argc; count++) {
3698 if (JSVAL_IS_STRING(argv[count])) {
3699 _str = JSVAL_TO_STRING(argv[count]);
3700 _id_c = JS_EncodeString(context, _str);
3702#if defined(AQUA) || defined(_MSC_VER)
3703 ConsoleMessage(_id_c);
3704 gglobal()->ConsoleMessage.consMsgCount = 0;
3706#ifdef HAVE_NOTOOLKIT
3707 printf(
"%s", _id_c);
3709 printf(
"%s\n", _id_c);
3710 ConsoleMessage(_id_c);
3711 gglobal()->ConsoleMessage.consMsgCount = 0;
3714 JS_free(context, _id_c);
3723#if defined(AQUA) || defined(_MSC_VER)
3724 ConsoleMessage(
"\n");
3725 gglobal()->ConsoleMessage.consMsgCount = 0;
3726#elif !defined(_MSC_VER)
3727#ifdef HAVE_NOTOOLKIT
3731 JS_SET_RVAL(context, vp, INT_TO_JSVAL(0));
3736VrmlBrowserDeleteRoute(JSContext *context, uintN argc, jsval *vp) {
3737 JSObject *obj = JS_THIS_OBJECT(context,vp);
3738 jsval *argv = JS_ARGV(context,vp);
3740 if (!doVRMLRoute(context, obj, argc, argv,
"deleteRoute")) {
3741 printf(
"doVRMLRoute failed in VrmlBrowserDeleteRoute.\n");
3745 JS_SET_RVAL(context,vp,INT_TO_JSVAL(0));
3755static JSBool doVRMLRoute(JSContext *context, JSObject *obj, uintN argc, jsval *argv,
const char *callingFunc) {
3756 JSObject *fromNodeObj, *toNodeObj;
3757 SFNodeNative *fromNative, *toNative;
3760 *fromFieldString, *toFieldString;
3761 const char *_c_args =
3762 "SFNode fromNode, SFString fromEventOut, SFNode toNode, SFString toEventIn",
3763 *_c_format =
"oSoS";
3764 JSString *fromFieldStringJS, *toFieldStringJS;
3767 int fromOfs, toOfs, len;
3768 int fromtype, totype;
3774 printf (
"Problem with script - add/delete route command needs 4 parameters\n");
3779 if (JS_ConvertArguments(context, argc, argv, _c_format,
3780 &fromNodeObj, &fromFieldStringJS, &toNodeObj, &toFieldStringJS)) {
3781 fromFieldString = JS_EncodeString(context,fromFieldStringJS);
3782 toFieldString = JS_EncodeString(context,toFieldStringJS);
3784 if ((_cls[0] = JS_GET_CLASS(context, fromNodeObj)) == NULL) {
3785 printf(
"JS_GetClass failed for arg 0 in doVRMLRoute called from %s.\n",
3789 if ((_cls[1] = JS_GET_CLASS(context, toNodeObj)) == NULL) {
3790 printf(
"JS_GetClass failed for arg 2 in doVRMLRoute called from %s.\n",
3796 if (memcmp(
"SFNode", (_cls[0])->name, strlen((_cls[0])->name)) != 0 &&
3797 memcmp(
"SFNode", (_cls[1])->name, strlen((_cls[1])->name)) != 0) {
3798 printf(
"\nArguments 0 and 2 must be SFNode in doVRMLRoute called from %s(%s): %s\n",
3799 callingFunc, _c_args, callingFunc);
3804 if ((fromNative = (SFNodeNative *)JS_GetPrivateFw(context, fromNodeObj)) == NULL) {
3805 printf (
"problem getting native props\n");
3808 if ((toNative = (SFNodeNative *)JS_GetPrivateFw(context, toNodeObj)) == NULL) {
3809 printf (
"problem getting native props\n");
3813 fromNode = X3D_NODE(fromNative->handle);
3814 toNode = X3D_NODE(toNative->handle);
3817 printf (
"routing from a node of type %s to a node of type %s\n",
3818 stringNodeType(fromNode->_nodeType),
3819 stringNodeType(toNode->_nodeType));
3824 myField = findRoutedFieldInFIELDNAMES(fromNode,fromFieldString,0);
3826 myField = findRoutedFieldInFIELDNAMES(fromNode,fromFieldString,1);
3829 findFieldInOFFSETS(fromNode->_nodeType, myField, &fromOfs, &fromtype, &xxx);
3833 myField = findRoutedFieldInFIELDNAMES(toNode,toFieldString,0);
3835 myField = findRoutedFieldInFIELDNAMES(toNode,toFieldString,1);
3838 findFieldInOFFSETS(toNode->_nodeType, myField, &toOfs, &totype, &xxx);
3841 if (fromtype != totype) {
3842 printf (
"Javascript routing problem - can not route from %s to %s\n",
3843 stringNodeType(fromNode->_nodeType),
3844 stringNodeType(toNode->_nodeType));
3848 len = returnRoutingElementLength(totype);
3850 jsRegisterRoute(fromNode, fromOfs, toNode, toOfs, len,callingFunc);
3852 JS_free(context,fromFieldString);
3853 JS_free(context,toFieldString);
3856 printf(
"\nIncorrect argument format for %s(%s).\n",
3857 callingFunc, _c_args);
3864struct JSLoadPropElement {
3867 JSBool(*constr)(JSContext*,
unsigned int, jsval*);
3872struct JSLoadPropElement JSLoadPropsAux[] = {
3875 { &ExecutionContextClass, NULL, &ExecutionContextFunctions, &ExecutionContextProperties,
"ExecutionContextClass"},
3876 { &ComponentInfoClass, NULL, NULL, &ComponentInfoProperties,
"ComponentInfoClass"},
3877 { &ComponentInfoArrayClass, NULL, NULL, &ComponentInfoArrayProperties,
"ComponentInforArrayClass"},
3878 { &ProfileInfoClass, NULL, NULL, &ProfileInfoProperties,
"ProfileInfoClass"},
3879 { &ProfileInfoArrayClass, NULL, NULL, &ProfileInfoArrayProperties,
"ProfileInfoArrayClass"},
3880 { &X3DRouteClass, NULL, &X3DRouteFunctions, &X3DRouteProperties,
"X3DRouteClass"},
3881 { &RouteArrayClass, NULL, NULL, &RouteArrayProperties,
"RouteArrayClass"},
3882 { &ProtoDeclarationArrayClass, NULL, NULL, &ProtoDeclarationArrayProperties,
"ProtoDeclarationArrayClass"},
3883 { &ProtoDeclarationClass, NULL, &ProtoDeclarationFunctions, &ProtoDeclarationProperties,
"ProtoDeclarationClass"},
3884 { &FieldDefinitionArrayClass, NULL, NULL, &FieldDefinitionArrayProperties,
"FieldDefinitionClass"},
3885 { &FieldDefinitionClass, NULL, NULL, &FieldDefinitionProperties,
"FieldDefinitionClass"},
3886 { &X3DConstantsClass, NULL, NULL, NULL,
"FieldDefinitionClass"},
3887 { NULL, NULL, NULL, NULL, NULL }
3891JSBool loadAuxiliaryClasses(JSContext* context, JSObject* globalObj) {
3898 while (JSLoadPropsAux[i].fwclass != NULL) {
3899#ifdef JSVRMLCLASSESVERBOSE
3900 printf(
"loading %s\n", JSLoadProps[i].
id);
3904 if ((myProto = JS_InitClass(context, globalObj, NULL, JSLoadPropsAux[i].fwclass,
3905 (JSNative)JSLoadPropsAux[i].constr, INIT_ARGC, (JSPropertySpec*)JSLoadPropsAux[i].Properties,
3906 (JSFunctionSpec*)JSLoadPropsAux[i].Functions, NULL, NULL)) == NULL) {
3907 printf(
"JS_InitClass for %s failed in loadVrmlClasses.\n", JSLoadPropsAux[i].
id);
3911 v = OBJECT_TO_JSVAL(myProto);
3912 if (!JS_SetProperty(context, globalObj, JSLoadPropsAux[i].
id, &v)) {
3913 printf(
"JS_SetProperty for %s failed in loadAuxiliaryClasses.\n", JSLoadPropsAux[i].
id);