/*========================================================================= ANIMHEADER.CPP Author: Gary Liddon @ Created: Project: Purpose: Copyright (c) 1998 G R Liddon ===========================================================================*/ /*---------------------------------------------------------------------- Includes -------- */ /* Std Lib ------- */ #include /* Glib ---- */ #include #include /* Local ----- */ #include "animheader.h" /*---------------------------------------------------------------------- Tyepdefs && Defines ------------------- */ using namespace std; /*---------------------------------------------------------------------- Structure defintions -------------------- */ /*---------------------------------------------------------------------- Function Prototypes ------------------- */ static int GetHex(char const * Str); /*---------------------------------------------------------------------- Vars ---- */ /*---------------------------------------------------------------------- Data ---- */ /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ int GetHex(char const * Str) { char Buffer[1024]; strcpy(Buffer,Str); strstream i(Buffer,1024); int Val; i>>hex>>Val; return(Val); } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void MakeAnimHeader( char * line, AnimHeaderItem * item ) { int len; int pos; char anim[1024]; char animno[8]; pos = 0; len = strlen( line ); if (len > 4) { int count = 0; // FIND ANIM while(count != 3) { while(line[pos] != '_') { pos++; if (pos >= len) { GObject::Error(ERR_FATAL,"Header scan overrun line - %s\n", line); } } pos++; count++; } // GET ANIM NAME count = 0; while(line[pos] != ' ') { anim[count++] = line[pos++]; if (pos > len) { GObject::Error(ERR_FATAL,"Header scan overrun line - %s\n", line); } } anim[count] = 0; // GET ANIM NUMBER pos += 3; count = 0; while(line[pos] != ',') { animno[count++] = line[pos++]; if (pos > len) { GObject::Error(ERR_FATAL,"Header scan overrun line - %s\n", line); } } animno[count] = 0; strupr( anim ); item->m_AnimName = anim; item->m_Frame = atoi( animno ); } else { GObject::Error(ERR_FATAL,"Incorrect header line - %s\n", line); } } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void readAnimHeaderFile(char const * Name, std::vector & Items) { char Line[1024]; try { ifstream InStream; InStream.open(Name,ios::in); if (InStream) { InStream.getline(Line,1024); // HEADER GUARD InStream.getline(Line,1024); // HEADER GUARD InStream.getline(Line,1024); // ENUM InStream.getline(Line,1024); // { InStream.getline(Line,1024); // ANIM COUNT while (!InStream.eof() && Line[0] != '}') { InStream.getline(Line,1024); if (strlen(Line) && Line[0] != '}') { AnimHeaderItem MyItem; MakeAnimHeader( Line, &MyItem ); InStream.getline(Line,1024); // NUMBER OF FRAMES Items.push_back( MyItem ); } } InStream.close(); } else { throw("Error opening anim header file"); } } catch (char const * E) { GObject::Error(ERR_FATAL,"Error in AddToTexList : %s",E); } } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void AnimHeaderFile::load(char const * name) { vector items; readAnimHeaderFile(name,items); int numOfItems; numOfItems=items.size(); for (int f=0;f::iterator it; srchStr=str; makeTexNameCompliant(srchStr); it=m_strToInfo.find(srchStr); if (it == m_strToInfo.end()) { return(false); } else { result=m_strToInfo[srchStr]; return(true); } } /*=========================================================================== end */