31#include <system_threads.h>
35#include <libFreeWRL.h>
39#include <libFreeWRL.h>
41#include "vrml_parser/Structs.h"
42#include "main/ProdCon.h"
43#include "input/InputFunctions.h"
47char consoleBuffer[200];
51#if defined(TARGET_AQUA) || defined(_ANDROID)
56void fwl_OSX_initializeParameters(
const char* initialURL) {
67 if ((tg->threads.loadThread == 0 ) || (tg->threads.PCthread == 0 )) {
71 myParams.height = 400;
74 myParams.winToEmbedInto = INT_ID_UNDEFINED;
75 myParams.fullscreen = FALSE;
76 myParams.multithreading = TRUE;
77 myParams.enableEAI = FALSE;
78 myParams.verbose = FALSE;
82 OLDCODE fwl_setp_height(400);
83 OLDCODE fwl_setp_eai(FALSE);
84 OLDCODE fwl_setp_fullscreen(FALSE);
87 ConsoleMessage(
"forcing EAI");
88 myParams.enableEAI = TRUE;
93 if (!fwl_initFreeWRL(&myParams)) {
94 ERROR_MSG(
"main: aborting during initialization.\n");
99 res = resource_create_single(initialURL);
103 send_resource_to_parser_async(res);
105 while ((!res->complete) && (res->status != ress_failed)
106 && (res->status != ress_not_loaded)) {
111 if (res->status == ress_not_loaded) {
112 sprintf(consoleBuffer,
"FreeWRL: Problem loading file \"%s\"",
114 fwl_StringConsoleMessage(consoleBuffer);
117 if (res->status == ress_failed) {
118 printf(
"load failed %s\n", initialURL);
119 sprintf(consoleBuffer,
"FreeWRL: unknown data on command line: \"%s\"",
121 fwl_StringConsoleMessage(consoleBuffer);
125 if (res->afterPoundCharacters != NULL) {
126 fwl_gotoViewpoint(res->afterPoundCharacters);
146void setInstance(uintptr_t instance) {
148 _fw_instance = instance;
152void setFullPath(
const char* file) {
161 file = stripLocalFileName((
char *) file);
162 FREE_IF_NZ(BrowserFullPath);
163 BrowserFullPath = STRDUP((
char *) file);
170char *strForeslash2back(
char *str) {
173 for( jj=0;jj<(int)strlen(str);jj++)
174 if(str[jj] ==
'/' ) str[jj] =
'\\';
182With Doug Sanden (correctly) moving FreeWRL to multi-invocation, the global parameter
"fwl_params"
183is now local, and options are set within this.
185OLDCODEvoid fwl_setp_width (
int foo) { fwl_params.width = foo; }
186OLDCODEvoid fwl_setp_height (
int foo) { fwl_params.height = foo; }
187OLDCODEvoid fwl_setp_winToEmbedInto (
void* foo) { fwl_params.winToEmbedInto = foo; }
188OLDCODEvoid fwl_setp_fullscreen (
bool foo) { fwl_params.fullscreen = foo; }
189OLDCODEvoid fwl_setp_multithreading (
bool foo) { fwl_params.multithreading = foo; }
190OLDCODEvoid fwl_setp_eai (
bool foo) { fwl_params.enableEAI = foo; }
191OLDCODEvoid fwl_setp_verbose (
bool foo) { fwl_params.verbose = foo; }
194OLDCODEint fwl_getp_width (
void) {
return fwl_params.width; }
195OLDCODEint fwl_getp_height (
void) {
return fwl_params.height; }
196OLDCODElong
int fwl_getp_winToEmbedInto (
void) {
return fwl_params.winToEmbedInto; }
197OLDCODEbool fwl_getp_fullscreen (
void) {
return fwl_params.fullscreen; }
198OLDCODEbool fwl_getp_multithreading (
void) {
return fwl_params.multithreading; }
199OLDCODEbool fwl_getp_eai (
void) {
return fwl_params.enableEAI; }
200OLDCODEbool fwl_getp_verbose (
void) {
return fwl_params.verbose; }
206void* fwl_init_instance() {
210 fwl_setCurrentHandle(NULL, __FILE__, __LINE__);
221 tg = iglobal_constructor();
223 fwl_setCurrentHandle(tg, __FILE__, __LINE__);
229 tg = (
ttglobal) fwl_getCurrentHandle(__FILE__, __LINE__);
233 tg = fwl_init_instance();
234 TRACE_MSG(
"FreeWRL: initializing...\n");
238 tg->threads.mainThread = pthread_self();
250#if !defined(_ANDROID)
258 DEBUG_MSG(
"copying application supplied params...\n");
266#if !defined(EXCLUDE_EAI)
268 if (params->enableEAI) {
269 fwlio_RxTx_control(CHANNEL_EAI, RxTx_START);
276 fwl_initialize_parser();
277 fwl_initializeInputParseThread();
278 fwl_initializeTextureThread();
290void splitpath_local_suffix(
const char *url,
char **local_name,
char **suff) {
298 len = (int) strlen(url);
300 for (i = len - 1; i >= 0; i--) {
303 localname = (
char*) &url[i];
306 *local_name = STRDUP(localname);
307 localname = *local_name;
308 len = (int) strlen(localname);
310 for (i = len - 1; i >= 0; i--) {
311 if (localname[i] ==
'.') {
313 *suff = STRDUP(&localname[i+1]);
321int checkExitRequest();