30 #if !(defined(JAVASCRIPT_STUB) || defined(JAVASCRIPT_DUK))
34 #include <libFreeWRL.h>
37 #include "../vrml_parser/Structs.h"
38 #include "../vrml_parser/CRoutes.h"
39 #include "../opengl/OpenGL_Utils.h"
40 #include "../main/headers.h"
41 #include "../main/ProdCon.h"
42 #include "../scenegraph/RenderFuncs.h"
43 #include "../vrml_parser/CParseGeneral.h"
44 #include "../scenegraph/Vector.h"
45 #include "../vrml_parser/CFieldDecls.h"
46 #include "../vrml_parser/CParseParser.h"
47 #include "../vrml_parser/CParseLexer.h"
48 #include "../vrml_parser/CParse.h"
49 #include "../main/Snapshot.h"
50 #include "../scenegraph/Collision.h"
51 #include "../scenegraph/quaternion.h"
52 #include "../scenegraph/Viewer.h"
53 #include "../x3d_parser/Bindable.h"
54 #include "../input/EAIHeaders.h"
55 #include "../ui/common.h"
62 #include "jsVRMLClasses.h"
63 #include "jsVRMLBrowser.h"
73 #define SetPropertyStub JS_PropertyStub
75 #define SetPropertyStub JS_StrictPropertyStub
77 #endif // ndef X3DBROWSER
82 BrowserGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp);
84 BrowserGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp);
88 BrowserSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp);
90 BrowserSetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp);
94 int jsrrunScript(JSContext *_context, JSObject *_globalObj,
char *script, jsval *rval);
98 static JSClass Browser = {
117 static JSBool doVRMLRoute(JSContext *context, JSObject *obj, uintN argc, jsval *argv,
const char *browserFunc);
119 static JSFunctionSpec (BrowserFunctions)[] = {
120 {
"getName", VrmlBrowserGetName, 0},
121 {
"getVersion", VrmlBrowserGetVersion, 0},
122 {
"getCurrentSpeed", VrmlBrowserGetCurrentSpeed, 0},
123 {
"getCurrentFrameRate", VrmlBrowserGetCurrentFrameRate, 0},
124 {
"getWorldURL", VrmlBrowserGetWorldURL, 0},
125 {
"replaceWorld", VrmlBrowserReplaceWorld, 0},
126 {
"loadURL", VrmlBrowserLoadURL, 0},
127 {
"setDescription", VrmlBrowserSetDescription, 0},
128 {
"createVrmlFromString", VrmlBrowserCreateVrmlFromString, 0},
129 {
"createVrmlFromURL", VrmlBrowserCreateVrmlFromURL, 0},
130 {
"createX3DFromString", VrmlBrowserCreateX3DFromString, 0},
131 {
"createX3DFromURL", VrmlBrowserCreateVrmlFromURL, 0},
132 {
"addRoute", VrmlBrowserAddRoute, 0},
133 {
"deleteRoute", VrmlBrowserDeleteRoute, 0},
134 {
"print", VrmlBrowserPrint, 0},
135 {
"println", VrmlBrowserPrintln, 0},
161 int capabilitiesHandler_getTableLength(
int* table);
162 int capabilitiesHandler_getComponentLevel(
int *table,
int comp);
163 int capabilitiesHandler_getProfileLevel(
int prof);
164 const int *capabilitiesHandler_getProfileComponent(
int prof);
165 const int *capabilitiesHandler_getCapabilitiesTable();
173 ComponentInfoGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
175 ComponentInfoGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp)
179 int _index, *_table, _nameIndex;
185 #if JS_VERSION >= 185
186 if (!JS_IdToValue(cx,iid,&
id)) {
187 printf(
"JS_IdToValue failed in ComponentInfoGetProperty.\n");
192 printf(
"JS_GetPrivate failed in ExecutionContextGetProperty.\n");
200 if (JSVAL_IS_INT(
id))
202 int index = JSVAL_TO_INT(
id);
206 _nameIndex = _table[2*_index];
208 *rval = STRING_TO_JSVAL(COMPONENTS[_index]);
210 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,COMPONENTS[_nameIndex])));
215 int level = capabilitiesHandler_getComponentLevel(_table,_index);
217 *rval = INT_TO_JSVAL(lev);
219 JS_SET_RVAL(cx,vp,INT_TO_JSVAL(level));
225 *rval = STRING_TO_JSVAL(
"freewrl.sourceforge.net");
227 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,
"freewrl.sourceforge.net")));
236 ComponentInfoSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
238 ComponentInfoSetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp)
245 ComponentInfoFinalize(JSContext *cx, JSObject *obj)
256 static JSClass ComponentInfoClass = {
261 ComponentInfoGetProperty,
262 ComponentInfoSetProperty,
266 ComponentInfoFinalize
269 static JSPropertySpec (ComponentInfoProperties)[] = {
271 {
"name", 0, JSPROP_ENUMERATE},
272 {
"Title", 1, JSPROP_ENUMERATE},
273 {
"level", 2, JSPROP_ENUMERATE},
274 {
"providerUrl", 3, JSPROP_ENUMERATE},
286 ComponentInfoArrayGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
288 ComponentInfoArrayGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp)
297 #if JS_VERSION >= 185
298 if (!JS_IdToValue(cx,iid,&
id)) {
299 printf(
"JS_IdToValue failed in ComponentInfoArrayGetProperty.\n");
303 if ((_table = (
int *)JS_GetPrivate(cx, obj)) == NULL) {
304 printf(
"JS_GetPrivate failed in ProfileInfoGetProperty.\n");
308 if (JSVAL_IS_INT(
id))
310 int index = JSVAL_TO_INT(
id);
315 int _length = capabilitiesHandler_getTableLength(_table);
317 *rval = INT_TO_JSVAL(_length);
319 JS_SET_RVAL(cx,vp,INT_TO_JSVAL(_length));
321 }
else if(index > -1 && index < COMPONENTS_COUNT )
326 _obj = JS_NewObject(cx,&ComponentInfoClass,NULL,obj);
327 tableindex->index = index;
328 tableindex->table = _table;
329 if (!JS_DefineProperties(cx, _obj, ComponentInfoProperties)) {
330 printf(
"JS_DefineProperties failed in ComponentInfoProperties.\n");
334 if (!JS_SetPrivate(cx, _obj, (
void*)tableindex)) {
335 printf(
"JS_SetPrivate failed in ComponentInfoArray.\n");
340 *rval = OBJECT_TO_JSVAL(_obj);
342 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
351 ComponentInfoArraySetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
353 ComponentInfoArraySetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp)
361 static JSClass ComponentInfoArrayClass = {
362 "ComponentInfoArray",
366 ComponentInfoArrayGetProperty,
367 ComponentInfoArraySetProperty,
374 static JSPropertySpec (ComponentInfoArrayProperties)[] = {
375 {
"length", -1, JSPROP_READONLY | JSPROP_SHARED | JSPROP_PERMANENT},
389 ProfileInfoGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
391 ProfileInfoGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp)
401 #if JS_VERSION >= 185
402 if (!JS_IdToValue(cx,iid,&
id)) {
403 printf(
"JS_IdToValue failed in ProfileInfoGetProperty.\n");
407 if ((ptr = (
int *)JS_GetPrivate(cx, obj)) == NULL) {
408 printf(
"JS_GetPrivate failed in ProfileInfoGetProperty.\n");
415 if (JSVAL_IS_INT(
id))
417 int index = JSVAL_TO_INT(
id);
422 *rval = STRING_TO_JSVAL(COMPONENTS[_index]);
424 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,PROFILES[_index])));
429 int level = capabilitiesHandler_getProfileLevel(_index);
431 *rval = INT_TO_JSVAL(lev);
433 JS_SET_RVAL(cx,vp,INT_TO_JSVAL(level));
439 *rval = STRING_TO_JSVAL(
"freewrl.sourceforge.net");
441 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,
"freewrl.sourceforge.net")));
446 const int *_table = capabilitiesHandler_getProfileComponent(_index);
449 _obj = JS_NewObject(cx,&ComponentInfoArrayClass,NULL,obj);
450 if (!JS_DefineProperties(cx, _obj, ComponentInfoArrayProperties)) {
451 printf(
"JS_DefineProperties failed in ComponentInfoArrayProperties.\n");
455 if (!JS_SetPrivate(cx, _obj, (
void*)_table)) {
456 printf(
"JS_SetPrivate failed in ComponentInfoArray.\n");
460 *rval = OBJECT_TO_JSVAL(_obj);
462 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
472 ProfileInfoSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
474 ProfileInfoSetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp)
481 static JSClass ProfileInfoClass = {
486 ProfileInfoGetProperty,
487 ProfileInfoSetProperty,
494 static JSPropertySpec (ProfileInfoProperties)[] = {
496 {
"name", 0, JSPROP_ENUMERATE},
497 {
"Title", 1, JSPROP_ENUMERATE},
498 {
"level", 2, JSPROP_ENUMERATE},
499 {
"providerUrl", 3, JSPROP_ENUMERATE},
500 {
"components", 4, JSPROP_ENUMERATE},
511 ProfileInfoArrayGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
513 ProfileInfoArrayGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp)
521 #if JS_VERSION >= 185
522 if (!JS_IdToValue(cx,iid,&
id)) {
523 printf(
"JS_IdToValue failed in ProfileInfoArrayGetProperty.\n");
528 if (JSVAL_IS_INT(
id))
530 int index = JSVAL_TO_INT(
id);
532 int _length = PROFILES_COUNT;
534 *rval = INT_TO_JSVAL(_length);
536 JS_SET_RVAL(cx,vp,INT_TO_JSVAL(_length));
542 int* _index = MALLOC(
void *,
sizeof(
int));
543 _obj = JS_NewObject(cx,&ProfileInfoClass,NULL,obj);
545 if (!JS_DefineProperties(cx, _obj, ProfileInfoProperties)) {
546 printf(
"JS_DefineProperties failed in ProfileInfoProperties.\n");
550 if (!JS_SetPrivate(cx, _obj, (
void*)_index)) {
551 printf(
"JS_SetPrivate failed in ProfileInfoArray.\n");
556 *rval = OBJECT_TO_JSVAL(_obj);
558 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
567 ProfileInfoArraySetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
569 ProfileInfoArraySetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp)
577 static JSClass ProfileInfoArrayClass = {
582 ProfileInfoArrayGetProperty,
583 ProfileInfoArraySetProperty,
590 static JSPropertySpec (ProfileInfoArrayProperties)[] = {
591 {
"length", -1, JSPROP_READONLY | JSPROP_SHARED | JSPROP_PERMANENT},
605 int getCRouteCount();
609 X3DRouteGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
611 X3DRouteGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp)
619 int fromOffset, toOffset;
620 const char *fieldname;
625 #if JS_VERSION >= 185
626 if (!JS_IdToValue(cx,iid,&
id)) {
627 printf(
"JS_IdToValue failed in ProfileInfoGetProperty.\n");
631 if ((ptr = (
int *)JS_GetPrivate(cx, obj)) == NULL) {
632 printf(
"JS_GetPrivate failed in ProfileInfoGetProperty.\n");
638 getSpecificRoute (_index,&fromNode, &fromOffset, &toNode, &toOffset);
648 if (JSVAL_IS_INT(
id))
650 int index = JSVAL_TO_INT(
id);
660 sfnn->handle = fromNode;
662 sfnn->handle = toNode;
664 _obj = JS_NewObject(cx,&SFNodeClass,NULL,obj);
665 if (!JS_DefineProperties(cx, _obj, SFNodeProperties)) {
666 printf(
"JS_DefineProperties failed in Route sourceNode.\n");
669 if (!JS_DefineFunctions(cx, _obj, SFNodeFunctions)) {
670 printf(
"JS_DefineFunctions failed in Route sourceNode.\n");
674 if (!JS_SetPrivate(cx, _obj, (
void*)sfnn)) {
675 printf(
"JS_SetPrivate failed in Route sourceNode.\n");
680 *rval = OBJECT_TO_JSVAL(_obj);
682 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
688 fieldname = findFIELDNAMESfromNodeOffset0(fromNode,fromOffset);
689 _str = JS_NewStringCopyZ(cx,fieldname);
691 *rval = STRING_TO_JSVAL(_str);
693 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
697 fieldname = findFIELDNAMESfromNodeOffset0(toNode,toOffset);
698 _str = JS_NewStringCopyZ(cx,fieldname);
700 *rval = STRING_TO_JSVAL(_str);
702 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
712 X3DRouteSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
714 X3DRouteSetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp)
721 static JSClass X3DRouteClass = {
734 static JSPropertySpec (X3DRouteProperties)[] = {
736 {
"sourceNode", 0, JSPROP_ENUMERATE},
737 {
"sourceField", 1, JSPROP_ENUMERATE},
738 {
"destinationNode", 2, JSPROP_ENUMERATE},
739 {
"destinationField", 3, JSPROP_ENUMERATE},
751 RouteArrayGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
753 RouteArrayGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp)
761 #if JS_VERSION >= 185
762 if (!JS_IdToValue(cx,iid,&
id)) {
763 printf(
"JS_IdToValue failed in RouteArrayGetProperty.\n");
768 if (JSVAL_IS_INT(
id))
770 int index = JSVAL_TO_INT(
id);
772 int _length = getCRouteCount();
774 *rval = INT_TO_JSVAL(_length);
776 JS_SET_RVAL(cx,vp,INT_TO_JSVAL(_length));
782 int* _index = MALLOC(
void *,
sizeof(
int));
783 _obj = JS_NewObject(cx,&X3DRouteClass,NULL,obj);
785 if (!JS_DefineProperties(cx, _obj, X3DRouteProperties)) {
786 printf(
"JS_DefineProperties failed in RouteArray.\n");
790 if (!JS_SetPrivate(cx, _obj, (
void*)_index)) {
791 printf(
"JS_SetPrivate failed in RouteArray.\n");
796 *rval = OBJECT_TO_JSVAL(_obj);
798 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
807 RouteArraySetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
809 RouteArraySetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp)
817 static JSClass RouteArrayClass = {
822 RouteArrayGetProperty,
823 RouteArraySetProperty,
830 static JSPropertySpec (RouteArrayProperties)[] = {
831 {
"length", -1, JSPROP_READONLY | JSPROP_SHARED | JSPROP_PERMANENT},
838 static JSFunctionSpec (ExecutionContextFunctions)[] = {
860 static JSPropertySpec (ExecutionContextProperties)[] = {
862 {
"specificationVersion", 0, JSPROP_ENUMERATE},
863 {
"encoding", 1, JSPROP_ENUMERATE},
864 {
"profile", 2, JSPROP_ENUMERATE},
865 {
"components", 3, JSPROP_ENUMERATE},
866 {
"worldURL", 4, JSPROP_ENUMERATE},
867 {
"rootNodes", 5, JSPROP_ENUMERATE},
868 {
"protos", 6, JSPROP_ENUMERATE},
869 {
"externprotos", 7, JSPROP_ENUMERATE},
870 {
"routes", 8, JSPROP_ENUMERATE},
873 {
"isScene", 9, JSPROP_ENUMERATE},
884 ExecutionContextGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
886 ExecutionContextGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp)
889 ExecutionContextNative *ptr;
896 #if JS_VERSION >= 185
897 if (!JS_IdToValue(cx,iid,&
id)) {
898 printf(
"JS_IdToValue failed in ExecutionContextGetProperty.\n");
903 if ((ptr = (ExecutionContextNative *)JS_GetPrivate(cx, obj)) == NULL) {
904 printf(
"JS_GetPrivate failed in ExecutionContextGetProperty.\n");
908 if (JSVAL_IS_INT(
id)) {
909 switch (JSVAL_TO_INT(
id)) {
913 sprintf(cs,
"{%d,%d,%d}",inputFileVersion[0],inputFileVersion[1],inputFileVersion[2]);
914 _str = JS_NewStringCopyZ(cx,cs);
917 *rval = STRING_TO_JSVAL(_str);
919 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
924 _str = JS_NewStringCopyZ(cx,
"not filled in yet sb. VRML or XML or ..");
926 *rval = STRING_TO_JSVAL(_str);
928 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
933 int index = gglobal()->Mainloop.scene_profile;
936 int* _index = MALLOC(
void *,
sizeof(
int));
937 _obj = JS_NewObject(cx,&ProfileInfoClass,NULL,obj);
939 if (!JS_DefineProperties(cx, _obj, ProfileInfoProperties)) {
940 printf(
"JS_DefineProperties failed in ExecutionContextProfileInfoProperties.\n");
944 if (!JS_SetPrivate(cx, _obj, (
void*)_index)) {
945 printf(
"JS_SetPrivate failed in ExecutionContextProfileInfoArray.\n");
950 *rval = OBJECT_TO_JSVAL(_obj);
952 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
960 const int *_table = gglobal()->Mainloop.scene_components;
963 _obj = JS_NewObject(cx,&ComponentInfoArrayClass,NULL,obj);
964 if (!JS_DefineProperties(cx, _obj, ComponentInfoArrayProperties)) {
965 printf(
"JS_DefineProperties failed in ExecutionContext_ComponentInfoArrayProperties.\n");
969 if (!JS_SetPrivate(cx, _obj, (
void*)_table)) {
970 printf(
"JS_SetPrivate failed in ExecutionContext_ComponentInfoArray.\n");
974 *rval = OBJECT_TO_JSVAL(_obj);
976 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
981 _str = JS_NewStringCopyZ(cx, gglobal()->Mainloop.url);
983 *rval = STRING_TO_JSVAL(_str);
985 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
999 _obj = JS_NewObject(cx,&MFNodeClass,NULL,obj);
1006 if (!JS_DefineFunctions(cx, _obj, MFNodeFunctions)) {
1007 printf(
"JS_DefineProperties failed in SFRotationConstr.\n");
1016 #if JS_VERSION < 185
1017 *rval = OBJECT_TO_JSVAL(_obj);
1019 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1030 _obj = JS_NewObject(cx,&RouteArrayClass,NULL,obj);
1031 if (!JS_DefineProperties(cx, _obj, RouteArrayProperties)) {
1032 printf(
"JS_DefineProperties failed in ExecutionContext_X3DRouteArrayProperties.\n");
1039 #if JS_VERSION < 185
1040 *rval = OBJECT_TO_JSVAL(_obj);
1042 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1048 JS_SET_RVAL(cx,vp,BOOLEAN_TO_JSVAL(JS_TRUE));
1057 #if JS_VERSION < 185
1058 ExecutionContextSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
1060 ExecutionContextSetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp)
1066 static JSClass ExecutionContextClass = {
1068 JSCLASS_HAS_PRIVATE,
1071 ExecutionContextGetProperty,
1072 ExecutionContextSetProperty,
1080 static JSPropertySpec (BrowserProperties)[] = {
1081 {
"name", 0, JSPROP_ENUMERATE},
1082 {
"version", 1, JSPROP_ENUMERATE},
1083 {
"currentSpeed", 2, JSPROP_ENUMERATE},
1084 {
"currentFrameRate", 3, JSPROP_ENUMERATE},
1085 {
"description", 4, JSPROP_ENUMERATE},
1086 {
"supportedComponents", 5, JSPROP_ENUMERATE},
1087 {
"supportedProfiles", 6, JSPROP_ENUMERATE},
1088 {
"currentScene", 7, JSPROP_ENUMERATE},
1093 #if JS_VERSION < 185
1094 BrowserGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
1096 BrowserGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp)
1107 #if JS_VERSION >= 185
1108 if (!JS_IdToValue(cx,iid,&
id)) {
1109 printf(
"JS_IdToValue failed in BrowserGetProperty.\n");
1120 if ((ptr = (
BrowserNative *)JS_GetPrivate(cx, obj)) == NULL) {
1121 printf(
"JS_GetPrivate failed in BrowserGetProperty.\n");
1125 if (JSVAL_IS_INT(
id)) {
1126 switch (JSVAL_TO_INT(
id)) {
1128 _str = JS_NewStringCopyZ(cx,BrowserName);
1129 #if JS_VERSION < 185
1130 *rval = STRING_TO_JSVAL(_str);
1132 JS_SET_RVAL(cx,vp,STRING_TO_JSVAL(_str));
1136 _str = JS_NewStringCopyZ(cx, libFreeWRL_get_version());
1137 #if JS_VERSION < 185
1138 *rval = STRING_TO_JSVAL(_str);
1140 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
1146 d = gglobal()->Mainloop.BrowserSpeed;
1147 if (JS_NewNumberValue(cx, d, vp) == JS_FALSE) {
1148 printf(
"JS_NewDouble failed for %f in BrowserGetProperty.\n",d);
1153 d = gglobal()->Mainloop.BrowserFPS;
1154 if (JS_NewNumberValue(cx, d, vp) == JS_FALSE) {
1155 printf(
"JS_NewDouble failed for %f in BrowserGetProperty.\n",d);
1160 _str = JS_NewStringCopyZ(cx, get_status());
1161 #if JS_VERSION < 185
1162 *rval = STRING_TO_JSVAL(_str);
1164 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
1171 _obj = JS_NewObject(cx,&ComponentInfoArrayClass,NULL,obj);
1172 if (!JS_DefineProperties(cx, _obj, ComponentInfoArrayProperties)) {
1173 printf(
"JS_DefineProperties failed in ComponentInfoArrayProperties.\n");
1180 if (!JS_SetPrivate(cx, _obj, (
void*)capabilitiesHandler_getCapabilitiesTable())) {
1181 printf(
"JS_SetPrivate failed in ExecutionContext.\n");
1185 #if JS_VERSION < 185
1186 *rval = OBJECT_TO_JSVAL(_obj);
1188 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1198 _obj = JS_NewObject(cx,&ProfileInfoArrayClass,NULL,obj);
1199 if (!JS_DefineProperties(cx, _obj, ProfileInfoArrayProperties)) {
1200 printf(
"JS_DefineProperties failed in ExecutionContextProperties.\n");
1213 #if JS_VERSION < 185
1214 *rval = OBJECT_TO_JSVAL(_obj);
1216 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1231 ExecutionContextNative ec = MALLOC(
void *,
sizeof(ExecutionContextNative));
1232 _obj = JS_NewObject(cx,&ExecutionContextClass,NULL,obj);
1236 if (!JS_DefineProperties(cx, _obj, ExecutionContextProperties)) {
1237 printf(
"JS_DefineProperties failed in ExecutionContextProperties.\n");
1240 if (!JS_DefineFunctions(cx, _obj, ExecutionContextFunctions)) {
1241 printf(
"JS_DefineProperties failed in ExecutionContextFunctions.\n");
1245 if (!JS_SetPrivate(cx, _obj, ec)) {
1246 printf(
"JS_SetPrivate failed in ExecutionContext.\n");
1250 #if JS_VERSION < 185
1251 *rval = OBJECT_TO_JSVAL(_obj);
1253 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(_obj));
1266 #if JS_VERSION < 185
1267 BrowserSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp)
1269 BrowserSetProperty(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp)
1276 #if JS_VERSION >= 185
1278 if (!JS_IdToValue(cx,iid,&
id)) {
1279 printf(
"JS_IdToValue failed in BrowserSetProperty.\n");
1284 if ((ptr = (
BrowserNative *)JS_GetPrivate(cx, obj)) == NULL) {
1285 printf(
"JS_GetPrivate failed in BrowserSetProperty.\n");
1290 if (!JS_ConvertValue(cx, *vp, JSTYPE_STRING, &_val)) {
1291 printf(
"JS_ConvertValue failed in BrowserSetProperty.\n");
1295 if (JSVAL_IS_INT(
id)) {
1296 switch (JSVAL_TO_INT(
id)) {
1303 ss = JS_ValueToString(cx, _val);
1304 cs = JS_EncodeString(cx, ss);
1327 jsval JSCreate_global_return_val;
1331 void *jsVRMLBrowser_constructor(){
1336 void jsVRMLBrowser_init(
struct tjsVRMLBrowser *t){
1339 t->prv = jsVRMLBrowser_constructor();
1341 ppjsVRMLBrowser p = (ppjsVRMLBrowser)t->prv;
1344 t->JSCreate_global_return_val = &p->JSCreate_global_return_val;
1351 void jsRegisterRoute(
1352 struct X3D_Node* from,
int fromOfs,
1354 int len,
const char *adrem) {
1357 if (strcmp(
"addRoute",adrem) == 0)
1361 CRoutes_Register(ad, from, fromOfs, to, toOfs , len,
1362 returnInterpolatorPointer(to->_nodeType), 0, 0);
1367 void conCat (
char *out,
char *in) {
1369 while (strlen (in) > 0) {
1370 strcat (out,
" :loadURLStringBreak:");
1371 while (*out !=
'\0') out++;
1373 if (*in ==
'[') in++;
1374 while ((*in !=
'\0') && (*in ==
' ')) in++;
1378 while (*in !=
'"') { *out = *in; out++; in++; }
1384 if (*in ==
'"') in++;
1385 if (*in ==
',') in++;
1386 if (*in ==
']') in++;
1392 void createLoadUrlString(
char *out,
int outLen,
char *url,
char *param) {
1412 commacount1 = 0; commacount2 = 0;
1413 tptr = url;
while (*tptr !=
'\0') {
if (*tptr ==
'"') commacount1 ++; tptr++; }
1414 tptr = param;
while (*tptr !=
'\0') {
if (*tptr ==
'"') commacount2 ++; tptr++; }
1415 commacount1 = commacount1 / 2;
1416 commacount2 = commacount2 / 2;
1418 if ((
int)(strlen(url) +
1420 (commacount1 * strlen (
" :loadURLStringBreak:")) +
1421 (commacount2 * strlen (
" :loadURLStringBreak:"))) > (outLen - 20)) {
1422 printf (
"createLoadUrlString, string too long\n");
1426 sprintf (out,
"%d %d",commacount1,commacount2);
1429 while (*out !=
'\0') out++;
1433 while (*out !=
'\0') out++;
1439 VrmlBrowserInit(JSContext *context, JSObject *globalObj,
BrowserNative *brow)
1443 *(jsval *)tg->jsVRMLBrowser.JSCreate_global_return_val = INT_TO_JSVAL(0);
1446 printf(
"VrmlBrowserInit\n");
1449 obj = JS_DefineObject(context, globalObj,
"Browser", &Browser, NULL,
1450 JSPROP_ENUMERATE | JSPROP_PERMANENT);
1451 if (!JS_DefineFunctions(context, obj, BrowserFunctions)) {
1452 printf(
"JS_DefineFunctions failed in VrmlBrowserInit.\n");
1457 if (!JS_DefineProperties(context, obj, BrowserProperties)) {
1458 printf(
"JS_DefineProperties failed in VrmlBrowserInit.\n");
1462 if (!JS_SetPrivate(context, obj, brow)) {
1463 printf(
"JS_SetPrivate failed in VrmlBrowserInit.\n");
1471 #if JS_VERSION < 185
1472 VrmlBrowserGetName(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1474 VrmlBrowserGetName(JSContext *context, uintN argc, jsval *vp) {
1475 JSObject *obj = JS_THIS_OBJECT(context,vp);
1476 jsval *argv = JS_ARGV(context,vp);
1484 _str = JS_NewStringCopyZ(context,BrowserName);
1485 #if JS_VERSION < 185
1486 *rval = STRING_TO_JSVAL(_str);
1488 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
1496 #if JS_VERSION < 185
1497 VrmlBrowserGetVersion(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1499 VrmlBrowserGetVersion(JSContext *context, uintN argc, jsval *vp) {
1500 JSObject *obj = JS_THIS_OBJECT(context,vp);
1501 jsval *argv = JS_ARGV(context,vp);
1509 _str = JS_NewStringCopyZ(context, libFreeWRL_get_version());
1510 #if JS_VERSION < 185
1511 *rval = STRING_TO_JSVAL(_str);
1513 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
1520 #if JS_VERSION < 185
1521 VrmlBrowserGetCurrentSpeed(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1523 VrmlBrowserGetCurrentSpeed(JSContext *context, uintN argc, jsval *vp) {
1524 JSObject *obj = JS_THIS_OBJECT(context,vp);
1525 jsval *argv = JS_ARGV(context,vp);
1536 sprintf (
string,
"%f",gglobal()->Mainloop.BrowserSpeed);
1537 _str = JS_NewStringCopyZ(context,
string);
1538 #if JS_VERSION < 185
1539 *rval = STRING_TO_JSVAL(_str);
1541 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
1548 #if JS_VERSION < 185
1549 VrmlBrowserGetCurrentFrameRate(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1551 VrmlBrowserGetCurrentFrameRate(JSContext *context, uintN argc, jsval *vp) {
1552 JSObject *obj = JS_THIS_OBJECT(context,vp);
1553 jsval *argv = JS_ARGV(context,vp);
1556 char FPSstring[1000];
1562 sprintf (FPSstring,
"%6.2f",gglobal()->Mainloop.BrowserFPS);
1563 _str = JS_NewStringCopyZ(context,FPSstring);
1564 #if JS_VERSION < 185
1565 *rval = STRING_TO_JSVAL(_str);
1567 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
1574 #if JS_VERSION < 185
1575 VrmlBrowserGetWorldURL(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1577 VrmlBrowserGetWorldURL(JSContext *context, uintN argc, jsval *vp) {
1578 JSObject *obj = JS_THIS_OBJECT(context,vp);
1579 jsval *argv = JS_ARGV(context,vp);
1587 _str = JS_NewStringCopyZ(context,BrowserFullPath);
1588 #if JS_VERSION < 185
1589 *rval = STRING_TO_JSVAL(_str);
1591 JS_SET_RVAL(context,vp,STRING_TO_JSVAL(_str));
1598 #if JS_VERSION < 185
1599 VrmlBrowserReplaceWorld(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1601 VrmlBrowserReplaceWorld(JSContext *context, uintN argc, jsval *vp) {
1602 jsval *argv = JS_ARGV(context,vp);
1607 jsval _rval = INT_TO_JSVAL(0);
1608 char *_c_args =
"MFNode nodes",
1613 if (JS_ConvertArguments(context, argc, argv, _c_format, &_obj)) {
1614 if ((_cls = JS_GET_CLASS(context, _obj)) == NULL) {
1615 printf(
"JS_GetClass failed in VrmlBrowserReplaceWorld.\n");
1619 if (memcmp(
"MFNode", _cls->name, strlen(_cls->name)) != 0) {
1620 printf(
"\nIncorrect argument in VrmlBrowserReplaceWorld.\n");
1623 _str = JS_ValueToString(context, argv[0]);
1624 #if JS_VERSION < 185
1625 _costr = JS_GetStringBytes(_str);
1627 _costr = JS_EncodeString(context,_str);
1631 while (*tptr !=
'\0') {
1632 if(*tptr ==
'[') *tptr =
' ';
1633 if(*tptr ==
']') *tptr =
' ';
1634 if(*tptr ==
',') *tptr =
' ';
1638 #if JS_VERSION >= 185
1639 JS_free(context,_costr);
1642 printf(
"\nIncorrect argument format for replaceWorld(%s).\n", _c_args);
1645 #if JS_VERSION < 185
1648 JS_SET_RVAL(context,vp,_rval);
1653 struct X3D_Anchor* get_EAIEventsIn_AnchorNode();
1655 #if JS_VERSION < 185
1656 VrmlBrowserLoadURL(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1658 VrmlBrowserLoadURL(JSContext *context, uintN argc, jsval *vp) {
1659 jsval *argv = JS_ARGV(context,vp);
1664 char *_c_args =
"MFString url, MFString parameter",
1667 #define myBufSize 2000
1668 char myBuf[myBufSize];
1670 if (JS_ConvertArguments(context, argc, argv, _c_format, &(_obj[0]), &(_obj[1]))) {
1671 if ((_cls[0] = JS_GET_CLASS(context, _obj[0])) == NULL) {
1672 printf(
"JS_GetClass failed for arg 0 in VrmlBrowserLoadURL.\n");
1675 if ((_cls[1] = JS_GET_CLASS(context, _obj[1])) == NULL) {
1676 printf(
"JS_GetClass failed for arg 1 in VrmlBrowserLoadURL.\n");
1679 if (memcmp(
"MFString", (_cls[0])->name, strlen((_cls[0])->name)) != 0 &&
1680 memcmp(
"MFString", (_cls[1])->name, strlen((_cls[1])->name)) != 0) {
1681 printf(
"\nIncorrect arguments in VrmlBrowserLoadURL.\n");
1684 _str[0] = JS_ValueToString(context, argv[0]);
1685 #if JS_VERSION < 185
1686 _costr[0] = JS_GetStringBytes(_str[0]);
1688 _costr[0] = JS_EncodeString(context,_str[0]);
1691 _str[1] = JS_ValueToString(context, argv[1]);
1692 #if JS_VERSION < 185
1693 _costr[1] = JS_GetStringBytes(_str[1]);
1695 _costr[1] = JS_EncodeString(context,_str[1]);
1703 createLoadUrlString(myBuf,myBufSize,_costr[0], _costr[1]);
1704 createLoadURL(myBuf);
1707 setAnchorsAnchor( get_EAIEventsIn_AnchorNode());
1709 gglobal()->RenderFuncs.BrowserAction = TRUE;
1711 #if JS_VERSION >= 185
1712 JS_free(context,_costr[0]);
1713 JS_free(context,_costr[1]);
1716 printf(
"\nIncorrect argument format for loadURL(%s).\n", _c_args);
1719 #if JS_VERSION < 185
1720 *rval = INT_TO_JSVAL(0);
1722 JS_SET_RVAL(context,vp,JSVAL_ZERO);
1730 #if JS_VERSION < 185
1731 VrmlBrowserSetDescription(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1732 char *_c_format =
"s";
1734 VrmlBrowserSetDescription(JSContext *context, uintN argc, jsval *vp) {
1735 jsval *argv = JS_ARGV(context,vp);
1737 char *_c_format =
"S";
1739 char *_c, *_c_args =
"SFString description";
1744 #
if JS_VERSION < 185
1745 JS_ConvertArguments(context, argc, argv, _c_format, &_c)) {
1747 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
1753 #if JS_VERSION < 185
1754 *rval = INT_TO_JSVAL(0);
1756 JS_SET_RVAL(context,vp,JSVAL_ZERO);
1759 printf(
"\nIncorrect argument format for setDescription(%s).\n", _c_args);
1767 #if JS_VERSION < 185
1768 VrmlBrowserCreateVrmlFromString(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1769 char *_c_format =
"s";
1771 VrmlBrowserCreateVrmlFromString(JSContext *context, uintN argc, jsval *vp) {
1772 JSObject *obj = JS_THIS_OBJECT(context,vp);
1773 jsval *argv = JS_ARGV(context,vp);
1775 jsval *rval = &_my_rval;
1776 char *_c_format =
"S";
1779 char *_c, *_c_args =
"SFString vrmlSyntax";
1796 *rval = INT_TO_JSVAL(0);
1799 #
if JS_VERSION < 185
1800 JS_ConvertArguments(context, argc, argv, _c_format, &_c)) {
1802 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
1803 _c = JS_EncodeString(context,js_c);
1806 printf(
"VrmlBrowserCreateVrmlFromString: obj = %u, str = \"%s\"\n",
1811 gglobal()->ProdCon.savedParser = (
void *)globalParser; globalParser = NULL;
1812 retGroup = createNewX3DNode0(NODE_Group);
1813 ra = EAI_CreateVrml(
"String",_c,X3D_NODE(rootNode()),retGroup);
1814 globalParser = (
struct VRMLParser*)gglobal()->ProdCon.savedParser;
1819 xstr = MALLOC (
char *, MallocdSize);
1820 strcpy (xstr,
"new MFNode(");
1822 for (count=0; count<retGroup->children.n; count ++) {
1823 tmpstr = MALLOC(
char *, strlen(_c) + 100);
1824 sprintf (tmpstr,
"%s new SFNode('%s','%p')",separator, _c, (
void*) retGroup->children.p[count]);
1826 wantedsize = (int) (strlen(tmpstr) + strlen(xstr) + 1);
1828 if (wantedsize >= MallocdSize) {
1829 MallocdSize = wantedsize +200;
1830 xstr = REALLOC (xstr,MallocdSize);
1834 strncat (xstr,tmpstr,strlen(tmpstr));
1835 FREE_IF_NZ (tmpstr);
1841 #if JS_VERSION >= 185
1842 JS_free(context,_c);
1846 printf (
"running runscript on :%s:\n",xstr);
1850 jsrrunScript(context, obj, xstr, rval);
1854 printf(
"\nIncorrect argument format for createVrmlFromString(%s).\n", _c_args);
1859 #if JS_VERSION < 185
1860 tg->jsVRMLBrowser.JSCreate_global_return_val = *rval;
1862 JS_SET_RVAL(context,vp,*rval);
1868 #if JS_VERSION < 185
1869 VrmlBrowserCreateX3DFromString(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1870 char *_c_format =
"s";
1872 VrmlBrowserCreateX3DFromString(JSContext *context, uintN argc, jsval *vp) {
1873 JSObject *obj = JS_THIS_OBJECT(context,vp);
1874 jsval *argv = JS_ARGV(context,vp);
1876 jsval *rval = &_my_rval;
1877 char *_c_format =
"S";
1880 char *_c, *_c_args =
"SFString x3dSyntax";
1897 *rval = INT_TO_JSVAL(0);
1900 #
if JS_VERSION < 185
1901 JS_ConvertArguments(context, argc, argv, _c_format, &_c)) {
1903 JS_ConvertArguments(context, argc, argv, _c_format, &js_c)) {
1904 _c = JS_EncodeString(context,js_c);
1907 printf(
"VrmlBrowserCreateVrmlFromString: obj = %u, str = \"%s\"\n",
1913 retGroup = createNewX3DNode(NODE_Group);
1914 ra = EAI_CreateX3d(
"String",_c,X3D_NODE(retGroup),retGroup);
1920 xstr = MALLOC (
char *, MallocdSize);
1921 strcpy (xstr,
"new MFNode(");
1923 for (count=0; count<retGroup->children.n; count ++) {
1924 tmpstr = MALLOC(
char *, strlen(_c) + 100);
1925 sprintf (tmpstr,
"%s new SFNode('%s','%p')",separator, _c, (
void*) retGroup->children.p[count]);
1926 wantedsize = (int) (strlen(tmpstr) + strlen(xstr));
1927 if (wantedsize > MallocdSize) {
1928 MallocdSize = wantedsize +200;
1929 xstr = REALLOC (xstr,MallocdSize);
1933 strncat (xstr,tmpstr,strlen(tmpstr));
1934 FREE_IF_NZ (tmpstr);
1938 markForDispose(X3D_NODE(retGroup),FALSE);
1940 #if JS_VERSION >= 185
1941 JS_free(context,_c);
1945 printf (
"running runscript on :%s:\n",xstr);
1949 jsrrunScript(context, obj, xstr, rval);
1953 printf(
"\nIncorrect argument format for createVrmlFromString(%s).\n", _c_args);
1958 #if JS_VERSION < 185
1959 *(jsval*)(gglobal()->jsVRMLBrowser.JSCreate_global_return_val) = *rval;
1961 JS_SET_RVAL(context,vp,*rval);
1968 #if JS_VERSION < 185
1969 VrmlBrowserCreateVrmlFromURL(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1971 VrmlBrowserCreateVrmlFromURL(JSContext *context, uintN argc, jsval *vp) {
1972 jsval *argv = JS_ARGV(context,vp);
1974 jsval *rval = &_my_rval;
1982 #define myFileSizeLimit 4000
2002 printf (
"JS start of createVrmlFromURL\n");
2006 #if JS_VERSION < 185
2007 *rval = INT_TO_JSVAL(0);
2013 if (JSVAL_IS_OBJECT(argv[0])) {
2014 if ((_cls[0] = JS_GET_CLASS(context, JSVAL_TO_OBJECT(argv[0]))) == NULL) {
2015 printf(
"JS_GetClass failed for arg 0 in VrmlBrowserLoadURL.\n");
2019 printf (
"VrmlBrowserCreateVrmlFromURL - expect first parameter to be an object\n");
2024 if (JSVAL_IS_OBJECT(argv[1])) {
2025 if ((_cls[1] = JS_GET_CLASS(context, JSVAL_TO_OBJECT(argv[1]))) == NULL) {
2026 printf(
"JS_GetClass failed for arg 1 in VrmlBrowserLoadURL.\n");
2030 printf (
"VrmlBrowserCreateVrmlFromURL - expect first parameter to be an object\n");
2035 printf (
"JS createVrml - step 2\n");
2036 printf (
"JS create - we should havve a MFString and SFNode, have :%s: :%s:\n",(_cls[0])->name, (_cls[1])->name);
2040 if (memcmp(
"MFString", (_cls[0])->name, strlen((_cls[0])->name)) != 0 &&
2041 memcmp(
"SFNode", (_cls[1])->name, strlen((_cls[1])->name)) != 0) {
2042 printf(
"Incorrect arguments in VrmlBrowserLoadURL.\n");
2047 if (JSVAL_IS_STRING(argv[2])) {
2048 _str[1] = JSVAL_TO_STRING(argv[2]);
2049 #if JS_VERSION < 185
2050 fieldStr = JS_GetStringBytes(_str[1]);
2052 fieldStr = JS_EncodeString(context,_str[1]);
2055 printf (
"field string is :%s:\n",fieldStr);
2058 printf (
"Expected a string in createVrmlFromURL\n");
2063 printf (
"passed object type tests\n");
2067 _str[0] = JS_ValueToString(context, argv[0]);
2068 #if JS_VERSION < 185
2069 _costr0 = JS_GetStringBytes(_str[0]);
2071 _costr0 = JS_EncodeString(context,_str[0]);
2076 printf (
"URL string is %s\n",_costr0);
2081 if ((oldPtr = (
SFNodeNative *)JS_GetPrivate(context, JSVAL_TO_OBJECT(argv[1]))) == NULL) {
2082 printf(
"JS_GetPrivate failed in VrmlBrowserLoadURL for SFNode parameter.\n");
2083 #if JS_VERSION >= 185
2084 JS_free(context,_costr0);
2085 JS_free(context,fieldStr);
2089 myptr = X3D_NODE(oldPtr->handle);
2090 if (myptr == NULL) {
2091 printf (
"CreateVrmlFromURL, internal error - SFNodeNative memory pointer is NULL\n");
2092 #if JS_VERSION >= 185
2093 JS_free(context,_costr0);
2094 JS_free(context,fieldStr);
2101 printf (
"SFNode handle %d, old X3DString %s\n",oldPtr->handle, oldPtr->X3DString);
2102 printf (
"myptr %d\n",myptr);
2103 printf (
"points to a %s\n",stringNodeType(myptr->_nodeType));
2108 if (
sizeof (_costr0) > (myFileSizeLimit-200)) {
2109 printf (
"VrmlBrowserCreateVrmlFromURL, url too long...\n");
2110 #if JS_VERSION >= 185
2111 JS_free(context,_costr0);
2112 JS_free(context,fieldStr);
2127 Parser_scanStringValueToMem(X3D_NODE(&url),0,FIELDTYPE_MFString, _costr0, FALSE);
2130 res = resource_create_multi(&url);
2131 res->whereToPlaceData = myptr;
2135 fieldInt = findRoutedFieldInFIELDNAMES (myptr, fieldStr, TRUE);
2138 findFieldInOFFSETS(myptr->_nodeType, fieldInt, &offs, &type, &accessType);
2140 ConsoleMessage (
"Can not find field :%s: in nodeType :%s:",fieldStr,stringNodeType(myptr->_nodeType));
2141 #if JS_VERSION >= 185
2142 JS_free(context,_costr0);
2143 JS_free(context,fieldStr);
2149 res->offsetFromWhereToPlaceData = offs;
2150 parser_process_res_VRML_X3D(res);
2158 MARK_EVENT(myptr,offs);
2159 #if JS_VERSION >= 185
2160 JS_SET_RVAL(context,vp,*rval);
2161 JS_free(context,fieldStr);
2162 JS_free(context,_costr0);
2168 #if JS_VERSION < 185
2169 VrmlBrowserAddRoute(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2170 jsval _rval = INT_TO_JSVAL(0);
2172 VrmlBrowserAddRoute(JSContext *context, uintN argc, jsval *vp) {
2173 JSObject *obj = JS_THIS_OBJECT(context,vp);
2174 jsval *argv = JS_ARGV(context,vp);
2176 if (!doVRMLRoute(context, obj, argc, argv,
"addRoute")) {
2177 printf(
"doVRMLRoute failed in VrmlBrowserAddRoute.\n");
2180 #if JS_VERSION < 185
2183 JS_SET_RVAL(context,vp,JSVAL_ZERO);
2189 #if JS_VERSION < 185
2190 VrmlBrowserPrint(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2191 jsval _rval = INT_TO_JSVAL(0);
2193 VrmlBrowserPrint(JSContext *context, uintN argc, jsval *vp) {
2194 JSObject *obj = JS_THIS_OBJECT(context,vp);
2195 jsval *argv = JS_ARGV(context,vp);
2201 UNUSED (context); UNUSED(obj);
2203 for (count=0; count < argc; count++) {
2204 if (JSVAL_IS_STRING(argv[count])) {
2205 _str = JSVAL_TO_STRING(argv[count]);
2206 #if JS_VERSION < 185
2207 _id_c = JS_GetStringBytes(_str);
2209 _id_c = JS_EncodeString(context,_str);
2212 #if defined(_MSC_VER)
2213 ConsoleMessage(_id_c);
2214 gglobal()->ConsoleMessage.consMsgCount = 0;
2216 #ifdef HAVE_NOTOOLKIT
2217 printf (
"%s", _id_c);
2219 printf (
"%s\n", _id_c);
2220 ConsoleMessage(_id_c);
2221 gglobal()->ConsoleMessage.consMsgCount = 0;
2224 #if JS_VERSION >= 185
2225 JS_free(context,_id_c);
2234 #if defined(_MSC_VER)
2235 ConsoleMessage(
"\n");
2236 gglobal()->ConsoleMessage.consMsgCount = 0;
2237 #elif !defined(_MSC_VER)
2238 #ifdef HAVE_NOTOOLKIT
2242 #if JS_VERSION < 185
2245 JS_SET_RVAL(context,vp,JSVAL_ZERO);
2251 #if JS_VERSION < 185
2252 VrmlBrowserPrintln(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2253 VrmlBrowserPrint(context,obj,argc,argv,rval);
2255 VrmlBrowserPrintln(JSContext *context, uintN argc, jsval *vp) {
2257 VrmlBrowserPrint(context,argc,vp);
2260 #if defined(_MSC_VER)
2262 gglobal()->ConsoleMessage.consMsgCount = 0;
2264 #ifdef HAVE_NOTOOLKIT
2272 #if JS_VERSION < 185
2273 VrmlBrowserDeleteRoute(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2274 jsval _rval = INT_TO_JSVAL(0);
2276 VrmlBrowserDeleteRoute(JSContext *context, uintN argc, jsval *vp) {
2277 JSObject *obj = JS_THIS_OBJECT(context,vp);
2278 jsval *argv = JS_ARGV(context,vp);
2280 if (!doVRMLRoute(context, obj, argc, argv,
"deleteRoute")) {
2281 printf(
"doVRMLRoute failed in VrmlBrowserDeleteRoute.\n");
2284 #if JS_VERSION < 185
2287 JS_SET_RVAL(context,vp,JSVAL_ZERO);
2298 static JSBool doVRMLRoute(JSContext *context, JSObject *obj, uintN argc, jsval *argv,
const char *callingFunc) {
2299 JSObject *fromNodeObj, *toNodeObj;
2303 *fromFieldString, *toFieldString,
2305 "SFNode fromNode, SFString fromEventOut, SFNode toNode, SFString toEventIn",
2306 #if JS_VERSION < 185
2307 *_c_format =
"o s o s";
2309 *_c_format =
"oSoS";
2310 JSString *fromFieldStringJS, *toFieldStringJS;
2314 int fromOfs, toOfs, len;
2315 int fromtype, totype;
2321 printf (
"Problem with script - add/delete route command needs 4 parameters\n");
2326 if (JS_ConvertArguments(context, argc, argv, _c_format,
2327 #
if JS_VERSION < 185
2328 &fromNodeObj, &fromFieldString, &toNodeObj, &toFieldString)) {
2330 &fromNodeObj, &fromFieldStringJS, &toNodeObj, &toFieldStringJS)) {
2331 fromFieldString = JS_EncodeString(context,fromFieldStringJS);
2332 toFieldString = JS_EncodeString(context,toFieldStringJS);
2334 if ((_cls[0] = JS_GET_CLASS(context, fromNodeObj)) == NULL) {
2335 printf(
"JS_GetClass failed for arg 0 in doVRMLRoute called from %s.\n",
2339 if ((_cls[1] = JS_GET_CLASS(context, toNodeObj)) == NULL) {
2340 printf(
"JS_GetClass failed for arg 2 in doVRMLRoute called from %s.\n",
2346 if (memcmp(
"SFNode", (_cls[0])->name, strlen((_cls[0])->name)) != 0 &&
2347 memcmp(
"SFNode", (_cls[1])->name, strlen((_cls[1])->name)) != 0) {
2348 printf(
"\nArguments 0 and 2 must be SFNode in doVRMLRoute called from %s(%s): %s\n",
2349 callingFunc, _c_args, callingFunc);
2354 if ((fromNative = (
SFNodeNative *)JS_GetPrivate(context, fromNodeObj)) == NULL) {
2355 printf (
"problem getting native props\n");
2358 if ((toNative = (
SFNodeNative *)JS_GetPrivate(context, toNodeObj)) == NULL) {
2359 printf (
"problem getting native props\n");
2363 fromNode = X3D_NODE(fromNative->handle);
2364 toNode = X3D_NODE(toNative->handle);
2367 printf (
"routing from a node of type %s to a node of type %s\n",
2368 stringNodeType(fromNode->_nodeType),
2369 stringNodeType(toNode->_nodeType));
2374 myField = findRoutedFieldInFIELDNAMES(fromNode,fromFieldString,0);
2376 myField = findRoutedFieldInFIELDNAMES(fromNode,fromFieldString,1);
2379 findFieldInOFFSETS(fromNode->_nodeType, myField, &fromOfs, &fromtype, &xxx);
2383 myField = findRoutedFieldInFIELDNAMES(toNode,toFieldString,0);
2385 myField = findRoutedFieldInFIELDNAMES(toNode,toFieldString,1);
2388 findFieldInOFFSETS(toNode->_nodeType, myField, &toOfs, &totype, &xxx);
2391 if (fromtype != totype) {
2392 printf (
"Javascript routing problem - can not route from %s to %s\n",
2393 stringNodeType(fromNode->_nodeType),
2394 stringNodeType(toNode->_nodeType));
2398 len = returnRoutingElementLength(totype);
2400 jsRegisterRoute(fromNode, fromOfs, toNode, toOfs, len,callingFunc);
2402 #if JS_VERSION >= 185
2403 JS_free(context,fromFieldString);
2404 JS_free(context,toFieldString);
2407 printf(
"\nIncorrect argument format for %s(%s).\n",
2408 callingFunc, _c_args);