|
|
1.1 root 1: /*
2: Hatari
3:
4: Configuration File
5:
1.1.1.3 root 6: The configuration file is stored in a binary format to prevent tampering.
7: We also store the version number in the file to prevent people from
8: copying old .cfg files between versions.
1.1 root 9: */
10:
11: #include "main.h"
12: #include "configuration.h"
13: #include "dialog.h"
14: #include "video.h"
15: #include "vdi.h"
1.1.1.2 root 16: #include "screen.h"
1.1.1.4 root 17: #include "shortcut.h"
1.1.1.5 ! root 18: #include "memAlloc.h"
! 19: #include "file.h"
! 20:
1.1 root 21:
22: static FILE *ConfigFile;
1.1.1.4 root 23: BOOL bFirstTimeInstall=FALSE; /* Has been run before? Used to set default joysticks etc... */
1.1 root 24:
25:
26: /*-----------------------------------------------------------------------*/
27: /*
1.1.1.4 root 28: Set default configuration values.
1.1.1.2 root 29: */
30: void Configuration_SetDefault(void)
31: {
1.1.1.4 root 32: int i;
33:
34: /* Clear parameters */
35: Memory_Clear(&ConfigureParams, sizeof(DLG_PARAMS));
36:
37: /* Set defaults for CPU dialog */
38: ConfigureParams.Configure.nMinMaxSpeed = ConfigureParams.Configure.nPrevMinMaxSpeed = MINMAXSPEED_MIN;
39:
40: /* Set defaults for Disc Image */
41: ConfigureParams.DiscImage.bAutoInsertDiscB = TRUE;
42: strcpy(ConfigureParams.DiscImage.szDiscImageDirectory, szWorkingDir);
43: File_AddSlashToEndFileName(ConfigureParams.DiscImage.szDiscImageDirectory);
44:
45: /* Set defaults for Hard Disc */
46: ConfigureParams.HardDisc.nDriveList = DRIVELIST_NONE;
47: ConfigureParams.HardDisc.bBootFromHardDisc = FALSE;
48: ConfigureParams.HardDisc.nHardDiscDir = DRIVE_C;
49: for(i=0; i<MAX_HARDDRIVES; i++)
50: {
51: strcpy(ConfigureParams.HardDisc.szHardDiscDirectories[i], szWorkingDir);
52: File_CleanFileName(ConfigureParams.HardDisc.szHardDiscDirectories[i]);
53: }
54: strcpy(ConfigureParams.HardDisc.szHardDiscImage, szWorkingDir);
55:
56: /* Set defaults for Joysticks */
57: for(i=0; i<2; i++)
58: {
59: ConfigureParams.Joysticks.Joy[i].bCursorEmulation = FALSE;
60: ConfigureParams.Joysticks.Joy[i].bEnableAutoFire = FALSE;
61: }
62:
63: /* Set defaults for Keyboard */
64: ConfigureParams.Keyboard.bDisableKeyRepeat = TRUE;
65: ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F11][SHORT_CUT_KEY] = SHORTCUT_FULLSCREEN;
66: ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F11][SHORT_CUT_SHIFT] = SHORTCUT_NOTASSIGNED;
67: ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F11][SHORT_CUT_CTRL] = SHORTCUT_NOTASSIGNED;
68: ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F12][SHORT_CUT_KEY] = SHORTCUT_NOTASSIGNED;
69: ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F12][SHORT_CUT_SHIFT] = SHORTCUT_NOTASSIGNED;
70: ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F12][SHORT_CUT_CTRL] = SHORTCUT_NOTASSIGNED;
71: strcpy(ConfigureParams.Keyboard.szMappingFileName, "");
72:
73: /* Set defaults for Memory */
74: ConfigureParams.Memory.nMemorySize = MEMORY_SIZE_1Mb;
75: strcpy(ConfigureParams.Memory.szMemoryCaptureFileName, "");
76:
77: /* Set defaults for Printer */
78: ConfigureParams.Printer.bEnablePrinting = FALSE;
79: ConfigureParams.Printer.bPrintToFile = FALSE;
80: strcpy(ConfigureParams.Printer.szPrintToFileName,"");
81:
82: /* Set defaults for RS232 */
83: ConfigureParams.RS232.bEnableRS232 = FALSE;
84: ConfigureParams.RS232.nCOMPort = COM_PORT_1;
85:
86: /* Set defaults for Screen */
87: ConfigureParams.Screen.bFullScreen = FALSE;
88: ConfigureParams.Screen.Advanced.bDoubleSizeWindow = FALSE;
1.1.1.2 root 89: ConfigureParams.Screen.Advanced.bAllowOverscan = TRUE;
1.1.1.4 root 90: ConfigureParams.Screen.Advanced.bInterlacedFullScreen = TRUE;
91: ConfigureParams.Screen.Advanced.bSyncToRetrace = FALSE;
92: ConfigureParams.Screen.Advanced.bFrameSkip = FALSE;
1.1.1.2 root 93: ConfigureParams.Screen.ChosenDisplayMode = DISPLAYMODE_HICOL_LOWRES;
1.1.1.4 root 94: ConfigureParams.Screen.bCaptureChange = FALSE;
95: ConfigureParams.Screen.nFramesPerSecond = 1;
96: ConfigureParams.Screen.bUseHighRes = FALSE;
97:
98: /* Set defaults for Sound */
99: ConfigureParams.Sound.bEnableSound = TRUE;
100: ConfigureParams.Sound.nPlaybackQuality = PLAYBACK_MEDIUM;
101: strcpy(ConfigureParams.Sound.szYMCaptureFileName, "");
102:
103: /* Set defaults for TOSGEM */
104: sprintf(ConfigureParams.TOSGEM.szTOSImageFileName, "%s/tos.img", DATADIR);
105: ConfigureParams.TOSGEM.bUseTimeDate = FALSE;
106: ConfigureParams.TOSGEM.bAccGEMGraphics = FALSE;
107: ConfigureParams.TOSGEM.bUseExtGEMResolutions = FALSE;
108: ConfigureParams.TOSGEM.nGEMResolution = GEMRES_640x480;
109: ConfigureParams.TOSGEM.nGEMColours = GEMCOLOUR_16;
110:
1.1.1.5 ! root 111: /* Set defaults for System */
! 112: ConfigureParams.System.nCpuLevel = 0;
! 113: ConfigureParams.System.bCompatibleCpu = FALSE;
! 114: ConfigureParams.System.bAddressSpace24 = TRUE;
! 115: ConfigureParams.System.bBlitter = FALSE;
1.1.1.2 root 116: }
117:
118:
119: /*-----------------------------------------------------------------------*/
120: /*
1.1 root 121: Load program setting from configuration file
122: */
1.1.1.2 root 123: void Configuration_Init(void)
1.1 root 124: {
125: /*
126: char sVersionString[VERSION_STRING_SIZE];
127: int i,j;
128:
129: // Set default settings, incase registry does not exist or is invalid
130: Dialog_DefaultConfigurationDetails();
131: View_DefaultWindowPos();
132:
133: // Open configuration file
134: if (Configuration_OpenFileToRead()) {
135: // Version, check matches
136: Configuration_ReadFromFile(sVersionString,VERSION_STRING_SIZE);
137: if (memcmp(sVersionString,VERSION_STRING,VERSION_STRING_SIZE)==0) {
138: // Configure
139: Configuration_ReadFromFile(&ConfigureParams.Configure.nMinMaxSpeed,4);
140: Configuration_ReadFromFile(&WindowInitRect.left,4);
141: Configuration_ReadFromFile(&WindowInitRect.top,4);
142: for(i=0; i<2; i++) {
143: for(j=0; j<MAX_FLOPPY_MENU_IMAGES; j++) {
144: Configuration_ReadFromFile(szPreviousImageFilenames[i][j],MAX_FILENAME_LENGTH);
145: }
146: Configuration_ReadFromFile(&nPreviousImageFilenames[i],4);
147: }
148: for(i=0; i<MAX_TOSIMAGE_COMBO_IMAGES; i++)
149: Configuration_ReadFromFile(szComboTOSImages[i],MAX_FILENAME_LENGTH);
150: // Screen
151: Configuration_ReadFromFile(&ConfigureParams.Screen.bFullScreen,4);
152: Configuration_ReadFromFile(&ConfigureParams.Screen.Advanced.bDoubleSizeWindow,4);
153: Configuration_ReadFromFile(&ConfigureParams.Screen.Advanced.bAllowOverscan,4);
154: Configuration_ReadFromFile(&ConfigureParams.Screen.Advanced.bInterlacedFullScreen,4);
155: Configuration_ReadFromFile(&ConfigureParams.Screen.Advanced.bSyncToRetrace,4);
156: Configuration_ReadFromFile(&ConfigureParams.Screen.ChosenDisplayMode,4);
157: Configuration_ReadFromFile(&ConfigureParams.Screen.bCaptureChange,4);
158: Configuration_ReadFromFile(&ConfigureParams.Screen.nFramesPerSecond,4);
159: Configuration_ReadFromFile(&ConfigureParams.Screen.bUseHighRes,4);
160: // Joysticks
161: Configuration_ReadFromFile(&ConfigureParams.Joysticks.bUseDirectInput,4);
162: Configuration_ReadFromFile(&ConfigureParams.Joysticks.Joy[0].bCursorEmulation,4);
163: Configuration_ReadFromFile(&ConfigureParams.Joysticks.Joy[0].bEnableAutoFire,4);
164: Configuration_ReadFromFile(&ConfigureParams.Joysticks.Joy[1].bCursorEmulation,4);
165: Configuration_ReadFromFile(&ConfigureParams.Joysticks.Joy[1].bEnableAutoFire,4);
166: // Keyboard
167: Configuration_ReadFromFile(&ConfigureParams.Keyboard.bDisableKeyRepeat,4);
168: Configuration_ReadFromFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F11][SHORT_CUT_SHIFT],4);
169: Configuration_ReadFromFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F11][SHORT_CUT_CTRL],4);
170: Configuration_ReadFromFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F12][SHORT_CUT_SHIFT],4);
171: Configuration_ReadFromFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F12][SHORT_CUT_CTRL],4);
172: Configuration_ReadFromFile(ConfigureParams.Keyboard.szMappingFileName,sizeof(ConfigureParams.Keyboard.szMappingFileName));
173: // Sound
174: Configuration_ReadFromFile(&ConfigureParams.Sound.bEnableSound,4);
175: Configuration_ReadFromFile(&ConfigureParams.Sound.nPlaybackQuality,4);
176: Configuration_ReadFromFile(ConfigureParams.Sound.szYMCaptureFileName,sizeof(ConfigureParams.Sound.szYMCaptureFileName));
177: // Memory
178: Configuration_ReadFromFile(&ConfigureParams.Memory.nMemorySize,4);
179: Configuration_ReadFromFile(ConfigureParams.Memory.szMemoryCaptureFileName,sizeof(ConfigureParams.Memory.szMemoryCaptureFileName));
180: // DiscImage
181: Configuration_ReadFromFile(&ConfigureParams.DiscImage.bAutoInsertDiscB,4);
182: Configuration_ReadFromFile(ConfigureParams.DiscImage.szDiscImageDirectory,sizeof(ConfigureParams.DiscImage.szDiscImageDirectory));
183: // HardDisc
184: Configuration_ReadFromFile(&ConfigureParams.HardDisc.nDriveList,4);
185: Configuration_ReadFromFile(&ConfigureParams.HardDisc.bBootFromHardDisc,4);
186: Configuration_ReadFromFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_C],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_C]));
187: Configuration_ReadFromFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_D],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_D]));
188: Configuration_ReadFromFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_E],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_E]));
189: Configuration_ReadFromFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_F],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_F]));
190: // TOSGEM
191: Configuration_ReadFromFile(ConfigureParams.TOSGEM.szTOSImageFileName,sizeof(ConfigureParams.TOSGEM.szTOSImageFileName));
192: Configuration_ReadFromFile(&ConfigureParams.TOSGEM.bUseTimeDate,4);
193: Configuration_ReadFromFile(&ConfigureParams.TOSGEM.bAccGEMGraphics,4);
194: Configuration_ReadFromFile(&ConfigureParams.TOSGEM.bUseExtGEMResolutions,4);
195: Configuration_ReadFromFile(&ConfigureParams.TOSGEM.nGEMResolution,4);
196: Configuration_ReadFromFile(&ConfigureParams.TOSGEM.nGEMColours,4);
197: // RS232
198: Configuration_ReadFromFile(&ConfigureParams.RS232.bEnableRS232,4);
199: Configuration_ReadFromFile(&ConfigureParams.RS232.nCOMPort,4);
200: // Printer
201: Configuration_ReadFromFile(&ConfigureParams.Printer.bEnablePrinting,4);
202: Configuration_ReadFromFile(&ConfigureParams.Printer.bPrintToFile,4);
203: Configuration_ReadFromFile(ConfigureParams.Printer.szPrintToFileName,sizeof(ConfigureParams.Printer.szPrintToFileName));
204: // Favourites
205: Configuration_ReadFromFile(&ConfigureParams.Favourites.bCheckDiscs,4);
206: Configuration_ReadFromFile(&ConfigureParams.Favourites.bOnlyShowIfExist,4);
207:
208: bUseVDIRes = ConfigureParams.TOSGEM.bUseExtGEMResolutions;
209: bUseHighRes = ConfigureParams.Screen.bUseHighRes || (bUseVDIRes && (ConfigureParams.TOSGEM.nGEMColours==GEMCOLOUR_2));
210: }
211:
212: // And close up
213: Configuration_CloseFile();
214: }
215: else {
216: // No configuration file, assume first-time install
217: bFirstTimeInstall = TRUE;
218: }
219:
220: // Copy details to globals, TRUE
221: Dialog_CopyDetailsFromConfiguration(TRUE);
222: */
223: }
224:
225:
226: /*-----------------------------------------------------------------------*/
227: /*
228: Save program setting to configuration file
229: */
230: void Configuration_UnInit(void)
231: {
232: /* FIXME: Rewrite this, too! */
233: /*
234: int i,j;
235:
236: // Open configuration file
237: if (Configuration_OpenFileToWrite()) {
238: // Version
239: Configuration_WriteToFile(VERSION_STRING,VERSION_STRING_SIZE);
240: // Configure
241: Configuration_WriteToFile(&ConfigureParams.Configure.nMinMaxSpeed,4);
242: ConfigureParams.Configure.nPrevMinMaxSpeed = ConfigureParams.Configure.nMinMaxSpeed;
243: Configuration_WriteToFile(&WindowInitRect.left,4);
244: Configuration_WriteToFile(&WindowInitRect.top,4);
245: for(i=0; i<2; i++) {
246: for(j=0; j<MAX_FLOPPY_MENU_IMAGES; j++) {
247: Configuration_WriteToFile(szPreviousImageFilenames[i][j],MAX_FILENAME_LENGTH);
248: }
249: Configuration_WriteToFile(&nPreviousImageFilenames[i],4);
250: }
251: for(i=0; i<MAX_TOSIMAGE_COMBO_IMAGES; i++)
252: Configuration_WriteToFile(szComboTOSImages[i],MAX_FILENAME_LENGTH);
253: // Screen
254: Configuration_WriteToFile(&ConfigureParams.Screen.bFullScreen,4);
255: Configuration_WriteToFile(&ConfigureParams.Screen.Advanced.bDoubleSizeWindow,4);
256: Configuration_WriteToFile(&ConfigureParams.Screen.Advanced.bAllowOverscan,4);
257: Configuration_WriteToFile(&ConfigureParams.Screen.Advanced.bInterlacedFullScreen,4);
258: Configuration_WriteToFile(&ConfigureParams.Screen.Advanced.bSyncToRetrace,4);
259: Configuration_WriteToFile(&ConfigureParams.Screen.ChosenDisplayMode,4);
260: Configuration_WriteToFile(&ConfigureParams.Screen.bCaptureChange,4);
261: Configuration_WriteToFile(&ConfigureParams.Screen.nFramesPerSecond,4);
262: Configuration_WriteToFile(&ConfigureParams.Screen.bUseHighRes,4);
263: // Joysticks
264: Configuration_WriteToFile(&ConfigureParams.Joysticks.bUseDirectInput,4);
265: Configuration_WriteToFile(&ConfigureParams.Joysticks.Joy[0].bCursorEmulation,4);
266: Configuration_WriteToFile(&ConfigureParams.Joysticks.Joy[0].bEnableAutoFire,4);
267: Configuration_WriteToFile(&ConfigureParams.Joysticks.Joy[1].bCursorEmulation,4);
268: Configuration_WriteToFile(&ConfigureParams.Joysticks.Joy[1].bEnableAutoFire,4);
269: // Keyboard
270: Configuration_WriteToFile(&ConfigureParams.Keyboard.bDisableKeyRepeat,4);
271: Configuration_WriteToFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F11][SHORT_CUT_SHIFT],4);
272: Configuration_WriteToFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F11][SHORT_CUT_CTRL],4);
273: Configuration_WriteToFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F12][SHORT_CUT_SHIFT],4);
274: Configuration_WriteToFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F12][SHORT_CUT_CTRL],4);
275: Configuration_WriteToFile(ConfigureParams.Keyboard.szMappingFileName,sizeof(ConfigureParams.Keyboard.szMappingFileName));
276: // Sound
277: Configuration_WriteToFile(&ConfigureParams.Sound.bEnableSound,4);
278: Configuration_WriteToFile(&ConfigureParams.Sound.nPlaybackQuality,4);
279: Configuration_WriteToFile(ConfigureParams.Sound.szYMCaptureFileName,sizeof(ConfigureParams.Sound.szYMCaptureFileName));
280: // Memory
281: Configuration_WriteToFile(&ConfigureParams.Memory.nMemorySize,4);
282: Configuration_WriteToFile(ConfigureParams.Memory.szMemoryCaptureFileName,sizeof(ConfigureParams.Memory.szMemoryCaptureFileName));
283: // DiscImage
284: Configuration_WriteToFile(&ConfigureParams.DiscImage.bAutoInsertDiscB,4);
285: Configuration_WriteToFile(ConfigureParams.DiscImage.szDiscImageDirectory,sizeof(ConfigureParams.DiscImage.szDiscImageDirectory));
286: // HardDisc
287: Configuration_WriteToFile(&ConfigureParams.HardDisc.nDriveList,4);
288: Configuration_WriteToFile(&ConfigureParams.HardDisc.bBootFromHardDisc,4);
289: Configuration_WriteToFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_C],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_C]));
290: Configuration_WriteToFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_D],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_D]));
291: Configuration_WriteToFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_E],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_E]));
292: Configuration_WriteToFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_F],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_F]));
293: // TOSGEM
294: Configuration_WriteToFile(ConfigureParams.TOSGEM.szTOSImageFileName,sizeof(ConfigureParams.TOSGEM.szTOSImageFileName));
295: Configuration_WriteToFile(&ConfigureParams.TOSGEM.bUseTimeDate,4);
296: Configuration_WriteToFile(&ConfigureParams.TOSGEM.bAccGEMGraphics,4);
297: Configuration_WriteToFile(&ConfigureParams.TOSGEM.bUseExtGEMResolutions,4);
298: Configuration_WriteToFile(&ConfigureParams.TOSGEM.nGEMResolution,4);
299: Configuration_WriteToFile(&ConfigureParams.TOSGEM.nGEMColours,4);
300: // RS232
301: Configuration_WriteToFile(&ConfigureParams.RS232.bEnableRS232,4);
302: Configuration_WriteToFile(&ConfigureParams.RS232.nCOMPort,4);
303: // Printer
304: Configuration_WriteToFile(&ConfigureParams.Printer.bEnablePrinting,4);
305: Configuration_WriteToFile(&ConfigureParams.Printer.bPrintToFile,4);
306: Configuration_WriteToFile(ConfigureParams.Printer.szPrintToFileName,sizeof(ConfigureParams.Printer.szPrintToFileName));
307: // Favourites
308: Configuration_WriteToFile(&ConfigureParams.Favourites.bCheckDiscs,4);
309: Configuration_WriteToFile(&ConfigureParams.Favourites.bOnlyShowIfExist,4);
310:
311: // And close up
312: Configuration_CloseFile();
313: }
314: */
315: }
316:
317:
318: /*-----------------------------------------------------------------------*/
319: /*
320: Open configuration file to write to
321: */
322: BOOL Configuration_OpenFileToWrite(void)
323: {
324: char szString[MAX_FILENAME_LENGTH];
325:
326: /* Create file */
327: sprintf(szString,"%s/hatari.cfg",szWorkingDir);
328: ConfigFile = fopen(szString, "wb");
329: if (ConfigFile!=NULL)
330: return(TRUE);
331:
332: /* Whoops, error */
333: return(FALSE);
334: }
335:
336:
337: /*-----------------------------------------------------------------------*/
338: /*
339: Open configuration file for reading
340: */
341: BOOL Configuration_OpenFileToRead(void)
342: {
343: char szString[MAX_FILENAME_LENGTH];
344:
345: /* Create file */
346: sprintf(szString,"%s/hatari.cfg",szWorkingDir);
347: ConfigFile = fopen(szString, "rb");
348: if (ConfigFile!=NULL)
349: return(TRUE);
350:
351: /* Whoops, error */
352: return(FALSE);
353: }
354:
355:
356: /*-----------------------------------------------------------------------*/
357: /*
358: Close configuration
359: */
360: void Configuration_CloseFile(void)
361: {
362: fclose(ConfigFile);
363: }
364:
365:
366: /*-----------------------------------------------------------------------*/
367: /*
368: Write entry to configuration file
369: */
370: void Configuration_WriteToFile(void *pData,int nBytes)
371: {
372: fwrite(pData, 1, nBytes, ConfigFile);
373: }
374:
375:
376: /*-----------------------------------------------------------------------*/
377: /*
378: Read entry from configuration file
379: */
380: void Configuration_ReadFromFile(void *pData,int nBytes)
381: {
382: fread(pData, 1, nBytes, ConfigFile);
383: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.