www.pudn.com > warsrc.rar > MiscSupport.h
// This is part of the WAR SOFTWARE SERIES initiated by Jarle Aase
// Copyright 1996 by Jarle Aase. All rights reserved.
// See the "War Software Series Licende Agreement" for details concerning
// use and distribution.
// ---
// This source code, executables and programs containing source code or
// binaries or proprietetary technology from the War Software Series are
// NOT alloed used, viewed or tested by any governmental agencies in
// any countries. This includes the government, departments, police,
// military etc.
// ---
// This file is intended for use with Tab space = 2
// Created and maintained in MSVC Developer Studio
// ---
// NAME : MiscSupport.h
// PURPOSE : Misc. support functions
// PROGRAM :
// DATE : Sept. 21 1996
// AUTHOR : Jarle Aase
// ---
// REVISION HISTORY
//
#ifndef __MISCSUPPORTH
#define __MISCSUPPORTH
////////////////////////////////////////////////////////////////////////////////
// Some basic datatypes
typedef unsigned __int64 FLEN;
#define FLEN_MAX ULONG_MAX
#define INVALID_FLEN_VALUE (FLEN)(0xffffffffffffffff)
typedef int USER;
#define INVALID_USER_VALUE 0
/////////////////////////////////////////////////////////////////////////////////
// 64 bit interger macros
#define HIDWORD(i64bit) (DWORD)((i64bit >> 32) & 0xffffffff)
#define LODWORD(i64bit) (DWORD)(i64bit & 0xffffffff)
////////////////////////////////////////////////////////////////////////////////
// Generic data manipulation
class DLL_WAR_SOFTWARE_ CLinkedListItem : public CObject
{
DECLARE_DYNCREATE(CLinkedListItem)
public:
CLinkedListItem();
~CLinkedListItem();
CLinkedListItem *m_Next;
CLinkedListItem *m_Prev;
LPVOID m_Ptr; // Data
};
class DLL_WAR_SOFTWARE_ CLinkedList : public CObject
{
DECLARE_DYNCREATE(CLinkedList)
private:
CLinkedListItem *m_First;
CLinkedListItem *m_Last;
protected:
int m_NumItems; // Number of items in list
public:
CLinkedList();
~CLinkedList();
virtual void Kill(); // KillAll + delete the this pointer
virtual void KillAll(); // Kill all items, including the pointer.
CLinkedListItem *First();
CLinkedListItem *Last();
LPVOID FirstPtr();
LPVOID LastPtr();
LPVOID Ptr(CLinkedListItem *Item);
CLinkedListItem *Next(CLinkedListItem *Item);
CLinkedListItem *Prev(CLinkedListItem *Item);
CLinkedListItem *FindPtr(LPVOID Ptr);
BOOL DeletePtr(LPVOID Ptr);
void DeleteItem(CLinkedListItem *Item);
void AddFirst(LPVOID Ptr);
void AddLast(LPVOID Ptr);
void AddPtr(CLinkedListItem *Next, CLinkedListItem *Prev, LPVOID Ptr);
LPVOID GetAndDeleteFirst();
LPVOID GetAndDeleteLast();
void Sort(int (*SortFunc)(const void *, const void *));
int GetItemCount() {return m_NumItems;}
void Empty();
void Cat(CLinkedList& List);
void operator = (CLinkedList &List);
void operator += (CLinkedList &List) {Cat(List);}
};
// Simple class to store a number of items, and trash the oldest whhen
// the number is reached.
class DLL_WAR_SOFTWARE_ CHistory : public CLinkedList
{
public:
void Add(LPVOID Ptr, int MaxItems, BOOL DeletePtr = TRUE);
void Add(LPCSTR Ptr, int MaxItems);
virtual void KillAll(); // Kill all items, including the pointer.
};
// Support class for CLookupList
class CLookupListItem : public CObject
{
public:
LPSTR m_Name;
DWORD m_Number;
LPVOID m_Ptr;
int m_DataType;
public:
CLookupListItem(LPVOID Ptr, DWORD NumSymbol, LPCSTR TextSymbol, int DataType);
~CLookupListItem();
LPVOID Ptr() {return m_Ptr;}
LPCSTR GetData(CString& cBuf);
};
// Simple class to store a pointer together with a name and a number that can
// be used for lookup.
class DLL_WAR_SOFTWARE_ CLookupList
{
private:
CLinkedList m_List;
public:
~CLookupList();
void AddItem(LPVOID Ptr, DWORD NumSymbol, LPCSTR TextSymbol, int DataType);
LPVOID Find(DWORD NumSymbol, LPCSTR TextSymbol);
void DeleteItem(DWORD NumSymbol, LPCSTR TextSymbol);
CLinkedListItem *First();
CLinkedListItem *Next(CLinkedListItem *Item);
CLookupListItem *LookupPtr(CLinkedListItem *Item);
LPVOID Ptr(CLookupListItem *LookupItem);
LPVOID Ptr(CLinkedListItem *LookupItem);
LPCSTR GetData(CLinkedListItem *LookupItem, CString& cBuf);
LPCSTR GetData(CLookupListItem *LookupItem, CString& cBuf);
CLinkedListItem *FindItem(DWORD NumSymbol, LPCSTR TextSymbol);
void KillAll();
};
////////////////////////////////////////////////////////////////////////////////
// Timer functions
// CWarTimer
// Used to test for millisecond based timers
class DLL_WAR_SOFTWARE_ CWarTimer
{
public:
DWORD m_TimerVal;
public:
CWarTimer(); // Initializes to current system tick
void Reset(); // Set the internal value to current system tick
BOOL TimeOut(DWORD Milliseconds); // Check for timeout
DWORD TimeDiff(); // Difference in ms between the stored and the current time
DWORD TimeDiff(DWORD Milliseconds); // // Difference in ms between the stored and the given time
DWORD TimeLeft(DWORD Milliseconds); // Time left before timeout in ms
};
////////////////////////////////////////////////////////////////////////////////
// System query functions
DLL_WAR_SOFTWARE_ BOOL IsNT();
DLL_WAR_SOFTWARE_ LPCSTR OsName();
DLL_WAR_SOFTWARE_ BOOL HasShell();
////////////////////////////////////////////////////////////////////////////////
// CString derived class to handle va_list argList
class DLL_WAR_SOFTWARE_ CWarString : public CString
{
public:
void FormatVaList(LPCTSTR lpszFormat, va_list argList);
void FormatCat(LPCTSTR lpszFormat, ...);
int FormatCatV(LPCTSTR lpszFormat, va_list argList);
};
////////////////////////////////////////////////////////////////////////////////
// Safe string array
DLL_WAR_SOFTWARE_ LPCSTR SafeStringIndexExp(LPCSTR File, int Line, LPCSTR *StrIndex, int Index, int Limit);
#define SafeStringIndex(StrIndex, Index, Limit)\
SafeStringIndexExp(__FILE__, __LINE__, (LPCSTR *)StrIndex, Index, Limit)
////////////////////////////////////////////////////////////////////////////////
// CCmdArgs
// Used to handle command line arguments to other modules,
// and arguments from the parser.
class DLL_WAR_SOFTWARE_ CCmdArgs : public CObject
{
public:
int m_argc;
LPSTR *m_argv;
int m_argc_max;
BOOL IsReInitialized;
public:
CCmdArgs();
CCmdArgs(LPCSTR Name, LPCSTR CommandLine, CCommandParser& Parser);
~CCmdArgs();
void AssertValid();
LPCSTR AddArg(LPCSTR Arg, int Len = 0);
LPCSTR Arg(int Index);
void PrepereNew();
LPCSTR Insert(int Index, LPCSTR Arg, int Len = 0);
LPCSTR Replace(int Index, LPCSTR Arg, int Len = 0);
int operator = (CCmdArgs& Arg);
LPCSTR operator [] (int n) {return Arg(n); }
void operator += (LPCSTR Str) {AddArg(Str); }
private:
void Empty();
void Initialize();
void Check();
};
////////////////////////////////////////////////////////////////////////////////
// GetData() - return pointer (or value) for use in printf.
// Returns a copy of the data stored in cBuf.
DLL_WAR_SOFTWARE_ LPCSTR GetData(LPVOID Ptr, int DataType, CString& cBuf);
DLL_WAR_SOFTWARE_ BOOL PutData(LPVOID Ptr, int DataType, LPCSTR Value);
////////////////////////////////////////////////////////////////////////////////
// GetlastErrorText()
DLL_WAR_SOFTWARE_ CString GetLastErrorText();
DLL_WAR_SOFTWARE_ CString GetLastErrorText(int Errno);
////////////////////////////////////////////////////////////////////////////////
// MySscanf()
DLL_WAR_SOFTWARE_ int MySscanf(LPCSTR buf, LPCSTR Format, ...);
////////////////////////////////////////////////////////////////////////////////
// PatternMatchesName()
DLL_WAR_SOFTWARE_ BOOL PatternMatchesName(LPCSTR OrgName, LPCSTR Pattern);
////////////////////////////////////////////////////////////////////////////////
// LoadString()
DLL_WAR_SOFTWARE_ LPCSTR LoadString(UINT nID, CString& cBuf);
////////////////////////////////////////////////////////////////////////////////
// LoGetLineParam()
DLL_WAR_SOFTWARE_ LPCSTR GetLineParam(LPCSTR Tag, CString &cValue, LPCSTR Default);
////////////////////////////////////////////////////////////////////////////////
// ExpandStringMacros()
class CDaemonStatus;
DLL_WAR_SOFTWARE_ LPCSTR ExpandStringMacros(LPCSTR Str, CString& cValue, CDaemonStatus *Stat = NULL);
////////////////////////////////////////////////////////////////////////////////
// ExpandStringMacros()
DLL_WAR_SOFTWARE_ BOOL ExpandPath(LPCSTR Path);
////////////////////////////////////////////////////////////////////////////////
// GetFreeDiskSpace
DLL_WAR_SOFTWARE_ __int64 GetFreeDiskSpace(LPCSTR Path);
////////////////////////////////////////////////////////////////////////////////
// Get the starrtup dir
DLL_WAR_SOFTWARE_ CString GetStartupPath();
////////////////////////////////////////////////////////////////////////////////
// Time conversion
DLL_WAR_SOFTWARE_ __int64 CTimeToDate(const CTime& ct);
DLL_WAR_SOFTWARE_ __int64 FiletimeToDate(const FILETIME& ft);
DLL_WAR_SOFTWARE_ CTime DateToCTime(const __int64 dt);
DLL_WAR_SOFTWARE_ FILETIME DateToFiletime(const __int64 dt);
DLL_WAR_SOFTWARE_ int GetMonthFromLiteral(LPCSTR Month);
////////////////////////////////////////////////////////////////////////////////
// Prepere a string for multiline windows display
DLL_WAR_SOFTWARE_ CString PrepereForWnd(LPCSTR Text);
////////////////////////////////////////////////////////////////////////////////
// Map the string so that sprintf( str) can be called
DLL_WAR_SOFTWARE_ CString MapStringValid(LPCSTR Text);
////////////////////////////////////////////////////////////////////////////////
// Does a buffer contain more than one line of text?
DLL_WAR_SOFTWARE_ BOOL IsMultiline(LPCSTR Text);
#endif __MISCSUPPORTH