ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/Frodo4/Src/Prefs.cpp
Revision: 1.7
Committed: 2004-01-14T17:26:29Z (20 years, 10 months ago) by cebix
Branch: MAIN
Changes since 1.6: +1 -53 lines
Log Message:
Prefs::DriveType[] is gone; the 1541 emulation type (disk image, archive file,
directory) is now determined automatically. This still needs some work in
the user interfaces.

File Contents

# User Rev Content
1 cebix 1.1 /*
2     * Prefs.cpp - Global preferences
3     *
4 cebix 1.5 * Frodo (C) 1994-1997,2002-2004 Christian Bauer
5 cebix 1.1 *
6     * This program is free software; you can redistribute it and/or modify
7     * it under the terms of the GNU General Public License as published by
8     * the Free Software Foundation; either version 2 of the License, or
9     * (at your option) any later version.
10     *
11     * This program is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with this program; if not, write to the Free Software
18     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19     */
20    
21     #include "sysdeps.h"
22    
23     #include "Prefs.h"
24     #include "Display.h"
25     #include "C64.h"
26     #include "main.h"
27    
28    
29     // These are the active preferences
30     Prefs ThePrefs;
31    
32     // These are the preferences on disk
33     Prefs ThePrefsOnDisk;
34    
35    
36     /*
37     * Constructor: Set up preferences with defaults
38     */
39    
40     Prefs::Prefs()
41     {
42     NormalCycles = 63;
43     BadLineCycles = 23;
44     CIACycles = 63;
45     FloppyCycles = 64;
46 cebix 1.4 SkipFrames = 1;
47 cebix 1.1 LatencyMin = 80;
48     LatencyMax = 120;
49     LatencyAvg = 280;
50     ScalingNumerator = 2;
51     ScalingDenominator = 2;
52    
53     strcpy(DrivePath[0], "64prgs");
54     strcpy(DrivePath[1], "");
55     strcpy(DrivePath[2], "");
56     strcpy(DrivePath[3], "");
57    
58     strcpy(ViewPort, "Default");
59     strcpy(DisplayMode, "Default");
60    
61 cebix 1.4 SIDType = SIDTYPE_DIGITAL;
62 cebix 1.1 REUSize = REU_NONE;
63     DisplayType = DISPTYPE_WINDOW;
64 cebix 1.3 Joystick1Port = 0;
65     Joystick2Port = 0;
66 cebix 1.1
67     SpritesOn = true;
68     SpriteCollisions = true;
69     JoystickSwap = false;
70     LimitSpeed = false;
71     FastReset = false;
72     CIAIRQHack = false;
73     MapSlash = true;
74     Emul1541Proc = false;
75     SIDFilters = true;
76     DoubleScan = true;
77     HideCursor = false;
78     DirectSound = true;
79     ExclusiveSound = false;
80     AutoPause = false;
81     PrefsAtStartup = false;
82     SystemMemory = false;
83     AlwaysCopy = false;
84     SystemKeys = true;
85     ShowLEDs = true;
86     }
87    
88    
89     /*
90     * Check if two Prefs structures are equal
91     */
92    
93     bool Prefs::operator==(const Prefs &rhs) const
94     {
95     return (1
96     && NormalCycles == rhs.NormalCycles
97     && BadLineCycles == rhs.BadLineCycles
98     && CIACycles == rhs.CIACycles
99     && FloppyCycles == rhs.FloppyCycles
100     && SkipFrames == rhs.SkipFrames
101     && LatencyMin == rhs.LatencyMin
102     && LatencyMax == rhs.LatencyMax
103     && LatencyAvg == rhs.LatencyAvg
104     && ScalingNumerator == rhs.ScalingNumerator
105     && ScalingDenominator == rhs.ScalingNumerator
106     && strcmp(DrivePath[0], rhs.DrivePath[0]) == 0
107     && strcmp(DrivePath[1], rhs.DrivePath[1]) == 0
108     && strcmp(DrivePath[2], rhs.DrivePath[2]) == 0
109     && strcmp(DrivePath[3], rhs.DrivePath[3]) == 0
110     && strcmp(ViewPort, rhs.ViewPort) == 0
111     && strcmp(DisplayMode, rhs.DisplayMode) == 0
112     && SIDType == rhs.SIDType
113     && REUSize == rhs.REUSize
114     && DisplayType == rhs.DisplayType
115     && SpritesOn == rhs.SpritesOn
116     && SpriteCollisions == rhs.SpriteCollisions
117 cebix 1.3 && Joystick1Port == rhs.Joystick1Port
118     && Joystick2Port == rhs.Joystick2Port
119 cebix 1.1 && JoystickSwap == rhs.JoystickSwap
120     && LimitSpeed == rhs.LimitSpeed
121     && FastReset == rhs.FastReset
122     && CIAIRQHack == rhs.CIAIRQHack
123     && MapSlash == rhs.MapSlash
124     && Emul1541Proc == rhs.Emul1541Proc
125     && SIDFilters == rhs.SIDFilters
126     && DoubleScan == rhs.DoubleScan
127     && HideCursor == rhs.HideCursor
128     && DirectSound == rhs.DirectSound
129     && ExclusiveSound == rhs.ExclusiveSound
130     && AutoPause == rhs.AutoPause
131     && PrefsAtStartup == rhs.PrefsAtStartup
132     && SystemMemory == rhs.SystemMemory
133     && AlwaysCopy == rhs.AlwaysCopy
134     && SystemKeys == rhs.SystemKeys
135     && ShowLEDs == rhs.ShowLEDs
136     );
137     }
138    
139     bool Prefs::operator!=(const Prefs &rhs) const
140     {
141     return !operator==(rhs);
142     }
143    
144    
145     /*
146     * Check preferences for validity and correct if necessary
147     */
148    
149     void Prefs::Check(void)
150     {
151     if (SkipFrames <= 0) SkipFrames = 1;
152    
153     if (SIDType < SIDTYPE_NONE || SIDType > SIDTYPE_SIDCARD)
154     SIDType = SIDTYPE_NONE;
155    
156     if (REUSize < REU_NONE || REUSize > REU_512K)
157     REUSize = REU_NONE;
158    
159     if (DisplayType < DISPTYPE_WINDOW || DisplayType > DISPTYPE_SCREEN)
160     DisplayType = DISPTYPE_WINDOW;
161     }
162    
163    
164     /*
165     * Load preferences from file
166     */
167    
168     void Prefs::Load(char *filename)
169     {
170     FILE *file;
171     char line[256], keyword[256], value[256];
172    
173     if ((file = fopen(filename, "r")) != NULL) {
174     while(fgets(line, 255, file)) {
175     if (sscanf(line, "%s = %s\n", keyword, value) == 2) {
176     if (!strcmp(keyword, "NormalCycles"))
177     NormalCycles = atoi(value);
178     else if (!strcmp(keyword, "BadLineCycles"))
179     BadLineCycles = atoi(value);
180     else if (!strcmp(keyword, "CIACycles"))
181     CIACycles = atoi(value);
182     else if (!strcmp(keyword, "FloppyCycles"))
183     FloppyCycles = atoi(value);
184     else if (!strcmp(keyword, "SkipFrames"))
185     SkipFrames = atoi(value);
186     else if (!strcmp(keyword, "LatencyMin"))
187     LatencyMin = atoi(value);
188     else if (!strcmp(keyword, "LatencyMax"))
189     LatencyMax = atoi(value);
190     else if (!strcmp(keyword, "LatencyAvg"))
191     LatencyAvg = atoi(value);
192     else if (!strcmp(keyword, "ScalingNumerator"))
193     ScalingNumerator = atoi(value);
194     else if (!strcmp(keyword, "ScalingDenominator"))
195     ScalingDenominator = atoi(value);
196     else if (!strcmp(keyword, "DrivePath8"))
197     strcpy(DrivePath[0], value);
198     else if (!strcmp(keyword, "DrivePath9"))
199     strcpy(DrivePath[1], value);
200     else if (!strcmp(keyword, "DrivePath10"))
201     strcpy(DrivePath[2], value);
202     else if (!strcmp(keyword, "DrivePath11"))
203     strcpy(DrivePath[3], value);
204     else if (!strcmp(keyword, "ViewPort"))
205     strcpy(ViewPort, value);
206     else if (!strcmp(keyword, "DisplayMode"))
207     strcpy(DisplayMode, value);
208     else if (!strcmp(keyword, "SIDType"))
209     if (!strcmp(value, "DIGITAL"))
210     SIDType = SIDTYPE_DIGITAL;
211     else if (!strcmp(value, "SIDCARD"))
212     SIDType = SIDTYPE_SIDCARD;
213     else
214     SIDType = SIDTYPE_NONE;
215     else if (!strcmp(keyword, "REUSize")) {
216     if (!strcmp(value, "128K"))
217     REUSize = REU_128K;
218     else if (!strcmp(value, "256K"))
219     REUSize = REU_256K;
220     else if (!strcmp(value, "512K"))
221     REUSize = REU_512K;
222     else
223     REUSize = REU_NONE;
224     } else if (!strcmp(keyword, "DisplayType"))
225     DisplayType = strcmp(value, "SCREEN") ? DISPTYPE_WINDOW : DISPTYPE_SCREEN;
226 cebix 1.3 else if (!strcmp(keyword, "Joystick1Port"))
227     Joystick1Port = atoi(value);
228     else if (!strcmp(keyword, "Joystick2Port"))
229     Joystick2Port = atoi(value);
230 cebix 1.1 else if (!strcmp(keyword, "SpritesOn"))
231     SpritesOn = !strcmp(value, "TRUE");
232     else if (!strcmp(keyword, "SpriteCollisions"))
233     SpriteCollisions = !strcmp(value, "TRUE");
234     else if (!strcmp(keyword, "JoystickSwap"))
235     JoystickSwap = !strcmp(value, "TRUE");
236     else if (!strcmp(keyword, "LimitSpeed"))
237     LimitSpeed = !strcmp(value, "TRUE");
238     else if (!strcmp(keyword, "FastReset"))
239     FastReset = !strcmp(value, "TRUE");
240     else if (!strcmp(keyword, "CIAIRQHack"))
241     CIAIRQHack = !strcmp(value, "TRUE");
242     else if (!strcmp(keyword, "MapSlash"))
243     MapSlash = !strcmp(value, "TRUE");
244     else if (!strcmp(keyword, "Emul1541Proc"))
245     Emul1541Proc = !strcmp(value, "TRUE");
246     else if (!strcmp(keyword, "SIDFilters"))
247     SIDFilters = !strcmp(value, "TRUE");
248     else if (!strcmp(keyword, "DoubleScan"))
249     DoubleScan = !strcmp(value, "TRUE");
250     else if (!strcmp(keyword, "HideCursor"))
251     HideCursor = !strcmp(value, "TRUE");
252     else if (!strcmp(keyword, "DirectSound"))
253     DirectSound = !strcmp(value, "TRUE");
254     else if (!strcmp(keyword, "ExclusiveSound"))
255     ExclusiveSound = !strcmp(value, "TRUE");
256     else if (!strcmp(keyword, "AutoPause"))
257     AutoPause = !strcmp(value, "TRUE");
258     else if (!strcmp(keyword, "PrefsAtStartup"))
259     PrefsAtStartup = !strcmp(value, "TRUE");
260     else if (!strcmp(keyword, "SystemMemory"))
261     SystemMemory = !strcmp(value, "TRUE");
262     else if (!strcmp(keyword, "AlwaysCopy"))
263     AlwaysCopy = !strcmp(value, "TRUE");
264     else if (!strcmp(keyword, "SystemKeys"))
265     SystemKeys = !strcmp(value, "TRUE");
266     else if (!strcmp(keyword, "ShowLEDs"))
267     ShowLEDs = !strcmp(value, "TRUE");
268     }
269     }
270     fclose(file);
271     }
272     Check();
273     ThePrefsOnDisk = *this;
274     }
275    
276    
277     /*
278     * Save preferences to file
279     * true: success, false: error
280     */
281    
282     bool Prefs::Save(char *filename)
283     {
284     FILE *file;
285    
286     Check();
287     if ((file = fopen(filename, "w")) != NULL) {
288     fprintf(file, "NormalCycles = %d\n", NormalCycles);
289     fprintf(file, "BadLineCycles = %d\n", BadLineCycles);
290     fprintf(file, "CIACycles = %d\n", CIACycles);
291     fprintf(file, "FloppyCycles = %d\n", FloppyCycles);
292     fprintf(file, "SkipFrames = %d\n", SkipFrames);
293     fprintf(file, "LatencyMin = %d\n", LatencyMin);
294     fprintf(file, "LatencyMax = %d\n", LatencyMax);
295     fprintf(file, "LatencyAvg = %d\n", LatencyAvg);
296     fprintf(file, "ScalingNumerator = %d\n", ScalingNumerator);
297     fprintf(file, "ScalingDenominator = %d\n", ScalingDenominator);
298 cebix 1.7 for (int i=0; i<4; i++)
299 cebix 1.1 fprintf(file, "DrivePath%d = %s\n", i+8, DrivePath[i]);
300     fprintf(file, "ViewPort = %s\n", ViewPort);
301     fprintf(file, "DisplayMode = %s\n", DisplayMode);
302     fprintf(file, "SIDType = ");
303     switch (SIDType) {
304     case SIDTYPE_NONE:
305     fprintf(file, "NONE\n");
306     break;
307     case SIDTYPE_DIGITAL:
308     fprintf(file, "DIGITAL\n");
309     break;
310     case SIDTYPE_SIDCARD:
311     fprintf(file, "SIDCARD\n");
312     break;
313     }
314     fprintf(file, "REUSize = ");
315     switch (REUSize) {
316     case REU_NONE:
317     fprintf(file, "NONE\n");
318     break;
319     case REU_128K:
320     fprintf(file, "128K\n");
321     break;
322     case REU_256K:
323     fprintf(file, "256K\n");
324     break;
325     case REU_512K:
326     fprintf(file, "512K\n");
327     break;
328     };
329     fprintf(file, "DisplayType = %s\n", DisplayType == DISPTYPE_WINDOW ? "WINDOW" : "SCREEN");
330 cebix 1.3 fprintf(file, "Joystick1Port = %d\n", Joystick1Port);
331     fprintf(file, "Joystick2Port = %d\n", Joystick2Port);
332 cebix 1.1 fprintf(file, "SpritesOn = %s\n", SpritesOn ? "TRUE" : "FALSE");
333     fprintf(file, "SpriteCollisions = %s\n", SpriteCollisions ? "TRUE" : "FALSE");
334     fprintf(file, "JoystickSwap = %s\n", JoystickSwap ? "TRUE" : "FALSE");
335     fprintf(file, "LimitSpeed = %s\n", LimitSpeed ? "TRUE" : "FALSE");
336     fprintf(file, "FastReset = %s\n", FastReset ? "TRUE" : "FALSE");
337     fprintf(file, "CIAIRQHack = %s\n", CIAIRQHack ? "TRUE" : "FALSE");
338     fprintf(file, "MapSlash = %s\n", MapSlash ? "TRUE" : "FALSE");
339     fprintf(file, "Emul1541Proc = %s\n", Emul1541Proc ? "TRUE" : "FALSE");
340     fprintf(file, "SIDFilters = %s\n", SIDFilters ? "TRUE" : "FALSE");
341     fprintf(file, "DoubleScan = %s\n", DoubleScan ? "TRUE" : "FALSE");
342     fprintf(file, "HideCursor = %s\n", HideCursor ? "TRUE" : "FALSE");
343     fprintf(file, "DirectSound = %s\n", DirectSound ? "TRUE" : "FALSE");
344     fprintf(file, "ExclusiveSound = %s\n", ExclusiveSound ? "TRUE" : "FALSE");
345     fprintf(file, "AutoPause = %s\n", AutoPause ? "TRUE" : "FALSE");
346     fprintf(file, "PrefsAtStartup = %s\n", PrefsAtStartup ? "TRUE" : "FALSE");
347     fprintf(file, "SystemMemory = %s\n", SystemMemory ? "TRUE" : "FALSE");
348     fprintf(file, "AlwaysCopy = %s\n", AlwaysCopy ? "TRUE" : "FALSE");
349     fprintf(file, "SystemKeys = %s\n", SystemKeys ? "TRUE" : "FALSE");
350     fprintf(file, "ShowLEDs = %s\n", ShowLEDs ? "TRUE" : "FALSE");
351     fclose(file);
352     ThePrefsOnDisk = *this;
353     return true;
354     }
355     return false;
356     }
357    
358    
359     #ifdef __BEOS__
360     #include "Prefs_Be.h"
361     #endif
362    
363     #ifdef AMIGA
364     #include "Prefs_Amiga.h"
365     #endif
366    
367     #ifdef WIN32
368     #include "Prefs_WIN32.h"
369     #endif
370 cebix 1.6
371     #ifdef HAVE_GLADE
372     #include "Prefs_glade.h"
373     #endif