|
|
1.1 root 1: /*
2: Hatari
3:
4: Configuration File
5:
6: The configuration file istored 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.
9: */
10:
11: #include "main.h"
12: #include "configuration.h"
13: #include "dialog.h"
14: #include "video.h"
15: #include "view.h"
16: #include "vdi.h"
1.1.1.2 ! root 17: #include "screen.h"
1.1 root 18:
19: static FILE *ConfigFile;
20: /*static OFSTRUCT ConfigFileInfo;*/
21: BOOL bFirstTimeInstall=FALSE; /* Has been run before? Used to set default joysticks etc... */
22:
23:
24: /*-----------------------------------------------------------------------*/
25: /*
1.1.1.2 ! root 26: Set default configuration values
! 27: This is new in Hatari - Winston always loaded its values from a config
! 28: file. But since Hatari does not yet use a config file, we need this!
! 29: */
! 30: void Configuration_SetDefault(void)
! 31: {
! 32: ConfigureParams.Sound.bEnableSound = FALSE;
! 33: ConfigureParams.Screen.Advanced.bFrameSkip = FALSE;
! 34: ConfigureParams.Screen.Advanced.bAllowOverscan = TRUE;
! 35: ConfigureParams.Screen.ChosenDisplayMode = DISPLAYMODE_HICOL_LOWRES;
! 36: }
! 37:
! 38:
! 39: /*-----------------------------------------------------------------------*/
! 40: /*
1.1 root 41: Load program setting from configuration file
42: */
1.1.1.2 ! root 43: void Configuration_Init(void)
1.1 root 44: {
45: /*
46: char sVersionString[VERSION_STRING_SIZE];
47: int i,j;
48:
49: // Set default settings, incase registry does not exist or is invalid
50: Dialog_DefaultConfigurationDetails();
51: View_DefaultWindowPos();
52:
53: // Open configuration file
54: if (Configuration_OpenFileToRead()) {
55: // Version, check matches
56: Configuration_ReadFromFile(sVersionString,VERSION_STRING_SIZE);
57: if (memcmp(sVersionString,VERSION_STRING,VERSION_STRING_SIZE)==0) {
58: // Configure
59: Configuration_ReadFromFile(&ConfigureParams.Configure.nMinMaxSpeed,4);
60: Configuration_ReadFromFile(&WindowInitRect.left,4);
61: Configuration_ReadFromFile(&WindowInitRect.top,4);
62: for(i=0; i<2; i++) {
63: for(j=0; j<MAX_FLOPPY_MENU_IMAGES; j++) {
64: Configuration_ReadFromFile(szPreviousImageFilenames[i][j],MAX_FILENAME_LENGTH);
65: }
66: Configuration_ReadFromFile(&nPreviousImageFilenames[i],4);
67: }
68: for(i=0; i<MAX_TOSIMAGE_COMBO_IMAGES; i++)
69: Configuration_ReadFromFile(szComboTOSImages[i],MAX_FILENAME_LENGTH);
70: // Screen
71: Configuration_ReadFromFile(&ConfigureParams.Screen.bFullScreen,4);
72: Configuration_ReadFromFile(&ConfigureParams.Screen.Advanced.bDoubleSizeWindow,4);
73: Configuration_ReadFromFile(&ConfigureParams.Screen.Advanced.bAllowOverscan,4);
74: Configuration_ReadFromFile(&ConfigureParams.Screen.Advanced.bInterlacedFullScreen,4);
75: Configuration_ReadFromFile(&ConfigureParams.Screen.Advanced.bSyncToRetrace,4);
76: Configuration_ReadFromFile(&ConfigureParams.Screen.ChosenDisplayMode,4);
77: Configuration_ReadFromFile(&ConfigureParams.Screen.bCaptureChange,4);
78: Configuration_ReadFromFile(&ConfigureParams.Screen.nFramesPerSecond,4);
79: Configuration_ReadFromFile(&ConfigureParams.Screen.bUseHighRes,4);
80: // Joysticks
81: Configuration_ReadFromFile(&ConfigureParams.Joysticks.bUseDirectInput,4);
82: Configuration_ReadFromFile(&ConfigureParams.Joysticks.Joy[0].bCursorEmulation,4);
83: Configuration_ReadFromFile(&ConfigureParams.Joysticks.Joy[0].bEnableAutoFire,4);
84: Configuration_ReadFromFile(&ConfigureParams.Joysticks.Joy[1].bCursorEmulation,4);
85: Configuration_ReadFromFile(&ConfigureParams.Joysticks.Joy[1].bEnableAutoFire,4);
86: // Keyboard
87: Configuration_ReadFromFile(&ConfigureParams.Keyboard.bDisableKeyRepeat,4);
88: Configuration_ReadFromFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F11][SHORT_CUT_SHIFT],4);
89: Configuration_ReadFromFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F11][SHORT_CUT_CTRL],4);
90: Configuration_ReadFromFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F12][SHORT_CUT_SHIFT],4);
91: Configuration_ReadFromFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F12][SHORT_CUT_CTRL],4);
92: Configuration_ReadFromFile(ConfigureParams.Keyboard.szMappingFileName,sizeof(ConfigureParams.Keyboard.szMappingFileName));
93: // Sound
94: Configuration_ReadFromFile(&ConfigureParams.Sound.bEnableSound,4);
95: Configuration_ReadFromFile(&ConfigureParams.Sound.nPlaybackQuality,4);
96: Configuration_ReadFromFile(ConfigureParams.Sound.szYMCaptureFileName,sizeof(ConfigureParams.Sound.szYMCaptureFileName));
97: // Memory
98: Configuration_ReadFromFile(&ConfigureParams.Memory.nMemorySize,4);
99: Configuration_ReadFromFile(ConfigureParams.Memory.szMemoryCaptureFileName,sizeof(ConfigureParams.Memory.szMemoryCaptureFileName));
100: // DiscImage
101: Configuration_ReadFromFile(&ConfigureParams.DiscImage.bAutoInsertDiscB,4);
102: Configuration_ReadFromFile(ConfigureParams.DiscImage.szDiscImageDirectory,sizeof(ConfigureParams.DiscImage.szDiscImageDirectory));
103: // HardDisc
104: Configuration_ReadFromFile(&ConfigureParams.HardDisc.nDriveList,4);
105: Configuration_ReadFromFile(&ConfigureParams.HardDisc.bBootFromHardDisc,4);
106: Configuration_ReadFromFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_C],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_C]));
107: Configuration_ReadFromFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_D],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_D]));
108: Configuration_ReadFromFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_E],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_E]));
109: Configuration_ReadFromFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_F],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_F]));
110: // TOSGEM
111: Configuration_ReadFromFile(ConfigureParams.TOSGEM.szTOSImageFileName,sizeof(ConfigureParams.TOSGEM.szTOSImageFileName));
112: Configuration_ReadFromFile(&ConfigureParams.TOSGEM.bUseTimeDate,4);
113: Configuration_ReadFromFile(&ConfigureParams.TOSGEM.bAccGEMGraphics,4);
114: Configuration_ReadFromFile(&ConfigureParams.TOSGEM.bUseExtGEMResolutions,4);
115: Configuration_ReadFromFile(&ConfigureParams.TOSGEM.nGEMResolution,4);
116: Configuration_ReadFromFile(&ConfigureParams.TOSGEM.nGEMColours,4);
117: // RS232
118: Configuration_ReadFromFile(&ConfigureParams.RS232.bEnableRS232,4);
119: Configuration_ReadFromFile(&ConfigureParams.RS232.nCOMPort,4);
120: // Printer
121: Configuration_ReadFromFile(&ConfigureParams.Printer.bEnablePrinting,4);
122: Configuration_ReadFromFile(&ConfigureParams.Printer.bPrintToFile,4);
123: Configuration_ReadFromFile(ConfigureParams.Printer.szPrintToFileName,sizeof(ConfigureParams.Printer.szPrintToFileName));
124: // Favourites
125: Configuration_ReadFromFile(&ConfigureParams.Favourites.bCheckDiscs,4);
126: Configuration_ReadFromFile(&ConfigureParams.Favourites.bOnlyShowIfExist,4);
127:
128: bUseVDIRes = ConfigureParams.TOSGEM.bUseExtGEMResolutions;
129: bUseHighRes = ConfigureParams.Screen.bUseHighRes || (bUseVDIRes && (ConfigureParams.TOSGEM.nGEMColours==GEMCOLOUR_2));
130: }
131:
132: // And close up
133: Configuration_CloseFile();
134: }
135: else {
136: // No configuration file, assume first-time install
137: bFirstTimeInstall = TRUE;
138: }
139:
140: // Copy details to globals, TRUE
141: Dialog_CopyDetailsFromConfiguration(TRUE);
142: */
143: }
144:
145:
146: /*-----------------------------------------------------------------------*/
147: /*
148: Save program setting to configuration file
149: */
150: void Configuration_UnInit(void)
151: {
152: /* FIXME: Rewrite this, too! */
153: /*
154: int i,j;
155:
156: // Open configuration file
157: if (Configuration_OpenFileToWrite()) {
158: // Version
159: Configuration_WriteToFile(VERSION_STRING,VERSION_STRING_SIZE);
160: // Configure
161: Configuration_WriteToFile(&ConfigureParams.Configure.nMinMaxSpeed,4);
162: ConfigureParams.Configure.nPrevMinMaxSpeed = ConfigureParams.Configure.nMinMaxSpeed;
163: Configuration_WriteToFile(&WindowInitRect.left,4);
164: Configuration_WriteToFile(&WindowInitRect.top,4);
165: for(i=0; i<2; i++) {
166: for(j=0; j<MAX_FLOPPY_MENU_IMAGES; j++) {
167: Configuration_WriteToFile(szPreviousImageFilenames[i][j],MAX_FILENAME_LENGTH);
168: }
169: Configuration_WriteToFile(&nPreviousImageFilenames[i],4);
170: }
171: for(i=0; i<MAX_TOSIMAGE_COMBO_IMAGES; i++)
172: Configuration_WriteToFile(szComboTOSImages[i],MAX_FILENAME_LENGTH);
173: // Screen
174: Configuration_WriteToFile(&ConfigureParams.Screen.bFullScreen,4);
175: Configuration_WriteToFile(&ConfigureParams.Screen.Advanced.bDoubleSizeWindow,4);
176: Configuration_WriteToFile(&ConfigureParams.Screen.Advanced.bAllowOverscan,4);
177: Configuration_WriteToFile(&ConfigureParams.Screen.Advanced.bInterlacedFullScreen,4);
178: Configuration_WriteToFile(&ConfigureParams.Screen.Advanced.bSyncToRetrace,4);
179: Configuration_WriteToFile(&ConfigureParams.Screen.ChosenDisplayMode,4);
180: Configuration_WriteToFile(&ConfigureParams.Screen.bCaptureChange,4);
181: Configuration_WriteToFile(&ConfigureParams.Screen.nFramesPerSecond,4);
182: Configuration_WriteToFile(&ConfigureParams.Screen.bUseHighRes,4);
183: // Joysticks
184: Configuration_WriteToFile(&ConfigureParams.Joysticks.bUseDirectInput,4);
185: Configuration_WriteToFile(&ConfigureParams.Joysticks.Joy[0].bCursorEmulation,4);
186: Configuration_WriteToFile(&ConfigureParams.Joysticks.Joy[0].bEnableAutoFire,4);
187: Configuration_WriteToFile(&ConfigureParams.Joysticks.Joy[1].bCursorEmulation,4);
188: Configuration_WriteToFile(&ConfigureParams.Joysticks.Joy[1].bEnableAutoFire,4);
189: // Keyboard
190: Configuration_WriteToFile(&ConfigureParams.Keyboard.bDisableKeyRepeat,4);
191: Configuration_WriteToFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F11][SHORT_CUT_SHIFT],4);
192: Configuration_WriteToFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F11][SHORT_CUT_CTRL],4);
193: Configuration_WriteToFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F12][SHORT_CUT_SHIFT],4);
194: Configuration_WriteToFile(&ConfigureParams.Keyboard.ShortCuts[SHORT_CUT_F12][SHORT_CUT_CTRL],4);
195: Configuration_WriteToFile(ConfigureParams.Keyboard.szMappingFileName,sizeof(ConfigureParams.Keyboard.szMappingFileName));
196: // Sound
197: Configuration_WriteToFile(&ConfigureParams.Sound.bEnableSound,4);
198: Configuration_WriteToFile(&ConfigureParams.Sound.nPlaybackQuality,4);
199: Configuration_WriteToFile(ConfigureParams.Sound.szYMCaptureFileName,sizeof(ConfigureParams.Sound.szYMCaptureFileName));
200: // Memory
201: Configuration_WriteToFile(&ConfigureParams.Memory.nMemorySize,4);
202: Configuration_WriteToFile(ConfigureParams.Memory.szMemoryCaptureFileName,sizeof(ConfigureParams.Memory.szMemoryCaptureFileName));
203: // DiscImage
204: Configuration_WriteToFile(&ConfigureParams.DiscImage.bAutoInsertDiscB,4);
205: Configuration_WriteToFile(ConfigureParams.DiscImage.szDiscImageDirectory,sizeof(ConfigureParams.DiscImage.szDiscImageDirectory));
206: // HardDisc
207: Configuration_WriteToFile(&ConfigureParams.HardDisc.nDriveList,4);
208: Configuration_WriteToFile(&ConfigureParams.HardDisc.bBootFromHardDisc,4);
209: Configuration_WriteToFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_C],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_C]));
210: Configuration_WriteToFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_D],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_D]));
211: Configuration_WriteToFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_E],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_E]));
212: Configuration_WriteToFile(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_F],sizeof(ConfigureParams.HardDisc.szHardDiscDirectories[DRIVE_F]));
213: // TOSGEM
214: Configuration_WriteToFile(ConfigureParams.TOSGEM.szTOSImageFileName,sizeof(ConfigureParams.TOSGEM.szTOSImageFileName));
215: Configuration_WriteToFile(&ConfigureParams.TOSGEM.bUseTimeDate,4);
216: Configuration_WriteToFile(&ConfigureParams.TOSGEM.bAccGEMGraphics,4);
217: Configuration_WriteToFile(&ConfigureParams.TOSGEM.bUseExtGEMResolutions,4);
218: Configuration_WriteToFile(&ConfigureParams.TOSGEM.nGEMResolution,4);
219: Configuration_WriteToFile(&ConfigureParams.TOSGEM.nGEMColours,4);
220: // RS232
221: Configuration_WriteToFile(&ConfigureParams.RS232.bEnableRS232,4);
222: Configuration_WriteToFile(&ConfigureParams.RS232.nCOMPort,4);
223: // Printer
224: Configuration_WriteToFile(&ConfigureParams.Printer.bEnablePrinting,4);
225: Configuration_WriteToFile(&ConfigureParams.Printer.bPrintToFile,4);
226: Configuration_WriteToFile(ConfigureParams.Printer.szPrintToFileName,sizeof(ConfigureParams.Printer.szPrintToFileName));
227: // Favourites
228: Configuration_WriteToFile(&ConfigureParams.Favourites.bCheckDiscs,4);
229: Configuration_WriteToFile(&ConfigureParams.Favourites.bOnlyShowIfExist,4);
230:
231: // And close up
232: Configuration_CloseFile();
233: }
234: */
235: }
236:
237:
238: /*-----------------------------------------------------------------------*/
239: /*
240: Open configuration file to write to
241: */
242: BOOL Configuration_OpenFileToWrite(void)
243: {
244: char szString[MAX_FILENAME_LENGTH];
245:
246: /* Create file */
247: sprintf(szString,"%s/hatari.cfg",szWorkingDir);
248: ConfigFile = fopen(szString, "wb");
249: if (ConfigFile!=NULL)
250: return(TRUE);
251:
252: /* Whoops, error */
253: return(FALSE);
254: }
255:
256:
257: /*-----------------------------------------------------------------------*/
258: /*
259: Open configuration file for reading
260: */
261: BOOL Configuration_OpenFileToRead(void)
262: {
263: char szString[MAX_FILENAME_LENGTH];
264:
265: /* Create file */
266: sprintf(szString,"%s/hatari.cfg",szWorkingDir);
267: ConfigFile = fopen(szString, "rb");
268: if (ConfigFile!=NULL)
269: return(TRUE);
270:
271: /* Whoops, error */
272: return(FALSE);
273: }
274:
275:
276: /*-----------------------------------------------------------------------*/
277: /*
278: Close configuration
279: */
280: void Configuration_CloseFile(void)
281: {
282: fclose(ConfigFile);
283: }
284:
285:
286: /*-----------------------------------------------------------------------*/
287: /*
288: Write entry to configuration file
289: */
290: void Configuration_WriteToFile(void *pData,int nBytes)
291: {
292: fwrite(pData, 1, nBytes, ConfigFile);
293: }
294:
295:
296: /*-----------------------------------------------------------------------*/
297: /*
298: Read entry from configuration file
299: */
300: void Configuration_ReadFromFile(void *pData,int nBytes)
301: {
302: fread(pData, 1, nBytes, ConfigFile);
303: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.