MiscSupport.h
上传用户:surprise9
上传日期:2007-01-04
资源大小:426k
文件大小:10k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. // This is part of the WAR SOFTWARE SERIES initiated by Jarle Aase
  2. // Copyright 1996 by Jarle Aase. All rights reserved.
  3. // See the "War Software Series Licende Agreement" for details concerning 
  4. // use and distribution.
  5. // ---
  6. // This source code, executables and programs containing source code or
  7. // binaries or proprietetary technology from the War Software Series are
  8. // NOT alloed used, viewed or tested by any governmental agencies in
  9. // any countries. This includes the government, departments, police, 
  10. // military etc.
  11. // ---
  12. // This file is intended for use with Tab space = 2
  13. // Created and maintained in MSVC Developer Studio
  14. // ---
  15. // NAME : MiscSupport.h
  16. // PURPOSE : Misc. support functions
  17. // PROGRAM : 
  18. // DATE : Sept. 21 1996
  19. // AUTHOR : Jarle Aase
  20. // ---
  21. // REVISION HISTORY
  22. // 
  23. #ifndef __MISCSUPPORTH
  24. #define __MISCSUPPORTH
  25. ////////////////////////////////////////////////////////////////////////////////
  26. // Some basic datatypes
  27. typedef unsigned __int64 FLEN;
  28. #define FLEN_MAX ULONG_MAX
  29. #define INVALID_FLEN_VALUE (FLEN)(0xffffffffffffffff)
  30. typedef int USER;
  31. #define INVALID_USER_VALUE 0
  32. /////////////////////////////////////////////////////////////////////////////////
  33. // 64 bit interger macros
  34. #define HIDWORD(i64bit) (DWORD)((i64bit >> 32) & 0xffffffff)
  35. #define LODWORD(i64bit) (DWORD)(i64bit & 0xffffffff)
  36. ////////////////////////////////////////////////////////////////////////////////
  37. // Generic data manipulation
  38. class DLL_WAR_SOFTWARE_ CLinkedListItem : public CObject
  39. {
  40. DECLARE_DYNCREATE(CLinkedListItem)
  41. public:
  42. CLinkedListItem();
  43. ~CLinkedListItem();
  44. CLinkedListItem *m_Next;
  45. CLinkedListItem *m_Prev;
  46. LPVOID m_Ptr; // Data
  47. };
  48. class DLL_WAR_SOFTWARE_ CLinkedList : public CObject
  49. {
  50. DECLARE_DYNCREATE(CLinkedList)
  51. private:
  52. CLinkedListItem *m_First;
  53. CLinkedListItem *m_Last;
  54. protected:
  55. int m_NumItems; // Number of items in list
  56. public:
  57. CLinkedList();
  58. ~CLinkedList();
  59. virtual void Kill(); // KillAll + delete the this pointer
  60. virtual void KillAll(); // Kill all items, including the pointer.
  61. CLinkedListItem *First();
  62. CLinkedListItem *Last();
  63. LPVOID FirstPtr();
  64. LPVOID LastPtr();
  65. LPVOID Ptr(CLinkedListItem *Item);
  66. CLinkedListItem *Next(CLinkedListItem *Item);
  67. CLinkedListItem *Prev(CLinkedListItem *Item);
  68. CLinkedListItem *FindPtr(LPVOID Ptr);
  69. BOOL DeletePtr(LPVOID Ptr);
  70. void DeleteItem(CLinkedListItem *Item);
  71. void AddFirst(LPVOID Ptr);
  72. void AddLast(LPVOID Ptr);
  73. void AddPtr(CLinkedListItem *Next, CLinkedListItem *Prev, LPVOID Ptr);
  74. LPVOID GetAndDeleteFirst();
  75. LPVOID GetAndDeleteLast();
  76. void Sort(int (*SortFunc)(const void *, const void *));
  77. int GetItemCount() {return m_NumItems;}
  78. void Empty();
  79. void Cat(CLinkedList& List);
  80. void operator = (CLinkedList &List);
  81. void operator += (CLinkedList &List) {Cat(List);}
  82. };
  83. // Simple class to store a number of items, and trash the oldest whhen
  84. // the number is reached.
  85. class DLL_WAR_SOFTWARE_ CHistory : public CLinkedList
  86. {
  87. public:
  88. void Add(LPVOID Ptr, int MaxItems, BOOL DeletePtr = TRUE);
  89. void Add(LPCSTR Ptr, int MaxItems);
  90. virtual void KillAll(); // Kill all items, including the pointer.
  91. };
  92. // Support class for CLookupList
  93. class CLookupListItem : public CObject
  94. {
  95. public:
  96. LPSTR m_Name;
  97. DWORD m_Number;
  98. LPVOID m_Ptr;
  99. int m_DataType;
  100. public:
  101. CLookupListItem(LPVOID Ptr, DWORD NumSymbol, LPCSTR TextSymbol, int DataType);
  102. ~CLookupListItem();
  103. LPVOID Ptr() {return m_Ptr;}
  104. LPCSTR GetData(CString& cBuf);
  105. };
  106. // Simple class to store a pointer together with a name and a number that can
  107. // be used for lookup.
  108. class DLL_WAR_SOFTWARE_ CLookupList
  109. {
  110. private:
  111. CLinkedList m_List;
  112. public:
  113. ~CLookupList();
  114. void AddItem(LPVOID Ptr, DWORD NumSymbol, LPCSTR TextSymbol, int DataType);
  115. LPVOID Find(DWORD NumSymbol, LPCSTR TextSymbol);
  116. void DeleteItem(DWORD NumSymbol, LPCSTR TextSymbol);
  117. CLinkedListItem *First();
  118. CLinkedListItem *Next(CLinkedListItem *Item);
  119. CLookupListItem *LookupPtr(CLinkedListItem *Item);
  120. LPVOID Ptr(CLookupListItem *LookupItem);
  121. LPVOID Ptr(CLinkedListItem *LookupItem);
  122. LPCSTR GetData(CLinkedListItem *LookupItem, CString& cBuf);
  123. LPCSTR GetData(CLookupListItem *LookupItem, CString& cBuf);
  124. CLinkedListItem *FindItem(DWORD NumSymbol, LPCSTR TextSymbol);
  125. void KillAll();
  126. };
  127. ////////////////////////////////////////////////////////////////////////////////
  128. // Timer functions
  129. // CWarTimer
  130. // Used to test for millisecond based timers
  131. class DLL_WAR_SOFTWARE_ CWarTimer
  132. {
  133. public:
  134. DWORD m_TimerVal;
  135. public:
  136. CWarTimer(); // Initializes to current system tick
  137. void Reset(); // Set the internal value to current system tick
  138. BOOL TimeOut(DWORD Milliseconds); // Check for timeout
  139. DWORD TimeDiff(); // Difference in ms between the stored and the current time
  140. DWORD TimeDiff(DWORD Milliseconds); // // Difference in ms between the stored and the given time
  141. DWORD TimeLeft(DWORD Milliseconds); // Time left before timeout in ms
  142. };
  143. ////////////////////////////////////////////////////////////////////////////////
  144. // System query functions
  145. DLL_WAR_SOFTWARE_ BOOL IsNT();
  146. DLL_WAR_SOFTWARE_ LPCSTR OsName();
  147. DLL_WAR_SOFTWARE_ BOOL HasShell();
  148. ////////////////////////////////////////////////////////////////////////////////
  149. // CString derived class to handle va_list argList
  150. class DLL_WAR_SOFTWARE_ CWarString : public CString
  151. {
  152. public:
  153. void FormatVaList(LPCTSTR lpszFormat, va_list argList);
  154. void FormatCat(LPCTSTR lpszFormat, ...);
  155. int FormatCatV(LPCTSTR lpszFormat, va_list argList);
  156. };
  157. ////////////////////////////////////////////////////////////////////////////////
  158. // Safe string array
  159. DLL_WAR_SOFTWARE_ LPCSTR SafeStringIndexExp(LPCSTR File, int Line, LPCSTR *StrIndex, int Index, int Limit);
  160. #define SafeStringIndex(StrIndex, Index, Limit)
  161. SafeStringIndexExp(__FILE__, __LINE__, (LPCSTR *)StrIndex, Index, Limit)
  162. ////////////////////////////////////////////////////////////////////////////////
  163. // CCmdArgs
  164. // Used to handle command line arguments to other modules,
  165. // and arguments from the parser.
  166. class DLL_WAR_SOFTWARE_ CCmdArgs : public CObject
  167. {
  168. public:
  169. int m_argc;
  170. LPSTR *m_argv;
  171. int m_argc_max;
  172. BOOL IsReInitialized;
  173. public:
  174. CCmdArgs();
  175. CCmdArgs(LPCSTR Name, LPCSTR CommandLine, CCommandParser& Parser);
  176. ~CCmdArgs();
  177. void AssertValid();
  178. LPCSTR AddArg(LPCSTR Arg, int Len = 0);
  179. LPCSTR Arg(int Index);
  180. void PrepereNew();
  181. LPCSTR Insert(int Index, LPCSTR Arg, int Len = 0);
  182. LPCSTR Replace(int Index, LPCSTR Arg, int Len = 0);
  183. int operator = (CCmdArgs& Arg);
  184. LPCSTR operator [] (int n) {return Arg(n); }
  185. void operator += (LPCSTR Str) {AddArg(Str); }
  186. private:
  187. void Empty();
  188. void Initialize();
  189. void Check();
  190. };
  191. ////////////////////////////////////////////////////////////////////////////////
  192. // GetData() - return pointer (or value) for use in printf.
  193. // Returns a copy of the data stored in cBuf.
  194. DLL_WAR_SOFTWARE_ LPCSTR GetData(LPVOID Ptr, int DataType, CString& cBuf);
  195. DLL_WAR_SOFTWARE_ BOOL PutData(LPVOID Ptr, int DataType, LPCSTR Value);
  196. ////////////////////////////////////////////////////////////////////////////////
  197. // GetlastErrorText()
  198. DLL_WAR_SOFTWARE_ CString GetLastErrorText();
  199. DLL_WAR_SOFTWARE_ CString GetLastErrorText(int Errno);
  200. ////////////////////////////////////////////////////////////////////////////////
  201. // MySscanf()
  202. DLL_WAR_SOFTWARE_ int MySscanf(LPCSTR buf, LPCSTR Format, ...);
  203. ////////////////////////////////////////////////////////////////////////////////
  204. // PatternMatchesName()
  205. DLL_WAR_SOFTWARE_ BOOL PatternMatchesName(LPCSTR OrgName, LPCSTR Pattern);
  206. ////////////////////////////////////////////////////////////////////////////////
  207. // LoadString()
  208. DLL_WAR_SOFTWARE_ LPCSTR LoadString(UINT nID, CString& cBuf);
  209. ////////////////////////////////////////////////////////////////////////////////
  210. // LoGetLineParam()
  211. DLL_WAR_SOFTWARE_ LPCSTR GetLineParam(LPCSTR Tag, CString &cValue, LPCSTR Default);
  212. ////////////////////////////////////////////////////////////////////////////////
  213. // ExpandStringMacros()
  214. class CDaemonStatus;
  215. DLL_WAR_SOFTWARE_ LPCSTR ExpandStringMacros(LPCSTR Str, CString& cValue, CDaemonStatus *Stat = NULL);
  216. ////////////////////////////////////////////////////////////////////////////////
  217. // ExpandStringMacros()
  218. DLL_WAR_SOFTWARE_ BOOL ExpandPath(LPCSTR Path);
  219. ////////////////////////////////////////////////////////////////////////////////
  220. // GetFreeDiskSpace
  221. DLL_WAR_SOFTWARE_ __int64 GetFreeDiskSpace(LPCSTR Path);
  222. ////////////////////////////////////////////////////////////////////////////////
  223. // Get the starrtup dir
  224. DLL_WAR_SOFTWARE_ CString GetStartupPath();
  225. ////////////////////////////////////////////////////////////////////////////////
  226. // Time conversion
  227. DLL_WAR_SOFTWARE_ __int64 CTimeToDate(const CTime& ct);
  228. DLL_WAR_SOFTWARE_ __int64 FiletimeToDate(const FILETIME& ft);
  229. DLL_WAR_SOFTWARE_ CTime DateToCTime(const __int64 dt);
  230. DLL_WAR_SOFTWARE_ FILETIME DateToFiletime(const __int64 dt);
  231. DLL_WAR_SOFTWARE_ int GetMonthFromLiteral(LPCSTR Month);
  232. ////////////////////////////////////////////////////////////////////////////////
  233. // Prepere a string for multiline windows display
  234. DLL_WAR_SOFTWARE_ CString PrepereForWnd(LPCSTR Text);
  235. ////////////////////////////////////////////////////////////////////////////////
  236. // Map the string so that sprintf( str) can be called
  237. DLL_WAR_SOFTWARE_ CString MapStringValid(LPCSTR Text);
  238. ////////////////////////////////////////////////////////////////////////////////
  239. // Does a buffer contain more than one line of text?
  240. DLL_WAR_SOFTWARE_ BOOL IsMultiline(LPCSTR Text);
  241. #endif __MISCSUPPORTH