String SystemStats::getDisplayLanguage() { return getUserLanguage() + "-" + getUserRegion(); }
int main(int argc, char *argv[]) { // init fnkdat if(fnkdat(NULL, NULL, 0, FNKDAT_INIT) < 0) { perror("Could not initialize fnkdat"); exit(EXIT_FAILURE); } bool bShowDebug = false; for(int i=1; i < argc; i++) { //check for overiding params std::string parameter(argv[i]); if(parameter == "--showlog") { // special parameter which does not overwrite settings bShowDebug = true; } else if((parameter == "-f") || (parameter == "--fullscreen") || (parameter == "-w") || (parameter == "--window") || (parameter.find("--PlayerName=") == 0) || (parameter.find("--ServerPort=") == 0)) { // normal parameter for overwriting settings // handle later } else { printUsage(); exit(EXIT_FAILURE); } } if(bShowDebug == false) { // get utf8-encoded log file path std::string logfilePath = getLogFilepath(); const char* pLogfilePath = logfilePath.c_str(); #if defined (_WIN32) // on win32 we need an ansi-encoded filepath WCHAR szwLogPath[MAX_PATH]; char szLogPath[MAX_PATH]; if(MultiByteToWideChar(CP_UTF8, 0, pLogfilePath, -1, szwLogPath, MAX_PATH) == 0) { fprintf(stderr, "Conversion of logfile path from utf-8 to utf-16 failed\n"); exit(EXIT_FAILURE); } if(WideCharToMultiByte(CP_ACP, 0, szwLogPath, -1, szLogPath, MAX_PATH, NULL, NULL) == 0) { fprintf(stderr, "Conversion of logfile path from utf-16 to ansi failed\n"); exit(EXIT_FAILURE); } pLogfilePath = szLogPath; #endif int d = open(pLogfilePath, O_WRONLY | O_CREAT | O_TRUNC, 0644); if(d < 0) { fprintf(stderr, "Opening logfile '%s' failed\n", pLogfilePath); exit(EXIT_FAILURE); } // Hint: fileno(stdout) != STDOUT_FILENO on Win32 (see SDL_win32_main.c) if(dup2(d, fileno(stdout)) < 0) { fprintf(stderr, "Redirecting stdout failed\n"); exit(EXIT_FAILURE); } // Hint: fileno(stderr) != STDERR_FILENO on Win32 (see SDL_win32_main.c) if(dup2(d, fileno(stderr)) < 0) { fprintf(stderr, "Redirecting stderr failed\n"); exit(EXIT_FAILURE); } } fprintf(stdout, "Starting Dune Legacy " VERSION " ...\n"); fflush(stdout); if(checkForExcessPrecision() == true) { fprintf(stdout, "WARNING: Floating point operations are internally calculated with higher precision. Network game might get async. Are you using x87-FPU? Check your compile settings!\n"); fflush(stdout); } // First check for missing files std::vector<std::string> missingFiles = FileManager::getMissingFiles(); if(missingFiles.empty() == false) { // create data directory inside config directory char tmp[FILENAME_MAX]; fnkdat("data/", tmp, FILENAME_MAX, FNKDAT_USER | FNKDAT_CREAT); bool cannotShowMissingScreen = false; fprintf(stderr,"The following files are missing:\n"); std::vector<std::string>::const_iterator iter; for(iter = missingFiles.begin() ; iter != missingFiles.end(); ++iter) { fprintf(stderr," %s\n",iter->c_str()); if(iter->find("LEGACY.PAK") != std::string::npos) { cannotShowMissingScreen = true; } } fprintf(stderr,"Put them in one of the following directories:\n"); std::vector<std::string> searchPath = FileManager::getSearchPath(); std::vector<std::string>::const_iterator searchPathIter; for(searchPathIter = searchPath.begin(); searchPathIter != searchPath.end(); ++searchPathIter) { fprintf(stderr," %s\n",searchPathIter->c_str()); } if(cannotShowMissingScreen == true) { return EXIT_FAILURE; } } bool bExitGame = false; bool bFirstInit = true; bool bFirstGamestart = false; debug = false; cursorFrame = UI_CursorNormal; do { int seed = time(NULL); srand(seed); // check if configfile exists std::string configfilepath = getConfigFilepath(); if(existsFile(configfilepath) == false) { std::string userLanguage = getUserLanguage(); if(userLanguage.empty()) { userLanguage = "en"; } if(missingFiles.empty() == true) { // if all pak files were found we can create the ini file bFirstGamestart = true; createDefaultConfigFile(configfilepath, userLanguage); } } INIFile myINIFile(configfilepath); settings.general.playIntro = myINIFile.getBoolValue("General","Play Intro",false); settings.general.playerName = myINIFile.getStringValue("General","Player Name","Player"); settings.video.width = myINIFile.getIntValue("Video","Width",640); settings.video.height = myINIFile.getIntValue("Video","Height",480); settings.video.fullscreen = myINIFile.getBoolValue("Video","Fullscreen",true); settings.video.doubleBuffering = myINIFile.getBoolValue("Video","Double Buffering",true); settings.video.frameLimit = myINIFile.getBoolValue("Video","FrameLimit",true); settings.video.preferredZoomLevel = myINIFile.getIntValue("Video","Preferred Zoom Level", 0); settings.video.scaler = myINIFile.getStringValue("Video","Scaler", "scale2x"); settings.audio.musicType = myINIFile.getStringValue("Audio","Music Type","adl"); settings.audio.playMusic = myINIFile.getBoolValue("Audio","Play Music", true); settings.audio.playSFX = myINIFile.getBoolValue("Audio","Play SFX", true); settings.audio.frequency = myINIFile.getIntValue("Audio","Audio Frequency", 22050); settings.general.language = myINIFile.getStringValue("General","Language","en"); settings.network.serverPort = myINIFile.getIntValue("Network","ServerPort",DEFAULT_PORT); settings.network.metaServer = myINIFile.getStringValue("Network","MetaServer",DEFAULT_METASERVER); settings.network.debugNetwork = myINIFile.getBoolValue("Network","Debug Network",false); settings.ai.campaignAI = myINIFile.getStringValue("AI","Campaign AI",DEFAULTAIPLAYERCLASS); settings.gameOptions.gameSpeed = myINIFile.getIntValue("Game Options","Game Speed",GAMESPEED_DEFAULT); settings.gameOptions.concreteRequired = myINIFile.getBoolValue("Game Options","Concrete Required",true); settings.gameOptions.structuresDegradeOnConcrete = myINIFile.getBoolValue("Game Options","Structures Degrade On Concrete",true); settings.gameOptions.fogOfWar = myINIFile.getBoolValue("Game Options","Fog of War",false); settings.gameOptions.startWithExploredMap = myINIFile.getBoolValue("Game Options","Start with Explored Map",false); settings.gameOptions.instantBuild = myINIFile.getBoolValue("Game Options","Instant Build",false); settings.gameOptions.onlyOnePalace = myINIFile.getBoolValue("Game Options","Only One Palace",false); settings.gameOptions.rocketTurretsNeedPower = myINIFile.getBoolValue("Game Options","Rocket-Turrets Need Power",false); settings.gameOptions.sandwormsRespawn = myINIFile.getBoolValue("Game Options","Sandworms Respawn",false); settings.gameOptions.killedSandwormsDropSpice = myINIFile.getBoolValue("Game Options","Killed Sandworms Drop Spice",false); fprintf(stdout, "loading texts....."); fflush(stdout); pTextManager = new TextManager(); fprintf(stdout, "\t\tfinished\n"); fflush(stdout); if(FileManager::getMissingFiles().size() > 0) { // set back to english std::vector<std::string> missingFiles = FileManager::getMissingFiles(); fprintf(stderr,"The following files are missing for language \"%s\":\n",_("LanguageFileExtension").c_str()); std::vector<std::string>::const_iterator iter; for(iter = missingFiles.begin(); iter != missingFiles.end(); ++iter) { fprintf(stderr," %s\n",iter->c_str()); } fprintf(stderr,"Language is changed to English!\n"); settings.general.language = "en"; } for(int i=1; i < argc; i++) { //check for overiding params std::string parameter(argv[i]); if((parameter == "-f") || (parameter == "--fullscreen")) { settings.video.fullscreen = true; } else if((parameter == "-w") || (parameter == "--window")) { settings.video.fullscreen = false; } else if(parameter.find("--PlayerName=") == 0) { settings.general.playerName = parameter.substr(strlen("--PlayerName=")); } else if(parameter.find("--ServerPort=") == 0) { settings.network.serverPort = atol(argv[i] + strlen("--ServerPort=")); } } if(bFirstInit == true) { fprintf(stdout, "initializing SDL..... \t\t"); fflush(stdout); if(SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO) < 0) { fprintf(stderr, "ERROR: Couldn't initialise SDL: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } fprintf(stdout, "finished\n"); fflush(stdout); } if(bFirstGamestart == true && bFirstInit == true) { // detect 800x600 screen resolution if(SDL_VideoModeOK(800, 600, 8, SDL_HWSURFACE | SDL_FULLSCREEN) > 0) { settings.video.width = 800; settings.video.height = 600; settings.video.preferredZoomLevel = 1; myINIFile.setIntValue("Video","Width",settings.video.width); myINIFile.setIntValue("Video","Height",settings.video.height); myINIFile.setIntValue("Video","Preferred Zoom Level",1); myINIFile.saveChangesTo(getConfigFilepath()); } } Scaler::setDefaultScaler(Scaler::getScalerByName(settings.video.scaler)); SDL_EnableUNICODE(1); SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); char strenv[] = "SDL_VIDEO_CENTERED=center"; SDL_putenv(strenv); SDL_WM_SetCaption("Dune Legacy", "Dune Legacy"); if(bFirstInit == true) { fprintf(stdout, "initializing sound..... \t");fflush(stdout); if( Mix_OpenAudio(settings.audio.frequency, AUDIO_S16SYS, 2, 1024) < 0 ) { SDL_Quit(); fprintf(stderr,"Warning: Couldn't set %d Hz 16-bit audio\n- Reason: %s\n",settings.audio.frequency,SDL_GetError()); exit(EXIT_FAILURE); } else { fprintf(stdout, "allocated %d channels.\n", Mix_AllocateChannels(6)); fflush(stdout); } } pFileManager = new FileManager( !missingFiles.empty() ); // now we can finish loading texts if(missingFiles.empty()) { pTextManager->loadData(); } if(pFileManager->exists("IBM.PAL") == true) { palette = LoadPalette_RW(pFileManager->openFile("IBM.PAL"), true); } else { // create dummy palette for showing missing files info palette = Palette(256); palette[115].r = 202; palette[115].g = 141; palette[115].b = 16; palette[255].r = 255; palette[255].g = 255; palette[255].b = 255; } screen = NULL; setVideoMode(); fprintf(stdout, "loading fonts...");fflush(stdout); pFontManager = new FontManager(); fprintf(stdout, "\t\tfinished\n"); fflush(stdout); if(!missingFiles.empty()) { // some files are missing bExitGame = true; printMissingFilesToScreen(); fprintf(stdout, "Deinitialize....."); fflush(stdout); } else { // everything is just fine and we can start the game fprintf(stdout, "loading graphics..."); fflush(stdout); pGFXManager = new GFXManager(); fprintf(stdout, "\t\tfinished\n"); fflush(stdout); fprintf(stdout, "loading sounds..."); fflush(stdout); pSFXManager = new SFXManager(); fprintf(stdout, "\t\tfinished\n"); fflush(stdout); GUIStyle::setGUIStyle(new DuneStyle); if(bFirstInit == true) { fprintf(stdout, "starting sound player..."); fflush(stdout); soundPlayer = new SoundPlayer(); fprintf(stdout, "\tfinished\n"); fprintf(stdout, "starting music player...\t"); fflush(stdout); if(settings.audio.musicType == "directory") { fprintf(stdout, "playing from music directory\n"); fflush(stdout); musicPlayer = new DirectoryPlayer(); } else if(settings.audio.musicType == "adl") { fprintf(stdout, "playing ADL files\n"); fflush(stdout); musicPlayer = new ADLPlayer(); } else if(settings.audio.musicType == "xmi") { fprintf(stdout, "playing XMI files\n"); fflush(stdout); musicPlayer = new XMIPlayer(); } else { fprintf(stdout, "failed\n"); fflush(stdout); exit(EXIT_FAILURE); } //musicPlayer->changeMusic(MUSIC_INTRO); } // Playing intro if(((bFirstGamestart == true) || (settings.general.playIntro == true)) && (bFirstInit==true)) { fprintf(stdout, "playing intro.....");fflush(stdout); Intro* pIntro = new Intro(); pIntro->run(); delete pIntro; fprintf(stdout, "\t\tfinished\n"); fflush(stdout); } bFirstInit = false; fprintf(stdout, "starting main menu...");fflush(stdout); MainMenu * myMenu = new MainMenu(); fprintf(stdout, "\t\tfinished\n"); fflush(stdout); if(myMenu->showMenu() == MENU_QUIT_DEFAULT) { bExitGame = true; } delete myMenu; fprintf(stdout, "Deinitialize....."); fflush(stdout); GUIStyle::destroyGUIStyle(); // clear everything if(bExitGame == true) { delete musicPlayer; delete soundPlayer; Mix_HaltMusic(); Mix_CloseAudio(); } delete pTextManager; delete pSFXManager; delete pGFXManager; } delete pFontManager; delete pFileManager; if(bExitGame == true) { SDL_Quit(); } fprintf(stdout, "\t\tfinished\n"); fflush(stdout); } while(bExitGame == false); // deinit fnkdat if(fnkdat(NULL, NULL, 0, FNKDAT_UNINIT) < 0) { perror("Could not uninitialize fnkdat"); exit(EXIT_FAILURE); } return EXIT_SUCCESS; }
String SystemStats::getDisplayLanguage() { return getUserLanguage(); }
w_instance NativeProperties_init(JNIEnv *env, w_instance classSystem) { w_thread thread = JNIEnv2w_thread(env); char *utf8; w_string s; w_fifo fifo; w_int i; prop_hashtable = ht_create("hashtable:native system properties", 17, ht_stringHash, ht_stringCompare, 0, 0); woempa(1, "Created prop_hashtable\n"); s = cstring2String(UNICODE_SUBSETS, strlen(UNICODE_SUBSETS)); ht_write(prop_hashtable, (w_word)cstring2String("mika.unicode.subsets", 20), (w_word)s); woempa(1, "Set %s -> %w\n", "mika.unicode.subsets", s); utf8 = getInstallationDir(); s = utf2String(utf8, strlen(utf8)); ht_write(prop_hashtable, (w_word)utf2String("java.home", 9), (w_word)s); woempa(1, "Set %s -> %w\n", "java.home", s); utf8 = getExtensionDir(); s = utf2String(utf8, strlen(utf8)); ht_write(prop_hashtable, (w_word)utf2String("java.ext.dirs", 13), (w_word)s); woempa(1, "Set %s -> %w\n", "java.ext.dirs", s); utf8 = getLibraryPath(); s = utf2String(utf8, strlen(utf8)); ht_write(prop_hashtable, (w_word)utf2String("java.library.path", 17), (w_word)s); woempa(1, "Set %s -> %w\n", "java.library.path", s); s = utf2String(VERSION_STRING, strlen(VERSION_STRING)); ht_write(prop_hashtable, (w_word)utf2String("mika.version", 12), (w_word)s); woempa(1, "Set %s -> %w\n", "mika.version", s); s = utf2String(WONKA_INFO, strlen(WONKA_INFO)); ht_write(prop_hashtable, (w_word)utf2String("mika.vm.options", 15), (w_word)s); woempa(1, "Set %s -> %w\n", "mika.vm.options", s); s = utf2String(DEFAULT_HEAP_SIZE, strlen(DEFAULT_HEAP_SIZE)); ht_write(prop_hashtable, (w_word)utf2String("mika.default.heap.size", 22), (w_word)s); woempa(1, "Set %s -> %w\n", "mika.default.heap.size", s); s = utf2String(AWT_INFO, strlen(AWT_INFO)); ht_write(prop_hashtable, (w_word)utf2String("mika.awt.options", 16), (w_word)s); woempa(1, "Set %s -> %w\n", "mika.awt.options", s); #ifdef O4P s = utf2String(O4P_INFO, strlen(O4P_INFO)); ht_write(prop_hashtable, (w_word)utf2String("mika.o4p.options", 16), (w_word)s); woempa(1, "Set %s -> %w\n", "mika.o4p.options", s); #endif #ifdef OSWALD s = utf2String(OSWALD_INFO, strlen(OSWALD_INFO)); ht_write(prop_hashtable, (w_word)utf2String("mika.oswald.options", 19), (w_word)s); woempa(1, "Set %s -> %w\n", "mika.oswald.options", s); #endif s = utf2String(BUILD_HOST, strlen(BUILD_HOST)); ht_write(prop_hashtable, (w_word)utf2String("mika.build.host", 15), (w_word)s); woempa(1, "Set %s -> %w\n", "mika.build.host", s); utf8 = __DATE__ " " __TIME__; s = utf2String(utf8, strlen(utf8)); ht_write(prop_hashtable, (w_word)utf2String("mika.build.time", 15), (w_word)s); woempa(1, "Set %s -> %w\n", "mika.build.time", s); utf8 = getOSName(); s = utf2String(utf8, strlen(utf8)); ht_write(prop_hashtable, (w_word)utf2String("os.name", 7), (w_word)s); woempa(1, "Set %s -> %w\n", "os.name", s); utf8 = getOSVersion(); s = utf2String(utf8, strlen(utf8)); ht_write(prop_hashtable, (w_word)utf2String("os.version", 10), (w_word)s); woempa(1, "Set %s -> %w\n", "os.version", s); utf8 = getOSArch(); s = utf2String(utf8, strlen(utf8)); ht_write(prop_hashtable, (w_word)utf2String("os.arch", 7), (w_word)s); woempa(1, "Set %s -> %w\n", "os.arch", s); utf8 = getUserName(); s = utf2String(utf8, strlen(utf8)); ht_write(prop_hashtable, (w_word)utf2String("user.name", 9), (w_word)s); woempa(1, "Set %s -> %w\n", "user.name", s); utf8 = getUserHome(); s = utf2String(utf8, strlen(utf8)); ht_write(prop_hashtable, (w_word)utf2String("user.home", 9), (w_word)s); woempa(1, "Set %s -> %w\n", "user.home", s); utf8 = getUserDir(); s = utf2String(utf8, strlen(utf8)); ht_write(prop_hashtable, (w_word)utf2String("user.dir", 8), (w_word)s); woempa(1, "Set %s -> %w\n", "user.dir", s); utf8 = getUserLanguage(); s = utf2String(utf8, strlen(utf8)); ht_write(prop_hashtable, (w_word)utf2String("user.language", 13), (w_word)s); woempa(1, "Set %s -> %w\n", "user.language", s); utf8 = "Mika " VERSION_STRING; s = utf2String(utf8, strlen(utf8)); ht_write(prop_hashtable, (w_word)utf2String("java.runtime.name", 17), (w_word)s); woempa(1, "Set %s -> %w\n", "java.runtime.name", s); enterUnsafeRegion(thread); keyArray = allocArrayInstance_1d(JNIEnv2w_thread(env), clazzArrayOf_String, prop_hashtable->occupancy); enterSafeRegion(thread); fifo = ht_list_keys_no_lock(prop_hashtable); i = 0; while ((s = (w_string)getFifo(fifo))) { woempa(7, "keyArray[%d] = %w\n", i, s); setArrayReferenceField(keyArray, getStringInstance(s), i); ++i; } return keyArray; }