~ubuntu-branches/ubuntu/trusty/vice/trusty-proposed

« back to all changes in this revision

Viewing changes to src/arch/unix/gui/vic20ui.c

  • Committer: Bazaar Package Importer
  • Author(s): Gerfried Fuchs
  • Date: 2008-10-16 20:28:53 UTC
  • mfrom: (1.2.1 upstream) (9.1.6 intrepid)
  • Revision ID: james.westby@ubuntu.com-20081016202853-vo9c1g9pd15wl7zu
Tags: 1.22.dfsg1-0.1
* NMU to fix release-critical bugs.
* Add data/PRINTER/mps803 to mangle-source.sh check, it's not a multiple of
  2048. Also fix the bashism in the script by replacing $[ ] with $(( )) in
  the calculation part.
* Mangled the source with above fixed script (closes: #442924, #501143)
* do delete -size 6c files and not -empty, they contain "dummy\n"
* Remove README.Debian entry about Xaw3d and Gnome because it's not valid
  anymore (closes: #501135)
* Remove the following Build-Depends as they aren't used because of no xaw3d
  build: xaw3dg-dev, libxaw7-dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * vic20ui.c - Implementation of the VIC20-specific part of the UI.
 
3
 *
 
4
 * Written by
 
5
 *  Ettore Perazzoli <ettore@comm2000.it>
 
6
 *  Andreas Boose <viceteam@t-online.de>
 
7
 *
 
8
 * This file is part of VICE, the Versatile Commodore Emulator.
 
9
 * See README for copyright notice.
 
10
 *
 
11
 *  This program is free software; you can redistribute it and/or modify
 
12
 *  it under the terms of the GNU General Public License as published by
 
13
 *  the Free Software Foundation; either version 2 of the License, or
 
14
 *  (at your option) any later version.
 
15
 *
 
16
 *  This program is distributed in the hope that it will be useful,
 
17
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
18
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
19
 *  GNU General Public License for more details.
 
20
 *
 
21
 *  You should have received a copy of the GNU General Public License
 
22
 *  along with this program; if not, write to the Free Software
 
23
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 
24
 *  02111-1307  USA.
 
25
 *
 
26
 */
 
27
 
 
28
#include "vice.h"
 
29
 
 
30
#include <stdio.h>
 
31
#include <stdlib.h>
 
32
#include <string.h>
 
33
 
 
34
#include "cartridge.h"
 
35
#include "debug.h"
 
36
#include "icon.h"
 
37
#include "joy.h"
 
38
#include "lib.h"
 
39
#include "machine-video.h"
 
40
#include "resources.h"
 
41
#include "uiattach.h"
 
42
#include "uicommands.h"
 
43
#include "uidatasette.h"
 
44
#include "uidrive.h"
 
45
#include "uidrivec64vic20.h"
 
46
#include "uidrivevic20.h"
 
47
#include "uikeyboard.h"
 
48
#include "uimenu.h"
 
49
#include "uiperipheraliec.h"
 
50
#include "uiromset.h"
 
51
#include "uirs232.h"
 
52
#include "uirs232user.h"
 
53
#include "uiscreenshot.h"
 
54
#include "uisettings.h"
 
55
#include "uisidcart.h"
 
56
#include "uisound.h"
 
57
#include "uivic.h"
 
58
#include "util.h"
 
59
#include "vsync.h"
 
60
 
 
61
 
 
62
enum {
 
63
    MEM_NONE,
 
64
    MEM_ALL,
 
65
    MEM_3K,
 
66
    MEM_8K,
 
67
    MEM_16K,
 
68
    MEM_24K
 
69
};
 
70
 
 
71
enum {
 
72
    BLOCK_0 = 1,
 
73
    BLOCK_1 = 1 << 1,
 
74
    BLOCK_2 = 1 << 2,
 
75
    BLOCK_3 = 1 << 3,
 
76
    BLOCK_5 = 1 << 5
 
77
};
 
78
 
 
79
static UI_CALLBACK(set_common_memory_configuration)
 
80
{
 
81
    int blocks;
 
82
 
 
83
    switch ((int) UI_MENU_CB_PARAM) {
 
84
      case MEM_NONE:
 
85
        blocks = 0;
 
86
        break;
 
87
      case MEM_ALL:
 
88
        blocks = BLOCK_0 | BLOCK_1 | BLOCK_2 | BLOCK_3 | BLOCK_5;
 
89
        break;
 
90
      case MEM_3K:
 
91
        blocks = BLOCK_0;
 
92
        break;
 
93
      case MEM_8K:
 
94
        blocks = BLOCK_1;
 
95
        break;
 
96
      case MEM_16K:
 
97
        blocks = BLOCK_1 | BLOCK_2;
 
98
        break;
 
99
      case MEM_24K:
 
100
        blocks = BLOCK_1 | BLOCK_2 | BLOCK_3;
 
101
        break;
 
102
      default:
 
103
        /* Shouldn't happen.  */
 
104
        fprintf(stderr, _("What?!\n"));
 
105
        blocks = 0;         /* Make compiler happy.  */
 
106
    }
 
107
    resources_set_int("RamBlock0", blocks & BLOCK_0 ? 1 : 0);
 
108
    resources_set_int("RamBlock1", blocks & BLOCK_1 ? 1 : 0);
 
109
    resources_set_int("RamBlock2", blocks & BLOCK_2 ? 1 : 0);
 
110
    resources_set_int("RamBlock3", blocks & BLOCK_3 ? 1 : 0);
 
111
    resources_set_int("RamBlock5", blocks & BLOCK_5 ? 1 : 0);
 
112
    ui_menu_update_all();
 
113
    vsync_suspend_speed_eval();
 
114
}
 
115
 
 
116
UI_MENU_DEFINE_TOGGLE(SidCart)
 
117
UI_MENU_DEFINE_TOGGLE(SidFilters)
 
118
 
 
119
UI_MENU_DEFINE_RADIO(SidAddress)
 
120
 
 
121
static ui_menu_entry_t sidcart_address_submenu[] = {
 
122
    { "*$9800",
 
123
      (ui_callback_t)radio_SidAddress, (ui_callback_data_t)0, NULL },
 
124
    { "*$9C00",
 
125
      (ui_callback_t)radio_SidAddress, (ui_callback_data_t)1, NULL },
 
126
    { NULL }
 
127
};
 
128
 
 
129
UI_MENU_DEFINE_RADIO(SidClock)
 
130
 
 
131
static ui_menu_entry_t sidcart_clock_submenu[] = {
 
132
    { "*C64", (ui_callback_t)radio_SidClock,
 
133
      (ui_callback_data_t)0, NULL },
 
134
    { "*VIC20", (ui_callback_t)radio_SidClock,
 
135
      (ui_callback_data_t)1, NULL },
 
136
    { NULL }
 
137
};
 
138
 
 
139
ui_menu_entry_t sidcart_submenu[] = {
 
140
    { N_("*Enable SID cart"),
 
141
      (ui_callback_t)toggle_SidCart, NULL, NULL },
 
142
    { N_("SID engine"),
 
143
      NULL, NULL, sidcart_engine_submenu },
 
144
    { N_("Chip model"),
 
145
      NULL, NULL, sidcart_model_submenu },
 
146
    { N_("*Emulate filters"),
 
147
      (ui_callback_t)toggle_SidFilters, NULL, NULL },
 
148
    { N_("SID address"),
 
149
      NULL, NULL, sidcart_address_submenu },
 
150
    { N_("SID clock"),
 
151
      NULL, NULL, sidcart_clock_submenu },
 
152
    { NULL }
 
153
};
 
154
 
 
155
static ui_menu_entry_t vic20ui_main_romset_submenu[] = {
 
156
    { N_("Load new Kernal ROM"),
 
157
      (ui_callback_t)ui_load_rom_file,
 
158
      (ui_callback_data_t)"KernalName", NULL },
 
159
    { N_("Load new Basic ROM"),
 
160
      (ui_callback_t)ui_load_rom_file,
 
161
      (ui_callback_data_t)"BasicName", NULL },
 
162
    { N_("Load new Character ROM"),
 
163
      (ui_callback_t)ui_load_rom_file,
 
164
      (ui_callback_data_t)"ChargenName", NULL },
 
165
    { NULL }
 
166
};
 
167
 
 
168
static ui_menu_entry_t vic20_romset_submenu[] = {
 
169
    { N_("Load default ROMs"),
 
170
      (ui_callback_t)ui_set_romset, (ui_callback_data_t)"default.vrs", NULL },
 
171
    { "--" },
 
172
    { N_("Load new computer ROM"),
 
173
      NULL, NULL, vic20ui_main_romset_submenu },
 
174
    { N_("Load new drive ROM"),
 
175
      NULL, NULL, ui_drivec64vic20_romset_submenu },
 
176
    { "--" },
 
177
    { N_("ROM set type"),
 
178
      NULL, NULL, uiromset_type_submenu },
 
179
    { "--" },
 
180
    { N_("ROM set archive"),
 
181
      NULL, NULL, uiromset_archive_submenu },
 
182
    { N_("ROM set file"),
 
183
      NULL, NULL, uiromset_file_submenu },
 
184
    { NULL }
 
185
};
 
186
 
 
187
static ui_menu_entry_t common_memory_configurations_submenu[] = {
 
188
    { N_("No expansion memory"),
 
189
      (ui_callback_t) set_common_memory_configuration, 
 
190
      (ui_callback_data_t)MEM_NONE, NULL },
 
191
    { "--" },
 
192
    { N_("3K (block 0)"),
 
193
      (ui_callback_t) set_common_memory_configuration, 
 
194
      (ui_callback_data_t)MEM_3K, NULL },
 
195
    { N_("8K (block 1)"),
 
196
      (ui_callback_t) set_common_memory_configuration, 
 
197
      (ui_callback_data_t)MEM_8K, NULL },
 
198
    { N_("16K (blocks 1/2)"),
 
199
      (ui_callback_t) set_common_memory_configuration, 
 
200
      (ui_callback_data_t)MEM_16K, NULL },
 
201
    { N_("24K (blocks 1/2/3)"),
 
202
      (ui_callback_t) set_common_memory_configuration, 
 
203
      (ui_callback_data_t)MEM_24K, NULL },
 
204
    { "--" },
 
205
    { N_("All (blocks 0/1/2/3/5)"),
 
206
      (ui_callback_t) set_common_memory_configuration, 
 
207
      (ui_callback_data_t)MEM_ALL, NULL },
 
208
    { NULL }
 
209
};
 
210
 
 
211
UI_MENU_DEFINE_TOGGLE(RAMBlock0)
 
212
UI_MENU_DEFINE_TOGGLE(RAMBlock1)
 
213
UI_MENU_DEFINE_TOGGLE(RAMBlock2)
 
214
UI_MENU_DEFINE_TOGGLE(RAMBlock3)
 
215
UI_MENU_DEFINE_TOGGLE(RAMBlock5)
 
216
 
 
217
UI_MENU_DEFINE_TOGGLE(EmuID)
 
218
 
 
219
static ui_menu_entry_t memory_settings_submenu[] = {
 
220
    { N_("Common configurations"),
 
221
      NULL, NULL, common_memory_configurations_submenu },
 
222
    { "--" },
 
223
    { N_("ROM sets"),
 
224
      NULL, NULL, vic20_romset_submenu },
 
225
    { "--" },
 
226
    { N_("*Block 0 (3K at $0400-$0FFF)"),
 
227
      (ui_callback_t)toggle_RAMBlock0, NULL, NULL },
 
228
    { N_("*Block 1 (8K at $2000-$3FFF)"),
 
229
      (ui_callback_t)toggle_RAMBlock1, NULL, NULL },
 
230
    { N_("*Block 2 (8K at $4000-$5FFF)"),
 
231
      (ui_callback_t)toggle_RAMBlock2, NULL, NULL },
 
232
    { N_("*Block 3 (8K at $6000-$7FFF)"),
 
233
      (ui_callback_t)toggle_RAMBlock3, NULL, NULL },
 
234
    { N_("*Block 5 (8K at $A000-$BFFF)"),
 
235
      (ui_callback_t)toggle_RAMBlock5, NULL, NULL },
 
236
    { "--" },
 
237
    { N_("*Emulator identification"),
 
238
      (ui_callback_t)toggle_EmuID, NULL, NULL },
 
239
    { NULL }
 
240
};
 
241
 
 
242
#if 0
 
243
static ui_menu_entry_t memory_settings_menu[] = {
 
244
    { N_("Memory expansions"),
 
245
      NULL, NULL, memory_settings_submenu },
 
246
    { NULL }
 
247
};
 
248
#endif
 
249
 
 
250
/* ------------------------------------------------------------------------- */
 
251
 
 
252
static UI_CALLBACK(attach_cartridge)
 
253
{
 
254
    int type = (int)UI_MENU_CB_PARAM;
 
255
    char *filename;
 
256
    ui_button_t button;
 
257
    static char *last_dir;
 
258
 
 
259
    vsync_suspend_speed_eval();
 
260
    filename = ui_select_file(_("Attach cartridge image"),
 
261
                              NULL, 0, False, last_dir, "*.prg", &button,
 
262
                              False, NULL);
 
263
    switch (button) {
 
264
      case UI_BUTTON_OK:
 
265
        if (cartridge_attach_image(type, filename) < 0)
 
266
            ui_error(_("Invalid cartridge image"));
 
267
        if (last_dir)
 
268
            lib_free(last_dir);
 
269
        util_fname_split(filename, &last_dir, NULL);
 
270
        ui_update_menus();
 
271
        break;
 
272
      default:
 
273
        /* Do nothing special.  */
 
274
        break;
 
275
    }
 
276
    if (filename != NULL)
 
277
        lib_free(filename);
 
278
}
 
279
 
 
280
static UI_CALLBACK(detach_cartridge)
 
281
{
 
282
    cartridge_detach_image();
 
283
}
 
284
 
 
285
static UI_CALLBACK(default_cartridge)
 
286
{
 
287
    cartridge_set_default();
 
288
}
 
289
 
 
290
static ui_menu_entry_t attach_cartridge_image_submenu[] = {
 
291
    { N_("Smart-attach cartridge image..."),
 
292
      (ui_callback_t)attach_cartridge,
 
293
      (ui_callback_data_t)CARTRIDGE_VIC20_DETECT, NULL,
 
294
      XK_c, UI_HOTMOD_META },
 
295
    { "--" },
 
296
    { N_("Attach 4/8/16KB image at $2000..."),
 
297
      (ui_callback_t)attach_cartridge,
 
298
      (ui_callback_data_t)CARTRIDGE_VIC20_16KB_2000, NULL },
 
299
    { N_("Attach 4/8/16KB image at $4000..."),
 
300
      (ui_callback_t)attach_cartridge,
 
301
      (ui_callback_data_t)CARTRIDGE_VIC20_16KB_4000, NULL },
 
302
    { N_("Attach 4/8/16KB image at $6000..."),
 
303
      (ui_callback_t)attach_cartridge,
 
304
      (ui_callback_data_t)CARTRIDGE_VIC20_16KB_6000, NULL },
 
305
    { N_("Attach 4/8KB image at $A000..."),
 
306
      (ui_callback_t)attach_cartridge,
 
307
      (ui_callback_data_t)CARTRIDGE_VIC20_8KB_A000, NULL },
 
308
    { N_("Attach 4KB image at $B000..."),
 
309
      (ui_callback_t)attach_cartridge,
 
310
      (ui_callback_data_t)CARTRIDGE_VIC20_4KB_B000, NULL },
 
311
    { "--" },
 
312
    { N_("Set cartridge as default"),
 
313
      (ui_callback_t)default_cartridge, NULL, NULL },
 
314
    { NULL }
 
315
};
 
316
 
 
317
static ui_menu_entry_t vic20_cartridge_commands_menu[] = {
 
318
    { N_("Attach a cartridge image"),
 
319
      NULL, NULL, attach_cartridge_image_submenu },
 
320
    { N_("Detach cartridge image(s)"),
 
321
      (ui_callback_t)detach_cartridge, NULL, NULL },
 
322
    { NULL }
 
323
};
 
324
 
 
325
 
 
326
/* ------------------------------------------------------------------------- */
 
327
 
 
328
static UI_CALLBACK(set_joystick_device)
 
329
{
 
330
    vsync_suspend_speed_eval();
 
331
    if (!CHECK_MENUS) {
 
332
        resources_set_int("JoyDevice1", (int)UI_MENU_CB_PARAM);
 
333
        ui_update_menus();
 
334
    } else {
 
335
        int tmp;
 
336
 
 
337
        resources_get_int("JoyDevice1", &tmp);
 
338
        ui_menu_set_tick(w, tmp == (int)UI_MENU_CB_PARAM);
 
339
    }
 
340
}
 
341
 
 
342
static ui_menu_entry_t set_joystick_device_1_submenu[] = {
 
343
    { N_("*None"),
 
344
      (ui_callback_t)set_joystick_device,
 
345
      (ui_callback_data_t)JOYDEV_NONE, NULL },
 
346
    { N_("*Numpad"),
 
347
      (ui_callback_t)set_joystick_device,
 
348
      (ui_callback_data_t)JOYDEV_NUMPAD, NULL },
 
349
    { N_("*Keyset 1"),
 
350
      (ui_callback_t)set_joystick_device,
 
351
      (ui_callback_data_t)JOYDEV_KEYSET1, NULL },
 
352
    { N_("*Keyset 2"),
 
353
      (ui_callback_t)set_joystick_device,
 
354
      (ui_callback_data_t)JOYDEV_KEYSET2, NULL },
 
355
#ifdef HAS_JOYSTICK
 
356
    { N_("*Analog Joystick 0"),
 
357
      (ui_callback_t)set_joystick_device,
 
358
      (ui_callback_data_t)JOYDEV_ANALOG_0, NULL },
 
359
    { N_("*Analog Joystick 1"),
 
360
      (ui_callback_t)set_joystick_device,
 
361
      (ui_callback_data_t)JOYDEV_ANALOG_1, NULL },
 
362
#ifdef HAS_DIGITAL_JOYSTICK
 
363
    { N_("*Digital Joystick 0"),
 
364
      (ui_callback_t)set_joystick_device,
 
365
      (ui_callback_data_t)JOYDEV_DIGITAL_0, NULL },
 
366
    { N_("*Digital Joystick 1"),
 
367
      (ui_callback_t)set_joystick_device,
 
368
      (ui_callback_data_t)JOYDEV_DIGITAL_1, NULL },
 
369
#endif
 
370
#ifdef HAS_USB_JOYSTICK
 
371
    { N_("*USB Joystick 0"),
 
372
      (ui_callback_t)set_joystick_device,
 
373
      (ui_callback_data_t)JOYDEV_USB_0, NULL },
 
374
    { N_("*USB Joystick 1"),
 
375
      (ui_callback_t)set_joystick_device,
 
376
      (ui_callback_data_t)JOYDEV_USB_1, NULL },
 
377
#endif
 
378
#endif
 
379
    { NULL }
 
380
};
 
381
 
 
382
static ui_menu_entry_t joystick_settings_menu[] = {
 
383
    { N_("Joystick settings"),
 
384
      NULL, NULL, set_joystick_device_1_submenu },
 
385
    { NULL }
 
386
};
 
387
 
 
388
/*------------------------------------------------------------*/
 
389
 
 
390
UI_MENU_DEFINE_TOGGLE(RsUserEnable)
 
391
 
 
392
static ui_menu_entry_t vic20_rs232_submenu[] = {
 
393
    { N_("*Userport RS232 emulation"),
 
394
      (ui_callback_t)toggle_RsUserEnable, NULL, NULL },
 
395
    { N_("Userport RS232 baud rate"),
 
396
      NULL, NULL, rs232user_baudrate_submenu },
 
397
    { N_("Userport RS232 device"),
 
398
      NULL, NULL, rs232user_device_submenu },
 
399
    { "--" },
 
400
    { N_("Serial 1 device..."), (ui_callback_t)set_rs232_device_file,
 
401
      (ui_callback_data_t)"RsDevice1", NULL },
 
402
    { N_("Serial 1 baudrate"),
 
403
      NULL, NULL, ser1_baud_submenu },
 
404
    { "--" },
 
405
    { N_("Serial 2 device..."), (ui_callback_t)set_rs232_device_file,
 
406
      (ui_callback_data_t)"RsDevice2", NULL },
 
407
    { N_("Serial 2 baudrate"),
 
408
      NULL, NULL, ser2_baud_submenu },
 
409
    { "--" },
 
410
    { N_("Dump filename..."), (ui_callback_t)set_rs232_dump_file,
 
411
      (ui_callback_data_t)"RsDevice3", NULL },
 
412
    { "--" },
 
413
    { N_("Program name to exec..."), (ui_callback_t)set_rs232_exec_file,
 
414
      (ui_callback_data_t)"RsDevice4", NULL },
 
415
    { NULL }
 
416
};
 
417
 
 
418
static ui_menu_entry_t rs232_settings_menu[] = {
 
419
    { N_("RS232 settings"),
 
420
      NULL, NULL, vic20_rs232_submenu },
 
421
    { NULL }
 
422
};
 
423
 
 
424
/*------------------------------------------------------------*/
 
425
 
 
426
/*
 
427
UI_MENU_DEFINE_TOGGLE(IEEE488)
 
428
 
 
429
static ui_menu_entry_t vic20_io_submenu[] = {
 
430
    { "*VIC-1112 IEEE 488 module",
 
431
      (ui_callback_t)toggle_IEEE488, NULL, NULL },
 
432
    { NULL }
 
433
};
 
434
 
 
435
static ui_menu_entry_t vic20_io_settings_menu[] = {
 
436
    { "I/O settings",
 
437
      NULL, NULL, vic20_io_submenu },
 
438
    { NULL }
 
439
};
 
440
*/
 
441
 
 
442
/*------------------------------------------------------------*/
 
443
 
 
444
static UI_CALLBACK(save_screenshot)
 
445
{
 
446
    /* Where does the 1024 come from?  */
 
447
    char filename[1024];
 
448
    unsigned int wid = (unsigned int)UI_MENU_CB_PARAM;
 
449
 
 
450
    vsync_suspend_speed_eval();
 
451
 
 
452
    /* The following code depends on a zeroed filename.  */
 
453
    memset(filename, 0, 1024);
 
454
 
 
455
    if (ui_screenshot_dialog(filename, machine_video_canvas_get(wid)) < 0)
 
456
        return;
 
457
}
 
458
 
 
459
static ui_menu_entry_t ui_screenshot_commands_menu[] = {
 
460
    { N_("Save media file"),
 
461
      (ui_callback_t)save_screenshot, (ui_callback_data_t)0, NULL },
 
462
    { NULL }
 
463
};
 
464
 
 
465
static ui_menu_entry_t vic20_menu[] = {
 
466
    { N_("VIC settings"),
 
467
      NULL, NULL, vic_submenu },
 
468
    { N_("Memory expansions"),
 
469
      NULL, NULL, memory_settings_submenu },
 
470
    { N_("SID cartridge settings"),
 
471
      NULL, NULL, sidcart_submenu },
 
472
    { NULL }
 
473
};
 
474
 
 
475
static ui_menu_entry_t vic20_left_menu[] = {
 
476
    { "",
 
477
      NULL, NULL, uiattach_disk_menu },
 
478
    { "--",
 
479
      NULL, NULL, uiattach_tape_menu },
 
480
    { "",
 
481
      NULL, NULL, ui_datasette_commands_menu },
 
482
    { "--",
 
483
      NULL, NULL, uiattach_smart_attach_menu },
 
484
    { "--",
 
485
      NULL, NULL, vic20_cartridge_commands_menu },
 
486
    { "--",
 
487
      NULL, NULL, ui_directory_commands_menu },
 
488
    { "--",
 
489
      NULL, NULL, ui_snapshot_commands_menu },
 
490
    { "",
 
491
      NULL, NULL, ui_screenshot_commands_menu },
 
492
    { "",
 
493
      NULL, NULL, ui_sound_record_commands_menu },
 
494
    { "--",
 
495
      NULL, NULL, ui_tool_commands_menu },
 
496
    { "--",
 
497
      NULL, NULL, ui_help_commands_menu },
 
498
    { "--",
 
499
      NULL, NULL, ui_run_commands_menu },
 
500
    { "--",
 
501
      NULL, NULL, ui_exit_commands_menu },
 
502
    { NULL }
 
503
};
 
504
 
 
505
static ui_menu_entry_t vic20_right_menu[] = {
 
506
    { "",
 
507
      NULL, NULL, ui_performance_settings_menu },
 
508
    { "--",
 
509
      NULL, NULL, uikeyboard_settings_menu },
 
510
    { "",
 
511
      NULL, NULL, ui_sound_settings_menu },
 
512
    { "",
 
513
      NULL, NULL, ui_drivevic20_settings_menu },
 
514
    { "",
 
515
      NULL, NULL, ui_peripheraliec_settings_menu },
 
516
/*
 
517
                                     vic20_io_settings_menu,
 
518
*/
 
519
    { "",
 
520
      NULL, NULL, joystick_settings_menu },
 
521
    { "",
 
522
      NULL, NULL, rs232_settings_menu },
 
523
    { "--",
 
524
      NULL, NULL, vic20_menu },
 
525
    { "--",
 
526
      NULL, NULL, ui_settings_settings_menu },
 
527
#ifdef DEBUG
 
528
    { "--",
 
529
      NULL, NULL, ui_debug_settings_menu },
 
530
#endif
 
531
    { NULL }
 
532
};
 
533
 
 
534
static ui_menu_entry_t vic20_tape_menu[] = {
 
535
    { "",
 
536
      NULL, NULL, uiattach_tape_menu },
 
537
    { "--",
 
538
      NULL, NULL, datasette_control_submenu },
 
539
    { NULL }
 
540
};
 
541
 
 
542
static ui_menu_entry_t vic20_file_menu[] = {
 
543
    { "",
 
544
      NULL, NULL, uiattach_smart_attach_menu },
 
545
    { "--",
 
546
      NULL, NULL, uiattach_disk_menu },
 
547
    { "--",
 
548
      NULL, NULL, uiattach_tape_menu },
 
549
    { "",
 
550
      NULL, NULL, ui_datasette_commands_menu },
 
551
    { "--",
 
552
      NULL, NULL, vic20_cartridge_commands_menu },
 
553
    { "--",
 
554
      NULL, NULL, ui_directory_commands_menu },
 
555
    { "--",
 
556
      NULL, NULL, ui_tool_commands_menu },
 
557
    { "--",
 
558
      NULL, NULL, ui_run_commands_menu },
 
559
    { "--",
 
560
      NULL, NULL, ui_exit_commands_menu },
 
561
    { NULL }
 
562
};
 
563
 
 
564
static ui_menu_entry_t vic20_snapshot_menu[] = {
 
565
    { "",
 
566
      NULL, NULL, ui_snapshot_commands_submenu },
 
567
    { "--",
 
568
      NULL, NULL, ui_screenshot_commands_menu },
 
569
    { "",
 
570
      NULL, NULL, ui_sound_record_commands_menu },
 
571
    { NULL }
 
572
};
 
573
 
 
574
static ui_menu_entry_t vic20_options_menu[] = {
 
575
    { "",
 
576
      NULL, NULL, ui_performance_settings_menu },
 
577
    { "--",
 
578
      NULL, NULL, ui_drive_options_submenu },
 
579
    { NULL }
 
580
};
 
581
 
 
582
static ui_menu_entry_t vic20_settings_menu[] = {
 
583
    { "",
 
584
      NULL, NULL, uikeyboard_settings_menu },
 
585
    { "",
 
586
      NULL, NULL, ui_sound_settings_menu },
 
587
    { "",
 
588
      NULL, NULL, ui_drivevic20_settings_menu },
 
589
    { "",
 
590
      NULL, NULL, ui_peripheraliec_settings_menu },
 
591
    { "",
 
592
      NULL, NULL, joystick_settings_menu },
 
593
    { "",
 
594
      NULL, NULL, rs232_settings_menu },
 
595
    { "--",
 
596
      NULL, NULL, vic20_menu },
 
597
    { "--",
 
598
      NULL, NULL, ui_settings_settings_menu },
 
599
    { NULL }
 
600
};
 
601
 
 
602
static ui_menu_entry_t vic20_top_menu[] = {
 
603
    { N_("File"),
 
604
      NULL, NULL, vic20_file_menu },
 
605
    { N_("Snapshot"),
 
606
      NULL, NULL, vic20_snapshot_menu },
 
607
    { N_("Options"),
 
608
      NULL, NULL, vic20_options_menu },
 
609
    { N_("Settings"),
 
610
      NULL, NULL, vic20_settings_menu },
 
611
                   /* Translators: RJ means right justify and should be
 
612
                      saved in your tranlation! e.g. german "RJHilfe" */
 
613
    { N_("RJHelp"),
 
614
      NULL, NULL, ui_help_commands_menu },
 
615
    { NULL }
 
616
};
 
617
 
 
618
static void vic20ui_dynamic_menu_create(void)
 
619
{
 
620
    uisound_menu_create();
 
621
    uivic_menu_create();
 
622
}
 
623
 
 
624
static void vic20ui_dynamic_menu_shutdown(void)
 
625
{
 
626
    uivic_menu_shutdown();
 
627
    uisound_menu_shutdown();
 
628
}
 
629
 
 
630
int vic20ui_init(void)
 
631
{
 
632
    ui_set_application_icon(vic20_icon_data);
 
633
    vic20ui_dynamic_menu_create();
 
634
    ui_set_left_menu(vic20_left_menu);
 
635
 
 
636
    ui_set_right_menu(vic20_right_menu);
 
637
 
 
638
    ui_set_tape_menu(vic20_tape_menu);
 
639
    ui_set_topmenu(vic20_top_menu);
 
640
    ui_set_speedmenu(ui_performance_settings_menu);
 
641
    ui_update_menus();
 
642
 
 
643
    return 0;
 
644
}
 
645
 
 
646
void vic20ui_shutdown(void)
 
647
{
 
648
    vic20ui_dynamic_menu_shutdown();
 
649
}
 
650