about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/include/env.h230
-rw-r--r--src/tools/env.c124
2 files changed, 187 insertions, 167 deletions
diff --git a/src/include/env.h b/src/include/env.h
index db4974bd..ff8961c6 100644
--- a/src/include/env.h
+++ b/src/include/env.h
@@ -14,11 +14,11 @@
     }
 
 /*
-    INTEGER(NAME, name, default, min, max)
-    INTEGER64(NAME, name, default)
-    BOOLEAN(NAME, name, default)
-    ADDRESS(NAME, name)
-    STRING(NAME, name)
+    INTEGER(NAME, name, default, min, max, wine)
+    INTEGER64(NAME, name, default, wine)
+    BOOLEAN(NAME, name, default, wine)
+    ADDRESS(NAME, name, wine)
+    STRING(NAME, name, wine)
 */
 
 #ifdef _WIN32
@@ -30,117 +30,117 @@ extern char* ftrace_name;
 #define BOX64_NOBANNER_DEFAULT (isatty(fileno(stdout)) ? 0 : 1)
 #endif
 
-#define ENVSUPER1()                                                        \
-    STRING(BOX64_ADDLIBS, addlibs)                                         \
-    BOOLEAN(BOX64_ALLOWMISSINGLIBS, allow_missing_libs, 0)                 \
-    STRING(BOX64_ARGS, args)                                               \
-    STRING(BOX64_BASH, bash)                                               \
-    BOOLEAN(BOX64_CEFDISABLEGPU, cefdisablegpu, 0)                         \
-    BOOLEAN(BOX64_CEFDISABLEGPUCOMPOSITOR, cefdisablegpucompositor, 0)     \
-    INTEGER(BOX64_CPUTYPE, cputype, 0, 0, 1)                               \
-    BOOLEAN(BOX64_CRASHHANDLER, dummy_crashhandler, 1)                     \
-    BOOLEAN(BOX64_DLSYM_ERROR, dlsym_error, 0)                             \
-    BOOLEAN(BOX64_DUMP, dump, 0)                                           \
-    BOOLEAN(BOX64_DYNAREC_ALIGNED_ATOMICS, dynarec_aligned_atomics, 0)     \
-    INTEGER(BOX64_DYNAREC_BIGBLOCK, dynarec_bigblock, 2, 0, 3)             \
-    BOOLEAN(BOX64_DYNAREC_BLEEDING_EDGE, dynarec_bleeding_edge, 1)         \
-    INTEGER(BOX64_DYNAREC_CALLRET, dynarec_callret, 0, 0, 2)               \
-    BOOLEAN(BOX64_DYNAREC_DF, dynarec_df, 1)                               \
-    INTEGER(BOX64_DYNAREC_DIRTY, dynarec_dirty, 0, 0, 2)                   \
-    BOOLEAN(BOX64_DYNAREC_DIV0, dynarec_div0, 0)                           \
-    INTEGER(BOX64_DYNAREC_DUMP, dynarec_dump, 0, 0, 2)                     \
-    STRING(BOX64_DYNAREC_DUMP_RANGE, dynarec_dump_range)                   \
-    BOOLEAN(BOX64_DYNAREC_FASTNAN, dynarec_fastnan, 1)                     \
-    INTEGER(BOX64_DYNAREC_FASTROUND, dynarec_fastround, 1, 0, 2)           \
-    INTEGER(BOX64_DYNAREC_FORWARD, dynarec_forward, 128, 0, 1024)          \
-    STRING(BOX64_DYNAREC_GDBJIT, dynarec_gdbjit_str)                       \
-    INTEGER(BOX64_DYNAREC_LOG, dynarec_log, 0, 0, 3)                       \
-    INTEGER(BOX64_DYNAREC_MISSING, dynarec_missing, 0, 0, 2)               \
-    BOOLEAN(BOX64_DYNAREC_NATIVEFLAGS, dynarec_nativeflags, 1)             \
-    INTEGER(BOX64_DYNAREC_PAUSE, dynarec_pause, 0, 0, 3)                   \
-    BOOLEAN(BOX64_DYNAREC_PERFMAP, dynarec_perf_map, 0)                    \
-    INTEGER(BOX64_DYNAREC_SAFEFLAGS, dynarec_safeflags, 1, 0, 2)           \
-    INTEGER(BOX64_DYNAREC_STRONGMEM, dynarec_strongmem, 0, 0, 3)           \
-    BOOLEAN(BOX64_DYNAREC_TBB, dynarec_tbb, 1)                             \
-    STRING(BOX64_DYNAREC_TEST, dynarec_test_str)                           \
-    BOOLEAN(BOX64_DYNAREC_TRACE, dynarec_trace, 0)                         \
-    BOOLEAN(BOX64_DYNAREC_VOLATILE_METADATA, dynarec_volatile_metadata, 1) \
-    BOOLEAN(BOX64_DYNAREC_WAIT, dynarec_wait, 1)                           \
-    INTEGER(BOX64_DYNAREC_WEAKBARRIER, dynarec_weakbarrier, 1, 0, 2)       \
-    INTEGER(BOX64_DYNAREC_X87DOUBLE, dynarec_x87double, 0, 0, 2)           \
-    STRING(BOX64_EMULATED_LIBS, emulated_libs)                             \
-    STRING(BOX64_ENV, env)                                                 \
-    STRING(BOX64_ENV1, env1)                                               \
-    STRING(BOX64_ENV2, env2)                                               \
-    STRING(BOX64_ENV3, env3)                                               \
-    STRING(BOX64_ENV4, env4)                                               \
-    STRING(BOX64_ENV5, env5)                                               \
-    BOOLEAN(BOX64_EXIT, exit, 0)                                           \
-    BOOLEAN(BOX64_FIX_64BIT_INODES, fix_64bit_inodes, 0)                   \
-    BOOLEAN(BOX64_IGNOREINT3, ignoreint3, 0)                               \
-    STRING(BOX64_INSERT_ARGS, insert_args)                                 \
-    BOOLEAN(BOX64_INPROCESSGPU, inprocessgpu, 0)                           \
-    INTEGER(BOX64_JITGDB, jitgdb, 0, 0, 3)                                 \
-    BOOLEAN(BOX64_JVM, jvm, 1)                                             \
-    STRING(BOX64_LD_LIBRARY_PATH, ld_library_path)                         \
-    BOOLEAN(BOX64_LIBCEF, libcef, 1)                                       \
-    STRING(BOX64_LIBGL, libgl)                                             \
-    ADDRESS(BOX64_LOAD_ADDR, load_addr)                                    \
-    INTEGER(BOX64_LOG, log, DEFAULT_LOG_LEVEL, 0, 3)                       \
-    INTEGER(BOX64_MALLOC_HACK, malloc_hack, 0, 0, 2)                       \
-    INTEGER(BOX64_MAXCPU, new_maxcpu, 0, 0, 100)                           \
-    BOOLEAN(BOX64_MMAP32, mmap32, 1)                                       \
-    BOOLEAN(BOX64_NOBANNER, nobanner, BOX64_NOBANNER_DEFAULT)              \
-    STRING(BOX64_NODYNAREC, nodynarec)                                     \
-    BOOLEAN(BOX64_NOGTK, nogtk, 0)                                         \
-    BOOLEAN(BOX64_NOPULSE, nopulse, 0)                                     \
-    BOOLEAN(BOX64_NORCFILES, noenvfiles, 0)                                \
-    BOOLEAN(BOX64_NOSANDBOX, nosandbox, 0)                                 \
-    BOOLEAN(BOX64_NOSIGSEGV, nosigsegv, 0)                                 \
-    BOOLEAN(BOX64_NOSIGILL, nosigill, 0)                                   \
-    BOOLEAN(BOX64_NOVULKAN, novulkan, 0)                                   \
-    STRING(BOX64_PATH, path)                                               \
-    BOOLEAN(BOX64_PREFER_EMULATED, prefer_emulated, 0)                     \
-    BOOLEAN(BOX64_PREFER_WRAPPED, prefer_wrapped, 0)                       \
-    STRING(BOX64_RCFILE, envfile)                                          \
-    BOOLEAN(BOX64_RDTSC_1GHZ, rdtsc_1ghz, 0)                               \
-    BOOLEAN(BOX64_RESERVE_HIGH, reserve_high, 0)                           \
-    INTEGER(BOX64_ROLLING_LOG, cycle_log, 0, 0, 2048)                      \
-    BOOLEAN(BOX64_SDL2_JGUID, sdl2_jguid, 0)                               \
-    BOOLEAN(BOX64_SHAEXT, shaext, 1)                                       \
-    BOOLEAN(BOX64_SHOWBT, showbt, 0)                                       \
-    BOOLEAN(BOX64_SHOWSEGV, showsegv, 0)                                   \
-    BOOLEAN(BOX64_SSE_FLUSHTO0, sse_flushto0, 0)                           \
-    BOOLEAN(BOX64_SSE42, sse42, 1)                                         \
-    BOOLEAN(BOX64_SYNC_ROUNDING, sync_rounding, 0)                         \
-    BOOLEAN(BOX64_TRACE_COLOR, trace_regsdiff, 0)                          \
-    BOOLEAN(BOX64_TRACE_EMM, trace_emm, 0)                                 \
-    STRING(BOX64_TRACE_FILE, trace_file)                                   \
-    STRING(BOX64_TRACE_INIT, trace_init)                                   \
-    INTEGER64(BOX64_TRACE_START, start_cnt, 0)                             \
-    BOOLEAN(BOX64_TRACE_XMM, trace_xmm, 0)                                 \
-    STRING(BOX64_TRACE, trace)                                             \
-    BOOLEAN(BOX64_UNITYPLAYER, unityplayer, 1)                             \
-    BOOLEAN(BOX64_WRAP_EGL, wrap_egl, 0)                                   \
-    BOOLEAN(BOX64_X11GLX, x11glx, 1)                                       \
-    BOOLEAN(BOX64_X11SYNC, x11sync, 0)                                     \
-    BOOLEAN(BOX64_X11THREADS, x11threads, 0)                               \
-    BOOLEAN(BOX64_X87_NO80BITS, x87_no80bits, 0)
+#define ENVSUPER1()                                                           \
+    STRING(BOX64_ADDLIBS, addlibs, 0)                                         \
+    BOOLEAN(BOX64_ALLOWMISSINGLIBS, allow_missing_libs, 0, 0)                 \
+    STRING(BOX64_ARGS, args, 0)                                               \
+    STRING(BOX64_BASH, bash, 0)                                               \
+    BOOLEAN(BOX64_CEFDISABLEGPU, cefdisablegpu, 0, 0)                         \
+    BOOLEAN(BOX64_CEFDISABLEGPUCOMPOSITOR, cefdisablegpucompositor, 0, 0)     \
+    INTEGER(BOX64_CPUTYPE, cputype, 0, 0, 1, 1)                               \
+    BOOLEAN(BOX64_CRASHHANDLER, dummy_crashhandler, 1, 0)                     \
+    BOOLEAN(BOX64_DLSYM_ERROR, dlsym_error, 0, 0)                             \
+    BOOLEAN(BOX64_DUMP, dump, 0, 1)                                           \
+    BOOLEAN(BOX64_DYNAREC_ALIGNED_ATOMICS, dynarec_aligned_atomics, 0, 1)     \
+    INTEGER(BOX64_DYNAREC_BIGBLOCK, dynarec_bigblock, 2, 0, 3, 1)             \
+    BOOLEAN(BOX64_DYNAREC_BLEEDING_EDGE, dynarec_bleeding_edge, 1, 0)         \
+    INTEGER(BOX64_DYNAREC_CALLRET, dynarec_callret, 0, 0, 2, 1)               \
+    BOOLEAN(BOX64_DYNAREC_DF, dynarec_df, 1, 1)                               \
+    INTEGER(BOX64_DYNAREC_DIRTY, dynarec_dirty, 0, 0, 2, 0)                   \
+    BOOLEAN(BOX64_DYNAREC_DIV0, dynarec_div0, 0, 1)                           \
+    INTEGER(BOX64_DYNAREC_DUMP, dynarec_dump, 0, 0, 2, 1)                     \
+    STRING(BOX64_DYNAREC_DUMP_RANGE, dynarec_dump_range, 1)                   \
+    BOOLEAN(BOX64_DYNAREC_FASTNAN, dynarec_fastnan, 1, 1)                     \
+    INTEGER(BOX64_DYNAREC_FASTROUND, dynarec_fastround, 1, 0, 2, 1)           \
+    INTEGER(BOX64_DYNAREC_FORWARD, dynarec_forward, 128, 0, 1024, 1)          \
+    STRING(BOX64_DYNAREC_GDBJIT, dynarec_gdbjit_str, 0)                       \
+    INTEGER(BOX64_DYNAREC_LOG, dynarec_log, 0, 0, 3, 1)                       \
+    INTEGER(BOX64_DYNAREC_MISSING, dynarec_missing, 0, 0, 2, 1)               \
+    BOOLEAN(BOX64_DYNAREC_NATIVEFLAGS, dynarec_nativeflags, 1, 1)             \
+    INTEGER(BOX64_DYNAREC_PAUSE, dynarec_pause, 0, 0, 3, 1)                   \
+    BOOLEAN(BOX64_DYNAREC_PERFMAP, dynarec_perf_map, 0, 0)                    \
+    INTEGER(BOX64_DYNAREC_SAFEFLAGS, dynarec_safeflags, 1, 0, 2, 1)           \
+    INTEGER(BOX64_DYNAREC_STRONGMEM, dynarec_strongmem, 0, 0, 3, 1)           \
+    BOOLEAN(BOX64_DYNAREC_TBB, dynarec_tbb, 1, 0)                             \
+    STRING(BOX64_DYNAREC_TEST, dynarec_test_str, 1)                           \
+    BOOLEAN(BOX64_DYNAREC_TRACE, dynarec_trace, 0, 0)                         \
+    BOOLEAN(BOX64_DYNAREC_VOLATILE_METADATA, dynarec_volatile_metadata, 1, 0) \
+    BOOLEAN(BOX64_DYNAREC_WAIT, dynarec_wait, 1, 1)                           \
+    INTEGER(BOX64_DYNAREC_WEAKBARRIER, dynarec_weakbarrier, 1, 0, 2, 1)       \
+    INTEGER(BOX64_DYNAREC_X87DOUBLE, dynarec_x87double, 0, 0, 2, 1)           \
+    STRING(BOX64_EMULATED_LIBS, emulated_libs, 0)                             \
+    STRING(BOX64_ENV, env, 0)                                                 \
+    STRING(BOX64_ENV1, env1, 0)                                               \
+    STRING(BOX64_ENV2, env2, 0)                                               \
+    STRING(BOX64_ENV3, env3, 0)                                               \
+    STRING(BOX64_ENV4, env4, 0)                                               \
+    STRING(BOX64_ENV5, env5, 0)                                               \
+    BOOLEAN(BOX64_EXIT, exit, 0, 0)                                           \
+    BOOLEAN(BOX64_FIX_64BIT_INODES, fix_64bit_inodes, 0, 0)                   \
+    BOOLEAN(BOX64_IGNOREINT3, ignoreint3, 0, 0)                               \
+    STRING(BOX64_INSERT_ARGS, insert_args, 0)                                 \
+    BOOLEAN(BOX64_INPROCESSGPU, inprocessgpu, 0, 0)                           \
+    INTEGER(BOX64_JITGDB, jitgdb, 0, 0, 3, 0)                                 \
+    BOOLEAN(BOX64_JVM, jvm, 1, 0)                                             \
+    STRING(BOX64_LD_LIBRARY_PATH, ld_library_path, 0)                         \
+    BOOLEAN(BOX64_LIBCEF, libcef, 1, 0)                                       \
+    STRING(BOX64_LIBGL, libgl, 0)                                             \
+    ADDRESS(BOX64_LOAD_ADDR, load_addr, 0)                                    \
+    INTEGER(BOX64_LOG, log, DEFAULT_LOG_LEVEL, 0, 3, 1)                       \
+    INTEGER(BOX64_MALLOC_HACK, malloc_hack, 0, 0, 2, 0)                       \
+    INTEGER(BOX64_MAXCPU, new_maxcpu, 0, 0, 100, 1)                           \
+    BOOLEAN(BOX64_MMAP32, mmap32, 1, 0)                                       \
+    BOOLEAN(BOX64_NOBANNER, nobanner, BOX64_NOBANNER_DEFAULT, 1)              \
+    STRING(BOX64_NODYNAREC, nodynarec, 1)                                     \
+    BOOLEAN(BOX64_NOGTK, nogtk, 0, 0)                                         \
+    BOOLEAN(BOX64_NOPULSE, nopulse, 0, 0)                                     \
+    BOOLEAN(BOX64_NORCFILES, noenvfiles, 0, 0)                                \
+    BOOLEAN(BOX64_NOSANDBOX, nosandbox, 0, 0)                                 \
+    BOOLEAN(BOX64_NOSIGSEGV, nosigsegv, 0, 0)                                 \
+    BOOLEAN(BOX64_NOSIGILL, nosigill, 0, 0)                                   \
+    BOOLEAN(BOX64_NOVULKAN, novulkan, 0, 0)                                   \
+    STRING(BOX64_PATH, path, 0)                                               \
+    BOOLEAN(BOX64_PREFER_EMULATED, prefer_emulated, 0, 0)                     \
+    BOOLEAN(BOX64_PREFER_WRAPPED, prefer_wrapped, 0, 0)                       \
+    STRING(BOX64_RCFILE, envfile, 0)                                          \
+    BOOLEAN(BOX64_RDTSC_1GHZ, rdtsc_1ghz, 0, 0)                               \
+    BOOLEAN(BOX64_RESERVE_HIGH, reserve_high, 0, 0)                           \
+    INTEGER(BOX64_ROLLING_LOG, cycle_log, 0, 0, 2048, 0)                      \
+    BOOLEAN(BOX64_SDL2_JGUID, sdl2_jguid, 0, 0)                               \
+    BOOLEAN(BOX64_SHAEXT, shaext, 1, 0)                                       \
+    BOOLEAN(BOX64_SHOWBT, showbt, 0, 0)                                       \
+    BOOLEAN(BOX64_SHOWSEGV, showsegv, 0, 0)                                   \
+    BOOLEAN(BOX64_SSE_FLUSHTO0, sse_flushto0, 0, 1)                           \
+    BOOLEAN(BOX64_SSE42, sse42, 1, 1)                                         \
+    BOOLEAN(BOX64_SYNC_ROUNDING, sync_rounding, 0, 0)                         \
+    BOOLEAN(BOX64_TRACE_COLOR, trace_regsdiff, 0, 0)                          \
+    BOOLEAN(BOX64_TRACE_EMM, trace_emm, 0, 0)                                 \
+    STRING(BOX64_TRACE_FILE, trace_file, 0)                                   \
+    STRING(BOX64_TRACE_INIT, trace_init, 0)                                   \
+    INTEGER64(BOX64_TRACE_START, start_cnt, 0, 0)                             \
+    BOOLEAN(BOX64_TRACE_XMM, trace_xmm, 0, 0)                                 \
+    STRING(BOX64_TRACE, trace, 0)                                             \
+    BOOLEAN(BOX64_UNITYPLAYER, unityplayer, 1, 0)                             \
+    BOOLEAN(BOX64_WRAP_EGL, wrap_egl, 0, 0)                                   \
+    BOOLEAN(BOX64_X11GLX, x11glx, 1, 0)                                       \
+    BOOLEAN(BOX64_X11SYNC, x11sync, 0, 0)                                     \
+    BOOLEAN(BOX64_X11THREADS, x11threads, 0, 0)                               \
+    BOOLEAN(BOX64_X87_NO80BITS, x87_no80bits, 0, 1)
 
 #ifdef ARM64
 #define ENVSUPER2() \
-    INTEGER(BOX64_AVX, avx, 2, 0, 2)
+    INTEGER(BOX64_AVX, avx, 2, 0, 2, 1)
 #else
 #define ENVSUPER2() \
-    INTEGER(BOX64_AVX, avx, 0, 0, 2)
+    INTEGER(BOX64_AVX, avx, 0, 0, 2, 1)
 #endif
 
 #ifdef DYNAREC
 #define ENVSUPER3() \
-    BOOLEAN(BOX64_DYNAREC, dynarec, 1)
+    BOOLEAN(BOX64_DYNAREC, dynarec, 1, 1)
 #else
 #define ENVSUPER3() \
-    BOOLEAN(BOX64_DYNAREC, dynarec, 0)
+    BOOLEAN(BOX64_DYNAREC, dynarec, 0, 1)
 #endif
 
 #define ENVSUPER() \
@@ -149,11 +149,11 @@ extern char* ftrace_name;
     ENVSUPER3()
 
 typedef struct box64env_s {
-#define INTEGER(NAME, name, default, min, max) int name;
-#define INTEGER64(NAME, name, default)         int64_t name;
-#define BOOLEAN(NAME, name, default)           int name;
-#define ADDRESS(NAME, name)                    uintptr_t name;
-#define STRING(NAME, name)                     char* name;
+#define INTEGER(NAME, name, default, min, max, wine) int name;
+#define INTEGER64(NAME, name, default, wine)         int64_t name;
+#define BOOLEAN(NAME, name, default, wine)           int name;
+#define ADDRESS(NAME, name, wine)                    uintptr_t name;
+#define STRING(NAME, name, wine)                     char* name;
     ENVSUPER()
 #undef INTEGER
 #undef INTEGER64
@@ -161,11 +161,11 @@ typedef struct box64env_s {
 #undef ADDRESS
 #undef STRING
 
-#define INTEGER(NAME, name, default, min, max) uint64_t is_##name##_overridden : 1;
-#define INTEGER64(NAME, name, default)         uint64_t is_##name##_overridden : 1;
-#define BOOLEAN(NAME, name, default)           uint64_t is_##name##_overridden : 1;
-#define ADDRESS(NAME, name)                    uint64_t is_##name##_overridden : 1;
-#define STRING(NAME, name)                     uint64_t is_##name##_overridden : 1;
+#define INTEGER(NAME, name, default, min, max, wine) uint64_t is_##name##_overridden : 1;
+#define INTEGER64(NAME, name, default, wine)         uint64_t is_##name##_overridden : 1;
+#define BOOLEAN(NAME, name, default, wine)           uint64_t is_##name##_overridden : 1;
+#define ADDRESS(NAME, name, wine)                    uint64_t is_##name##_overridden : 1;
+#define STRING(NAME, name, wine)                     uint64_t is_##name##_overridden : 1;
     ENVSUPER()
 #undef INTEGER
 #undef INTEGER64
diff --git a/src/tools/env.c b/src/tools/env.c
index 4b512693..5e0a1de4 100644
--- a/src/tools/env.c
+++ b/src/tools/env.c
@@ -232,11 +232,11 @@ static void trimStringInplace(char* s)
 
 static void freeEnv(box64env_t* env)
 {
-#define INTEGER(NAME, name, default, min, max)
-#define INTEGER64(NAME, name, default)
-#define BOOLEAN(NAME, name, default)
-#define ADDRESS(NAME, name)
-#define STRING(NAME, name) box_free(env->name);
+#define INTEGER(NAME, name, default, min, max, wine)
+#define INTEGER64(NAME, name, default, wine)
+#define BOOLEAN(NAME, name, default, wine)
+#define ADDRESS(NAME, name, wine)
+#define STRING(NAME, name, wine) box_free(env->name);
     ENVSUPER()
 #undef INTEGER
 #undef INTEGER64
@@ -324,17 +324,17 @@ static void initializeEnvFile(const char* filename)
             *strchr(key, '=') = '\0';
             trimStringInplace(key);
             trimStringInplace(val);
-#define INTEGER(NAME, name, default, min, max)      \
-    else if (!strcmp(key, #NAME))                   \
-    {                                               \
-        int v = strtol(val, &p, 0);                 \
-        if (p != val && v >= min && v <= max) {     \
-            current_env.is_##name##_overridden = 1; \
-            current_env.is_any_overridden = 1;      \
-            current_env.name = v;                   \
-        }                                           \
-    }
-#define INTEGER64(NAME, name, default)              \
+#define INTEGER(NAME, name, default, min, max, wine) \
+    else if (!strcmp(key, #NAME))                    \
+    {                                                \
+        int v = strtol(val, &p, 0);                  \
+        if (p != val && v >= min && v <= max) {      \
+            current_env.is_##name##_overridden = 1;  \
+            current_env.is_any_overridden = 1;       \
+            current_env.name = v;                    \
+        }                                            \
+    }
+#define INTEGER64(NAME, name, default, wine)        \
     else if (!strcmp(key, #NAME))                   \
     {                                               \
         int64_t v = strtoll(val, &p, 0);            \
@@ -344,7 +344,7 @@ static void initializeEnvFile(const char* filename)
             current_env.name = v;                   \
         }                                           \
     }
-#define BOOLEAN(NAME, name, default)                \
+#define BOOLEAN(NAME, name, default, wine)          \
     else if (!strcmp(key, #NAME))                   \
     {                                               \
         if (strcmp(val, "0")) {                     \
@@ -357,7 +357,7 @@ static void initializeEnvFile(const char* filename)
             current_env.name = 0;                   \
         }                                           \
     }
-#define ADDRESS(NAME, name)                           \
+#define ADDRESS(NAME, name, wine)                     \
     else if (!strcmp(key, #NAME))                     \
     {                                                 \
         uintptr_t v = (uintptr_t)strtoll(val, &p, 0); \
@@ -367,7 +367,7 @@ static void initializeEnvFile(const char* filename)
             current_env.name = v;                     \
         }                                             \
     }
-#define STRING(NAME, name)                                \
+#define STRING(NAME, name, wine)                          \
     else if (!strcmp(key, #NAME))                         \
     {                                                     \
         current_env.is_##name##_overridden = 1;           \
@@ -436,31 +436,31 @@ const char* GetLastApplyEntryName()
 }
 static void internalApplyEnvFileEntry(const char* entryname, const box64env_t* env)
 {
-#define INTEGER(NAME, name, default, min, max) \
-    if (env->is_##name##_overridden) {         \
-        box64env.name = env->name;             \
-        box64env.is_##name##_overridden = 1;   \
-        box64env.is_any_overridden = 1;        \
+#define INTEGER(NAME, name, default, min, max, wine) \
+    if (env->is_##name##_overridden) {               \
+        box64env.name = env->name;                   \
+        box64env.is_##name##_overridden = 1;         \
+        box64env.is_any_overridden = 1;              \
     }
-#define INTEGER64(NAME, name, default)       \
+#define INTEGER64(NAME, name, default, wine) \
     if (env->is_##name##_overridden) {       \
         box64env.name = env->name;           \
         box64env.is_##name##_overridden = 1; \
         box64env.is_any_overridden = 1;      \
     }
-#define BOOLEAN(NAME, name, default)         \
+#define BOOLEAN(NAME, name, default, wine)   \
     if (env->is_##name##_overridden) {       \
         box64env.name = env->name;           \
         box64env.is_##name##_overridden = 1; \
         box64env.is_any_overridden = 1;      \
     }
-#define ADDRESS(NAME, name)                  \
+#define ADDRESS(NAME, name, wine)            \
     if (env->is_##name##_overridden) {       \
         box64env.name = env->name;           \
         box64env.is_##name##_overridden = 1; \
         box64env.is_any_overridden = 1;      \
     }
-#define STRING(NAME, name)                   \
+#define STRING(NAME, name, wine)             \
     if (env->is_##name##_overridden) {       \
         box64env.name = env->name;           \
         box64env.is_##name##_overridden = 1; \
@@ -504,22 +504,42 @@ void ApplyEnvFileEntry(const char* entryname)
 
 void LoadEnvVariables()
 {
-#define INTEGER(NAME, name, default, min, max) box64env.name = default;
-#define INTEGER64(NAME, name, default)         box64env.name = default;
-#define BOOLEAN(NAME, name, default)           box64env.name = default;
-#define ADDRESS(NAME, name)                    box64env.name = 0;
-#define STRING(NAME, name)                     box64env.name = NULL;
+#ifdef _WIN32
+#define INTEGER(NAME, name, default, min, max, wine) box64env.name = wine ? default : 0;
+#define INTEGER64(NAME, name, default, wine)         box64env.name = wine ? default : 0;
+#define BOOLEAN(NAME, name, default, wine)           box64env.name = wine ? default : 0;
+#define ADDRESS(NAME, name, wine)                    box64env.name = 0;
+#define STRING(NAME, name, wine)                     box64env.name = NULL;
     ENVSUPER()
 #undef INTEGER
 #undef INTEGER64
 #undef BOOLEAN
 #undef ADDRESS
 #undef STRING
-
+#else
+#define INTEGER(NAME, name, default, min, max, wine) box64env.name = default;
+#define INTEGER64(NAME, name, default, wine)         box64env.name = default;
+#define BOOLEAN(NAME, name, default, wine)           box64env.name = default;
+#define ADDRESS(NAME, name, wine)                    box64env.name = 0;
+#define STRING(NAME, name, wine)                     box64env.name = NULL;
+    ENVSUPER()
+#undef INTEGER
+#undef INTEGER64
+#undef BOOLEAN
+#undef ADDRESS
+#undef STRING
+#endif
     char* p;
     // load env vars from GetEnv()
-#define INTEGER(NAME, name, default, min, max)            \
-    p = GetEnv(#NAME);                                    \
+
+#ifdef _WIN32
+#define GETENV(name, wine) (wine ? GetEnv(name) : NULL);
+#else
+#define GETENV(name, wine) GetEnv(name)
+#endif
+
+#define INTEGER(NAME, name, default, min, max, wine)      \
+    p = GETENV(#NAME, wine);                              \
     if (p) {                                              \
         box64env.name = atoi(p);                          \
         if (box64env.name < min || box64env.name > max) { \
@@ -529,30 +549,30 @@ void LoadEnvVariables()
             box64env.is_any_overridden = 1;               \
         }                                                 \
     }
-#define INTEGER64(NAME, name, default)       \
-    p = GetEnv(#NAME);                       \
+#define INTEGER64(NAME, name, default, wine) \
+    p = GETENV(#NAME, wine);                 \
     if (p) {                                 \
         box64env.name = atoll(p);            \
         box64env.is_##name##_overridden = 1; \
         box64env.is_any_overridden = 1;      \
     }
-#define BOOLEAN(NAME, name, default)         \
-    p = GetEnv(#NAME);                       \
+#define BOOLEAN(NAME, name, default, wine)   \
+    p = GETENV(#NAME, wine);                 \
     if (p) {                                 \
         box64env.name = p[0] != '0';         \
         box64env.is_##name##_overridden = 1; \
         box64env.is_any_overridden = 1;      \
     }
-#define ADDRESS(NAME, name)                                \
-    p = GetEnv(#NAME);                                     \
+#define ADDRESS(NAME, name, wine)                          \
+    p = GETENV(#NAME, wine);                               \
     if (p) {                                               \
         char* endptr;                                      \
         box64env.name = (uintptr_t)strtoll(p, &endptr, 0); \
         box64env.is_##name##_overridden = 1;               \
         box64env.is_any_overridden = 1;                    \
     }
-#define STRING(NAME, name)                   \
-    p = GetEnv(#NAME);                       \
+#define STRING(NAME, name, wine)             \
+    p = GETENV(#NAME, wine);                 \
     if (p) {                                 \
         box64env.name = strdup(p);           \
         box64env.is_##name##_overridden = 1; \
@@ -570,19 +590,19 @@ void LoadEnvVariables()
 void PrintEnvVariables(box64env_t* env, int level)
 {
     if (env->is_any_overridden) printf_log(level, "BOX64ENV: Variables overridden:\n");
-#define INTEGER(NAME, name, default, min, max) \
-    if (env->is_##name##_overridden)           \
+#define INTEGER(NAME, name, default, min, max, wine) \
+    if (env->is_##name##_overridden)                 \
         printf_log_prefix(0, level, "\t%s=%d\n", #NAME, env->name);
-#define INTEGER64(NAME, name, default) \
-    if (env->is_##name##_overridden)   \
+#define INTEGER64(NAME, name, default, wine) \
+    if (env->is_##name##_overridden)         \
         printf_log_prefix(0, level, "\t%s=%lld\n", #NAME, env->name);
-#define BOOLEAN(NAME, name, default) \
-    if (env->is_##name##_overridden) \
+#define BOOLEAN(NAME, name, default, wine) \
+    if (env->is_##name##_overridden)       \
         printf_log_prefix(0, level, "\t%s=%d\n", #NAME, env->name);
-#define ADDRESS(NAME, name)          \
+#define ADDRESS(NAME, name, wine)    \
     if (env->is_##name##_overridden) \
         printf_log_prefix(0, level, "\t%s=%p\n", #NAME, (void*)env->name);
-#define STRING(NAME, name)           \
+#define STRING(NAME, name, wine)     \
     if (env->is_##name##_overridden) \
         printf_log_prefix(0, level, "\t%s=%s\n", #NAME, env->name);
     ENVSUPER()