diff options
Diffstat (limited to 'src/emu/diimage.h')
-rw-r--r-- | src/emu/diimage.h | 47 |
1 files changed, 35 insertions, 12 deletions
diff --git a/src/emu/diimage.h b/src/emu/diimage.h index aa62485b4d1..fe2ca71461f 100644 --- a/src/emu/diimage.h +++ b/src/emu/diimage.h @@ -21,6 +21,8 @@ // TYPE DEFINITIONS //************************************************************************** +class software_list; + enum iodevice_t { /* List of all supported devices. Refer to the device by these names only */ @@ -65,10 +67,26 @@ struct image_device_type_info const char *m_shortname; }; -struct image_device_format +class image_device_format { + friend class simple_list<image_device_format>; + +public: + image_device_format(const char *name, const char *description, const char *extensions, const char *optspec) + : m_next(NULL), + m_name(name), + m_description(description), + m_extensions(extensions), + m_optspec(optspec) { } + + image_device_format *next() const { return m_next; } + const char *name() const { return m_name; } + const char *description() const { return m_description; } + const char *extensions() const { return m_extensions; } + const char *optspec() const { return m_optspec; } + +private: image_device_format *m_next; - int m_index; astring m_name; astring m_description; astring m_extensions; @@ -137,7 +155,7 @@ public: virtual void device_compute_hash(hash_collection &hashes, const void *data, size_t length, const char *types) const; virtual bool call_load() { return FALSE; } - virtual bool call_softlist_load(char *swlist, char *swname, rom_entry *start_entry) { return FALSE; } + virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry) { return FALSE; } virtual bool call_create(int format_type, option_resolution *format_options) { return FALSE; } virtual void call_unload() { } virtual void call_display() { } @@ -156,10 +174,9 @@ public: virtual ui_menu *get_selection_menu(running_machine &machine, class render_container *container); - const image_device_format *device_get_indexed_creatable_format(int index); + const image_device_format *device_get_indexed_creatable_format(int index) { return m_formatlist.find(index); } const image_device_format *device_get_named_creatable_format(const char *format_name); const option_guide *device_get_creation_option_guide() { return create_option_guide(); } - const image_device_format *device_get_creatable_formats() { return formatlist(); } const char *error(); void seterror(image_error_t err, const char *message); @@ -218,16 +235,18 @@ public: const char *instance_name() const { return m_instance_name; } const char *brief_instance_name() const { return m_brief_instance_name; } bool uses_file_extension(const char *file_extension) const; - image_device_format *formatlist() const { return m_formatlist; } + image_device_format *formatlist() const { return m_formatlist.first(); } bool load(const char *path); bool open_image_file(emu_options &options); bool finish_load(); void unload(); bool create(const char *path, const image_device_format *create_format, option_resolution *create_args); - bool load_software(char *swlist, char *swname, rom_entry *entry); + bool load_software(software_list_device &swlist, const char *swname, const rom_entry *entry); int reopen_for_write(const char *path); + static void software_name_split(const char *swlist_swname, astring &swlist_name, astring &swname, astring &swpart); + protected: bool load_internal(const char *path, bool is_create, int create_format, option_resolution *create_args, bool just_load); void determine_open_plan(int is_create, UINT32 *open_plan); @@ -248,6 +267,11 @@ protected: void run_hash(void (*partialhash)(hash_collection &, const unsigned char *, unsigned long, const char *), hash_collection &hashes, const char *types); void image_checkhash(); void update_names(const device_type device_type = NULL, const char *inst = NULL, const char *brief = NULL); + + software_part *find_software_item(const char *path, bool restrict_to_interface); + bool load_software_part(const char *path, software_part *&swpart); + void software_get_default_slot(astring &result, const char *default_card_slot); + // derived class overrides // configuration @@ -270,10 +294,10 @@ protected: astring m_working_directory; /* Software information */ - char *m_full_software_name; + astring m_full_software_name; software_info *m_software_info_ptr; software_part *m_software_part_ptr; - char *m_software_list_name; + astring m_software_list_name; /* info read from the hash file/software list */ astring m_longname; @@ -297,7 +321,7 @@ protected: astring m_instance_name; /* creation info */ - image_device_format *m_formatlist; + simple_list<image_device_format> m_formatlist; bool m_is_loading; }; @@ -325,10 +349,9 @@ protected: int submenu_result; bool create_confirmed; bool softlist_done; - const struct software_list *swl; const software_info *swi; const software_part *swp; - const class software_list_device *sld; + class software_list_device *sld; astring software_info_name; void test_create(bool &can_create, bool &need_confirm); |