Subversion Repositories spk

Rev

Rev 56 | Rev 125 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#ifndef __GAME_EXE_H__
#define __GAME_EXE_H__

#include "lists.h"
#include "File.h"

enum {
        EXEFLAG_NONE                    = 0,
        EXEFLAG_TCTEXT                  = 1,
        EXEFLAG_MYDOCLOG                = 2,
        EXEFLAG_NOXOR                   = 4,
        EXEFLAG_NOSAVESUBDIR    = 8,
        EXEFLAG_ADDON                   = 16,
};

#define EXE_VERSIONPOS                  7
#define EXE_VERSION_NAMESTART   (EXE_VERSIONPOS + 2)
#define EXE_VERSION_SIZESTART   (EXE_VERSIONPOS + 1)

tstruct SGameExeVersion {
        Utils::String   sName;
        int                             iName;
        Utils::String   fVersion;
        CLinkList<int> lSize;
} SGameExeVersion;

tstruct SGameExe {
        Utils::String sExe;
        Utils::String sName;
        Utils::String sModKey;
        int              iFlags;
        int              iMaxPatch;
        int              iName;
        Utils::String sMyDoc;
        Utils::String sAddon;
        int              iAddonTo;
        int              iTextNum;
        CLinkList<SGameExeVersion> lVersions;
} SGameExe;

class SPKEXPORT CGameExe 
{
private:
        CLinkList<SGameExe> m_lExe;

public:
        void Reset();

        void ParseExe(const Utils::String &line);
        int  ParseFlags(const Utils::String &flags);
        bool ReadFile(const Utils::String &file);

        int AddExe(const Utils::String &exe);
        SGameExe *gameExe(const Utils::String &exe);

        int FindVersion(const Utils::String &exe, int size, Utils::String *fVersion);

        int GetGameType(const Utils::String &gameExe);
        int GetGameVersion(const Utils::String &gameExe, Utils::String *fVersion);
        bool GetGameVersionName(const Utils::String &gameExe, Utils::String *versionName);
        Utils::String ExtractGameName(const Utils::String &dir);
        Utils::String GetGameRunExe(const Utils::String &dir);
        Utils::String GetGameName(const Utils::String &gameExe);
        Utils::String GetGameNameFromType(int type);
        Utils::String GetGameVersionFromType(int game, int gameVersion, const Utils::String &fGameVersion);
        Utils::String GetGameDir(const Utils::String &dir);
        Utils::String GetProperDir(const Utils::String &dir);
        Utils::String GetAddonDir(const Utils::String &dir);
        int GetGameAddons(const Utils::String &dir, CyStringList &exe);
        int GetGameFlags(int game);
        int GetMaxPatch(int game);
        Utils::String GetModKey(int game);

        int ConvertGameType(int gametype, int *version);

        int GetNumGames() { return m_lExe.size(); }
        SGameExe *GetGame(int game) { if ( game >= 0 && game < m_lExe.size() ) return m_lExe[game]; return NULL; }

private:
        int _findExe(const Utils::String &exe) const;
        int _findVersion(int exe, int size, Utils::String *fVersion);

        void _SetExeName(Utils::String *sName, int *iName, const Utils::String &n);
        Utils::String _textFileName(const Utils::String &sGameDir);
        Utils::String _readTextFile(const Utils::String &sGameDir);
        Utils::String _extractTextData(const Utils::String &sData, long iPage, long iID);
};


#endif //__GAME_EXE_H__