|
|
1.1 root 1: /*
2: Hatari - dialog.c
3:
4: This file is distributed under the GNU Public License, version 2 or at
5: your option any later version. Read the file gpl.txt for details.
6:
7: Code to handle our options dialog.
8: */
9: const char Dialog_fileid[] = "Hatari dialog.c : " __DATE__ " " __TIME__;
10:
11: #include "main.h"
12: #include "configuration.h"
13: #include "change.h"
14: #include "dialog.h"
15: #include "log.h"
16: #include "sdlgui.h"
17: #include "screen.h"
1.1.1.4 root 18: #include "paths.h"
1.1.1.3 root 19: #include "file.h"
1.1 root 20:
21:
22: /*-----------------------------------------------------------------------*/
23: /**
24: * Open Property sheet Options dialog.
25: *
26: * We keep all our configuration details in a structure called
27: * 'ConfigureParams'. When we open our dialog we make a backup
28: * of this structure. When the user finally clicks on 'OK',
29: * we can compare and makes the necessary changes.
30: *
31: * Return true if user chooses OK, or false if cancel!
32: */
33: bool Dialog_DoProperty(void)
34: {
35: bool bOKDialog; /* Did user 'OK' dialog? */
36: bool bForceReset;
37: bool bLoadedSnapshot;
38: CNF_PARAMS current;
39:
40: Main_PauseEmulation(true);
41: bForceReset = false;
42:
43: /* Copy details (this is so can restore if 'Cancel' dialog) */
44: current = ConfigureParams;
45: ConfigureParams.Screen.bFullScreen = bInFullScreen;
46: bOKDialog = Dialog_MainDlg(&bForceReset, &bLoadedSnapshot);
47:
48: /* If a memory snapshot has been loaded, no further changes are required */
49: if (bLoadedSnapshot)
50: {
51: Main_UnPauseEmulation();
52: return true;
53: }
54:
55: /* Check if reset is required and ask user if he really wants to continue then */
56: if (bOKDialog && !bForceReset
57: && Change_DoNeedReset(¤t, &ConfigureParams)
1.1.1.2 root 58: && ConfigureParams.Log.nAlertDlgLogLevel > LOG_FATAL) {
1.1 root 59: bOKDialog = DlgAlert_Query("The emulated system must be "
60: "reset to apply these changes. "
61: "Apply changes now and reset "
62: "the emulator?");
63: }
64:
65: /* Copy details to configuration */
66: if (bOKDialog) {
67: Change_CopyChangedParamsToConfiguration(¤t, &ConfigureParams, bForceReset);
68: } else {
69: ConfigureParams = current;
70: }
71:
72: Main_UnPauseEmulation();
1.1.1.3 root 73:
1.1 root 74: if (bQuitProgram)
75: Main_RequestQuit();
1.1.1.3 root 76:
1.1 root 77: return bOKDialog;
78: }
1.1.1.3 root 79:
80:
81: /* Function to check if all necessary files exist. If loading of a file fails, we bring up a dialog to let the
82: * user choose another file. This is repeated for each missing file.
83: */
84:
85: void Dialog_CheckFiles(void) {
1.1.1.4 root 86: int i;
87:
1.1.1.5 root 88: char *szMissingFile = strdup("");
1.1.1.4 root 89: char szDefault[FILENAME_MAX];
90: char szMachine[64];
91: bool bEnable = false;
92:
1.1.1.3 root 93: /* Check if ROM file exists. If it is missing present a dialog to select a new ROM file. */
94: switch (ConfigureParams.System.nMachineType) {
95: case NEXT_CUBE030:
1.1.1.4 root 96: szMissingFile = ConfigureParams.Rom.szRom030FileName;
97: sprintf(szMachine, "NeXT Computer");
98: sprintf(szDefault, "%s%cRev_1.0_v41.BIN", Paths_GetWorkingDir(), PATHSEP);
1.1.1.3 root 99: break;
100: case NEXT_CUBE040:
101: case NEXT_STATION:
102: if (ConfigureParams.System.bTurbo) {
1.1.1.4 root 103: szMissingFile = ConfigureParams.Rom.szRomTurboFileName;
104: sprintf(szMachine, "%s Turbo %s",
105: (ConfigureParams.System.nMachineType==NEXT_CUBE040)?"NeXTcube":"NeXTstation",
106: (ConfigureParams.System.bColor)?"Color":"");
107: sprintf(szDefault, "%s%cRev_3.3_v74.BIN", Paths_GetWorkingDir(), PATHSEP);
1.1.1.3 root 108: } else {
1.1.1.4 root 109: szMissingFile = ConfigureParams.Rom.szRom040FileName;
110: sprintf(szMachine, "%s %s",
111: (ConfigureParams.System.nMachineType==NEXT_CUBE040)?"NeXTcube":"NeXTstation",
112: (ConfigureParams.System.bColor)?"Color":"");
113: sprintf(szDefault, "%s%cRev_2.5_v66.BIN", Paths_GetWorkingDir(), PATHSEP);
1.1.1.3 root 114: }
115: break;
116:
117: default:
118: break;
119: }
1.1.1.4 root 120: while (!File_Exists(szMissingFile)) {
121: DlgMissing_Rom(szMachine, szMissingFile, szDefault, &bEnable);
122: if (bQuitProgram) {
123: Main_RequestQuit();
124: if (bQuitProgram)
125: return;
126: }
127: }
1.1.1.6 ! root 128: for (i = 0; i < ND_MAX_BOARDS; i++) {
! 129: while (ConfigureParams.Dimension.board[i].bEnabled && !File_Exists(ConfigureParams.Dimension.board[i].szRomFileName)) {
! 130: sprintf(szMachine, "NeXTdimension at slot %i", i*2+2);
! 131: sprintf(szDefault, "%s%cdimension_eeprom.bin", Paths_GetWorkingDir(), PATHSEP);
! 132: DlgMissing_Rom(szMachine, ConfigureParams.Dimension.board[i].szRomFileName,
! 133: szDefault, &ConfigureParams.Dimension.board[i].bEnabled);
! 134: if (bQuitProgram) {
! 135: Main_RequestQuit();
! 136: if (bQuitProgram)
! 137: return;
! 138: }
1.1.1.4 root 139: }
140: }
1.1.1.3 root 141:
142: /* Check if SCSI disk images exist. Present a dialog to select missing files. */
1.1.1.4 root 143: for (i = 0; i < ESP_MAX_DEVS; i++) {
144: while ((ConfigureParams.SCSI.target[i].nDeviceType!=DEVTYPE_NONE) &&
145: ConfigureParams.SCSI.target[i].bDiskInserted &&
146: !File_Exists(ConfigureParams.SCSI.target[i].szImageName)) {
147: DlgMissing_Disk("SCSI disk", i,
148: ConfigureParams.SCSI.target[i].szImageName,
149: &ConfigureParams.SCSI.target[i].bDiskInserted,
150: &ConfigureParams.SCSI.target[i].bWriteProtected);
151: if (ConfigureParams.SCSI.target[i].nDeviceType==DEVTYPE_HARDDISK &&
152: !ConfigureParams.SCSI.target[i].bDiskInserted) {
153: ConfigureParams.SCSI.target[i].nDeviceType=DEVTYPE_NONE;
154: }
1.1.1.3 root 155: if (bQuitProgram) {
156: Main_RequestQuit();
157: if (bQuitProgram)
1.1.1.4 root 158: return;
1.1.1.3 root 159: }
160: }
161: }
162:
1.1.1.4 root 163: /* Check if MO disk images exist. Present a dialog to select missing files. */
164: for (i = 0; i < MO_MAX_DRIVES; i++) {
165: while (ConfigureParams.MO.drive[i].bDriveConnected &&
166: ConfigureParams.MO.drive[i].bDiskInserted &&
167: !File_Exists(ConfigureParams.MO.drive[i].szImageName)) {
168: DlgMissing_Disk("MO disk", i,
169: ConfigureParams.MO.drive[i].szImageName,
170: &ConfigureParams.MO.drive[i].bDiskInserted,
171: &ConfigureParams.MO.drive[i].bWriteProtected);
172: if (bQuitProgram) {
173: Main_RequestQuit();
174: if (bQuitProgram)
175: return;
176: }
177: }
178: }
179:
180: /* Check if Floppy disk images exist. Present a dialog to select missing files. */
181: for (i = 0; i < FLP_MAX_DRIVES; i++) {
182: while (ConfigureParams.Floppy.drive[i].bDriveConnected &&
183: ConfigureParams.Floppy.drive[i].bDiskInserted &&
184: !File_Exists(ConfigureParams.Floppy.drive[i].szImageName)) {
185: DlgMissing_Disk("Floppy", i,
186: ConfigureParams.Floppy.drive[i].szImageName,
187: &ConfigureParams.Floppy.drive[i].bDiskInserted,
188: &ConfigureParams.Floppy.drive[i].bWriteProtected);
189: if (bQuitProgram) {
190: Main_RequestQuit();
191: if (bQuitProgram)
192: return;
193: }
194: }
195: }
1.1.1.3 root 196: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.