Exemple #1
0
static UI_CALLBACK(set_common_memory_configuration)
{
    int blocks = 0;

    switch (vice_ptr_to_int(UI_MENU_CB_PARAM)) {
        case MEM_ALL:
            blocks = BLOCK_0 | BLOCK_1 | BLOCK_2 | BLOCK_3 | BLOCK_5;
            break;
        case MEM_3K:
            blocks = BLOCK_0;
            break;
        case MEM_8K:
            blocks = BLOCK_1;
            break;
        case MEM_16K:
            blocks = BLOCK_1 | BLOCK_2;
            break;
        case MEM_24K:
            blocks = BLOCK_1 | BLOCK_2 | BLOCK_3;
            break;
        default:
            /* Shouldn't happen.  */
            log_error(LOG_DEFAULT, "vic20ui:set_common_memory_configuration bogus memory config.");
        case MEM_NONE:
            blocks = 0;
            break;
    }
    resources_set_int("RamBlock0", blocks & BLOCK_0 ? 1 : 0);
    resources_set_int("RamBlock1", blocks & BLOCK_1 ? 1 : 0);
    resources_set_int("RamBlock2", blocks & BLOCK_2 ? 1 : 0);
    resources_set_int("RamBlock3", blocks & BLOCK_3 ? 1 : 0);
    resources_set_int("RamBlock5", blocks & BLOCK_5 ? 1 : 0);
    ui_menu_update_all();
    vsync_suspend_speed_eval();
}
Exemple #2
0
void uifliplist_update_menus(int from_unit, int to_unit)
{
    /* Yick, allocate dynamically */
    static ui_menu_entry_t flipmenu[NUM_DRIVES][FLIPLIST_MENU_LIMIT];
    static struct cb_data_t cb_data[NUM_DRIVES][sizeof(cbd_enum_t)];

    char *image = NULL, *t0 = NULL, *t1 = NULL, *t2 = NULL, *t3 = NULL;
    char *t4 = NULL, *t5 = NULL;
    void *fl_iterator;
    int i, drive, true_emu, fliplist_start = 0;

    ui_callback_t callback = NULL;

    resources_get_int("DriveTrueEmulation", &true_emu);

    for (drive = from_unit - 8; (drive <= to_unit - 8) && (drive < NUM_DRIVES); drive++) {
        i = 0;
        t0 = t1 = t2 = t3 = t4 = t5 = NULL;

        memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
        t0 = lib_msprintf(_("Attach #%d"), drive + 8);
        flipmenu[drive][i].string = t0;
        flipmenu[drive][i].type = UI_MENU_TYPE_NORMAL;
        flipmenu[drive][i].callback = (ui_callback_t)attach_disk;
        flipmenu[drive][i].callback_data = (ui_callback_data_t)(long)(drive + 8);
        i++;

        memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
        t5 = lib_msprintf(_("Detach #%d"), drive + 8);
        flipmenu[drive][i].string = t5;
        flipmenu[drive][i].type = UI_MENU_TYPE_NORMAL;
        flipmenu[drive][i].callback = (ui_callback_t)detach_disk;
        flipmenu[drive][i].callback_data = (ui_callback_data_t)(long)(drive + 8);
        i++;

        /* drivesettings */
        memcpy(&flipmenu[drive][i], (const char *)ui_drive_options_submenu, sizeof(ui_menu_entry_t));
        i++;
        /* Write protext UI controll */
        memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
        flipmenu[drive][i].string = _("Read-only");
        flipmenu[drive][i].type = UI_MENU_TYPE_TICK;
        switch (drive) {
        case 0:
            callback = (ui_callback_t)toggle_AttachDevice8Readonly;
            break;
        case 1:
            callback = (ui_callback_t)toggle_AttachDevice9Readonly;
            break;
        case 2:
            callback = (ui_callback_t)toggle_AttachDevice10Readonly;
            break;
        case 3:
            callback = (ui_callback_t)toggle_AttachDevice11Readonly;
            break;
        }
        flipmenu[drive][i].callback = callback;
        i++;

        fliplist_start = i;     /* if we take the goto don't free anything */

        /* don't update menu deeply when drive has not been enabled
           or nothing has been attached */
        if (true_emu) {
            if (!((1 << drive) & enabled_drives)) {
                goto update_menu;
            }
        } else {
            if (drive_get_disk_drive_type(drive) == DRIVE_TYPE_NONE) {
                goto update_menu;
            }
        }

        memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
        flipmenu[drive][i].string = "--";
        flipmenu[drive][i].type = UI_MENU_TYPE_SEPARATOR;
        i++;

        memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
        util_fname_split(fliplist_get_next(drive + 8), NULL, &image);
        if (image) {
            t1 = util_concat(_("Next: "), image, NULL);
        } else {
            t1 = util_concat(_("Next: "), "<", _("empty"), ">", NULL);
        }
        flipmenu[drive][i].string = t1;
        flipmenu[drive][i].type = UI_MENU_TYPE_NORMAL;
        flipmenu[drive][i].callback = (ui_callback_t)attach_from_fliplist;
        cb_data[drive][CBD_NEXT].unit = drive + 8;
        cb_data[drive][CBD_NEXT].data = 1;
        flipmenu[drive][i].callback_data = (ui_callback_data_t)&(cb_data[drive][CBD_NEXT]);
        lib_free(image);
        image = NULL;
        i++;

        memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
        util_fname_split(fliplist_get_prev(drive + 8), NULL, &image);
        if (image) {
            t2 = util_concat(_("Previous: "), image, NULL);
        } else {
            t2 = util_concat(_("Previous: "), "<", _("empty"), ">", NULL);
        }
        flipmenu[drive][i].string = t2;
        flipmenu[drive][i].type = UI_MENU_TYPE_NORMAL;
        flipmenu[drive][i].callback = (ui_callback_t)attach_from_fliplist;
        cb_data[drive][CBD_PREV].unit = drive + 8;
        cb_data[drive][CBD_PREV].data = 0;
        flipmenu[drive][i].callback_data = (ui_callback_data_t)&(cb_data[drive][CBD_PREV]);
        lib_free(image);
        image = NULL;
        i++;

        memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
        util_fname_split(last_attached_images[drive], NULL, &image);
        if (image[0]) {
            t3 = util_concat(_("Add: "), image, NULL);
            flipmenu[drive][i].string = t3;
            flipmenu[drive][i].type = UI_MENU_TYPE_NORMAL;
            flipmenu[drive][i].callback = (ui_callback_t)add2fliplist2;
            cb_data[drive][CBD_ADD].unit = drive + 8;
            cb_data[drive][CBD_ADD].data = (long) last_attached_images[drive];
            flipmenu[drive][i].callback_data = (ui_callback_data_t)&(cb_data[drive][CBD_ADD]);
            i++;
        }
        lib_free(image);
        image = NULL;

        memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
        util_fname_split(last_attached_images[drive], NULL, &image);
        if (image[0]) {
            t4 = util_concat(_("Remove: "), image, NULL);
            flipmenu[drive][i].string = t4;
            flipmenu[drive][i].type = UI_MENU_TYPE_NORMAL;
            flipmenu[drive][i].callback = (ui_callback_t)remove_from_fliplist2;
            cb_data[drive][CBD_REMOVE].unit = drive + 8;
            cb_data[drive][CBD_REMOVE].data = (long) last_attached_images[drive];
            flipmenu[drive][i].callback_data = (ui_callback_data_t)&(cb_data[drive][CBD_REMOVE]);
            i++;
        }
        lib_free(image);
        image = NULL;

        memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
        flipmenu[drive][i].string = "--";
        flipmenu[drive][i].type = UI_MENU_TYPE_SEPARATOR;
        i++;

        /* Now collect current fliplist */
        fl_iterator = fliplist_init_iterate(drive + 8);
        fliplist_start = i;
        while (fl_iterator) {
            memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));
            util_fname_split(fliplist_get_image(fl_iterator), NULL, &image);
            flipmenu[drive][i].string = util_concat(NO_TRANS, image, NULL);
            flipmenu[drive][i].type = UI_MENU_TYPE_NORMAL;
            flipmenu[drive][i].callback = (ui_callback_t)attach_from_fliplist2;
            flipmenu[drive][i].callback_data = (ui_callback_data_t)fl_iterator;

            fl_iterator = fliplist_next_iterate(drive + 8);
            lib_free(image);
            image = NULL;
            i++;
            if (i >= (FLIPLIST_MENU_LIMIT - 1)) {
                /* the end delimitor must fit */
                log_warning(LOG_DEFAULT, "Number of fliplist menu entries exceeded. Cutting after %d entries.", i);
                break;
            }
        }

    update_menu:
        /* make sure the menu is well terminated */
        memset(&(flipmenu[drive][i]), 0, sizeof(ui_menu_entry_t));

        ui_destroy_drive_menu(drive);
        ui_set_drive_menu(drive, flipmenu[drive]);

        lib_free(t0);
        lib_free(t1);
        lib_free(t2);
        lib_free(t3);
        lib_free(t4);
        lib_free(t5);
        while (fliplist_start < i) {
            lib_free(flipmenu[drive][fliplist_start].string);
            flipmenu[drive][fliplist_start].string = NULL;
            fliplist_start++;
        }
    }
    /* Update the checkmarks */
    ui_menu_update_all();
}