summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/tools/imgtool/imgtool.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/tools/imgtool/imgtool.h')
-rw-r--r--src/mame/tools/imgtool/imgtool.h169
1 files changed, 169 insertions, 0 deletions
diff --git a/src/mame/tools/imgtool/imgtool.h b/src/mame/tools/imgtool/imgtool.h
new file mode 100644
index 00000000000..e688dfb60f1
--- /dev/null
+++ b/src/mame/tools/imgtool/imgtool.h
@@ -0,0 +1,169 @@
+// license:BSD-3-Clause
+// copyright-holders:Nathan Woods
+/***************************************************************************
+
+ imgtool.h
+
+ Main headers for Imgtool core
+
+***************************************************************************/
+
+#ifndef IMGTOOL_H
+#define IMGTOOL_H
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include "corestr.h"
+#include "formats/flopimg.h"
+#include "opresolv.h"
+#include "library.h"
+#include "filter.h"
+
+/* ----------------------------------------------------------------------- */
+
+#define EOLN_CR "\x0d"
+#define EOLN_LF "\x0a"
+#define EOLN_CRLF "\x0d\x0a"
+
+#define FILENAME_BOOTBLOCK ((const char *) 1)
+
+enum
+{
+ OSD_FOPEN_READ,
+ OSD_FOPEN_WRITE,
+ OSD_FOPEN_RW,
+ OSD_FOPEN_RW_CREATE
+};
+
+/* ---------------------------------------------------------------------------
+ * Image calls
+ *
+ * These are the calls that front ends should use for manipulating images. You
+ * should never call the module functions directly because they may not be
+ * implemented (i.e. - the function pointers are NULL). The img_* functions are
+ * aware of these issues and will make the appropriate checks as well as
+ * marking up return codes with the source. In addition, some of the img_*
+ * calls are high level calls that simply image manipulation
+ *
+ * Calls that return 'int' that are not explictly noted otherwise return
+ * imgtool error codes
+ * ---------------------------------------------------------------------------
+ */
+
+struct imgtool_module_features
+{
+ unsigned int supports_create : 1;
+ unsigned int supports_open : 1;
+ unsigned int supports_readsector : 1;
+ unsigned int supports_writesector : 1;
+ unsigned int is_read_only : 1;
+};
+
+struct imgtool_partition_features
+{
+ unsigned int supports_reading : 1;
+ unsigned int supports_writing : 1;
+ unsigned int supports_deletefile : 1;
+ unsigned int supports_directories : 1;
+ unsigned int supports_freespace : 1;
+ unsigned int supports_createdir : 1;
+ unsigned int supports_deletedir : 1;
+ unsigned int supports_creation_time : 1;
+ unsigned int supports_lastmodified_time : 1;
+ unsigned int supports_forks : 1;
+ unsigned int supports_geticoninfo : 1;
+ unsigned int is_read_only : 1;
+};
+
+/* ----- initialization and basics ----- */
+void imgtool_init(int omit_untested, void (*warning)(const char *message));
+void imgtool_exit(void);
+const imgtool_module *imgtool_find_module(const char *modulename);
+imgtool_module_features imgtool_get_module_features(const imgtool_module *module);
+void imgtool_warn(const char *format, ...) ATTR_PRINTF(1,2);
+char *imgtool_basename(char *filename);
+
+/* ----- image management ----- */
+imgtoolerr_t imgtool_identify_file(const char *filename, imgtool_module **modules, size_t count);
+imgtoolerr_t imgtool_image_open(const imgtool_module *module, const char *filename, int read_or_write, imgtool_image **outimg);
+imgtoolerr_t imgtool_image_open_byname(const char *modulename, const char *filename, int read_or_write, imgtool_image **outimg);
+imgtoolerr_t imgtool_image_create(const imgtool_module *module, const char *fname, option_resolution *opts, imgtool_image **image);
+imgtoolerr_t imgtool_image_create_byname(const char *modulename, const char *fname, option_resolution *opts, imgtool_image **image);
+void imgtool_image_close(imgtool_image *image);
+imgtoolerr_t imgtool_image_info(imgtool_image *image, char *string, size_t len);
+imgtoolerr_t imgtool_image_get_sector_size(imgtool_image *image, UINT32 track, UINT32 head, UINT32 sector, UINT32 *length);
+imgtoolerr_t imgtool_image_get_geometry(imgtool_image *image, UINT32 *tracks, UINT32 *heads, UINT32 *sectors);
+imgtoolerr_t imgtool_image_read_sector(imgtool_image *image, UINT32 track, UINT32 head, UINT32 sector, void *buffer, size_t len);
+imgtoolerr_t imgtool_image_write_sector(imgtool_image *image, UINT32 track, UINT32 head, UINT32 sector, const void *buffer, size_t len);
+imgtoolerr_t imgtool_image_get_block_size(imgtool_image *image, UINT32 *length);
+imgtoolerr_t imgtool_image_read_block(imgtool_image *image, UINT64 block, void *buffer);
+imgtoolerr_t imgtool_image_write_block(imgtool_image *image, UINT64 block, const void *buffer);
+imgtoolerr_t imgtool_image_clear_block(imgtool_image *image, UINT64 block, UINT8 data);
+imgtoolerr_t imgtool_image_list_partitions(imgtool_image *image, imgtool_partition_info *partitions, size_t len);
+void *imgtool_image_malloc(imgtool_image *image, size_t size);
+const imgtool_module *imgtool_image_module(imgtool_image *image);
+void *imgtool_image_extra_bytes(imgtool_image *image);
+UINT64 imgtool_image_rand(imgtool_image *image);
+
+/* ----- partition management ----- */
+imgtoolerr_t imgtool_partition_open(imgtool_image *image, int partition_index, imgtool_partition **partition);
+void imgtool_partition_close(imgtool_partition *partition);
+imgtool_image *imgtool_partition_image(imgtool_partition *partition);
+
+/* ----- partition operations ----- */
+imgtoolerr_t imgtool_partition_get_directory_entry(imgtool_partition *partition, const char *path, int index, imgtool_dirent *ent);
+imgtoolerr_t imgtool_partition_get_file_size(imgtool_partition *partition, const char *filename, UINT64 *filesize);
+imgtoolerr_t imgtool_partition_get_free_space(imgtool_partition *partition, UINT64 *sz);
+imgtoolerr_t imgtool_partition_read_file(imgtool_partition *partition, const char *filename, const char *fork, imgtool_stream *destf, filter_getinfoproc filter);
+imgtoolerr_t imgtool_partition_write_file(imgtool_partition *partition, const char *filename, const char *fork, imgtool_stream *sourcef, option_resolution *resolution, filter_getinfoproc filter);
+imgtoolerr_t imgtool_partition_get_file(imgtool_partition *partition, const char *filename, const char *fork, const char *dest, filter_getinfoproc filter);
+imgtoolerr_t imgtool_partition_put_file(imgtool_partition *partition, const char *newfname, const char *fork, const char *source, option_resolution *opts, filter_getinfoproc filter);
+imgtoolerr_t imgtool_partition_delete_file(imgtool_partition *partition, const char *fname);
+imgtoolerr_t imgtool_partition_list_file_forks(imgtool_partition *partition, const char *path, imgtool_forkent *ents, size_t len);
+imgtoolerr_t imgtool_partition_create_directory(imgtool_partition *partition, const char *path);
+imgtoolerr_t imgtool_partition_delete_directory(imgtool_partition *partition, const char *path);
+imgtoolerr_t imgtool_partition_list_file_attributes(imgtool_partition *partition, const char *path, UINT32 *attrs, size_t len);
+imgtoolerr_t imgtool_partition_get_file_attributes(imgtool_partition *partition, const char *path, const UINT32 *attrs, imgtool_attribute *values);
+imgtoolerr_t imgtool_partition_put_file_attributes(imgtool_partition *partition, const char *path, const UINT32 *attrs, const imgtool_attribute *values);
+imgtoolerr_t imgtool_partition_get_file_attribute(imgtool_partition *partition, const char *path, UINT32 attr, imgtool_attribute *value);
+imgtoolerr_t imgtool_partition_put_file_attribute(imgtool_partition *partition, const char *path, UINT32 attr, imgtool_attribute value);
+void imgtool_partition_get_attribute_name(imgtool_partition *partition, UINT32 attribute, const imgtool_attribute *attr_value, char *buffer, size_t buffer_len);
+imgtoolerr_t imgtool_partition_get_icon_info(imgtool_partition *partition, const char *path, imgtool_iconinfo *iconinfo);
+imgtoolerr_t imgtool_partition_suggest_file_filters(imgtool_partition *partition, const char *path, imgtool_stream *stream, imgtool_transfer_suggestion *suggestions, size_t suggestions_length);
+imgtoolerr_t imgtool_partition_get_block_size(imgtool_partition *partition, UINT32 *length);
+imgtoolerr_t imgtool_partition_read_block(imgtool_partition *partition, UINT64 block, void *buffer);
+imgtoolerr_t imgtool_partition_write_block(imgtool_partition *partition, UINT64 block, const void *buffer);
+imgtoolerr_t imgtool_partition_get_chain(imgtool_partition *partition, const char *path, imgtool_chainent *chain, size_t chain_size);
+imgtoolerr_t imgtool_partition_get_chain_string(imgtool_partition *partition, const char *path, char *buffer, size_t buffer_len);
+imgtool_partition_features imgtool_partition_get_features(imgtool_partition *partition);
+void * imgtool_partition_get_info_ptr(imgtool_partition *partition, UINT32 state);
+const char * imgtool_partition_get_info_string(imgtool_partition *partition, UINT32 state);
+UINT64 imgtool_partition_get_info_int(imgtool_partition *partition, UINT32 state);
+void * imgtool_partition_extra_bytes(imgtool_partition *partition);
+UINT64 imgtool_partition_rand(imgtool_partition *partition);
+
+/* ----- path management ----- */
+const char * imgtool_partition_get_root_path(imgtool_partition *partition);
+const char * imgtool_partition_path_concatenate(imgtool_partition *partition, const char *path1, const char *path2);
+const char * imgtool_partition_get_base_name(imgtool_partition *partition, const char *path);
+
+/* ----- directory management ----- */
+imgtoolerr_t imgtool_directory_open(imgtool_partition *partition, const char *path, imgtool_directory **outenum);
+void imgtool_directory_close(imgtool_directory *enumeration);
+imgtoolerr_t imgtool_directory_get_next(imgtool_directory *enumeration, imgtool_dirent *ent);
+const imgtool_module *imgtool_directory_module(imgtool_directory *enumeration);
+void *imgtool_directory_extrabytes(imgtool_directory *enumeration);
+imgtool_partition *imgtool_directory_partition(imgtool_directory *directory);
+imgtool_image *imgtool_directory_image(imgtool_directory *enumeration);
+
+/* ----- special ----- */
+int imgtool_validitychecks(void);
+void unknown_partition_get_info(const imgtool_class *imgclass, UINT32 state, union imgtoolinfo *info);
+
+char *strncpyz(char *dest, const char *source, size_t len);
+char *strncatz(char *dest, const char *source, size_t len);
+void rtrim(char *buf);
+
+#endif /* IMGTOOL_H */