void AdjustSysTimeForLog(SYSTEMTIME& Time); #pragma pack(push, 1) struct SLogItem { public: UINT m_uSize; GUID m_GUID; SYSTEMTIME m_Time; int m_nLaunched; int m_nErr; char m_szHost[64]; int m_nPlayers; // -(m_nPlayers + 1) // for error... int m_nBOTs; char m_szPlayers[1]; /* '\0' */ public: SLogItem* GetNext() const; BOOL CheckItem() const; }; #define LRPT_FILE_SIGN 0x5450524c // 'LRPT' #define LRPT_FILE_ERR 0x54505258 // 'XRPT' #define LRPT_FILE_ERR2 0x54505240 // '@RPT' #define LRPT_FILE_VER 0x00010000 struct SLogReport { public: UINT m_dwSigns; // UINT m_dwVersion; // 0x0100 BYTE m_ba[16]; // MD5 signature... // from here MD5.... BYTE m_baReserved[32]; int m_nLogItems; UINT m_uSize; //SLogItem m_aLogItems[]; protected: static bool s_bCached; static SYSTEMTIME s_Time; static BYTE s_ba[16]; public: SLogItem* GetFirst() const; SLogItem* GetLast() const; void Initialize(); int Check(SYSTEMTIME& st); void Fix(BYTE* pBDigest = NULL); void MarkErr(bool bAs2 = false); int WriteFile(const char* pcszFile, SYSTEMTIME& st); void GetDateFromLOGFILE(const char* pcszFile, SYSTEMTIME& st); SLogReport* AddLogItem(const GUID& guid, UINT uBufNames, SLogItem*& pLogItem); SLogItem* GetLogItem(const GUID& guid) const; public: static SLogReport* OpenLogReport(const char* pcszFile, SYSTEMTIME& st, BOOL bNewIfNotExist = TRUE); static void FreeLogReport(SLogReport* pLogReport); static void CheckCached(SYSTEMTIME& st); }; #pragma pack(pop)