ultimatepp/bazaar/plugin/wav/rifffile.h
dolik 879433b74d bazaar: plugin/portaudio, Sound, SoundExample: Initial release
git-svn-id: svn://ultimatepp.org/upp/trunk@2930 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2010-12-25 13:58:10 +00:00

83 lines
2.2 KiB
C++

/* rifffile.h - Copyright (c) 1996, 1998 by Timothy J. Weber */
#ifndef __RIFFFILE_H
#define __RIFFFILE_H
/* Headers required to use this module */
#include <stack>
#include <string>
#include <string.h>
#include <vector>
#include <stdio.h>
/***************************************************************************
macros, constants, and enums
***************************************************************************/
/***************************************************************************
typedefs, structs, classes
***************************************************************************/
class RiffFile;
class RiffChunk {
public:
char name[5];
unsigned long size; // the length, read from the second chunk header entry
char subType[5]; // valid for RIFF and LIST chunks
long start; // the file offset in bytes of the chunk contents
long after; // the start of what comes after this chunk
// initialize at the file's current read position, and mark the file as bad
// if there's an error.
RiffChunk()
{};
RiffChunk(RiffFile& file);
bool operator < (const RiffChunk& other) const
{ return start < other.start; };
bool operator == (const RiffChunk& other) const
{ return strcmp(name, other.name) == 0
&& size == other.size
&& strcmp(subType, other.subType) == 0
&& start == other.start; };
};
class RiffFile {
FILE* fp;
unsigned long formSize;
std::stack<RiffChunk, std::vector<RiffChunk> > chunks;
public:
RiffFile(const char *name);
~RiffFile();
bool rewind();
bool push(const char* chunkType = 0);
bool pop();
long chunkSize() const;
const char* chunkName() const;
const char* subType() const;
bool getNextExtraItem(std::string& type, std::string& value);
FILE* filep()
{ return fp; };
protected:
bool readExtraItem(std::string& type, std::string& value);
};
/***************************************************************************
public variables
***************************************************************************/
#ifndef IN_RIFFFILE
#endif
/***************************************************************************
function prototypes
***************************************************************************/
#endif
/* __RIFFFILE_H */