2
* uidrivec128.c - Implementation of the drive settings dialog box.
5
* Andreas Boose <viceteam@t-online.de>
6
* Ettore Perazzoli <ettore@comm2000.it>
7
* Tibor Biczo <crown@axelero.hu>
9
* This file is part of VICE, the Versatile Commodore Emulator.
10
* See README for copyright notice.
12
* This program is free software; you can redistribute it and/or modify
13
* it under the terms of the GNU General Public License as published by
14
* the Free Software Foundation; either version 2 of the License, or
15
* (at your option) any later version.
17
* This program is distributed in the hope that it will be useful,
18
* but WITHOUT ANY WARRANTY; without even the implied warranty of
19
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
* GNU General Public License for more details.
22
* You should have received a copy of the GNU General Public License
23
* along with this program; if not, write to the Free Software
24
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
35
#ifndef DUMMYUNIONNAME
36
#define DUMMYUNIONNAME u1
41
#include "resources.h"
43
#include "uidrivec128.h"
47
static void enable_controls_for_drive_settings(HWND hwnd, int type)
52
case IDC_SELECT_DRIVE_TYPE_1541:
53
drive_type = DRIVE_TYPE_1541;
55
case IDC_SELECT_DRIVE_TYPE_1541II:
56
drive_type = DRIVE_TYPE_1541II;
58
case IDC_SELECT_DRIVE_TYPE_1570:
59
drive_type = DRIVE_TYPE_1570;
61
case IDC_SELECT_DRIVE_TYPE_1571:
62
drive_type = DRIVE_TYPE_1571;
64
case IDC_SELECT_DRIVE_TYPE_1571cr:
65
drive_type = DRIVE_TYPE_1571CR;
67
case IDC_SELECT_DRIVE_TYPE_1581:
68
drive_type = DRIVE_TYPE_1581;
70
case IDC_SELECT_DRIVE_TYPE_2031:
71
drive_type = DRIVE_TYPE_2031;
73
case IDC_SELECT_DRIVE_TYPE_2040:
74
drive_type = DRIVE_TYPE_2040;
76
case IDC_SELECT_DRIVE_TYPE_3040:
77
drive_type = DRIVE_TYPE_3040;
79
case IDC_SELECT_DRIVE_TYPE_4040:
80
drive_type = DRIVE_TYPE_4040;
82
case IDC_SELECT_DRIVE_TYPE_1001:
83
drive_type = DRIVE_TYPE_1001;
85
case IDC_SELECT_DRIVE_TYPE_8050:
86
drive_type = DRIVE_TYPE_8050;
88
case IDC_SELECT_DRIVE_TYPE_8250:
89
drive_type = DRIVE_TYPE_8250;
93
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_EXTEND_NEVER),
94
drive_check_extend_policy(drive_type));
95
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_EXTEND_ASK),
96
drive_check_extend_policy(drive_type));
97
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_EXTEND_ACCESS),
98
drive_check_extend_policy(drive_type));
99
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_IDLE_NO_IDLE),
100
drive_check_idle_method(drive_type));
101
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_IDLE_TRAP_IDLE),
102
drive_check_idle_method(drive_type));
103
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_IDLE_SKIP_CYCLES),
104
drive_check_idle_method(drive_type));
106
EnableWindow(GetDlgItem(hwnd, IDC_TOGGLE_DRIVE_PARALLEL_CABLE),
107
drive_check_parallel_cable(drive_type));
109
EnableWindow(GetDlgItem(hwnd, IDC_TOGGLE_DRIVE_EXPANSION_2000),
110
DRIVE_EXPANSION_2000(drive_type));
111
EnableWindow(GetDlgItem(hwnd, IDC_TOGGLE_DRIVE_EXPANSION_4000),
112
DRIVE_EXPANSION_4000(drive_type));
113
EnableWindow(GetDlgItem(hwnd, IDC_TOGGLE_DRIVE_EXPANSION_6000),
114
DRIVE_EXPANSION_6000(drive_type));
115
EnableWindow(GetDlgItem(hwnd, IDC_TOGGLE_DRIVE_EXPANSION_8000),
116
DRIVE_EXPANSION_8000(drive_type));
117
EnableWindow(GetDlgItem(hwnd, IDC_TOGGLE_DRIVE_EXPANSION_A000),
118
DRIVE_EXPANSION_A000(drive_type));
121
static void init_dialog(HWND hwnd, int num)
123
int drive_type, drive_extend_image_policy, drive_idle_method, n;
124
int drive_true_emulation, iecdevice, enabled;
126
resources_get_sprintf("IECDevice%i", (void *)&iecdevice, num);
127
resources_get_value("DriveTrueEmulation", (void *)&drive_true_emulation);
128
enabled = drive_true_emulation && !iecdevice;
130
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_TYPE_1541),
131
enabled && drive_check_type(DRIVE_TYPE_1541, num - 8));
132
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_TYPE_1541II),
133
enabled && drive_check_type(DRIVE_TYPE_1541II, num - 8));
134
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_TYPE_1570),
135
enabled && drive_check_type(DRIVE_TYPE_1570, num - 8));
136
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_TYPE_1571),
137
enabled && drive_check_type(DRIVE_TYPE_1571, num - 8));
138
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_TYPE_1571cr),
139
enabled && drive_check_type(DRIVE_TYPE_1571CR, num - 8));
140
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_TYPE_1581),
141
enabled && drive_check_type(DRIVE_TYPE_1581, num - 8));
142
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_TYPE_2031),
143
enabled && drive_check_type(DRIVE_TYPE_2031, num - 8));
144
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_TYPE_2040),
145
enabled && drive_check_type(DRIVE_TYPE_2040, num - 8));
146
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_TYPE_3040),
147
enabled && drive_check_type(DRIVE_TYPE_3040, num - 8));
148
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_TYPE_4040),
149
enabled && drive_check_type(DRIVE_TYPE_4040, num - 8));
150
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_TYPE_1001),
151
enabled && drive_check_type(DRIVE_TYPE_1001, num - 8));
152
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_TYPE_8050),
153
enabled && drive_check_type(DRIVE_TYPE_8050, num - 8));
154
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_TYPE_8250),
155
enabled && drive_check_type(DRIVE_TYPE_8250, num - 8));
156
EnableWindow(GetDlgItem(hwnd, IDC_SELECT_DRIVE_TYPE_NONE),
159
resources_get_sprintf("Drive%dType",
160
(void *)&drive_type, num);
161
resources_get_sprintf("Drive%dExtendImagePolicy",
162
(void *)&drive_extend_image_policy, num);
163
resources_get_sprintf("Drive%dIdleMethod",
164
(void *)&drive_idle_method, num);
166
switch (drive_type) {
167
case DRIVE_TYPE_NONE:
168
n = IDC_SELECT_DRIVE_TYPE_NONE;
170
case DRIVE_TYPE_1541:
171
n = IDC_SELECT_DRIVE_TYPE_1541;
173
case DRIVE_TYPE_1541II:
174
n = IDC_SELECT_DRIVE_TYPE_1541II;
176
case DRIVE_TYPE_1570:
177
n = IDC_SELECT_DRIVE_TYPE_1570;
179
case DRIVE_TYPE_1571:
180
n = IDC_SELECT_DRIVE_TYPE_1571;
182
case DRIVE_TYPE_1571CR:
183
n = IDC_SELECT_DRIVE_TYPE_1571cr;
185
case DRIVE_TYPE_1581:
186
n = IDC_SELECT_DRIVE_TYPE_1581;
188
case DRIVE_TYPE_2031:
189
n = IDC_SELECT_DRIVE_TYPE_2031;
191
case DRIVE_TYPE_2040:
192
n = IDC_SELECT_DRIVE_TYPE_2040;
194
case DRIVE_TYPE_3040:
195
n = IDC_SELECT_DRIVE_TYPE_3040;
197
case DRIVE_TYPE_4040:
198
n = IDC_SELECT_DRIVE_TYPE_4040;
200
case DRIVE_TYPE_1001:
201
n = IDC_SELECT_DRIVE_TYPE_1001;
203
case DRIVE_TYPE_8050:
204
n = IDC_SELECT_DRIVE_TYPE_8050;
206
case DRIVE_TYPE_8250:
207
n = IDC_SELECT_DRIVE_TYPE_8250;
212
n = IDC_SELECT_DRIVE_TYPE_NONE;
214
CheckRadioButton(hwnd, IDC_SELECT_DRIVE_TYPE_1541,
215
IDC_SELECT_DRIVE_TYPE_NONE, n);
217
enable_controls_for_drive_settings(hwnd, n);
219
switch (drive_extend_image_policy) {
220
case DRIVE_EXTEND_NEVER:
221
n = IDC_SELECT_DRIVE_EXTEND_NEVER;
223
case DRIVE_EXTEND_ASK:
224
n = IDC_SELECT_DRIVE_EXTEND_ASK;
226
case DRIVE_EXTEND_ACCESS:
227
n = IDC_SELECT_DRIVE_EXTEND_ACCESS;
231
CheckRadioButton(hwnd, IDC_SELECT_DRIVE_EXTEND_NEVER,
232
IDC_SELECT_DRIVE_EXTEND_ACCESS, n);
234
switch (drive_idle_method) {
235
case DRIVE_IDLE_NO_IDLE:
236
n = IDC_SELECT_DRIVE_IDLE_NO_IDLE;
238
case DRIVE_IDLE_TRAP_IDLE:
239
n = IDC_SELECT_DRIVE_IDLE_TRAP_IDLE;
241
case DRIVE_IDLE_SKIP_CYCLES:
242
n = IDC_SELECT_DRIVE_IDLE_SKIP_CYCLES;
246
CheckRadioButton(hwnd, IDC_SELECT_DRIVE_IDLE_NO_IDLE,
247
IDC_SELECT_DRIVE_IDLE_SKIP_CYCLES, n);
249
resources_get_sprintf("Drive%dParallelCable", (void *)&n, num);
250
CheckDlgButton(hwnd, IDC_TOGGLE_DRIVE_PARALLEL_CABLE, n
251
? BST_CHECKED : BST_UNCHECKED);
253
resources_get_sprintf("Drive%dRAM2000", (void *)&n, num);
254
CheckDlgButton(hwnd, IDC_TOGGLE_DRIVE_EXPANSION_2000, n
255
? BST_CHECKED : BST_UNCHECKED);
257
resources_get_sprintf("Drive%dRAM4000", (void *)&n, num);
258
CheckDlgButton(hwnd, IDC_TOGGLE_DRIVE_EXPANSION_4000, n
259
? BST_CHECKED : BST_UNCHECKED);
261
resources_get_sprintf("Drive%dRAM6000", (void *)&n, num);
262
CheckDlgButton(hwnd, IDC_TOGGLE_DRIVE_EXPANSION_6000, n
263
? BST_CHECKED : BST_UNCHECKED);
265
resources_get_sprintf("Drive%dRAM8000", (void *)&n, num);
266
CheckDlgButton(hwnd, IDC_TOGGLE_DRIVE_EXPANSION_8000, n
267
? BST_CHECKED : BST_UNCHECKED);
269
resources_get_sprintf("Drive%dRAMA000", (void *)&n, num);
270
CheckDlgButton(hwnd, IDC_TOGGLE_DRIVE_EXPANSION_A000, n
271
? BST_CHECKED : BST_UNCHECKED);
274
static BOOL CALLBACK dialog_proc(int num, HWND hwnd, UINT msg,
275
WPARAM wparam, LPARAM lparam)
282
init_dialog(hwnd, num);
285
switch (LOWORD(wparam)) {
286
case IDC_SELECT_DRIVE_TYPE_NONE:
287
resources_set_sprintf("Drive%dType",
288
(resource_value_t *)DRIVE_TYPE_NONE, num);
289
enable_controls_for_drive_settings(hwnd, LOWORD(wparam));
291
case IDC_SELECT_DRIVE_TYPE_1541:
292
resources_set_sprintf("Drive%dType",
293
(resource_value_t *)DRIVE_TYPE_1541, num);
294
enable_controls_for_drive_settings(hwnd, LOWORD(wparam));
296
case IDC_SELECT_DRIVE_TYPE_1541II:
297
resources_set_sprintf("Drive%dType",
298
(resource_value_t *)DRIVE_TYPE_1541II, num);
299
enable_controls_for_drive_settings(hwnd, LOWORD(wparam));
301
case IDC_SELECT_DRIVE_TYPE_1570:
302
resources_set_sprintf("Drive%dType",
303
(resource_value_t *)DRIVE_TYPE_1570, num);
304
enable_controls_for_drive_settings(hwnd, LOWORD(wparam));
306
case IDC_SELECT_DRIVE_TYPE_1571:
307
resources_set_sprintf("Drive%dType",
308
(resource_value_t *)DRIVE_TYPE_1571, num);
309
enable_controls_for_drive_settings(hwnd, LOWORD(wparam));
311
case IDC_SELECT_DRIVE_TYPE_1571cr:
312
resources_set_sprintf("Drive%dType",
313
(resource_value_t *)DRIVE_TYPE_1571CR, num);
314
enable_controls_for_drive_settings(hwnd, LOWORD(wparam));
316
case IDC_SELECT_DRIVE_TYPE_1581:
317
resources_set_sprintf("Drive%dType",
318
(resource_value_t *)DRIVE_TYPE_1581, num);
319
enable_controls_for_drive_settings(hwnd, LOWORD(wparam));
321
case IDC_SELECT_DRIVE_TYPE_2031:
322
resources_set_sprintf("Drive%dType",
323
(resource_value_t *)DRIVE_TYPE_2031, num);
324
enable_controls_for_drive_settings(hwnd, LOWORD(wparam));
326
case IDC_SELECT_DRIVE_TYPE_2040:
327
resources_set_sprintf("Drive%dType",
328
(resource_value_t *)DRIVE_TYPE_2040, num);
329
enable_controls_for_drive_settings(hwnd, LOWORD(wparam));
331
case IDC_SELECT_DRIVE_TYPE_3040:
332
resources_set_sprintf("Drive%dType",
333
(resource_value_t *)DRIVE_TYPE_3040, num);
334
enable_controls_for_drive_settings(hwnd, LOWORD(wparam));
336
case IDC_SELECT_DRIVE_TYPE_4040:
337
resources_set_sprintf("Drive%dType",
338
(resource_value_t *)DRIVE_TYPE_4040, num);
339
enable_controls_for_drive_settings(hwnd, LOWORD(wparam));
341
case IDC_SELECT_DRIVE_TYPE_1001:
342
resources_set_sprintf("Drive%dType",
343
(resource_value_t *)DRIVE_TYPE_1001, num);
344
enable_controls_for_drive_settings(hwnd, LOWORD(wparam));
346
case IDC_SELECT_DRIVE_TYPE_8050:
347
resources_set_sprintf("Drive%dType",
348
(resource_value_t *)DRIVE_TYPE_8050, num);
349
enable_controls_for_drive_settings(hwnd, LOWORD(wparam));
351
case IDC_SELECT_DRIVE_TYPE_8250:
352
resources_set_sprintf("Drive%dType",
353
(resource_value_t *)DRIVE_TYPE_8250, num);
354
enable_controls_for_drive_settings(hwnd, LOWORD(wparam));
356
case IDC_SELECT_DRIVE_EXTEND_NEVER:
357
resources_set_sprintf("Drive%dExtendImagePolicy",
358
(resource_value_t *)DRIVE_EXTEND_NEVER, num);
360
case IDC_SELECT_DRIVE_EXTEND_ASK:
361
resources_set_sprintf("Drive%dExtendImagePolicy",
362
(resource_value_t *)DRIVE_EXTEND_ASK, num);
364
case IDC_SELECT_DRIVE_EXTEND_ACCESS:
365
resources_set_sprintf("Drive%dExtendImagePolicy",
366
(resource_value_t *)DRIVE_EXTEND_ACCESS, num);
368
case IDC_SELECT_DRIVE_IDLE_NO_IDLE:
369
resources_set_sprintf("Drive%dIdleMethod",
370
(resource_value_t *)DRIVE_IDLE_NO_IDLE,
373
case IDC_SELECT_DRIVE_IDLE_TRAP_IDLE:
374
resources_set_sprintf("Drive%dIdleMethod",
375
(resource_value_t *)DRIVE_IDLE_TRAP_IDLE,
378
case IDC_SELECT_DRIVE_IDLE_SKIP_CYCLES:
379
resources_set_sprintf("Drive%dIdleMethod",
380
(resource_value_t *)DRIVE_IDLE_SKIP_CYCLES,
383
case IDC_TOGGLE_DRIVE_PARALLEL_CABLE:
384
sprintf(tmp, "Drive%dParallelCable", num);
385
resources_get_value(tmp, (void *)&n);
386
resources_set_value(tmp, (resource_value_t)!n);
388
case IDC_TOGGLE_DRIVE_EXPANSION_2000:
389
sprintf(tmp, "Drive%dRAM2000", num);
390
resources_get_value(tmp, (void *)&n);
391
resources_set_value(tmp, (resource_value_t)!n);
393
case IDC_TOGGLE_DRIVE_EXPANSION_4000:
394
sprintf(tmp, "Drive%dRAM4000", num);
395
resources_get_value(tmp, (void *)&n);
396
resources_set_value(tmp, (resource_value_t)!n);
398
case IDC_TOGGLE_DRIVE_EXPANSION_6000:
399
sprintf(tmp, "Drive%dRAM6000", num);
400
resources_get_value(tmp, (void *)&n);
401
resources_set_value(tmp, (resource_value_t)!n);
403
case IDC_TOGGLE_DRIVE_EXPANSION_8000:
404
sprintf(tmp, "Drive%dRAM8000", num);
405
resources_get_value(tmp, (void *)&n);
406
resources_set_value(tmp, (resource_value_t)!n);
408
case IDC_TOGGLE_DRIVE_EXPANSION_A000:
409
sprintf(tmp, "Drive%dRAMA000", num);
410
resources_get_value(tmp, (void *)&n);
411
resources_set_value(tmp, (resource_value_t)!n);
421
#define _CALLBACK(num) \
422
static BOOL CALLBACK callback_##num(HWND dialog, UINT msg, \
423
WPARAM wparam, LPARAM lparam) \
425
return dialog_proc(num, dialog, msg, wparam, lparam); \
433
void uidrivec128_settings_dialog(HWND hwnd)
435
PROPSHEETPAGE psp[4];
439
for (i = 0; i < 4; i++) {
440
psp[i].dwSize = sizeof(PROPSHEETPAGE);
441
psp[i].dwFlags = PSP_USETITLE /*| PSP_HASHELP*/ ;
442
psp[i].hInstance = winmain_instance;
443
#ifdef _ANONYMOUS_UNION
444
psp[i].pszTemplate = MAKEINTRESOURCE(IDD_DRIVE_SETTINGS_DIALOG_C128);
445
psp[i].pszIcon = NULL;
447
psp[i].DUMMYUNIONNAME.pszTemplate = MAKEINTRESOURCE(IDD_DRIVE_SETTINGS_DIALOG_C128);
448
psp[i].u2.pszIcon = NULL;
451
psp[i].pfnCallback = NULL;
454
psp[0].pfnDlgProc = callback_8;
455
psp[0].pszTitle = TEXT("Drive 8");
456
psp[1].pfnDlgProc = callback_9;
457
psp[1].pszTitle = TEXT("Drive 9");
458
psp[2].pfnDlgProc = callback_10;
459
psp[2].pszTitle = TEXT("Drive 10");
460
psp[3].pfnDlgProc = callback_11;
461
psp[3].pszTitle = TEXT("Drive 11");
463
psh.dwSize = sizeof(PROPSHEETHEADER);
464
psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW;
465
psh.hwndParent = hwnd;
466
psh.hInstance = winmain_instance;
467
psh.pszCaption = TEXT("Drive Settings");
469
#ifdef _ANONYMOUS_UNION
474
psh.DUMMYUNIONNAME.pszIcon = NULL;
475
psh.u2.nStartPage = 0;
478
psh.pfnCallback = NULL;
480
system_psh_settings(&psh);