ROAMap.cpp
上传用户:tianheyiqi
上传日期:2010-04-16
资源大小:282k
文件大小:3k
源码类别:

外挂编程

开发平台:

Visual C++

  1. // ROAMap.cpp: implementation of the CROAMap class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "ROA.h"
  6. #include "ROAMap.h"
  7. #ifdef _DEBUG
  8. #undef THIS_FILE
  9. static char THIS_FILE[]=__FILE__;
  10. #define new DEBUG_NEW
  11. #endif
  12. //////////////////////////////////////////////////////////////////////
  13. // Construction/Destruction
  14. //////////////////////////////////////////////////////////////////////
  15. CROAMap::CROAMap()
  16. {
  17. m_bInited = false;
  18. }
  19. CROAMap::~CROAMap()
  20. {
  21. }
  22. BOOL CROAMap::init(LPCTSTR lpszFilename, LPCTSTR lpszAlias)
  23. {
  24. CFile file;
  25. CString strRead;
  26. CString strKey, strValue;
  27. BOOL bRtn = false;
  28. int nCount = 0;
  29. m_strAlias = lpszAlias;
  30. do
  31. {
  32. if(!file.Open(lpszFilename, CFile::modeRead))
  33. {
  34. break;
  35. }
  36. CArchive arc(&file, CArchive::load);
  37. while(arc.ReadString(strRead))
  38. {
  39. strRead.TrimLeft();
  40. strRead.TrimRight();
  41. if(strRead.IsEmpty() || strRead[0] == '#')
  42. continue;
  43. switch(strRead[0])
  44. {
  45. case '*':
  46. strKey.Format(_T("%d"), nCount);
  47. strValue = strRead.Mid(1);
  48. break;
  49. case '&':
  50. strKey = strRead.Mid(1);
  51. strValue = _T("DUMMY");
  52. break;
  53. default:
  54. strKey = strRead.Left(strRead.Find(' '));
  55. strValue = strRead.Mid(strRead.Find(' ')+1);
  56. break;
  57. }
  58. strKey.MakeLower();
  59. strValue.MakeLower();
  60. strValue.TrimLeft();
  61. strValue.TrimRight();
  62. SetAt(strKey, strValue);
  63. bRtn = true;
  64. m_bInited = true;
  65. nCount++;
  66. }
  67. arc.Close();
  68. file.Close();
  69. }while(0);
  70. return(bRtn);
  71. }
  72. CString CROAMap::FindValue(LPCTSTR lpszKey, int nSection, BOOL *pFound)
  73. {
  74. CString strRtn = "Not inited!";
  75. CString strTemp;
  76. int nPos;
  77. strTemp.MakeLower();
  78. if(pFound)
  79. *pFound = true;
  80. if(m_bInited)
  81. {
  82. if(!Lookup(lpszKey, strRtn))
  83. {
  84. strRtn = "δ֪" + m_strAlias;
  85. if(pFound)
  86. *pFound = false;
  87. }
  88. if(-1 != nSection)
  89. {
  90. for(int i=0; i<nSection; i++)
  91. {
  92. nPos = strRtn.Find(" ");
  93. if(-1 != nPos)
  94. {
  95. strRtn = strRtn.Mid(nPos+1);
  96. strRtn.TrimLeft();
  97. }
  98. else
  99. {
  100. break;
  101. }
  102. }
  103. if(i >= nSection)
  104. {
  105. nPos = strRtn.Find(" ");
  106. if(-1 != nPos)
  107. {
  108. strRtn = strRtn.Left(nPos);
  109. }
  110. }
  111. else
  112. {
  113. strRtn.Empty();
  114. }
  115. }
  116. }
  117. strRtn.TrimLeft();
  118. strRtn.TrimRight();
  119. return(strRtn);
  120. }
  121. CString CROAMap::FindValue(DWORD dwKey, int nSection, BOOL *pFound)
  122. {
  123. CString strTemp;
  124. strTemp.Format("%d", dwKey);
  125. return(FindValue(strTemp, nSection, pFound));
  126. }