int main(int argc, char* argv[]) #endif { IFXRESULT result = IFX_OK; #ifdef __MINGW32__ wchar_t **argw = NULL; int argc=0; #endif #ifndef WIN32 wchar_t **argw = NULL; int i; #endif result = IFXSetDefaultLocale(); IFXTRACE_GENERIC(L"[Converter] IFXSetDefaultLocale %i\n", result); if( IFXSUCCESS(result) ) { #ifdef __MINGW32__ argw = CommandLineToArgvW(GetCommandLineW(), &argc); #endif #ifndef WIN32 argw = (wchar_t**)malloc(argc*sizeof(wchar_t*)); if (argw == NULL) result = IFX_E_OUT_OF_MEMORY; if( IFXSUCCESS(result) ) { memset(argw, 0, argc*sizeof(wchar_t*)); for (i=0; i<argc; i++) { argw[i] = mbs_to_wcs(argv[i]); if (argw[i] == NULL) { result = IFX_E_OUT_OF_MEMORY; break; } } } #endif } if( IFXSUCCESS(result) && argc > 2 ) { if( 0 == wcscmp(L"-libdir", argw[argc-2]) || 0 == wcscmp(L"-l", argw[argc-2]) ) { size_t size = wcstombs(NULL, argw[argc-1], 0); if (size <= MAXIMUM_FILENAME_LENGTH) { #ifdef WIN32 SetEnvironmentVariable(L"U3D_LIBDIR", argw[argc-1]); #else char libdir[size+1]; wcstombs(libdir, argw[argc-1], size); libdir[size] = 0; setenv("U3D_LIBDIR",libdir,1); #endif argc -=2; } } } if( IFXSUCCESS(result) ) { IFXDEBUG_STARTUP(); result = IFXCOMInitialize(); } IFXTRACE_GENERIC(L"[Converter] IFXCOMInitialize %i\n", result); if( IFXSUCCESS(result) ) { ConverterOptions converterOptions; FileOptions fileOptions; if( IFXSUCCESS(result) ) SetDefaultOptionsX( &converterOptions, &fileOptions ); if( IFXSUCCESS(result) ) { result = ReadAndSetUserOptionsX( argc, argw, &converterOptions, &fileOptions ); } #ifdef STDIO_HACK if( IFXSUCCESS(result) ) { if ( fileOptions.outFile != L"stdout" && fileOptions.outFile != L"-" ) stdmsg = stdout; } #endif if( IFXSUCCESS(result) ) { SceneUtilities sceneUtils; FileParser fileParser; IFXTRACE_GENERIC( L"[Converter] fileParser.Initialize\n" ); result = fileParser.Initialize( fileOptions.inFile.Raw() ); if( IFXSUCCESS(result) ) IFXTRACE_GENERIC( L"[Converter] sceneUtils.InitializeScene\n" ); result = sceneUtils.InitializeScene( fileOptions.profile, fileOptions.scalingFactor ); if( IFXSUCCESS(result) ) { IFXTRACE_GENERIC( L"[Converter] converter.Convert\n" ); SceneConverter converter( &fileParser, &sceneUtils, &converterOptions ); result = converter.Convert(); } //---------------------------------------------- // Scene now built and in the U3D engine. // It is now time to examine the scene and/or // dump it to a debug file or a U3D file. //---------------------------------------------- // Write out the scene to a U3D file if this is enabled. if ( IFXSUCCESS( result ) && ( fileOptions.exportOptions > 0 ) ) { result = sceneUtils.WriteSceneToFile( fileOptions.outFile, fileOptions.exportOptions ); } // If enabled, dump the scene to the debug file. if ( IFXSUCCESS( result ) && ( fileOptions.debugLevel > 0 ) ) { U8 file[MAXIMUM_FILENAME_LENGTH]; result = fileOptions.outFile.ConvertToRawU8( file, MAXIMUM_FILENAME_LENGTH ); if ( IFXSUCCESS( result ) ) result = sceneUtils.WriteDebugInfo( (const char*)file ); } } } fprintf(stdmsg,"Exit code = %x\n", result); IFXRESULT comResult = IFXCOMUninitialize(); IFXTRACE_GENERIC( L"[Converter] IFXCOMUninitialize %i\n", comResult ); IFXDEBUG_SHUTDOWN(); #ifdef __MINGW32__ LocalFree(argw); #endif #ifndef WIN32 if (argw != NULL) { for (i=0; i<argc; i++) { if(argw[i] != NULL) free(argw[i]); } free(argw); } #endif return result; }