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"
48char consoleBuffer[200];
52#if defined(TARGET_AQUA) || defined(_ANDROID)
57void fwl_OSX_initializeParameters(
const char* initialURL) {
68 if ((tg->threads.loadThread == 0 ) || (tg->threads.PCthread == 0 )) {
72 myParams.height = 400;
75 myParams.winToEmbedInto = INT_ID_UNDEFINED;
76 myParams.fullscreen = FALSE;
77 myParams.multithreading = TRUE;
78 myParams.enableEAI = FALSE;
79 myParams.verbose = FALSE;
83 OLDCODE fwl_setp_height(400);
84 OLDCODE fwl_setp_eai(FALSE);
85 OLDCODE fwl_setp_fullscreen(FALSE);
88 ConsoleMessage(
"forcing EAI");
89 myParams.enableEAI = TRUE;
94 if (!fwl_initFreeWRL(&myParams)) {
95 ERROR_MSG(
"main: aborting during initialization.\n");
100 res = resource_create_single(initialURL);
104 send_resource_to_parser_async(res);
106 while ((!res->complete) && (res->status != ress_failed)
107 && (res->status != ress_not_loaded)) {
112 if (res->status == ress_not_loaded) {
113 sprintf(consoleBuffer,
"FreeWRL: Problem loading file \"%s\"",
115 fwl_StringConsoleMessage(consoleBuffer);
118 if (res->status == ress_failed) {
119 printf(
"load failed %s\n", initialURL);
120 sprintf(consoleBuffer,
"FreeWRL: unknown data on command line: \"%s\"",
122 fwl_StringConsoleMessage(consoleBuffer);
126 if (res->afterPoundCharacters != NULL) {
127 fwl_gotoViewpoint(res->afterPoundCharacters);
147void setInstance(uintptr_t instance) {
149 _fw_instance = instance;
153void setFullPath(
const char* file) {
162 file = stripLocalFileName((
char *) file);
163 FREE_IF_NZ(BrowserFullPath);
164 BrowserFullPath = STRDUP((
char *) file);
171char *strForeslash2back(
char *str) {
174 for( jj=0;jj<(int)strlen(str);jj++)
175 if(str[jj] ==
'/' ) str[jj] =
'\\';
183With Doug Sanden (correctly) moving FreeWRL to multi-invocation, the global parameter
"fwl_params"
184is now local, and options are set within this.
186OLDCODEvoid fwl_setp_width (
int foo) { fwl_params.width = foo; }
187OLDCODEvoid fwl_setp_height (
int foo) { fwl_params.height = foo; }
188OLDCODEvoid fwl_setp_winToEmbedInto (
void* foo) { fwl_params.winToEmbedInto = foo; }
189OLDCODEvoid fwl_setp_fullscreen (
bool foo) { fwl_params.fullscreen = foo; }
190OLDCODEvoid fwl_setp_multithreading (
bool foo) { fwl_params.multithreading = foo; }
191OLDCODEvoid fwl_setp_eai (
bool foo) { fwl_params.enableEAI = foo; }
192OLDCODEvoid fwl_setp_verbose (
bool foo) { fwl_params.verbose = foo; }
195OLDCODEint fwl_getp_width (
void) {
return fwl_params.width; }
196OLDCODEint fwl_getp_height (
void) {
return fwl_params.height; }
197OLDCODElong
int fwl_getp_winToEmbedInto (
void) {
return fwl_params.winToEmbedInto; }
198OLDCODEbool fwl_getp_fullscreen (
void) {
return fwl_params.fullscreen; }
199OLDCODEbool fwl_getp_multithreading (
void) {
return fwl_params.multithreading; }
200OLDCODEbool fwl_getp_eai (
void) {
return fwl_params.enableEAI; }
201OLDCODEbool fwl_getp_verbose (
void) {
return fwl_params.verbose; }
207void* fwl_init_instance() {
211 fwl_setCurrentHandle(NULL, __FILE__, __LINE__);
222 tg = iglobal_constructor();
224 fwl_setCurrentHandle(tg, __FILE__, __LINE__);
230 tg = (
ttglobal) fwl_getCurrentHandle(__FILE__, __LINE__);
234 tg = fwl_init_instance();
235 TRACE_MSG(
"FreeWRL: initializing...\n");
239 tg->threads.mainThread = pthread_self();
251#if !defined(_ANDROID)
259 DEBUG_MSG(
"copying application supplied params...\n");
267#if !defined(EXCLUDE_EAI)
269 if (params->enableEAI) {
270 fwlio_RxTx_control(CHANNEL_EAI, RxTx_START);
277 fwl_initialize_parser();
278 fwl_initializeInputParseThread();
279 fwl_initializeTextureThread();
291void splitpath_local_suffix(
const char *url,
char **local_name,
char **suff) {
299 len = (int) strlen(url);
301 for (i = len - 1; i >= 0; i--) {
304 localname = (
char*) &url[i];
307 *local_name = STRDUP(localname);
308 localname = *local_name;
309 len = (int) strlen(localname);
311 for (i = len - 1; i >= 0; i--) {
312 if (localname[i] ==
'.') {
314 *suff = STRDUP(&localname[i+1]);
322int checkExitRequest();