diff options
Diffstat (limited to 'Src/nde/win/Vfs.h')
-rw-r--r-- | Src/nde/win/Vfs.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/Src/nde/win/Vfs.h b/Src/nde/win/Vfs.h new file mode 100644 index 00000000..50490b83 --- /dev/null +++ b/Src/nde/win/Vfs.h @@ -0,0 +1,98 @@ +#ifndef __NDE_VFS_H +#define __NDE_VFS_H + +#include <bfc/platform/types.h> +#include <windows.h> + +//#define NDE_ALLOW_NONCACHED + +/* +#ifdef NDE_ALLOW_NONCACHED + #ifndef NDE_NOWIN32FILEIO + #error NDE_ALLOW_NONCACHED at least for now requires NDE_NOWIN32FILEIO + #endif +#endif +*/ + +#define VFILE_INC 65536 + +#define VFS_READ 1 +#define VFS_WRITE 2 +#define VFS_SEEKEOF 4 +#define VFS_CREATE 8 +#define VFS_NEWCONTENT 16 +#define VFS_MUSTEXIST 32 +#if defined(NDE_ALLOW_NONCACHED) +#include "../nu/RingBuffer.h" +#endif +typedef struct VFILEStruct +{ + void VFILE() + { + data = 0; + ptr = 0; + filesize = 0; + maxsize = 0; + filename = 0; + mode = 0; + cached = FALSE; + dirty = 0; + + #ifdef NDE_ALLOW_NONCACHED + #ifdef NDE_NOWIN32FILEIO + rfile = 0; + #else + hfile = NULL; + endoffile = false; + r = 0; + #endif + #endif + + mutex = NULL; + locks = 0; + } + + uint8_t *data; + uint32_t ptr; + uint32_t filesize; + uint32_t maxsize; + wchar_t *filename; + char mode; + BOOL cached; + int dirty; + +#ifdef NDE_ALLOW_NONCACHED + #ifdef NDE_NOWIN32FILEIO + FILE *rfile; + #else + HANDLE hfile; + bool endoffile; + RingBuffer r; + #endif +#endif + HANDLE mutex; + int locks; +} VFILE; + +#ifdef __cplusplus +extern "C" { +#endif + +VFILE *Vfnew(const wchar_t *filename, const char *mode, BOOL Cached); +VFILE *Vfopen(VFILE *f, wchar_t *filename, const char *mode, BOOL Cached); // filename must be an NDE string +size_t Vfread(void *ptr, size_t size, VFILE *buf); +void Vfseek(VFILE *fl, uint32_t i, int whence); +uint32_t Vftell(VFILE *fl); +void Vfclose(VFILE *fl); +void Vfdestroy(VFILE *fl); // benski> TODO: +void Vfwrite(const void *ptr, size_t size, VFILE *f); +int Vfeof(VFILE *fl); +int Vsync(VFILE *fl); // 1 on error updating +int Vflock(VFILE *fl, BOOL is_sync=TRUE); // returns 0 on failure +void Vfunlock(VFILE *fl, BOOL is_sync=TRUE); + +#ifdef __cplusplus +} +#endif + +#endif
\ No newline at end of file |