-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfile-io.h
118 lines (87 loc) · 5.64 KB
/
file-io.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#ifndef CLOWNCD_FILE_IO_H
#define CLOWNCD_FILE_IO_H
#include <stddef.h>
#include "clowncommon/clowncommon.h"
#define CLOWNCD_SIZE_INVALID ((size_t)-1)
typedef enum ClownCD_FileMode
{
CLOWNCD_RB,
CLOWNCD_WB
} ClownCD_FileMode;
typedef enum ClownCD_FileOrigin
{
CLOWNCD_SEEK_SET,
CLOWNCD_SEEK_CUR,
CLOWNCD_SEEK_END
} ClownCD_FileOrigin;
typedef struct ClownCD_FileCallbacks
{
void* (*open)(const char *filename, ClownCD_FileMode mode);
int (*close)(void *stream);
size_t (*read)(void *buffer, size_t size, size_t count, void *stream);
size_t (*write)(const void *buffer, size_t size, size_t count, void *stream);
long (*tell)(void *stream);
int (*seek)(void *stream, long position, ClownCD_FileOrigin origin);
} ClownCD_FileCallbacks;
typedef struct ClownCD_File
{
const ClownCD_FileCallbacks *functions;
void *stream;
cc_bool eof;
} ClownCD_File;
ClownCD_File ClownCD_FileOpenBlank(void);
ClownCD_File ClownCD_FileOpen(const char *filename, ClownCD_FileMode mode, const ClownCD_FileCallbacks *callbacks);
ClownCD_File ClownCD_FileOpenAlreadyOpen(void *stream, const ClownCD_FileCallbacks *callbacks);
int ClownCD_FileClose(ClownCD_File *file);
size_t ClownCD_FileRead(void *buffer, size_t size, size_t count, ClownCD_File *file);
size_t ClownCD_FileWrite(const void *buffer, size_t size, size_t count, ClownCD_File *file);
long ClownCD_FileTell(ClownCD_File* const file);
int ClownCD_FileSeek(ClownCD_File* const file, long position, ClownCD_FileOrigin origin);
size_t ClownCD_FileSize(ClownCD_File *file);
#define ClownCD_FileIsOpen(file) ((file)->stream != NULL)
void ClownCD_WriteUintMemory(unsigned char *buffer, unsigned long value, unsigned int total_bytes, cc_bool big_endian);
unsigned long ClownCD_WriteUintFile(ClownCD_File *file, unsigned long value, unsigned int total_bytes, cc_bool big_endian);
void ClownCD_WriteSintMemory(unsigned char *buffer, unsigned long value, unsigned int total_bytes, cc_bool big_endian);
void ClownCD_WriteSintFile(ClownCD_File *file, unsigned long value, unsigned int total_bytes, cc_bool big_endian);
unsigned long ClownCD_ReadUintMemory(const unsigned char *buffer, unsigned int total_bytes, cc_bool big_endian);
unsigned long ClownCD_ReadUintFile(ClownCD_File *file, unsigned int total_bytes, cc_bool big_endian);
signed long ClownCD_ReadSintMemory(const unsigned char *buffer, unsigned int total_bytes, cc_bool big_endian);
signed long ClownCD_ReadSintFile(ClownCD_File *file, unsigned int total_bytes, cc_bool big_endian);
#define ClownCD_WriteU16LEMemory(buffer, value) ClownCD_WriteUintMemory(buffer, value, 2, cc_false)
#define ClownCD_WriteU32LEMemory(buffer, value) ClownCD_WriteUintMemory(buffer, value, 4, cc_false)
#define ClownCD_WriteU16LE(file, value) ClownCD_WriteUintFile(file, value, 2, cc_false)
#define ClownCD_WriteU32LE(file, value) ClownCD_WriteUintFile(file, value, 4, cc_false)
#define ClownCD_WriteU16BEMemory(buffer, value) ClownCD_WriteUintMemory(buffer, value, 2, cc_true)
#define ClownCD_WriteU32BEMemory(buffer, value) ClownCD_WriteUintMemory(buffer, value, 4, cc_true)
#define ClownCD_WriteU16BE(file, value) ClownCD_WriteUintFile(file, value, 2, cc_true)
#define ClownCD_WriteU32BE(file, value) ClownCD_WriteUintFile(file, value, 4, cc_true)
#define ClownCD_WriteU8(file, value) ClownCD_WriteUintFile(file, value, 1, cc_true)
#define ClownCD_WriteS16LEMemory(buffer, value) ClownCD_WriteSintMemory(buffer, value, 2, cc_false)
#define ClownCD_WriteS32LEMemory(buffer, value) ClownCD_WriteSintMemory(buffer, value, 4, cc_false)
#define ClownCD_WriteS16LE(file, value) ClownCD_WriteSintFile(file, value, 2, cc_false)
#define ClownCD_WriteS32LE(file, value) ClownCD_WriteSintFile(file, value, 4, cc_false)
#define ClownCD_WriteS16BEMemory(buffer, value) ClownCD_WriteSintMemory(buffer, value, 2, cc_true)
#define ClownCD_WriteS32BEMemory(buffer, value) ClownCD_WriteSintMemory(buffer, value, 4, cc_true)
#define ClownCD_WriteS16BE(file, value) ClownCD_WriteSintFile(file, value, 2, cc_true)
#define ClownCD_WriteS32BE(file, value) ClownCD_WriteSintFile(file, value, 4, cc_true)
#define ClownCD_WriteS8(file, value) ClownCD_WriteSintFile(file, value, 1, cc_true)
#define ClownCD_ReadU16LEMemory(buffer) ClownCD_ReadUintMemory(buffer, 2, cc_false)
#define ClownCD_ReadU32LEMemory(buffer) ClownCD_ReadUintMemory(buffer, 4, cc_false)
#define ClownCD_ReadU16LE(file) ClownCD_ReadUintFile(file, 2, cc_false)
#define ClownCD_ReadU32LE(file) ClownCD_ReadUintFile(file, 4, cc_false)
#define ClownCD_ReadU16BEMemory(buffer) ClownCD_ReadUintMemory(buffer, 2, cc_true)
#define ClownCD_ReadU32BEMemory(buffer) ClownCD_ReadUintMemory(buffer, 4, cc_true)
#define ClownCD_ReadU16BE(file) ClownCD_ReadUintFile(file, 2, cc_true)
#define ClownCD_ReadU32BE(file) ClownCD_ReadUintFile(file, 4, cc_true)
#define ClownCD_ReadU8(file) ClownCD_ReadUintFile(file, 1, cc_true)
#define ClownCD_ReadS16LEMemory(buffer) ClownCD_ReadSintMemory(buffer, 2, cc_false)
#define ClownCD_ReadS32LEMemory(buffer) ClownCD_ReadSintMemory(buffer, 4, cc_false)
#define ClownCD_ReadS16LE(file) ClownCD_ReadSintFile(file, 2, cc_false)
#define ClownCD_ReadS32LE(file) ClownCD_ReadSintFile(file, 4, cc_false)
#define ClownCD_ReadS16BEMemory(buffer) ClownCD_ReadSintMemory(buffer, 2, cc_true)
#define ClownCD_ReadS32BEMemory(buffer) ClownCD_ReadSintMemory(buffer, 4, cc_true)
#define ClownCD_ReadS16BE(file) ClownCD_ReadSintFile(file, 2, cc_true)
#define ClownCD_ReadS32BE(file) ClownCD_ReadSintFile(file, 4, cc_true)
#define ClownCD_ReadS8(file) ClownCD_ReadSintFile(file, 1, cc_true)
char* ClownCD_GetFullFilePath(const char *directory, const char *filename);
#endif /* CLOWNCD_FILE_IO_H */