X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fporting.cpp;h=ad942b0bc32c5ba75da9d797fb8b2ad92e3a9cde;hb=8852333eb3042580592ade478e5def20f8ed5d4c;hp=84df15b3093d166670a3b268e6c2354ad899989f;hpb=22e186b4aa88b585e71500c4e9a03bf69b0b6191;p=oweals%2Fminetest.git diff --git a/src/porting.cpp b/src/porting.cpp index 84df15b30..ad942b0bc 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -23,29 +23,28 @@ with this program; if not, write to the Free Software Foundation, Inc., See comments in porting.h */ -#if defined(linux) - #include -#elif defined(__APPLE__) - #include - #include -#elif defined(__FreeBSD__) - #include +#include "porting.h" + +#if defined(__FreeBSD__) #include #include +#elif defined(_WIN32) + #include +#endif +#if !defined(_WIN32) + #include + #include #endif -#include "porting.h" #include "config.h" #include "debug.h" #include "filesys.h" #include "log.h" #include "util/string.h" +#include "main.h" +#include "settings.h" #include -#ifdef __APPLE__ - #include "CoreFoundation/CoreFoundation.h" -#endif - namespace porting { @@ -168,6 +167,7 @@ int getNumberOfProcessors() { } +#ifndef __ANDROID__ bool threadBindToProcessor(threadid_t tid, int pnumber) { #if defined(_WIN32) @@ -191,11 +191,11 @@ bool threadBindToProcessor(threadid_t tid, int pnumber) { #elif defined(__sun) || defined(sun) - return processor_bind(P_LWPID, MAKE_LWPID_PTHREAD(tid), + 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) @@ -204,11 +204,11 @@ bool threadBindToProcessor(threadid_t tid, int pnumber) { 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, @@ -220,7 +220,7 @@ bool threadBindToProcessor(threadid_t tid, int pnumber) { #endif } - +#endif bool threadSetPriority(threadid_t tid, int prio) { #if defined(_WIN32) @@ -233,21 +233,21 @@ bool threadSetPriority(threadid_t tid, int prio) { 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 } @@ -284,6 +284,42 @@ bool detectMSVCBuildDir(char *c_path) return (removeStringEnd(path, ends) != ""); } +std::string get_sysinfo() +{ +#ifdef _WIN32 + OSVERSIONINFO osvi; + std::ostringstream oss; + std::string tmp; + ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&osvi); + tmp = osvi.szCSDVersion; + std::replace(tmp.begin(), tmp.end(), ' ', '_'); + + oss << "Windows/" << osvi.dwMajorVersion << "." + << osvi.dwMinorVersion; + if(osvi.szCSDVersion[0]) + oss << "-" << tmp; + oss << " "; + #ifdef _WIN64 + oss << "x86_64"; + #else + BOOL is64 = FALSE; + if(IsWow64Process(GetCurrentProcess(), &is64) && is64) + oss << "x86_64"; // 32-bit app on 64-bit OS + else + oss << "x86"; + #endif + + return oss.str(); +#else + struct utsname osinfo; + uname(&osinfo); + return std::string(osinfo.sysname) + "/" + + osinfo.release + " " + osinfo.machine; +#endif +} + void initializePaths() { #if RUN_IN_PLACE @@ -373,8 +409,13 @@ void initializePaths() //TODO: Get path of executable. This assumes working directory is bin/ dstream<<"WARNING: Relative path not properly supported on this platform" <::const_iterator i = trylist.begin(); i != trylist.end(); i++) { const std::string &trypath = *i; - if(!fs::PathExists(trypath) || !fs::PathExists(trypath + "/builtin")){ + if(!fs::PathExists(trypath) || !fs::PathExists(trypath + DIR_DELIM + "builtin")){ dstream<<"WARNING: system-wide share not found at \"" <getVideoDriver()->getScreenSize(); +} + +#ifndef __ANDROID__ + +float getDisplayDensity() { + float gui_scaling = g_settings->getFloat("gui_scaling"); + // using Y here feels like a bug, this needs to be discussed later! + if (getWindowSize().Y <= 800) { + return (2.0/3.0) * gui_scaling; + } + if (getWindowSize().Y <= 1280) { + return 1.0 * gui_scaling; + } + + return (4.0/3.0) * gui_scaling; +} + +v2u32 getDisplaySize() { + IrrlichtDevice *nulldevice = createDevice(video::EDT_NULL); + + core::dimension2d deskres = nulldevice->getVideoModeList()->getDesktopResolution(); + nulldevice -> drop(); + + return deskres; +} +#endif +#endif + } //namespace porting