36#include <libFreeWRL.h>
39#include "../vrml_parser/Structs.h"
40#include "../vrml_parser/CRoutes.h"
41#include "../opengl/OpenGL_Utils.h"
42#include "../main/headers.h"
43#include "../main/ProdCon.h"
44#include "../scenegraph/RenderFuncs.h"
45#include "../vrml_parser/CParseGeneral.h"
46#include "../scenegraph/Vector.h"
47#include "../vrml_parser/CFieldDecls.h"
48#include "../vrml_parser/CParseParser.h"
49#include "../vrml_parser/CParseLexer.h"
50#include "../vrml_parser/CParse.h"
51#include "../main/Snapshot.h"
52#include "../scenegraph/Collision.h"
53#include "../scenegraph/quaternion.h"
54#include "../scenegraph/Viewer.h"
55#include "../x3d_parser/Bindable.h"
56#include "../input/EAIHeaders.h"
57#include "../ui/common.h"
64#include "jsVRMLClasses.h"
65#include "jsVRMLBrowser.h"
74#define SetPropertyStub JS_PropertyStub
76#define SetPropertyStub JS_StrictPropertyStub
83BrowserGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp);
84#elif JS_VERSION == 185
85BrowserGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp);
87BrowserGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp);
92BrowserSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp);
93#elif JS_VERSION == 185
94BrowserSetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp);
96BrowserSetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp);
100int jsrrunScript(JSContext *_context, JSObject *_globalObj,
char *script, jsval *rval);
157static JSClass Browser = {
176static JSBool doVRMLRoute(JSContext *context, JSObject *obj, uintN argc, jsval *argv,
const char *browserFunc);
178static JSFunctionSpec (BrowserFunctions)[] = {
179 {
"getName", VrmlBrowserGetName, 0},
180 {
"getVersion", VrmlBrowserGetVersion, 0},
181 {
"getCurrentSpeed", VrmlBrowserGetCurrentSpeed, 0},
182 {
"getCurrentFrameRate", VrmlBrowserGetCurrentFrameRate, 0},
183 {
"getWorldURL", VrmlBrowserGetWorldURL, 0},
184 {
"replaceWorld", VrmlBrowserReplaceWorld, 0},
185 {
"loadURL", VrmlBrowserLoadURL, 0},
186 {
"setDescription", VrmlBrowserSetDescription, 0},
187 {
"createVrmlFromString", VrmlBrowserCreateVrmlFromString, 0},
188 {
"createVrmlFromURL", VrmlBrowserCreateVrmlFromURL, 0},
189 {
"createX3DFromString", VrmlBrowserCreateX3DFromString, 0},
190 {
"createX3DFromURL", VrmlBrowserCreateVrmlFromURL, 0},
191 {
"addRoute", VrmlBrowserAddRoute, 0},
192 {
"deleteRoute", VrmlBrowserDeleteRoute, 0},
193 {
"print", VrmlBrowserPrint, 0},
194 {
"println", VrmlBrowserPrintln, 0},
220int capabilitiesHandler_getTableLength(
int* table);
221int capabilitiesHandler_getComponentLevel(
int *table,
int comp);
222int capabilitiesHandler_getProfileLevel(
int prof);
223const int *capabilitiesHandler_getProfileComponent(
int prof);
224const int *capabilitiesHandler_getCapabilitiesTable();
225typedef struct intTableIndex{
232ComponentInfoGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
233#elif JS_VERSION == 185
234ComponentInfoGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp){
236ComponentInfoGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
237 JSObject *obj = *hobj._;
243 int _index, *_table, _nameIndex;
250 if (!JS_IdToValue(cx,iid,&
id)) {
251 printf(
"JS_IdToValue failed in ComponentInfoGetProperty.\n");
255 if ((ptr = (IntTableIndex)JS_GetPrivateFw(cx, obj)) == NULL) {
256 printf(
"JS_GetPrivate failed in ExecutionContextGetProperty.\n");
264 if (JSVAL_IS_INT(
id))
266 int index = JSVAL_TO_INT(
id);
270 _nameIndex = _table[2*_index];
272 *rval = STRING_TO_JSVAL(COMPONENTS[_index]);
274 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,COMPONENTS[_nameIndex])));
279 int level = capabilitiesHandler_getComponentLevel(_table,_index);
281 *rval = INT_TO_JSVAL(lev);
283 JS_SET_RVAL(cx,vp,INT_TO_JSVAL(level));
289 *rval = STRING_TO_JSVAL(
"freewrl.sourceforge.net");
291 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,
"freewrl.sourceforge.net")));
300ComponentInfoSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
301#elif JS_VERSION == 185
302ComponentInfoSetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp){
304ComponentInfoSetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
305 JSObject *obj = *hobj._;
313ComponentInfoFinalize(JSContext *cx, JSObject *obj)
316 if ((ptr = (IntTableIndex)JS_GetPrivateFw(cx, obj)) == NULL) {
324static JSClass ComponentInfoClass = {
329 ComponentInfoGetProperty,
330 ComponentInfoSetProperty,
337static JSPropertySpec (ComponentInfoProperties)[] = {
339 {
"name", 0, JSPROP_ENUMERATE},
340 {
"Title", 1, JSPROP_ENUMERATE},
341 {
"level", 2, JSPROP_ENUMERATE},
342 {
"providerUrl", 3, JSPROP_ENUMERATE},
354ComponentInfoArrayGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
355#elif JS_VERSION == 185
356ComponentInfoArrayGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp){
358ComponentInfoArrayGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
359 JSObject *obj = *hobj._;
371 if (!JS_IdToValue(cx,iid,&
id)) {
372 printf(
"JS_IdToValue failed in ComponentInfoArrayGetProperty.\n");
376 if ((_table = (
int *)JS_GetPrivateFw(cx, obj)) == NULL) {
377 printf(
"JS_GetPrivate failed in ProfileInfoGetProperty.\n");
381 if (JSVAL_IS_INT(
id))
383 int index = JSVAL_TO_INT(
id);
388 int _length = capabilitiesHandler_getTableLength(_table);
390 *rval = INT_TO_JSVAL(_length);
392 JS_SET_RVAL(cx,vp,INT_TO_JSVAL(_length));
394 }
else if(index > -1 && index < COMPONENTS_COUNT )
397 IntTableIndex tableindex = MALLOC(
void *,
sizeof(
struct intTableIndex));
399 _obj = JS_NewObject(cx,&ComponentInfoClass,NULL,obj);
400 tableindex->index = index;
401 tableindex->table = _table;
402 if (!JS_DefineProperties(cx, _obj, ComponentInfoProperties)) {
403 printf(
"JS_DefineProperties failed in ComponentInfoProperties.\n");
407 if (!JS_SetPrivateFw(cx, _obj, (
void*)tableindex)) {
408 printf(
"JS_SetPrivate failed in ComponentInfoArray.\n");
413 *rval = OBJECT_TO_JSVAL(_obj);
415 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
424ComponentInfoArraySetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
425#elif JS_VERSION == 185
426ComponentInfoArraySetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp){
428ComponentInfoArraySetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
429 JSObject *obj = *hobj._;
438static JSClass ComponentInfoArrayClass = {
439 "ComponentInfoArray",
443 ComponentInfoArrayGetProperty,
444 ComponentInfoArraySetProperty,
451static JSPropertySpec (ComponentInfoArrayProperties)[] = {
452 {
"length", -1, JSPROP_READONLY | JSPROP_SHARED | JSPROP_PERMANENT},
466ProfileInfoGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
467#elif JS_VERSION == 185
468ProfileInfoGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp){
470ProfileInfoGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
471 JSObject *obj = *hobj._;
484 if (!JS_IdToValue(cx,iid,&
id)) {
485 printf(
"JS_IdToValue failed in ProfileInfoGetProperty.\n");
489 if ((ptr = (
int *)JS_GetPrivateFw(cx, obj)) == NULL) {
490 printf(
"JS_GetPrivate failed in ProfileInfoGetProperty.\n");
497 if (JSVAL_IS_INT(
id))
499 int index = JSVAL_TO_INT(
id);
504 *rval = STRING_TO_JSVAL(COMPONENTS[_index]);
506 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,PROFILES[_index])));
511 int level = capabilitiesHandler_getProfileLevel(_index);
513 *rval = INT_TO_JSVAL(lev);
515 JS_SET_RVAL(cx,vp,INT_TO_JSVAL(level));
521 *rval = STRING_TO_JSVAL(
"freewrl.sourceforge.net");
523 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,
"freewrl.sourceforge.net")));
528 const int *_table = capabilitiesHandler_getProfileComponent(_index);
531 _obj = JS_NewObject(cx,&ComponentInfoArrayClass,NULL,obj);
532 if (!JS_DefineProperties(cx, _obj, ComponentInfoArrayProperties)) {
533 printf(
"JS_DefineProperties failed in ComponentInfoArrayProperties.\n");
537 if (!JS_SetPrivateFw(cx, _obj, (
void*)_table)) {
538 printf(
"JS_SetPrivate failed in ComponentInfoArray.\n");
542 *rval = OBJECT_TO_JSVAL(_obj);
544 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
554ProfileInfoSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
555#elif JS_VERSION == 185
556ProfileInfoSetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp){
558ProfileInfoSetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
559 JSObject *obj = *hobj._;
567static JSClass ProfileInfoClass = {
572 ProfileInfoGetProperty,
573 ProfileInfoSetProperty,
580static JSPropertySpec (ProfileInfoProperties)[] = {
582 {
"name", 0, JSPROP_ENUMERATE},
583 {
"Title", 1, JSPROP_ENUMERATE},
584 {
"level", 2, JSPROP_ENUMERATE},
585 {
"providerUrl", 3, JSPROP_ENUMERATE},
586 {
"components", 4, JSPROP_ENUMERATE},
597ProfileInfoArrayGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
598#elif JS_VERSION == 185
599ProfileInfoArrayGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp){
601ProfileInfoArrayGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
602 JSObject *obj = *hobj._;
613 if (!JS_IdToValue(cx,iid,&
id)) {
614 printf(
"JS_IdToValue failed in ProfileInfoArrayGetProperty.\n");
619 if (JSVAL_IS_INT(
id))
621 int index = JSVAL_TO_INT(
id);
623 int _length = PROFILES_COUNT;
625 *rval = INT_TO_JSVAL(_length);
627 JS_SET_RVAL(cx,vp,INT_TO_JSVAL(_length));
633 int* _index = MALLOC(
void *,
sizeof(
int));
634 _obj = JS_NewObject(cx,&ProfileInfoClass,NULL,obj);
636 if (!JS_DefineProperties(cx, _obj, ProfileInfoProperties)) {
637 printf(
"JS_DefineProperties failed in ProfileInfoProperties.\n");
641 if (!JS_SetPrivateFw(cx, _obj, (
void*)_index)) {
642 printf(
"JS_SetPrivate failed in ProfileInfoArray.\n");
647 *rval = OBJECT_TO_JSVAL(_obj);
649 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
658ProfileInfoArraySetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
659#elif JS_VERSION == 185
660ProfileInfoArraySetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp){
662ProfileInfoArraySetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
663 JSObject *obj = *hobj._;
672static JSClass ProfileInfoArrayClass = {
677 ProfileInfoArrayGetProperty,
678 ProfileInfoArraySetProperty,
685static JSPropertySpec (ProfileInfoArrayProperties)[] = {
686 {
"length", -1, JSPROP_READONLY | JSPROP_SHARED | JSPROP_PERMANENT},
704X3DRouteGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
705#elif JS_VERSION == 185
706X3DRouteGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp){
708X3DRouteGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
709 JSObject *obj = *hobj._;
718 int fromOffset, toOffset;
719 const char *fieldname;
725 if (!JS_IdToValue(cx,iid,&
id)) {
726 printf(
"JS_IdToValue failed in ProfileInfoGetProperty.\n");
730 if ((ptr = (
int *)JS_GetPrivateFw(cx, obj)) == NULL) {
731 printf(
"JS_GetPrivate failed in ProfileInfoGetProperty.\n");
737 getSpecificRoute (_index,&fromNode, &fromOffset, &toNode, &toOffset);
747 if (JSVAL_IS_INT(
id))
749 int index = JSVAL_TO_INT(
id);
759 sfnn->handle = fromNode;
761 sfnn->handle = toNode;
763 _obj = JS_NewObject(cx,&SFNodeClass,NULL,obj);
764 if (!JS_DefineProperties(cx, _obj, SFNodeProperties)) {
765 printf(
"JS_DefineProperties failed in Route sourceNode.\n");
768 if (!JS_DefineFunctions(cx, _obj, SFNodeFunctions)) {
769 printf(
"JS_DefineFunctions failed in Route sourceNode.\n");
773 if (!JS_SetPrivateFw(cx, _obj, (
void*)sfnn)) {
774 printf(
"JS_SetPrivate failed in Route sourceNode.\n");
779 *rval = OBJECT_TO_JSVAL(_obj);
781 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
787 fieldname = findFIELDNAMESfromNodeOffset0(fromNode,fromOffset);
788 _str = JS_NewStringCopyZ(cx,fieldname);
790 *rval = STRING_TO_JSVAL(_str);
792 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
796 fieldname = findFIELDNAMESfromNodeOffset0(toNode,toOffset);
797 _str = JS_NewStringCopyZ(cx,fieldname);
799 *rval = STRING_TO_JSVAL(_str);
801 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
811X3DRouteSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
812#elif JS_VERSION == 185
813X3DRouteSetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp){
815X3DRouteSetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
816 JSObject *obj = *hobj._;
824static JSClass X3DRouteClass = {
837static JSPropertySpec (X3DRouteProperties)[] = {
839 {
"sourceNode", 0, JSPROP_ENUMERATE},
840 {
"sourceField", 1, JSPROP_ENUMERATE},
841 {
"destinationNode", 2, JSPROP_ENUMERATE},
842 {
"destinationField", 3, JSPROP_ENUMERATE},
854RouteArrayGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
855#elif JS_VERSION == 185
856RouteArrayGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp){
858RouteArrayGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
859 JSObject *obj = *hobj._;
870 if (!JS_IdToValue(cx,iid,&
id)) {
871 printf(
"JS_IdToValue failed in RouteArrayGetProperty.\n");
876 if (JSVAL_IS_INT(
id))
878 int index = JSVAL_TO_INT(
id);
880 int _length = getCRouteCount();
882 *rval = INT_TO_JSVAL(_length);
884 JS_SET_RVAL(cx,vp,INT_TO_JSVAL(_length));
890 int* _index = MALLOC(
void *,
sizeof(
int));
891 _obj = JS_NewObject(cx,&X3DRouteClass,NULL,obj);
893 if (!JS_DefineProperties(cx, _obj, X3DRouteProperties)) {
894 printf(
"JS_DefineProperties failed in RouteArray.\n");
898 if (!JS_SetPrivateFw(cx, _obj, (
void*)_index)) {
899 printf(
"JS_SetPrivate failed in RouteArray.\n");
904 *rval = OBJECT_TO_JSVAL(_obj);
906 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
915RouteArraySetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
916#elif JS_VERSION == 185
917RouteArraySetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp){
919RouteArraySetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
920 JSObject *obj = *hobj._;
929static JSClass RouteArrayClass = {
934 RouteArrayGetProperty,
935 RouteArraySetProperty,
942static JSPropertySpec (RouteArrayProperties)[] = {
943 {
"length", -1, JSPROP_READONLY | JSPROP_SHARED | JSPROP_PERMANENT},
950static JSFunctionSpec (ExecutionContextFunctions)[] = {
972static JSPropertySpec (ExecutionContextProperties)[] = {
974 {
"specificationVersion", 0, JSPROP_ENUMERATE},
975 {
"encoding", 1, JSPROP_ENUMERATE},
976 {
"profile", 2, JSPROP_ENUMERATE},
977 {
"components", 3, JSPROP_ENUMERATE},
978 {
"worldURL", 4, JSPROP_ENUMERATE},
979 {
"rootNodes", 5, JSPROP_ENUMERATE},
980 {
"protos", 6, JSPROP_ENUMERATE},
981 {
"externprotos", 7, JSPROP_ENUMERATE},
982 {
"routes", 8, JSPROP_ENUMERATE},
985 {
"isScene", 9, JSPROP_ENUMERATE},
992typedef struct X3D_Node * ExecutionContextNative;
996ExecutionContextGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
997#elif JS_VERSION == 185
998ExecutionContextGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp){
1000ExecutionContextGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
1001 JSObject *obj = *hobj._;
1005 ExecutionContextNative *ptr;
1012#if JS_VERSION >= 185
1013 if (!JS_IdToValue(cx,iid,&
id)) {
1014 printf(
"JS_IdToValue failed in ExecutionContextGetProperty.\n");
1019 if ((ptr = (ExecutionContextNative *)JS_GetPrivateFw(cx, obj)) == NULL) {
1020 printf(
"JS_GetPrivate failed in ExecutionContextGetProperty.\n");
1024 if (JSVAL_IS_INT(
id)) {
1025 switch (JSVAL_TO_INT(
id)) {
1029 sprintf(cs,
"{%d,%d,%d}",inputFileVersion[0],inputFileVersion[1],inputFileVersion[2]);
1030 _str = JS_NewStringCopyZ(cx,cs);
1033 *rval = STRING_TO_JSVAL(_str);
1035 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
1040 _str = JS_NewStringCopyZ(cx,
"not filled in yet sb. VRML or XML or ..");
1042 *rval = STRING_TO_JSVAL(_str);
1044 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
1049 int index = gglobal()->Mainloop.scene_profile;
1052 int* _index = MALLOC(
void *,
sizeof(
int));
1053 _obj = JS_NewObject(cx,&ProfileInfoClass,NULL,obj);
1055 if (!JS_DefineProperties(cx, _obj, ProfileInfoProperties)) {
1056 printf(
"JS_DefineProperties failed in ExecutionContextProfileInfoProperties.\n");
1060 if (!JS_SetPrivateFw(cx, _obj, (
void*)_index)) {
1061 printf(
"JS_SetPrivate failed in ExecutionContextProfileInfoArray.\n");
1066 *rval = OBJECT_TO_JSVAL(_obj);
1068 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1076 const int *_table = gglobal()->Mainloop.scene_components;
1079 _obj = JS_NewObject(cx,&ComponentInfoArrayClass,NULL,obj);
1080 if (!JS_DefineProperties(cx, _obj, ComponentInfoArrayProperties)) {
1081 printf(
"JS_DefineProperties failed in ExecutionContext_ComponentInfoArrayProperties.\n");
1085 if (!JS_SetPrivateFw(cx, _obj, (
void*)_table)) {
1086 printf(
"JS_SetPrivate failed in ExecutionContext_ComponentInfoArray.\n");
1090 *rval = OBJECT_TO_JSVAL(_obj);
1092 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1097 _str = JS_NewStringCopyZ(cx, gglobal()->Mainloop.url);
1099 *rval = STRING_TO_JSVAL(_str);
1101 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
1115 _obj = JS_NewObject(cx,&MFNodeClass,NULL,obj);
1122 if (!JS_DefineFunctions(cx, _obj, MFNodeFunctions)) {
1123 printf(
"JS_DefineProperties failed in SFRotationConstr.\n");
1133 *rval = OBJECT_TO_JSVAL(_obj);
1135 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1146 _obj = JS_NewObject(cx,&RouteArrayClass,NULL,obj);
1147 if (!JS_DefineProperties(cx, _obj, RouteArrayProperties)) {
1148 printf(
"JS_DefineProperties failed in ExecutionContext_X3DRouteArrayProperties.\n");
1156 *rval = OBJECT_TO_JSVAL(_obj);
1158 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1164 JS_SET_RVAL(cx,vp,BOOLEAN_TO_JSVAL(JS_TRUE));
1174ExecutionContextSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
1175#elif JS_VERSION == 185
1176ExecutionContextSetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp){
1178ExecutionContextSetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
1179 JSObject *obj = *hobj._;
1186static JSClass ExecutionContextClass = {
1188 JSCLASS_HAS_PRIVATE,
1191 ExecutionContextGetProperty,
1192 ExecutionContextSetProperty,
1200static JSPropertySpec (BrowserProperties)[] = {
1201 {
"name", 0, JSPROP_ENUMERATE},
1202 {
"version", 1, JSPROP_ENUMERATE},
1203 {
"currentSpeed", 2, JSPROP_ENUMERATE},
1204 {
"currentFrameRate", 3, JSPROP_ENUMERATE},
1205 {
"description", 4, JSPROP_ENUMERATE},
1206 {
"supportedComponents", 5, JSPROP_ENUMERATE},
1207 {
"supportedProfiles", 6, JSPROP_ENUMERATE},
1208 {
"currentScene", 7, JSPROP_ENUMERATE},
1214BrowserGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
1215#elif JS_VERSION == 185
1216BrowserGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp){
1218BrowserGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
1219 JSObject *obj = *hobj._;
1231#if JS_VERSION >= 185
1232 if (!JS_IdToValue(cx,iid,&
id)) {
1233 printf(
"JS_IdToValue failed in BrowserGetProperty.\n");
1244 if ((ptr = (
BrowserNative *)JS_GetPrivateFw(cx, obj)) == NULL) {
1245 printf(
"JS_GetPrivate failed in BrowserGetProperty.\n");
1249 if (JSVAL_IS_INT(
id)) {
1250 switch (JSVAL_TO_INT(
id)) {
1252 _str = JS_NewStringCopyZ(cx,BrowserName);
1254 *rval = STRING_TO_JSVAL(_str);
1256 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
1260 _str = JS_NewStringCopyZ(cx, libFreeWRL_get_version());
1262 *rval = STRING_TO_JSVAL(_str);
1264 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
1270 d = gglobal()->Mainloop.BrowserSpeed;
1271 if (JS_NewNumberValue(cx, d, vp) == JS_FALSE) {
1272 printf(
"JS_NewDouble failed for %f in BrowserGetProperty.\n",d);
1277 d = gglobal()->Mainloop.BrowserFPS;
1278 if (JS_NewNumberValue(cx, d, vp) == JS_FALSE) {
1279 printf(
"JS_NewDouble failed for %f in BrowserGetProperty.\n",d);
1284 _str = JS_NewStringCopyZ(cx, get_status());
1286 *rval = STRING_TO_JSVAL(_str);
1288 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
1295 _obj = JS_NewObject(cx,&ComponentInfoArrayClass,NULL,obj);
1296 if (!JS_DefineProperties(cx, _obj, ComponentInfoArrayProperties)) {
1297 printf(
"JS_DefineProperties failed in ComponentInfoArrayProperties.\n");
1304 if (!JS_SetPrivateFw(cx, _obj, (
void*)capabilitiesHandler_getCapabilitiesTable())) {
1305 printf(
"JS_SetPrivate failed in ExecutionContext.\n");
1310 *rval = OBJECT_TO_JSVAL(_obj);
1312 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1322 _obj = JS_NewObject(cx,&ProfileInfoArrayClass,NULL,obj);
1323 if (!JS_DefineProperties(cx, _obj, ProfileInfoArrayProperties)) {
1324 printf(
"JS_DefineProperties failed in ExecutionContextProperties.\n");
1338 *rval = OBJECT_TO_JSVAL(_obj);
1340 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1355 ExecutionContextNative ec = MALLOC(
void *,
sizeof(ExecutionContextNative));
1356 _obj = JS_NewObject(cx,&ExecutionContextClass,NULL,obj);
1360 if (!JS_DefineProperties(cx, _obj, ExecutionContextProperties)) {
1361 printf(
"JS_DefineProperties failed in ExecutionContextProperties.\n");
1364 if (!JS_DefineFunctions(cx, _obj, ExecutionContextFunctions)) {
1365 printf(
"JS_DefineProperties failed in ExecutionContextFunctions.\n");
1369 if (!JS_SetPrivateFw(cx, _obj, ec)) {
1370 printf(
"JS_SetPrivate failed in ExecutionContext.\n");
1375 *rval = OBJECT_TO_JSVAL(_obj);
1377 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1391BrowserSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
1392#elif JS_VERSION == 185
1393BrowserSetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp){
1395BrowserSetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
1396 JSObject *obj = *hobj._;
1405#if JS_VERSION >= 185
1407 if (!JS_IdToValue(cx,iid,&
id)) {
1408 printf(
"JS_IdToValue failed in BrowserSetProperty.\n");
1413 if ((ptr = (
BrowserNative *)JS_GetPrivateFw(cx, obj)) == NULL) {
1414 printf(
"JS_GetPrivate failed in BrowserSetProperty.\n");
1419 if (!JS_ConvertValue(cx, *vp, JSTYPE_STRING, &_val)) {
1420 printf(
"JS_ConvertValue failed in BrowserSetProperty.\n");
1424 if (JSVAL_IS_INT(
id)) {
1425 switch (JSVAL_TO_INT(
id)) {
1432 ss = JS_ValueToString(cx, _val);
1433 cs = JS_EncodeString(cx, ss);
1453typedef struct pjsVRMLBrowser{
1456 jsval JSCreate_global_return_val;
1460void *jsVRMLBrowser_constructor(){
1461 void *v = MALLOC(
void *,
sizeof(
struct pjsVRMLBrowser));
1462 memset(v,0,
sizeof(
struct pjsVRMLBrowser));
1465void jsVRMLBrowser_init(
struct tjsVRMLBrowser *t){
1468 t->prv = jsVRMLBrowser_constructor();
1470 ppjsVRMLBrowser p = (ppjsVRMLBrowser)t->prv;
1473 t->JSCreate_global_return_val = &p->JSCreate_global_return_val;
1480void jsRegisterRoute(
1481 struct X3D_Node* from,
int fromOfs,
1483 int len,
const char *adrem) {
1486 if (strcmp(
"addRoute",adrem) == 0)
1490 CRoutes_Register(ad, from, fromOfs, to, toOfs , len,
1491 returnInterpolatorPointer(to->_nodeType), 0, 0);
1496void conCat (
char *out,
char *in) {
1498 while (strlen (in) > 0) {
1499 strcat (out,
" :loadURLStringBreak:");
1500 while (*out !=
'\0') out++;
1502 if (*in ==
'[') in++;
1503 while ((*in !=
'\0') && (*in ==
' ')) in++;
1507 while (*in !=
'"') { *out = *in; out++; in++; }
1513 if (*in ==
'"') in++;
1514 if (*in ==
',') in++;
1515 if (*in ==
']') in++;
1521void createLoadUrlString(
char *out,
int outLen,
char *url,
char *param) {
1541 commacount1 = 0; commacount2 = 0;
1542 tptr = url;
while (*tptr !=
'\0') {
if (*tptr ==
'"') commacount1 ++; tptr++; }
1543 tptr = param;
while (*tptr !=
'\0') {
if (*tptr ==
'"') commacount2 ++; tptr++; }
1544 commacount1 = commacount1 / 2;
1545 commacount2 = commacount2 / 2;
1547 if ((
int)(strlen(url) +
1549 (commacount1 * strlen (
" :loadURLStringBreak:")) +
1550 (commacount2 * strlen (
" :loadURLStringBreak:"))) > (outLen - 20)) {
1551 printf (
"createLoadUrlString, string too long\n");
1555 sprintf (out,
"%d %d",commacount1,commacount2);
1558 while (*out !=
'\0') out++;
1562 while (*out !=
'\0') out++;
1568VrmlBrowserInit(JSContext *context, JSObject *globalObj,
BrowserNative *brow)
1572 *(jsval *)tg->jsVRMLBrowser.JSCreate_global_return_val = INT_TO_JSVAL(0);
1575 printf(
"VrmlBrowserInit\n");
1578 obj = JS_DefineObject(context, globalObj,
"Browser", &Browser, NULL,
1579 JSPROP_ENUMERATE | JSPROP_PERMANENT);
1580 if (!JS_DefineFunctions(context, obj, BrowserFunctions)) {
1581 printf(
"JS_DefineFunctions failed in VrmlBrowserInit.\n");
1586 if (!JS_DefineProperties(context, obj, BrowserProperties)) {
1587 printf(
"JS_DefineProperties failed in VrmlBrowserInit.\n");
1591 if (!JS_SetPrivateFw(context, obj, brow)) {
1592 printf(
"JS_SetPrivate failed in VrmlBrowserInit.\n");
1601VrmlBrowserGetName(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1603VrmlBrowserGetName(JSContext *context, uintN argc, jsval *vp) {
1604 JSObject *obj = JS_THIS_OBJECT(context,vp);
1605 jsval *argv = JS_ARGV(context,vp);
1613 _str = JS_NewStringCopyZ(context,BrowserName);
1615 *rval = STRING_TO_JSVAL(_str);
1617 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
1626VrmlBrowserGetVersion(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1628VrmlBrowserGetVersion(JSContext *context, uintN argc, jsval *vp) {
1629 JSObject *obj = JS_THIS_OBJECT(context,vp);
1630 jsval *argv = JS_ARGV(context,vp);
1638 _str = JS_NewStringCopyZ(context, libFreeWRL_get_version());
1640 *rval = STRING_TO_JSVAL(_str);
1642 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
1650VrmlBrowserGetCurrentSpeed(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1652VrmlBrowserGetCurrentSpeed(JSContext *context, uintN argc, jsval *vp) {
1653 JSObject *obj = JS_THIS_OBJECT(context,vp);
1654 jsval *argv = JS_ARGV(context,vp);
1665 sprintf (
string,
"%f",gglobal()->Mainloop.BrowserSpeed);
1666 _str = JS_NewStringCopyZ(context,
string);
1668 *rval = STRING_TO_JSVAL(_str);
1670 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
1678VrmlBrowserGetCurrentFrameRate(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1680VrmlBrowserGetCurrentFrameRate(JSContext *context, uintN argc, jsval *vp) {
1681 JSObject *obj = JS_THIS_OBJECT(context,vp);
1682 jsval *argv = JS_ARGV(context,vp);
1685 char FPSstring[1000];
1691 sprintf (FPSstring,
"%6.2f",gglobal()->Mainloop.BrowserFPS);
1692 _str = JS_NewStringCopyZ(context,FPSstring);
1694 *rval = STRING_TO_JSVAL(_str);
1696 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
1704VrmlBrowserGetWorldURL(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1706VrmlBrowserGetWorldURL(JSContext *context, uintN argc, jsval *vp) {
1707 JSObject *obj = JS_THIS_OBJECT(context,vp);
1708 jsval *argv = JS_ARGV(context,vp);
1716 _str = JS_NewStringCopyZ(context,BrowserFullPath);
1718 *rval = STRING_TO_JSVAL(_str);
1720 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
1728VrmlBrowserReplaceWorld(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1730VrmlBrowserReplaceWorld(JSContext *context, uintN argc, jsval *vp) {
1731 jsval *argv = JS_ARGV(context,vp);
1736 jsval _rval = INT_TO_JSVAL(0);
1737 char *_c_args =
"MFNode nodes",
1742 if (JS_ConvertArguments(context, argc, argv, _c_format, &_obj)) {
1743 if ((_cls = JS_GET_CLASS(context, _obj)) == NULL) {
1744 printf(
"JS_GetClass failed in VrmlBrowserReplaceWorld.\n");
1748 if (memcmp(
"MFNode", _cls->name, strlen(_cls->name)) != 0) {
1749 printf(
"\nIncorrect argument in VrmlBrowserReplaceWorld.\n");
1752 _str = JS_ValueToString(context, argv[0]);
1754 _costr = JS_GetStringBytes(_str);
1756 _costr = JS_EncodeString(context,_str);
1760 while (*tptr !=
'\0') {
1761 if(*tptr ==
'[') *tptr =
' ';
1762 if(*tptr ==
']') *tptr =
' ';
1763 if(*tptr ==
',') *tptr =
' ';
1767#if JS_VERSION >= 185
1768 JS_free(context,_costr);
1771 printf(
"\nIncorrect argument format for replaceWorld(%s).\n", _c_args);
1777 JS_SET_RVAL(context,vp,_rval);
1782struct X3D_Anchor* get_EAIEventsIn_AnchorNode();
1785VrmlBrowserLoadURL(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1787VrmlBrowserLoadURL(JSContext *context, uintN argc, jsval *vp) {
1788 jsval *argv = JS_ARGV(context,vp);
1793 char *_c_args =
"MFString url, MFString parameter",
1796 #define myBufSize 2000
1797 char myBuf[myBufSize];
1799 if (JS_ConvertArguments(context, argc, argv, _c_format, &(_obj[0]), &(_obj[1]))) {
1800 if ((_cls[0] = JS_GET_CLASS(context, _obj[0])) == NULL) {
1801 printf(
"JS_GetClass failed for arg 0 in VrmlBrowserLoadURL.\n");
1804 if ((_cls[1] = JS_GET_CLASS(context, _obj[1])) == NULL) {
1805 printf(
"JS_GetClass failed for arg 1 in VrmlBrowserLoadURL.\n");
1808 if (memcmp(
"MFString", (_cls[0])->name, strlen((_cls[0])->name)) != 0 &&
1809 memcmp(
"MFString", (_cls[1])->name, strlen((_cls[1])->name)) != 0) {
1810 printf(
"\nIncorrect arguments in VrmlBrowserLoadURL.\n");
1813 _str[0] = JS_ValueToString(context, argv[0]);
1815 _costr[0] = JS_GetStringBytes(_str[0]);
1817 _costr[0] = JS_EncodeString(context,_str[0]);
1820 _str[1] = JS_ValueToString(context, argv[1]);
1822 _costr[1] = JS_GetStringBytes(_str[1]);
1824 _costr[1] = JS_EncodeString(context,_str[1]);
1832 createLoadUrlString(myBuf,myBufSize,_costr[0], _costr[1]);
1833 createLoadURL(myBuf);
1836 setAnchorsAnchor( get_EAIEventsIn_AnchorNode());
1838 gglobal()->RenderFuncs.BrowserAction = TRUE;
1840#if JS_VERSION >= 185
1841 JS_free(context,_costr[0]);
1842 JS_free(context,_costr[1]);
1845 printf(
"\nIncorrect argument format for loadURL(%s).\n", _c_args);
1849 *rval = INT_TO_JSVAL(0);
1851 JS_SET_RVAL(context,vp,INT_TO_JSVAL(0));
1860VrmlBrowserSetDescription(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1861 char *_c_format =
"s";
1863VrmlBrowserSetDescription(JSContext *context, uintN argc, jsval *vp) {
1864 jsval *argv = JS_ARGV(context,vp);
1866 char *_c_format =
"S";
1868 char *_c, *_c_args =
"SFString description";
1874 JS_ConvertArguments(context, argc, argv, _c_format, &_c)) {
1876 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
1883 *rval = INT_TO_JSVAL(0);
1885 JS_SET_RVAL(context,vp,INT_TO_JSVAL(0));
1888 printf(
"\nIncorrect argument format for setDescription(%s).\n", _c_args);
1897VrmlBrowserCreateVrmlFromString(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1898 char *_c_format =
"s";
1900VrmlBrowserCreateVrmlFromString(JSContext *context, uintN argc, jsval *vp) {
1901 JSObject *obj = JS_THIS_OBJECT(context,vp);
1902 jsval *argv = JS_ARGV(context,vp);
1904 jsval *rval = &_my_rval;
1905 char *_c_format =
"S";
1908 char *_c, *_c_args =
"SFString vrmlSyntax";
1925 *rval = INT_TO_JSVAL(0);
1929 JS_ConvertArguments(context, argc, argv, _c_format, &_c)) {
1931 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
1932 _c = JS_EncodeString(context,js_c);
1935 printf(
"VrmlBrowserCreateVrmlFromString: obj = %u, str = \"%s\"\n",
1940 gglobal()->ProdCon.savedParser = (
void *)globalParser; globalParser = NULL;
1941 retGroup = createNewX3DNode0(NODE_Group);
1942 ra = EAI_CreateVrml(
"String",_c,X3D_NODE(rootNode()),retGroup);
1943 globalParser = (
struct VRMLParser*)gglobal()->ProdCon.savedParser;
1948 xstr = MALLOC (
char *, MallocdSize);
1949 strcpy (xstr,
"new MFNode(");
1951 for (count=0; count<retGroup->children.n; count ++) {
1952 tmpstr = MALLOC(
char *, strlen(_c) + 100);
1953 sprintf (tmpstr,
"%s new SFNode('%s','%p')",separator, _c, (
void*) retGroup->children.p[count]);
1955 wantedsize = (int) (strlen(tmpstr) + strlen(xstr) + 1);
1957 if (wantedsize >= MallocdSize) {
1958 MallocdSize = wantedsize +200;
1959 xstr = REALLOC (xstr,MallocdSize);
1963 strncat (xstr,tmpstr,strlen(tmpstr));
1964 FREE_IF_NZ (tmpstr);
1970#if JS_VERSION >= 185
1971 JS_free(context,_c);
1975 printf (
"running runscript on :%s:\n",xstr);
1979 jsrrunScript(context, obj, xstr, rval);
1983 printf(
"\nIncorrect argument format for createVrmlFromString(%s).\n", _c_args);
1989 tg->jsVRMLBrowser.JSCreate_global_return_val = *rval;
1991 JS_SET_RVAL(context,vp,*rval);
1998VrmlBrowserCreateX3DFromString(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1999 char *_c_format =
"s";
2001VrmlBrowserCreateX3DFromString(JSContext *context, uintN argc, jsval *vp) {
2002 JSObject *obj = JS_THIS_OBJECT(context,vp);
2003 jsval *argv = JS_ARGV(context,vp);
2005 jsval *rval = &_my_rval;
2006 char *_c_format =
"S";
2009 char *_c, *_c_args =
"SFString x3dSyntax";
2026 *rval = INT_TO_JSVAL(0);
2030 JS_ConvertArguments(context, argc, argv, _c_format, &_c)) {
2032 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
2033 _c = JS_EncodeString(context,js_c);
2036 printf(
"VrmlBrowserCreateVrmlFromString: obj = %u, str = \"%s\"\n",
2042 retGroup = createNewX3DNode(NODE_Group);
2043 ra = EAI_CreateX3d(
"String",_c,X3D_NODE(retGroup),retGroup);
2049 xstr = MALLOC (
char *, MallocdSize);
2050 strcpy (xstr,
"new MFNode(");
2052 for (count=0; count<retGroup->children.n; count ++) {
2053 tmpstr = MALLOC(
char *, strlen(_c) + 100);
2054 sprintf (tmpstr,
"%s new SFNode('%s','%p')",separator, _c, (
void*) retGroup->children.p[count]);
2055 wantedsize = (int) (strlen(tmpstr) + strlen(xstr));
2056 if (wantedsize > MallocdSize) {
2057 MallocdSize = wantedsize +200;
2058 xstr = REALLOC (xstr,MallocdSize);
2062 strncat (xstr,tmpstr,strlen(tmpstr));
2063 FREE_IF_NZ (tmpstr);
2067 markForDispose(X3D_NODE(retGroup),FALSE);
2069#if JS_VERSION >= 185
2070 JS_free(context,_c);
2074 printf (
"running runscript on :%s:\n",xstr);
2078 jsrrunScript(context, obj, xstr, rval);
2082 printf(
"\nIncorrect argument format for createVrmlFromString(%s).\n", _c_args);
2088 *(jsval*)(gglobal()->jsVRMLBrowser.JSCreate_global_return_val) = *rval;
2090 JS_SET_RVAL(context,vp,*rval);
2098VrmlBrowserCreateVrmlFromURL(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2100VrmlBrowserCreateVrmlFromURL(JSContext *context, uintN argc, jsval *vp) {
2101 jsval *argv = JS_ARGV(context,vp);
2103 jsval *rval = &_my_rval;
2111 #define myFileSizeLimit 4000
2131 printf (
"JS start of createVrmlFromURL\n");
2136 *rval = INT_TO_JSVAL(0);
2138 *rval = INT_TO_JSVAL(0);
2142 if (JSVAL_IS_OBJECT(argv[0])) {
2143 if ((_cls[0] = JS_GET_CLASS(context, JSVAL_TO_OBJECT(argv[0]))) == NULL) {
2144 printf(
"JS_GetClass failed for arg 0 in VrmlBrowserLoadURL.\n");
2148 printf (
"VrmlBrowserCreateVrmlFromURL - expect first parameter to be an object\n");
2153 if (JSVAL_IS_OBJECT(argv[1])) {
2154 if ((_cls[1] = JS_GET_CLASS(context, JSVAL_TO_OBJECT(argv[1]))) == NULL) {
2155 printf(
"JS_GetClass failed for arg 1 in VrmlBrowserLoadURL.\n");
2159 printf (
"VrmlBrowserCreateVrmlFromURL - expect first parameter to be an object\n");
2164 printf (
"JS createVrml - step 2\n");
2165 printf (
"JS create - we should havve a MFString and SFNode, have :%s: :%s:\n",(_cls[0])->name, (_cls[1])->name);
2169 if (memcmp(
"MFString", (_cls[0])->name, strlen((_cls[0])->name)) != 0 &&
2170 memcmp(
"SFNode", (_cls[1])->name, strlen((_cls[1])->name)) != 0) {
2171 printf(
"Incorrect arguments in VrmlBrowserLoadURL.\n");
2176 if (JSVAL_IS_STRING(argv[2])) {
2177 _str[1] = JSVAL_TO_STRING(argv[2]);
2179 fieldStr = JS_GetStringBytes(_str[1]);
2181 fieldStr = JS_EncodeString(context,_str[1]);
2184 printf (
"field string is :%s:\n",fieldStr);
2187 printf (
"Expected a string in createVrmlFromURL\n");
2192 printf (
"passed object type tests\n");
2196 _str[0] = JS_ValueToString(context, argv[0]);
2198 _costr0 = JS_GetStringBytes(_str[0]);
2200 _costr0 = JS_EncodeString(context,_str[0]);
2205 printf (
"URL string is %s\n",_costr0);
2210 if ((oldPtr = (
SFNodeNative *)JS_GetPrivateFw(context, JSVAL_TO_OBJECT(argv[1]))) == NULL) {
2211 printf(
"JS_GetPrivate failed in VrmlBrowserLoadURL for SFNode parameter.\n");
2212#if JS_VERSION >= 185
2213 JS_free(context,_costr0);
2214 JS_free(context,fieldStr);
2218 myptr = X3D_NODE(oldPtr->handle);
2219 if (myptr == NULL) {
2220 printf (
"CreateVrmlFromURL, internal error - SFNodeNative memory pointer is NULL\n");
2221#if JS_VERSION >= 185
2222 JS_free(context,_costr0);
2223 JS_free(context,fieldStr);
2230 printf (
"SFNode handle %d, old X3DString %s\n",oldPtr->handle, oldPtr->X3DString);
2231 printf (
"myptr %d\n",myptr);
2232 printf (
"points to a %s\n",stringNodeType(myptr->_nodeType));
2237 if (
sizeof (_costr0) > (myFileSizeLimit-200)) {
2238 printf (
"VrmlBrowserCreateVrmlFromURL, url too long...\n");
2239#if JS_VERSION >= 185
2240 JS_free(context,_costr0);
2241 JS_free(context,fieldStr);
2256 Parser_scanStringValueToMem(X3D_NODE(&url),0,FIELDTYPE_MFString, _costr0, FALSE);
2259 res = resource_create_multi(&url);
2260 res->whereToPlaceData = myptr;
2264 fieldInt = findRoutedFieldInFIELDNAMES (myptr, fieldStr, TRUE);
2267 findFieldInOFFSETS(myptr->_nodeType, fieldInt, &offs, &type, &accessType);
2269 ConsoleMessage (
"Can not find field :%s: in nodeType :%s:",fieldStr,stringNodeType(myptr->_nodeType));
2270#if JS_VERSION >= 185
2271 JS_free(context,_costr0);
2272 JS_free(context,fieldStr);
2278 res->offsetFromWhereToPlaceData = offs;
2279 parser_process_res_VRML_X3D(res);
2287 MARK_EVENT(myptr,offs);
2288#if JS_VERSION >= 185
2289 JS_SET_RVAL(context,vp,*rval);
2290 JS_free(context,fieldStr);
2291 JS_free(context,_costr0);
2298VrmlBrowserAddRoute(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2299 jsval _rval = INT_TO_JSVAL(0);
2301VrmlBrowserAddRoute(JSContext *context, uintN argc, jsval *vp) {
2302 JSObject *obj = JS_THIS_OBJECT(context,vp);
2303 jsval *argv = JS_ARGV(context,vp);
2305 if (!doVRMLRoute(context, obj, argc, argv,
"addRoute")) {
2306 printf(
"doVRMLRoute failed in VrmlBrowserAddRoute.\n");
2312 JS_SET_RVAL(context,vp,INT_TO_JSVAL(0));
2319VrmlBrowserPrint(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2320 jsval _rval = INT_TO_JSVAL(0);
2322VrmlBrowserPrint(JSContext *context, uintN argc, jsval *vp) {
2323 JSObject *obj = JS_THIS_OBJECT(context,vp);
2324 jsval *argv = JS_ARGV(context,vp);
2330 UNUSED (context); UNUSED(obj);
2332 for (count=0; count < argc; count++) {
2333 if (JSVAL_IS_STRING(argv[count])) {
2334 _str = JSVAL_TO_STRING(argv[count]);
2336 _id_c = JS_GetStringBytes(_str);
2338 _id_c = JS_EncodeString(context,_str);
2341 #if defined(AQUA) || defined(_MSC_VER)
2342 ConsoleMessage(_id_c);
2343 gglobal()->ConsoleMessage.consMsgCount = 0;
2345 #ifdef HAVE_NOTOOLKIT
2346 printf (
"%s", _id_c);
2348 printf (
"%s\n", _id_c);
2349 ConsoleMessage(_id_c);
2350 gglobal()->ConsoleMessage.consMsgCount = 0;
2353#if JS_VERSION >= 185
2354 JS_free(context,_id_c);
2363 #if defined(AQUA) || defined(_MSC_VER)
2364 ConsoleMessage(
"\n");
2365 gglobal()->ConsoleMessage.consMsgCount = 0;
2366 #elif !defined(_MSC_VER)
2367 #ifdef HAVE_NOTOOLKIT
2374 JS_SET_RVAL(context,vp,INT_TO_JSVAL(0));
2381VrmlBrowserPrintln(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2382 VrmlBrowserPrint(context,obj,argc,argv,rval);
2384VrmlBrowserPrintln(JSContext *context, uintN argc, jsval *vp) {
2386 VrmlBrowserPrint(context,argc,vp);
2389 #if defined(AQUA) || defined(_MSC_VER)
2391 gglobal()->ConsoleMessage.consMsgCount = 0;
2393 #ifdef HAVE_NOTOOLKIT
2402VrmlBrowserDeleteRoute(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2403 jsval _rval = INT_TO_JSVAL(0);
2405VrmlBrowserDeleteRoute(JSContext *context, uintN argc, jsval *vp) {
2406 JSObject *obj = JS_THIS_OBJECT(context,vp);
2407 jsval *argv = JS_ARGV(context,vp);
2409 if (!doVRMLRoute(context, obj, argc, argv,
"deleteRoute")) {
2410 printf(
"doVRMLRoute failed in VrmlBrowserDeleteRoute.\n");
2416 JS_SET_RVAL(context,vp,INT_TO_JSVAL(0));
2427static JSBool doVRMLRoute(JSContext *context, JSObject *obj, uintN argc, jsval *argv,
const char *callingFunc) {
2428 JSObject *fromNodeObj, *toNodeObj;
2432 *fromFieldString, *toFieldString,
2434 "SFNode fromNode, SFString fromEventOut, SFNode toNode, SFString toEventIn",
2436 *_c_format =
"o s o s";
2438 *_c_format =
"oSoS";
2439 JSString *fromFieldStringJS, *toFieldStringJS;
2443 int fromOfs, toOfs, len;
2444 int fromtype, totype;
2450 printf (
"Problem with script - add/delete route command needs 4 parameters\n");
2455 if (JS_ConvertArguments(context, argc, argv, _c_format,
2457 &fromNodeObj, &fromFieldString, &toNodeObj, &toFieldString)) {
2459 &fromNodeObj, &fromFieldStringJS, &toNodeObj, &toFieldStringJS)) {
2460 fromFieldString = JS_EncodeString(context,fromFieldStringJS);
2461 toFieldString = JS_EncodeString(context,toFieldStringJS);
2463 if ((_cls[0] = JS_GET_CLASS(context, fromNodeObj)) == NULL) {
2464 printf(
"JS_GetClass failed for arg 0 in doVRMLRoute called from %s.\n",
2468 if ((_cls[1] = JS_GET_CLASS(context, toNodeObj)) == NULL) {
2469 printf(
"JS_GetClass failed for arg 2 in doVRMLRoute called from %s.\n",
2475 if (memcmp(
"SFNode", (_cls[0])->name, strlen((_cls[0])->name)) != 0 &&
2476 memcmp(
"SFNode", (_cls[1])->name, strlen((_cls[1])->name)) != 0) {
2477 printf(
"\nArguments 0 and 2 must be SFNode in doVRMLRoute called from %s(%s): %s\n",
2478 callingFunc, _c_args, callingFunc);
2483 if ((fromNative = (
SFNodeNative *)JS_GetPrivateFw(context, fromNodeObj)) == NULL) {
2484 printf (
"problem getting native props\n");
2487 if ((toNative = (
SFNodeNative *)JS_GetPrivateFw(context, toNodeObj)) == NULL) {
2488 printf (
"problem getting native props\n");
2492 fromNode = X3D_NODE(fromNative->handle);
2493 toNode = X3D_NODE(toNative->handle);
2496 printf (
"routing from a node of type %s to a node of type %s\n",
2497 stringNodeType(fromNode->_nodeType),
2498 stringNodeType(toNode->_nodeType));
2503 myField = findRoutedFieldInFIELDNAMES(fromNode,fromFieldString,0);
2505 myField = findRoutedFieldInFIELDNAMES(fromNode,fromFieldString,1);
2508 findFieldInOFFSETS(fromNode->_nodeType, myField, &fromOfs, &fromtype, &xxx);
2512 myField = findRoutedFieldInFIELDNAMES(toNode,toFieldString,0);
2514 myField = findRoutedFieldInFIELDNAMES(toNode,toFieldString,1);
2517 findFieldInOFFSETS(toNode->_nodeType, myField, &toOfs, &totype, &xxx);
2520 if (fromtype != totype) {
2521 printf (
"Javascript routing problem - can not route from %s to %s\n",
2522 stringNodeType(fromNode->_nodeType),
2523 stringNodeType(toNode->_nodeType));
2527 len = returnRoutingElementLength(totype);
2529 jsRegisterRoute(fromNode, fromOfs, toNode, toOfs, len,callingFunc);
2531#if JS_VERSION >= 185
2532 JS_free(context,fromFieldString);
2533 JS_free(context,toFieldString);
2536 printf(
"\nIncorrect argument format for %s(%s).\n",
2537 callingFunc, _c_args);