80
80
static UI_CALLBACK(load_save_fliplist)
82
82
char *filename, *title;
83
int what = (int)UI_MENU_CB_PARAM;
83
int what = vice_ptr_to_int(UI_MENU_CB_PARAM);
84
84
ui_button_t button;
85
uilib_file_filter_enum_t filter[] = { UILIB_FILTER_FLIPLIST, UILIB_FILTER_ALL };
86
87
vsync_suspend_speed_eval();
87
title = util_concat(what ? _("Load ") : _("Save"), _("Fliplist File"),
89
filename = ui_select_file(title, NULL, 0, 0,
90
load_save_fliplist_last_dir, "*.vfl",
91
&button, 1, NULL, UI_FC_LOAD);
88
title = util_concat(what ? _("Load ") : _("Save"), _("Fliplist File"), NULL);
89
filename = ui_select_file(title, NULL, 0, load_save_fliplist_last_dir, filter, sizeof(filter) / sizeof(*filter), &button, 1, NULL, UI_FC_LOAD);
96
if (fliplist_load_list((unsigned int)-1, filename, 0) == 0)
97
ui_message(_("Successfully read `%s'."), filename);
99
ui_error(_("Error reading `%s'."), filename);
101
if (fliplist_save_list((unsigned int)-1, filename) == 0)
102
ui_message(_("Successfully wrote `%s'."), filename);
104
ui_error(_("Error writing `%s'."), filename);
106
if (load_save_fliplist_last_dir)
94
if (fliplist_load_list((unsigned int)-1, filename, 0) == 0) {
95
ui_message(_("Successfully read `%s'."), filename);
97
ui_error(_("Error reading `%s'."), filename);
100
if (fliplist_save_list((unsigned int)-1, filename) == 0) {
101
ui_message(_("Successfully wrote `%s'."), filename);
103
ui_error(_("Error writing `%s'."), filename);
107
106
lib_free(load_save_fliplist_last_dir);
108
util_fname_split(filename, &load_save_fliplist_last_dir, NULL);
107
util_fname_split(filename, &load_save_fliplist_last_dir, NULL);
116
114
ui_menu_entry_t fliplist_submenu[] = {
136
134
static UI_CALLBACK(attach_from_fliplist2)
138
file_system_attach_disk(fliplist_get_unit((void *)UI_MENU_CB_PARAM),
139
fliplist_get_image((void *)UI_MENU_CB_PARAM));
136
file_system_attach_disk(fliplist_get_unit((void *)UI_MENU_CB_PARAM), fliplist_get_image((void *)UI_MENU_CB_PARAM));
142
139
static UI_CALLBACK(remove_from_fliplist2)
144
fliplist_remove(((struct cb_data_t *)UI_MENU_CB_PARAM)->unit,
145
(char *) ((struct cb_data_t *)UI_MENU_CB_PARAM)->data);
146
uifliplist_update_menus(((struct cb_data_t *)UI_MENU_CB_PARAM)->unit,
147
((struct cb_data_t *)UI_MENU_CB_PARAM)->unit);
141
fliplist_remove(((struct cb_data_t *)UI_MENU_CB_PARAM)->unit, (char *)((struct cb_data_t *)UI_MENU_CB_PARAM)->data);
142
uifliplist_update_menus(((struct cb_data_t *)UI_MENU_CB_PARAM)->unit, ((struct cb_data_t *)UI_MENU_CB_PARAM)->unit);
150
145
static UI_CALLBACK(add2fliplist2)
152
fliplist_set_current(((struct cb_data_t *)UI_MENU_CB_PARAM)->unit,
153
(char *) ((struct cb_data_t *)UI_MENU_CB_PARAM)->data);
147
fliplist_set_current(((struct cb_data_t *)UI_MENU_CB_PARAM)->unit, (char *)((struct cb_data_t *)UI_MENU_CB_PARAM)->data);
154
148
fliplist_add_image(((struct cb_data_t *)UI_MENU_CB_PARAM)->unit);
155
uifliplist_update_menus(((struct cb_data_t *)UI_MENU_CB_PARAM)->unit,
156
((struct cb_data_t *)UI_MENU_CB_PARAM)->unit);
149
uifliplist_update_menus(((struct cb_data_t *)UI_MENU_CB_PARAM)->unit, ((struct cb_data_t *)UI_MENU_CB_PARAM)->unit);
159
152
static UI_CALLBACK(attach_from_fliplist)
161
fliplist_attach_head(((struct cb_data_t *)UI_MENU_CB_PARAM)->unit,
162
(int) ((struct cb_data_t *)UI_MENU_CB_PARAM)->data);
154
fliplist_attach_head(((struct cb_data_t *)UI_MENU_CB_PARAM)->unit, (int)((struct cb_data_t *)UI_MENU_CB_PARAM)->data);
165
157
#ifdef USE_GNOMEUI
194
184
t0 = lib_msprintf(_("Attach #%d"), drive + 8);
195
185
flipmenu[drive][i].string = t0;
196
186
flipmenu[drive][i].callback = (ui_callback_t)attach_disk;
197
flipmenu[drive][i].callback_data = (ui_callback_data_t)(drive + 8);
187
flipmenu[drive][i].callback_data = (ui_callback_data_t)(long)(drive + 8);
200
190
memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
201
191
t5 = lib_msprintf(_("Detach #%d"), drive + 8);
202
192
flipmenu[drive][i].string = t5;
203
193
flipmenu[drive][i].callback = (ui_callback_t)detach_disk;
204
flipmenu[drive][i].callback_data = (ui_callback_data_t)(drive + 8);
194
flipmenu[drive][i].callback_data = (ui_callback_data_t)(long)(drive + 8);
207
197
#ifdef USE_GNOMEUI
209
199
/* this won't work so far for Xaw, because the checkmarks
210
200
aren't updated when a menu is destroyed, as the flipmenu is
211
201
dynamically regenerated; The Gnome code is already fixed. */
212
memcpy(&flipmenu[drive][i], (const char *)ui_drive_options_submenu,
213
sizeof(ui_menu_entry_t));
202
memcpy(&flipmenu[drive][i], (const char *)ui_drive_options_submenu, sizeof(ui_menu_entry_t));
215
204
/* Write protext UI controll */
216
205
memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
217
206
flipmenu[drive][i].string = _("*Write Protect");
219
flipmenu[drive][i].callback =
220
G_CALLBACK(toggle_AttachDevice8Readonly);
222
flipmenu[drive][i].callback =
223
G_CALLBACK(toggle_AttachDevice9Readonly);
208
flipmenu[drive][i].callback = G_CALLBACK(toggle_AttachDevice8Readonly);
210
flipmenu[drive][i].callback = G_CALLBACK(toggle_AttachDevice9Readonly);
227
fliplist_start = i; /* if we take the goto don't free anythin */
215
fliplist_start = i; /* if we take the goto don't free anything */
229
217
/* don't update menu deeply when drive has not been enabled
230
218
or nothing has been attached */
232
if (!((1 << drive) & enabled_drives))
220
if (!((1 << drive) & enabled_drives)) {
233
221
goto update_menu;
235
if (strcmp(last_attached_images[drive], "") == 0)
224
if (strcmp(last_attached_images[drive], "") == 0) {
236
225
goto update_menu;
239
229
memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
247
237
flipmenu[drive][i].callback = (ui_callback_t)attach_from_fliplist;
248
238
cb_data[drive][CBD_NEXT].unit = drive + 8;
249
239
cb_data[drive][CBD_NEXT].data = 1;
250
flipmenu[drive][i].callback_data =
251
(ui_callback_data_t)&(cb_data[drive][CBD_NEXT]);
240
flipmenu[drive][i].callback_data = (ui_callback_data_t)&(cb_data[drive][CBD_NEXT]);
258
247
memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
262
251
flipmenu[drive][i].callback = (ui_callback_t)attach_from_fliplist;
263
252
cb_data[drive][CBD_PREV].unit = drive + 8;
264
253
cb_data[drive][CBD_PREV].data = 0;
265
flipmenu[drive][i].callback_data =
266
(ui_callback_data_t)&(cb_data[drive][CBD_PREV]);
254
flipmenu[drive][i].callback_data = (ui_callback_data_t)&(cb_data[drive][CBD_PREV]);
273
261
memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
277
265
flipmenu[drive][i].callback = (ui_callback_t)add2fliplist2;
278
266
cb_data[drive][CBD_ADD].unit = drive + 8;
279
267
cb_data[drive][CBD_ADD].data = (long) last_attached_images[drive];
280
flipmenu[drive][i].callback_data =
281
(ui_callback_data_t)&(cb_data[drive][CBD_ADD]);
268
flipmenu[drive][i].callback_data = (ui_callback_data_t)&(cb_data[drive][CBD_ADD]);
288
275
memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
292
279
flipmenu[drive][i].callback = (ui_callback_t)remove_from_fliplist2;
293
280
cb_data[drive][CBD_REMOVE].unit = drive + 8;
294
281
cb_data[drive][CBD_REMOVE].data = (long) last_attached_images[drive];
295
flipmenu[drive][i].callback_data =
296
(ui_callback_data_t)&(cb_data[drive][CBD_REMOVE]);
282
flipmenu[drive][i].callback_data = (ui_callback_data_t)&(cb_data[drive][CBD_REMOVE]);
303
289
memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
311
297
memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
312
298
util_fname_split(fliplist_get_image(fl_iterator), &dir, &image);
313
299
flipmenu[drive][i].string = util_concat(NO_TRANS, image, NULL);
314
flipmenu[drive][i].callback =
315
(ui_callback_t)attach_from_fliplist2;
316
flipmenu[drive][i].callback_data =
317
(ui_callback_data_t)fl_iterator;
300
flipmenu[drive][i].callback = (ui_callback_t)attach_from_fliplist2;
301
flipmenu[drive][i].callback_data = (ui_callback_data_t)fl_iterator;
319
303
fl_iterator = fliplist_next_iterate(drive + 8);
325
309
if (i >= (FLIPLIST_MENU_LIMIT - 1)) {
326
310
/* the end delimitor must fit */
327
log_warning(LOG_DEFAULT,
328
"Number of fliplist menu entries exceeded."
329
"Cutting after %d entries.", i);
311
log_warning(LOG_DEFAULT, "Number of fliplist menu entries exceeded. Cutting after %d entries.", i);
345
327
if (drive == 0) {
346
328
ui_destroy_drive8_menu();
347
329
/* FIXME: Make sure the widget is really destroyed! */
348
ui_set_drive8_menu(ui_menu_create(menuname /*"LeftDrive8Menu"*/,
349
flipmenu[drive], NULL));
330
ui_set_drive8_menu(ui_menu_create(menuname, flipmenu[drive], NULL));
351
332
ui_destroy_drive9_menu();
352
333
/* FIXME: Make sure the widget is really destroyed! */
353
ui_set_drive9_menu(ui_menu_create(menuname /*"LeftDrive9Menu"*/,
354
flipmenu[drive], NULL));
334
ui_set_drive9_menu(ui_menu_create(menuname, flipmenu[drive], NULL));
358
338
lib_free(menuname);
372
346
while (fliplist_start < i) {
373
if (flipmenu[drive][fliplist_start].string)
374
lib_free(flipmenu[drive][fliplist_start].string);
347
lib_free(flipmenu[drive][fliplist_start].string);
348
flipmenu[drive][fliplist_start].string = NULL;
375
349
fliplist_start++;