DXGL r946 - Code Review

Jump to navigation Jump to search
Repository:DXGL
Revision:r945‎ | r946 | r947 >
Date:02:46, 11 September 2019
Author:admin
Status:new
Tags:
Comment:
Add Include support to INI files.
Check for dxgl.cfg before dxgl.ini (same format)
Fix Unicode builds.
Modified paths:
  • /cfgmgr/cfgmgr.c (modified) (history)
  • /cfgmgr/cfgmgr.h (modified) (history)
  • /dxgl-example.ini (modified) (history)

Diff [purge]

Index: cfgmgr/cfgmgr.c
@@ -59,14 +59,16 @@
6060 #define INISECTION_HACKS 8
6161
6262 static int ini_currentsection = 0;
 63+static int ini_depth = 0;
6364
6465 void _tchartowchar(WCHAR *dest, TCHAR *src, int length)
6566 {
6667 #ifdef _UNICODE
67 - wcsncpy(dest,src,length);
 68+ if (length == -1) wcscpy(dest, src);
 69+ else wcsncpy(dest,src,length);
6870 #else
6971 int length2 = length;
70 - if(length == -1) length2 = strlen(src) + 1;
 72+ if(length == -1) length2 = (int)strlen(src) + 1;
7173 MultiByteToWideChar(CP_ACP,0,src,length,dest,length2);
7274 #endif
7375 }
@@ -74,14 +76,24 @@
7577 void _wchartotchar(TCHAR *dest, WCHAR *src, int length)
7678 {
7779 #ifdef _UNICODE
78 - wcsncpy(dest,src,length);
 80+ if (length == -1) wcscpy(dest, src);
 81+ else wcsncpy(dest, src, length);
7982 #else
8083 int length2 = length;
81 - if(length == -1) length2 = wcslen(src) + 1;
 84+ if(length == -1) length2 = (int)wcslen(src) + 1;
8285 WideCharToMultiByte(CP_ACP,0,src,length,dest,length2,NULL,NULL);
8386 #endif
8487 }
8588
 89+void utf8to16(WCHAR* dest, CHAR* src)
 90+{
 91+ int sizein;
 92+ int sizeout;
 93+ sizein = strlen(src)+1;
 94+ sizeout = MultiByteToWideChar(CP_UTF8, MB_PRECOMPOSED, src, sizein, NULL, 0);
 95+ MultiByteToWideChar(CP_UTF8, MB_PRECOMPOSED, src, sizein, dest, sizeout);
 96+}
 97+
8698 /**
8799 * Gets the hexadecimal digit for a number; the number must be less than 16
88100 * or 0x10.
@@ -1074,137 +1086,163 @@
10751087 int ReadINICallback(DXGLCFG *cfg, const char *section, const char *name,
10761088 const char *value)
10771089 {
 1090+ FILE *file;
 1091+ TCHAR inipath[MAX_PATH + 10];
10781092 #ifdef _UNICODE
10791093 TCHAR unicode_path[MAX_PATH + 1];
10801094 #endif
1081 - if (!_stricmp(section, "system"))
 1095+ if (!_stricmp(name, "Include"))
10821096 {
1083 - if (!_stricmp(name, "NoWriteRegistry")) cfg->NoWriteRegistry = INIBoolValue(value);
1084 - if (!_stricmp(name, "OverrideDefaults")) cfg->OverrideDefaults = INIBoolValue(value);
1085 - }
1086 - if (!_stricmp(section, "display"))
1087 - {
1088 - if (!_stricmp(name, "ScalingMode")) cfg->scaler = INIIntValue(value);
1089 - if (!_stricmp(name, "FullscreenWindowMode")) cfg->fullmode = INIIntValue(value);
1090 - if (!_stricmp(name, "ChangeColorDepth")) cfg->colormode = INIBoolValue(value);
1091 - if (!_stricmp(name, "AllColorDepths"))
 1097+ ini_depth++;
 1098+ if(ini_depth <= 16)
10921099 {
1093 - if (!cfg->ParsedAddColorDepths)
 1100+ _tcscpy(inipath, cfg->inipath);
 1101+ _tcscat(inipath, _T("\\"));
 1102+ #ifdef _UNICODE
 1103+ utf8to16(unicode_path, value);
 1104+ _tcsncat(inipath, unicode_path, MAX_PATH);
 1105+ #else
 1106+ _tcscat(inipath, value);
 1107+ #endif
 1108+ file = _tfopen(inipath, _T("r"));
 1109+ if (file)
10941110 {
1095 - if (INIBoolValue(value)) cfg->AddColorDepths = 1 | 4 | 16;
1096 - else cfg->AddColorDepths = 0;
 1111+ ini_parse_file(file, ReadINICallback, cfg);
 1112+ fclose(file);
10971113 }
10981114 }
1099 - if (!_stricmp(name, "AddColorDepths"))
 1115+ ini_depth--;
 1116+ }
 1117+ else {
 1118+ if (!_stricmp(section, "system"))
11001119 {
1101 - cfg->ParsedAddColorDepths = TRUE;
1102 - cfg->AddColorDepths = INIIntValue(value);
 1120+ if (!_stricmp(name, "NoWriteRegistry")) cfg->NoWriteRegistry = INIBoolValue(value);
 1121+ if (!_stricmp(name, "OverrideDefaults")) cfg->OverrideDefaults = INIBoolValue(value);
11031122 }
1104 - if (!_stricmp(name, "ExtraModes"))
 1123+ if (!_stricmp(section, "display"))
11051124 {
1106 - if (!cfg->ParsedAddModes)
 1125+ if (!_stricmp(name, "ScalingMode")) cfg->scaler = INIIntValue(value);
 1126+ if (!_stricmp(name, "FullscreenWindowMode")) cfg->fullmode = INIIntValue(value);
 1127+ if (!_stricmp(name, "ChangeColorDepth")) cfg->colormode = INIBoolValue(value);
 1128+ if (!_stricmp(name, "AllColorDepths"))
11071129 {
1108 - if (INIBoolValue(value)) cfg->AddModes = 7;
1109 - else cfg->AddModes = 0;
 1130+ if (!cfg->ParsedAddColorDepths)
 1131+ {
 1132+ if (INIBoolValue(value)) cfg->AddColorDepths = 1 | 4 | 16;
 1133+ else cfg->AddColorDepths = 0;
 1134+ }
11101135 }
 1136+ if (!_stricmp(name, "AddColorDepths"))
 1137+ {
 1138+ cfg->ParsedAddColorDepths = TRUE;
 1139+ cfg->AddColorDepths = INIIntValue(value);
 1140+ }
 1141+ if (!_stricmp(name, "ExtraModes"))
 1142+ {
 1143+ if (!cfg->ParsedAddModes)
 1144+ {
 1145+ if (INIBoolValue(value)) cfg->AddModes = 7;
 1146+ else cfg->AddModes = 0;
 1147+ }
 1148+ }
 1149+ if (!_stricmp(name, "AddModes"))
 1150+ {
 1151+ cfg->ParsedAddModes = TRUE;
 1152+ cfg->AddModes = INIIntValue(value);
 1153+ }
 1154+ if (!_stricmp(name, "SortModes")) cfg->SortModes = INIIntValue(value);
 1155+ if (!_stricmp(name, "VSync")) cfg->vsync = INIIntValue(value);
 1156+ if (!_stricmp(name, "CustomResolutionX")) cfg->CustomResolutionX = INIIntValue(value);
 1157+ if (!_stricmp(name, "CustomResolutionY")) cfg->CustomResolutionY = INIIntValue(value);
 1158+ if (!_stricmp(name, "CustomRefresh")) cfg->CustomRefresh = INIIntValue(value);
 1159+ if (!_stricmp(name, "DisplayMultiplierX")) cfg->DisplayMultiplierX = INIFloatValue(value);
 1160+ if (!_stricmp(name, "DisplayMultiplierY")) cfg->DisplayMultiplierY = INIFloatValue(value);
 1161+ if (!_stricmp(name, "SingleBufferDevice")) cfg->SingleBufferDevice = INIBoolValue(value);
11111162 }
1112 - if (!_stricmp(name, "AddModes"))
 1163+ if (!_stricmp(section, "scaling"))
11131164 {
1114 - cfg->ParsedAddModes = TRUE;
1115 - cfg->AddModes = INIIntValue(value);
 1165+ if (!_stricmp(name, "ScalingFilter")) cfg->scalingfilter = INIIntValue(value);
 1166+ if (!_stricmp(name, "BltScale")) cfg->BltScale = INIIntValue(value);
 1167+ // Removed for DXGL 0.5.13 release
 1168+ // if (!_stricmp(name, "BltThreshold")) cfg->BltThreshold = INIIntValue(value);
 1169+ if (!_stricmp(name, "AdjustPrimaryResolution")) cfg->primaryscale = INIIntValue(value);
 1170+ if (!_stricmp(name, "PrimaryScaleX")) cfg->primaryscalex = INIFloatValue(value);
 1171+ if (!_stricmp(name, "PrimaryScaleY")) cfg->primaryscaley = INIFloatValue(value);
 1172+ if (!_stricmp(name, "ScreenAspect")) cfg->aspect = INIAspectValue(value);
 1173+ if (!_stricmp(name, "DPIScale")) cfg->DPIScale = INIIntValue(value);
11161174 }
1117 - if (!_stricmp(name, "SortModes")) cfg->SortModes = INIIntValue(value);
1118 - if (!_stricmp(name, "VSync")) cfg->vsync = INIIntValue(value);
1119 - if (!_stricmp(name, "CustomResolutionX")) cfg->CustomResolutionX = INIIntValue(value);
1120 - if (!_stricmp(name, "CustomResolutionY")) cfg->CustomResolutionY = INIIntValue(value);
1121 - if (!_stricmp(name, "CustomRefresh")) cfg->CustomRefresh = INIIntValue(value);
1122 - if (!_stricmp(name, "DisplayMultiplierX")) cfg->DisplayMultiplierX = INIFloatValue(value);
1123 - if (!_stricmp(name, "DisplayMultiplierY")) cfg->DisplayMultiplierY = INIFloatValue(value);
1124 - if (!_stricmp(name, "SingleBufferDevice")) cfg->SingleBufferDevice = INIBoolValue(value);
1125 - }
1126 - if (!_stricmp(section, "scaling"))
1127 - {
1128 - if (!_stricmp(name, "ScalingFilter")) cfg->scalingfilter = INIIntValue(value);
1129 - if (!_stricmp(name, "BltScale")) cfg->BltScale = INIIntValue(value);
1130 - // Removed for DXGL 0.5.13 release
1131 - // if (!_stricmp(name, "BltThreshold")) cfg->BltThreshold = INIIntValue(value);
1132 - if (!_stricmp(name, "AdjustPrimaryResolution")) cfg->primaryscale = INIIntValue(value);
1133 - if (!_stricmp(name, "PrimaryScaleX")) cfg->primaryscalex = INIFloatValue(value);
1134 - if (!_stricmp(name, "PrimaryScaleY")) cfg->primaryscaley = INIFloatValue(value);
1135 - if (!_stricmp(name, "ScreenAspect")) cfg->aspect = INIAspectValue(value);
1136 - if (!_stricmp(name, "DPIScale")) cfg->DPIScale = INIIntValue(value);
1137 - }
1138 - if (!_stricmp(section, "postprocess"))
1139 - {
1140 - if (!_stricmp(name, "PostprocessFilter")) cfg->postfilter = INIIntValue(value);
1141 - if (!_stricmp(name, "PostprocessScaleX")) cfg->postsizex = INIFloatValue(value);
1142 - if (!_stricmp(name, "PostprocessScaleY")) cfg->postsizex = INIFloatValue(value);
1143 - if (!_stricmp(name, "EnableShader")) cfg->EnableShader = INIBoolValue(value);
1144 - if (!_stricmp(name, "ShaderFile"))
 1175+ if (!_stricmp(section, "postprocess"))
11451176 {
 1177+ if (!_stricmp(name, "PostprocessFilter")) cfg->postfilter = INIIntValue(value);
 1178+ if (!_stricmp(name, "PostprocessScaleX")) cfg->postsizex = INIFloatValue(value);
 1179+ if (!_stricmp(name, "PostprocessScaleY")) cfg->postsizex = INIFloatValue(value);
 1180+ if (!_stricmp(name, "EnableShader")) cfg->EnableShader = INIBoolValue(value);
 1181+ if (!_stricmp(name, "ShaderFile"))
 1182+ {
11461183 #ifdef _UNICODE
1147 - MultiByteToWideChar(CP_UTF8, MB_PRECOMPOSED, value, strlen(value), unicode_path, MAX_PATH);
1148 - _tcsncpy(cfg->shaderfile, unicode_path, MAX_PATH);
 1184+ utf8to16(unicode_path, value);
 1185+ _tcsncpy(cfg->shaderfile, unicode_path, MAX_PATH);
11491186 #else
1150 - _tcsncpy(cfg->shaderfile, value, MAX_PATH);
 1187+ _tcsncpy(cfg->shaderfile, value, MAX_PATH);
11511188 #endif
 1189+ }
11521190 }
 1191+ if (!_stricmp(section, "d3d"))
 1192+ {
 1193+ if (!_stricmp(name, "TextureFilter")) cfg->texfilter = INIIntValue(value);
 1194+ if (!_stricmp(name, "AnisotropicFiltering")) cfg->anisotropic = INIIntValue(value);
 1195+ if (!_stricmp(name, "Antialiasing")) cfg->msaa = INIHexValue(value);
 1196+ if (!_stricmp(name, "D3DAspect")) cfg->aspect3d = INIIntValue(value);
 1197+ if (!_stricmp(name, "LowColorRendering")) cfg->LowColorRendering = INIIntValue(value);
 1198+ if (!_stricmp(name, "EnableDithering")) cfg->EnableDithering = INIIntValue(value);
 1199+ if (!_stricmp(name, "LimitTextureFormats")) cfg->LimitTextureFormats = INIIntValue(value);
 1200+ }
 1201+ if (!_stricmp(section, "advanced"))
 1202+ {
 1203+ if (!_stricmp(name, "TextureFormat")) cfg->TextureFormat = INIIntValue(value);
 1204+ if (!_stricmp(name, "TexUpload")) cfg->TexUpload = INIIntValue(value);
 1205+ if (!_stricmp(name, "WindowPosition")) cfg->WindowPosition = INIIntValue(value);
 1206+ if (!_stricmp(name, "RememberWindowSize")) cfg->RememberWindowSize = INIBoolValue(value);
 1207+ if (!_stricmp(name, "RememberWindowPosition")) cfg->RememberWindowPosition = INIBoolValue(value);
 1208+ if (!_stricmp(name, "NoResizeWindow")) cfg->NoResizeWindow = INIBoolValue(value);
 1209+ if (!_stricmp(name, "WindowX")) cfg->WindowX = INIIntValue(value);
 1210+ if (!_stricmp(name, "WindowY")) cfg->WindowY = INIIntValue(value);
 1211+ if (!_stricmp(name, "WindowWidth")) cfg->WindowWidth = INIIntValue(value);
 1212+ if (!_stricmp(name, "WindowHeight")) cfg->WindowHeight = INIIntValue(value);
 1213+ if (!_stricmp(name, "WindowMaximized")) cfg->WindowMaximized = INIBoolValue(value);
 1214+ if (!_stricmp(name, "CaptureMouse")) cfg->CaptureMouse = INIBoolValue(value);
 1215+ }
 1216+ if (!_stricmp(section, "debug"))
 1217+ {
 1218+ if (!_stricmp(name, "DebugNoExtFramebuffer")) cfg->DebugNoExtFramebuffer = INIBoolValue(value);
 1219+ if (!_stricmp(name, "DebugNoArbFramebuffer")) cfg->DebugNoArbFramebuffer = INIBoolValue(value);
 1220+ if (!_stricmp(name, "DebugNoES2Compatibility")) cfg->DebugNoES2Compatibility = INIBoolValue(value);
 1221+ if (!_stricmp(name, "DebugNoExtDirectStateAccess")) cfg->DebugNoExtDirectStateAccess = INIBoolValue(value);
 1222+ if (!_stricmp(name, "DebugNoArbDirectStateAccess")) cfg->DebugNoArbDirectStateAccess = INIBoolValue(value);
 1223+ if (!_stricmp(name, "DebugNoSamplerObjects")) cfg->DebugNoSamplerObjects = INIBoolValue(value);
 1224+ if (!_stricmp(name, "DebugNoGpuShader4")) cfg->DebugNoGpuShader4 = INIBoolValue(value);
 1225+ if (!_stricmp(name, "DebugNoGLSL130")) cfg->DebugNoGLSL130 = INIBoolValue(value);
 1226+ if (!_stricmp(name, "DebugUploadAfterUnlock")) cfg->DebugUploadAfterUnlock = INIBoolValue(value);
 1227+ if (!_stricmp(name, "DebugBlendDestColorKey")) cfg->DebugBlendDestColorKey = INIBoolValue(value);
 1228+ if (!_stricmp(name, "DebugNoMouseHooks")) cfg->DebugNoMouseHooks = INIBoolValue(value);
 1229+ if (!_stricmp(name, "DebugNoPaletteRedraw")) cfg->DebugNoPaletteRedraw = INIBoolValue(value);
 1230+ if (!_stricmp(name, "DebugMaxGLVersionMajor")) cfg->DebugMaxGLVersionMajor = INIIntValue(value);
 1231+ if (!_stricmp(name, "DebugMaxGLVersionMinor")) cfg->DebugMaxGLVersionMinor = INIIntValue(value);
 1232+ if (!_stricmp(name, "DebugTraceLevel")) cfg->DebugTraceLevel = INIIntValue(value);
 1233+ }
 1234+ if (!_stricmp(section, "hacks"))
 1235+ {
 1236+ if (!_stricmp(name, "HackCrop640480to640400")) cfg->HackCrop640480to640400 = INIBoolValue(value);
 1237+ if (!_stricmp(name, "HackAutoExpandViewport")) cfg->HackAutoExpandViewport = INIIntBoolValue(value);
 1238+ if (!_stricmp(name, "HackAutoScale512448to640480")) cfg->HackAutoExpandViewport = INIIntBoolValue(value);
 1239+ if (!_stricmp(name, "HackAutoExpandViewportCompare")) cfg->HackAutoExpandViewportCompare = INIIntValue(value);
 1240+ if (!_stricmp(name, "HackAutoExpandViewportValue")) cfg->HackAutoExpandViewportValue = INIHexValue(value);
 1241+ if (!_stricmp(name, "HackNoTVRefresh")) cfg->HackNoTVRefresh = INIBoolValue(value);
 1242+ if (!_stricmp(name, "HackSetCursor")) cfg->HackSetCursor = INIBoolValue(value);
 1243+ if (!_stricmp(name, "HackPaletteDelay")) cfg->HackPaletteDelay = INIIntValue(value);
 1244+ if (!_stricmp(name, "HackPaletteVsync")) cfg->HackPaletteVsync = INIBoolValue(value);
 1245+ }
11531246 }
1154 - if (!_stricmp(section, "d3d"))
1155 - {
1156 - if (!_stricmp(name, "TextureFilter")) cfg->texfilter = INIIntValue(value);
1157 - if (!_stricmp(name, "AnisotropicFiltering")) cfg->anisotropic = INIIntValue(value);
1158 - if (!_stricmp(name, "Antialiasing")) cfg->msaa = INIHexValue(value);
1159 - if (!_stricmp(name, "D3DAspect")) cfg->aspect3d = INIIntValue(value);
1160 - if (!_stricmp(name, "LowColorRendering")) cfg->LowColorRendering = INIIntValue(value);
1161 - if (!_stricmp(name, "EnableDithering")) cfg->EnableDithering = INIIntValue(value);
1162 - if (!_stricmp(name, "LimitTextureFormats")) cfg->LimitTextureFormats = INIIntValue(value);
1163 - }
1164 - if (!_stricmp(section, "advanced"))
1165 - {
1166 - if (!_stricmp(name, "TextureFormat")) cfg->TextureFormat = INIIntValue(value);
1167 - if (!_stricmp(name, "TexUpload")) cfg->TexUpload = INIIntValue(value);
1168 - if (!_stricmp(name, "WindowPosition")) cfg->WindowPosition = INIIntValue(value);
1169 - if (!_stricmp(name, "RememberWindowSize")) cfg->RememberWindowSize = INIBoolValue(value);
1170 - if (!_stricmp(name, "RememberWindowPosition")) cfg->RememberWindowPosition = INIBoolValue(value);
1171 - if (!_stricmp(name, "NoResizeWindow")) cfg->NoResizeWindow = INIBoolValue(value);
1172 - if (!_stricmp(name, "WindowX")) cfg->WindowX = INIIntValue(value);
1173 - if (!_stricmp(name, "WindowY")) cfg->WindowY = INIIntValue(value);
1174 - if (!_stricmp(name, "WindowWidth")) cfg->WindowWidth = INIIntValue(value);
1175 - if (!_stricmp(name, "WindowHeight")) cfg->WindowHeight = INIIntValue(value);
1176 - if (!_stricmp(name, "WindowMaximized")) cfg->WindowMaximized = INIBoolValue(value);
1177 - if (!_stricmp(name, "CaptureMouse")) cfg->CaptureMouse = INIBoolValue(value);
1178 - }
1179 - if (!_stricmp(section, "debug"))
1180 - {
1181 - if (!_stricmp(name, "DebugNoExtFramebuffer")) cfg->DebugNoExtFramebuffer = INIBoolValue(value);
1182 - if (!_stricmp(name, "DebugNoArbFramebuffer")) cfg->DebugNoArbFramebuffer = INIBoolValue(value);
1183 - if (!_stricmp(name, "DebugNoES2Compatibility")) cfg->DebugNoES2Compatibility = INIBoolValue(value);
1184 - if (!_stricmp(name, "DebugNoExtDirectStateAccess")) cfg->DebugNoExtDirectStateAccess = INIBoolValue(value);
1185 - if (!_stricmp(name, "DebugNoArbDirectStateAccess")) cfg->DebugNoArbDirectStateAccess = INIBoolValue(value);
1186 - if (!_stricmp(name, "DebugNoSamplerObjects")) cfg->DebugNoSamplerObjects = INIBoolValue(value);
1187 - if (!_stricmp(name, "DebugNoGpuShader4")) cfg->DebugNoGpuShader4 = INIBoolValue(value);
1188 - if (!_stricmp(name, "DebugNoGLSL130")) cfg->DebugNoGLSL130 = INIBoolValue(value);
1189 - if (!_stricmp(name, "DebugUploadAfterUnlock")) cfg->DebugUploadAfterUnlock = INIBoolValue(value);
1190 - if (!_stricmp(name, "DebugBlendDestColorKey")) cfg->DebugBlendDestColorKey = INIBoolValue(value);
1191 - if (!_stricmp(name, "DebugNoMouseHooks")) cfg->DebugNoMouseHooks = INIBoolValue(value);
1192 - if (!_stricmp(name, "DebugNoPaletteRedraw")) cfg->DebugNoPaletteRedraw = INIBoolValue(value);
1193 - if (!_stricmp(name, "DebugMaxGLVersionMajor")) cfg->DebugMaxGLVersionMajor = INIIntValue(value);
1194 - if (!_stricmp(name, "DebugMaxGLVersionMinor")) cfg->DebugMaxGLVersionMinor = INIIntValue(value);
1195 - if (!_stricmp(name, "DebugTraceLevel")) cfg->DebugTraceLevel = INIIntValue(value);
1196 - }
1197 - if (!_stricmp(section, "hacks"))
1198 - {
1199 - if (!_stricmp(name, "HackCrop640480to640400")) cfg->HackCrop640480to640400 = INIBoolValue(value);
1200 - if (!_stricmp(name, "HackAutoExpandViewport")) cfg->HackAutoExpandViewport = INIIntBoolValue(value);
1201 - if (!_stricmp(name, "HackAutoScale512448to640480")) cfg->HackAutoExpandViewport = INIIntBoolValue(value);
1202 - if (!_stricmp(name, "HackAutoExpandViewportCompare")) cfg->HackAutoExpandViewportCompare = INIIntValue(value);
1203 - if (!_stricmp(name, "HackAutoExpandViewportValue")) cfg->HackAutoExpandViewportValue = INIHexValue(value);
1204 - if (!_stricmp(name, "HackNoTVRefresh")) cfg->HackNoTVRefresh = INIBoolValue(value);
1205 - if (!_stricmp(name, "HackSetCursor")) cfg->HackSetCursor = INIBoolValue(value);
1206 - if (!_stricmp(name, "HackPaletteDelay")) cfg->HackPaletteDelay = INIIntValue(value);
1207 - if (!_stricmp(name, "HackPaletteVsync")) cfg->HackPaletteVsync = INIBoolValue(value);
1208 - }
12091247 return 1;
12101248 }
12111249
@@ -1212,9 +1250,11 @@
12131251 {
12141252 FILE *file;
12151253 TCHAR inipath[MAX_PATH + 10];
 1254+ ini_depth = 0;
12161255 GetModuleFileName(NULL, inipath, MAX_PATH);
12171256 GetDirFromPath(inipath);
1218 - _tcscat(inipath, _T("\\dxgl.ini"));
 1257+ _tcscpy(cfg->inipath, inipath);
 1258+ _tcscat(inipath, _T("\\dxgl.cfg"));
12191259 file = _tfopen(inipath, _T("r"));
12201260 if (file)
12211261 {
@@ -1221,6 +1261,17 @@
12221262 ini_parse_file(file, ReadINICallback, cfg);
12231263 fclose(file);
12241264 }
 1265+ else
 1266+ {
 1267+ GetDirFromPath(inipath);
 1268+ _tcscat(inipath, _T("\\dxgl.ini"));
 1269+ file = _tfopen(inipath, _T("r"));
 1270+ if (file)
 1271+ {
 1272+ ini_parse_file(file, ReadINICallback, cfg);
 1273+ fclose(file);
 1274+ }
 1275+ }
12251276 }
12261277
12271278 void SetINISection(HANDLE file, int section)
@@ -2336,6 +2387,8 @@
23372388 RegCloseKey(hKey);
23382389 }
23392390 ver2to3:
 2391+ // Transfer profiles to pre-migrate path
 2392+
23402393 return;
23412394 }
23422395
Index: cfgmgr/cfgmgr.h
@@ -113,6 +113,8 @@
114114 BOOL ParsedAddColorDepths;
115115 BOOL ParsedAddModes;
116116 TCHAR regkey[MAX_PATH + 80];
 117+ // For parsing .ini file
 118+ TCHAR inipath[MAX_PATH];
117119 } DXGLCFG;
118120
119121 typedef struct
Index: dxgl-example.ini
@@ -52,6 +52,19 @@
5353 ; Default is false.
5454 NoUninstall=false
5555
 56+; Include - String
 57+; If set, DXGL will load the file listed and parse it, much like an "include"
 58+; file. This can allow using multiple configuration files. Please note that
 59+; DXGL will stop parsing the current file and parse the specified file before
 60+; continuing on. This option can be repeated to load multiple files, and
 61+; supports only relative paths. In addition, this option will only load up to
 62+; 16 files deep.
 63+; Installation control options are currently only supported in the root
 64+; configuration file.
 65+; Include options can be in any section of the .ini file, however included
 66+; files must have their own sections.
 67+;Include=dxgl-custom.ini
 68+
5669 [display]
5770 ; ScalingMode - Integer
5871 ; Determines the method DXGL will use to scale full screen modes.