33#if defined(JAVASCRIPT_DUK)
37#include <libFreeWRL.h>
40#include "../vrml_parser/Structs.h"
41#include "../vrml_parser/CRoutes.h"
42#include "../opengl/OpenGL_Utils.h"
43#include "../main/headers.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"
65#define malloc(A) MALLOCV(A)
66#define free(A) FREE_IF_NZ(A)
67#define realloc(A,B) REALLOC(A,B)
227struct string_int lookup_X3DConstants[] = {
228 {
"INITIALIZED_EVENT",1},
229 {
"SHUTDOWN_EVENT",1},
230 {
"CONNECTION_ERROR",1},
231 {
"INITIALIZED_ERROR",1},
232 {
"NOT_STARTED_STATE",1},
233 {
"IN_PROGRESS_STATE",1},
234 {
"COMPLETE_STATE",1},
236 {
"SFBool",FIELDTYPE_SFBool},
237 {
"MFBool",FIELDTYPE_MFBool},
238 {
"MFInt32",FIELDTYPE_MFInt32},
239 {
"SFInt32",FIELDTYPE_SFInt32},
240 {
"SFFloat",FIELDTYPE_SFFloat},
241 {
"MFFloat",FIELDTYPE_MFFloat},
242 {
"SFDouble",FIELDTYPE_SFDouble},
243 {
"MFDouble",FIELDTYPE_MFDouble},
244 {
"SFTime",FIELDTYPE_SFTime},
245 {
"MFTime",FIELDTYPE_MFTime},
246 {
"SFNode",FIELDTYPE_SFNode},
247 {
"MFNode",FIELDTYPE_MFNode},
248 {
"SFVec2f",FIELDTYPE_SFVec2f},
249 {
"MFVec2f",FIELDTYPE_MFVec2f},
250 {
"SFVec3f",FIELDTYPE_SFVec3f},
251 {
"MFVec3f",FIELDTYPE_MFVec3f},
252 {
"SFVec3d",FIELDTYPE_SFVec3d},
253 {
"MFVec3d",FIELDTYPE_MFVec3d},
254 {
"SFRotation",FIELDTYPE_SFRotation},
255 {
"MFRotation",FIELDTYPE_MFRotation},
256 {
"SFColor",FIELDTYPE_SFColor},
257 {
"MFColor",FIELDTYPE_MFColor},
258 {
"SFImage",FIELDTYPE_SFImage},
260 {
"SFColorRGBA",FIELDTYPE_SFColorRGBA},
261 {
"MFColorRGBA",FIELDTYPE_MFColorRGBA},
262 {
"SFString",FIELDTYPE_SFString},
263 {
"MFString",FIELDTYPE_MFString},
307 {
"inputOnly",PKW_inputOnly},
308 {
"outputOnly",PKW_outputOnly},
309 {
"inputOutput",PKW_inputOutput},
310 {
"initializeOnly",PKW_initializeOnly},
314struct string_int *lookup_string_int(
struct string_int *table,
const char *searchkey,
int *index){
318 if(!table)
return NULL;
321 if(!strcmp(table[i].c,searchkey)){
331int X3DConstantsGetter(
FWType fwt,
int index,
void *ec,
void *fwn,
FWval fwretval){
333 fwretval->_integer = lookup_X3DConstants[index].i;
334 fwretval->itype =
'I';
339 int len = (
sizeof(lookup_X3DConstants) /
sizeof(
struct string_int)) -1;
342int X3DConstantsIterator(
int index,
FWType fwt,
FWPointer *pointer,
const char **name,
int *lastProp,
int *jndex,
char *type,
char *readOnly){
345 if(index < len_constants()){
346 (*name) = lookup_X3DConstants[index].c;
355struct FWTYPE X3DConstantsType = {
356 AUXTYPE_X3DConstants,
363 X3DConstantsIterator,
373int VRBrowserGetName(
FWType fwtype,
void *ec,
void * fwn,
int argc,
FWval fwpars,
FWval fwretval)
375 fwretval->_string = BrowserName;
376 fwretval->itype =
'S';
379int VRBrowserGetVersion(
FWType fwtype,
void *ec,
void * fwn,
int argc,
FWval fwpars,
FWval fwretval)
381 fwretval->_string = libFreeWRL_get_version();
382 fwretval->itype =
'S';
385int VRBrowserGetCurrentSpeed(
FWType fwtype,
void *ec,
void * fwn,
int argc,
FWval fwpars,
FWval fwretval)
388 sprintf (
string,
"%f",gglobal()->Mainloop.BrowserSpeed);
389 fwretval->_string = strdup(
string);
390 fwretval->itype =
'S';
394int VRBrowserGetCurrentFrameRate(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval)
397 sprintf (
string,
"%6.2f",gglobal()->Mainloop.BrowserFPS);
398 fwretval->_string = strdup(
string);
399 fwretval->itype =
'S';
402int VRBrowserGetWorldURL(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval)
404 fwretval->_string = BrowserFullPath;
405 fwretval->itype =
'S';
408const char *flexiString(
FWval fwpars,
char *buffer)
421 if(fwpars[0].itype ==
'W'){
422 switch(fwpars[0]._web3dval.fieldType){
423 case FIELDTYPE_SFString:
427 _costr = sfs->strptr;
430 case FIELDTYPE_MFString:
434 int i, l1, l2, l3, lt;
441 for(i=0;i<mfs->n;i++){
442 l3 = strlen(mfs->p[i]->strptr);
443 if(lt + l1 + l2 + l3 > lenbuf)
break;
444 strcat(buffer,
"[\"");
445 strcat(buffer,mfs->p[i]->strptr);
446 strcat(buffer,
"\"] ");
451 _costr = mfs->p[0]->strptr;
460int VRBrowserReplaceWorld(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval)
465 _costr = strdup(flexiString(&fwpars[0],NULL));
472void conCat_duk (
char *out,
char *in) {
474 while (strlen (in) > 0) {
475 strcat (out,
" :loadURLStringBreak:");
476 while (*out !=
'\0') out++;
478 if (*in ==
'[') in++;
479 while ((*in !=
'\0') && (*in ==
' ')) in++;
483 while (*in !=
'"') { *out = *in; out++; in++; }
489 if (*in ==
'"') in++;
490 if (*in ==
',') in++;
491 if (*in ==
']') in++;
495void createLoadUrlString_duk(
char *out,
int outLen,
char *url,
char *param) {
515 commacount1 = 0; commacount2 = 0;
516 tptr = url;
while (*tptr !=
'\0') {
if (*tptr ==
'"') commacount1 ++; tptr++; }
517 tptr = param;
while (*tptr !=
'\0') {
if (*tptr ==
'"') commacount2 ++; tptr++; }
518 commacount1 = commacount1 / 2;
519 commacount2 = commacount2 / 2;
523 (commacount1 * strlen (
" :loadURLStringBreak:")) +
524 (commacount2 * strlen (
" :loadURLStringBreak:"))) > (outLen - 20)) {
525 printf (
"createLoadUrlString, string too long\n");
529 sprintf (out,
"%d %d",commacount1,commacount2);
532 while (*out !=
'\0') out++;
535 conCat_duk (out,url);
536 while (*out !=
'\0') out++;
537 conCat_duk (out,param);
539struct X3D_Anchor* get_EAIEventsIn_AnchorNode();
540int VRBrowserLoadURL(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval)
542 char *url, *parameter;
543 char bufferUrl[1000];
544 char bufferParam[1000];
547 url = strdup(flexiString(&fwpars[0],bufferUrl));
548 parameter = strdup(flexiString(&fwpars[1],bufferParam));
552 createLoadUrlString_duk(myBuf,1000,url, parameter);
553 createLoadURL(myBuf);
556 setAnchorsAnchor( get_EAIEventsIn_AnchorNode());
558 gglobal()->RenderFuncs.BrowserAction = TRUE;
561int VRBrowserSetDescription(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval)
564 if(fwpars[0].itype ==
'S')
565 gglobal()->Mainloop.BrowserDescription = fwpars[0]._string;
568int VRBrowserCreateX3DFromString(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval)
582 const char *_c = fwpars[0]._string;
585 retGroup = createNewX3DNode0(NODE_Group);
586 gglobal()->ProdCon.savedParser = (
void *)globalParser; globalParser = NULL;
587 ra = EAI_CreateX3d(
"String",_c,ec,retGroup);
588 globalParser = (
struct VRMLParser*)gglobal()->ProdCon.savedParser;
589 if(retGroup->children.n > 0) {
591 memcpy(mfn,&retGroup->children,
sizeof(
struct Multi_Node));
592 FREE_IF_NZ(retGroup);
593 for(i=0;i<mfn->n;i++){
594 mfn->p[i]->_parentVector->n = 0;
596 fwretval->_web3dval.native = mfn;
597 fwretval->_web3dval.fieldType = FIELDTYPE_MFNode;
598 fwretval->_web3dval.gc = 1;
599 fwretval->itype =
'W';
602 FREE_IF_NZ(retGroup);
608int VRBrowserCreateVrmlFromString(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval)
621 const char *_c = fwpars[0]._string;
624 retGroup = createNewX3DNode0(NODE_Group);
625 gglobal()->ProdCon.savedParser = (
void *)globalParser; globalParser = NULL;
626 ra = EAI_CreateVrml(
"String",_c,ec,retGroup);
627 globalParser = (
struct VRMLParser*)gglobal()->ProdCon.savedParser;
628 if(retGroup->children.n > 0) {
630 memcpy(mfn,&retGroup->children,
sizeof(
struct Multi_Node));
631 for(i=0;i<mfn->n;i++){
632 mfn->p[i]->_parentVector->n = 0;
634 fwretval->_web3dval.native = mfn;
635 fwretval->_web3dval.fieldType = FIELDTYPE_MFNode;
636 fwretval->_web3dval.gc = 1;
637 fwretval->itype =
'W';
640 deleteVector(
struct X3D_Node*,retGroup->_parentVector);
641 FREE_IF_NZ(retGroup);
646void *createNewX3DNode(
int nt);
647void add_node_to_broto_context(
struct X3D_Proto *currentContext,
struct X3D_Node *node);
648int VRBrowserCreateNodeFromString(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval)
650 int i, iret, isVRML,isX3D;
652 const char *_c = fwpars[0]._string;
658 for(i=0;i<strlen(_c);i++){
659 if(_c[i] ==
'<') isX3D = TRUE;
660 if(_c[i] ==
'{') isVRML = TRUE;
662 if(!isX3D && !isVRML){
666 ctype = findFieldInNODES(_c);
668 node = (
struct X3D_Node*)createNewX3DNode(ctype);
669 add_node_to_broto_context(ec,node);
676 iret = VRBrowserCreateVrmlFromString(fwtype,ec,fwn,argc,fwpars,fwretval);
678 iret = VRBrowserCreateX3DFromString(fwtype,ec,fwn,argc,fwpars,fwretval);
680 node = fwretval->_web3dval.anyvrml->mfnode.p[0];
681 node->_executionContext = ec;
685 fwretval->_web3dval.anyvrml = malloc(
sizeof(
union anyVrml));
686 fwretval->_web3dval.anyvrml->sfnode = node;
687 fwretval->_web3dval.fieldType = FIELDTYPE_SFNode;
688 fwretval->_web3dval.gc = 0;
689 fwretval->itype =
'W';
695int VRBrowserCreateVrmlFromURL(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval)
699 int i, iret, type,kind,ifield,ifound;
709 if(fwpars[0].itype ==
'W')
710 url = &fwpars[0]._web3dval.anyvrml->mfstring;
712 if(fwpars[1].itype ==
'W')
713 if(fwpars[1]._web3dval.fieldType == FIELDTYPE_SFNode)
714 target_node = fwpars[1]._web3dval.anyvrml->sfnode;
715 if(fwpars[2].itype ==
'S')
716 cfield = fwpars[2]._string;
718 if(!url || !target_node || !cfield){
719 ConsoleMessage(
"createX3DFromURL parameters: (MFString url, SFNode target_node, string target_field\n");
724 ifound = getFieldFromNodeAndName(target_node,cfield,&type,&kind,&ifield,&value);
726 ConsoleMessage(
"createX3DFromURL no field named %s on nodetype %s\n",cfield,stringNodeType(target_node->_nodeType));
733 res = resource_create_multi(url);
735 res->whereToPlaceData = target_node;
736 res->offsetFromWhereToPlaceData = (int) ((
size_t)value - (size_t) target_node);
739 send_resource_to_parser_async(res);
745void jsRegisterRoute_HIDE(
748 int len,
const char *adrem) {
751 if (strcmp(
"addRoute",adrem) == 0)
755 CRoutes_Register(ad, from, fromOfs, to, toOfs , len,
756 returnInterpolatorPointer(to->_nodeType), 0, 0);
759int getFieldFromNodeAndNameC(
struct X3D_Node* node,
const char *fieldname,
int *type,
int *kind,
int *iifield,
int *builtIn,
union anyVrml **value,
const char **cname);
760void *addDeleteRoute0(
void *fwn,
const char* callingFunc,
struct X3D_Node* fromNode,
const char *sfromField,
struct X3D_Node* toNode,
const char *stoField){
762 int fromType,toType,fromKind,toKind,fromField,toField,fromBuiltIn,toBuiltIn;
763 const char *fromCname,*toCname;
764 int i, len, fromOfs, toOfs;
765 union anyVrml *fromValue, *toValue;
767 getFieldFromNodeAndNameC(fromNode,sfromField,&fromType,&fromKind,&fromField,&fromBuiltIn,&fromValue,&fromCname);
768 getFieldFromNodeAndNameC(toNode,stoField,&toType,&toKind,&toField,&toBuiltIn,&toValue,&toCname);
771 if (fromType != toType) {
772 printf (
"Javascript routing problem - can not route from %s to %s\n",
773 stringNodeType(fromNode->_nodeType),
774 stringNodeType(toNode->_nodeType));
778 len = returnRoutingElementLength(toType);
782 if(!ec) ec = (
struct X3D_Proto*)fromNode->_executionContext;
783 if(!strcmp(callingFunc,
"addRoute")){
784 broute = createNewBrotoRoute();
785 broute->from.node = fromNode;
786 broute->from.ifield = fromField;
787 broute->from.builtIn = fromBuiltIn;
789 broute->from.ftype = fromType;
790 broute->to.node = toNode;
791 broute->to.ifield = toField;
792 broute->to.builtIn = toBuiltIn;
794 broute->to.ftype = toType;
795 broute->lastCommand = 1;
796 CRoutes_RegisterSimpleB(broute->from.node,broute->from.ifield,broute->from.builtIn,broute->to.node,broute->to.ifield,broute->to.builtIn,broute->ft);
797 broute->ft = fromType == toType ? fromType : -1;
800 stack_push(
struct brotoRoute *, ec->__ROUTES, broute);
801 retval = (
void*)broute;
805 for(i=0;i<vectorSize(ec->__ROUTES);i++){
806 broute = vector_get(
struct brotoRoute*,ec->__ROUTES,i);
807 if(broute->from.node == fromNode && broute->from.ifield == fromField
808 && broute->to.node == toNode && broute->to.ifield == toField){
809 if(broute->lastCommand == 1)
810 CRoutes_RemoveSimpleB(broute->from.node,broute->from.ifield,broute->from.builtIn,broute->to.node,broute->to.ifield,broute->to.builtIn,broute->ft);
811 broute->lastCommand = 0;
812 vector_remove_elem(
struct brotoRoute*,ec->__ROUTES,i);
824void * addDeleteRoute(
void *fwn,
char* callingFunc,
int argc,
FWval fwpars,
FWval fwretval){
827 const char *fromField, *toField;
834 fromNode = fwpars[0]._web3dval.anyvrml->sfnode;
835 toNode = fwpars[2]._web3dval.anyvrml->sfnode;
837 fromField = fwpars[1]._string;
838 toField = fwpars[3]._string;
840 retval = addDeleteRoute0(fwn,callingFunc,fromNode, fromField, toNode, toField);
843int X3DExecutionContext_deleteRoute(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval){
848 const char *fromField, *toField;
849 int fromIfield, toIfield, fromBuiltIn, toBuiltIn;
853 if(fwpars[0].itype !=
'P')
return nr;
857 fromNode = broute->from.node;
858 fromIfield = broute->from.ifield;
859 fromBuiltIn = broute->from.builtIn;
860 toNode = broute->to.node;
861 toIfield = broute->to.ifield;
862 toBuiltIn = broute->to.builtIn;
864 getFieldFromNodeAndIndexSource(fromNode,fromIfield,fromBuiltIn,&fromField,&
ftype,&kind,&value);
865 getFieldFromNodeAndIndexSource(toNode,toIfield,toBuiltIn,&toField,&
ftype,&kind,&value);
866 xroute = addDeleteRoute0(fwn,
"deleteRoute",fromNode, fromField, toNode, toField);
870int VRBrowserAddRoute(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval){
873 xroute = addDeleteRoute(fwn,
"addRoute",argc,fwpars,fwretval);
875 fwretval->_web3dval.fieldType = AUXTYPE_X3DRoute;
876 fwretval->_web3dval.native = xroute;
877 fwretval->_web3dval.gc = 0;
878 fwretval->itype =
'P';
883int VRBrowserDeleteRoute(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval){
886 xroute = addDeleteRoute(fwn,
"deleteRoute",argc,fwpars,fwretval);
889int VRBrowserPrint(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval)
891 const char *_costr = NULL;
892 if(fwpars[0].itype ==
'S'){
893 _costr = fwpars[0]._string;
895 ConsoleMessage(
"%s",_costr);
899int VRBrowserPrintln(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval)
901 const char *_costr = NULL;
902 if(fwpars[0].itype ==
'S'){
903 _costr = fwpars[0]._string;
905 ConsoleMessage(
"%s\n",_costr);
911 {
"getName", VRBrowserGetName,
'S',{0,0,0,NULL}},
912 {
"getVersion", VRBrowserGetVersion,
'S',{0,0,0,NULL}},
913 {
"getCurrentSpeed", VRBrowserGetCurrentSpeed,
'S',{0,0,0,NULL}},
914 {
"getCurrentFrameRate", VRBrowserGetCurrentFrameRate,
'S',{0,0,0,NULL}},
915 {
"getWorldURL", VRBrowserGetWorldURL,
'S',{0,0,0,NULL}},
916 {
"replaceWorld", VRBrowserReplaceWorld,
'0',{1,-1,0,
"Z"}},
917 {
"loadURL", VRBrowserLoadURL,
'0',{2,1,
'T',
"FF"}},
918 {
"setDescription", VRBrowserSetDescription,
'0',{1,-1,0,
"S"}},
919 {
"createVrmlFromString", VRBrowserCreateVrmlFromString,
'W',{1,-1,0,
"S"}},
920 {
"createVrmlFromURL", VRBrowserCreateVrmlFromURL,
'0',{3,3,0,
"WWS"}},
921 {
"createX3DFromString", VRBrowserCreateX3DFromString,
'W',{1,-1,0,
"S"}},
922 {
"createX3DFromURL", VRBrowserCreateVrmlFromURL,
'0',{3,3,0,
"WWS"}},
923 {
"addRoute", VRBrowserAddRoute,
'P',{4,-1,0,
"WSWS"}},
924 {
"deleteRoute", VRBrowserDeleteRoute,
'0',{4,-1,0,
"WSWS"}},
925 {
"print", VRBrowserPrint,
'0',{1,-1,0,
"S"}},
926 {
"println", VRBrowserPrintln,
'0',{1,-1,0,
"S"}},
946 {
"name", 0,
'S',
'T'},
947 {
"version", 1,
'S',
'T'},
948 {
"currentSpeed", 2,
'D',
'T'},
949 {
"currentFrameRate", 3,
'D',
'T'},
950 {
"description", 4,
'S', 0},
951 {
"supportedComponents", 5,
'P',
'T'},
952 {
"supportedProfiles", 6,
'P',
'T'},
953 {
"currentScene", 7,
'P',
'T'},
958 const int *profileTable;
962const int * getCapabilitiesTable();
963int BrowserGetter(
FWType fwt,
int index,
void *ec,
void *fwn,
FWval fwretval){
968 fwretval->_string = BrowserName;
969 fwretval->itype =
'S';
972 fwretval->_string = libFreeWRL_get_version();
973 fwretval->itype =
'S';
976 fwretval->_numeric = gglobal()->Mainloop.BrowserSpeed;
977 fwretval->itype =
'D';
980 fwretval->_numeric = gglobal()->Mainloop.BrowserFPS;
981 fwretval->itype =
'D';
984 fwretval->_string = gglobal()->Mainloop.BrowserDescription;
985 fwretval->itype =
'S';
988 fwretval->_pointer.fieldType = AUXTYPE_ComponentInfoArray;
989 fwretval->_pointer.native = (
void*)getCapabilitiesTable();
990 fwretval->_pointer.gc = 0;
991 fwretval->itype =
'P';
994 fwretval->_pointer.fieldType = AUXTYPE_ProfileInfoArray;
995 fwretval->_pointer.native = (
void*)getProfTable();
996 fwretval->_pointer.gc = 0;
997 fwretval->itype =
'P';
1000 fwretval->_web3dval.fieldType = AUXTYPE_X3DExecutionContext;
1001 fwretval->_web3dval.native = (
void *)(
struct X3D_Node*)ec;
1002 fwretval->_web3dval.gc = 0;
1004 fwretval->itype =
'P';
1011int BrowserSetter(
FWType fwt,
int index,
void *ec,
void *fwn,
FWval fwval){
1014 gglobal()->Mainloop.BrowserDescription = fwval->_string;
1023struct FWTYPE BrowserType = {
1054int capabilitiesHandler_getTableLength(
int* table);
1055int capabilitiesHandler_getComponentLevel(
int *table,
int comp);
1056int capabilitiesHandler_getProfileLevel(
int prof);
1057const int *capabilitiesHandler_getProfileComponent(
int prof);
1058const int *capabilitiesHandler_getCapabilitiesTable();
1072int *intdup(
int value){
1073 int* p = malloc(
sizeof(
int));
1074 memcpy(p,&value,
sizeof(
int));
1077int ComponentInfoArrayGetter(
FWType fwt,
int index,
void *ec,
void *fwn,
FWval fwretval){
1080 _table = (
int *)fwn;
1085 int _length = capabilitiesHandler_getTableLength(_table);
1087 fwretval->itype =
'I';
1088 fwretval->_integer = _length;
1090 }
else if(index > -1 && index < COMPONENTS_COUNT ){
1091 fwretval->_pointer.native = &_table[2*index];
1092 fwretval->_pointer.fieldType = AUXTYPE_ComponentInfo;
1093 fwretval->_pointer.gc = 0;
1094 fwretval->itype =
'P';
1101 {
"length", -1,
'I',
'T'},
1105struct FWTYPE ComponentInfoArrayType = {
1106 AUXTYPE_ComponentInfoArray,
1108 "ComponentInfoArray",
1112 ComponentInfoArrayProperties,
1114 ComponentInfoArrayGetter,
1121 {
"name", 0,
'S',
'T'},
1122 {
"Title", 1,
'S',
'T'},
1123 {
"level", 2,
'I',
'T'},
1124 {
"providerUrl", 3,
'S',
'T'},
1129int ComponentInfoGetter(
FWType fwt,
int index,
void *ec,
void *fwn,
FWval fwretval){
1130 int nr, *tableEntry, nameIndex;
1131 tableEntry = (
int *)fwn;
1137 nameIndex = tableEntry[0];
1138 fwretval->_string = COMPONENTS[nameIndex];
1139 fwretval->itype =
'S';
1142 fwretval->_integer = tableEntry[1];
1143 fwretval->itype =
'I';
1146 fwretval->_string =
"freewrl.sourceforge.net";
1147 fwretval->itype =
'S';
1156struct FWTYPE ComponentInfoType = {
1157 AUXTYPE_ComponentInfo,
1163 ComponentInfoProperties,
1165 ComponentInfoGetter,
1179int ProfileInfoArrayGetter(
FWType fwt,
int index,
void *ec,
void *fwn,
FWval fwretval){
1187 fwretval->_integer = PROFILES_COUNT;
1188 fwretval->itype =
'I';
1189 }
else if(index > -1 && index < PROFILES_COUNT ){
1190 fwretval->_pointer.native = &_table[index];
1191 fwretval->_pointer.fieldType = AUXTYPE_ProfileInfo;
1192 fwretval->_pointer.gc = 0;
1193 fwretval->itype =
'P';
1200 {
"length", -1,
'I',
'T'},
1204struct FWTYPE ProfileInfoArrayType = {
1205 AUXTYPE_ProfileInfoArray,
1211 ProfileInfoArrayProperties,
1213 ProfileInfoArrayGetter,
1229 {
"name", 0,
'S',
'T'},
1230 {
"Title", 1,
'I',
'T'},
1231 {
"level", 2,
'S',
'T'},
1232 {
"providerUrl", 3,
'S',
'T'},
1233 {
"components", 4,
'P',
'T'},
1238int ProfileInfoGetter(
FWType fwt,
int index,
void *ec,
void *fwn,
FWval fwretval){
1247 nameIndex = tableEntry->profileName;
1248 fwretval->_string = stringProfileType(nameIndex);
1249 fwretval->itype =
'S';
1252 fwretval->_integer = tableEntry->level;
1253 fwretval->itype =
'I';
1256 fwretval->_string =
"freewrl.sourceforge.net";
1257 fwretval->itype =
'S';
1260 fwretval->_pointer.native = (
void *)tableEntry->profileTable;
1261 fwretval->_pointer.fieldType = AUXTYPE_ComponentInfoArray;
1262 fwretval->_pointer.gc = 0;
1263 fwretval->itype =
'P';
1272struct FWTYPE ProfileInfoType = {
1273 AUXTYPE_ProfileInfo,
1279 ProfileInfoProperties,
1290struct X3D_Node *broto_search_DEFname(
struct X3D_Proto *context,
const char *name);
1291struct X3D_Node * broto_search_ALLnames(
struct X3D_Proto *context,
const char *name,
int *source);
1292int X3DExecutionContext_getNamedNode(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval){
1297 node = broto_search_DEFname(ec, fwpars[0]._string);
1301 fwretval->_web3dval.anyvrml = malloc(
sizeof(
union anyVrml));
1302 fwretval->_web3dval.anyvrml->sfnode = node;
1303 fwretval->_web3dval.fieldType = FIELDTYPE_SFNode;
1304 fwretval->_web3dval.gc = 1;
1305 fwretval->itype =
'W';
1311int X3DExecutionContext_updateNamedNode(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval){
1318 const char *defname;
1319 defname = fwpars[0]._string;
1320 node = X3D_NODE(fwpars[1]._web3dval.native);
1321 if(_ec->__DEFnames){
1322 for(i=0;i<vectorSize(_ec->__DEFnames);i++){
1323 bd = vector_get(
struct brotoDefpair *,_ec->__DEFnames,i);
1326 if(!strcmp(bd->name,defname)){
1331 if(bd->node == node){
1332 bd->name = strdup(defname);
1340 if(!_ec->__DEFnames)
1344 bd->name = strdup(defname);
1350int X3DExecutionContext_removeNamedNode(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval){
1356 const char *defname;
1357 defname = fwpars[0]._string;
1358 if(_ec->__DEFnames){
1360 for(i=0;i<vectorSize(_ec->__DEFnames);i++){
1361 bd = vector_get(
struct brotoDefpair *,_ec->__DEFnames,i);
1362 if(!strcmp(bd->name,defname)){
1367 vector_remove_elem(
struct brotoDefpair *,_ec->__DEFnames,i);
1369 remove_broto_node(_ec,node);
1378int X3DExecutionContext_createProto(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval){
1386 if( isAvailableBroto(fwpars[0]._string, ec, &proto))
1389 node=X3D_NODE(brotoInstance(proto,1));
1390 node->_executionContext = X3D_NODE(ec);
1391 add_node_to_broto_context(ec,node);
1395 source = X3D_PROTO(X3D_PROTO(node)->__prototype);
1396 dest = X3D_PROTO(node);
1397 deep_copy_broto_body2(&source,&dest);
1401 fwretval->_web3dval.anyvrml = malloc(
sizeof(
union anyVrml));
1402 fwretval->_web3dval.anyvrml->sfnode = node;
1403 fwretval->_web3dval.fieldType = FIELDTYPE_SFNode;
1404 fwretval->_web3dval.gc = 1;
1405 fwretval->itype =
'W';
1411int X3DExecutionContext_getImportedNode(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval){
1422 node = broto_search_ALLnames(ec, fwpars[0]._string,&source);
1423 if(source == 0) node = NULL;
1426 fwretval->_web3dval.anyvrml = malloc(
sizeof(
union anyVrml));
1427 fwretval->_web3dval.anyvrml->sfnode = node;
1428 fwretval->_web3dval.fieldType = FIELDTYPE_SFNode;
1429 fwretval->_web3dval.gc = 1;
1430 fwretval->itype =
'W';
1436void update_weakRoutes(
struct X3D_Proto *context);
1437int X3DExecutionContext_updateImportedNode(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval){
1445 const char *as, *mxname, *nline;
1449 nline = fwpars[0]._string;
1450 mxname = fwpars[1]._string;
1453 as = fwpars[2]._string;
1454 node = X3D_NODE(fwpars[1]._web3dval.native);
1456 for(i=0;i<vectorSize(_ec->__IMPORTS);i++){
1457 mxp = vector_get(
struct IMEXPORT *,_ec->__IMPORTS,i);
1460 if(!strcmp(nline,mxp->inlinename) && !strcmp(mxp->mxname,mxname)){
1461 mxp->as = strdup(as);
1470 _ec->__IMPORTS = newVector(
struct IMEXPORT *,4);
1472 mxp->mxname = strdup(mxname);
1473 mxp->as = strdup(as);
1474 mxp->inlinename = strdup(nline);
1475 stack_push(
struct IMEXPORT *,_ec->__IMPORTS,mxp);
1477 update_weakRoutes(_ec);
1482int X3DExecutionContext_removeImportedNode(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval){
1488 const char *defname;
1489 defname = fwpars[0]._string;
1492 for(i=0;i<vectorSize(_ec->__IMPORTS);i++){
1493 mxp = vector_get(
struct IMEXPORT *,_ec->__IMPORTS,i);
1494 if(!strcmp(mxp->as,defname)){
1496 vector_remove_elem(
struct IMEXPORT *,_ec->__IMPORTS,i);
1497 update_weakRoutes(_ec);
1506int X3DScene_getExportedNode(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval){
1512 mxp = broto_search_EXPORTname(ec, fwpars[0]._string);
1514 node = mxp->nodeptr;
1518 fwretval->_web3dval.anyvrml = malloc(
sizeof(
union anyVrml));
1519 fwretval->_web3dval.anyvrml->sfnode = node;
1520 fwretval->_web3dval.fieldType = FIELDTYPE_SFNode;
1521 fwretval->_web3dval.gc = 1;
1522 fwretval->itype =
'W';
1528int X3DScene_updateExportedNode(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval){
1534 const char *defname;
1538 defname = fwpars[0]._string;
1539 node = X3D_NODE(fwpars[1]._web3dval.anyvrml->sfnode);
1541 for(i=0;i<vectorSize(_ec->__EXPORTS);i++){
1542 mxp = vector_get(
struct IMEXPORT *,_ec->__EXPORTS,i);
1545 if(!strcmp(mxp->as,defname)){
1546 mxp->nodeptr = node;
1550 if(mxp->nodeptr == node){
1551 mxp->as = strdup(defname);
1560 _ec->__EXPORTS = newVector(
struct IMEXPORT *,4);
1562 mxp->nodeptr = node;
1563 mxp->mxname = strdup(defname);
1564 mxp->as = mxp->mxname;
1565 stack_push(
struct IMEXPORT *,_ec->__EXPORTS,mxp);
1567 if(_ec->_executionContext){
1570 update_weakRoutes(X3D_PROTO(_ec->_executionContext));
1575int X3DScene_removeExportedNode(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval){
1581 const char *defname;
1582 defname = fwpars[0]._string;
1585 for(i=0;i<vectorSize(_ec->__EXPORTS);i++){
1586 mxp = vector_get(
struct IMEXPORT *,_ec->__EXPORTS,i);
1587 if(!strcmp(mxp->as,defname)){
1589 vector_remove_elem(
struct IMEXPORT *,_ec->__EXPORTS,i);
1594 if(_ec->_executionContext){
1597 update_weakRoutes(X3D_PROTO(_ec->_executionContext));
1601int X3DScene_setMetaData(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval){
1603 const char *name, *value;
1604 name = fwpars[0]._string;
1605 value = fwpars[1]._string;
1609int X3DScene_getMetaData(
FWType fwtype,
void *ec,
void *fwn,
int argc,
FWval fwpars,
FWval fwretval){
1614 name = fwpars[0]._string;
1617 fwretval->_string = value;
1618 fwretval->itype =
'S';
1626 {
"addRoute", VRBrowserAddRoute,
'P',{4,-1,0,
"WSWS"}},
1627 {
"deleteRoute", X3DExecutionContext_deleteRoute,
'0',{1,-1,0,
"P"}},
1628 {
"createNode", VRBrowserCreateNodeFromString,
'W',{1,-1,0,
"S"}},
1629 {
"createProto", X3DExecutionContext_createProto,
'W',{1,-1,0,
"S"}},
1630 {
"getImportedNode", X3DExecutionContext_getImportedNode,
'W',{1,-1,0,
"S"}},
1631 {
"updateImportedNode", X3DExecutionContext_updateImportedNode,
'0',{3,-1,0,
"SSS"}},
1632 {
"removeImportedNode", X3DExecutionContext_removeImportedNode,
'0',{1,-1,0,
"S"}},
1633 {
"getNamedNode", X3DExecutionContext_getNamedNode,
'W',{1,-1,0,
"S"}},
1634 {
"updateNamedNode", X3DExecutionContext_updateNamedNode,
'0',{2,-1,0,
"SW"}},
1635 {
"removeNamedNode", X3DExecutionContext_removeNamedNode,
'0',{1,-1,0,
"S"}},
1637 {
"setMetaData", X3DScene_setMetaData,
'0',{2,-1,0,
"SS"}},
1638 {
"getMetaData", X3DScene_getMetaData,
'S',{1,-1,0,
"S"}},
1639 {
"getExportedNode", X3DScene_getExportedNode,
'W',{1,-1,0,
"S"}},
1640 {
"updateExportedNode", X3DScene_updateExportedNode,
'0',{2,-1,0,
"SW"}},
1641 {
"removeExportedNode", X3DScene_removeExportedNode,
'0',{1,-1,0,
"S"}},
1649 {
"specificationVersion", 0,
'S',
'T'},
1650 {
"encoding", 1,
'S',
'T'},
1651 {
"profile", 2,
'P',
'T'},
1652 {
"components", 3,
'P',
'T'},
1653 {
"worldURL", 4,
'S',
'T'},
1654 {
"rootNodes", 5,
'W',
'T'},
1655 {
"protos", 6,
'P',
'T'},
1656 {
"externprotos", 7,
'P',
'T'},
1657 {
"routes", 8,
'P',
'T'},
1659 {
"isScene", 9,
'B',
'T'},
1662static int _TRUE = TRUE;
1663static int _FALSE = FALSE;
1664int X3DExecutionContextGetter(
FWType fwt,
int index,
void *ec,
void *fwn,
FWval fwretval){
1674 if(ecc->__loadResource || ecc->_parentResource){
1676 specver = ecc->__specversion;
1677 sprintf(str,
"{%d.%d.%d}",specver/100,(specver/10)%10,specver % 10);
1679 fwretval->_string = strdup(str);
1680 fwretval->itype =
'S';
1686 fwretval->_string =
"not filled in yet sb. VRML or XML or ..";
1687 fwretval->itype =
'S';
1693 int index = gglobal()->Mainloop.scene_profile;
1694 profile = getProfTable();
1695 fwretval->_pointer.native = &profile[index];
1696 fwretval->_pointer.fieldType = AUXTYPE_ProfileInfo;
1697 fwretval->_pointer.gc = 0;
1698 fwretval->itype =
'P';
1702 fwretval->_pointer.native = (
void *)gglobal()->Mainloop.scene_components;
1703 fwretval->_pointer.fieldType = AUXTYPE_ComponentInfoArray;
1704 fwretval->_pointer.gc = 0;
1705 fwretval->itype =
'P';
1708 fwretval->_string = gglobal()->Mainloop.url;
1709 fwretval->itype =
'S';
1712 fwretval->_web3dval.native = (
void *)&ecc->__children;
1713 fwretval->_web3dval.fieldType = FIELDTYPE_MFNode;
1714 fwretval->_web3dval.gc = 0;
1715 fwretval->itype =
'W';
1718 fwretval->_pointer.fieldType = AUXTYPE_X3DProtoArray;
1719 fwretval->_pointer.native = (
void*)ecc->__protoDeclares;
1720 fwretval->_pointer.gc = 0;
1721 fwretval->itype =
'P';
1724 fwretval->_pointer.fieldType = AUXTYPE_X3DExternProtoArray;
1725 fwretval->_pointer.native = (
void*)ecc->__externProtoDeclares;
1726 fwretval->_pointer.gc = 0;
1727 fwretval->itype =
'P';
1730 fwretval->_pointer.fieldType = AUXTYPE_X3DRouteArray;
1731 fwretval->_pointer.native = (
void*)ecc->__ROUTES;
1732 fwretval->_pointer.gc = 0;
1733 fwretval->itype =
'P';
1737 fwretval->itype =
'B';
1739 unsigned char flag = ciflag_get(ecc->__protoFlags,2);
1741 fwretval->_boolean = TRUE;
1743 fwretval->_boolean = FALSE;
1752struct FWTYPE X3DExecutionContextType = {
1753 AUXTYPE_X3DExecutionContext,
1755 "X3DExecutionContext",
1759 X3DExecutionContextProperties,
1761 X3DExecutionContextGetter,
1764 X3DExecutionContextFunctions,
1768int getCRouteCount();
1769int *getCRouteCounter();
1770int X3DRouteArrayGetter(
FWType fwt,
int index,
void *ec,
void *fwn,
FWval fwretval){
1776 _length = vectorSize(fwn);
1777 fwretval->_integer = _length;
1778 fwretval->itype =
'I';
1780 }
else if(index > -1 ){
1781 if(index < vectorSize(fwn)){
1782 fwretval->_pointer.native = vector_get(
void *, fwn, index);
1783 fwretval->_pointer.gc = 0;
1784 fwretval->_pointer.fieldType = AUXTYPE_X3DRoute;
1785 fwretval->itype =
'P';
1794 {
"length", -1,
'I',
'T'},
1798struct FWTYPE X3DRouteArrayType = {
1799 AUXTYPE_X3DRouteArray,
1805 X3DRouteArrayProperties,
1807 X3DRouteArrayGetter,
1821 {
"sourceNode", 0,
'W',
'T'},
1822 {
"sourceField", 1,
'S',
'T'},
1823 {
"destinationNode", 2,
'W',
'T'},
1824 {
"destinationField", 3,
'S',
'T'},
1827int X3DRouteGetter(
FWType fwt,
int index,
void *ec,
void *fwn,
FWval fwretval){
1830 const char *fieldname;
1831 struct X3D_Node *fromNode, *toNode;
1832 int fromIndex, toIndex, fromBuiltIn, toBuiltIn;
1836 fromNode = broute->from.node;
1837 fromIndex = broute->from.ifield;
1838 fromBuiltIn = broute->from.builtIn;
1839 toNode = broute->to.node;
1840 toIndex = broute->to.ifield;
1841 toBuiltIn = broute->to.builtIn;
1843 if(!fromNode || !toNode)
return 0;
1850 fwretval->_web3dval.anyvrml = malloc(
sizeof(
union anyVrml));
1851 fwretval->_web3dval.anyvrml->sfnode = fromNode;
1852 fwretval->_web3dval.fieldType = FIELDTYPE_SFNode;
1853 fwretval->_web3dval.gc = 1;
1854 fwretval->itype =
'W';
1858 getFieldFromNodeAndIndexSource(fromNode,fromIndex,fromBuiltIn,&fieldname,&type,&kind,&value);
1859 fwretval->_string = fieldname;
1860 fwretval->itype =
'S';
1864 fwretval->_web3dval.anyvrml = malloc(
sizeof(
union anyVrml));
1865 fwretval->_web3dval.anyvrml->sfnode = toNode;
1866 fwretval->_web3dval.fieldType = FIELDTYPE_SFNode;
1867 fwretval->itype =
'W';
1868 fwretval->_web3dval.gc = 1;
1872 getFieldFromNodeAndIndexSource(toNode,toIndex,toBuiltIn,&fieldname,&type,&kind,&value);
1873 fwretval->_string = fieldname;
1874 fwretval->itype =
'S';
1883struct FWTYPE X3DRouteType = {
1900int X3DProtoArrayGetter(
FWType fwt,
int index,
void *ec,
void *fwn,
FWval fwretval){
1906 _length = vectorSize(fwn);
1907 fwretval->_integer = _length;
1908 fwretval->itype =
'I';
1910 }
else if(index > -1 ){
1911 if(index < vectorSize(fwn)){
1912 fwretval->_pointer.native = vector_get(
void *, fwn, index);
1913 fwretval->_pointer.gc = 1;
1914 fwretval->_pointer.fieldType = AUXTYPE_X3DProto;
1915 fwretval->itype =
'P';
1924 {
"length", -1,
'I',
'T'},
1928struct FWTYPE X3DProtoArrayType = {
1929 AUXTYPE_X3DProtoArray,
1935 X3DProtoArrayProperties,
1937 X3DProtoArrayGetter,
1943struct FWTYPE X3DExternProtoArrayType = {
1944 AUXTYPE_X3DExternProtoArray,
1946 "X3DExternProtoArray",
1950 X3DProtoArrayProperties,
1952 X3DProtoArrayGetter,
1959struct tuplePointerInt {
1965 {
"name", 0,
'S',
'T'},
1966 {
"fields", 1,
'W',
'T'},
1967 {
"isExternProto", 2,
'B',
'T'},
1970int X3DProtoGetter(
FWType fwt,
int index,
void *ec,
void *fwn,
FWval fwretval){
1975 fwretval->_string = X3D_PROTO(fwn)->__typename;
1976 fwretval->itype =
'S';
1979 fwretval->_web3dval.native = fwn;
1980 fwretval->_web3dval.fieldType = AUXTYPE_X3DFieldDefinitionArray;
1981 fwretval->itype =
'W';
1982 fwretval->_web3dval.gc = 0;
1985 fwretval->itype =
'B';
1987 unsigned char flag = ciflag_get(X3D_PROTO(fwn)->__protoFlags,3);
1989 fwretval->_boolean = TRUE;
1991 fwretval->_boolean = FALSE;
2000struct FWTYPE X3DProtoType = {
2003 "X3DProtoDeclaration",
2014struct FWTYPE X3DExternProtoType = {
2015 AUXTYPE_X3DExternProto,
2017 "X3DExternProtoDeclaration",
2029int count_fields(
struct X3D_Node* node);
2030int X3DFieldDefinitionArrayGetter(
FWType fwt,
int index,
void *ec,
void *fwn,
FWval fwretval){
2039 _length = count_fields(node);
2040 fwretval->_integer = _length;
2041 fwretval->itype =
'I';
2043 }
else if(index > -1 ){
2044 if(index < vectorSize(fwn)){
2045 struct tuplePointerInt *tpi = malloc(
sizeof(
struct tuplePointerInt));
2046 tpi->pointer = (
void*)node;
2047 tpi->integer = index;
2048 fwretval->_pointer.native = tpi;
2049 fwretval->_pointer.gc = 1;
2050 fwretval->_pointer.fieldType = AUXTYPE_X3DFieldDefinition;
2051 fwretval->itype =
'P';
2060 {
"length", -1,
'I',
'T'},
2064struct FWTYPE X3DFieldDefinitionArrayType = {
2065 AUXTYPE_X3DFieldDefinitionArray,
2067 "X3DFieldDefinitionArray",
2071 X3DFieldDefinitionArrayProperties,
2073 X3DFieldDefinitionArrayGetter,
2080 {
"name", 0,
'S',
'T'},
2081 {
"accessType", 1,
'I',
'T'},
2082 {
"dataType", 2,
'I',
'T'},
2085int X3DFieldDefinitionGetter(
FWType fwt,
int index,
void *ec,
void *fwn,
FWval fwretval){
2086 int ifield, type,kind, konstindex, nr = 0;
2087 struct string_int * si;
2091 struct tuplePointerInt *tpi = (
struct tuplePointerInt*)fwn;
2092 node = tpi->pointer;
2093 ifield = tpi->integer;
2096 if(getFieldFromNodeAndIndexSource(node,ifield,TRUE,&fname,&type,&kind,&value)){
2101 fwretval->_string = fname;
2102 fwretval->itype =
'S';
2105 si = lookup_string_int(lookup_X3DConstants,PROTOKEYWORDS[kind],&konstindex);
2106 fwretval->_integer = konstindex;
2107 fwretval->itype =
'I';
2110 si = lookup_string_int(lookup_X3DConstants,FIELDTYPES[type],&konstindex);
2111 fwretval->_integer = konstindex;
2112 fwretval->itype =
'I';
2122struct FWTYPE X3DFieldDefinitionType = {
2123 AUXTYPE_X3DFieldDefinition,
2125 "X3DFieldDefinition",
2129 X3DFieldDefinitionProperties,
2131 X3DFieldDefinitionGetter,
2142void initVRMLBrowser(
FWType* typeArray,
int *n){
2143 typeArray[*n] = &X3DRouteType; (*n)++;
2144 typeArray[*n] = &X3DRouteArrayType; (*n)++;
2145 typeArray[*n] = &X3DExecutionContextType; (*n)++;
2146 typeArray[*n] = &ProfileInfoType; (*n)++;
2147 typeArray[*n] = &ProfileInfoArrayType; (*n)++;
2148 typeArray[*n] = &ComponentInfoType; (*n)++;
2149 typeArray[*n] = &ComponentInfoArrayType; (*n)++;
2150 typeArray[*n] = &BrowserType; (*n)++;
2151 typeArray[*n] = &X3DConstantsType; (*n)++;
2153 typeArray[*n] = &X3DProtoType; (*n)++;
2154 typeArray[*n] = &X3DProtoArrayType; (*n)++;
2155 typeArray[*n] = &X3DExternProtoType; (*n)++;
2156 typeArray[*n] = &X3DExternProtoArrayType; (*n)++;
2157 typeArray[*n] = &X3DFieldDefinitionType; (*n)++;
2158 typeArray[*n] = &X3DFieldDefinitionArrayType; (*n)++;