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