/*========================================================================= FILENAME.CPP Author: Gary Liddon @ Created: Project: Purpose: Copyright (c) 1998 G R Liddon ===========================================================================*/ #ifndef __GINIO_H__ #define __GINIO_H__ /*---------------------------------------------------------------------- Includes -------- */ /* Std Lib ------- */ #pragma warning( disable : 4786 ) #include #include #include #include /* Glib ---- */ /* Local ----- */ /*---------------------------------------------------------------------- Tyepdefs && Defines ------------------- */ /*---------------------------------------------------------------------- Structure defintions -------------------- */ class GinChunk : public GObject { public: GinChunk(void); virtual ~GinChunk(void); void LoadFile(Gifstream & In); virtual char const * GetName(void) const {return("DEFAULT"); } void SetNameSize(char const * NewName,int NewSize) { Name=NewName; Size=NewSize; } virtual void Load(Gifstream & In); virtual GinChunk * MakeNew(void) {return(new GinChunk);} protected: void DumpData(void); GString Name; int Size; std::vector Data; }; class GinFile : public GObject { public: GinFile(void) { ReadUnknownChunks=false; } ~GinFile(void) { int i; for (i=0; iSetNameSize(MyHdr.Name,MyHdr.Size); ChunkReader->Load(In); Chunks.push_back(ChunkReader); } if (In) In.seekg(ChunkLenAligned+ChunkPos,std::ios::beg); else { Error(ERR_FATAL,"Error loading chunk"); } } In.close(); } else Error(ERR_FATAL,"Can't open gin file %s",File); } int FindChunks(char const * Type,std::vector & RetChunks) { int NumOfChunks; NumOfChunks=0; for (int f=0;fGetName(); if (Name==Type) { RetChunks.push_back(Chunks[f]); NumOfChunks++; } } return(NumOfChunks); } protected: struct GinHdr { GinHdr(void) {Size=0;} bool ReadHdr(Gifstream & In); bool PeekHdr(Gifstream & In) { int InPos; bool Ret; InPos=In.tellg(); Ret=ReadHdr(In); if (Ret) In.seekg(InPos,std::ios::beg); return(Ret); } GString Name; int Size; }; std::vector Chunks; bool ReadUnknownChunks; static std::vector ChunkHandlers; static GinChunk * GetHandler(char const * Name); }; /*---------------------------------------------------------------------- Globals ------- */ /* Vars ---- */ /* Data ---- */ /* Functions --------- */ /*---------------------------------------------------------------------- */ #endif /* __GINIO_H__ */ /*=========================================================================== end */