2016-01-27 09:11:59 +00:00
|
|
|
/*
|
2021-05-18 11:51:36 +00:00
|
|
|
N-Rage`s Dinput8 Plugin
|
|
|
|
(C) 2002, 2006 Norbert Wladyka
|
2016-01-27 09:11:59 +00:00
|
|
|
|
2021-05-18 11:51:36 +00:00
|
|
|
Author`s Email: norbert.wladyka@chello.at
|
|
|
|
Website: http://go.to/nrage
|
2016-01-27 09:11:59 +00:00
|
|
|
|
2021-05-18 11:51:36 +00:00
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the free Software Foundation; either version 2 of the License, or
|
|
|
|
(at your option) any later version.
|
2016-01-27 09:11:59 +00:00
|
|
|
|
2021-05-18 11:51:36 +00:00
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
2016-01-27 09:11:59 +00:00
|
|
|
|
2021-05-18 11:51:36 +00:00
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program; if not, write to the free Software
|
|
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
2016-01-27 09:11:59 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _FILEACCESS_H_
|
|
|
|
#define _FILEACCESS_H_
|
|
|
|
|
2020-02-09 11:25:05 +00:00
|
|
|
#include <string>
|
|
|
|
|
2016-01-27 09:11:59 +00:00
|
|
|
#include "NRagePluginV2.h"
|
|
|
|
#include "Version.h"
|
2020-02-09 11:25:05 +00:00
|
|
|
|
2016-01-27 09:11:59 +00:00
|
|
|
using std::string;
|
|
|
|
|
|
|
|
bool GetDirectory( LPTSTR pszDirectory, WORD wDirID );
|
|
|
|
bool CheckFileExists( LPCTSTR FileName );
|
|
|
|
void GetAbsoluteFileName( LPTSTR szAbsolute, LPCTSTR szFileName, const WORD wDirID );
|
|
|
|
|
|
|
|
BOOL SendFilestoList( HWND hDlgItem, WORD wType );
|
|
|
|
bool StoreConfigToINI();
|
|
|
|
bool LoadConfigFromINI();
|
|
|
|
LANGID GetLanguageFromINI();
|
|
|
|
|
|
|
|
bool LoadProfileFile( LPCTSTR pszFileName, int iController, LPTSTR pszGameDevice, LPBYTE bGameDeviceNr );
|
|
|
|
bool LoadShortcutsFile( LPCTSTR pszFileName );
|
|
|
|
void FormatProfileBlock( FILE * fFile, const int iController );
|
|
|
|
void FormatShortcutsBlock( FILE * fFile, bool bIsINI );
|
|
|
|
bool BrowseFolders( HWND hwndParent, LPTSTR pszHeader, LPTSTR pszDirectory );
|
|
|
|
bool BrowseFile( HWND hDlg, LPTSTR pszFileName, DWORD dwType, bool fSave );
|
|
|
|
bool ReadMemPakFile( LPTSTR pszMemPakFile, BYTE *aMemPak, bool fCreate );
|
|
|
|
bool WriteMemPakFile( LPTSTR pszMemPakFile, BYTE *aMemPak, bool fCreate );
|
|
|
|
bool LoadProfileFromResource( int indexController, bool bIsInterface );
|
|
|
|
bool LoadShortcutsFromResource( bool bIsInterface );
|
|
|
|
inline void GUIDtoStringA( char * szGUIDbuf, const GUID guid );
|
|
|
|
inline bool StringtoGUIDA( LPGUID guid, const char * szGUIDbuf );
|
|
|
|
unsigned long djbHash(const char *str);
|
|
|
|
|
|
|
|
#ifdef _UNICODE
|
2020-02-09 11:36:49 +00:00
|
|
|
#define TCHAR_TO_CHAR(x,y,z) wcstombs(x,y,z)
|
|
|
|
#define CHAR_TO_TCHAR(x,y,z) mbstowcs(x,y,z)
|
2016-01-27 09:11:59 +00:00
|
|
|
#else
|
2020-02-09 11:36:49 +00:00
|
|
|
#define TCHAR_TO_CHAR(x,y,z) strncpy(x,y,z)
|
|
|
|
#define CHAR_TO_TCHAR(x,y,z) strncpy(x,y,z)
|
2016-01-27 09:11:59 +00:00
|
|
|
#endif
|
|
|
|
|
2020-02-09 11:36:49 +00:00
|
|
|
#define STRING_DEF_MEMPAKFILE _T("MemPaks")
|
|
|
|
#define STRING_DEF_GBROMFILE _T("GBxRoms")
|
|
|
|
#define STRING_DEF_GBROMSAVE _T("GBxSaves")
|
2016-01-27 09:11:59 +00:00
|
|
|
|
2020-02-09 11:36:49 +00:00
|
|
|
#define STRING_INI_HEADER "# Generated by NRage input plugin V2 version " VER_FILE_VERSION_STR "\n"
|
2021-05-18 11:51:36 +00:00
|
|
|
// We use these names for loading from INI files and N-Rage config files
|
2020-02-09 11:36:49 +00:00
|
|
|
#define STRING_INI_GENERAL "General"
|
|
|
|
#define STRING_INI_CONTROLLER "Controller"
|
|
|
|
#define STRING_INI_FOLDERS "Folders"
|
|
|
|
#define STRING_INI_BROWSER "lastBrowserDir"
|
|
|
|
#define STRING_INI_CONTROLS "Controls"
|
|
|
|
#define STRING_INI_SHORTCUTS "Shortcuts"
|
|
|
|
#define STRING_INI_MODIFIERS "Modifiers"
|
|
|
|
|
|
|
|
#define STRING_INI_LANGUAGE "Language"
|
|
|
|
#define STRING_INI_SHOWMESSAGES "ShowMessages"
|
|
|
|
|
|
|
|
#define STRING_INI_BRPROFILE "Profile"
|
|
|
|
#define STRING_INI_BRNOTE "Note"
|
|
|
|
#define STRING_INI_BRMEMPAK "Mempak"
|
|
|
|
#define STRING_INI_BRGBROM "GBxRom"
|
|
|
|
#define STRING_INI_BRGBSAVE "GBxSave"
|
|
|
|
// #define STRING_INI_BRSHORTCUTS STRING_INI_SHORTCUTS
|
|
|
|
|
|
|
|
#define STRING_INI_PLUGGED "Plugged"
|
|
|
|
#define STRING_INI_XINPUT "xInput"
|
|
|
|
#define STRING_INI_N64MOUSE "N64Mouse"
|
|
|
|
#define STRING_INI_BACKGROUNDINPUT "BackgroundInput"
|
|
|
|
#define STRING_INI_RAWDATA "RawData"
|
|
|
|
#define STRING_INI_PAKTYPE "PakType"
|
|
|
|
#define STRING_INI_REALN64RANGE "RealN64Range"
|
|
|
|
#define STRING_INI_RAPIDFIREENABLED "RapidFireEnabled"
|
|
|
|
#define STRING_INI_RAPIDFIRERATE "RapidFireRate"
|
|
|
|
#define STRING_INI_STICKRANGE "StickRange"
|
|
|
|
#define STRING_INI_MOUSEMOVEX "MouseMoveX"
|
|
|
|
#define STRING_INI_MOUSEMOVEY "MouseMoveY"
|
|
|
|
#define STRING_INI_AXISSET "AxisSet"
|
|
|
|
#define STRING_INI_KEYABSOLUTEX "KeyAbsoluteX"
|
|
|
|
#define STRING_INI_KEYABSOLUTEY "KeyAbsoluteY"
|
|
|
|
#define STRING_INI_PADDEADZONE "PadDeadZone"
|
|
|
|
#define STRING_INI_MOUSESENSX "MouseSensitivityX"
|
|
|
|
#define STRING_INI_MOUSESENSY "MouseSensitivityY"
|
|
|
|
#define STRING_INI_RUMBLETYPE "RumbleType"
|
|
|
|
#define STRING_INI_RUMBLESTRENGTH "RumbleStrength"
|
|
|
|
#define STRING_INI_VISUALRUMBLE "VisualRumble"
|
|
|
|
#define STRING_INI_FFDEVICEGUID "FFDeviceGUID"
|
|
|
|
#define STRING_INI_MEMPAKFILE "MemPakFile"
|
|
|
|
#define STRING_INI_GBROMFILE "GBRomFile"
|
|
|
|
#define STRING_INI_GBROMSAVE "GBRomSave"
|
|
|
|
|
|
|
|
#define STRING_INI_DINPUTGUID "DInputGUID"
|
|
|
|
#define STRING_INI_BUTTON "Button"
|
|
|
|
#define STRING_INI_MODIFIER "Modifier"
|
2016-01-27 09:11:59 +00:00
|
|
|
|
|
|
|
// The following are not found in INI files; only profile and shortcuts files
|
|
|
|
#define STRING_PROFILEVERSION22 "Controller Profile 2.2"
|
2020-02-09 11:36:49 +00:00
|
|
|
#define STRING_PROFILEVERSION STRING_PROFILEVERSION22
|
2016-01-27 09:11:59 +00:00
|
|
|
|
2020-02-09 11:36:49 +00:00
|
|
|
#define STRING_INI_FFDEVICENAME "FFDeviceName"
|
|
|
|
#define STRING_INI_FFDEVICENR "FFDeviceNr"
|
|
|
|
#define STRING_INI_DINPUTNAME "DInputName"
|
|
|
|
#define STRING_INI_DINPUTNR "DInputNr"
|
2016-01-27 09:11:59 +00:00
|
|
|
|
|
|
|
|
2021-05-18 11:51:36 +00:00
|
|
|
// The following are hashes for the string values above
|
2016-01-27 09:11:59 +00:00
|
|
|
|
2021-05-18 11:51:36 +00:00
|
|
|
// Version strings, including the @ in front
|
2016-01-27 09:11:59 +00:00
|
|
|
#define CHK_PROFILEVERSION20 2278962538UL
|
|
|
|
#define CHK_PROFILEVERSION21 2278962539UL
|
|
|
|
#define CHK_PROFILEVERSION22 2278962540UL
|
|
|
|
|
2021-05-18 11:51:36 +00:00
|
|
|
// Categories
|
2016-01-27 09:11:59 +00:00
|
|
|
#define CHK_GENERAL 63249731UL
|
|
|
|
#define CHK_FOLDERS 3455681620UL
|
|
|
|
#define CHK_LASTBROWSERDIR 2659654652UL
|
|
|
|
#define CHK_CONTROLLER_1 3910856026UL
|
|
|
|
#define CHK_CONTROLLER_2 3910856027UL
|
|
|
|
#define CHK_CONTROLLER_3 3910856028UL
|
|
|
|
#define CHK_CONTROLLER_4 3910856029UL
|
|
|
|
#define CHK_CONTROLS 3459743001UL
|
|
|
|
#define CHK_SHORTCUTS 2945387732UL
|
|
|
|
#define CHK_MODIFIERS 95935975UL
|
|
|
|
|
2021-05-18 11:51:36 +00:00
|
|
|
// Assignments (to the left of the '=' sign)
|
2016-01-27 09:11:59 +00:00
|
|
|
#define CHK_LANGUAGE 3857633481UL
|
|
|
|
#define CHK_SHOWMESSAGES 638097246UL
|
|
|
|
|
|
|
|
#define CHK_MEMPAK 3230166560UL
|
|
|
|
#define CHK_GBXROM 2992194388UL
|
|
|
|
#define CHK_GBXSAVE 4253155349UL
|
|
|
|
|
|
|
|
#define CHK_PROFILE 3606499382UL
|
|
|
|
#define CHK_NOTE 2089365563UL
|
|
|
|
|
|
|
|
#define CHK_PLUGGED 3378836077UL
|
|
|
|
#define CHK_XINPUT 3665436173UL
|
|
|
|
#define CHK_N64MOUSE 863329606UL
|
2019-04-20 04:44:04 +00:00
|
|
|
#define CHK_BACKGROUNDINPUT 2660742997UL
|
2016-01-27 09:11:59 +00:00
|
|
|
#define CHK_RAWDATA 1238573385UL
|
|
|
|
#define CHK_PAKTYPE 2936974691UL
|
|
|
|
#define CHK_REALN64RANGE 1279831790UL
|
|
|
|
#define CHK_RAPIDFIREENABLED 1491009894UL
|
|
|
|
#define CHK_RAPIDFIRERATE 1576165031UL
|
|
|
|
#define CHK_STICKRANGE 4145501776UL
|
|
|
|
#define CHK_MOUSEMOVEX 1825694205UL
|
|
|
|
#define CHK_MOUSEMOVEY 1825694206UL
|
|
|
|
#define CHK_AXISSET 1642523718UL
|
|
|
|
#define CHK_KEYABSOLUTEX 958566277UL
|
|
|
|
#define CHK_KEYABSOLUTEY 958566278UL
|
|
|
|
#define CHK_PADDEADZONE 2913910084UL
|
|
|
|
#define CHK_MOUSESENSITIVITYX 1513071697UL
|
|
|
|
#define CHK_MOUSESENSITIVITYY 1513071698UL
|
|
|
|
#define CHK_RUMBLETYPE 3440038446UL
|
|
|
|
#define CHK_RUMBLESTRENGTH 3038086267UL
|
|
|
|
#define CHK_VISUALRUMBLE 1795686016UL
|
|
|
|
#define CHK_FFDEVICEGUID 2645316746UL
|
|
|
|
#define CHK_MEMPAKFILE 2373591360UL
|
|
|
|
#define CHK_GBROMFILE 2409678172UL
|
|
|
|
#define CHK_GBROMSAVE 2410136971UL
|
|
|
|
|
|
|
|
#define CHK_DINPUTGUID 1452894242UL
|
|
|
|
#define CHK_BUTTON 2818908353UL
|
|
|
|
#define CHK_MODIFIER 4037573396UL
|
|
|
|
|
|
|
|
|
|
|
|
// The following are not found in INI files; only profile and shortcuts files
|
|
|
|
#define CHK_FFDEVICENAME 2645546658UL
|
|
|
|
#define CHK_FFDEVICENR 2037510273UL
|
|
|
|
#define CHK_DINPUTNAME 1453124154UL
|
|
|
|
#define CHK_DINPUTNR 3965009433UL
|
|
|
|
|
|
|
|
|
|
|
|
// If any of the following values conflict with djbHash return values (such as a blank string), there will be problems!
|
|
|
|
|
2021-05-18 11:51:36 +00:00
|
|
|
// Nothing
|
2020-02-09 11:36:49 +00:00
|
|
|
#define PL_NOHIT 0
|
2021-05-18 11:51:36 +00:00
|
|
|
// [Category]
|
2020-02-09 11:36:49 +00:00
|
|
|
#define PL_CATEGORY 1
|
2021-05-18 11:51:36 +00:00
|
|
|
// @STRING_PROFILEVERSION
|
2020-02-09 11:36:49 +00:00
|
|
|
#define PL_VERSIONSTRING 10
|
2016-01-27 09:11:59 +00:00
|
|
|
|
2021-05-18 11:51:36 +00:00
|
|
|
// Resets the static vars in ProcessKey
|
2020-02-09 11:36:49 +00:00
|
|
|
#define PL_RESET 200
|
2016-01-27 09:11:59 +00:00
|
|
|
|
2020-02-09 11:36:49 +00:00
|
|
|
#define DIRECTORY_MEMPAK 0
|
|
|
|
#define DIRECTORY_GBROMS 1
|
|
|
|
#define DIRECTORY_GBSAVES 2
|
|
|
|
#define DIRECTORY_CONFIG 252
|
|
|
|
#define DIRECTORY_LOG 253
|
|
|
|
#define DIRECTORY_DLL 254
|
|
|
|
#define DIRECTORY_APPLICATION 255
|
|
|
|
#define DIRECTORY_INVALID 256
|
2016-01-27 09:11:59 +00:00
|
|
|
|
2020-02-09 11:36:49 +00:00
|
|
|
#define FILIST_MEM 1
|
|
|
|
#define FILIST_TRANSFER 2
|
2016-01-27 09:11:59 +00:00
|
|
|
|
2020-02-09 11:36:49 +00:00
|
|
|
#define BF_LOAD false
|
|
|
|
#define BF_SAVE true
|
2016-01-27 09:11:59 +00:00
|
|
|
|
2020-02-09 11:36:49 +00:00
|
|
|
#define BF_MEMPAK 0
|
|
|
|
#define BF_GBROM 1
|
|
|
|
#define BF_GBSAVE 2
|
|
|
|
#define BF_PROFILE 3
|
|
|
|
#define BF_NOTE 4
|
|
|
|
#define BF_SHORTCUTS 5
|
2016-01-27 09:11:59 +00:00
|
|
|
|
2021-05-18 11:51:36 +00:00
|
|
|
// 32 hex characters, 4 hyphens, 2 end braces
|
2020-02-09 11:36:49 +00:00
|
|
|
#define GUID_STRINGLENGTH 32+4+2
|
2016-01-27 09:11:59 +00:00
|
|
|
|
|
|
|
#endif // #ifndef _FILEACCESS_H_
|