1 // license:BSD-3-Clause
2 // copyright-holders:Nathan Woods
3 /*********************************************************************
4 
5     ioprocs.h
6 
7     File IO abstraction layer
8 
9 *********************************************************************/
10 #ifndef MAME_FORMATS_IOPROCS_H
11 #define MAME_FORMATS_IOPROCS_H
12 
13 #pragma once
14 
15 #include <cstdint>
16 #include <cstdlib>
17 
18 
19 
20 /***************************************************************************
21 
22     Type definitions
23 
24 ***************************************************************************/
25 
26 struct io_procs
27 {
28 	void (*closeproc)(void *file) = nullptr;
29 	int (*seekproc)(void *file, int64_t offset, int whence) = nullptr;
30 	size_t (*readproc)(void *file, void *buffer, size_t length) = nullptr;
31 	size_t (*writeproc)(void *file, const void *buffer, size_t length) = nullptr;
32 	uint64_t (*filesizeproc)(void *file) = nullptr;
33 };
34 
35 
36 
37 struct io_generic
38 {
39 	const struct io_procs *procs = nullptr;
40 	void *file = nullptr;
41 	uint8_t filler = 0;
42 };
43 
44 
45 /***************************************************************************
46 
47     Globals
48 
49 ***************************************************************************/
50 
51 extern const io_procs stdio_ioprocs;
52 extern const io_procs stdio_ioprocs_noclose;
53 extern const io_procs corefile_ioprocs;
54 extern const io_procs corefile_ioprocs_noclose;
55 
56 
57 
58 /***************************************************************************
59 
60     Prototypes
61 
62 ***************************************************************************/
63 
64 void io_generic_close(struct io_generic *genio);
65 void io_generic_read(struct io_generic *genio, void *buffer, uint64_t offset, size_t length);
66 void io_generic_write(struct io_generic *genio, const void *buffer, uint64_t offset, size_t length);
67 void io_generic_write_filler(struct io_generic *genio, uint8_t filler, uint64_t offset, size_t length);
68 uint64_t io_generic_size(struct io_generic *genio);
69 
70 #endif // MAME_FORMATS_IOPROCS_H
71