From e06727aea9684184a679f24eadfc19b349674c91 Mon Sep 17 00:00:00 2001 From: r57zone Date: Fri, 5 Mar 2021 22:38:13 +0400 Subject: [PATCH] Improvements: icon, exit button & fix button names --- README.RU.md | 34 +++++++------ README.md | 20 ++++---- Source/DS4Emulator.cpp | 101 +++++++++++++++---------------------- Source/DS4Emulator.vcxproj | 9 ++++ Source/Icon.ico | Bin 0 -> 15086 bytes Source/IniReader/README.md | 47 ----------------- Source/Resource.aps | Bin 0 -> 16508 bytes Source/Resource.rc | Bin 0 -> 214 bytes Source/resource.h | 14 +++++ 9 files changed, 94 insertions(+), 131 deletions(-) create mode 100644 Source/Icon.ico delete mode 100644 Source/IniReader/README.md create mode 100644 Source/Resource.aps create mode 100644 Source/Resource.rc create mode 100644 Source/resource.h diff --git a/README.RU.md b/README.RU.md index f5226aa..25d689b 100644 --- a/README.RU.md +++ b/README.RU.md @@ -24,6 +24,8 @@ ------------ | ------------- Uncharted 3: Иллюзии Дрейка (2011) | Кнопка "Share" (F12) дублирует нажатие левой части тачпада. +Свайпы тачпада пока не поддерживаются, вы не сможете поиграть в такие игры, как: Until Dawn. + ## Гироскоп Эмуляция гироскопа не поддерживается. @@ -32,23 +34,23 @@ Uncharted 3: Иллюзии Дрейка (2011) | Кнопка "Share" (F12) д DualShock 4 | Клавиатура и мышь ------------ | ------------- -LEFT TRIGGER | Правая кнопка мыши -RIGHT TRIGGER | Левая кнопка мыши -LEFT SHOULDER | Control -RIGHT SHOULDER | Alt -DPAD UP | 1 -DPAD LEFT | 2 -DPAD RIGHT | 3 -DPAD DOWN | 4 -LEFT THUMB | Shift -RIGHT THUMB | Средняя кнопка мыши -TRIANGLE | Q -SQUARE | E -CIRCLE | R -CROSS | Space -TOUCHPAD | Enter -OPTIONS | Tab +L1 | Control +R2 | Alt +L2 | Правая кнопка мыши +R2 | Левая кнопка мыши SHARE | F12 +TOUCHPAD (нажатие тачпада) | Enter +OPTIONS | Tab +DPAD UP (стрелка вверх) | 1 +DPAD LEFT (стрелка влево) | 2 +DPAD RIGHT (стрелка вправо) | 3 +DPAD DOWN (стрелка вниз) | 4 +TRIANGLE (треугольник) | Q +SQUARE (квадрат) | E +CIRCLE (круг) | R +CROSS (крестик) | Space +L3 (нажатие стика) | Shift +R3 (нажатие стика) | Средняя кнопка мыши В конфигурационном файле "Config.ini" можно заменить привязки кнопок. Коды кнопок можно найти [здесь](https://github.com/r57zone/Half-Life-Alyx-novr/blob/master/BINDINGS.RU.md). diff --git a/README.md b/README.md index f1e6130..881a654 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,8 @@ Game | Action ------------ | ------------- Uncharted 3: Drake’s Deception (2011) | The "Share" button (F12) duplicates pressing the left side of the touchpad. +Touchpad swipes are not yet supported, you will not be able to play games like: Until Dawn. + ## Gyroscope Gyro emulation is not supported. @@ -32,23 +34,23 @@ By default, the mouse and keyboard only work in "PlayStation Now". You can enabl DualShock 4 | Keyboard and mouse ------------ | ------------- -LEFT TRIGGER | Right mouse button -RIGHT TRIGGER | Left mouse button -LEFT SHOULDER | Control -RIGHT SHOULDER | Alt +L1 | Control +R1 | Alt +L2 | Right mouse button +R2 | Left mouse button +SHARE | F12 +TOUCHPAD (pressing) | Enter +OPTIONS | Tab DPAD UP | 1 DPAD LEFT | 2 DPAD RIGHT | 3 DPAD DOWN | 4 -LEFT THUMB | Shift -RIGHT THUMB | Middle mouse button TRIANGLE | Q SQUARE | E CIRCLE | R CROSS | Space -TOUCHPAD | Enter -OPTIONS | Tab -SHARE | F12 +L3 (pressing the stick) | Shift +R3 (pressing the stick) | Middle mouse button Сan replace button bindings in the "Config.ini" configuration file. Button codes can be found [here](https://github.com/r57zone/Half-Life-Alyx-novr/blob/master/BINDINGS.md). B diff --git a/Source/DS4Emulator.cpp b/Source/DS4Emulator.cpp index e706e60..3cafeff 100644 --- a/Source/DS4Emulator.cpp +++ b/Source/DS4Emulator.cpp @@ -3,7 +3,7 @@ #include #include "IniReader\IniReader.h" -//XInput headers +// XInput headers #define XINPUT_GAMEPAD_DPAD_UP 0x0001 #define XINPUT_GAMEPAD_DPAD_DOWN 0x0002 #define XINPUT_GAMEPAD_DPAD_LEFT 0x0004 @@ -27,7 +27,7 @@ #define ERROR_DEVICE_NOT_CONNECTED 1167 #define ERROR_SUCCESS 0 -//XInput structures +// XInput structures typedef struct _XINPUT_GAMEPAD { WORD wButtons; @@ -86,25 +86,6 @@ DWORD XboxUserIndex = 0; static std::mutex m; -//Key bindings -int KEY_ID_LEFT_TRIGGER; -int KEY_ID_RIGHT_TRIGGER; -int KEY_ID_LEFT_SHOULDER; -int KEY_ID_RIGHT_SHOULDER; -int KEY_ID_DPAD_UP; -int KEY_ID_DPAD_DOWN; -int KEY_ID_DPAD_LEFT; -int KEY_ID_DPAD_RIGHT; -int KEY_ID_LEFT_THUMB; -int KEY_ID_RIGHT_THUMB; -int KEY_ID_TRIANGLE; -int KEY_ID_SQUARE; -int KEY_ID_CIRCLE; -int KEY_ID_CROSS; -int KEY_ID_TOUCHPAD; -int KEY_ID_OPTIONS; -int KEY_ID_SHARE; - int m_HalfWidth = 1920 / 2; int m_HalfHeight = 1080 / 2; float mouseSensetiveY; @@ -166,8 +147,10 @@ int main(int argc, char **argv) #define KBMode 0 int EmulationMode = KBMode; - //Config + // Config CIniReader IniFile("Config.ini"); + int KEY_ID_EXIT = IniFile.ReadInteger("Main", "ExitBtn", 192); // "~" by default + bool InvertX = IniFile.ReadBoolean("DS4", "InvertX", false); bool InvertY = IniFile.ReadBoolean("DS4", "InvertY", false); @@ -185,23 +168,23 @@ int main(int argc, char **argv) mouseSensetiveX = IniFile.ReadFloat("KeyboardMouse", "SensX", 15); mouseSensetiveY = IniFile.ReadFloat("KeyboardMouse", "SensY", 15); - KEY_ID_LEFT_TRIGGER = IniFile.ReadInteger("Keys", "LEFT_TRIGGER", VK_RBUTTON); - KEY_ID_RIGHT_TRIGGER = IniFile.ReadInteger("Keys", "RIGHT_TRIGGER", VK_LBUTTON); - KEY_ID_LEFT_SHOULDER = IniFile.ReadInteger("Keys", "LEFT_SHOULDER", VK_CONTROL); - KEY_ID_RIGHT_SHOULDER = IniFile.ReadInteger("Keys", "RIGHT_SHOULDER", VK_MENU); - KEY_ID_DPAD_UP = IniFile.ReadInteger("Keys", "DPAD_UP", '1'); - KEY_ID_DPAD_LEFT = IniFile.ReadInteger("Keys", "DPAD_LEFT", '2'); - KEY_ID_DPAD_RIGHT = IniFile.ReadInteger("Keys", "DPAD_RIGHT", '3'); - KEY_ID_DPAD_DOWN = IniFile.ReadInteger("Keys", "DPAD_DOWN", '4'); - KEY_ID_LEFT_THUMB = IniFile.ReadInteger("Keys", "LEFT_THUMB", VK_LSHIFT); - KEY_ID_RIGHT_THUMB = IniFile.ReadInteger("Keys", "RIGHT_THUMB", VK_MBUTTON); - KEY_ID_TRIANGLE = IniFile.ReadInteger("Keys", "TRIANGLE", 'Q'); - KEY_ID_SQUARE = IniFile.ReadInteger("Keys", "SQUARE", 'E'); - KEY_ID_CIRCLE = IniFile.ReadInteger("Keys", "CIRCLE", 'R'); - KEY_ID_CROSS = IniFile.ReadInteger("Keys", "CROSS", VK_SPACE); - KEY_ID_TOUCHPAD = IniFile.ReadInteger("Keys", "TOUCHPAD", VK_RETURN); - KEY_ID_OPTIONS = IniFile.ReadInteger("Keys", "OPTIONS", VK_TAB); - KEY_ID_SHARE = IniFile.ReadInteger("Keys", "SHARE", VK_F12); + int KEY_ID_LEFT_TRIGGER = IniFile.ReadInteger("Keys", "L2", VK_RBUTTON); + int KEY_ID_RIGHT_TRIGGER = IniFile.ReadInteger("Keys", "R2", VK_LBUTTON); + int KEY_ID_LEFT_SHOULDER = IniFile.ReadInteger("Keys", "L1", VK_CONTROL); + int KEY_ID_RIGHT_SHOULDER = IniFile.ReadInteger("Keys", "R1", VK_MENU); + int KEY_ID_DPAD_UP = IniFile.ReadInteger("Keys", "DPAD_UP", '1'); + int KEY_ID_DPAD_LEFT = IniFile.ReadInteger("Keys", "DPAD_LEFT", '2'); + int KEY_ID_DPAD_RIGHT = IniFile.ReadInteger("Keys", "DPAD_RIGHT", '3'); + int KEY_ID_DPAD_DOWN = IniFile.ReadInteger("Keys", "DPAD_DOWN", '4'); + int KEY_ID_LEFT_THUMB = IniFile.ReadInteger("Keys", "L3", VK_LSHIFT); + int KEY_ID_RIGHT_THUMB = IniFile.ReadInteger("Keys", "R3", VK_MBUTTON); + int KEY_ID_TRIANGLE = IniFile.ReadInteger("Keys", "TRIANGLE", 'Q'); + int KEY_ID_SQUARE = IniFile.ReadInteger("Keys", "SQUARE", 'E'); + int KEY_ID_CIRCLE = IniFile.ReadInteger("Keys", "CIRCLE", 'R'); + int KEY_ID_CROSS = IniFile.ReadInteger("Keys", "CROSS", VK_SPACE); + int KEY_ID_TOUCHPAD = IniFile.ReadInteger("Keys", "TOUCHPAD", VK_RETURN); + int KEY_ID_OPTIONS = IniFile.ReadInteger("Keys", "OPTIONS", VK_TAB); + int KEY_ID_SHARE = IniFile.ReadInteger("Keys", "SHARE", VK_F12); const auto client = vigem_alloc(); auto ret = vigem_connect(client); @@ -213,8 +196,8 @@ int main(int argc, char **argv) printf("Press \"~\" key to exit\r\n"); - //Load library and scan Xbox gamepads only in Xbox mode (default) - hDll = LoadLibrary("xinput1_3.dll"); //x360ce support + // Load library and scan Xbox gamepads + hDll = LoadLibrary("xinput1_3.dll"); // x360ce support if (hDll != NULL) { MyXInputGetState = (_XInputGetState)GetProcAddress(hDll, "XInputGetState"); MyXInputSetState = (_XInputSetState)GetProcAddress(hDll, "XInputSetState"); @@ -236,17 +219,17 @@ int main(int argc, char **argv) m_HalfHeight = GetSystemMetrics(SM_CYSCREEN) / 2; } - //Title + // Title if (EmulationMode == XboxMode) SetConsoleTitle("DS4Emulator: Xbox controller mode"); else SetConsoleTitle("DS4Emulator: keyboard and mouse mode"); - while (!(GetAsyncKeyState(192) & 0x8000)) //~ + while (!(GetAsyncKeyState(KEY_ID_EXIT) & 0x8000)) // "~" by default { DS4_REPORT_INIT(&report); - //Xbox mode + // Xbox mode if (EmulationMode == XboxMode) { DWORD myStatus = ERROR_DEVICE_NOT_CONNECTED; if (hDll != NULL) @@ -254,18 +237,18 @@ int main(int argc, char **argv) if (myStatus == ERROR_SUCCESS) { - //Convert axis from - https://github.com/sam0x17/XJoy/blob/236b5539cc15ea1c83e1e5f0260937f69a78866d/Include/ViGEmUtil.h + // Convert axis from - https://github.com/sam0x17/XJoy/blob/236b5539cc15ea1c83e1e5f0260937f69a78866d/Include/ViGEmUtil.h report.bThumbLX = ((myPState.Gamepad.sThumbLX + ((USHRT_MAX / 2) + 1)) / 257); report.bThumbLY = (-(myPState.Gamepad.sThumbLY + ((USHRT_MAX / 2) - 1)) / 257); report.bThumbLY = (report.bThumbLY == 0) ? 0xFF : report.bThumbLY; - //Inverting X + // Inverting X if (InvertX == false) report.bThumbRX = ((myPState.Gamepad.sThumbRX + ((USHRT_MAX / 2) + 1)) / 257); else report.bThumbRX = ((-myPState.Gamepad.sThumbRX + ((USHRT_MAX / 2) + 1)) / 257); - //Inverting Y + // Inverting Y if (InvertY == false) report.bThumbRY = (-(myPState.Gamepad.sThumbRY + ((USHRT_MAX / 2) + 1)) / 257); else @@ -276,7 +259,7 @@ int main(int argc, char **argv) if (myPState.Gamepad.wButtons & XINPUT_GAMEPAD_START) report.wButtons |= DS4_BUTTON_OPTIONS; - //Swap share and touchpad + // Swap share and touchpad if (SwapShareTouchPad == false) { if ((GetAsyncKeyState(KEY_ID_SHARE) & 0x8000) != 0) report.wButtons |= DS4_BUTTON_SHARE; @@ -304,7 +287,7 @@ int main(int argc, char **argv) if (myPState.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB) report.wButtons |= DS4_BUTTON_THUMB_RIGHT; - //Swap triggers and shoulders + // Swap triggers and shoulders if (SwapTriggersShoulders == false) { if (myPState.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER) report.wButtons |= DS4_BUTTON_SHOULDER_LEFT; @@ -325,10 +308,9 @@ int main(int argc, char **argv) report.bTriggerR = 255; } - //Strange specific of DualShock - if (report.bTriggerL > 0) + if (report.bTriggerL > 0) // Specific of DualShock report.wButtons |= DS4_BUTTON_TRIGGER_LEFT; - if (report.bTriggerR > 0) + if (report.bTriggerR > 0) // Specific of DualShock report.wButtons |= DS4_BUTTON_TRIGGER_RIGHT; if (myPState.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP) @@ -350,7 +332,7 @@ int main(int argc, char **argv) DS4_SET_DPAD(&report, DS4_BUTTON_DPAD_SOUTHEAST); } } - //Mouse and keyboard mode + // Mouse and keyboard mode else if (EmulationMode == KBMode) { PSNowWindow = FindWindow(NULL, WindowTitle.c_str()); @@ -364,7 +346,7 @@ int main(int argc, char **argv) if (InvertY) DeltaMouseY = DeltaMouseY * -1; - //Are there better options? / ? + // Are there better options? / ? if (DeltaMouseX > 0) report.bThumbRX = 128 + round( Clamp( DeltaMouseX * mouseSensetiveX, 0, 127) ); if (DeltaMouseX < 0) @@ -386,14 +368,14 @@ int main(int argc, char **argv) if ((GetAsyncKeyState(KEY_ID_RIGHT_TRIGGER) & 0x8000) != 0) report.bTriggerR = 255; } - else { //With emulate analog triggers + else { // With emulate analog triggers if ((GetAsyncKeyState(KEY_ID_LEFT_TRIGGER) & 0x8000) != 0) { if (LeftTriggerValue < 255) LeftTriggerValue += StepTriggerValue; } else { - //LeftTriggerValue = 0; + // LeftTriggerValue = 0; if (LeftTriggerValue > 0) LeftTriggerValue -= StepTriggerValue; } @@ -405,7 +387,7 @@ int main(int argc, char **argv) RightTriggerValue += StepTriggerValue; } else { - //RightTriggerValue = 0; + // RightTriggerValue = 0; if (RightTriggerValue > 0) RightTriggerValue -= StepTriggerValue; } @@ -413,9 +395,10 @@ int main(int argc, char **argv) report.bTriggerR = Clamp(round(RightTriggerValue), 0, 255); } - if (report.bTriggerL > 0) //Strange specific of DualShock + + if (report.bTriggerL > 0) // Specific of DualShock report.wButtons |= DS4_BUTTON_TRIGGER_LEFT; - if (report.bTriggerR > 0) //Strange specific of DualShock + if (report.bTriggerR > 0) // Specific of DualShock report.wButtons |= DS4_BUTTON_TRIGGER_RIGHT; if ((GetAsyncKeyState(KEY_ID_OPTIONS) & 0x8000) != 0) diff --git a/Source/DS4Emulator.vcxproj b/Source/DS4Emulator.vcxproj index 5d35c93..0fdb3c2 100644 --- a/Source/DS4Emulator.vcxproj +++ b/Source/DS4Emulator.vcxproj @@ -175,6 +175,15 @@ {7db06674-1f4f-464b-8e1c-172e9587f9dc} + + + + + + + + + diff --git a/Source/Icon.ico b/Source/Icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..911044c58e6961b4d14c307151e7eca8b969aaef GIT binary patch literal 15086 zcmd5?d2kd}8gGiNTJnd5|6pY%gv2#mf+bnq)h$awDOXoZM08yjMRAqYtpZ)47TLuu z&~>qduqqP>M1TyzzW^w@u$>f-XLm=ea-`AOLdU|@UFsM`YoA=&# z_v`N0-QV{FVTdqPm^4X1n=F)!7KGmlf{>i-8{aMnZqRN=%lx;0AqdMLFb*m6`KqYVupeVsQtjjj; z2C@|U=>W;d z97!HaKAAR*zd-}vzUeXeSmj5Pb(H#1_BrO3%4I6MdTKqn0zRjz=(=>}IXIoE8v*nJ zB*C%uNouNiR~}1rZqFQfpPbvD)8r}TBJJ1aB;h<4P;GW%fKB82(F60Phz)i*R{5Rp zbe3*DKuR)wHq_Fc=P!j)Mo33)Mn`_ z0aD`J_aBk9DAkXq z@vr@8O1?R79JQS`1m!DbL-p&nK2B$jE(~d>-GulRvHAKOb7F0dZWe&G${%OHU4-lB zp#Zv4uHCqf%z0zTz57LKty)26kAFbclKX<{7}qCJ4W`wF#k%wioU^^t2+RY8jj5m)7fM12hi1W zJa+APhT3Wk)cnmmWLiIxOdFFCV~RiW?jqxQJvp~MA;x{?=mMc@LoNLF^i05-$1Ig5|_s_VFJ_)K*w{;5UaxISQS2z#TMLo4W z_1L|08Z{l76U?T|v_aPcU@ijTF=v6U*W^j^ttUSwTj{;BjK`cQ_azyrJ$q~+)op!P z=7*A%bXqEx;JW;ctRvBVEysRcMU!RE*DNP%@!j%ROU|{^H~;yV|9!ss*O&{|t@{%5 zZ(fIc1@ph#H~*lUH;%-$x)AsF>;PZl`2t_dH)z+*8%4kd+wn&u;%VIfvLD@6I+0qw zUyM1QDAV1$o}qT50ng=mWXT&T)7AEP?Aq~!D0}wU0K2%q8{ z@G&J~ZYGF!oZB9ubKfltWz%cP)42f5n>ISE*&@$YJR0XdgBth!iOwBgAhtYaI_tW3 z{GQGodykq9&I*Iq=zP_GM4i?XOX&L5UOM~jyR!cd%R10{VE;vG`EC)`tA}NtMvN{? zzU}~kDVatx#e@tbk=P;^cvNnWev_-%;UR(z)@@7|94 z_p(PkpOXB!Z|70N*VDq;n`JH3B?5f_{A;77@_nk`^OPpvR&pm@>OGIOXAa(15q}UH zN_z9*+0;_?F}0pvIUrv&66g3`oWqyJv8^bPy6W=7+2WWv_950HT_phj+OU@)ZRC4V64PYzM%?BtH z8unn_u3h0L~y zEPeve1JKQ)t!4=|?tT2G?fBy0m?lVZhH4$<@y`K$0PfSl;mnbjv9`<`w7$wO#}ZNg zTskhu&jqfl>_i+-r+pn{brH*l@WU}gRlksqp>9+BTfjAdqD7}8i=11MqSjOSVc%~_ z@eHPg{&b*6WjAbG4Z9ztF6VlD6a0moTa&}eYuIO>(+3l?TBmMv`~;v1z;h-V=<$B= z9Cg@NBQLQa8eR4k(Y>mUHP{&Th5`QqE&$QQBFegV+!Kio+h!jj*T`ToMnZ?}1n1^> z1JDaljKH=GY&((|Vj<()59uo z5(D-_q}Hs~w*wSow6pC{F@T=}u$*#_MlAbmTXP;xW$5CtkHYvP?CmhJFZDcNf5S@U z9tThLGGZucgXy=OSV|o=D^PzPrL?tD=^u6fF~Btddk~VT$61Vh2~UaWsVl%f0lj*! zKt$s%~c`;zZX)Vy<~ntHc23pJ?}xn6E5ypOsqYvr*d7p}FH zJwjb3gP)$)u|YY`HxZ0P8wSZ?!la`36R&YJrgy{Y(?FYyvUs?$5Ow?SwLRo z+?dZT*N080`-<3bC*n&Nc|Dk`UU#WTmvp68!*(|6oK?!&XAk?=sGC{}??z7hLF7{3 zMjhmS>b9*#99aWE{*Ps-_JM+f}G5dX%-rF7qnbPeuIxbx$6*RDMWp z$Qk##3Iq6T+f(&##D|pM9u%G5l&_J$1SAm~|K|V=teCd@|<0c&yBq zbh$p)bnta@eKl3&^&lVW#kab|_uAGVPd#29`{;eBd3kQsy#{JxqJPw$x-DOz1~X3t z_gSvf_$hT6mjm4TquaU)x%FiFp=BT9cocDtri%^bsGq-u^#{iUeHE~kNmr$=-*j6I z*n^Tv7wU_}ni$u`xX*H3rWHZ!KFqTgCDG+`d&sqY3XXRSU1%u5oV`iC_-0o7Vc)20 zWJ|RTskId+A>JIZ#&N-&PYmWUy~~8!Z;-kS^H_%YJogOlyLV0%*Hn3|@WVdE_f+J}bF}jN?p>4N z2kRO9dF=)qmz-yp`@PN_xi9g%OrOYlO$YxN!1u|C&mVpUA#XeexCTU&Cs)e#x^kk{ z@%fUUzhVrf@o9s}PmBJe&ugc#Pvs9e+&JVxjnU+0yDiJH=Hopjx}2_&eJOoQedGgE zfc6kMLpks0+?s-OoGp(d(ec^VeE(F$FbVmwR*k%wU#`t-#j)?3>PHKs(+dBSBtM~A z*hv9QVeDZ|TZ?-%hw67u3Ks|43VGb>c#!jn1JZ!2K=2&b7Cr9G{{`c-F5A#N-)f&) zW9W`X4k`yZkqbbixu6TI!@62F2SbDJ+klxs7H|@12c$d>_nF2#mboobA5<|^PSYUw zki_YP24p5GkX~RcMf!jtMER5SDtvYtV3TdL4>?r<-<+qo9Y_YE$y4C_J{5U}48RUt z@qzmp%!4`2AHIX*fJ}Uo_lNkd?-yktt2Bad$2j0{6yK*TE8D>LTjn6X;W9Y}eD9=U zKXt!r`}0IsTJV1Hyn64mJXXo{vo5|hGI*~m>q-c=KU?B+%Q~!!cX$UN>oSl1DC3aE zN`2O0UA*^R<#%5tkNa4QWty@t$@$)wuj0LpA - #include - #include - - int main() - { - CIniReader ini1("ini1.ini"); - ini1.WriteInteger("MAIN", "INTEGER", 33); - ini1.WriteFloat("MAIN", "FLOAT", 35.5f); - ini1.WriteBoolean("MAIN", "BOOL", false); - ini1.WriteString("MAIN", "STRING", "text"); - - CIniReader ini2("ini2.ini"); - ini2.WriteInteger("MAIN", "INTEGER", 33); - ini2.WriteFloat("MAIN", "FLOAT", 35.5f); - ini2.WriteBoolean("MAIN", "BOOL", false); - ini2.WriteString("MAIN", "STRING", "text"); - - std::cout << ini1.ReadInteger("MAIN", "INTEGER", 0) << std::endl; - std::cout << ini2.ReadString("MAIN", "STRING", "") << std::endl; - - if (ini1 == ini2) - std::cout << "ini1 and ini2 are the same." << std::endl; - - std::ifstream file("ini1.ini", std::ios::in); - std::stringstream ini_mem; - ini_mem << file.rdbuf(); - - CIniReader mem_ini(ini_mem); - - mem_ini.WriteInteger("MAIN", "INTEGER", 0); - - if (!mem_ini.CompareByValues(ini2)) - std::cout << "mem_ini and ini2 are different." << std::endl; - - return 0; - } - -Result: - -![](http://i.imgur.com/LyqVYN7.png) \ No newline at end of file diff --git a/Source/Resource.aps b/Source/Resource.aps new file mode 100644 index 0000000000000000000000000000000000000000..a5516acdeb185e2f489087c7433843f8787ae074 GIT binary patch literal 16508 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 literal 0 HcmV?d00001 diff --git a/Source/Resource.rc b/Source/Resource.rc new file mode 100644 index 0000000000000000000000000000000000000000..549a00db7ed28f42ca8524281d5353c703000594 GIT binary patch literal 214 zcmezWPnjW;A&()MA%~%qA%!88L4iSup$JG9GvotBihwey40;S1Kv7->E(UC>%fTi< w^dMA%RC_YG0C7AJJ2Ut*_%Rp)O~(ge>hP&SmQw3xc0Oy|@ssI20 literal 0 HcmV?d00001 diff --git a/Source/resource.h b/Source/resource.h new file mode 100644 index 0000000..3e129ef --- /dev/null +++ b/Source/resource.h @@ -0,0 +1,14 @@ +//{{NO_DEPENDENCIES}} + +#define IDI_ICON1 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif