--- libgig/trunk/src/RIFF.h 2009/03/22 11:13:25 1869 +++ libgig/trunk/src/RIFF.h 2013/11/25 02:22:38 2482 @@ -2,7 +2,7 @@ * * * libgig - C++ cross-platform Gigasampler format file access library * * * - * Copyright (C) 2003-2007 by Christian Schoenebeck * + * Copyright (C) 2003-2013 by Christian Schoenebeck * * * * * * This library is free software; you can redistribute it and/or modify * @@ -38,7 +38,6 @@ #include #include -#include #include #include @@ -78,10 +77,34 @@ # define CHUNK_ID_RIFF 0x52494646 # define CHUNK_ID_RIFX 0x52494658 # define CHUNK_ID_LIST 0x4C495354 + +# define LIST_TYPE_INFO 0x494E464F +# define CHUNK_ID_ICMT 0x49434D54 +# define CHUNK_ID_ICOP 0x49434F50 +# define CHUNK_ID_ICRD 0x49435244 +# define CHUNK_ID_IENG 0x49454E47 +# define CHUNK_ID_INAM 0x494E414D +# define CHUNK_ID_IPRD 0x49505244 +# define CHUNK_ID_ISFT 0x49534654 + +# define CHUNK_ID_SMPL 0x736D706C + #else // little endian # define CHUNK_ID_RIFF 0x46464952 # define CHUNK_ID_RIFX 0x58464952 # define CHUNK_ID_LIST 0x5453494C + +# define LIST_TYPE_INFO 0x4F464E49 +# define CHUNK_ID_ICMT 0x544D4349 +# define CHUNK_ID_ICOP 0x504F4349 +# define CHUNK_ID_ICRD 0x44524349 +# define CHUNK_ID_IENG 0x474E4549 +# define CHUNK_ID_INAM 0x4D414E49 +# define CHUNK_ID_IPRD 0x44525049 +# define CHUNK_ID_ISFT 0x54465349 + +# define CHUNK_ID_SMPL 0x6C706D73 + #endif // WORDS_BIGENDIAN #define CHUNK_HEADER_SIZE 8 @@ -157,7 +180,7 @@ String GetChunkIDString(); uint32_t GetChunkID() { return ChunkID; } ///< Chunk ID in unsigned integer representation. List* GetParent() { return pParent; } ///< Returns pointer to the chunk's parent list chunk. - unsigned long GetSize() { return CurrentChunkSize; } ///< Chunk size in bytes (without header, thus the chunk data body) + unsigned long GetSize() const { return CurrentChunkSize; } ///< Chunk size in bytes (without header, thus the chunk data body) unsigned long GetNewSize() { return NewChunkSize; } ///< New chunk size if it was modified with Resize(). unsigned long GetPos() { return ulPos; } ///< Position within the chunk data body unsigned long GetFilePos() { return ulStartPos + ulPos; } ///< Current, actual offset in file. @@ -177,6 +200,7 @@ uint16_t ReadUint16(); int32_t ReadInt32(); uint32_t ReadUint32(); + void ReadString(String& s, int size); unsigned long Write(void* pData, unsigned long WordCount, unsigned long WordSize); unsigned long WriteInt8(int8_t* pData, unsigned long WordCount = 1); unsigned long WriteUint8(uint8_t* pData, unsigned long WordCount = 1); @@ -301,6 +325,8 @@ bool SetMode(stream_mode_t NewMode); void SetByteOrder(endian_t Endian); String GetFileName(); + void SetFileName(const String& path); + bool IsNew() const; virtual void Save(); virtual void Save(const String& path); virtual ~File(); @@ -317,6 +343,7 @@ #endif // POSIX String Filename; bool bEndianNative; + bool bIsNewFile; void LogAsResized(Chunk* pResizedChunk); void UnlogResized(Chunk* pResizedChunk); @@ -324,7 +351,7 @@ friend class List; private: stream_mode_t Mode; - std::set ResizedChunks; ///< All chunks which have been resized (enlarged / shortened). + ChunkList ResizedChunks; ///< All chunks which have been resized (enlarged / shortened). unsigned long GetFileSize(); void ResizeFile(unsigned long ulNewSize); @@ -335,6 +362,7 @@ #else unsigned long __GetFileSize(FILE* hFile); #endif + void Cleanup(); }; /**