#endif
-/*
- Multithreading support
-*/
-int getNumberOfProcessors()
-{
-#if defined(_SC_NPROCESSORS_ONLN)
-
- return sysconf(_SC_NPROCESSORS_ONLN);
-
-#elif defined(__FreeBSD__) || defined(__APPLE__)
-
- unsigned int len, count;
- len = sizeof(count);
- return sysctlbyname("hw.ncpu", &count, &len, NULL, 0);
-
-#elif defined(_GNU_SOURCE)
-
- return get_nprocs();
-
-#elif defined(_WIN32)
-
- SYSTEM_INFO sysinfo;
- GetSystemInfo(&sysinfo);
- return sysinfo.dwNumberOfProcessors;
-
-#elif defined(PTW32_VERSION) || defined(__hpux)
-
- return pthread_num_processors_np();
-
-#else
-
- return 1;
-
-#endif
-}
-
-
-#ifndef __ANDROID__
-bool threadBindToProcessor(threadid_t tid, int pnumber)
-{
-#if defined(_WIN32)
-
- HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, 0, tid);
- if (!hThread)
- return false;
-
- bool success = SetThreadAffinityMask(hThread, 1 << pnumber) != 0;
-
- CloseHandle(hThread);
- return success;
-
-#elif (defined(__FreeBSD__) && (__FreeBSD_version >= 702106)) \
- || defined(__linux) || defined(linux)
-
- cpu_set_t cpuset;
-
- CPU_ZERO(&cpuset);
- CPU_SET(pnumber, &cpuset);
- return pthread_setaffinity_np(tid, sizeof(cpuset), &cpuset) == 0;
-
-#elif defined(__sun) || defined(sun)
-
- return processor_bind(P_LWPID, MAKE_LWPID_PTHREAD(tid),
- pnumber, NULL) == 0;
-
-#elif defined(_AIX)
-
- return bindprocessor(BINDTHREAD, (tid_t)tid, pnumber) == 0;
-
-#elif defined(__hpux) || defined(hpux)
-
- pthread_spu_t answer;
-
- return pthread_processor_bind_np(PTHREAD_BIND_ADVISORY_NP,
- &answer, pnumber, tid) == 0;
-
-#elif defined(__APPLE__)
-
- struct thread_affinity_policy tapol;
-
- thread_port_t threadport = pthread_mach_thread_np(tid);
- tapol.affinity_tag = pnumber + 1;
- return thread_policy_set(threadport, THREAD_AFFINITY_POLICY,
- (thread_policy_t)&tapol, THREAD_AFFINITY_POLICY_COUNT) == KERN_SUCCESS;
-
-#else
-
- return false;
-
-#endif
-}
-#endif
-
-bool threadSetPriority(threadid_t tid, int prio)
-{
-#if defined(_WIN32)
-
- HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, 0, tid);
- if (!hThread)
- return false;
-
- bool success = SetThreadPriority(hThread, prio) != 0;
-
- CloseHandle(hThread);
- return success;
-
-#else
-
- struct sched_param sparam;
- int policy;
-
- if (pthread_getschedparam(tid, &policy, &sparam) != 0)
- return false;
-
- int min = sched_get_priority_min(policy);
- int max = sched_get_priority_max(policy);
-
- sparam.sched_priority = min + prio * (max - min) / THREAD_PRIORITY_HIGHEST;
- return pthread_setschedparam(tid, policy, &sparam) == 0;
-
-#endif
-}
-
-
/*
Path mangler
*/
// Default to RUN_IN_PLACE style relative paths
std::string path_share = "..";
std::string path_user = "..";
+std::string path_locale = path_share + DIR_DELIM + "locale";
+
std::string getDataPath(const char *subpath)
{
// Use ".\bin\.."
path_share = std::string(buf) + "\\..";
- // Use "C:\Documents and Settings\user\Application Data\<PROJECT_NAME_LOWER>"
+ // Use "C:\Documents and Settings\user\Application Data\<PROJECT_NAME>"
DWORD len = GetEnvironmentVariable("APPDATA", buf, sizeof(buf));
FATAL_ERROR_IF(len == 0 || len > sizeof(buf), "Failed to get APPDATA");
- path_user = std::string(buf) + DIR_DELIM PROJECT_NAME_LOWER;
+ path_user = std::string(buf) + DIR_DELIM + PROJECT_NAME;
return true;
}
trylist.push_back(static_sharedir);
trylist.push_back(bindir + DIR_DELIM ".." DIR_DELIM "share"
- DIR_DELIM PROJECT_NAME_LOWER);
+ DIR_DELIM + PROJECT_NAME);
trylist.push_back(bindir + DIR_DELIM "..");
#ifdef __ANDROID__
#ifndef __ANDROID__
path_user = std::string(getenv("HOME")) + DIR_DELIM "."
- PROJECT_NAME_LOWER;
+ + PROJECT_NAME;
#endif
return true;
}
CFRelease(resources_url);
- path_user = std::string(getenv("HOME")) +
- "/Library/Application Support/" PROJECT_NAME_LOWER;
+ path_user = std::string(getenv("HOME"))
+ + "/Library/Application Support/"
+ + PROJECT_NAME;
return true;
}
{
path_share = STATIC_SHAREDIR;
path_user = std::string(getenv("HOME")) + DIR_DELIM "."
- PROJECT_NAME_LOWER;
+ + lowercase(PROJECT_NAME);
return true;
}
path_share = execpath;
path_user = execpath;
}
-
#else
infostream << "Using system-wide paths (NOT RUN_IN_PLACE)" << std::endl;
infostream << "Detected share path: " << path_share << std::endl;
infostream << "Detected user path: " << path_user << std::endl;
+
+ bool found_localedir = false;
+#ifdef STATIC_LOCALEDIR
+ if (STATIC_LOCALEDIR[0] && fs::PathExists(STATIC_LOCALEDIR)) {
+ found_localedir = true;
+ path_locale = STATIC_LOCALEDIR;
+ infostream << "Using locale directory " << STATIC_LOCALEDIR << std::endl;
+ } else {
+ path_locale = getDataPath("locale");
+ if (fs::PathExists(path_locale)) {
+ found_localedir = true;
+ infostream << "Using in-place locale directory " << path_locale
+ << " even though a static one was provided "
+ << "(RUN_IN_PLACE or CUSTOM_LOCALEDIR)." << std::endl;
+ }
+ }
+#else
+ path_locale = getDataPath("locale");
+ if (fs::PathExists(path_locale)) {
+ found_localedir = true;
+ }
+#endif
+ if (!found_localedir) {
+ errorstream << "Couldn't find a locale directory!" << std::endl;
+ }
+
}
static float calcDisplayDensity()
{
- const char* current_display = getenv("DISPLAY");
+ const char *current_display = getenv("DISPLAY");
if (current_display != NULL) {
- Display * x11display = XOpenDisplay(current_display);
+ Display *x11display = XOpenDisplay(current_display);
- if (x11display != NULL) {
- /* try x direct */
- float dpi_height =
- floor(DisplayHeight(x11display, 0) /
- (DisplayHeightMM(x11display, 0) * 0.039370) + 0.5);
- float dpi_width =
- floor(DisplayWidth(x11display, 0) /
- (DisplayWidthMM(x11display, 0) * 0.039370) +0.5);
+ if (x11display != NULL) {
+ /* try x direct */
+ float dpi_height = floor(DisplayHeight(x11display, 0) /
+ (DisplayHeightMM(x11display, 0) * 0.039370) + 0.5);
+ float dpi_width = floor(DisplayWidth(x11display, 0) /
+ (DisplayWidthMM(x11display, 0) * 0.039370) + 0.5);
- XCloseDisplay(x11display);
+ XCloseDisplay(x11display);
- return std::max(dpi_height,dpi_width) / 96.0;
- }
+ return std::max(dpi_height,dpi_width) / 96.0;
}
+ }
/* return manually specified dpi */
return g_settings->getFloat("screen_dpi")/96.0;