1 // Burner Config file module
2 #include "burner.h"
3 
4 #ifdef _UNICODE
5  #include <locale.h>
6 #endif
7 
8 int nIniVersion = 0;
9 
10 struct VidPresetData VidPreset[4] = {
11 	{ 640, 480},
12 	{ 1024, 768},
13 	{ 1280, 960},
14 	// last one set at desktop resolution
15 };
16 
17 struct VidPresetDataVer VidPresetVer[4] = {
18 	{ 640, 480},
19 	{ 1024, 768},
20 	{ 1280, 960},
21 	// last one set at desktop resolution
22 };
23 
CreateConfigName(TCHAR * szConfig)24 static void CreateConfigName(TCHAR* szConfig)
25 {
26 	_stprintf(szConfig, _T("config/%s.ini"), szAppExeName);
27 	return;
28 }
29 
30 // Read in the config file for the whole application
ConfigAppLoad()31 int ConfigAppLoad()
32 {
33 	TCHAR szConfig[MAX_PATH];
34 	TCHAR szLine[1024];
35 	FILE* h;
36 
37 #ifdef _UNICODE
38 	setlocale(LC_ALL, "");
39 #endif
40 
41 	CreateConfigName(szConfig);
42 
43 	if ((h = _tfopen(szConfig, _T("rt"))) == NULL) {
44 		return 1;
45 	}
46 
47 	// Go through each line of the config file
48 	while (_fgetts(szLine, sizeof(szLine), h)) {
49 		int nLen = _tcslen(szLine);
50 
51 		// Get rid of the linefeed at the end
52 		if (szLine[nLen - 1] == 10) {
53 			szLine[nLen - 1] = 0;
54 			nLen--;
55 		}
56 
57 #define VAR(x) { TCHAR* szValue = LabelCheck(szLine,_T(#x));			\
58   if (szValue) x = _tcstol(szValue, NULL, 0); }
59 #define VAR64(x) { TCHAR* szValue = LabelCheck(szLine,_T(#x));			\
60   if (szValue) x = (long long)_tcstod(szValue, NULL); }
61 #define FLT(x) { TCHAR* szValue = LabelCheck(szLine,_T(#x));			\
62   if (szValue) x = _tcstod(szValue, NULL); }
63 #define STR(x) { TCHAR* szValue = LabelCheck(szLine,_T(#x) _T(" "));	\
64   if (szValue) _tcscpy(x,szValue); }
65 #define PAT(x) { TCHAR* szValue = LabelCheck(szLine,_T(#x) _T(" "));	\
66 	if (szValue) { _tcscpy(x, szValue); UpdatePath(x); } }
67 #define DRV(x) { TCHAR* szValue = LabelCheck(szLine,_T(#x) _T(" "));	\
68   if (szValue) x = NameToDriver(szValue); }
69 
70 		VAR(nIniVersion);
71 
72 		// Emulation
73 #ifdef BUILD_A68K
74 		VAR(bBurnUseASMCPUEmulation);
75 #endif
76 
77 		// Video
78 		VAR(nVidDepth); VAR(nVidRefresh);
79 		VAR(nVidRotationAdjust);
80 
81 		// horizontal oriented
82 		VAR(nVidHorWidth); VAR(nVidHorHeight);
83 		VAR(bVidArcaderesHor);
84 		VAR(VidPreset[0].nWidth); VAR(VidPreset[0].nHeight);
85 		VAR(VidPreset[1].nWidth); VAR(VidPreset[1].nHeight);
86 		VAR(VidPreset[2].nWidth); VAR(VidPreset[2].nHeight);
87 		VAR(VidPreset[3].nWidth); VAR(VidPreset[3].nHeight);
88 		VAR(nScreenSizeHor);
89 
90 		// vertical oriented
91 		VAR(nVidVerWidth); VAR(nVidVerHeight);
92 		VAR(bVidArcaderesVer);
93 		VAR(VidPresetVer[0].nWidth); VAR(VidPresetVer[0].nHeight);
94 		VAR(VidPresetVer[1].nWidth); VAR(VidPresetVer[1].nHeight);
95 		VAR(VidPresetVer[2].nWidth); VAR(VidPresetVer[2].nHeight);
96 		VAR(VidPresetVer[3].nWidth); VAR(VidPresetVer[3].nHeight);
97 		VAR(nScreenSizeVer);
98 
99 		VAR(nWindowSize);
100 		VAR(nWindowPosX); VAR(nWindowPosY);
101 		VAR(bDoGamma);
102 		VAR(bVidUseHardwareGamma);
103 		VAR(bHardwareGammaOnly);
104 		FLT(nGamma);
105 		VAR(bVidFullStretch);
106 		VAR(bVidCorrectAspect);
107 
108 		VAR(bVidAutoSwitchFull);
109 		STR(HorScreen);
110 		STR(VerScreen);
111 
112 		VAR(bVidTripleBuffer);
113 		VAR(bVidVSync);
114 		VAR(bVidDWMSync);
115 
116 		VAR(bVidScanlines);
117 		VAR(nVidScanIntensity);
118 		VAR(bMonitorAutoCheck);
119 		VAR(nVidScrnAspectX);
120 		VAR(nVidScrnAspectY);
121 		VAR(bForce60Hz);
122 		VAR(bAlwaysDrawFrames);
123 
124 		VAR(nVidSelect);
125 		VAR(nVidBlitterOpt[0]);
126 		VAR64(nVidBlitterOpt[1]);
127 		VAR(nVidBlitterOpt[2]);
128 		VAR(nVidBlitterOpt[3]);
129 		VAR(nVidBlitterOpt[4]);
130 
131 		// DirectDraw blitter
132 		VAR(bVidScanHalf);
133 		VAR(bVidForceFlip);
134 
135 		// Direct3D blitter
136 		VAR(bVidBilinear);
137 		VAR(bVidScanDelay);
138 		VAR(bVidScanRotate);
139 		VAR(bVidScanBilinear);
140 		VAR(nVidFeedbackIntensity);
141 		VAR(nVidFeedbackOverSaturation);
142 		FLT(fVidScreenAngle);
143 		FLT(fVidScreenCurvature);
144 		VAR(bVidForce16bit);
145 		VAR(nVidTransferMethod);
146 
147 		// DirectX Graphics blitter
148 		FLT(dVidCubicB);
149 		FLT(dVidCubicC);
150 
151 		// DirectX Graphics 9 Alt blitter
152 		VAR(bVidDX9Bilinear);
153 		VAR(bVidHardwareVertex);
154 		VAR(bVidMotionBlur);
155 		VAR(bVidForce16bitDx9Alt);
156 
157 		// Sound
158 		VAR(nAudSelect);
159 		VAR(nAudSegCount);
160 		VAR(nInterpolation);
161 		VAR(nFMInterpolation);
162 		VAR(nAudSampleRate[0]);
163 		VAR(nAudDSPModule[0]);
164 		VAR(nAudSampleRate[1]);
165 		VAR(nAudDSPModule[1]);
166 
167 		// Other
168 		STR(szPlaceHolder);
169 		STR(szLocalisationTemplate);
170 		STR(szGamelistLocalisationTemplate);
171 		VAR(nGamelistLocalisationActive);
172 
173 		VAR(nVidSDisplayStatus);
174 		VAR(nMinChatFontSize);
175 		VAR(nMaxChatFontSize);
176 
177 		VAR(bModelessMenu);
178 
179 		VAR(nSplashTime);
180 
181 		VAR(bDrvSaveAll);
182 		VAR(nAppThreadPriority);
183 		VAR(bAlwaysProcessKeyboardInput);
184 		VAR(bAutoPause);
185 		VAR(bSaveInputs);
186 
187 		VAR(nCDEmuSelect);
188 		PAT(CDEmuImage);
189 
190 		VAR(nSelDlgWidth);
191 		VAR(nSelDlgHeight);
192 		VAR(nLoadMenuShowX);
193 		VAR(nLoadMenuShowY);
194 		VAR(nLoadMenuBoardTypeFilter);
195 		VAR(nLoadMenuGenreFilter);
196 		VAR(nLoadMenuFavoritesFilter);
197 		VAR(nLoadMenuFamilyFilter);
198 
199 		STR(szAppRomPaths[0]);
200 		STR(szAppRomPaths[1]);
201 		STR(szAppRomPaths[2]);
202 		STR(szAppRomPaths[3]);
203 		STR(szAppRomPaths[4]);
204 		STR(szAppRomPaths[5]);
205 		STR(szAppRomPaths[6]);
206 		STR(szAppRomPaths[7]);
207 		STR(szAppRomPaths[8]);
208 		STR(szAppRomPaths[9]);
209 		STR(szAppRomPaths[10]);
210 		STR(szAppRomPaths[11]);
211 		STR(szAppRomPaths[12]);
212 		STR(szAppRomPaths[13]);
213 		STR(szAppRomPaths[14]);
214 		STR(szAppRomPaths[15]);
215 		STR(szAppRomPaths[16]);
216 		STR(szAppRomPaths[17]);
217 		STR(szAppRomPaths[18]);
218 		STR(szAppRomPaths[19]);
219 
220 		STR(szNeoCDGamesDir);
221 
222 		STR(szAppPreviewsPath);
223 		STR(szAppTitlesPath);
224 		STR(szAppCheatsPath);
225 		STR(szAppHiscorePath);
226 		STR(szAppSamplesPath);
227 		STR(szAppHDDPath);
228 		STR(szAppIpsPath);
229 		STR(szAppIconsPath);
230 		STR(szNeoCDCoverDir);
231 		STR(szAppBlendPath);
232 		STR(szAppSelectPath);
233 		STR(szAppVersusPath);
234 		STR(szAppScoresPath);
235 		STR(szAppBossesPath);
236 		STR(szAppGameoverPath);
237 		STR(szAppFlyersPath);
238 		STR(szAppMarqueesPath);
239 		STR(szAppControlsPath);
240 		STR(szAppCabinetsPath);
241 		STR(szAppPCBsPath);
242 		STR(szAppHistoryPath);
243 		STR(szAppEEPROMPath);
244 
245 		VAR(bEnableHighResTimer);
246 		VAR(bNoChangeNumLock);
247 		VAR(bAlwaysCreateSupportFolders);
248 		VAR(bAutoLoadGameList);
249 
250 		VAR(nAutoFireRate);
251 
252 		VAR(EnableHiscores);
253 		VAR(bBurnUseBlend);
254 		VAR(BurnShiftEnabled);
255 		VAR(bSkipStartupCheck);
256 
257 #ifdef INCLUDE_AVI_RECORDING
258 		VAR(nAvi3x);
259 #endif
260 
261 		VAR(nIpsSelectedLanguage);
262 
263 		VAR(bEnableIcons);
264 		VAR(bIconsOnlyParents);
265 		VAR(nIconsSize);
266 
267 		STR(szPrevGames[0]);
268 		STR(szPrevGames[1]);
269 		STR(szPrevGames[2]);
270 		STR(szPrevGames[3]);
271 		STR(szPrevGames[4]);
272 		STR(szPrevGames[5]);
273 		STR(szPrevGames[6]);
274 		STR(szPrevGames[7]);
275 		STR(szPrevGames[8]);
276 		STR(szPrevGames[9]);
277 
278 		// MVS cartridges
279 		DRV(nBurnDrvSelect[0]);
280 		DRV(nBurnDrvSelect[1]);
281 		DRV(nBurnDrvSelect[2]);
282 		DRV(nBurnDrvSelect[3]);
283 		DRV(nBurnDrvSelect[4]);
284 		DRV(nBurnDrvSelect[5]);
285 
286 		VAR(bNeoCDListScanSub);
287 		VAR(bNeoCDListScanOnlyISO);
288 
289 		// Default Controls
290 		VAR(nPlayerDefaultControls[0]);
291 		STR(szPlayerDefaultIni[0]);
292 		VAR(nPlayerDefaultControls[1]);
293 		STR(szPlayerDefaultIni[1]);
294 		VAR(nPlayerDefaultControls[2]);
295 		STR(szPlayerDefaultIni[2]);
296 		VAR(nPlayerDefaultControls[3]);
297 		STR(szPlayerDefaultIni[3]);
298 
299 #undef DRV
300 #undef PAT
301 #undef STR
302 #undef FLT
303 #undef VAR
304 #undef VAR64
305 	}
306 
307 	fclose(h);
308 	return 0;
309 }
310 
311 // Write out the config file for the whole application
ConfigAppSave()312 int ConfigAppSave()
313 {
314 	TCHAR szConfig[MAX_PATH];
315 	FILE *h;
316 
317 	if (bCmdOptUsed & 1) {
318 		return 1;
319 	}
320 
321 #ifdef _UNICODE
322 	setlocale(LC_ALL, "");
323 #endif
324 
325 	CreateConfigName(szConfig);
326 
327 	if ((h = _tfopen(szConfig, _T("wt"))) == NULL) {
328 		return 1;
329 	}
330 
331 	// Write title
332 	_ftprintf(h, _T("// ") _T(APP_TITLE) _T(" v%s --- Main Config File\n\n"), szAppBurnVer);
333 	_ftprintf(h, _T("// Don't edit this file manually unless you know what you're doing\n"));
334 	_ftprintf(h, _T("// ") _T(APP_TITLE) _T(" will restore default settings when this file is deleted\n"));
335 
336 #define VAR(x) _ftprintf(h, _T(#x) _T(" %d\n"),  x)
337 #define VAR64(x) _ftprintf(h, _T(#x) _T(" %lf\n"),  (float)x)
338 #define FLT(x) _ftprintf(h, _T(#x) _T(" %lf\n"), x)
339 #define STR(x) _ftprintf(h, _T(#x) _T(" %s\n"),  x)
340 #define DRV(x) _ftprintf(h, _T(#x) _T(" %s\n"),  DriverToName(x))
341 
342 	_ftprintf(h, _T("\n// The application version this file was saved from\n"));
343 	// We can't use the macros for this!
344 	_ftprintf(h, _T("nIniVersion 0x%06X"), nBurnVer);
345 
346 #ifdef BUILD_A68K
347 	_ftprintf(h, _T("\n\n\n"));
348 	_ftprintf(h, _T("// --- emulation --------------------------------------------------------------\n"));
349 
350 	_ftprintf(h, _T("\n// If non-zero, use A68K for MC68000 emulation\n"));
351 
352 	bBurnUseASMCPUEmulation = 0; // Assembly MC68000 emulation only availble on a per-session basis.  Causes too many problems in a non-debug setting.
353 	VAR(bBurnUseASMCPUEmulation);
354 #endif
355 
356 	_ftprintf(h, _T("\n\n\n"));
357 	_ftprintf(h, _T("// --- Video ------------------------------------------------------------------\n"));
358 
359 	// Horizontal oriented
360 	_ftprintf(h, _T("\n// (Horizontal Oriented) The display mode to use for fullscreen\n"));
361 	VAR(nVidHorWidth); VAR(nVidHorHeight);
362 	_ftprintf(h, _T("\n// (Horizontal Oriented) If non-zero, use the same fullscreen resolution as the original arcade game\n"));
363 	VAR(bVidArcaderesHor);
364 	_ftprintf(h, _T("\n// (Horizontal Oriented) The preset resolutions appearing in the menu\n"));
365 	VAR(VidPreset[0].nWidth); VAR(VidPreset[0].nHeight);
366 	VAR(VidPreset[1].nWidth); VAR(VidPreset[1].nHeight);
367 	VAR(VidPreset[2].nWidth); VAR(VidPreset[2].nHeight);
368 	VAR(VidPreset[3].nWidth); VAR(VidPreset[3].nHeight);
369 	_ftprintf(h, _T("\n// (Horizontal Oriented) Full-screen size (0 = use display mode variables)\n"));
370 	VAR(nScreenSizeHor);
371 
372 	// Vertical oriented
373 	_ftprintf(h, _T("\n// (Vertical Oriented) The display mode to use for fullscreen\n"));
374 	VAR(nVidVerWidth); VAR(nVidVerHeight);
375 	_ftprintf(h, _T("\n// (Vertical Oriented) If non-zero, use the same fullscreen resolution as the original arcade game\n"));
376 	VAR(bVidArcaderesVer);
377 	_ftprintf(h, _T("\n// (Vertical Oriented) The preset resolutions appearing in the menu\n"));
378 	VAR(VidPresetVer[0].nWidth); VAR(VidPresetVer[0].nHeight);
379 	VAR(VidPresetVer[1].nWidth); VAR(VidPresetVer[1].nHeight);
380 	VAR(VidPresetVer[2].nWidth); VAR(VidPresetVer[2].nHeight);
381 	VAR(VidPresetVer[3].nWidth); VAR(VidPresetVer[3].nHeight);
382 	_ftprintf(h, _T("\n// (Vertical Oriented) Full-screen size (0 = use display mode variables)\n"));
383 	VAR(nScreenSizeVer);
384 
385 	_ftprintf(h, _T("\n// Full-screen bit depth\n"));
386 	VAR(nVidDepth);
387 	_ftprintf(h, _T("\n// Specify the refresh rate, 0 = default (changing this will not work with many video cards)\n"));
388 	VAR(nVidRefresh);
389 	_ftprintf(h, _T("\n// If non-zero, do not rotate the graphics for vertical games\n"));
390 	VAR(nVidRotationAdjust);
391 	_ftprintf(h, _T("\n// Initial window size (0 = autosize)\n"));
392 	VAR(nWindowSize);
393 	_ftprintf(h, _T("\n// Window position\n"));
394 	VAR(nWindowPosX); VAR(nWindowPosY);
395 	_ftprintf(h, _T("\n// If non-zero, perform gamma correction\n"));
396 	VAR(bDoGamma);
397 	_ftprintf(h, _T("\n// If non-zero, use the video hardware to correct gamma\n"));
398 	VAR(bVidUseHardwareGamma);
399 	_ftprintf(h, _T("\n// If non-zero, don't fall back on software gamma correction\n"));
400 	VAR(bHardwareGammaOnly);
401 	_ftprintf(h, _T("\n// Gamma to correct with\n"));
402 	FLT(nGamma);
403 	_ftprintf(h, _T("\n// If non-zero, auto-switch to fullscreen after loading game\n"));
404 	VAR(bVidAutoSwitchFull);
405 	_ftprintf(h, _T("\n// Monitor for Horizontal Games (GDI Identifier)\n"));
406 	STR(HorScreen);
407 	_ftprintf(h, _T("\n// Monitor for Vertical Games (GDI Identifier)\n"));
408 	STR(VerScreen);
409 	_ftprintf(h, _T("\n// If non-zero, allow stretching of the image to any size\n"));
410 	VAR(bVidFullStretch);
411 	_ftprintf(h, _T("\n// If non-zero, stretch the image to the largest size preserving aspect ratio\n"));
412 	VAR(bVidCorrectAspect);
413 	_ftprintf(h, _T("\n// If non-zero, try to use a triple buffer in fullscreen\n"));
414 	VAR(bVidTripleBuffer);
415 	_ftprintf(h, _T("\n// If non-zero, try to synchronise blits with the display\n"));
416 	VAR(bVidVSync);
417 	_ftprintf(h, _T("\n// If non-zero, try to synchronise to DWM on Windows 7+, this fixes frame stuttering problems.\n"));
418 	VAR(bVidDWMSync);
419 	_ftprintf(h, _T("\n// Transfer method:  0 = blit from system memory / use driver/DirectX texture management;\n"));
420 	_ftprintf(h, _T("//                   1 = copy to a video memory surface, then use bltfast();\n"));
421 	_ftprintf(h, _T("//                  -1 = autodetect for DirectDraw, equals 1 for Direct3D\n"));
422 	VAR(nVidTransferMethod);
423 	_ftprintf(h, _T("\n// If non-zero, draw scanlines to simulate a low-res monitor\n"));
424 	VAR(bVidScanlines);
425 	_ftprintf(h, _T("\n// Maximum scanline intensity\n"));
426 	VAR(nVidScanIntensity);
427 	_ftprintf(h, _T("\n// If non-zero, rotate scanlines and RGB effects for rotated games\n"));
428 	VAR(bVidScanRotate);
429 	_ftprintf(h, _T("\n// The selected blitter module\n"));
430 	VAR(nVidSelect);
431 	_ftprintf(h, _T("\n// Options for the blitter modules\n"));
432 	VAR(nVidBlitterOpt[0]);
433 	VAR64(nVidBlitterOpt[1]);
434 	VAR(nVidBlitterOpt[2]);
435 	VAR(nVidBlitterOpt[3]);
436 	VAR(nVidBlitterOpt[4]);
437 	_ftprintf(h, _T("\n// If non-zero, attempt to auto-detect the monitor aspect ratio\n"));
438 	VAR(bMonitorAutoCheck);
439 	_ftprintf(h, _T("\n// The aspect ratio of the monitor\n"));
440 	VAR(nVidScrnAspectX);
441 	VAR(nVidScrnAspectY);
442 	_ftprintf(h, _T("\n// If non-zero, force all games to use a 60Hz refresh rate\n"));
443 	VAR(bForce60Hz);
444 	_ftprintf(h, _T("\n// If zero, skip frames when needed to keep the emulation running at full speed\n"));
445 	VAR(bAlwaysDrawFrames);
446 
447 	_ftprintf(h, _T("\n"));
448 	_ftprintf(h, _T("// --- DirectDraw blitter module settings -------------------------------------\n"));
449 	_ftprintf(h, _T("\n// If non-zero, draw scanlines at 50%% intensity\n"));
450 	VAR(bVidScanHalf);
451 	_ftprintf(h, _T("\n// If non-zero, force flipping for games that need it\n"));
452 	VAR(bVidForceFlip);
453 	_ftprintf(h, _T("\n"));
454 	_ftprintf(h, _T("// --- Direct3D 7 blitter module settings -------------------------------------\n"));
455 	_ftprintf(h, _T("\n// If non-zero, use bi-linear filtering to display the image\n"));
456 	VAR(bVidBilinear);
457 	_ftprintf(h, _T("\n// If non-zero, simulate slow phosphors (feedback)\n"));
458 	VAR(bVidScanDelay);
459 	_ftprintf(h, _T("\n// If non-zero, use bi-linear filtering for the scanlines\n"));
460 	VAR(bVidScanBilinear);
461 	_ftprintf(h, _T("\n// Feedback amount for slow phosphor simulation\n"));
462 	VAR(nVidFeedbackIntensity);
463 	_ftprintf(h, _T("\n// Oversaturation amount for slow phosphor simulation\n"));
464 	VAR(nVidFeedbackOverSaturation);
465 	_ftprintf(h, _T("\n// Angle at wich the emulated screen is tilted (in radians)\n"));
466 	FLT(fVidScreenAngle);
467 	_ftprintf(h, _T("\n// Angle of the sphere segment used for the 3D screen (in radians)\n"));
468 	FLT(fVidScreenCurvature);
469 	_ftprintf(h, _T("\n// If non-zero, force 16 bit emulation even in 32-bit screenmodes\n"));
470 	VAR(bVidForce16bit);
471 	_ftprintf(h, _T("\n"));
472 	_ftprintf(h, _T("// --- DirectX Graphics 9 blitter module settings -----------------------------\n"));
473 	_ftprintf(h, _T("\n// The filter parameters for the cubic filter\n"));
474 	FLT(dVidCubicB);
475 	FLT(dVidCubicC);
476 	_ftprintf(h, _T("\n"));
477 	_ftprintf(h, _T("// --- DirectX Graphics 9 Alt blitter module settings -------------------------\n"));
478 	_ftprintf(h, _T("\n// If non-zero, use bi-linear filtering to display the image\n"));
479 	VAR(bVidDX9Bilinear);
480 	_ftprintf(h, _T("\n// If non-zero, use hardware vertex to display the image\n"));
481 	VAR(bVidHardwareVertex);
482 	_ftprintf(h, _T("\n// If non-zero, use motion blur to display the image\n"));
483 	VAR(bVidMotionBlur);
484 	_ftprintf(h, _T("\n// If non-zero, force 16 bit emulation even in 32-bit screenmodes\n"));
485 	VAR(bVidForce16bitDx9Alt);
486 
487 	_ftprintf(h, _T("\n\n\n"));
488 	_ftprintf(h, _T("// --- Sound ------------------------------------------------------------------\n"));
489 	_ftprintf(h, _T("\n// The selected audio plugin\n"));
490 	VAR(nAudSelect);
491 	_ftprintf(h, _T("\n// Number of frames in sound buffer (= sound lag)\n"));
492 	VAR(nAudSegCount);
493 	_ftprintf(h, _T("\n// The order of PCM/ADPCM interpolation\n"));
494 	VAR(nInterpolation);
495 	_ftprintf(h, _T("\n// The order of FM interpolation\n"));
496 	VAR(nFMInterpolation);
497 	_ftprintf(h, _T("\n"));
498 	_ftprintf(h, _T("// --- DirectSound plugin settings --------------------------------------------\n"));
499 	_ftprintf(h, _T("\n// Sample rate\n"));
500 	VAR(nAudSampleRate[0]);
501 	_ftprintf(h, _T("\n// DSP module to use for sound enhancement: 0 = none, 1 = low-pass filter\n"));
502 	VAR(nAudDSPModule[0]);
503 	_ftprintf(h, _T("\n"));
504 	_ftprintf(h, _T("// --- XAudio2 plugin settings ------------------------------------------------\n"));
505 	_ftprintf(h, _T("\n// Sample rate\n"));
506 	VAR(nAudSampleRate[1]);
507 	_ftprintf(h, _T("\n// DSP module to use for sound enhancement: 0 = none, 1 = low-pass filter, 2 = reverb\n"));
508 	VAR(nAudDSPModule[1]);
509 
510 	_ftprintf(h, _T("\n\n\n"));
511 	_ftprintf(h, _T("// --- UI ---------------------------------------------------------------------\n"));
512 
513 	_ftprintf(h, _T("\n// The filename of the placeholder image to use (empty filename = use built-in)\n"));
514 	STR(szPlaceHolder);
515 
516 	_ftprintf(h, _T("\n// Filename of the active UI translation template\n"));
517 	STR(szLocalisationTemplate);
518 
519 	_ftprintf(h, _T("\n// Filename of the active gamelist translation template\n"));
520 	STR(szGamelistLocalisationTemplate);
521 
522 	_ftprintf(h, _T("\n// If non-zero, enable gamelist localisation\n"));
523 	VAR(nGamelistLocalisationActive);
524 
525 	_ftprintf(h, _T("\n// 1 = display pause/record/replay/kaillera icons in the upper right corner of the display\n"));
526 	VAR(nVidSDisplayStatus);
527 	_ftprintf(h, _T("\n// Minimum height (in pixels) of the font used for the Kaillera chat function (used for arcade resolution)\n"));
528 	VAR(nMinChatFontSize);
529 	_ftprintf(h, _T("\n// Maximum height (in pixels) of the font used for the Kaillera chat function (used for 1280x960 or higher).\n"));
530 	VAR(nMaxChatFontSize);
531 
532 	_ftprintf(h, _T("\n// Make the menu modeless\n"));
533 	VAR(bModelessMenu);
534 
535 	_ftprintf(h, _T("\n// Minimum length of time to display the splash screen (in milliseconds)\n"));
536 	VAR(nSplashTime);
537 
538 	_ftprintf(h, _T("\n// If non-zero, load and save all ram (the state)\n"));
539 	VAR(bDrvSaveAll);
540 	_ftprintf(h, _T("\n// The thread priority for the application. Do *NOT* edit this manually\n"));
541 	VAR(nAppThreadPriority);
542 	_ftprintf(h, _T("\n// If non-zero, process keyboard input even when the application loses focus\n"));
543 	VAR(bAlwaysProcessKeyboardInput);
544 	_ftprintf(h, _T("\n// If non-zero, pause when the application loses focus\n"));
545 	VAR(bAutoPause);
546 	_ftprintf(h, _T("\n// If non-zero, save the inputs for each game\n"));
547 	VAR(bSaveInputs);
548 
549 	_ftprintf(h, _T("\n\n\n"));
550 	_ftprintf(h, _T("// --- CD emulation -----------------------------------------------------------\n"));
551 	_ftprintf(h, _T("\n // The selected CD emulation module\n"));
552 	VAR(nCDEmuSelect);
553 	_ftprintf(h, _T("\n // The path to the CD image to use (.cue or .iso)\n"));
554 	STR(CDEmuImage);
555 
556 	_ftprintf(h, _T("\n\n\n"));
557 	_ftprintf(h, _T("// --- Load Game Dialogs ------------------------------------------------------\n"));
558 	_ftprintf(h, _T("\n// Load game dialog dimensions (in win32 client co-ordinates)\n"));
559 	VAR(nSelDlgWidth);
560 	VAR(nSelDlgHeight);
561 
562 	_ftprintf(h, _T("\n// Load game dialog options\n"));
563 	VAR(nLoadMenuShowX);
564 	VAR(nLoadMenuShowY);
565 
566 	_ftprintf(h, _T("\n// Load game dialog board type filter options\n"));
567 	VAR(nLoadMenuBoardTypeFilter);
568 
569 	_ftprintf(h, _T("\n// Load game dialog genre filter options\n"));
570 	VAR(nLoadMenuGenreFilter);
571 
572 	_ftprintf(h, _T("\n// Load game dialog favorites filter options\n"));
573 	VAR(nLoadMenuFavoritesFilter);
574 
575 	_ftprintf(h, _T("\n// Load game dialog family filter options\n"));
576 	VAR(nLoadMenuFamilyFilter);
577 
578 	_ftprintf(h, _T("\n// The paths to search for rom zips (include trailing backslash)\n"));
579 	STR(szAppRomPaths[0]);
580 	STR(szAppRomPaths[1]);
581 	STR(szAppRomPaths[2]);
582 	STR(szAppRomPaths[3]);
583 	STR(szAppRomPaths[4]);
584 	STR(szAppRomPaths[5]);
585 	STR(szAppRomPaths[6]);
586 	STR(szAppRomPaths[7]);
587 	STR(szAppRomPaths[8]);
588 	STR(szAppRomPaths[9]);
589 	STR(szAppRomPaths[10]);
590 	STR(szAppRomPaths[11]);
591 	STR(szAppRomPaths[12]);
592 	STR(szAppRomPaths[13]);
593 	STR(szAppRomPaths[14]);
594 	STR(szAppRomPaths[15]);
595 	STR(szAppRomPaths[16]);
596 	STR(szAppRomPaths[17]);
597 	STR(szAppRomPaths[18]);
598 	STR(szAppRomPaths[19]);
599 
600 	_ftprintf(h, _T("\n// The path to search for Neo Geo CDZ isos\n"));
601 	STR(szNeoCDGamesDir);
602 
603 	_ftprintf(h, _T("\n// The paths to search for support files (include trailing backslash)\n"));
604 	STR(szAppPreviewsPath);
605 	STR(szAppTitlesPath);
606 	STR(szAppCheatsPath);
607 	STR(szAppHiscorePath);
608 	STR(szAppSamplesPath);
609 	STR(szAppHDDPath);
610 	STR(szAppIpsPath);
611 	STR(szAppIconsPath);
612 	STR(szNeoCDCoverDir);
613 	STR(szAppBlendPath);
614 	STR(szAppSelectPath);
615 	STR(szAppVersusPath);
616 	STR(szAppScoresPath);
617 	STR(szAppBossesPath);
618 	STR(szAppGameoverPath);
619 	STR(szAppFlyersPath);
620 	STR(szAppMarqueesPath);
621 	STR(szAppControlsPath);
622 	STR(szAppCabinetsPath);
623 	STR(szAppPCBsPath);
624 	STR(szAppHistoryPath);
625 	STR(szAppEEPROMPath);
626 
627 	_ftprintf(h, _T("\n// The cartridges to use for emulation of an MVS system\n"));
628 	DRV(nBurnDrvSelect[0]);
629 	DRV(nBurnDrvSelect[1]);
630 	DRV(nBurnDrvSelect[2]);
631 	DRV(nBurnDrvSelect[3]);
632 	DRV(nBurnDrvSelect[4]);
633 	DRV(nBurnDrvSelect[5]);
634 
635 	_ftprintf(h, _T("\n// Neo Geo CD Load Game Dialog options\n"));
636 	VAR(bNeoCDListScanSub);
637 	VAR(bNeoCDListScanOnlyISO);
638 
639 	_ftprintf(h, _T("\n\n\n"));
640 	_ftprintf(h, _T("// --- miscellaneous ---------------------------------------------------------\n"));
641 
642 	_ftprintf(h, _T("\n// If non-zero, enable the high resolution system timer.\n"));
643 	VAR(bEnableHighResTimer);
644 
645 	_ftprintf(h, _T("\n// If non-zero, don't change the status of the Num Lock key.\n"));
646 	VAR(bNoChangeNumLock);
647 
648 	_ftprintf(h, _T("\n// If non-zero, create support folders at program start.\n"));
649 	VAR(bAlwaysCreateSupportFolders);
650 
651 	_ftprintf(h, _T("\n// If non-zero, load game selection dialog at program start.\n"));
652 	VAR(bAutoLoadGameList);
653 
654 	_ftprintf(h, _T("\n// Auto-Fire Rate, non-linear - use the GUI to change this setting!\n"));
655 	VAR(nAutoFireRate);
656 
657 	_ftprintf(h, _T("\n// If non-zero, enable high score saving support.\n"));
658 	VAR(EnableHiscores);
659 
660 	_ftprintf(h, _T("\n// If non-zero, enable alpha blending support.\n"));
661 	VAR(bBurnUseBlend);
662 
663 	_ftprintf(h, _T("\n// If non-zero, enable gear shifter display support.\n"));
664 	VAR(BurnShiftEnabled);
665 
666 	_ftprintf(h, _T("\n// If non-zero, DISABLE start-up rom scan (if needed).\n"));
667 	VAR(bSkipStartupCheck);
668 
669 #ifdef INCLUDE_AVI_RECORDING
670 	_ftprintf(h, _T("\n// If non-zero, enable 1x - 3x pixel output for the AVI writer.\n"));
671 	VAR(nAvi3x);
672 #endif
673 
674 	_ftprintf(h, _T("\n// The language index to use for the IPS Patch Manager dialog.\n"));
675 	VAR(nIpsSelectedLanguage);
676 
677 	_ftprintf(h, _T("\n// If non-zero, display drivers icons.\n"));
678 	VAR(bEnableIcons);
679 
680 	_ftprintf(h, _T("\n// If non-zero, display drivers icons for parents only (use if all icons causes UI issues).\n"));
681 	VAR(bIconsOnlyParents);
682 
683 	_ftprintf(h, _T("\n// Specify icons display size, 0 = 16x16 , 1 = 24x24, 2 = 32x32.\n"));
684 	VAR(nIconsSize);
685 
686 	_ftprintf(h, _T("\n// Previous games list.\n"));
687 	STR(szPrevGames[0]);
688 	STR(szPrevGames[1]);
689 	STR(szPrevGames[2]);
690 	STR(szPrevGames[3]);
691 	STR(szPrevGames[4]);
692 	STR(szPrevGames[5]);
693 	STR(szPrevGames[6]);
694 	STR(szPrevGames[7]);
695 	STR(szPrevGames[8]);
696 	STR(szPrevGames[9]);
697 
698 	_ftprintf(h, _T("\n// Player default controls, number is the index of the configuration in the input dialog\n"));
699 	VAR(nPlayerDefaultControls[0]);
700 	STR(szPlayerDefaultIni[0]);
701 	VAR(nPlayerDefaultControls[1]);
702 	STR(szPlayerDefaultIni[1]);
703 	VAR(nPlayerDefaultControls[2]);
704 	STR(szPlayerDefaultIni[2]);
705 	VAR(nPlayerDefaultControls[3]);
706 	STR(szPlayerDefaultIni[3]);
707 
708 	_ftprintf(h, _T("\n\n\n"));
709 
710 #undef DRV
711 #undef STR
712 #undef FLT
713 #undef VAR
714 #undef VAR64
715 
716 	fclose(h);
717 	return 0;
718 }
719 
720