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) {
59 freewrl_params_t myParams;
61 ttglobal tg = gglobal();
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;
82 ConsoleMessage(
"forcing EAI");
83 myParams.enableEAI = TRUE;
88 if (!fwl_initFreeWRL(&myParams)) {
89 ERROR_MSG(
"main: aborting during initialization.\n");
94 res = resource_create_single(initialURL);
98 send_resource_to_parser_async(res);
100 while ((!res->complete) && (res->status != ress_failed)
101 && (res->status != ress_not_loaded)) {
106 if (res->status == ress_not_loaded) {
107 sprintf(consoleBuffer,
"FreeWRL: Problem loading file \"%s\"",
109 fwl_StringConsoleMessage(consoleBuffer);
112 if (res->status == ress_failed) {
113 printf(
"load failed %s\n", initialURL);
114 sprintf(consoleBuffer,
"FreeWRL: unknown data on command line: \"%s\"",
116 fwl_StringConsoleMessage(consoleBuffer);
120 if (res->afterPoundCharacters != NULL) {
121 fwl_gotoViewpoint(res->afterPoundCharacters);
141void setInstance(uintptr_t instance) {
143 _fw_instance = instance;
147void setFullPath(
const char* file) {
156 file = stripLocalFileName((
char *) file);
157 FREE_IF_NZ(BrowserFullPath);
158 BrowserFullPath = STRDUP((
char *) file);
165char *strForeslash2back(
char *str) {
168 for( jj=0;jj<(int)strlen(str);jj++)
169 if(str[jj] ==
'/' ) str[jj] =
'\\';
174void* fwl_init_instance() {
178 fwl_setCurrentHandle(NULL, __FILE__, __LINE__);
189 tg = iglobal_constructor();
191 fwl_setCurrentHandle(tg, __FILE__, __LINE__);
195bool fwl_initFreeWRL(freewrl_params_t *params) {
197 tg = (ttglobal) fwl_getCurrentHandle(__FILE__, __LINE__);
201 tg = fwl_init_instance();
202 TRACE_MSG(
"FreeWRL: initializing...\n");
206 tg->threads.mainThread = pthread_self();
218#if !defined(_ANDROID)
226 DEBUG_MSG(
"copying application supplied params...\n");
227 memcpy(tg->display.params, params,
sizeof(freewrl_params_t));
234#if !defined(EXCLUDE_EAI)
236 if (params->enableEAI) {
237 fwlio_RxTx_control(CHANNEL_EAI, RxTx_START);
244 fwl_initialize_parser();
245 fwl_initializeInputParseThread();
246 fwl_initializeTextureThread();
258void splitpath_local_suffix(
const char *url,
char **local_name,
char **suff) {
266 len = (int) strlen(url);
268 for (i = len - 1; i >= 0; i--) {
271 localname = (
char*) &url[i];
274 *local_name = STRDUP(localname);
275 localname = *local_name;
276 len = (int) strlen(localname);
278 for (i = len - 1; i >= 0; i--) {
279 if (localname[i] ==
'.') {
281 *suff = STRDUP(&localname[i+1]);
288void splitpath3(
const char* url,
char** folder,
char** local_name,
char** suff) {
296 len = (int)strlen(url);
298 for (i = len - 1; i >= 0; i--) {
301 localname = (
char*)&url[i];
303 *folder = strndup(url, i);
305 *local_name = STRDUP(localname);
306 localname = *local_name;
307 len = (int)strlen(localname);
309 for (i = len - 1; i >= 0; i--) {
310 if (localname[i] ==
'.') {
312 *suff = STRDUP(&localname[i + 1]);
320int checkExitRequest();