static void ShowContents(HWND hwnd, char *image_name) { image_contents_t *image; image_contents_screencode_t *line; image_contents_screencode_t *lines; // // delete listbox contents // const HWND hwnd2 = WinWindowFromID(hwnd, DID_CONTENTS_LB); LboxFreeContents(hwnd2); // // don't call the all the vice stuff if file doesn't exist // if (!util_file_exists(image_name)) { return; } // // try to open as a disk or tape image // image = diskcontents_read(image_name, 0); if (!image) { return; } // // set the wanted font // WinSendMsg(hwnd2, LM_SETITEMHEIGHT, (MPARAM)9, 0); // // convert image contents to screencodes // lines = image_contents_to_screencode(image); // // Loop over all entries // { int idx = 0; line = lines; do { WinInsertLboxItem(hwnd2, LIT_END, ""); WinLboxSetItemHandle(hwnd2, idx, (long)line); WinSetLboxItemText(hwnd2, idx, ""); idx++; } while ((line = line->next)); } // // free image structure // image_contents_destroy(image); }
void mon_drive_list(int drive_number) { const char *name; image_contents_t *listing; vdrive_t *vdrive; if ((drive_number < 8) || (drive_number > 11)) { drive_number = 8; } vdrive = file_system_get_vdrive(drive_number); if (vdrive == NULL || vdrive->image == NULL) { mon_out("Drive %i not ready.\n", drive_number); return; } name = disk_image_name_get(vdrive->image); listing = diskcontents_read(name, drive_number); if (listing != NULL) { char *string = image_contents_to_string(listing, 1); image_contents_file_list_t *element = listing->file_list; mon_out("%s\n", string); lib_free(string); if (element == NULL) { mon_out("Empty image\n"); } else { do { string = image_contents_file_to_string(element, 1); mon_out("%s\n", string); lib_free(string); } while ((element = element->next) != NULL); } if (listing->blocks_free >= 0) { string = lib_msprintf("%d blocks free.\n", listing->blocks_free); mon_out("%s", string); lib_free(string); } } }
int sdl_ui_image_file_selection_dialog(const char* filename, ui_menu_filereq_mode_t mode) { int total, dirs = 0, files, menu_max; int active = 1; int offset = 0; int redraw = 1; int cur = 0, cur_old = -1; image_contents_t *contents = NULL; image_contents_file_list_t *entry; int retval = -1; menu_draw = sdl_ui_get_menu_param(); /* FIXME: it might be a good idea to wrap this into a common imagecontents_read */ contents = tapecontents_read(filename); if (contents == NULL) { contents = diskcontents_read(filename, 0); if (contents == NULL) { return 0; } } /* count files in the list */ files = 0; for (entry = contents->file_list; entry != NULL; entry = entry->next) { files++; } total = dirs + files + SDL_FILEREQ_META_NUM; menu_max = menu_draw->max_text_y - (IMAGE_FIRST_Y + SDL_FILEREQ_META_NUM); if (menu_max > 0) { menu_max--; } /* make room for BLOCKS FREE */ while (active) { sdl_ui_set_active_font(MENU_FONT_IMAGES); if (redraw) { sdl_ui_image_file_selector_redraw(contents, filename, offset, (total - offset > menu_max) ? menu_max : total - offset, (total - offset > menu_max) ? 1 : 0, mode, cur); redraw = 0; } else { sdl_ui_image_file_selector_redraw_cursor(contents, offset, (total - offset > menu_max) ? menu_max : total - offset, mode, cur, cur_old); } sdl_ui_set_active_font(MENU_FONT_ASCII); sdl_ui_refresh(); switch (sdl_ui_menu_poll_input()) { case MENU_ACTION_HOME: cur_old = cur; cur = 0; offset = 0; redraw = 1; break; case MENU_ACTION_END: cur_old = cur; if (total < (menu_max - 1)) { cur = total - 1; offset = 0; } else { cur = menu_max - 1; offset = total - menu_max; } redraw = 1; break; case MENU_ACTION_UP: if (cur > 0) { cur_old = cur; --cur; } else { if (offset > 0) { offset--; redraw = 1; } } break; case MENU_ACTION_PAGEUP: case MENU_ACTION_LEFT: offset -= menu_max; if (offset < 0) { offset = 0; cur_old = -1; cur = 0; } redraw = 1; break; case MENU_ACTION_DOWN: if (cur < (menu_max - 1)) { if ((cur + offset) < total - 1) { cur_old = cur; ++cur; } } else { if (offset < (total - menu_max)) { offset++; redraw = 1; } } break; case MENU_ACTION_PAGEDOWN: case MENU_ACTION_RIGHT: offset += menu_max; if (offset >= total) { offset = total - 1; cur_old = -1; cur = 0; } else if ((cur + offset) >= total) { cur_old = -1; cur = total - offset - 1; } redraw = 1; break; case MENU_ACTION_SELECT: active = 0; retval = offset + cur - dirs - SDL_FILEREQ_META_NUM + 1; break; case MENU_ACTION_CANCEL: case MENU_ACTION_EXIT: active = 0; break; default: SDL_Delay(10); break; } } return retval; }
image_contents_t *diskcontents_read_unit11(const char *file_name) { return diskcontents_read(file_name, 11); }