Subversion Repositories spk

Rev

Rev 126 | Rev 182 | 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;

tstruct GameDirectory
{
        Utils::String dir;
        Utils::String name;
        Utils::String version;
        int                       id;
        int                       langid;
        Utils::String langname;
        Utils::String logdir;
        Utils::String addon;
        Utils::String exe;
        Utils::String basename;
} GameDirectory;

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) const;

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

        int findAddonType(const Utils::String &gameExe) const;
        int GetGameType(const Utils::String &gameExe) const;
        int GetGameVersion(const Utils::String &gameExe, Utils::String *fVersion) const;
        bool GetGameVersionName(const Utils::String &gameExe, Utils::String *versionName) const;
        Utils::String ExtractGameName(const Utils::String &dir) const;
        Utils::String GetGameRunExe(const Utils::String &dir) const;
        Utils::String GetGameName(const Utils::String &gameExe) const;
        Utils::String GetGameBaseName(const Utils::String &gameExe) const;
        Utils::String GetGameNameFromType(int type) const;
        Utils::String GetGameVersionFromType(int game, int gameVersion, const Utils::String &fGameVersion) const;
        Utils::String GetGameDir(const Utils::String &dir) const;
        Utils::String GetProperDir(const Utils::String &dir) const;
        Utils::String GetAddonDir(const Utils::String &dir) const;
        bool isAddon(const Utils::String &ext) const;
        int getTextID(const Utils::String &dir) const;
        int GetGameAddons(const Utils::String &dir, Utils::CStringList &exe);
        int GetGameFlags(int game);
        int GetMaxPatch(int game);
        Utils::String GetModKey(int game);
        void GetDirectoryData(GameDirectory *gameDir) const;

        int ConvertGameType(int gametype, int *version);

        int GetNumGames() { return m_lExe.size(); }
        SGameExe *GetGame(int game) const;
        unsigned int gameCount() const;

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

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


#endif //__GAME_EXE_H__