DSL
rwops.h
1 //@AUTOHEADER@BEGIN@
2 /***********************************************************************\
3 | Drift Standard Libraries v1.01 |
4 | Copyright 2010-2023 Drift Solutions / Indy Sams |
5 | Docs and more information available at https://www.driftsolutions.dev |
6 | This file released under the 3-clause BSD license, |
7 | see included DSL.LICENSE.TXT file for details. |
8 \***********************************************************************/
9 //@AUTOHEADER@END@
10 
11 #ifndef __RWOPS_H__
12 #define __RWOPS_H__
13 
14 #include <drift/Buffer.h>
15 
24 struct DSL_FILE {
31  bool (*seek)(DSL_FILE * fp, int64 pos, int mode);
36  int64 (*read)(void * buf, int64 size, DSL_FILE * fp);
41  int64 (*write)(void * buf, int64 size, DSL_FILE * fp);
45  int64 (*tell)(DSL_FILE * fp);
46  bool (*flush)(DSL_FILE * fp);
50  bool (*eof)(DSL_FILE * fp);
54  void (*close)(DSL_FILE * fp);
55 
56 #ifndef DOXYGEN_SKIP
57  // for use by rwops provider, do not touch in user-land
58  union {
59  FILE * fp;
60  void * handle;
61  };
62  void * p_extra;
63 #endif
64 };
65 
72 DSL_API DSL_FILE * DSL_CC RW_OpenFile(const char * fn, const char * mode);
79 DSL_API DSL_FILE * DSL_CC RW_ConvertFile(FILE * fp, bool autoclose);
85 DSL_API DSL_FILE * DSL_CC RW_OpenMemory(int64 size);
90 DSL_API DSL_FILE * DSL_CC RW_ConvertMemory(uint8 * buf, int64 size);
96 DSL_API DSL_FILE * DSL_CC RW_OpenBuffer(DSL_BUFFER ** buf);
102 DSL_API DSL_FILE * DSL_CC RW_ConvertBuffer(DSL_BUFFER * buf, int64 offset = -1);
103 
104 #if defined(ENABLE_PHYSFS) || defined(DOXYGEN_SKIP)
105 #include <physfs.h>
106 
107 #if defined(DSL_DLL) && defined(WIN32)
108  #if defined(DSL_PHYSFS_EXPORTS)
109  #define DSL_PHYSFS_API extern "C" __declspec(dllexport)
110  #define DSL_PHYSFS_API_CLASS __declspec(dllexport)
111  #else
112  #define DSL_PHYSFS_API extern "C" __declspec(dllimport)
113  #define DSL_PHYSFS_API_CLASS __declspec(dllimport)
114  #endif
115 #else
116  #define DSL_PHYSFS_API DSL_API_VIS
117  #define DSL_PHYSFS_API_CLASS DSL_API_VIS
118 #endif
119 
126 DSL_PHYSFS_API DSL_FILE * DSL_CC RW_OpenPhysFS(const char * fn, const char * mode);
133 DSL_PHYSFS_API DSL_FILE * DSL_CC RW_ConvertPhysFS(PHYSFS_file * fp, bool autoclose);
134 #endif
135 
138 #ifndef DOXYGEN_SKIP
139 
140 /* Used internally - not for public use */
141 struct TP_RWOPT {
142  bool autoclose;
143 };
144 
145 #endif // DOXYGEN_SKIP
146 
147 #endif // __RWOPS_H__
DSL_API DSL_FILE *DSL_CC RW_ConvertBuffer(DSL_BUFFER *buf, int64 offset=-1)
Definition: rwops.cpp:313
DSL_PHYSFS_API DSL_FILE *DSL_CC RW_ConvertPhysFS(PHYSFS_file *fp, bool autoclose)
DSL_API DSL_FILE *DSL_CC RW_ConvertFile(FILE *fp, bool autoclose)
Definition: rwops.cpp:68
DSL_API DSL_FILE *DSL_CC RW_OpenFile(const char *fn, const char *mode)
Definition: rwops.cpp:50
DSL_API DSL_FILE *DSL_CC RW_OpenBuffer(DSL_BUFFER **buf)
Definition: rwops.cpp:289
DSL_API DSL_FILE *DSL_CC RW_ConvertMemory(uint8 *buf, int64 size)
Definition: rwops.cpp:188
DSL_PHYSFS_API DSL_FILE *DSL_CC RW_OpenPhysFS(const char *fn, const char *mode)
DSL_API DSL_FILE *DSL_CC RW_OpenMemory(int64 size)
Definition: rwops.cpp:168
Definition: rwops.h:24
int64(* write)(void *buf, int64 size, DSL_FILE *fp)
Definition: rwops.h:41
void(* close)(DSL_FILE *fp)
Definition: rwops.h:54
bool(* seek)(DSL_FILE *fp, int64 pos, int mode)
Definition: rwops.h:31
int64(* read)(void *buf, int64 size, DSL_FILE *fp)
Definition: rwops.h:36
bool(* eof)(DSL_FILE *fp)
Definition: rwops.h:50
int64(* tell)(DSL_FILE *fp)
Definition: rwops.h:45