From 12802f12e30f57c2a9eefca2c1a5955275c95127 Mon Sep 17 00:00:00 2001
From: psychocrypt <psychocrypt@users.noreply.github.com>
Date: Thu, 26 Oct 2017 20:58:27 +0200
Subject: [PATCH] rename `xmr` to `monero`

- rename all `xmr` to `monero`
- be insensitive while check for set currency
- add function to compate two strings insensitive
---
 CMakeLists.txt                                | 12 ++--
 doc/FAQ.md                                    |  2 +-
 doc/compile.md                                |  2 +-
 doc/usage.md                                  |  2 +-
 xmrstak/backend/amd/amd_gpu/gpu.cpp           | 12 ++--
 xmrstak/backend/amd/autoAdjust.hpp            |  8 +--
 xmrstak/backend/amd/minethd.cpp               |  2 +-
 xmrstak/backend/cpu/autoAdjust.hpp            |  6 +-
 xmrstak/backend/cpu/autoAdjustHwloc.hpp       |  6 +-
 xmrstak/backend/cpu/crypto/cryptonight.h      |  2 +-
 .../backend/cpu/crypto/cryptonight_common.cpp | 12 ++--
 xmrstak/backend/cpu/minethd.cpp               | 66 ++++++++++---------
 xmrstak/backend/cpu/minethd.hpp               |  4 +-
 xmrstak/backend/cryptonight.hpp               |  6 +-
 xmrstak/backend/nvidia/minethd.cpp            | 17 ++---
 .../backend/nvidia/nvcc_code/cuda_extra.cu    | 10 +--
 .../backend/nvidia/nvcc_code/cuda_extra.hpp   |  2 +-
 xmrstak/cli/cli-miner.cpp                     | 19 +++---
 xmrstak/config.tpl                            |  2 +-
 xmrstak/jconf.cpp                             | 11 ++--
 xmrstak/jconf.hpp                             |  2 +-
 xmrstak/misc/executor.cpp                     |  6 +-
 xmrstak/misc/utility.cpp                      | 21 ++++++
 xmrstak/misc/utility.hpp                      | 12 ++++
 24 files changed, 143 insertions(+), 101 deletions(-)
 create mode 100644 xmrstak/misc/utility.cpp
 create mode 100644 xmrstak/misc/utility.hpp

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 332f226..595631d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -37,15 +37,15 @@ endif()
 set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "${BUILD_TYPE}")
 
 set(XMR-STAK_CURRENCY "all" CACHE STRING "select miner currency")
-set_property(CACHE XMR-STAK_CURRENCY PROPERTY STRINGS "all;xmr;aeon")
+set_property(CACHE XMR-STAK_CURRENCY PROPERTY STRINGS "all;monero;aeon")
 
 if("${XMR-STAK_CURRENCY}" STREQUAL "all")
-    message(STATUS "set miner currency to 'xmr' and 'aeon'")
+    message(STATUS "Set miner currency to 'monero' and 'aeon'")
 elseif("${XMR-STAK_CURRENCY}" STREQUAL "aeon")
-    message(STATUS "set miner currency to 'aeon'")
-    add_definitions("-DCONF_NO_XMR=1")
-elseif("${XMR-STAK_CURRENCY}" STREQUAL "xmr")
-    message(STATUS "set miner currency to 'xmr'")
+    message(STATUS "Set miner currency to 'aeon'")
+    add_definitions("-DCONF_NO_MONERO=1")
+elseif("${XMR-STAK_CURRENCY}" STREQUAL "monero")
+    message(STATUS "Set miner currency to 'monero'")
     add_definitions("-DCONF_NO_AEON=1")
 endif()
 
diff --git a/doc/FAQ.md b/doc/FAQ.md
index 32acbe4..215048d 100644
--- a/doc/FAQ.md
+++ b/doc/FAQ.md
@@ -65,4 +65,4 @@ Add the binary to to protection software white list to solve this issue.s
 
 If the miner is compiled for Monero and Aeon than you can change
  - the value `currency` in the config *or*
- - start the miner with the [command line option](usage.md) `--currency xmr` or `--currency aeon`
+ - start the miner with the [command line option](usage.md) `--currency monero` or `--currency aeon`
diff --git a/doc/compile.md b/doc/compile.md
index a094d55..537a736 100644
--- a/doc/compile.md
+++ b/doc/compile.md
@@ -47,7 +47,7 @@ After the configuration you need to compile the miner, follow the guide for your
 - `WIN_UAC` will enable or disable the "Run As Administrator" prompt on Windows.
   - UAC confirmation is needed to use large pages on Windows 7.
   - On Windows 10 it is only needed once to set up the account to use them.
-- `XMR-STAK_CURRENCY` - compile for Monero(xmr) or Aeon(aeon) usage only e.g. `cmake .. -DXMR-STAK_CURRENCY=xmr`
+- `XMR-STAK_CURRENCY` - compile for Monero(XMR) or Aeon(AEON) usage only e.g. `cmake .. -DXMR-STAK_CURRENCY=monero`
 
 ## CPU Build Options
 
diff --git a/doc/usage.md b/doc/usage.md
index 226a3f1..9a38384 100644
--- a/doc/usage.md
+++ b/doc/usage.md
@@ -33,7 +33,7 @@ Usage: xmr-stak [OPTION]...
 
   -h, --help            show this help
   -c, --config FILE     common miner configuration file
-  --currency NAME       currency to mine: xmr or aeon
+  --currency NAME       currency to mine: monero or aeon
   --noCPU               disable the CPU miner backend
   --cpu FILE            CPU backend miner config file
   --noAMD               disable the AMD miner backend
diff --git a/xmrstak/backend/amd/amd_gpu/gpu.cpp b/xmrstak/backend/amd/amd_gpu/gpu.cpp
index 845d32c..22ce5d0 100644
--- a/xmrstak/backend/amd/amd_gpu/gpu.cpp
+++ b/xmrstak/backend/amd/amd_gpu/gpu.cpp
@@ -13,8 +13,8 @@
   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
   */
 
-#include "../../cryptonight.hpp"
-#include "../../../jconf.hpp"
+#include "xmrstak/backend/cryptonight.hpp"
+#include "xmrstak/jconf.hpp"
 
 #include <stdio.h>
 #include <string.h>
@@ -251,11 +251,11 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_
 	size_t hashMemSize;
 	int threadMemMask;
 	int hasIterations;
-	if(::jconf::inst()->IsCurrencyXMR())
+	if(::jconf::inst()->IsCurrencyMonero())
 	{
-		hashMemSize = XMR_MEMORY;
-		threadMemMask = XMR_MASK;
-		hasIterations = XMR_ITER;
+		hashMemSize = MONERO_MEMORY;
+		threadMemMask = MONERO_MASK;
+		hasIterations = MONERO_ITER;
 	}
 	else
 	{
diff --git a/xmrstak/backend/amd/autoAdjust.hpp b/xmrstak/backend/amd/autoAdjust.hpp
index 01f279a..87e6299 100644
--- a/xmrstak/backend/amd/autoAdjust.hpp
+++ b/xmrstak/backend/amd/autoAdjust.hpp
@@ -8,8 +8,8 @@
 #include "xmrstak/misc/console.hpp"
 #include "xmrstak/misc/configEditor.hpp"
 #include "xmrstak/params.hpp"
-#include "../cryptonight.hpp"
-#include "../../jconf.hpp"
+#include "xmrstak/backend/cryptonight.hpp"
+#include "xmrstak/jconf.hpp"
 
 #include <vector>
 #include <cstdio>
@@ -84,9 +84,9 @@ private:
 		constexpr size_t byteToMiB = 1024u * 1024u;
 
 		size_t hashMemSize;
-		if(::jconf::inst()->IsCurrencyXMR())
+		if(::jconf::inst()->IsCurrencyMonero())
 		{
-			hashMemSize = XMR_MEMORY;
+			hashMemSize = MONERO_MEMORY;
 		}
 		else
 		{
diff --git a/xmrstak/backend/amd/minethd.cpp b/xmrstak/backend/amd/minethd.cpp
index 295ad31..f12e12c 100644
--- a/xmrstak/backend/amd/minethd.cpp
+++ b/xmrstak/backend/amd/minethd.cpp
@@ -183,7 +183,7 @@ void minethd::work_main()
 	uint64_t iCount = 0;
 	cryptonight_ctx* cpu_ctx;
 	cpu_ctx = cpu::minethd::minethd_alloc_ctx();
-	cn_hash_fun hash_fun = cpu::minethd::func_selector(::jconf::inst()->HaveHardwareAes(), true /*bNoPrefetch*/, ::jconf::inst()->IsCurrencyXMR());
+	cn_hash_fun hash_fun = cpu::minethd::func_selector(::jconf::inst()->HaveHardwareAes(), true /*bNoPrefetch*/, ::jconf::inst()->IsCurrencyMonero());
 	globalStates::inst().iConsumeCnt++;
 	
 	while (bQuit == 0)
diff --git a/xmrstak/backend/cpu/autoAdjust.hpp b/xmrstak/backend/cpu/autoAdjust.hpp
index e7d6eec..7bdb14e 100644
--- a/xmrstak/backend/cpu/autoAdjust.hpp
+++ b/xmrstak/backend/cpu/autoAdjust.hpp
@@ -6,7 +6,7 @@
 #include "xmrstak/jconf.hpp"
 #include "xmrstak/misc/configEditor.hpp"
 #include "xmrstak/params.hpp"
-#include "../cryptonight.hpp"
+#include "xmrstak/backend/cryptonight.hpp"
 #include <string>
 
 #ifdef _WIN32
@@ -38,9 +38,9 @@ public:
 
 	autoAdjust()
 	{
-		if(::jconf::inst()->IsCurrencyXMR())
+		if(::jconf::inst()->IsCurrencyMonero())
 		{
-			hashMemSize = XMR_MEMORY;
+			hashMemSize = MONERO_MEMORY;
 			halfHashMemSize = hashMemSize / 2u;
 		}
 		else
diff --git a/xmrstak/backend/cpu/autoAdjustHwloc.hpp b/xmrstak/backend/cpu/autoAdjustHwloc.hpp
index b6f84c4..ddeb89b 100644
--- a/xmrstak/backend/cpu/autoAdjustHwloc.hpp
+++ b/xmrstak/backend/cpu/autoAdjustHwloc.hpp
@@ -3,7 +3,7 @@
 #include "xmrstak/misc/console.hpp"
 #include "xmrstak/misc/configEditor.hpp"
 #include "xmrstak/params.hpp"
-#include "../cryptonight.hpp"
+#include "xmrstak/backend/cryptonight.hpp"
 
 #ifdef _WIN32
 #include <windows.h>
@@ -28,9 +28,9 @@ public:
 
 	autoAdjust()
 	{
-		if(::jconf::inst()->IsCurrencyXMR())
+		if(::jconf::inst()->IsCurrencyMonero())
 		{
-			hashMemSize = XMR_MEMORY;
+			hashMemSize = MONERO_MEMORY;
 			halfHashMemSize = hashMemSize / 2u;
 		}
 		else
diff --git a/xmrstak/backend/cpu/crypto/cryptonight.h b/xmrstak/backend/cpu/crypto/cryptonight.h
index d07050e..631c39a 100644
--- a/xmrstak/backend/cpu/crypto/cryptonight.h
+++ b/xmrstak/backend/cpu/crypto/cryptonight.h
@@ -7,7 +7,7 @@ extern "C" {
 
 #include <stddef.h>
 #include <inttypes.h>
-#include "../../cryptonight.hpp"
+#include "xmrstak/backend/cryptonight.hpp"
 
 
 typedef struct {
diff --git a/xmrstak/backend/cpu/crypto/cryptonight_common.cpp b/xmrstak/backend/cpu/crypto/cryptonight_common.cpp
index 70ad27c..c73dbd8 100644
--- a/xmrstak/backend/cpu/crypto/cryptonight_common.cpp
+++ b/xmrstak/backend/cpu/crypto/cryptonight_common.cpp
@@ -30,8 +30,8 @@ extern "C"
 }
 #include "cryptonight.h"
 #include "cryptonight_aesni.h"
-#include "../../../jconf.hpp"
-#include "../../cryptonight.hpp"
+#include "xmrstak/backend/cryptonight.hpp"
+#include "xmrstak/jconf.hpp"
 #include <stdio.h>
 #include <stdlib.h>
 
@@ -197,9 +197,9 @@ size_t cryptonight_init(size_t use_fast_mem, size_t use_mlock, alloc_msg* msg)
 cryptonight_ctx* cryptonight_alloc_ctx(size_t use_fast_mem, size_t use_mlock, alloc_msg* msg)
 {
 	size_t hashMemSize;
-	if(::jconf::inst()->IsCurrencyXMR())
+	if(::jconf::inst()->IsCurrencyMonero())
 	{
-		hashMemSize = XMR_MEMORY;
+		hashMemSize = MONERO_MEMORY;
 	}
 	else
 	{
@@ -277,9 +277,9 @@ cryptonight_ctx* cryptonight_alloc_ctx(size_t use_fast_mem, size_t use_mlock, al
 void cryptonight_free_ctx(cryptonight_ctx* ctx)
 {
 	size_t hashMemSize;
-	if(::jconf::inst()->IsCurrencyXMR())
+	if(::jconf::inst()->IsCurrencyMonero())
 	{
-		hashMemSize = XMR_MEMORY;
+		hashMemSize = MONERO_MEMORY;
 	}
 	else
 	{
diff --git a/xmrstak/backend/cpu/minethd.cpp b/xmrstak/backend/cpu/minethd.cpp
index 28d641c..d36ebf1 100644
--- a/xmrstak/backend/cpu/minethd.cpp
+++ b/xmrstak/backend/cpu/minethd.cpp
@@ -201,28 +201,28 @@ bool minethd::self_test()
 
 	bool bResult = true;
 
-	bool useXmr = ::jconf::inst()->IsCurrencyXMR();
-	if(useXmr)
+	bool mineMonero = ::jconf::inst()->IsCurrencyMonero();
+	if(mineMonero)
 	{
 		unsigned char out[64];
 		cn_hash_fun hashf;
 		cn_hash_fun_dbl hashdf;
 
 
-		hashf = func_selector(::jconf::inst()->HaveHardwareAes(), false, useXmr);
+		hashf = func_selector(::jconf::inst()->HaveHardwareAes(), false, mineMonero);
 		hashf("This is a test", 14, out, ctx0);
 		bResult = memcmp(out, "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05", 32) == 0;
 
-		hashf = func_selector(::jconf::inst()->HaveHardwareAes(), true, useXmr);
+		hashf = func_selector(::jconf::inst()->HaveHardwareAes(), true, mineMonero);
 		hashf("This is a test", 14, out, ctx0);
 		bResult &= memcmp(out, "\xa0\x84\xf0\x1d\x14\x37\xa0\x9c\x69\x85\x40\x1b\x60\xd4\x35\x54\xae\x10\x58\x02\xc5\xf5\xd8\xa9\xb3\x25\x36\x49\xc0\xbe\x66\x05", 32) == 0;
 
-		hashdf = func_dbl_selector(::jconf::inst()->HaveHardwareAes(), false, useXmr);
+		hashdf = func_dbl_selector(::jconf::inst()->HaveHardwareAes(), false, mineMonero);
 		hashdf("The quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy log", 43, out, ctx0, ctx1);
 		bResult &= memcmp(out, "\x3e\xbb\x7f\x9f\x7d\x27\x3d\x7c\x31\x8d\x86\x94\x77\x55\x0c\xc8\x00\xcf\xb1\x1b\x0c\xad\xb7\xff\xbd\xf6\xf8\x9f\x3a\x47\x1c\x59"
 							   "\xb4\x77\xd5\x02\xe4\xd8\x48\x7f\x42\xdf\xe3\x8e\xed\x73\x81\x7a\xda\x91\xb7\xe2\x63\xd2\x91\x71\xb6\x5c\x44\x3a\x01\x2a\x41\x22", 64) == 0;
 
-		hashdf = func_dbl_selector(::jconf::inst()->HaveHardwareAes(), true, useXmr);
+		hashdf = func_dbl_selector(::jconf::inst()->HaveHardwareAes(), true, mineMonero);
 		hashdf("The quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy log", 43, out, ctx0, ctx1);
 		bResult &= memcmp(out, "\x3e\xbb\x7f\x9f\x7d\x27\x3d\x7c\x31\x8d\x86\x94\x77\x55\x0c\xc8\x00\xcf\xb1\x1b\x0c\xad\xb7\xff\xbd\xf6\xf8\x9f\x3a\x47\x1c\x59"
 							   "\xb4\x77\xd5\x02\xe4\xd8\x48\x7f\x42\xdf\xe3\x8e\xed\x73\x81\x7a\xda\x91\xb7\xe2\x63\xd2\x91\x71\xb6\x5c\x44\x3a\x01\x2a\x41\x22", 64) == 0;
@@ -289,7 +289,7 @@ void minethd::consume_work()
 	globalStates::inst().inst().iConsumeCnt++;
 }
 
-minethd::cn_hash_fun minethd::func_selector(bool bHaveAes, bool bNoPrefetch, bool useXMR)
+minethd::cn_hash_fun minethd::func_selector(bool bHaveAes, bool bNoPrefetch, bool mineMonero)
 {
 	// We have two independent flag bits in the functions
 	// therefore we will build a binary digit and select the
@@ -297,13 +297,17 @@ minethd::cn_hash_fun minethd::func_selector(bool bHaveAes, bool bNoPrefetch, boo
 	// Digit order SOFT_AES, NO_PREFETCH, MINER_ALGO
 
 	static const cn_hash_fun func_table[] = {
-#ifndef CONF_NO_XMR
-		cryptonight_hash<XMR_MASK, XMR_ITER, XMR_MEMORY, false, false>,
-		cryptonight_hash<XMR_MASK, XMR_ITER, XMR_MEMORY, false, true>,
-		cryptonight_hash<XMR_MASK, XMR_ITER, XMR_MEMORY, true, false>,
-		cryptonight_hash<XMR_MASK, XMR_ITER, XMR_MEMORY, true, true>
+		/* there will be 8 function entries if `CONF_NO_MONERO` and `CONF_NO_AEON`
+		 * is not defined. If one is defined there will be 4 entries.
+		 */
+#ifndef CONF_NO_MONERO
+		cryptonight_hash<MONERO_MASK, MONERO_ITER, MONERO_MEMORY, false, false>,
+		cryptonight_hash<MONERO_MASK, MONERO_ITER, MONERO_MEMORY, false, true>,
+		cryptonight_hash<MONERO_MASK, MONERO_ITER, MONERO_MEMORY, true, false>,
+		cryptonight_hash<MONERO_MASK, MONERO_ITER, MONERO_MEMORY, true, true>
 #endif
-#if (!defined(CONF_NO_AEON)) && (!defined(CONF_NO_XMR))
+#if (!defined(CONF_NO_AEON)) && (!defined(CONF_NO_MONERO))
+		// comma will be added only if Monero and Aeon is build
 		,
 #endif
 #ifndef CONF_NO_AEON
@@ -317,14 +321,13 @@ minethd::cn_hash_fun minethd::func_selector(bool bHaveAes, bool bNoPrefetch, boo
 	std::bitset<3> digit;
 	digit.set(0, !bNoPrefetch);
 	digit.set(1, !bHaveAes);
-	//miner algo true = XMR, false = AEON
-	digit.set(2, useXMR);
 
 	// define aeon settings
-#if defined(CONF_NO_AEON) || defined(CONF_NO_XMR)
+#if defined(CONF_NO_AEON) || defined(CONF_NO_MONERO)
+	// ignore 3rd bit if only on currency is active
 	digit.set(2, 0);
 #else
-	digit.set(2, !useXMR);
+	digit.set(2, !mineMonero);
 #endif
 
 	return func_table[digit.to_ulong()];
@@ -344,7 +347,7 @@ void minethd::work_main()
 	uint32_t* piNonce;
 	job_result result;
 
-	hash_fun = func_selector(::jconf::inst()->HaveHardwareAes(), bNoPrefetch, ::jconf::inst()->IsCurrencyXMR());
+	hash_fun = func_selector(::jconf::inst()->HaveHardwareAes(), bNoPrefetch, ::jconf::inst()->IsCurrencyMonero());
 	ctx = minethd_alloc_ctx();
 
 	piHashVal = (uint64_t*)(result.bResult + 24);
@@ -406,7 +409,7 @@ void minethd::work_main()
 	cryptonight_free_ctx(ctx);
 }
 
-minethd::cn_hash_fun_dbl minethd::func_dbl_selector(bool bHaveAes, bool bNoPrefetch, bool useXMR)
+minethd::cn_hash_fun_dbl minethd::func_dbl_selector(bool bHaveAes, bool bNoPrefetch, bool mineMonero)
 {
 	// We have two independent flag bits in the functions
 	// therefore we will build a binary digit and select the
@@ -414,13 +417,17 @@ minethd::cn_hash_fun_dbl minethd::func_dbl_selector(bool bHaveAes, bool bNoPrefe
 	// Digit order SOFT_AES, NO_PREFETCH, MINER_ALGO
 
 	static const cn_hash_fun_dbl func_table[] = {
-#ifndef CONF_NO_XMR
-		cryptonight_double_hash<XMR_MASK, XMR_ITER, XMR_MEMORY, false, false>,
-		cryptonight_double_hash<XMR_MASK, XMR_ITER, XMR_MEMORY, false, true>,
-		cryptonight_double_hash<XMR_MASK, XMR_ITER, XMR_MEMORY, true, false>,
-		cryptonight_double_hash<XMR_MASK, XMR_ITER, XMR_MEMORY, true, true>
+		/* there will be 8 function entries if `CONF_NO_MONERO` and `CONF_NO_AEON`
+		 * is not defined. If one is defined there will be 4 entries.
+		 */
+#ifndef CONF_NO_MONERO
+		cryptonight_double_hash<MONERO_MASK, MONERO_ITER, MONERO_MEMORY, false, false>,
+		cryptonight_double_hash<MONERO_MASK, MONERO_ITER, MONERO_MEMORY, false, true>,
+		cryptonight_double_hash<MONERO_MASK, MONERO_ITER, MONERO_MEMORY, true, false>,
+		cryptonight_double_hash<MONERO_MASK, MONERO_ITER, MONERO_MEMORY, true, true>
 #endif
-#if (!defined(CONF_NO_AEON)) && (!defined(CONF_NO_XMR))
+#if (!defined(CONF_NO_AEON)) && (!defined(CONF_NO_MONERO))
+		// comma will be added only if Monero and Aeon is build
 		,
 #endif
 #ifndef CONF_NO_AEON
@@ -434,14 +441,13 @@ minethd::cn_hash_fun_dbl minethd::func_dbl_selector(bool bHaveAes, bool bNoPrefe
 	std::bitset<3> digit;
 	digit.set(0, !bNoPrefetch);
 	digit.set(1, !bHaveAes);
-	//miner algo true = XMR, false = AEON
-	digit.set(2, useXMR);
 
 	// define aeon settings
-#if defined(CONF_NO_AEON) || defined(CONF_NO_XMR)
+#if defined(CONF_NO_AEON) || defined(CONF_NO_MONERO)
+	// ignore 3rd bit if only on currency is active
 	digit.set(2, 0);
 #else
-	digit.set(2, !useXMR);
+	digit.set(2, !mineMonero);
 #endif
 
 	return func_table[digit.to_ulong()];
@@ -472,7 +478,7 @@ void minethd::double_work_main()
 	uint32_t iNonce;
 	job_result res;
 
-	hash_fun = func_dbl_selector(::jconf::inst()->HaveHardwareAes(), bNoPrefetch, ::jconf::inst()->IsCurrencyXMR());
+	hash_fun = func_dbl_selector(::jconf::inst()->HaveHardwareAes(), bNoPrefetch, ::jconf::inst()->IsCurrencyMonero());
 	ctx0 = minethd_alloc_ctx();
 	ctx1 = minethd_alloc_ctx();
 
diff --git a/xmrstak/backend/cpu/minethd.hpp b/xmrstak/backend/cpu/minethd.hpp
index 5bd8a4f..670ec8d 100644
--- a/xmrstak/backend/cpu/minethd.hpp
+++ b/xmrstak/backend/cpu/minethd.hpp
@@ -23,7 +23,7 @@ public:
 
 	typedef void (*cn_hash_fun)(const void*, size_t, void*, cryptonight_ctx*);
 
-	static cn_hash_fun func_selector(bool bHaveAes, bool bNoPrefetch, bool useXMR);
+	static cn_hash_fun func_selector(bool bHaveAes, bool bNoPrefetch, bool mineMonero);
 	static bool thd_setaffinity(std::thread::native_handle_type h, uint64_t cpu_id);
 
 	static cryptonight_ctx* minethd_alloc_ctx();
@@ -31,7 +31,7 @@ public:
 private:
 
 	typedef void (*cn_hash_fun_dbl)(const void*, size_t, void*, cryptonight_ctx* __restrict, cryptonight_ctx* __restrict);
-	static cn_hash_fun_dbl func_dbl_selector(bool bHaveAes, bool bNoPrefetch, bool useXMR);
+	static cn_hash_fun_dbl func_dbl_selector(bool bHaveAes, bool bNoPrefetch, bool mineMonero);
 
 	minethd(miner_work& pWork, size_t iNo, bool double_work, bool no_prefetch, int64_t affinity);
 
diff --git a/xmrstak/backend/cryptonight.hpp b/xmrstak/backend/cryptonight.hpp
index 85e67d8..0ef5ae7 100644
--- a/xmrstak/backend/cryptonight.hpp
+++ b/xmrstak/backend/cryptonight.hpp
@@ -6,7 +6,7 @@
 #define AEON_ITER 0x40000
 
 // define xmr settings
-#define XMR_MEMORY 2097152llu
-#define XMR_MASK 0x1FFFF0
-#define XMR_ITER 0x80000
+#define MONERO_MEMORY 2097152llu
+#define MONERO_MASK 0x1FFFF0
+#define MONERO_ITER 0x80000
 
diff --git a/xmrstak/backend/nvidia/minethd.cpp b/xmrstak/backend/nvidia/minethd.cpp
index 237dcaf..0bc6214 100644
--- a/xmrstak/backend/nvidia/minethd.cpp
+++ b/xmrstak/backend/nvidia/minethd.cpp
@@ -32,7 +32,8 @@
 #include "xmrstak/jconf.hpp"
 #include "xmrstak/misc/environment.hpp"
 #include "xmrstak/backend/cpu/hwlocMemory.hpp"
-#include "../cryptonight.hpp"
+#include "xmrstak/backend/cryptonight.hpp"
+#include "xmrstak/misc/utility.hpp"
 
 #include <assert.h>
 #include <cmath>
@@ -209,7 +210,7 @@ void minethd::work_main()
 	uint64_t iCount = 0;
 	cryptonight_ctx* cpu_ctx;
 	cpu_ctx = cpu::minethd::minethd_alloc_ctx();
-	cn_hash_fun hash_fun = cpu::minethd::func_selector(::jconf::inst()->HaveHardwareAes(), true /*bNoPrefetch*/, ::jconf::inst()->IsCurrencyXMR());
+	cn_hash_fun hash_fun = cpu::minethd::func_selector(::jconf::inst()->HaveHardwareAes(), true /*bNoPrefetch*/, ::jconf::inst()->IsCurrencyMonero());
 	uint32_t iNonce;
 
 	globalStates::inst().iConsumeCnt++;
@@ -220,8 +221,8 @@ void minethd::work_main()
 		std::exit(0);
 	}
 
-	bool useXMR = ::jconf::inst()->GetCurrency().compare("xmr") == 0;
-	bool useAEON = ::jconf::inst()->GetCurrency().compare("aeon") == 0;
+	bool mineMonero = strcmp_i(::jconf::inst()->GetCurrency(), "monero");
+	bool useAEON = strcmp_i(::jconf::inst()->GetCurrency(), "aeon");
 	
 	while (bQuit == 0)
 	{
@@ -260,16 +261,16 @@ void minethd::work_main()
 			uint32_t foundCount;
 
 			cryptonight_extra_cpu_prepare(&ctx, iNonce);
-#ifndef CONF_NO_XMR
-			if(useXMR)
+#ifndef CONF_NO_MONERO
+			if(mineMonero)
 			{
-				cryptonight_core_cpu_hash<XMR_ITER, XMR_MASK, 19>(&ctx);
+				cryptonight_core_cpu_hash<MONERO_ITER, MONERO_MASK, 19>(&ctx);
 			}
 #endif
 #ifndef CONF_NO_AEON
 			if(useAEON)
 			{
-				cryptonight_core_cpu_hash<XMR_ITER, XMR_MASK, 18>(&ctx);
+				cryptonight_core_cpu_hash<MONERO_ITER, MONERO_MASK, 18>(&ctx);
 			}
 #endif
 			cryptonight_extra_cpu_final(&ctx, iNonce, oWork.iTarget, &foundCount, foundNonce);
diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu
index 40dcc7e..abca489 100644
--- a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu
+++ b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.cu
@@ -5,7 +5,7 @@
 #include <cuda_runtime.h>
 #include <device_functions.hpp>
 #include  <algorithm>
-#include "../../../jconf.hpp"
+#include "xmrstak/jconf.hpp"
 
 #ifdef __CUDACC__
 __constant__
@@ -190,9 +190,9 @@ extern "C" int cryptonight_extra_cpu_init(nvid_ctx* ctx)
 	cudaDeviceSetCacheConfig(cudaFuncCachePreferL1);
 
 	size_t hashMemSize;
-	if(::jconf::inst()->IsCurrencyXMR())
+	if(::jconf::inst()->IsCurrencyMonero())
 	{
-		hashMemSize = XMR_MEMORY;
+		hashMemSize = MONERO_MEMORY;
 	}
 	else
 	{
@@ -355,9 +355,9 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx)
 		ctx->free_device_memory = freeMemory;
 
 		size_t hashMemSize;
-		if(::jconf::inst()->IsCurrencyXMR())
+		if(::jconf::inst()->IsCurrencyMonero())
 		{
-			hashMemSize = XMR_MEMORY;
+			hashMemSize = MONERO_MEMORY;
 		}
 		else
 		{
diff --git a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp
index c622110..055a8bd 100644
--- a/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp
+++ b/xmrstak/backend/nvidia/nvcc_code/cuda_extra.hpp
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "../../cryptonight.hpp"
+#include "xmrstak/backend/cryptonight.hpp"
 
 #ifdef __INTELLISENSE__
 #define __CUDA_ARCH__ 520
diff --git a/xmrstak/cli/cli-miner.cpp b/xmrstak/cli/cli-miner.cpp
index 054e6db..c15ca56 100644
--- a/xmrstak/cli/cli-miner.cpp
+++ b/xmrstak/cli/cli-miner.cpp
@@ -31,6 +31,7 @@
 #include "xmrstak/params.hpp"
 #include "xmrstak/misc/configEditor.hpp"
 #include "xmrstak/version.hpp"
+#include "xmrstak/misc/utility.hpp"
 
 #ifndef CONF_NO_HTTPD
 #	include "xmrstak/http/httpd.hpp"
@@ -64,8 +65,8 @@ void help()
 	cout<<" "<<endl;
 	cout<<"  -h, --help            show this help"<<endl;
 	cout<<"  -c, --config FILE     common miner configuration file"<<endl;
-#if (!defined(CONF_NO_AEON)) && (!defined(CONF_NO_XMR))
-	cout<<"  --currency NAME       currency to mine: xmr or aeon"<<endl;
+#if (!defined(CONF_NO_AEON)) && (!defined(CONF_NO_MONERO))
+	cout<<"  --currency NAME       currency to mine: monero or aeon"<<endl;
 #endif
 #ifndef CONF_NO_CPU
 	cout<<"  --noCPU               disable the CPU miner backend"<<endl;
@@ -250,13 +251,13 @@ int main(int argc, char *argv[])
 		{
 			std::string tmp;
 #if defined(CONF_NO_AEON)
-			tmp = "xmr";
-#elif defined(CONF_NO_XMR)
+			tmp = "monero";
+#elif defined(CONF_NO_MONERO)
 			tmp = "aeon";
 #endif
-			while(tmp.compare("xmr") != 0 && tmp.compare("aeon") != 0)
+			while(xmrstak::strcmp_i(tmp, "monero") && xmrstak::strcmp_i(tmp, "aeon"))
 			{
-				std::cout<<"- currency: 'xmr' or 'aeon'"<<std::endl;
+				std::cout<<"- currency: 'monero' or 'aeon'"<<std::endl;
 				std::cin >> tmp;
 			} 
 			currency = tmp;
@@ -264,7 +265,7 @@ int main(int argc, char *argv[])
 		auto& pool = params::inst().poolURL;
 		if(pool.empty())
 		{
-			if(currency.compare("xmr") != 0)
+			if(xmrstak::strcmp_i(currency, "monero"))
 				std::cout<<"- pool address: e.g. pool.usxmrpool.com:3333"<<std::endl;
 			else
 				std::cout<<"- pool address: e.g. mine.aeon-pool.com:5555"<<std::endl;
@@ -333,8 +334,8 @@ int main(int argc, char *argv[])
 	printer::inst()->print_str("'r' - results\n");
 	printer::inst()->print_str("'c' - connection\n");
 	printer::inst()->print_str("-------------------------------------------------------------------\n");
-	if(::jconf::inst()->IsCurrencyXMR())
-		printer::inst()->print_msg(L0,"Start mining: XMR");
+	if(::jconf::inst()->IsCurrencyMonero())
+		printer::inst()->print_msg(L0,"Start mining: MONERO");
 	else
 		printer::inst()->print_msg(L0,"Start mining: AEON");
 
diff --git a/xmrstak/config.tpl b/xmrstak/config.tpl
index 5567841..032d483 100644
--- a/xmrstak/config.tpl
+++ b/xmrstak/config.tpl
@@ -12,7 +12,7 @@ R"===(
 
 /*
  * currency to mine
- * allowed values: 'xmr' or 'aeon'
+ * allowed values: 'monero' or 'aeon'
  */
 "currency" : "CURRENCY",
 
diff --git a/xmrstak/jconf.cpp b/xmrstak/jconf.cpp
index fce1751..5ada0d6 100644
--- a/xmrstak/jconf.cpp
+++ b/xmrstak/jconf.cpp
@@ -27,6 +27,7 @@
 #include "xmrstak/misc/console.hpp"
 #include "xmrstak/misc/jext.hpp"
 #include "xmrstak/misc/console.hpp"
+#include "xmrstak/misc/utility.hpp"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -157,14 +158,14 @@ const std::string jconf::GetCurrency()
 	if(currency.empty())
 		currency = prv->configValues[sCurrency]->GetString();
 	if(
-#ifndef CONF_NO_XMR
-			currency.compare("xmr") != 0
+#ifndef CONF_NO_MONERO
+			xmrstak::strcmp_i(currency, "monero")
 #else
 			true
 #endif
 			&&
 #ifndef CONF_NO_AEON
-			currency.compare("aeon") != 0
+			xmrstak::strcmp_i(currency, "aeon")
 #else
 			true
 #endif
@@ -176,9 +177,9 @@ const std::string jconf::GetCurrency()
 	return currency;
 }
 
-bool jconf::IsCurrencyXMR()
+bool jconf::IsCurrencyMonero()
 {
-	if(::jconf::inst()->GetCurrency().compare("xmr") == 0)
+	if(xmrstak::strcmp_i(::jconf::inst()->GetCurrency(), "monero"))
 	{
 		return true;
 	}
diff --git a/xmrstak/jconf.hpp b/xmrstak/jconf.hpp
index 96c7691..48b47b5 100644
--- a/xmrstak/jconf.hpp
+++ b/xmrstak/jconf.hpp
@@ -42,7 +42,7 @@ public:
 	const char* GetPoolPwd();
 	const char* GetWalletAddress();
 	const std::string GetCurrency();
-	bool IsCurrencyXMR();
+	bool IsCurrencyMonero();
 
 	uint64_t GetVerboseLevel();
 	uint64_t GetAutohashTime();
diff --git a/xmrstak/misc/executor.cpp b/xmrstak/misc/executor.cpp
index 885961a..b469dc2 100644
--- a/xmrstak/misc/executor.cpp
+++ b/xmrstak/misc/executor.cpp
@@ -21,7 +21,7 @@
   *
   */
 
-#include "../jconf.hpp"
+#include "xmrstak/jconf.hpp"
 #include "executor.hpp"
 #include "xmrstak/net/jpsock.hpp"
 
@@ -184,7 +184,7 @@ void executor::on_sock_ready(size_t pool_id)
 
 	if(pool_id == dev_pool_id)
 	{
-		if(::jconf::inst()->IsCurrencyXMR())
+		if(::jconf::inst()->IsCurrencyMonero())
 		{
 			if(!pool->cmd_login("", ""))
 				pool->disconnect();
@@ -362,7 +362,7 @@ void executor::on_switch_pool(size_t pool_id)
 		// as we never receive further events
 		printer::inst()->print_msg(L1, "Connecting to dev pool...");
 		std::string dev_pool_addr;
-		if(::jconf::inst()->IsCurrencyXMR())
+		if(::jconf::inst()->IsCurrencyMonero())
 			dev_pool_addr = jconf::inst()->GetTlsSetting() ? "donate.xmr-stak.net:6666" : "donate.xmr-stak.net:3333";
 		else
 			dev_pool_addr = jconf::inst()->GetTlsSetting() ? "mine.aeon-pool.com:443" : "mine.aeon-pool.com:5555";
diff --git a/xmrstak/misc/utility.cpp b/xmrstak/misc/utility.cpp
new file mode 100644
index 0000000..3b1369a
--- /dev/null
+++ b/xmrstak/misc/utility.cpp
@@ -0,0 +1,21 @@
+#include <string>
+#include <algorithm>
+
+
+namespace xmrstak
+{
+	bool strcmp_i(const std::string& str1, const std::string& str2)
+	{
+		if(str1.size() != str2.size())
+			return false;
+		else
+		return (str1.empty() | str2.empty()) ?
+				false :
+				std::equal(str1.begin(), str1.end(),str2.begin(),
+					[](char c1, char c2)
+					{
+						return ::tolower(c1) == ::tolower(c2);
+					}
+				);
+	}
+} // namepsace xmrstak
diff --git a/xmrstak/misc/utility.hpp b/xmrstak/misc/utility.hpp
new file mode 100644
index 0000000..b2e841d
--- /dev/null
+++ b/xmrstak/misc/utility.hpp
@@ -0,0 +1,12 @@
+#pragma once
+
+#include <string>
+
+namespace xmrstak
+{
+	/** case insensitive string compare
+	 *
+	 * @return true if both strings are equal, else false
+	 */
+	bool strcmp_i(const std::string& str1, const std::string& str2);
+} // namepsace xmrstak
-- 
GitLab