49 # include <sys/types.h>
50 # include <sys/stat.h>
57 typedef __int8 int8_t;
58 typedef __int16 int16_t;
59 typedef __int32 int32_t;
60 typedef __int64 int64_t;
61 typedef unsigned __int8 uint8_t;
62 typedef unsigned __int16 uint16_t;
63 typedef unsigned __int32 uint32_t;
64 typedef unsigned __int64 uint64_t;
71 typedef unsigned int uint;
77 # define CHUNK_ID_RIFF 0x52494646
78 # define CHUNK_ID_RIFX 0x52494658
79 # define CHUNK_ID_LIST 0x4C495354
81 # define LIST_TYPE_INFO 0x494E464F
82 # define CHUNK_ID_ICMT 0x49434D54
83 # define CHUNK_ID_ICOP 0x49434F50
84 # define CHUNK_ID_ICRD 0x49435244
85 # define CHUNK_ID_IENG 0x49454E47
86 # define CHUNK_ID_INAM 0x494E414D
87 # define CHUNK_ID_IPRD 0x49505244
88 # define CHUNK_ID_ISFT 0x49534654
90 # define CHUNK_ID_SMPL 0x736D706C
92 #else // little endian
93 # define CHUNK_ID_RIFF 0x46464952
94 # define CHUNK_ID_RIFX 0x58464952
95 # define CHUNK_ID_LIST 0x5453494C
97 # define LIST_TYPE_INFO 0x4F464E49
98 # define CHUNK_ID_ICMT 0x544D4349
99 # define CHUNK_ID_ICOP 0x504F4349
100 # define CHUNK_ID_ICRD 0x44524349
101 # define CHUNK_ID_IENG 0x474E4549
102 # define CHUNK_ID_INAM 0x4D414E49
103 # define CHUNK_ID_IPRD 0x44525049
104 # define CHUNK_ID_ISFT 0x54465349
106 # define CHUNK_ID_SMPL 0x6C706D73
108 #endif // WORDS_BIGENDIAN
110 #define CHUNK_HEADER_SIZE 8
111 #define LIST_HEADER_SIZE 12
112 #define RIFF_HEADER_SIZE 12
141 typedef std::string
String;
190 unsigned long Read(
void* pData,
unsigned long WordCount,
unsigned long WordSize);
191 unsigned long ReadInt8(int8_t* pData,
unsigned long WordCount = 1);
192 unsigned long ReadUint8(uint8_t* pData,
unsigned long WordCount = 1);
193 unsigned long ReadInt16(int16_t* pData,
unsigned long WordCount = 1);
194 unsigned long ReadUint16(uint16_t* pData,
unsigned long WordCount = 1);
195 unsigned long ReadInt32(int32_t* pData,
unsigned long WordCount = 1);
196 unsigned long ReadUint32(uint32_t* pData,
unsigned long WordCount = 1);
203 unsigned long Write(
void* pData,
unsigned long WordCount,
unsigned long WordSize);
204 unsigned long WriteInt8(int8_t* pData,
unsigned long WordCount = 1);
205 unsigned long WriteUint8(uint8_t* pData,
unsigned long WordCount = 1);
206 unsigned long WriteInt16(int16_t* pData,
unsigned long WordCount = 1);
207 unsigned long WriteUint16(uint16_t* pData,
unsigned long WordCount = 1);
208 unsigned long WriteInt32(int32_t* pData,
unsigned long WordCount = 1);
209 unsigned long WriteUint32(uint32_t* pData,
unsigned long WordCount = 1);
212 void Resize(
int iNewSize);
229 unsigned long ReadSceptical(
void* pData,
unsigned long WordCount,
unsigned long WordSize);
231 uint8_t byteCache = *((uint8_t*) Word);
232 *((uint8_t*) Word) = *((uint8_t*) Word + 1);
233 *((uint8_t*) Word + 1) = byteCache;
236 uint8_t byteCache = *((uint8_t*) Word);
237 *((uint8_t*) Word) = *((uint8_t*) Word + 3);
238 *((uint8_t*) Word + 3) = byteCache;
239 byteCache = *((uint8_t*) Word + 1);
240 *((uint8_t*) Word + 1) = *((uint8_t*) Word + 2);
241 *((uint8_t*) Word + 2) = byteCache;
243 inline void swapBytes(
void* Word,
unsigned long WordSize) {
245 unsigned long lo = 0, hi = WordSize - 1;
246 for (; lo < hi; hi--, lo++) {
247 byteCache = *((uint8_t*) Word + lo);
248 *((uint8_t*) Word + lo) = *((uint8_t*) Word + hi);
249 *((uint8_t*) Word + hi) = byteCache;
254 for (
int i = 0; i < 4; i++) {
255 uint8_t byte = *((uint8_t*)(&word) + i);
261 virtual unsigned long WriteChunk(
unsigned long ulWritePos,
unsigned long ulCurrentDataOffset);
308 virtual unsigned long WriteChunk(
unsigned long ulWritePos,
unsigned long ulCurrentDataOffset);
321 File(uint32_t FileType);
352 unsigned long GetFileSize();
353 void ResizeFile(
unsigned long ulNewSize);
355 unsigned long __GetFileSize(
int hFile);
357 unsigned long __GetFileSize(HANDLE hFile);
359 unsigned long __GetFileSize(FILE* hFile);