char *image_contents_filename_by_number(image_contents_t *contents, unsigned int file_index) { image_contents_file_list_t *current; char *s = NULL; if (contents == NULL) { return NULL; } if (file_index != 0) { current = contents->file_list; file_index--; while ((file_index != 0) && (current != NULL)) { current = current->next; file_index--; } if (current != NULL) { s = lib_stralloc((char *)(current->name)); } } image_contents_destroy(contents); return s; }
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); }
/* Autostart disk image `file_name'. */ int autostart_disk(const char *file_name, const char *program_name, unsigned int program_number, unsigned int runmode) { char *name = NULL; if (network_connected() || event_record_active() || event_playback_active() || !file_name || !autostart_enabled) { return -1; } /* Get program name first to avoid more than one file handle open on image. */ if (!program_name && program_number > 0) { image_contents_t *contents = diskcontents_filesystem_read(file_name); if (contents) { name = image_contents_filename_by_number(contents, program_number); image_contents_destroy(contents); } } else { name = lib_stralloc(program_name ? program_name : "*"); } if (name) { autostart_disk_cook_name(&name); if (!(file_system_attach_disk(8, file_name) < 0)) { log_message(autostart_log, "Attached file `%s' as a disk image.", file_name); reboot_for_autostart(name, AUTOSTART_HASDISK, runmode); lib_free(name); return 0; } } autostartmode = AUTOSTART_ERROR; deallocate_program_name(); lib_free(name); return -1; }