[
  {
    "path": ".github/workflows/blackmoon_krnln.yml",
    "content": "name: BlackMoon Krnln\r\n\r\non:\r\n  push:\r\n    branches: [master]\r\n  pull_request:\r\n    branches: [master]\r\n\r\njobs:\r\n  bmkrnln-debug-win32:\r\n    runs-on: windows-latest\r\n    steps:\r\n      - uses: actions/checkout@v2\r\n\r\n      # Add msuild to local environment\r\n      - name: Add msbuild to PATH\r\n        uses: microsoft/setup-msbuild@v1.0.2\r\n\r\n      # Test build\r\n      - name: Build BlackMoon Krnln\r\n        run: msbuild Project/krnln_VS2019.vcxproj /p:configuration=debug /p:platform=win32 -maxcpucount:4\r\n\r\n  bmkrnln-release-win32:\r\n    runs-on: windows-latest\r\n    steps:\r\n      - uses: actions/checkout@v2\r\n\r\n      # Add msuild to local environment\r\n      - name: Add msbuild to PATH\r\n        uses: microsoft/setup-msbuild@v1.0.2\r\n\r\n      # Test build\r\n      - name: Build BlackMoon Krnln\r\n        run: msbuild Project/krnln_VS2019.vcxproj /p:configuration=release /p:platform=win32 -maxcpucount:4\r\n"
  },
  {
    "path": ".github/workflows/blackmoon_krnlnobj.yml",
    "content": "name: BlackMoon Krnln OBJ\r\n\r\non:\r\n  push:\r\n    branches: [master]\r\n  pull_request:\r\n    branches: [master]\r\n\r\njobs:\r\n  bmkrobj-debug-win32:\r\n    runs-on: windows-latest\r\n    steps:\r\n      - uses: actions/checkout@v2\r\n\r\n      # Add msuild to local environment\r\n      - name: Add msbuild to PATH\r\n        uses: microsoft/setup-msbuild@v1.0.2\r\n\r\n      # Test build\r\n      - name: Build BlackMoon Krnln OBJ\r\n        run: msbuild Project/krnln_VS2019_Obj.vcxproj /p:configuration=debug /p:platform=win32 -maxcpucount:4\r\n\r\n  bmkrobj-release-win32:\r\n    runs-on: windows-latest\r\n    steps:\r\n      - uses: actions/checkout@v2\r\n\r\n      # Add msuild to local environment\r\n      - name: Add msbuild to PATH\r\n        uses: microsoft/setup-msbuild@v1.0.2\r\n\r\n      # Test build\r\n      - name: Build BlackMoon Krnln OBJ\r\n        run: msbuild Project/krnln_VS2019_Obj.vcxproj /p:configuration=release /p:platform=win32 -maxcpucount:4\r\n"
  },
  {
    "path": ".github/workflows/blackmoon_mfc.yml",
    "content": "name: BlackMoon MFC\r\n\r\non:\r\n  push:\r\n    branches: [master]\r\n  pull_request:\r\n    branches: [master]\r\n\r\njobs:\r\n  bmmfc-debug-win32:\r\n    runs-on: windows-latest\r\n    steps:\r\n      - uses: actions/checkout@v2\r\n\r\n      # Add msuild to local environment\r\n      - name: Add msbuild to PATH\r\n        uses: microsoft/setup-msbuild@v1.0.2\r\n\r\n      # Test build\r\n      - name: Build BlackMoon MFC\r\n        run: msbuild Project/MFCBlackMoon_VS2019.vcxproj /p:configuration=debug /p:platform=win32 -maxcpucount:4\r\n\r\n  bmmfc-release-win32:\r\n    runs-on: windows-latest\r\n    steps:\r\n      - uses: actions/checkout@v2\r\n\r\n      # Add msuild to local environment\r\n      - name: Add msbuild to PATH\r\n        uses: microsoft/setup-msbuild@v1.0.2\r\n\r\n      # Test build\r\n      - name: Build BlackMoon MFC\r\n        run: msbuild Project/MFCBlackMoon_VS2019.vcxproj /p:configuration=release /p:platform=win32 -maxcpucount:4\r\n"
  },
  {
    "path": ".gitignore",
    "content": "*.ncb\n*.opt\n*.plg\n*.suo\n.vs/*\nRelease/*\nDebug/*\nProject/krnln_VS2005.vcproj.*\nProject/krnln_VS2005_Obj.vcproj.*\nProject/*.plg\nProject/Release/*\nProject/ReleaseDll/*\nProject/Debug/*\n"
  },
  {
    "path": "LICENSE",
    "content": "BSD 3-Clause License\r\n\r\nCopyright (c) 2019, 钟建华\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are met:\r\n\r\n* Redistributions of source code must retain the above copyright notice, this\r\n  list of conditions and the following disclaimer.\r\n\r\n* Redistributions in binary form must reproduce the above copyright notice,\r\n  this list of conditions and the following disclaimer in the documentation\r\n  and/or other materials provided with the distribution.\r\n\r\n* Neither the name of the copyright holder nor the names of its\r\n  contributors may be used to endorse or promote products derived from\r\n  this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n"
  },
  {
    "path": "MFCObj/BlackMoonMFCdll.cpp",
    "content": "\r\n#include \"stdafx.h\"\r\n#include \"EyMFCComInit.h\"\r\n//#define _EDLLMAIN\r\n#ifdef _DEBUG\r\n#define new DEBUG_NEW\r\n#undef THIS_FILE\r\nstatic char THIS_FILE[] = __FILE__;\r\n#endif\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n// CMFCBlackMoonDLLApp\r\n\r\nBEGIN_MESSAGE_MAP(CMFCBlackMoonDLLApp, CWinApp)\r\n\t//{{AFX_MSG_MAP(CMFCBlackMoonDLLApp)\r\n\t\t// NOTE - the ClassWizard will add and remove mapping macros here.\r\n\t\t//    DO NOT EDIT what you see in these blocks of generated code!\r\n\t//}}AFX_MSG_MAP\r\nEND_MESSAGE_MAP()\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n// CMFCBlackMoonDLLApp construction\r\n\r\nCMFCBlackMoonDLLApp::CMFCBlackMoonDLLApp()\r\n{\r\n\t// TODO: add construction code here,\r\n\t// Place all significant initialization in InitInstance\r\n}\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n// The one and only CMFCBlackMoonDLLApp object\r\n#pragma comment(lib, \"nafxcw.lib\")\r\nCMFCBlackMoonDLLApp theApp;\r\n\r\ntypedef void (*PDESTROY)(void);\r\nPDESTROY DllEntryFunc();\r\nextern HANDLE hBlackMoonInstanceHandle;\r\nextern \"C\" PDESTROY DestroyAddress;\r\nextern \"C\" {\r\n\t//PDESTROY ECodeStart();\r\n\tvoid  _cdecl E_Init();\r\n\tvoid  _cdecl E_DestroyRes();\r\n#ifdef _EDLLMAIN\r\n\tint __stdcall EDllMain( HANDLE hModule, \r\n                       DWORD  ul_reason_for_call, \r\n                       LPVOID lpReserved\r\n\t\t\t\t\t );\r\n#endif\r\n}\r\nINT nBMProtectESP = 0;\r\nINT nBMProtectEBP = 0;\r\nBOOL CMFCBlackMoonDLLApp::InitInstance() \r\n{\r\n\t// TODO: Add your specialized code here and/or call the base class\r\n\t//MessageBox(NULL,\"I am MfcBlackMoon\",\"DLL\",MB_OK);\r\n\thBlackMoonInstanceHandle = m_hInstance;\r\n\tE_Init();\r\n\tDestroyAddress = DllEntryFunc();\r\n\t\r\n#ifdef _EDLLMAIN\r\n\tint nRet = EDllMain(m_hInstance,DLL_PROCESS_ATTACH,0);\r\n\tif(nRet==0)\r\n\t\treturn nRet;\r\n#endif\r\n\t\r\n\r\n\r\n\treturn CWinApp::InitInstance();\r\n}\r\n\r\nint CMFCBlackMoonDLLApp::ExitInstance() \r\n{\r\n\t// TODO: Add your specialized code here and/or call the base class\r\n#ifdef _EDLLMAIN\r\n\tint nRet = EDllMain(m_hInstance,DLL_PROCESS_DETACH,0);\r\n#endif\r\n\tE_DestroyRes();\r\n\t\r\n\treturn CWinApp::ExitInstance();\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "MFCObj/EyMFCComInit.cpp",
    "content": "#include \"stdafx.h\"\r\ntypedef void (*PDESTROY)(void);\r\nextern \"C\" PDESTROY DestroyAddress;\r\n\r\nextern \"C\" PDESTROY HFileDestroyAddress;\r\n\r\nextern \"C\" PDESTROY DestroyMidiPlayer;\r\n\r\nextern \"C\" HANDLE hBlackMoonHeap;\r\n\r\nvoid BlackMoonInitAllElib();\r\nvoid BlackMoonFreeAllElib();\r\n\r\nextern \"C\" {\r\n\r\n\r\n\tvoid  _cdecl E_Init(){\r\n\t\thBlackMoonHeap =::GetProcessHeap();\r\n\t\tAfxOleInit();\r\n\t\tCoInitialize(0);\r\n\t\tBlackMoonInitAllElib();\r\n\t}\r\n\r\n\tvoid  _cdecl E_DestroyRes(){\r\n\t\t\r\n\t\tif(DestroyAddress)\r\n\t\t\tDestroyAddress();\r\n\r\n\t\tif(HFileDestroyAddress)\r\n\t\t\tHFileDestroyAddress();\r\n\r\n\t\tif(DestroyMidiPlayer)\r\n\t\t\tDestroyMidiPlayer();\r\n\t\tBlackMoonFreeAllElib();\r\n\t\t//CoUninitialize();\r\n\t}\r\n\r\n\r\n}"
  },
  {
    "path": "MFCObj/EyMFCComInit.h",
    "content": "#if !defined(AFX_MFCBLACKMOON_H__66A6D0ED_F1AB_4149_9834_F05CAE45D193__INCLUDED_)\r\n#define AFX_MFCBLACKMOON_H__66A6D0ED_F1AB_4149_9834_F05CAE45D193__INCLUDED_\r\n\r\n#if _MSC_VER > 1000\r\n#pragma once\r\n#endif // _MSC_VER > 1000\r\n\r\n#ifndef __AFXWIN_H__\r\n\t#error include 'stdafx.h' before including this file for PCH\r\n#endif\r\n\r\n#include \"resource.h\"\t\t// main symbols\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n// CMFCBlackMoonApp\r\n// See MFCBlackMoon.cpp for the implementation of this class\r\n//\r\n\r\nclass CMFCBlackMoonDLLApp : public CWinApp\r\n{\r\npublic:\r\n\tCMFCBlackMoonDLLApp();\r\n\r\n// Overrides\r\n\t// ClassWizard generated virtual function overrides\r\n\t//{{AFX_VIRTUAL(CMFCBlackMoonDLLApp)\r\n\tpublic:\r\n\tvirtual BOOL InitInstance();\r\n\tvirtual int ExitInstance();\r\n\t//}}AFX_VIRTUAL\r\n\r\n\t//{{AFX_MSG(CMFCBlackMoonDLLApp)\r\n\t\t// NOTE - the ClassWizard will add and remove member functions here.\r\n\t\t//    DO NOT EDIT what you see in these blocks of generated code !\r\n\t//}}AFX_MSG\r\n\tDECLARE_MESSAGE_MAP()\r\n};\r\n\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n\r\n//{{AFX_INSERT_LOCATION}}\r\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r\n\r\n#endif // !defined(AFX_MFCBLACKMOON_H__66A6D0ED_F1AB_4149_9834_F05CAE45D193__INCLUDED_)\r\n"
  },
  {
    "path": "MFCObj/MFCBlackMoon.cpp",
    "content": "// MFCBlackMoon.cpp : Defines the initialization routines for the DLL.\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"MFCBlackMoon.h\"\r\n\r\n#ifdef _DEBUG\r\n#define new DEBUG_NEW\r\n#undef THIS_FILE\r\nstatic char THIS_FILE[] = __FILE__;\r\n#endif\r\n\r\n//\r\n//\tNote!\r\n//\r\n//\t\tIf this DLL is dynamically linked against the MFC\r\n//\t\tDLLs, any functions exported from this DLL which\r\n//\t\tcall into MFC must have the AFX_MANAGE_STATE macro\r\n//\t\tadded at the very beginning of the function.\r\n//\r\n//\t\tFor example:\r\n//\r\n//\t\textern \"C\" BOOL PASCAL EXPORT ExportedFunction()\r\n//\t\t{\r\n//\t\t\tAFX_MANAGE_STATE(AfxGetStaticModuleState());\r\n//\t\t\t// normal function body here\r\n//\t\t}\r\n//\r\n//\t\tIt is very important that this macro appear in each\r\n//\t\tfunction, prior to any calls into MFC.  This means that\r\n//\t\tit must appear as the first statement within the \r\n//\t\tfunction, even before any object variable declarations\r\n//\t\tas their constructors may generate calls into the MFC\r\n//\t\tDLL.\r\n//\r\n//\t\tPlease see MFC Technical Notes 33 and 58 for additional\r\n//\t\tdetails.\r\n//\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n// CMFCBlackMoonApp\r\n\r\nBEGIN_MESSAGE_MAP(CMFCBlackMoonApp, CWinApp)\r\n\t//{{AFX_MSG_MAP(CMFCBlackMoonApp)\r\n\t\t// NOTE - the ClassWizard will add and remove mapping macros here.\r\n\t\t//    DO NOT EDIT what you see in these blocks of generated code!\r\n\t//}}AFX_MSG_MAP\r\nEND_MESSAGE_MAP()\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n// CMFCBlackMoonApp construction\r\n\r\nCMFCBlackMoonApp::CMFCBlackMoonApp()\r\n{\r\n\t// TODO: add construction code here,\r\n\t// Place all significant initialization in InitInstance\r\n}\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n// The one and only CMFCBlackMoonApp object\r\n//#pragma comment(lib, \"nafxcw.lib\")\r\nCMFCBlackMoonApp theApp;\r\nextern \"C\" {\r\n\tint ECodeStart();\r\n\tvoid  _cdecl E_Init();\r\n}\r\nINT nBMProtectESP = 0;\r\nINT nBMProtectEBP = 0;\r\nBOOL CMFCBlackMoonApp::InitInstance() \r\n{\r\n\t// TODO: Add your specialized code here and/or call the base class\r\n//\tMessageBox(NULL,\"I am MfcBlackMoon\",\"NULL\",MB_OK);\r\n\t\tE_Init();\r\n\t\tint nRet;\r\n//\t\tint nRet = ECodeStart();\r\n\t\t_asm{\r\n\t\t\tmov nBMProtectESP,esp;\r\n\t\t\tmov nBMProtectEBP,ebp;\r\n\t\t\tcall ECodeStart;\r\n\t\t\tmov nRet,eax;\r\n\r\n\t\t}\r\n\treturn CWinApp::InitInstance();\r\n}\r\n\r\n\r\n\r\n"
  },
  {
    "path": "MFCObj/MFCBlackMoon.def",
    "content": "; MFCBlackMoon.def : Declares the module parameters for the DLL.\r\n\r\nLIBRARY      \"MFCBlackMoon\"\r\nDESCRIPTION  'MFCBlackMoon Windows Dynamic Link Library'\r\n\r\nEXPORTS\r\n    ; Explicit exports can go here\r\n"
  },
  {
    "path": "MFCObj/MFCBlackMoon.h",
    "content": "// MFCBlackMoon.h : main header file for the MFCBLACKMOON DLL\r\n//\r\n\r\n#if !defined(AFX_MFCBLACKMOON_H__66A6D0ED_F1AB_4149_9834_F05CAE45D193__INCLUDED_)\r\n#define AFX_MFCBLACKMOON_H__66A6D0ED_F1AB_4149_9834_F05CAE45D193__INCLUDED_\r\n\r\n#if _MSC_VER > 1000\r\n#pragma once\r\n#endif // _MSC_VER > 1000\r\n\r\n#ifndef __AFXWIN_H__\r\n\t#error include 'stdafx.h' before including this file for PCH\r\n#endif\r\n\r\n#include \"resource.h\"\t\t// main symbols\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n// CMFCBlackMoonApp\r\n// See MFCBlackMoon.cpp for the implementation of this class\r\n//\r\n\r\nclass CMFCBlackMoonApp : public CWinApp\r\n{\r\npublic:\r\n\tCMFCBlackMoonApp();\r\n\r\n// Overrides\r\n\t// ClassWizard generated virtual function overrides\r\n\t//{{AFX_VIRTUAL(CMFCBlackMoonApp)\r\n\tpublic:\r\n\tvirtual BOOL InitInstance();\r\n\r\n\t//}}AFX_VIRTUAL\r\n\r\n\t//{{AFX_MSG(CMFCBlackMoonApp)\r\n\t\t// NOTE - the ClassWizard will add and remove member functions here.\r\n\t\t//    DO NOT EDIT what you see in these blocks of generated code !\r\n\t//}}AFX_MSG\r\n\tDECLARE_MESSAGE_MAP()\r\n};\r\n\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n\r\n//{{AFX_INSERT_LOCATION}}\r\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r\n\r\n#endif // !defined(AFX_MFCBLACKMOON_H__66A6D0ED_F1AB_4149_9834_F05CAE45D193__INCLUDED_)\r\n"
  },
  {
    "path": "MFCObj/MFCBlackMoon.rc",
    "content": "// Microsoft Visual C++ generated resource script.\r\n//\r\n#include \"resource.h\"\r\n\r\n#define APSTUDIO_READONLY_SYMBOLS\r\n/////////////////////////////////////////////////////////////////////////////\r\n//\r\n// Generated from the TEXTINCLUDE 2 resource.\r\n//\r\n#include \"afxres.h\"\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n#undef APSTUDIO_READONLY_SYMBOLS\r\n\r\n#ifdef APSTUDIO_INVOKED\r\n/////////////////////////////////////////////////////////////////////////////\r\n//\r\n// TEXTINCLUDE\r\n//\r\n\r\n1 TEXTINCLUDE DISCARDABLE \r\nBEGIN\r\n    \"resource.h\\0\"\r\nEND\r\n\r\n2 TEXTINCLUDE DISCARDABLE \r\nBEGIN\r\n    \"#include \"\"afxres.h\"\"\\r\\n\"\r\n    \"\\0\"\r\nEND\r\n\r\n3 TEXTINCLUDE DISCARDABLE \r\nBEGIN\r\n    \"#define _AFX_NO_SPLITTER_RESOURCES\\r\\n\"\r\n    \"#define _AFX_NO_OLE_RESOURCES\\r\\n\"\r\n    \"#define _AFX_NO_TRACKER_RESOURCES\\r\\n\"\r\n    \"#define _AFX_NO_PROPERTY_RESOURCES\\r\\n\"\r\n\t\"\\r\\n\"\r\n\t\"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\\r\\n\"\r\n\t\"#ifdef _WIN32\\r\\n\"\r\n\t\"LANGUAGE 4, 2\\r\\n\"\r\n\t\"#pragma code_page(936)\\r\\n\"\r\n\t\"#endif //_WIN32\\r\\n\"\r\n\t\"#include \"\"res\\\\MFCBlackMoon.rc2\"\"  // non-Microsoft Visual C++ edited resources\\r\\n\"\r\n\t\"#include \"\"l.chs\\\\afxres.rc\"\"  \t// Standard components\\r\\n\"\r\n\t\"#endif\\r\\n\"\r\n    \"\\0\"\r\nEND\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n#endif    // APSTUDIO_INVOKED\r\n\r\n\r\n\r\n\r\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\r\n#ifdef _WIN32\r\nLANGUAGE 4, 2\r\n#pragma code_page(936)\r\n#endif //_WIN32\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n//\r\n// Version\r\n//\r\n\r\nVS_VERSION_INFO     VERSIONINFO\r\n  FILEVERSION       1,0,0,1\r\n  PRODUCTVERSION    1,0,0,1\r\n FILEFLAGSMASK 0x3fL\r\n#ifdef _DEBUG\r\n FILEFLAGS 0x1L\r\n#else\r\n FILEFLAGS 0x0L\r\n#endif\r\n FILEOS 0x4L\r\n FILETYPE 0x2L\r\n FILESUBTYPE 0x0L\r\nBEGIN\r\n\tBLOCK \"StringFileInfo\"\r\n\tBEGIN\r\n        BLOCK \"080404B0\"\r\n\t\tBEGIN \r\n\t\t\tVALUE \"CompanyName\",     \"\\0\"\r\n\t\t\tVALUE \"FileDescription\", \"MFCBlackMoon DLL\\0\"\r\n\t\t\tVALUE \"FileVersion\",     \"1, 0, 0, 1\\0\"\r\n\t\t\tVALUE \"InternalName\",    \"MFCBlackMoon\\0\"\r\n\t\t\tVALUE \"LegalCopyright\",  \"Ȩ (C) 2013\\0\"\r\n\t\t\tVALUE \"LegalTrademarks\", \"\\0\"\r\n\t\t\tVALUE \"OriginalFilename\",\"MFCBlackMoon.DLL\\0\"\r\n\t\t\tVALUE \"ProductName\",     \"MFCBlackMoon Dynamic Link Library\\0\"\r\n\t\t\tVALUE \"ProductVersion\",  \"1, 0, 0, 1\\0\"\r\n\t\tEND\r\n\tEND\r\n\tBLOCK \"VarFileInfo\" \r\n\tBEGIN \r\n\t\tVALUE \"Translation\", 0x0804, 1200\r\n    END\r\nEND\r\n\r\n#endif\r\n\r\n#ifndef APSTUDIO_INVOKED\r\n/////////////////////////////////////////////////////////////////////////////\r\n//\r\n// Generated from the TEXTINCLUDE 3 resource.\r\n//\r\n#define _AFX_NO_SPLITTER_RESOURCES\r\n#define _AFX_NO_OLE_RESOURCES\r\n#define _AFX_NO_TRACKER_RESOURCES\r\n#define _AFX_NO_PROPERTY_RESOURCES\r\n\r\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\r\n#ifdef _WIN32\r\nLANGUAGE 4, 2\r\n#pragma code_page(936)\r\n#endif //_WIN32\r\n#include \"res\\\\MFCBlackMoon.rc2\"  // non-Microsoft Visual C++ edited resources\r\n#include \"l.chs\\\\afxres.rc\"  \t// Standard components\r\n#endif\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n#endif    // not APSTUDIO_INVOKED\r\n\r\n"
  },
  {
    "path": "MFCObj/MFCBlackMoonCon.cpp",
    "content": "// test.cpp : Defines the entry point for the console application.\r\n//\r\n#include \"stdafx.h\"\r\n#include <iostream>\r\n\r\n#ifdef _DEBUG\r\n#define new DEBUG_NEW\r\n#undef THIS_FILE\r\nstatic char THIS_FILE[] = __FILE__;\r\n#endif\r\n\r\n#pragma comment(lib, \"nafxcw.lib\")\r\n\r\nextern \"C\" {\r\n\tint ECodeStart();\r\n\tvoid  _cdecl E_Init();\r\n}\r\n/////////////////////////////////////////////////////////////////////////////\r\n// The one and only application object\r\nextern \"C\" int ECodeStart();\r\n//BOOL bIsEnterFromBMEntrypoint = FALSE;\r\nINT nBMProtectESP = 0;\r\nINT nBMProtectEBP = 0;\r\n\r\nCWinApp;\r\n\r\nusing namespace std;\r\n\r\nint _tmain(int argc, TCHAR* argv[], TCHAR* envp[])\r\n{\r\n\tint nRetCode = 0;\r\n\t// initialize MFC and print and error on failure\r\n\tif (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))\r\n\t{\r\n\t\t// TODO: change error code to suit your needs\r\n\t\tcerr << _T(\"Fatal Error: MFC initialization failed\") << endl;\r\n\t\tnRetCode = 1;\r\n\t}\r\n\telse\r\n\t{\r\n\t\t// TODO: code your application's behavior here.\r\n\t//\tCString strHello;\r\n\t//\tstrHello=_T(\"I am MfcBlackMoon\");\r\n\t//\tcout << (LPCTSTR)strHello << endl;\r\n\r\n\t\tE_Init();\r\n\t\t//\t\tint nRet = ECodeStart();\r\n\t\t_asm{\r\n\t\t\tmov nBMProtectESP,esp;\r\n\t\t\tmov nBMProtectEBP,ebp;\r\n\t\t\tcall ECodeStart;\r\n\t\t\tmov nRetCode,eax;\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\treturn nRetCode;\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "MFCObj/Resource.h",
    "content": "//{{NO_DEPENDENCIES}}\r\n// Microsoft Visual C++ generated include file.\r\n// Used by MFCBLACKMOON.RC\r\n//\r\n\r\n// Next default values for new objects\r\n// \r\n#ifdef APSTUDIO_INVOKED\r\n#ifndef APSTUDIO_READONLY_SYMBOLS\r\n\r\n#define _APS_NEXT_RESOURCE_VALUE\t1000\r\n#define _APS_NEXT_CONTROL_VALUE\t\t1000\r\n#define _APS_NEXT_SYMED_VALUE\t\t1000\r\n#define _APS_NEXT_COMMAND_VALUE\t\t32771\r\n#endif\r\n#endif\r\n"
  },
  {
    "path": "MFCObj/StdAfx.cpp",
    "content": "// stdafx.cpp : source file that includes just the standard includes\r\n//\tMFCBlackMoon.pch will be the pre-compiled header\r\n//\tstdafx.obj will contain the pre-compiled type information\r\n\r\n#include \"stdafx.h\"\r\n\r\n\r\n\r\n"
  },
  {
    "path": "MFCObj/StdAfx.h",
    "content": "// stdafx.h : include file for standard system include files,\r\n//  or project specific include files that are used frequently, but\r\n//      are changed infrequently\r\n//\r\n\r\n#if !defined(AFX_STDAFX_H__2E3BE724_6CE0_4B24_8A39_6BCD4E07A00B__INCLUDED_)\r\n#define AFX_STDAFX_H__2E3BE724_6CE0_4B24_8A39_6BCD4E07A00B__INCLUDED_\r\n\r\n#if _MSC_VER > 1000\r\n#pragma once\r\n#endif // _MSC_VER > 1000\r\n\r\n#ifndef _WIN32_WINNT\r\n\r\n#ifdef _WIN32_WINNT_MAXVER\r\n#define _WIN32_WINNT _WIN32_WINNT_MAXVER\r\n#else\r\n#define _WIN32_WINNT 0x0502\r\n#endif\r\n\r\n#endif\r\n\r\n#define VC_EXTRALEAN\t\t// Exclude rarely-used stuff from Windows headers\r\n\r\n#include <afxwin.h>         // MFC core and standard components\r\n#include <afxext.h>         // MFC extensions\r\n\r\n#ifndef _AFX_NO_OLE_SUPPORT\r\n#include <afxole.h>         // MFC OLE classes\r\n#include <afxodlgs.h>       // MFC OLE dialog classes\r\n#include <afxdisp.h>        // MFC Automation classes\r\n#endif // _AFX_NO_OLE_SUPPORT\r\n\r\n\r\n#ifndef _AFX_NO_DB_SUPPORT\r\n#include <afxdb.h>\t\t\t// MFC ODBC database classes\r\n#endif // _AFX_NO_DB_SUPPORT\r\n\r\n#ifndef _AFX_NO_DAO_SUPPORT\r\n#include <afxdao.h>\t\t\t// MFC DAO database classes\r\n#endif // _AFX_NO_DAO_SUPPORT\r\n\r\n#include <afxdtctl.h>\t\t// MFC support for Internet Explorer 4 Common Controls\r\n#ifndef _AFX_NO_AFXCMN_SUPPORT\r\n#include <afxcmn.h>\t\t\t// MFC support for Windows Common Controls\r\n#endif // _AFX_NO_AFXCMN_SUPPORT\r\n\r\n\r\n//{{AFX_INSERT_LOCATION}}\r\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r\n\r\n#endif // !defined(AFX_STDAFX_H__2E3BE724_6CE0_4B24_8A39_6BCD4E07A00B__INCLUDED_)\r\n"
  },
  {
    "path": "MFCObj/res/MFCBlackMoon.rc2",
    "content": "//\r\n// MFCBLACKMOON.RC2 - resources Microsoft Visual C++ does not edit directly\r\n//\r\n\r\n#ifdef APSTUDIO_INVOKED\r\n\t#error this file is not editable by Microsoft Visual C++\r\n#endif //APSTUDIO_INVOKED\r\n\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n// Add manually edited resources here...\r\n\r\n/////////////////////////////////////////////////////////////////////////////\r\n"
  },
  {
    "path": "Project/MFCBlackMoon_VC6.clw",
    "content": "; CLW file contains information for the MFC ClassWizard\r\n\r\n[General Info]\r\nVersion=1\r\nClassCount=1\r\nClass1=CMFCBlackMoonApp\r\nLastClass=CMFCBlackMoonApp\r\nNewFileInclude2=#include \"..\\MFCObj\\MFCBlackMoon.h\"\r\nResourceCount=0\r\nNewFileInclude1=#include \"..\\MFCObj\\StdAfx.h\"\r\n\r\n[CLS:CMFCBlackMoonApp]\r\nType=0\r\nHeaderFile=..\\MFCObj\\MFCBlackMoon.h\r\nImplementationFile=..\\MFCObj\\MFCBlackMoon.cpp\r\nFilter=N\r\nBaseClass=CWinApp\r\nVirtualFilter=AC\r\n\r\n"
  },
  {
    "path": "Project/MFCBlackMoon_VC6.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"MFCBlackMoon\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Dynamic-Link Library\" 0x0102\r\n\r\nCFG=MFCBlackMoon - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"MFCBlackMoon_VC6.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"MFCBlackMoon_VC6.mak\" CFG=\"MFCBlackMoon - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"MFCBlackMoon - Win32 Release\" (based on \"Win32 (x86) Dynamic-Link Library\")\r\n!MESSAGE \"MFCBlackMoon - Win32 Debug\" (based on \"Win32 (x86) Dynamic-Link Library\")\r\n!MESSAGE \"MFCBlackMoon - Win32 ReleaseDLL\" (based on \"Win32 (x86) Dynamic-Link Library\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nMTL=midl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"MFCBlackMoon - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 5\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"..\\Release\"\r\n# PROP BASE Intermediate_Dir \".\\Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 5\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"..\\Release\"\r\n# PROP Intermediate_Dir \".\\Release\"\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_WINDLL\" /Yu\"stdafx.h\" /FD /c\r\n# ADD CPP /nologo /MT /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_WINDLL\" /D \"_MBCS\" /D \"_USRDLL\" /FD /D /D /c\r\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\r\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\r\n# ADD BASE RSC /l 0x804 /d \"NDEBUG\"\r\n# ADD RSC /l 0x804 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 /nologo /subsystem:windows /dll /machine:I386\r\n# ADD LINK32 /nologo /subsystem:windows /dll /machine:I386\r\n\r\n!ELSEIF  \"$(CFG)\" == \"MFCBlackMoon - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 5\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"..\\Debug\"\r\n# PROP BASE Intermediate_Dir \".\\Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 5\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"..\\Debug\"\r\n# PROP Intermediate_Dir \".\\Debug\"\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_WINDLL\" /Yu\"stdafx.h\" /FD /GZ /c\r\n# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_WINDLL\" /D \"_MBCS\" /D \"_USRDLL\" /Yu\"stdafx.h\" /FD /GZ /c\r\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\r\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\r\n# ADD BASE RSC /l 0x804 /d \"_DEBUG\"\r\n# ADD RSC /l 0x804 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept\r\n# ADD LINK32 /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept\r\n\r\n!ELSEIF  \"$(CFG)\" == \"MFCBlackMoon - Win32 ReleaseDLL\"\r\n\r\n# PROP BASE Use_MFC 5\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"..\\Release\"\r\n# PROP BASE Intermediate_Dir \".\\ReleaseDll\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 5\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"..\\Release\"\r\n# PROP Intermediate_Dir \".\\ReleaseDll\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /FD /D /D /c\r\n# ADD CPP /nologo /MT /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_WINDLL\" /D \"_MBCS\" /D \"_USRDLL\" /D \"_EDLLMAIN\" /FD /D /D /c\r\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\r\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\r\n# ADD BASE RSC /l 0x804 /d \"NDEBUG\"\r\n# ADD RSC /l 0x804 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 /nologo /subsystem:windows /dll /machine:I386\r\n# ADD LINK32 /nologo /subsystem:windows /dll /machine:I386\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"MFCBlackMoon - Win32 Release\"\r\n# Name \"MFCBlackMoon - Win32 Debug\"\r\n# Name \"MFCBlackMoon - Win32 ReleaseDLL\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=..\\MFCObj\\BlackMoonMFCdll.cpp\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\MFCObj\\EyMFCComInit.cpp\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\MFCObj\\MFCBlackMoon.cpp\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\MFCObj\\MFCBlackMoon.def\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\MFCObj\\MFCBlackMoon.rc\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\MFCObj\\MFCBlackMoonCon.cpp\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\MFCObj\\StdAfx.cpp\r\n# ADD CPP /Yc\"stdafx.h\"\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# Begin Source File\r\n\r\nSOURCE=..\\MFCObj\\EyMFCComInit.h\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\MFCObj\\MFCBlackMoon.h\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\MFCObj\\Resource.h\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\MFCObj\\StdAfx.h\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Resource Files\"\r\n\r\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\r\n# Begin Source File\r\n\r\nSOURCE=..\\MFCObj\\res\\MFCBlackMoon.rc2\r\n# End Source File\r\n# End Group\r\n# Begin Source File\r\n\r\nSOURCE=..\\ReadMe.txt\r\n# End Source File\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Project/MFCBlackMoon_VS2019.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"ReleaseDll|Win32\">\r\n      <Configuration>ReleaseDll</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"ReleaseDll|x64\">\r\n      <Configuration>ReleaseDll</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\MFCObj\\BlackMoonMFCdll.cpp\" />\r\n    <ClCompile Include=\"..\\MFCObj\\EyMFCComInit.cpp\" />\r\n    <ClCompile Include=\"..\\MFCObj\\MFCBlackMoon.cpp\" />\r\n    <ClCompile Include=\"..\\MFCObj\\MFCBlackMoonCon.cpp\" />\r\n    <ClCompile Include=\"..\\MFCObj\\StdAfx.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\MFCObj\\EyMFCComInit.h\" />\r\n    <ClInclude Include=\"..\\MFCObj\\MFCBlackMoon.h\" />\r\n    <ClInclude Include=\"..\\MFCObj\\Resource.h\" />\r\n    <ClInclude Include=\"..\\MFCObj\\StdAfx.h\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"..\\MFCObj\\MFCBlackMoon.def\" />\r\n    <None Include=\"..\\MFCObj\\res\\MFCBlackMoon.rc2\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ResourceCompile Include=\"..\\MFCObj\\MFCBlackMoon.rc\" />\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <VCProjectVersion>16.0</VCProjectVersion>\r\n    <ProjectGuid>{302FE4C1-503E-476A-AD7B-D6768D2E0158}</ProjectGuid>\r\n    <Keyword>MFCDLLProj</Keyword>\r\n    <RootNamespace>MFCBlackMoon</RootNamespace>\r\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r\n    <ProjectName>MFCBlackMoon</ProjectName>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v142</PlatformToolset>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n    <UseOfMfc>Static</UseOfMfc>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v142</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n    <UseOfMfc>Static</UseOfMfc>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDll|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v142</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n    <UseOfMfc>Static</UseOfMfc>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v142</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n    <UseOfMfc>Static</UseOfMfc>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v142</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n    <UseOfMfc>Static</UseOfMfc>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDll|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v142</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n    <UseOfMfc>Static</UseOfMfc>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"Shared\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDll|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDll|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDll|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n    <OutDir>$(SolutionDir)Release</OutDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDll|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PrecompiledHeaderFile>StdAfx.h</PrecompiledHeaderFile>\r\n      <PrecompiledHeaderOutputFile />\r\n      <WholeProgramOptimization>false</WholeProgramOptimization>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <ModuleDefinitionFile>..\\MFCObj\\MFCBlackMoon.def</ModuleDefinitionFile>\r\n    </Link>\r\n    <Midl>\r\n      <MkTypLibCompatible>false</MkTypLibCompatible>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </Midl>\r\n    <ResourceCompile>\r\n      <Culture>0x0804</Culture>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n    </ResourceCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDll|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_USRDLL;_EDLLMAIN;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PrecompiledHeaderFile>StdAfx.h</PrecompiledHeaderFile>\r\n      <PrecompiledHeaderOutputFile>\r\n      </PrecompiledHeaderOutputFile>\r\n      <WholeProgramOptimization>false</WholeProgramOptimization>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <ModuleDefinitionFile>..\\MFCObj\\MFCBlackMoon.def</ModuleDefinitionFile>\r\n    </Link>\r\n    <Midl>\r\n      <MkTypLibCompatible>false</MkTypLibCompatible>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </Midl>\r\n    <ResourceCompile>\r\n      <Culture>0x0804</Culture>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n    </ResourceCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PrecompiledHeaderFile>StdAfx.h</PrecompiledHeaderFile>\r\n      <PrecompiledHeaderOutputFile />\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <ModuleDefinitionFile>..\\MFCObj\\MFCBlackMoon.def</ModuleDefinitionFile>\r\n    </Link>\r\n    <Midl>\r\n      <MkTypLibCompatible>false</MkTypLibCompatible>\r\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </Midl>\r\n    <ResourceCompile>\r\n      <Culture>0x0804</Culture>\r\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n    </ResourceCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>_WINDOWS;_DEBUG;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <ModuleDefinitionFile>..\\MFCObj\\MFCBlackMoon.def</ModuleDefinitionFile>\r\n    </Link>\r\n    <Midl>\r\n      <MkTypLibCompatible>false</MkTypLibCompatible>\r\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </Midl>\r\n    <ResourceCompile>\r\n      <Culture>0x0804</Culture>\r\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n    </ResourceCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>_WINDOWS;NDEBUG;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <ModuleDefinitionFile>..\\MFCObj\\MFCBlackMoon.def</ModuleDefinitionFile>\r\n    </Link>\r\n    <Midl>\r\n      <MkTypLibCompatible>false</MkTypLibCompatible>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </Midl>\r\n    <ResourceCompile>\r\n      <Culture>0x0804</Culture>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n    </ResourceCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDll|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>_WINDOWS;NDEBUG;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <ModuleDefinitionFile>..\\MFCObj\\MFCBlackMoon.def</ModuleDefinitionFile>\r\n    </Link>\r\n    <Midl>\r\n      <MkTypLibCompatible>false</MkTypLibCompatible>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </Midl>\r\n    <ResourceCompile>\r\n      <Culture>0x0804</Culture>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n    </ResourceCompile>\r\n  </ItemDefinitionGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "Project/MFCBlackMoon_VS2019.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Include=\"源文件\">\r\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"头文件\">\r\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"资源文件\">\r\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r\n    </Filter>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\MFCObj\\BlackMoonMFCdll.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\MFCObj\\EyMFCComInit.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\MFCObj\\MFCBlackMoon.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\MFCObj\\MFCBlackMoonCon.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\MFCObj\\StdAfx.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\MFCObj\\EyMFCComInit.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\MFCObj\\MFCBlackMoon.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\MFCObj\\Resource.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\MFCObj\\StdAfx.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"..\\MFCObj\\MFCBlackMoon.def\">\r\n      <Filter>源文件</Filter>\r\n    </None>\r\n    <None Include=\"..\\MFCObj\\res\\MFCBlackMoon.rc2\">\r\n      <Filter>资源文件</Filter>\r\n    </None>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ResourceCompile Include=\"..\\MFCObj\\MFCBlackMoon.rc\">\r\n      <Filter>资源文件</Filter>\r\n    </ResourceCompile>\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "Project/MFCBlackMoon_VS2019.vcxproj.user",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"Current\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup />\r\n</Project>"
  },
  {
    "path": "Project/krnln_VC6.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"krnln\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Static Library\" 0x0104\r\n\r\nCFG=krnln - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"krnln_VC6.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"krnln_VC6.mak\" CFG=\"krnln - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"krnln - Win32 Release\" (based on \"Win32 (x86) Static Library\")\r\n!MESSAGE \"krnln - Win32 Debug\" (based on \"Win32 (x86) Static Library\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"krnln - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 2\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"..\\Release\"\r\n# PROP BASE Intermediate_Dir \".\\Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"..\\Release\"\r\n# PROP Intermediate_Dir \".\\Release\"\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_AFXDLL\" /Yu\"stdafx.h\" /FD /c\r\n# ADD CPP /nologo /MT /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /FR /Yu\"stdafx.h\" /FD /c\r\n# ADD BASE RSC /l 0x804 /d \"NDEBUG\" /d \"_AFXDLL\"\r\n# ADD RSC /l 0x804 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLIB32=link.exe -lib\r\n# ADD BASE LIB32 /nologo\r\n# ADD LIB32 /nologo /out:\"..\\Release\\krnln.lib\"\r\n\r\n!ELSEIF  \"$(CFG)\" == \"krnln - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 2\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"..\\Debug\"\r\n# PROP BASE Intermediate_Dir \".\\Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"..\\Debug\"\r\n# PROP Intermediate_Dir \".\\Debug\"\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_AFXDLL\" /Yu\"stdafx.h\" /FD /GZ /c\r\n# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /Yu\"stdafx.h\" /FD /GZ /c\r\n# ADD BASE RSC /l 0x804 /d \"_DEBUG\" /d \"_AFXDLL\"\r\n# ADD RSC /l 0x804 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLIB32=link.exe -lib\r\n# ADD BASE LIB32 /nologo\r\n# ADD LIB32 /nologo\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"krnln - Win32 Release\"\r\n# Name \"krnln - Win32 Debug\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\BlackMoonCallPropertyVaule.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\BlackMoonCallUserDll.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\BlackMoonLibNotifySys.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\CloneBinData.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\CloneTextData.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\DateTimeFormat.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\DllEntryFunc.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\eHelpFunc.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\FileManager.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\FreeAryElement.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\GetAryElementInf.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\GetDataTypeType.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\GetDatePart.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\GetDaysOfSpecMonth.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\GetRegRootVal.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\GetSpecTime.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\GetSysDataTypeDataSize.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\GetTimePart.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\GetWeekDay.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\HelpFunc12.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\IsInFileMangerList.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_abs.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_asc.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_atn.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_band.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_beep.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_bin.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_BinLeft.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_BinLen.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_BinMid.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_BinRight.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_BJCase.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_bnot.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_bor.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_bxor.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ChDir.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ChDrive.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_chr.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ClearClipBoard.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_close.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_cos.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_create.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_CryptOpen.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_CurDir.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_day.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_DeleteRegItem.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_Dispatch.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_DoEvents.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_exp.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_feof.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_fgets.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_FileCopy.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_FileDateTime.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_FileLen.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_FileMove.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_fix.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_fputs.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_FSeek.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetAllPY.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetAttr.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetBackColor.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetBinElement.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetBinRegItem.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetClipBoardText.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetCmdLine.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetColorCount.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetCursorHorzPos.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetCursorVertPos.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetDataTypeSize.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetDatePart.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetDaysOfSpecMonth.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetDiskFreeSpace.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetDiskLabel.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetDiskTotalSpace.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetEnv.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetHDiskCode.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetHostName.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetIntInsideBin.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetKeyText.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetLastError.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetNumRegItem.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetRunFileName.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetRunPath.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetRuntimeDataType.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetScreenHeight.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetScreenWidth.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetSectionNames.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetSpecTime.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetSysVer.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetTempFileName.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetTextRegItem.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetTickCount.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetTimePart.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_GetWinPic.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_hex.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_HostNameToIP.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_hour.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_IDiv.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_InBin.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_InBinRev.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_InputBox.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_InsBin.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_InsLine.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_InsText.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_InStr.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_InStrRev.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_int.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_IPToHostName.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_IsCalcOK.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_IsFileExist.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_IsHaveTextInClip.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_IsRegItemExist.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_kill.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_LCase.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_left.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_len.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_like.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_loc.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_lock.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_lof.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_log.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_LTrim.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_MakeLong.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_MakeWord.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_mid.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_minute.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_MkDir.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_mod.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_month.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_MsgBox.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_name.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_now.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_NumToRMB.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_NumToText.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_oct.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_open.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_OpenManyFileDialog.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_OpenMemFile.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_p2double.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_p2float.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_p2int.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_pbin.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ping.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_PlayMID.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_PlayMusic.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_PlayStop.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_pow.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_pstr.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_PutEnv.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_QJCase.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_randomize.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_read.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ReadBin.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ReadFile.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ReadLine.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ReadText.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_RemoveData.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ReplaceText.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_reset.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_RestroeCursor.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ReverseIntBytes.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_rgb.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_right.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_RmDir.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_rnd.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_round.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_RpBin.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_RpSubBin.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_RpSubText.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_RTrim.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_run.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_RunConsoleApp.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_SaveRegItem.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_second.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_SeekToBegin.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_SeekToEnd.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_SetAttr.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_SetClipBoardText.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_SetDiskLabel.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_SetIntInsideBin.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_SetKeyText.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_SetSysTime.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_SetWaitCursor.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_sgn.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_shl.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_shr.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_sin.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_sleep.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_SortAry.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_space.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_SpaceBin.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_split.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_SplitBin.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_sqr.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_str.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_StrComp.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_string.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_StrToUTF8.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_tan.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_TimeChg.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_TimeDiff.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_TimePart.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_TimeToText.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ToBin.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ToByte.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ToFloat.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ToInt.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ToLong.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ToShort.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ToTime.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_trim.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_TrimAll.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_UCase.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_Unlock.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_UNum.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_UTF8ToStr.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_val.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_Variant.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_WeekDay.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_write.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_WriteBin.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_WriteFile.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_WriteLine.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_WriteMem.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_WriteText.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_year.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\krnln_ZeroAry.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\LTrimZeroChr.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\md5t.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\mem.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\midi.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\Myfunctions.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\MyMemFile.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\NumToChinese.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\replaceText.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\SDataToStr.cpp\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\StdAfx.cpp\"\r\n# ADD CPP /Yc\"stdafx.h\"\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\lib2.h\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\LTrimZeroChr.h\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\md5t.h\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\mem.h\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\midi.h\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\Myfunctions.h\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\MyMemFile.h\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\StdAfx.h\"\r\n# End Source File\r\n# End Group\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\Readme.txt\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\Diskid32.obj\"\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\krnln\\PY.OBJ\"\r\n# End Source File\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Project/krnln_VC6_Obj.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"krnln_Obj\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Static Library\" 0x0104\r\n\r\nCFG=krnln_Obj - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"krnln_VC6_Obj.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"krnln_VC6_Obj.mak\" CFG=\"krnln_Obj - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"krnln_Obj - Win32 Release\" (based on \"Win32 (x86) Static Library\")\r\n!MESSAGE \"krnln_Obj - Win32 Debug\" (based on \"Win32 (x86) Static Library\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"krnln_Obj - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"..\\Release\"\r\n# PROP BASE Intermediate_Dir \".\\Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"..\\Release\"\r\n# PROP Intermediate_Dir \".\\Release\"\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_MBCS\" /D \"_LIB\" /YX /FD /c\r\n# ADD CPP /nologo /MT /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /D \"_LIB\" /YX /FD /c\r\n# ADD BASE RSC /l 0x804 /d \"NDEBUG\"\r\n# ADD RSC /l 0x804 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLIB32=link.exe -lib\r\n# ADD BASE LIB32 /nologo\r\n# ADD LIB32 /nologo\r\n\r\n!ELSEIF  \"$(CFG)\" == \"krnln_Obj - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"..\\Debug\"\r\n# PROP BASE Intermediate_Dir \".\\Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"Debug\"\r\n# PROP Intermediate_Dir \"Debug\"\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_MBCS\" /D \"_LIB\" /YX /FD /GZ /c\r\n# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /D \"_LIB\" /YX /FD /GZ /c\r\n# ADD BASE RSC /l 0x804 /d \"_DEBUG\"\r\n# ADD RSC /l 0x804 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLIB32=link.exe -lib\r\n# ADD BASE LIB32 /nologo\r\n# ADD LIB32 /nologo\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"krnln_Obj - Win32 Release\"\r\n# Name \"krnln_Obj - Win32 Debug\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=..\\krnln\\BlackMoonDll.cpp\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\krnln\\BlackMoonDll2.cpp\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\krnln\\BlackMoonExe.cpp\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\krnln\\BlackMoonResDll.cpp\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\krnln\\DllEntryFunc.cpp\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\krnln\\EyComInit.cpp\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\krnln\\EyInit.cpp\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# Begin Source File\r\n\r\nSOURCE=..\\krnln\\StdAfx.h\r\n# End Source File\r\n# End Group\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Project/krnln_VS2019.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\krnln\\BlackMoonCallPropertyVaule.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\BlackMoonCallUserDll.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\BlackMoonLibNotifySys.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\CloneBinData.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\CloneTextData.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\DateTimeFormat.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\DllEntryFunc.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\eHelpFunc.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\FileManager.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\FreeAryElement.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\GetAryElementInf.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\GetDataTypeType.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\GetDatePart.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\GetDaysOfSpecMonth.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\GetRegRootVal.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\GetSpecTime.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\GetSysDataTypeDataSize.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\GetTimePart.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\GetWeekDay.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\HelpFunc12.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\IsInFileMangerList.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_abs.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_asc.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_atn.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_band.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_beep.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_bin.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_BinLeft.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_BinLen.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_BinMid.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_BinRight.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_BJCase.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_bnot.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_bor.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_bxor.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ChDir.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ChDrive.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_chr.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ClearClipBoard.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_close.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_cos.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_create.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_CryptOpen.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_CurDir.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_day.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_DeleteRegItem.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_Dispatch.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_DoEvents.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_exp.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_feof.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_fgets.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_FileCopy.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_FileDateTime.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_FileLen.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_FileMove.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_fix.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_fputs.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_FSeek.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetAllPY.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetAttr.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetBackColor.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetBinElement.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetBinRegItem.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetClipBoardText.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetCmdLine.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetColorCount.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetCursorHorzPos.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetCursorVertPos.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetDataTypeSize.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetDatePart.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetDaysOfSpecMonth.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetDiskFreeSpace.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetDiskLabel.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetDiskTotalSpace.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetEnv.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetHDiskCode.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetHostName.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetIntInsideBin.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetKeyText.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetLastError.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetNumRegItem.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetRunFileName.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetRunPath.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetRuntimeDataType.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetScreenHeight.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetScreenWidth.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetSectionNames.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetSpecTime.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetSysVer.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetTempFileName.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetTextRegItem.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetTickCount.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetTimePart.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetWinPic.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_hex.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_HostNameToIP.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_hour.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_IDiv.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_InBin.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_InBinRev.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_InputBox.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_InsBin.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_InsLine.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_InsText.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_InStr.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_InStrRev.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_int.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_IPToHostName.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_IsCalcOK.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_IsDebugVer.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_IsFileExist.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_IsHaveTextInClip.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_IsRegItemExist.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_kill.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_LCase.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_left.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_len.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_like.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_loc.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_lock.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_lof.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_log.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_LTrim.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_MakeLong.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_MakeWord.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_mid.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_minute.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_MkDir.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_mod.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_month.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_MsgBox.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_name.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_now.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_NumToRMB.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_NumToText.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_oct.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_open.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_OpenManyFileDialog.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_OpenMemFile.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_p2double.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_p2float.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_p2int.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_pbin.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ping.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_PlayMID.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_PlayMusic.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_PlayStop.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_pow.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_pstr.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_PutEnv.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_QJCase.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_randomize.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_read.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ReadBin.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ReadFile.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ReadLine.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ReadText.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_RemoveData.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ReplaceText.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_reset.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_RestroeCursor.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ReverseIntBytes.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_rgb.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_right.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_RmDir.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_rnd.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_round.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_RpBin.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_RpSubBin.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_RpSubText.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_RTrim.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_run.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_RunConsoleApp.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_SaveRegItem.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_second.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_SeekToBegin.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_SeekToEnd.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_SetAttr.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_SetClipBoardText.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_SetDiskLabel.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_SetIntInsideBin.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_SetKeyText.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_SetSysTime.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_SetWaitCursor.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_sgn.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_shl.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_shr.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_sin.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_sleep.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_SortAry.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_space.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_SpaceBin.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_split.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_SplitBin.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_sqr.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_str.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_StrComp.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_string.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_StrToUTF8.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_tan.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_TimeChg.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_TimeDiff.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_TimePart.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_TimeToText.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ToBin.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ToByte.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ToFloat.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ToInt.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ToLong.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ToShort.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ToTime.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_trim.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_TrimAll.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_UCase.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_Unlock.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_UNum.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_UTF8ToStr.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_val.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_Variant.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_WeekDay.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_write.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_WriteBin.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_WriteFile.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_WriteLine.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_WriteMem.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_WriteText.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_year.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\krnln_ZeroAry.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\LTrimZeroChr.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\md5t.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\mem.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\midi.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\Myfunctions.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\MyMemFile.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\NumToChinese.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\replaceText.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\SDataToStr.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\StdAfx.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Object Include=\"..\\krnln\\Diskid32.obj\" />\r\n    <Object Include=\"..\\krnln\\PY.OBJ\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\krnln\\lib2.h\" />\r\n    <ClInclude Include=\"..\\krnln\\LTrimZeroChr.h\" />\r\n    <ClInclude Include=\"..\\krnln\\md5t.h\" />\r\n    <ClInclude Include=\"..\\krnln\\mem.h\" />\r\n    <ClInclude Include=\"..\\krnln\\midi.h\" />\r\n    <ClInclude Include=\"..\\krnln\\Myfunctions.h\" />\r\n    <ClInclude Include=\"..\\krnln\\MyMemFile.h\" />\r\n    <ClInclude Include=\"..\\krnln\\StdAfx.h\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Text Include=\"..\\Readme.txt\" />\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <VCProjectVersion>16.0</VCProjectVersion>\r\n    <ProjectGuid>{90C7C825-74BF-4F91-BF9C-4A1E762F24B9}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>krnln</RootNamespace>\r\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r\n    <ProjectName>krnln</ProjectName>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v142</PlatformToolset>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v142</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n    <EnableUnitySupport>false</EnableUnitySupport>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v142</PlatformToolset>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v142</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"Shared\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n    <TargetName>krnln</TargetName>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n    <TargetName>krnln</TargetName>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <SDLCheck>false</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeaderFile>StdAfx.h</PrecompiledHeaderFile>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>false</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeaderFile>StdAfx.h</PrecompiledHeaderFile>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <WholeProgramOptimization>false</WholeProgramOptimization>\r\n      <MultiProcessorCompilation>\r\n      </MultiProcessorCompilation>\r\n      <BufferSecurityCheck>true</BufferSecurityCheck>\r\n      <PrecompiledHeaderOutputFile />\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "Project/krnln_VS2019.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Include=\"源文件\">\r\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"头文件\">\r\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"资源文件\">\r\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r\n    </Filter>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\krnln\\BlackMoonCallPropertyVaule.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\BlackMoonCallUserDll.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\BlackMoonLibNotifySys.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\CloneBinData.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\CloneTextData.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\DateTimeFormat.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\DllEntryFunc.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\eHelpFunc.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\FileManager.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\FreeAryElement.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\GetAryElementInf.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\GetDataTypeType.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\GetDatePart.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\GetDaysOfSpecMonth.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\GetRegRootVal.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\GetSpecTime.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\GetSysDataTypeDataSize.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\GetTimePart.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\GetWeekDay.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\HelpFunc12.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\IsInFileMangerList.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_abs.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_asc.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_atn.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_band.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_beep.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_bin.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_BinLeft.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_BinLen.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_BinMid.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_BinRight.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_BJCase.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_bnot.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_bor.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_bxor.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ChDir.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ChDrive.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_chr.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ClearClipBoard.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_close.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_cos.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_CryptOpen.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_CurDir.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_day.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_DeleteRegItem.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_Dispatch.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_DoEvents.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_exp.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_feof.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_fgets.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_FileCopy.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_FileDateTime.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_FileLen.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_FileMove.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_fix.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_fputs.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_FSeek.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetAllPY.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetAttr.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetBackColor.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetBinElement.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetBinRegItem.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetClipBoardText.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetCmdLine.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetColorCount.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetCursorHorzPos.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetCursorVertPos.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetDataTypeSize.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetDatePart.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetDaysOfSpecMonth.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetDiskFreeSpace.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetDiskLabel.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetDiskTotalSpace.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetEnv.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetHDiskCode.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetHostName.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetIntInsideBin.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetKeyText.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetLastError.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetNumRegItem.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetRunFileName.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetRunPath.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetRuntimeDataType.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetScreenHeight.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetScreenWidth.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetSectionNames.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetSpecTime.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetSysVer.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetTempFileName.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetTextRegItem.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetTickCount.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetTimePart.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_GetWinPic.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_hex.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_HostNameToIP.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_hour.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_IDiv.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_InBin.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_InBinRev.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_InputBox.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_InsBin.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_InsLine.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_InsText.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_InStr.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_InStrRev.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_int.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_IPToHostName.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_IsCalcOK.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_IsDebugVer.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_IsFileExist.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_IsHaveTextInClip.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_IsRegItemExist.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_kill.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_LCase.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_left.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_len.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_like.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_loc.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_lock.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_lof.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_log.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_LTrim.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_MakeLong.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_MakeWord.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_mid.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_minute.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_MkDir.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_mod.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_month.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_MsgBox.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_name.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_now.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_NumToRMB.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_NumToText.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_oct.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_open.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_OpenManyFileDialog.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_OpenMemFile.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_p2double.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_p2float.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_p2int.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_pbin.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ping.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_PlayMID.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_PlayMusic.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_PlayStop.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_pow.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_pstr.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_PutEnv.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_QJCase.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_randomize.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_read.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ReadBin.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ReadFile.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ReadLine.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ReadText.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_RemoveData.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ReplaceText.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_reset.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_RestroeCursor.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ReverseIntBytes.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_rgb.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_right.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_RmDir.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_rnd.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_round.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_RpBin.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_RpSubBin.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_RpSubText.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_RTrim.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_run.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_RunConsoleApp.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_SaveRegItem.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_second.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_SeekToBegin.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_SeekToEnd.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_SetAttr.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_SetClipBoardText.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_SetDiskLabel.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_SetIntInsideBin.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_SetKeyText.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_SetSysTime.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_SetWaitCursor.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_sgn.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_shl.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_shr.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_sin.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_sleep.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_SortAry.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_space.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_SpaceBin.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_split.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_SplitBin.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_sqr.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_str.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_StrComp.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_string.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_StrToUTF8.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_tan.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_TimeChg.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_TimeDiff.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_TimePart.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_TimeToText.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ToBin.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ToByte.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ToFloat.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ToInt.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ToLong.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ToShort.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ToTime.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_trim.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_TrimAll.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_UCase.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_Unlock.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_UNum.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_UTF8ToStr.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_val.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_Variant.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_WeekDay.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_write.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_WriteBin.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_WriteFile.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_WriteLine.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_WriteMem.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_WriteText.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_year.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_ZeroAry.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\LTrimZeroChr.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\md5t.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\mem.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\midi.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\Myfunctions.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\MyMemFile.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\NumToChinese.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\replaceText.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\SDataToStr.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\StdAfx.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\krnln_create.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Object Include=\"..\\krnln\\Diskid32.obj\" />\r\n    <Object Include=\"..\\krnln\\PY.OBJ\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\krnln\\lib2.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\krnln\\LTrimZeroChr.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\krnln\\md5t.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\krnln\\mem.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\krnln\\midi.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\krnln\\Myfunctions.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\krnln\\MyMemFile.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\krnln\\StdAfx.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Text Include=\"..\\Readme.txt\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "Project/krnln_VS2019.vcxproj.user",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"Current\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LocalDebuggerWorkingDirectory>$(ProjectDir)</LocalDebuggerWorkingDirectory>\r\n    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\r\n  </PropertyGroup>\r\n  <PropertyGroup>\r\n    <ShowAllFiles>false</ShowAllFiles>\r\n  </PropertyGroup>\r\n</Project>"
  },
  {
    "path": "Project/krnln_VS2019_Obj.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\krnln\\BlackMoonDll.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\BlackMoonDll2.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\BlackMoonExe.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\BlackMoonResDll.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\EyComInit.cpp\" />\r\n    <ClCompile Include=\"..\\krnln\\EyInit.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\krnln\\StdAfx.h\" />\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <VCProjectVersion>16.0</VCProjectVersion>\r\n    <ProjectGuid>{9EF1C5E2-3C57-47CE-9F68-DACA1CD298D4}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>krnln_Obj</RootNamespace>\r\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r\n    <ProjectName>krnln_Obj</ProjectName>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v142</PlatformToolset>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v142</PlatformToolset>\r\n    <WholeProgramOptimization>false</WholeProgramOptimization>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v142</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v142</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"Shared\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n    <TargetName>krnln</TargetName>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n    <TargetName>krnln</TargetName>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <SDLCheck>false</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeaderFile>StdAfx.h</PrecompiledHeaderFile>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <PrecompiledHeaderOutputFile />\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n    <PostBuildEvent>\r\n      <Command>\r\n      </Command>\r\n    </PostBuildEvent>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>false</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeaderFile>StdAfx.h</PrecompiledHeaderFile>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <PrecompiledHeaderOutputFile />\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "Project/krnln_VS2019_Obj.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Include=\"源文件\">\r\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"头文件\">\r\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"资源文件\">\r\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r\n    </Filter>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\krnln\\BlackMoonDll.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\BlackMoonDll2.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\BlackMoonResDll.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\EyComInit.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\EyInit.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\krnln\\BlackMoonExe.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\krnln\\StdAfx.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "Project/krnln_VS2019_Obj.vcxproj.user",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"Current\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup />\r\n</Project>"
  },
  {
    "path": "README.md",
    "content": "## 黑月核心静态库\n\n[![BlackMoon Krnln](https://github.com/TheSnowfield/BlackMoonKernelStaticLib/workflows/BlackMoon%20Krnln/badge.svg)](#)\n[![BlackMoon Krnln OBJ](https://github.com/TheSnowfield/BlackMoonKernelStaticLib/workflows/BlackMoon%20Krnln%20OBJ/badge.svg)](#)\n[![BlackMoon MFC](https://github.com/TheSnowfield/BlackMoonKernelStaticLib/workflows/BlackMoon%20MFC/badge.svg)](#)\n\n## 编译与安装\n  1. 根据你电脑上所安装的VS版本，打开对应的工程文件\n  2. 打开工程后能看见三个方案：krnln、krnln_Obj、MFCBlackMoon。  \n    通常情况下你不需要理会后两者，除非你知道它的作用。选中krnln方案，切换配置为Release，并编译。\n  3. 编译后，将release目录下的kernel.lib替换到易语言安装目录的  \n  \\BlackMoon\\obj\\kernel.lib。(黑月4.0以上版本)  \n  \\BlackMoon\\lib\\kernel.lib。(黑月4.0以下版本)\n\n## 源码使用事项\n  原则上，只要不是商业用途及非法用途，源码可以任意使用及传播，\n  编译后的静态库文件kernel.lib可以用于编译链接到商业作品中。  \n  在复制与传播时，必须注明开源地址：  \n  https://github.com/zhongjianhua163/BlackMoonKernelStaticLib (国外服务器)  \n  https://gitee.com/zhongjianhua163/BlackMoonKernelStaticLib (国内服务器)\n\n## 代码编写规范\n  如果你想参与更新、优化或修复BUG，请仔细阅读以下事项：\n  1. 代码的必须能让所有版本的VS通过编译，若需要使用特定版本的VS的特性，\n    则需要合理使用宏 _MSC_VER 来进行兼容。\n  2. 变量、常量、函数等命名时尽量能准确表达其属性及用途。\n  3. 少用或尽量不要用内联汇编。\n    如果必须要用到内联汇编，则尽量不要使用新的指令集，如SSE\\AVX等。\n    如果必须要用到新的指令集，请务必做好自适配代码，确保老的CPU及远古级别的\n    32位CPU能正常运行，并实现指定效果。(常规做法是编写两份代码，一份使用新\n    的指令集，另一份使用常规指令集，并根据用户的CPU所支持的指令集来进行调用)\n  4. 确保代码的简洁美观、高效、稳定及安全性。\n  5. 确保函数的参数、返回值及运行效果与易语言原生核心库保持一致。\n  6. 编辑的源代码文件的时候，请使用ANSI和GB2312编码，切勿使用UTF8或其他编码。\n  7. 使用git来push前，请将自动替换换行符功能: autoCRLF 设置为 false。\n\n## 参与贡献\n  1. 可以加入此开源项目的管理团队\n  2. 可以在GitHub或Gitee中通过Issues页面提交错误和改进建议\n  3. 可以在GitHub或Gitee中`Fork`, 修改后通过`Pull Request`合并代码\n\n\n## 许可证\n原作者：云外归鸟  \n后续升级：泪闯天涯(邓学彬)  \n后续优化：被封七号  \n  \n根据 `BSD 3-Clause` 获得许可\n"
  },
  {
    "path": "Readme.txt",
    "content": "========================================================================\r\n       黑月编译器插件的核心静态库开源相关事项\r\n========================================================================\r\n\r\n原作者：云外归鸟\r\n后续升级：泪闯天涯(邓学彬)\r\n后续优化：被封七号\r\n\r\n一、编译与安装\r\n  1.根据你电脑上所安装的VS版本，打开对应的工程文件\r\n  2.打开工程后能看见三个方案：krnln、krnln_Obj、MFCBlackMoon。\r\n    通常情况下你不需要理会后两者，除非你知道它的作用。\r\n\t选中krnln方案，切换配置为Release，并编译。\r\n  3.编译后，将release目录下的kernel.lib替换到易语言安装目录的\r\n    \\BlackMoon\\obj\\kernel.lib。(黑月4.0以上版本)\r\n\t\\BlackMoon\\lib\\kernel.lib。(黑月4.0以下版本)\r\n\r\n二、源码使用事项\r\n  原则上，只要不是商业用途及非法用途，源码可以任意使用及传播，\r\n  编译后的静态库文件kernel.lib可以用于编译链接到商业作品中。\r\n  在复制与传播时，必须注明开源地址：\r\n  https://github.com/zhongjianhua163/BlackMoonKernelStaticLib  (国外服务器)\r\n  https://gitee.com/zhongjianhua163/BlackMoonKernelStaticLib   (国内服务器)\r\n  \r\n三、代码编写规范\r\n  如果你想参与更新、优化或修复BUG，请仔细阅读以下事项：\r\n  0.代码的必须能让所有版本的VS通过编译，若需要使用特定版本的VS的特性，\r\n    则需要合理使用宏 _MSC_VER 来进行兼容。\r\n  1.变量、常量、函数等命名时尽量能准确表达其属性及用途。\r\n  2.少用或尽量不要用内联汇编。\r\n    如果必须要用到内联汇编，则尽量不要使用新的指令集，如SSE\\AVX等。\r\n    如果必须要用到新的指令集，请务必做好自适配代码，确保老的CPU及远古级别的\r\n    32位CPU能正常运行，并实现指定效果。(常规做法是编写两份代码，一份使用新\r\n    的指令集，另一份使用常规指令集，并根据用户的CPU所支持的指令集来进行调用)\r\n  3.确保代码的简洁美观、高效、稳定及安全性。\r\n  4.确保函数的参数、返回值及运行效果与易语言原生核心库保持一致。\r\n  5.编辑的源代码文件的时候，请使用ANSI和GB2312编码，切勿使用UTF8或其他编码。\r\n  6.使用git来push前，请将自动替换换行符功能: autoCRLF 设置为 false。\r\n\r\n四、如何参与到项目开发中来？\r\n  1.可以加入此开源项目的管理团队\r\n  2.可以在github或gitee中通过Issues页面提交错误和改进建议\r\n  3.可以在github或gitee中 fork, 修改后通过 pull request 合并代码\r\n\r\n  \r\n/////////////////////////////////////////////////////////////////////////////\r\n"
  },
  {
    "path": "krnln/BlackMoonCallPropertyVaule.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\nEXTERN_C void  _cdecl BlackMoonGetClassPropertyVaule(\r\n\tINT nIDX,HUNIT hUnit, INT nPropertyIndex,INT nRevrev)\r\n{\r\n\tPFN_GET_PROPERTY_DATA pfn;\r\n\t_asm mov pfn,eax;\r\n\tUNIT_PROPERTY_VALUE sProperty;\r\n\tsProperty.m_data.m_nDataSize=0;\r\n\tsProperty.m_data.m_pData = 0;\r\n\tpfn(hUnit,nPropertyIndex,&sProperty);\r\n\r\n\tif(nIDX && nPropertyIndex < 32)\r\n\t{\r\n\r\n\t\tBOOL bIsText = (nIDX >> nPropertyIndex) & 1;\r\n\t\tif(bIsText)\r\n\t\t{\r\n\t\t\tchar* pStr=CloneTextData(sProperty.m_szText,mystrlen(sProperty.m_szText));\r\n\t\t\tsProperty.m_szText = pStr;\r\n\t\t}\r\n\t}\r\n\r\n\t_asm mov eax,sProperty.m_int;\r\n\t_asm mov edx,sProperty.m_data.m_nDataSize;\r\n}\r\n\r\nEXTERN_C void  _cdecl BlackMoonSetClassPropertyVaule(\r\n\tINT nIDX,HUNIT hUnit, INT nPropertyIndex,INT nRevrev,UNIT_PROPERTY_VALUE sProperty,...)\r\n{\r\n\r\n\tPFN_NOTIFY_PROPERTY_CHANGED pfn;\r\n\t_asm mov pfn,eax;\r\n\tpfn(hUnit, nPropertyIndex, &sProperty, NULL);\r\n\r\n}"
  },
  {
    "path": "krnln/BlackMoonCallUserDll.cpp",
    "content": "#include \"stdafx.h\"\r\nextern \"C\" PDESTROY BlackMoonFreeAllUserDll;\r\n\r\nHMODULE BMUserDllList[100] = {0};\r\nINT nBMUserDllCount = 0;\r\n\r\nvoid BlackMoonFreeALLUserDllFunc(){\r\n\tfor(INT i=0;i<100;i++){\r\n\t\tif(BMUserDllList[i]==NULL)\r\n\t\t\tbreak;\r\n\t\t::FreeLibrary (BMUserDllList[i]);\r\n\r\n\t}\r\n\r\n}\r\nextern \"C\" \r\nvoid* _stdcall BlackMoonCallUserDllFunc (char* pDll,char* pName,void** pFunc)\r\n{\r\n\tchar ErrorString [1024];\r\n\tHMODULE hMod = ::GetModuleHandle (pDll);\r\n\tint nNoErrorBox = 0;\r\n\tif(hMod==NULL){\r\n\t\thMod = ::LoadLibrary (pDll);\r\n\t\tif(hMod==NULL){\r\n\r\n  \t\t\twsprintf(ErrorString, \"ͬĿ¼޷ҵDLLļ:\\\"%s\\\".ϵ.\", pDll);\r\n\t\t\tif (fnEError_callback)\r\n\t\t\t\tnNoErrorBox = fnEError_callback(0, ErrorString);\r\n\r\n\t\t\tif (!nNoErrorBox)\r\n  \t\t\t\tMessageBox(0, ErrorString, \"DLL ERROR\", MB_ICONERROR);\r\n\t\t\tE_End(0);\r\n\t\t}\r\n\t\tBMUserDllList[nBMUserDllCount] = hMod;\r\n\t\t\r\n\t\tif(nBMUserDllCount==0)\r\n\t\t\tBlackMoonFreeAllUserDll = (PDESTROY)BlackMoonFreeALLUserDllFunc;\r\n\t\tnBMUserDllCount++;\r\n\t}\r\n\tchar* pFuncName = NULL;\r\n\tif(pName[0]=='#')\r\n\t\tpFuncName=(char*)atoi(pName+1);\r\n\telse\r\n\t{\r\n\t\tstrcpy(ErrorString, pName);\r\n\t\tpFuncName = ErrorString;\r\n\t\tchar* pStr = strchr(pFuncName,'@');\r\n\t\tif(pStr && pStr[1]=='@')\r\n\t\t\tpStr[0]=0;\r\n\t\t\r\n\t}\r\n\r\n\tFARPROC pf = ::GetProcAddress (hMod,pFuncName);\r\n\tif(pf==NULL){\r\n  \t\twsprintf(ErrorString, \"޷λDLLļ:\\\"%s\\\"е\\\"%s\\\".\", pDll,pName);\r\n\t\tif (fnEError_callback)\r\n\t\t\tnNoErrorBox = fnEError_callback(0, ErrorString);\r\n\r\n\t\tif (!nNoErrorBox)\r\n  \t\t\tMessageBox(0, ErrorString, \"DLL ERROR\", MB_ICONERROR);\r\n\t\tE_End(0);\r\n\t}\r\n\t\r\n\t*pFunc = pf;\r\n\t\t\r\n\treturn pf;\r\n}"
  },
  {
    "path": "krnln/BlackMoonDll.cpp",
    "content": "#include \"stdafx.h\"\r\nINT nBMProtectESP = 0;\r\nINT nBMProtectEBP = 0;\r\nPDESTROY DllEntryFunc();\r\nextern HANDLE hBlackMoonInstanceHandle;\r\nextern \"C\" PDESTROY DestroyAddress;\r\nextern \"C\" {\r\n\r\n\t//PDESTROY ECodeStart();\r\n\r\n\tint __stdcall DllMain( HANDLE hModule, \r\n                       DWORD  ul_reason_for_call, \r\n                       LPVOID lpReserved\r\n\t\t\t\t\t )\r\n\t{\r\n\r\n\t\tswitch (ul_reason_for_call)\r\n\t\t{\r\n\t\tcase DLL_PROCESS_ATTACH:\r\n\t\t\thBlackMoonInstanceHandle = hModule;\r\n\t\t\tE_Init();\r\n\t\t\tDestroyAddress = DllEntryFunc();\r\n\t\t\tbreak;\r\n\t\tcase DLL_PROCESS_DETACH:\r\n\t\t\tE_DestroyRes();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\treturn 1;\r\n\t\t\r\n\t}\r\n\r\n}"
  },
  {
    "path": "krnln/BlackMoonDll2.cpp",
    "content": "#include \"stdafx.h\"\r\nINT nBMProtectESP = 0;\r\nINT nBMProtectEBP = 0;\r\nPDESTROY DllEntryFunc();\r\nextern HANDLE hBlackMoonInstanceHandle;\r\nextern \"C\" PDESTROY DestroyAddress;\r\nextern \"C\" {\r\n\r\n\t//PDESTROY ECodeStart();\r\n\tint __stdcall EDllMain( HANDLE hModule, \r\n                       DWORD  ul_reason_for_call, \r\n                       LPVOID lpReserved\r\n\t\t\t\t\t );\r\n\r\n\tint __stdcall DllMain( HANDLE hModule, \r\n                       DWORD  ul_reason_for_call, \r\n                       LPVOID lpReserved\r\n\t\t\t\t\t )\r\n\t{\r\n\r\n\t\tswitch (ul_reason_for_call)\r\n\t\t{\r\n\t\tcase DLL_PROCESS_ATTACH:\r\n\t\t\thBlackMoonInstanceHandle = hModule;\r\n\t\t\tE_Init();\t\t\t\r\n\t\t\tDestroyAddress = DllEntryFunc();\r\n\t\t\tbreak;\r\n\t\tcase DLL_PROCESS_DETACH:\r\n\t\t\tE_DestroyRes();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\t\r\n\t\treturn EDllMain(hModule,ul_reason_for_call,lpReserved);\r\n\t\t\r\n\t}\r\n\r\n}"
  },
  {
    "path": "krnln/BlackMoonExe.cpp",
    "content": "#include \"stdafx.h\"\r\nextern \"C\" int ECodeStart();\r\n//BOOL bIsEnterFromBMEntrypoint = FALSE;\r\nINT nBMProtectESP = 0;\r\nINT nBMProtectEBP = 0;\r\nextern \"C\" {\r\n\r\n\r\n\tint _cdecl BMEntrypoint (){\r\n\t\t//bIsEnterFromBMEntrypoint = TRUE;\r\n\r\n\t\tE_Init();\r\n\t\tECodeStart();\r\n\t\treturn 0;\r\n\r\n\t}\r\n}\r\n\r\n\r\n\r\n\r\nint APIENTRY WinMain(HINSTANCE hInstance,\r\n                     HINSTANCE hPrevInstance,\r\n                     LPSTR     lpCmdLine,\r\n                     int       nCmdShow)\r\n{\r\n\t\tE_Init();\r\n\t\tint nRet;\r\n//\t\tint nRet = ECodeStart();\r\n\t\t_asm{\r\n\t\t\tmov nBMProtectESP,esp;\r\n\t\t\tmov nBMProtectEBP,ebp;\r\n\t\t\tcall ECodeStart;\r\n\t\t\tmov nRet,eax;\r\n\r\n\t\t}\r\n\t\t//MessageBox(NULL,\"I am Back\",NULL,nRet);\r\n\t\treturn nRet;\r\n}\r\n\r\nint main(int argc, char* argv[])\r\n{\r\n\t\tE_Init();\r\n\t\tint nRet;\r\n//\t\tint nRet = ECodeStart();\r\n\t\t_asm{\r\n\t\t\tmov nBMProtectESP,esp;\r\n\t\t\tmov nBMProtectEBP,ebp;\r\n\t\t\tcall ECodeStart;\r\n\t\t\tmov nRet,eax;\r\n\r\n\t\t}\r\n\t\treturn nRet;\r\n}\r\n"
  },
  {
    "path": "krnln/BlackMoonLibNotifySys.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n#pragma comment(lib,\"gdi32.lib\") \r\n#pragma comment(lib,\"winspool.lib\") \r\n#pragma comment(lib,\"comdlg32.lib\") \r\n#pragma comment(lib,\"advapi32.lib\")  \r\n#pragma comment(lib,\"shell32.lib\")  \r\n#pragma comment(lib,\"ole32.lib\")  \r\n#pragma comment(lib,\"oleaut32.lib\")  \r\n#pragma comment(lib,\"uuid.lib\")  \r\n#pragma comment(lib,\"odbc32.lib\")  \r\n#pragma comment(lib,\"odbccp32.lib\")  \r\nchar strBlackMoonFileName_Path[MAX_PATH];\r\nchar strBlackMoonFileName_Name[MAX_PATH];\r\nEXTERN_C INT WINAPI BlackMoonFuncForeLibNotifySys(INT nMsg, DWORD dwParam1, DWORD dwParam2)\r\n{\r\n\r\n\tswitch (nMsg)\r\n\t{\r\n\tcase  NRS_MALLOC:\r\n\t\t// ָռڴ棬׳򽻻ڴ涼ʹñ֪ͨ䡣\r\n\t\t//   dwParam1Ϊڴֽ\r\n\t\t//   dwParam2Ϊ0ʧܾԶʱ˳\r\n\t\t// 粻Ϊ0ʧܾͷNULL\r\n\t\t//   ڴ׵ַ\r\n\t\treturn (INT)E_MAlloc(dwParam1);\r\n\tcase  NRS_MFREE:\r\n\t\t// ͷѷָڴ档\r\n\t\t// dwParam1Ϊͷڴ׵ַ\r\n\t\tE_MFree((void*)dwParam1);\r\n\t\tbreak;\r\n\tcase  NRS_MREALLOC:\r\n\t\t// ·ڴ档\r\n\t\t//   dwParam1Ϊ·ڴߴ׵ַ\r\n\t\t//   dwParam2Ϊ·ڴֽ\r\n\t\t// ·ڴ׵ַʧԶʱ˳\r\n\t\treturn (INT)E_MRealloc((void*)dwParam1, dwParam2);\r\n\r\n\tcase  NRS_FREE_ARY:\r\n\t\t// ͷָݡ\r\n\t\t// dwParam1ΪݵDATA_TYPEֻΪϵͳ͡\r\n\t\t// dwParam2Ϊָݵָ롣\r\n\t\tswitch (dwParam1)\r\n\t\t{\r\n\t\tcase SDT_TEXT:\r\n\t\tcase SDT_BIN:\r\n\t\t\tFreeAryElement((void*)dwParam2);\r\n\t\t\tbreak;\r\n\t\tcase SDT_INT:\r\n\t\tcase SDT_BYTE:\r\n\t\tcase SDT_SHORT:\r\n\t\tcase SDT_FLOAT:\r\n\t\tcase SDT_INT64:\r\n\t\tcase SDT_DOUBLE:\r\n\t\tcase SDT_SUB_PTR:\r\n\t\tcase SDT_BOOL:\r\n\t\tcase SDT_DATE_TIME:\r\n\t\t\tE_MFree((void*)dwParam2);\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n\t\tbreak;\r\n\r\n\tcase \tNRS_RUNTIME_ERR:\r\n\t\t// ֪ͨϵͳѾʱ\r\n\t\t// dwParam1Ϊchar*ָ룬˵ı\r\n\t{\r\n\t\tchar ErrorString[1024];\r\n\t\twsprintfA(ErrorString, \"BlackMoon RunTime Error:\\r\\n\\r\\n%s\", dwParam1);\r\n\t\tMessageBoxA(0, ErrorString, \"ERROR\", MB_ICONERROR);\r\n\t\tE_End(0);\r\n\t}\r\n\tbreak;\r\n\tcase \tNRS_EXIT_PROGRAM:\r\n\t\t// ֪ͨϵͳ˳û\r\n\t\t// dwParam1Ϊ˳룬ô뽫صϵͳ\r\n\t\tE_End(dwParam1);\r\n\t\tbreak;\r\n\tcase  NRS_GET_PRG_TYPE:\r\n\t\t// صǰûͣΪPT_DEBUG_RUN_VER԰棩PT_RELEASE_RUN_VER棩\r\n\t\treturn PT_RELEASE_RUN_VER;\r\n\tcase \tNRS_DO_EVENTS:\r\n\t\t// ֪ͨϵͳд¼\r\n\t{\r\n\t\tMSG Msg;\r\n\t\twhile (PeekMessage(&Msg, NULL, NULL, NULL, PM_NOREMOVE))\r\n\t\t{\r\n\t\t\tif (Msg.message == WM_QUIT)\r\n\t\t\t\tbreak;\r\n\t\t\tGetMessage(&Msg, NULL, 0, 0);\r\n\t\t\tTranslateMessage(&Msg);\r\n\t\t\tDispatchMessage(&Msg);\r\n\t\t}\r\n\t}\r\n\tbreak;\r\n\tcase  NRS_GET_CMD_LINE_STR:\r\n\t\t// ȡǰı\r\n\t\t// ıָ룬пΪմ\r\n\t{\r\n\t\tLPSTR p = GetCommandLineA();\r\n\t\t// ó\r\n\t\tchar ch = ' ';\r\n\t\tif (*p++ == '\\\"')\r\n\t\t\tch = '\\\"';\r\n\t\twhile (*p++ != ch);\r\n\t\tif (ch != ' ' && *p == ' ')  p++;    // һո\r\n\t\treturn (INT)p;\r\n\t}\r\n\tcase  NRS_GET_EXE_PATH_STR:\r\n\t\t// ȡǰִļĿ¼\r\n\t\t// صǰִļĿ¼ıָ롣\r\n\t\tif (::GetModuleFileNameA(NULL, strBlackMoonFileName_Path, MAX_PATH))\r\n\t\t{\r\n\t\t\tchar* pFind = strrchr(strBlackMoonFileName_Path, '\\\\');\r\n\t\t\t//\tpFind++;\r\n\t\t\t*pFind = 0;\r\n\t\t\treturn (INT)&strBlackMoonFileName_Path;\r\n\r\n\t\t}\r\n\t\tbreak;\r\n\r\n\tcase  NRS_GET_EXE_NAME:\r\n\t\t// ȡǰִļ\r\n\t\t// صǰִļıָ롣\r\n\t\tif (::GetModuleFileNameA(NULL, strBlackMoonFileName_Path, MAX_PATH))\r\n\t\t{\r\n\t\t\tchar* pFind = strrchr(strBlackMoonFileName_Path, '\\\\');\r\n\t\t\t//pFind++;\r\n\t\t\t*pFind = 0;\r\n\t\t\tpFind++;\r\n\t\t\treturn (INT)pFind;\r\n\t\t}\r\n\t\tbreak;\r\n\tcase  NRS_CONVERT_NUM_TO_INT:\r\n\t{\r\n\t\t// תֵʽ\r\n\t\t// dwParam1Ϊ PMDATA_INF ָ룬 m_dtDataType Ϊֵ͡\r\n\t\t// תֵ\r\n\t\tPMDATA_INF pArgInf = (PMDATA_INF)dwParam1;\r\n\t\tINT nNewVal = pArgInf->m_int;\r\n\t\tswitch (pArgInf->m_dtDataType)\r\n\t\t{\r\n\t\tcase SDT_INT:\r\n\t\tcase SDT_BYTE:\r\n\t\tcase SDT_SHORT:\r\n\t\t\tbreak;\r\n\t\tcase SDT_FLOAT:\r\n\t\t\tnNewVal = (INT)pArgInf->m_float;\r\n\t\t\tbreak;\r\n\t\tcase SDT_INT64:\r\n\t\t\tnNewVal = (INT)pArgInf->m_int64;\r\n\t\t\tbreak;\r\n\t\tcase SDT_DOUBLE:\r\n\t\t\tnNewVal = (INT)pArgInf->m_double;\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n\t\treturn nNewVal;\r\n\t}\r\n\tbreak;\r\n\tcase  NAS_GET_PATH:\r\n\t\t/* صǰлĳһĿ¼ļĿ¼ԡ\\\r\n\t\tdwParam1: ָҪĿ¼Ϊֵ\r\n\t\tAл¾ЧĿ¼:\r\n\t\t1: лϵͳĿ¼\r\n\t\tBЧĿ¼(Ч):\r\n\t\t1001: ϵͳֿ̺֧Ŀ¼\r\n\t\t1002: ϵͳĿ¼\r\n\t\t1003: ϵͳϢĿ¼\r\n\t\t1004: еǼǵϵͳģĿ¼\r\n\t\t1005: ֿ֧ڵĿ¼\r\n\t\t1006: װĿ¼\r\n\t\tCлЧĿ¼(лЧ):\r\n\t\t2001: ûEXEļĿ¼\r\n\t\t2002: ûEXEļ\r\n\t\tdwParam2: ջַߴΪMAX_PATH\r\n\t\t*/\r\n\t\tif (::GetModuleFileNameA(NULL, strBlackMoonFileName_Path, MAX_PATH))\r\n\t\t{\r\n\t\t\tchar* pFind = strrchr(strBlackMoonFileName_Path, '\\\\');\r\n\t\t\tpFind++;\r\n\t\t\t*pFind = 0;\r\n\t\t\tpFind++;\r\n\t\t\tstrcpy(strBlackMoonFileName_Name, pFind);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tstrBlackMoonFileName_Path[0] = 0;\r\n\t\t\tstrBlackMoonFileName_Name[0] = 0;\r\n\t\t}\r\n\r\n\t\tswitch (dwParam1)\r\n\t\t{\r\n\t\tcase 1:\r\n\t\t\tstrcpy((char*)dwParam2, strBlackMoonFileName_Path);\r\n\t\t\treturn (INT)strBlackMoonFileName_Path;\r\n\t\t\tbreak;\r\n\t\tcase 2001:\r\n\t\t\tstrcpy((char*)dwParam2, strBlackMoonFileName_Path);\r\n\t\t\treturn (INT)strBlackMoonFileName_Path;\r\n\t\t\tbreak;\r\n\t\tcase 2002:\r\n\t\t\tstrcpy((char*)dwParam2, strBlackMoonFileName_Name);\r\n\t\t\treturn (INT)strBlackMoonFileName_Name;\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\tcase  NAS_GET_LANG_ID:\r\n\t\t// صǰϵͳлֵ֧IDIDֵlang.h\r\n\t\treturn 1;\r\n\tcase  NAS_GET_VER:\r\n\t\t// صǰϵͳлİ汾ţLOWORDΪ汾ţHIWORDΪΰ汾š\r\n\t\treturn 0x00000004;\r\n\tcase  NRS_GET_WINFORM_COUNT:\r\n\t\t// صǰĴĿ\r\n\t\treturn 0;\r\n\tcase  NRS_GET_WINFORM_HWND:\r\n\t\t// ָĴھôδ룬NULL\r\n\t\t// dwParam1Ϊ\r\n\t\treturn NULL;\r\n\tcase NAS_GET_APP_ICON:\r\n\t\t// ֪ͨϵͳسͼꡣ\r\n\t\t// dwParam1ΪPAPP_ICONָ롣\r\n\tcase  NAS_GET_LIB_DATA_TYPE_INFO:\r\n\t\t// ָⶨ͵PLIB_DATA_TYPE_INFOϢָ롣\r\n\t\t// dwParam1Ϊ͡\r\n\t\t// Ч߲Ϊⶨͣ򷵻NULL򷵻PLIB_DATA_TYPE_INFOָ롣\r\n\tcase  NAS_GET_HBITMAP:\r\n\t\t// dwParam1ΪͼƬָ룬dwParam2ΪͼƬݳߴ硣\r\n\t\t// ɹطNULLHBITMAPעʹϺͷţ򷵻NULL\r\n\r\n\tcase  NAS_CREATE_CWND_OBJECT_FROM_HWND:\r\n\t\t// ָͨHWNDһCWND󣬷ָ룬סָͨNRS_DELETE_CWND_OBJECTͷ\r\n\t\t// dwParam1ΪHWND\r\n\t\t// ɹCWnd*ָ룬ʧܷNULL\r\n\tcase  NAS_DELETE_CWND_OBJECT:\r\n\t\t// ɾͨNRS_CREATE_CWND_OBJECT_FROM_HWNDCWND\r\n\t\t// dwParam1ΪɾCWndָ\r\n\tcase  NAS_DETACH_CWND_OBJECT:\r\n\t\t// ȡͨNRS_CREATE_CWND_OBJECT_FROM_HWNDCWNDHWNDİ\r\n\t\t// dwParam1ΪCWndָ\r\n\t\t// ɹHWND,ʧܷ0\r\n\tcase  NAS_GET_HWND_OF_CWND_OBJECT:\r\n\t\t// ȡͨNRS_CREATE_CWND_OBJECT_FROM_HWNDCWNDеHWND\r\n\t\t// dwParam1ΪCWndָ\r\n\t\t// ɹHWND,ʧܷ0\r\n\tcase  NAS_ATTACH_CWND_OBJECT:\r\n\t\t// ָHWNDͨNRS_CREATE_CWND_OBJECT_FROM_HWNDCWND\r\n\t\t// dwParam1ΪHWND\r\n\t\t// dwParam2ΪCWndָ\r\n\t\t// ɹ1,ʧܷ0\r\n\tcase \tNAS_IS_EWIN:\r\n\t\t// ָΪԴڻ棬򷵻ؼ١\r\n\t\t// dwParam1ΪԵHWND.\r\n// NRS_ Ϊܱл֪ͨ\r\n\tcase  NRS_UNIT_DESTROIED:\r\n\t\t// ֪ͨϵͳָѾ١\r\n\t\t// dwParam1ΪdwFormID\r\n\t\t// dwParam2ΪdwUnitID\r\n\tcase  NRS_GET_UNIT_PTR:\r\n\t\t// ȡָ\r\n\t\t// dwParam1ΪWinFormID\r\n\t\t// dwParam2ΪWinUnitID\r\n\t\t// ɹЧCWnd*ָ룬ʧܷ0\r\n\tcase  NRS_GET_AND_CHECK_UNIT_PTR:\r\n\t\t// ȡָ\r\n\t\t// dwParam1ΪWinFormID\r\n\t\t// dwParam2ΪWinUnitID\r\n\t\t// ɹЧCWnd*ָ룬ʧܱʱ˳\r\n\tcase  NRS_EVENT_NOTIFY:\r\n\t\t// Եһ෽ʽ֪ͨϵͳ¼\r\n\t\t// dwParam1ΪPEVENT_NOTIFYָ롣\r\n\t\t//    0 ʾ¼ѱϵͳʾϵͳѾɹݴ¼û\r\n\t\t// ¼ӳ\r\n\tcase  NRS_GET_UNIT_DATA_TYPE:\r\n\t\t// dwParam1ΪWinFormID\r\n\t\t// dwParam2ΪWinUnitID\r\n\t\t// ɹЧ DATA_TYPE ʧܷ 0 \r\n\r\n\tcase  NRS_EVENT_NOTIFY2:\r\n\t\t// Եڶ෽ʽ֪ͨϵͳ¼\r\n\t\t// dwParam1ΪPEVENT_NOTIFY2ָ롣\r\n\t\t//    0 ʾ¼ѱϵͳʾϵͳѾɹݴ¼û\r\n\t\t// ¼ӳ\r\n\r\n\tcase  NRS_GET_BITMAP_DATA:\r\n\t\t// ָHBITMAPͼƬݣɹذBMPͼƬݵHGLOBALʧܷNULL\r\n\t\t// dwParam1ΪȡͼƬݵHBITMAP\r\n\tcase  NRS_FREE_COMOBJECT:\r\n\t\t// ֪ͨϵͳͷָDTP_COM_OBJECTCOM\r\n\t\t// dwParam1ΪCOMĵַָ롣\r\n\tcase  NRS_CHK_TAB_VISIBLE:\r\n\tdefault:\r\n\t{\r\n\t\tchar ErrorString[255];\r\n\t\twsprintfA(ErrorString, \"֧ϵͳܺ%d. 뽫Ϣ\", nMsg);\r\n\t\tMessageBoxA(0, ErrorString, \"blackmoon\", MB_ICONERROR);\r\n\t\tbreak;\r\n\t}\r\n\t}\r\n\treturn NULL;\r\n\r\n}\r\n\r\nEXTERN_C INT WINAPI BlackMoonReplac_NotifySys(INT nMsg, DWORD dwParam1, DWORD dwParam2)\r\n{\r\n\treturn NR_OK;\r\n}\r\n\r\nINT WINAPI NotifySys(INT nMsg, DWORD dwParam1, DWORD dwParam2)\r\n{\r\n\r\n\treturn BlackMoonFuncForeLibNotifySys(nMsg, dwParam1, dwParam2);\r\n}\r\n\r\n// ʹָıݽ׳ʹõıݡ\r\n/*\r\nchar* CloneTextData (char* ps)\r\n{\r\n\tif (ps == NULL || *ps == '\\0')\r\n\t\treturn NULL;\r\n\r\n\tINT nTextLen = strlen (ps);\r\n\tchar* pd = (char*)NotifySys (NRS_MALLOC, (DWORD)(nTextLen + 1), 0);\r\n\tmemcpy (pd, ps, nTextLen);\r\n\tpd [nTextLen] = '\\0';\r\n\treturn pd;\r\n}*/\r\n/*\r\n// ʹָıݽ׳ʹõıݡ\r\n//   nTextLenָıֵĳȣ㣩\r\n// Ϊ-1ȡpsȫȡ\r\nchar* CloneTextData (char* ps, INT nTextLen)\r\n{\r\n\tif (nTextLen <= 0)\r\n\t\treturn NULL;\r\n\r\n\tchar* pd = (char*)NotifySys (NRS_MALLOC, (DWORD)(nTextLen + 1), 0);\r\n\tmemcpy (pd, ps, nTextLen);\r\n\tpd [nTextLen] = '\\0';\r\n\treturn pd;\r\n}\r\n\r\n// ʹָݽ׳ʹõֽڼݡ\r\nLPBYTE CloneBinData (LPBYTE pData, INT nDataSize)\r\n{\r\n\tif (nDataSize == 0)\r\n\t\treturn NULL;\r\n\r\n\tLPBYTE pd = (LPBYTE)NotifySys (NRS_MALLOC, (DWORD)(sizeof (INT) * 2 + nDataSize), 0);\r\n\t*(LPINT)pd = 1;\r\n\t*(LPINT)(pd + sizeof (INT)) = nDataSize;\r\n\tmemcpy (pd + sizeof (INT) * 2, pData, nDataSize);\r\n\treturn pd;\r\n}\r\n\r\n// ʱ\r\nvoid GReportError (char* szErrText)\r\n{\r\n\tNotifySys (NRS_RUNTIME_ERR, (DWORD)szErrText, 0);\r\n}\r\n\r\nvoid* MMalloc (INT nSize)\r\n{\r\n\treturn (void*)NotifySys (NRS_MALLOC, (DWORD)nSize, 0);\r\n}\r\n\r\nvoid MFree (void* p)\r\n{\r\n\tNotifySys (NRS_MFREE, (DWORD)p, 0);\r\n}\r\n*/\r\n// ݲ׵ַԱĿ\r\nLPBYTE GetAryElementInf(void* pAryData, LPINT pnElementCount)\r\n{\r\n\tLPINT pnData = (LPINT)pAryData;\r\n\tINT nArys = *pnData++;  // ȡά\r\n\t// ԱĿ\r\n\tINT nElementCount = 1;\r\n\twhile (nArys > 0)\r\n\t{\r\n\t\tnElementCount *= *pnData++;\r\n\t\tnArys--;\r\n\t}\r\n\r\n\tif (pnElementCount != NULL)\r\n\t\t*pnElementCount = nElementCount;\r\n\treturn (LPBYTE)pnData;\r\n}\r\n/*\r\n#define DTT_IS_NULL_DATA_TYPE   0\r\n#define DTT_IS_SYS_DATA_TYPE    1\r\n#define DTT_IS_USER_DATA_TYPE   2\r\n#define DTT_IS_LIB_DATA_TYPE    3\r\n// ȡ͵\r\nINT GetDataTypeType (DATA_TYPE dtDataType)\r\n{\r\n\tif (dtDataType == _SDT_NULL)\r\n\t\treturn DTT_IS_NULL_DATA_TYPE;\r\n\r\n\tDWORD dw = dtDataType & 0xC0000000;\r\n\treturn dw == DTM_SYS_DATA_TYPE_MASK ? DTT_IS_SYS_DATA_TYPE :\r\n\t\t\tdw == DTM_USER_DATA_TYPE_MASK ? DTT_IS_USER_DATA_TYPE :\r\n\t\t\tDTT_IS_LIB_DATA_TYPE;\r\n}\r\n*/\r\n\r\n//liigo\r\n\r\n\r\n/*\r\n//!!! º֮ԱȫΪINT(ͬռ4ֽ)\r\n//index: 0..*/\r\n\r\n\r\nvoid* _GetPointerByIndex(void* pBase, int index)\r\n{\r\n\treturn (void*)((INT)pBase + index * sizeof(INT));\r\n}\r\n\r\nINT _GetIntByIndex(void* pBase, INT index)\r\n{\r\n\treturn *((INT*)_GetPointerByIndex(pBase, index));\r\n}\r\n\r\nvoid _SetIntByIndex(void* pBase, INT index, INT value)\r\n{\r\n\t*((INT*)_GetPointerByIndex(pBase, index)) = value;\r\n}\r\n\r\n\r\nINT GetIntByIndex(PMDATA_INF pArgInf, INT index)\r\n{\r\n\treturn _GetIntByIndex(pArgInf->m_pCompoundData, index);\r\n}\r\n\r\nvoid SetIntByIndex(PMDATA_INF pArgInf, INT index, INT value)\r\n{\r\n\t_SetIntByIndex(pArgInf->m_pCompoundData, index, value);\r\n}\r\n\r\nvoid* GetPointerByIndex(PMDATA_INF pArgInf, INT index)\r\n{\r\n\treturn _GetPointerByIndex(pArgInf->m_pCompoundData, index);\r\n}\r\n\r\nvoid SetLogfont_CompileLanVer(LPLOGFONT pLogfont)\r\n{\r\n\t::GetObject(::GetStockObject(DEFAULT_GUI_FONT), sizeof(LOGFONT), pLogfont);\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/BlackMoonResDll.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n\r\nextern \"C\" {\r\n\r\n\r\n\tint __stdcall DllMain( HANDLE hModule, \r\n                       DWORD  ul_reason_for_call, \r\n                       LPVOID lpReserved\r\n\t\t\t\t\t )\r\n\t{\r\n\r\n\t\treturn 1;\r\n\t\t\r\n\t}\r\n\r\n}"
  },
  {
    "path": "krnln/CloneBinData.cpp",
    "content": "#include \"StdAfx.h\"\r\n\r\n// ʹָݽ׳ʹõֽڼݡ\r\nLPBYTE CloneBinData (LPBYTE pData, INT nDataSize)\r\n{\r\n\tif (nDataSize == 0)\r\n\t\treturn NULL;\r\n\t\r\n\tLPBYTE pd = (LPBYTE)E_MAlloc_Nzero ((DWORD)(sizeof (INT) * 2 + nDataSize));\r\n\t*(LPINT)pd = 1;\r\n\t*(LPINT)(pd + sizeof (INT)) = nDataSize;\r\n\tmemcpy (pd + sizeof (INT) * 2, pData, nDataSize);\r\n\treturn pd;\r\n}"
  },
  {
    "path": "krnln/CloneTextData.cpp",
    "content": "#include \"StdAfx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n// ʹָıݽ׳ʹõıݡ\r\n//   nTextLenָıֵĳȣ㣩\r\n// Ϊ-1ȡpsȫȡ\r\nchar* CloneTextData (char* ps, INT nTextLen)\r\n{\r\n\tif (nTextLen <= 0)\r\n\t\treturn NULL;\r\n\t\r\n\tchar* pd = (char*)E_MAlloc_Nzero ((DWORD)(nTextLen + 1));\r\n\tmemcpy (pd, ps, nTextLen);\r\n\tpd [nTextLen] = '\\0';\r\n\treturn pd;\r\n}\r\n// ʹָıݽ׳ʹõıݡ\r\nchar* CloneTextData (char* ps)\r\n{\r\n    if (ps == NULL || *ps == '\\0')\r\n        return NULL;\r\n\r\n    INT nTextLen = mystrlen (ps);\r\n    char* pd = (char*)E_MAlloc_Nzero ((DWORD)(nTextLen + 1));\r\n    memcpy (pd, ps, nTextLen);\r\n    pd [nTextLen] = '\\0';\r\n    return pd;\r\n}"
  },
  {
    "path": "krnln/DateTimeFormat.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <stdio.h>\r\n#include <math.h>\r\n\r\n#include <oleauto.h>\r\n#pragma comment(lib, \"OleAut32.lib\")\r\n\r\n//ʽʱı\r\nvoid DateTimeFormat(LPSTR strValue,DATE dtDt,BOOL bOnlyDatePart)\r\n{\r\n\tSYSTEMTIME st = {0};\r\n\tVariantTimeToSystemTime(dtDt, &st);\r\n\t\r\n\tchar strFormat [128];\r\n\tstrcpy(strFormat,\"%d%d%d\");\r\n\r\n\r\n\t//ʽʱ䲿\r\n\tchar strFormatTime [128];\r\n\t\r\n\tif(st.wSecond)\r\n\t\tstrcpy(strFormatTime,\"%dʱ%d%d\");\r\n\telse if(st.wMinute && st.wSecond ==0)\r\n\t\tstrcpy(strFormatTime,\"%dʱ%d\");\r\n\telse if(st.wHour && st.wMinute==0 && st.wSecond ==0)\r\n\t\tstrcpy(strFormatTime,\"%dʱ\");\r\n\telse\r\n\t\tstrFormatTime[0]=0;\r\n\r\n\tif(bOnlyDatePart==FALSE)\r\n\t\tstrcat(strFormat,strFormatTime);\r\n\r\n\tsprintf(strValue, strFormat, st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);\r\n\r\n}"
  },
  {
    "path": "krnln/DllEntryFunc.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n\r\nextern \"C\" PDESTROY ECodeStart();\r\nPDESTROY DllEntryFunc(){\r\n\tDWORD dwReturn;//ҪĴȻʱ\r\n\t__asm{\r\n        push esi\r\n        push edi\r\n        push ebx\r\n        call ECodeStart\r\n        pop ebx\r\n        pop edi\r\n        pop esi\r\n\t\tmov dwReturn,eax\r\n \t}\r\n\treturn (PDESTROY)dwReturn;\r\n\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "krnln/EyComInit.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\nextern \"C\" PDESTROY DestroyAddress;\r\n\r\nextern \"C\" PDESTROY HFileDestroyAddress;\r\n\r\nextern \"C\" PDESTROY DestroyMidiPlayer;\r\n\r\nextern \"C\" HANDLE hBlackMoonHeap;\r\nextern \"C\" {\r\n\r\n\r\n\tvoid  _cdecl E_Init(){\r\n\t\thBlackMoonHeap =::GetProcessHeap();\r\n\t\tCoInitialize(0);\r\n\t\tBlackMoonInitAllElib();\r\n\t}\r\n\r\n\tvoid  _cdecl E_DestroyRes(){\r\n\t\t\r\n\t\tif(DestroyAddress)\r\n\t\t\tDestroyAddress();\r\n\r\n\t\tif(HFileDestroyAddress)\r\n\t\t\tHFileDestroyAddress();\r\n\r\n\t\tif(DestroyMidiPlayer)\r\n\t\t\tDestroyMidiPlayer();\r\n\t\tBlackMoonFreeAllElib();\r\n\t\tCoUninitialize();\r\n\t}\r\n\r\n\r\n}"
  },
  {
    "path": "krnln/EyInit.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\nextern \"C\" PDESTROY DestroyAddress;\r\n\r\nextern \"C\" PDESTROY HFileDestroyAddress;\r\n\r\nextern \"C\" PDESTROY DestroyMidiPlayer;\r\nextern \"C\" HANDLE hBlackMoonHeap;\r\nextern \"C\" {\r\n\r\n\r\n\tvoid  _cdecl E_Init(){\r\n\t\t\r\n\t\thBlackMoonHeap =::GetProcessHeap();\r\n\t\t//CoInitialize(0);\r\n\t\tBlackMoonInitAllElib();\r\n\t}\r\n\r\n\t\r\n\tvoid  _cdecl E_DestroyRes(){\r\n\t\t\r\n\t\tif(DestroyAddress)\r\n\t\t\tDestroyAddress();\r\n\r\n\t\tif(HFileDestroyAddress)\r\n\t\t\tHFileDestroyAddress();\r\n\r\n\t\tif(DestroyMidiPlayer)\r\n\t\t\tDestroyMidiPlayer();\r\n\t\tBlackMoonFreeAllElib();\r\n\t}\r\n\r\n}"
  },
  {
    "path": "krnln/FileManager.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n\r\nPFILEELEMENT pFileList = NULL;\r\nextern \"C\" PDESTROY HFileDestroyAddress;\r\n\r\nCRITICAL_SECTION csFileMan;\r\nBOOL bIsCSinit = FALSE;\r\n\r\nvoid enterfm()\r\n{\r\n\tif (!bIsCSinit)\r\n\t{\r\n\t\tInitializeCriticalSection(&csFileMan);\r\n\t\tbIsCSinit = TRUE;\r\n\t}\r\n\tEnterCriticalSection(&csFileMan);\r\n}\r\n\r\nvoid leavefm()\r\n{\r\n\tif (bIsCSinit)\r\n\t\tLeaveCriticalSection(&csFileMan);\r\n}\r\n\r\nvoid ResetFileIO()\r\n{\r\n\tenterfm();\r\n\tPFILEELEMENT pObjFile = pFileList;\r\n\tpFileList = NULL;\r\n\tHFileDestroyAddress = NULL;\r\n\r\n\twhile(pObjFile)\r\n\t{\r\n\r\n\t\tif(pObjFile->FileHandle)\r\n\t\t{\r\n\t\t\tif(pObjFile->nType ==1 || pObjFile->nType ==3)\r\n\t\t\t\tCloseHandle((HANDLE)pObjFile->FileHandle);\r\n\t\t\telse if(pObjFile->nType ==2)\r\n\t\t\t\tdelete (CMyMemFile*)pObjFile->FileHandle;\r\n\t\t}\r\n\r\n\t\tPFILEELEMENT pPreFile = pObjFile;\r\n\t\tpObjFile = (PFILEELEMENT)pObjFile->pLast;\r\n\t\tmemset(pPreFile,0,sizeof(FILEELEMENT));\r\n\t\tdelete pPreFile;\r\n\t}\r\n\tleavefm();\r\n}\r\nvoid CloseEfile(PFILEELEMENT pFile)\r\n{\r\n\tPFILEELEMENT pObjFile = pFileList;\r\n\tPFILEELEMENT pPreFile = NULL;\r\n\t\r\n\tenterfm();\r\n\twhile(pObjFile)\r\n\t{\r\n\t\tif(pObjFile == pFile)\r\n\t\t{\r\n\t\t\tif(pPreFile)\r\n\t\t\t{//ڱ\r\n\t\t\t\tpPreFile->pLast = pObjFile->pLast;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{ //\r\n\t\t\t\tpFileList = (PFILEELEMENT)pObjFile->pLast;\r\n\t\t\t\tif(pFileList==NULL)\r\n\t\t\t\t\tHFileDestroyAddress = NULL;\r\n\r\n\t\t\t}\r\n\t\t\tif(pObjFile->FileHandle)\r\n\t\t\t{\r\n\t\t\t\tif(pObjFile->nType ==1 || pObjFile->nType == 3)\r\n\t\t\t\t\tCloseHandle((HANDLE)pObjFile->FileHandle);\r\n\t\t\t\telse if(pObjFile->nType ==2)\r\n\t\t\t\t\tdelete (CMyMemFile*)pObjFile->FileHandle;\r\n\t\t\t}\r\n\t\t\tmemset(pObjFile,0,sizeof(FILEELEMENT));\r\n\t\t\tdelete pObjFile;\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n\t\tpPreFile = pObjFile;\r\n\t\tpObjFile = (PFILEELEMENT)pObjFile->pLast;\r\n\t}\r\n\tleavefm();\r\n}\r\n\r\n\r\nvoid AddFileMangerList(PFILEELEMENT pFile)\r\n{\r\n\tenterfm();\r\n\tif(pFileList==NULL)//׸\r\n\t\tHFileDestroyAddress = (PDESTROY)ResetFileIO;\r\n\tpFile->pLast = pFileList;\r\n\tpFileList = pFile;\r\n\tleavefm();\r\n}"
  },
  {
    "path": "krnln/FreeAryElement.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n\r\n\r\nvoid FreeAryElement (void* pAryData)//ıֽڼЧ\r\n{\r\n\tDWORD AryElementCount = 0;\r\n\tLPINT* pArryPtr = (LPINT*)GetAryElementInf(pAryData ,AryElementCount);\r\n\r\n\tfor(INT i=0;i < (INT)AryElementCount;i++)\r\n\t{\r\n\t\tvoid* pElementData = *pArryPtr;\r\n\t\tif(pElementData)\r\n\t\t{\r\n\t\t\tE_MFree(pElementData);\r\n\t\t\t*pArryPtr = NULL;\r\n\t\t}\r\n\t\tpArryPtr++;\r\n\t}\r\n\r\n\tE_MFree(pAryData);\r\n}"
  },
  {
    "path": "krnln/GetAryElementInf.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\nvoid* GetAryElementInf(void* pAryData ,DWORD& AryElementCount)\r\n{\r\n    LPINT pnData;\r\n    INT nArys;\r\n    UINT nElementCount;\r\n    \r\n    pnData = (LPINT)pAryData;\r\n    \r\n    nArys=*pnData; //ȡά\r\n    pnData +=1;\r\n\r\n     // ԱĿ\r\n    nElementCount = 1;\r\n    while (nArys > 0)\r\n\t{\r\n        nElementCount *= pnData[0];\r\n        pnData ++;\r\n        nArys--;\r\n    }\r\n\r\n    AryElementCount = nElementCount;\r\n    return pnData;\r\n}"
  },
  {
    "path": "krnln/GetDataTypeType.cpp",
    "content": "#include \"StdAfx.h\"\r\n\r\n\r\n// ȡ͵\r\nINT GetDataTypeType (DATA_TYPE dtDataType)\r\n{\r\n\tif (dtDataType == _SDT_NULL)\r\n\t\treturn DTT_IS_NULL_DATA_TYPE;\r\n\t\r\n\tDWORD dw = dtDataType & 0xC0000000;\r\n\treturn dw == DTM_SYS_DATA_TYPE_MASK ? DTT_IS_SYS_DATA_TYPE :\r\n\tdw == DTM_USER_DATA_TYPE_MASK ? DTT_IS_USER_DATA_TYPE :\r\n\tDTT_IS_LIB_DATA_TYPE;\r\n}"
  },
  {
    "path": "krnln/GetDatePart.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n#include <stdio.h>\r\n#include <oleauto.h>\r\n#pragma comment(lib, \"OleAut32.lib\")\r\n\r\n//ȡڲ,1ΪֻڲֵDATE\r\n//189912300ʱ0000 Ϊ0׼,λΪСֵ\r\n\r\nvoid GetDatePart(DATE dt,INT& nYear,INT& nMonth,INT& nDay)\r\n{\r\n\tSYSTEMTIME st = {0};\r\n\tVariantTimeToSystemTime(dt, &st);\r\n\tnYear = (INT)st.wYear;\r\n\tnMonth = (INT)st.wMonth;\r\n\tnDay = (INT)st.wDay;\r\n\t/*\r\n\tif(dt==0 || dt==1)\r\n\t{\r\n\t\tnYear = 1899;\r\n\t\tnMonth = 12;\r\n\t\tnDay = 30 + (INT)dt;\r\n\t\treturn;\r\n\t}\r\n\tINT nCountDay;\r\n\tINT nStatrYear;\r\n\tINT nYearDay;\r\n\tINT nStep;\r\n\tif(dt>0)\r\n\t{\r\n\t\tnCountDay = (INT)(dt-1);//190011Ϊ׼\r\n\t\tnStatrYear = 1900;\r\n\t\tnStep=1;\r\n\t}\r\n\telse\r\n\t{\r\n\t\tnCountDay = (INT)fabs(dt-1);//18991231Ϊ׼\r\n\t\tnStatrYear = 1899;\r\n\t\tnStep = -1;\r\n\t}\r\n\r\n\twhile(1)\r\n\t{\r\n\t\tnYearDay = 365;\r\n\t\tif((nStatrYear % 400==0) || (nStatrYear % 100 !=0) && (nStatrYear %4 ==0))//\r\n\t\t\tnYearDay ++;\r\n\t\tif(nCountDay <= nYearDay)//ķΧ\r\n\t\t{\r\n\t\t\tnYear = nStatrYear;\r\n\t\t\tif(nStep==-1)\r\n\t\t\t{\r\n\t\t\t\tnCountDay = nYearDay - nCountDay;\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tnCountDay -=nYearDay;\r\n\t\tnStatrYear +=nStep;\r\n\t}\r\n\tDWORD nMonDay [12] = {31,28,31,30,31,30,31,31,30,31,30,31};\r\n\tif((nYear % 400==0) || (nYear % 100 != 0) && (nYear %4 ==0))//\r\n\t\tnMonDay [1] = 29; //\r\n\r\n\tfor(INT i=0;i <12;i++)\r\n\t{\r\n\t\tif(nCountDay <= (INT)(nMonDay[i]))\r\n\t\t{\r\n\t\t\tnMonth = i+1;\r\n\t\t\tnDay = nCountDay;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tnCountDay-=nMonDay[i];\r\n\r\n\t}\r\n\t\t*/\r\n}\r\n\r\n//СϵһaΪ,bΪС,aΪ׼\r\n//ȷaֻbֻС\r\ndouble makedb(double a, double b)\r\n{\r\n\tif (((*(INT64*)&a)&0x8000000000000000) == ((*(INT64*)&b)&0x8000000000000000))\r\n\t{//ֱͬӼ\r\n\t\treturn a+b;\r\n\t}\r\n\t//Ųͬ\r\n\treturn a-b;\r\n}\r\n\r\nDATE toMyDate(DATE dt)\r\n{\r\n\tif (dt > -1.0e-7) return dt; //ڵ0\r\n\r\n\tDATE dtZS;\r\n\tDATE dtXS = modf(dt, &dtZS);\r\n\treturn dtZS + fabs(dtXS);\r\n}\r\n\r\nDATE toEDate(DATE dt)\r\n{\r\n\tif (dt > -1.0e-7) return dt; //ڵ0\r\n\r\n\tDATE dtZS;\r\n\tDATE dtXS = modf(dt, &dtZS);\r\n\tif (fabs(dtXS) < 1.0e-7) { //СΪ0\r\n\t\treturn dtZS;//ֱӷ\r\n\t}\r\n\tdtZS -= 2.0;\r\n\treturn dtZS - dtXS;\r\n}"
  },
  {
    "path": "krnln/GetDaysOfSpecMonth.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\nINT GetDaysOfSpecMonth(INT nYear,INT nMonth)\r\n{\r\n\tDWORD nMonDay [12] = {31,28,31,30,31,30,31,31,30,31,30,31};\r\n\tif((nYear % 400==0) || (nYear % 100 != 0) && (nYear %4 ==0))//\r\n\t\tnMonDay [1] = 29; //\r\n\treturn nMonDay [nMonth-1];\r\n}"
  },
  {
    "path": "krnln/GetRegRootVal.cpp",
    "content": "#include \"stdafx.h\"\r\n// 1#ࣻ 2#ã 3#û 4#ػ 5#û\r\nHKEY GetRegRootVal(INT nVal)\r\n{\r\n\tHKEY hkey = NULL;\r\n\tswitch(nVal)\r\n\t{\r\n\tcase 1:\r\n\t\thkey = HKEY_CLASSES_ROOT;\r\n\t\tbreak;\r\n\tcase 2:\r\n\t\thkey = HKEY_CURRENT_CONFIG;\r\n\t\tbreak;\r\n\tcase 3:\r\n\t\thkey = HKEY_CURRENT_USER;\r\n\t\tbreak;\r\n\tcase 4:\r\n\t\thkey = HKEY_LOCAL_MACHINE;\r\n\t\tbreak;\r\n\tcase 5:\r\n\t\thkey = HKEY_USERS;\r\n\t\tbreak;\r\n\t}\r\n\treturn hkey;\r\n}"
  },
  {
    "path": "krnln/GetSpecTime.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n\r\n#include <oleauto.h>\r\n#pragma comment(lib, \"OleAut32.lib\")\r\n\r\n//ȡָʱ ʱֵȷ\r\n//189912300ʱ0000 Ϊ0׼,λΪСֵ\r\ndouble GetSpecDateTime(INT nYear, INT nMonth, INT nDay, INT nHour,INT nMinute,INT nSecond)\r\n{\r\n\tdouble dDate = 0;\r\n\tSYSTEMTIME st = {0};\r\n\tst.wYear = (WORD)nYear;\r\n\tst.wMonth = (WORD)nMonth;\r\n\tst.wDay = (WORD)nDay;\r\n\tst.wHour = (WORD)nHour;\r\n\tst.wMinute = (WORD)nMinute;\r\n\tst.wSecond = (WORD)nSecond;\r\n\tSystemTimeToVariantTime(&st, &dDate);\r\n\treturn dDate;\r\n\t/*\r\n\tdouble nSecCount = nHour * 3600;//\r\n\tnSecCount+=(nMinute*60);\r\n\tnSecCount+=nSecond;\r\n\tdouble dTime = nSecCount/86400;\r\n\tdouble dDate = 0;\r\n\tINT nStep;\r\n\r\n\t\r\n\tif(nYear==1899)\r\n\t{\r\n\t\tif(nMonth==12)\r\n\t\t{\r\n\t\t\tif(nDay >= 30)\r\n\t\t\t{\r\n\t\t\t\tdDate = nDay - 30;\r\n\t\t\t\treturn (dDate + dTime); \r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tnStep = -1;\r\n\t}\r\n\telse if (nYear > 1899)\r\n\t{\r\n\t\tnStep = 1;\r\n\r\n\t}else\r\n\t\tnStep = -1;\r\n\r\n\t\r\n\r\n\tINT nStatrYear;\r\n\tINT nYearDay;\r\n\tINT nCountDay = 0;\r\n\tif(nStep==1)\r\n\t\tnStatrYear = 1900;//190011Ϊ׼\r\n\telse\r\n\t\tnStatrYear = 1899;\r\n\r\n\t\t\r\n\r\n\twhile(1)\r\n\t{\r\n\r\n\t\tif(nStatrYear==nYear)\r\n\t\t{\r\n\t\t\tDWORD nMonDay [12] = {31,28,31,30,31,30,31,31,30,31,30,31};\r\n\t\t\tif((nYear % 400==0) || (nYear % 100 != 0) && (nYear %4 ==0))//\r\n\t\t\t\tnMonDay [1] = 29; //\r\n\t\t\tif(nStep==1)\r\n\t\t\t{\r\n\t\t\t\tfor(INT i=0;i <12;i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(i == nMonth - 1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnCountDay += nDay;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnCountDay += nMonDay[i];\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tfor(INT i = 11;i >=0;i--)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(i == nMonth - 1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnCountDay += (nMonDay[i]-nDay);\r\n\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnCountDay += nMonDay[i];\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n\t\tnYearDay = 365;\r\n\t\tif((nStatrYear % 400==0) || (nStatrYear % 100 !=0) && (nStatrYear %4 ==0))//\r\n\t\t\tnYearDay ++;\r\n\t\tnCountDay += nYearDay;\r\n\t\tnStatrYear+=nStep;\r\n\r\n\t}\r\n\r\n\tif(nStep==1)\r\n\t{\r\n\t\tdDate = nCountDay + 1;\r\n\t\treturn (dDate + dTime); \r\n\t}\r\n\r\n\r\n\tdDate = -(nCountDay - 1 + dTime);\r\n\treturn dDate; \r\n\t\r\n\t*/\r\n}\r\n"
  },
  {
    "path": "krnln/GetSysDataTypeDataSize.cpp",
    "content": "#include \"StdAfx.h\"\r\n\r\n\r\n// \r\nINT GetSysDataTypeDataSize (DATA_TYPE dtSysDataType)\r\n{\r\n\tASSERT (sizeof (DWORD) == 4);\r\n\t\r\n\tswitch (dtSysDataType)\r\n\t{\r\n\tcase SDT_BYTE:\r\n\t\tASSERT (sizeof (BYTE) == 1);\r\n\t\treturn sizeof (BYTE);\r\n\tcase SDT_SHORT:\r\n\t\tASSERT (sizeof (SHORT) == 2);\r\n\t\treturn sizeof (SHORT);\r\n\tcase SDT_BOOL:\r\n\t\tASSERT (sizeof (BOOL) == 4);\r\n\t\treturn sizeof (BOOL);\r\n\tcase SDT_INT:\r\n\t\tASSERT (sizeof (INT) == 4);\r\n\t\treturn sizeof (INT);\r\n\tcase SDT_FLOAT:\r\n\t\tASSERT (sizeof (FLOAT) == 4);\r\n\t\treturn sizeof (FLOAT);\r\n\tcase SDT_SUB_PTR:    // ¼ӳĵַָ\r\n\t\treturn sizeof (DWORD);\r\n\tcase SDT_TEXT:    // ıͺֽڼΪһָ,Ϊĸֽ.\r\n\tcase SDT_BIN:\r\n\t\treturn sizeof (DWORD);\r\n\tcase SDT_INT64:\r\n\t\tASSERT (sizeof (INT64) == 8);\r\n\t\treturn sizeof (INT64);\r\n\tcase SDT_DOUBLE:\r\n\t\tASSERT (sizeof (DOUBLE) == 8);\r\n\t\treturn sizeof (DOUBLE);\r\n\tcase SDT_DATE_TIME:\r\n\t\tASSERT (sizeof (DATE) == 8);\r\n\t\treturn sizeof (DATE);\r\n\tdefault:\r\n\t\tASSERT (FALSE);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\treturn 0;\r\n}"
  },
  {
    "path": "krnln/GetTimePart.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n#include <oleauto.h>\r\n#pragma comment(lib, \"OleAut32.lib\")\r\n\r\n//ȡʱ䲿,1Ϊֻʱ䲿ֵDATE\r\nvoid GetTimePart(DATE dt,INT& nHour,INT& nMinute,INT& nSecond)\r\n{\r\n\tSYSTEMTIME st = {0};\r\n\tVariantTimeToSystemTime(dt, &st);\r\n\tnHour = (INT)st.wHour;\r\n\tnMinute = (INT)st.wMinute;\r\n\tnSecond = (INT)st.wSecond;\r\n\t/*\r\n\tINT nSecCount = (INT)DATE( 86400 * fabs(dt)+0.5);//\r\n\tnHour = nSecCount / 3600;\r\n\tnSecCount %= 3600;\r\n\tnMinute = nSecCount / 60;\r\n\tnSecond = nSecCount % 60;\r\n\t*/\r\n}"
  },
  {
    "path": "krnln/GetWeekDay.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n#include <oleauto.h>\r\n#pragma comment(lib, \"OleAut32.lib\")\r\n\r\nINT GetWeekDay(DATE date)\r\n{\r\n\tSYSTEMTIME st = {0};\r\n\tVariantTimeToSystemTime(date, &st);\r\n\treturn st.wDayOfWeek + 1;\r\n\t/*\r\n\tDATE dt,dd;\r\n\tdt = modf(date,&dd);\r\n\tINT nRet = (INT)fmod(dd,7);\r\n\tif(nRet <= 0)\r\n\t\tnRet += 7;\r\n\treturn nRet;\r\n\t*/\r\n}"
  },
  {
    "path": "krnln/HelpFunc12.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\nextern \"C\" {\r\n\r\n\tchar*  _cdecl E_FindFile (LPCSTR strFile,UINT nAttrib,BOOL bIsMissing,HANDLE* phFile){\r\n//12ź,EAXΪ 0\r\n\t\tHANDLE hFile = *phFile;\r\n\r\n\t\tWIN32_FIND_DATA FindFileData;\r\n\t\tBOOL bFind = FALSE;\r\n\t//\tnAttrib &= 55;//\r\n\t\tif(strFile != NULL && mystrlen(strFile)>0)//һβ\r\n\t\t{\r\n\t\t\t\r\n\t\t\t\r\n\t\t\tif(hFile && hFile != INVALID_HANDLE_VALUE) //رϴξɵľ \r\n\t\t\t\tFindClose(hFile); \r\n\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\thFile = FindFirstFile(strFile,&FindFileData);\r\n\t\t\t*phFile = hFile;\r\n\t\t\tif(hFile ==INVALID_HANDLE_VALUE)\r\n\t\t\t\treturn NULL;\r\n\t\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\tif(bIsMissing)\r\n\t\t\t{\r\n\t\t\t//char ErrorString [255];\r\n\t  \t\t//wsprintf(ErrorString, \"(0x%Xh) (0x%Xh)\", FindFileData.dwFileAttributes,(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY));\r\n\t\t\t//MessageBox(0, ErrorString, FindFileData.cFileName, MB_OK);\r\n\r\n\t\t\t\tif ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)//Ŀ¼\r\n\t\t\t\t\tbFind = TRUE;\r\n\r\n\t\t\t}else {\r\n\r\n\t\t\t\tif ((FindFileData.dwFileAttributes & nAttrib) != 0)//\r\n\t\t\t\t\tbFind = TRUE;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif(hFile==NULL || hFile == INVALID_HANDLE_VALUE) return NULL;\r\n\r\n\t\tif(bFind==FALSE)\r\n\t\t{\r\n\t\t\tif(bIsMissing)\r\n\t\t\t{\r\n\t\t\t\twhile(FindNextFile(hFile,&FindFileData))\r\n\t\t\t\t{\r\n\t\t\t\t\tif((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)//Ŀ¼\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbFind = TRUE;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t}else {\r\n\r\n\t\t\t\twhile(FindNextFile(hFile,&FindFileData))\r\n\t\t\t\t{\r\n\t\t\t\t\tif((FindFileData.dwFileAttributes & nAttrib) != 0)//\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbFind = TRUE;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(bFind)\r\n\t\t{\r\n\t\t\t//\tMessageBox(0, FindFileData.cFileName, \"FILE\", MB_OK);\r\n\t\t\tINT nLen = mystrlen(FindFileData.cFileName);\r\n\t\t\tchar* str = (char*)E_MAlloc_Nzero(nLen+1);\r\n\t\t\tstrcpy(str,FindFileData.cFileName);\r\n\t\t\treturn str;\r\n\t\t}\r\n\t\treturn NULL;\r\n\r\n\t}\r\n\tvoid  _cdecl E_CloseFindFile (HANDLE hFile){\r\n\t\t//12ź,EAXΪ 1\r\n\t\t//char t[12];\r\n\t\t//itoa((int)hFile,t,16);\r\n\r\n\t\t//MessageBox(NULL,t,\"file2\",MB_OK);\r\n\t\t//HANDLE hFile = *phFile;\r\n\t\tif(hFile==NULL || hFile == INVALID_HANDLE_VALUE) return ;\r\n\t\t\r\n\t\tFindClose(hFile); //رϴξɵľ \r\n\t\t//*phFile = NULL;\r\n\t\t\r\n\t}\r\n\r\n}"
  },
  {
    "path": "krnln/IsInFileMangerList.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\nextern PFILEELEMENT pFileList;\r\n\r\nBOOL IsInFileMangerList(PFILEELEMENT pFile)\r\n{\r\n\tPFILEELEMENT pObjFile = pFileList;\r\n\r\n\twhile(pObjFile)\r\n\t{\r\n\t\tif(pObjFile == pFile)\r\n\t\t\treturn TRUE;\r\n\t\tif (pObjFile == (PFILEELEMENT)pObjFile->pLast)\r\n\t\t\tbreak;\r\n\t\tpObjFile = (PFILEELEMENT)pObjFile->pLast;\r\n\t}\r\n\treturn FALSE;\r\n}"
  },
  {
    "path": "krnln/LTrimZeroChr.cpp",
    "content": "#include \"stdafx.h\"\r\n//#include \"Myfunctions.h\"\r\n\r\nvoid LTrimZeroChr(char* str)\r\n{\r\n\tchar *z = NULL;\r\n\tchar *p = NULL;\r\n\r\n\t//С\r\n\tfor (; *str ; str++)\r\n\t{\r\n\t\tif(*str == '.')\r\n\t\t{\r\n\t\t\tp = str++;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\t//\r\n\tif(p) //С\r\n\t{\r\n\t\tfor (; *str; str++)\r\n\t\t{\r\n\t\t\tif (*str == '0')\r\n\t\t\t{\r\n\t\t\t\tif(!z)\r\n\t\t\t\t{\r\n\t\t\t\t\tz = str;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tz = NULL;\r\n\t\t\t}\r\n\t\t}\r\n\t\t//\r\n\t\tif (z)\r\n\t\t{\r\n\t\t\t\r\n\t\t\tif(z == p + 1) //СβɾС\r\n\t\t\t{\r\n\t\t\t\t*p = '\\0';\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t*z = '\\0';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/*\r\n\tint nLen = mystrlen(str);\r\n\tchar * pend = str + nLen;\r\n\tdo\r\n\t{\r\n\r\n\t\tpend--;\r\n\r\n\t\tif(*pend =='.')\r\n\t\t{\r\n\t\t\t\r\n\t\t\t*pend = 0;\r\n\t\t\tbreak;\r\n\t\t} else if(*pend !='0')\r\n\t\t{\r\n\t\t\tpend++;\r\n\t\t\t*pend = 0;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t}while(* pend =='0' && pend > str);\r\n*/\r\n//}"
  },
  {
    "path": "krnln/LTrimZeroChr.h",
    "content": "void LTrimZeroChr(char* str);"
  },
  {
    "path": "krnln/MyMemFile.cpp",
    "content": "// MyMemFile.cpp: implementation of the CMyMemFile class.\r\n//\r\n//////////////////////////////////////////////////////////////////////\r\n\r\n#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n\r\n//////////////////////////////////////////////////////////////////////\r\n// Construction/Destruction\r\n//////////////////////////////////////////////////////////////////////\r\n\r\n////////////////////////////////////////////////////////////////////////////\r\n// CMyMemFile implementation\r\n\r\nCMyMemFile::CMyMemFile(UINT nGrowBytes)\r\n{\r\n\tm_nGrowBytes = nGrowBytes;\r\n\tm_nPosition = 0;\r\n\tm_nBufferSize = 0;\r\n\tm_nFileSize = 0;\r\n\tm_lpBuffer = NULL;\r\n\tm_bAutoDelete = TRUE;\r\n}\r\n\r\nCMyMemFile::CMyMemFile(BYTE* lpBuffer, UINT nBufferSize, UINT nGrowBytes)\r\n{\r\n\r\n\tm_nGrowBytes = nGrowBytes;\r\n\tm_nPosition = 0;\r\n\tm_nBufferSize = nBufferSize;\r\n\tm_nFileSize = nGrowBytes == 0 ? nBufferSize : 0;\r\n\tm_lpBuffer = lpBuffer;\r\n\tm_bAutoDelete = FALSE;\r\n}\r\n\r\nvoid CMyMemFile::Attach(BYTE* lpBuffer, UINT nBufferSize, UINT nGrowBytes)\r\n{\r\n\r\n\tm_nGrowBytes = nGrowBytes;\r\n\tm_nPosition = 0;\r\n\tm_nBufferSize = nBufferSize;\r\n\tm_nFileSize = nGrowBytes == 0 ? nBufferSize : 0;\r\n\tm_lpBuffer = lpBuffer;\r\n\tm_bAutoDelete = FALSE;\r\n}\r\n\r\nBYTE* CMyMemFile::Detach()\r\n{\r\n\tBYTE* lpBuffer = m_lpBuffer;\r\n\tm_lpBuffer = NULL;\r\n\tm_nFileSize = 0;\r\n\tm_nBufferSize = 0;\r\n\tm_nPosition = 0;\r\n\r\n\treturn lpBuffer;\r\n}\r\n\r\nCMyMemFile::~CMyMemFile()\r\n{\r\n\t// Close should have already been called, but we check anyway\r\n\tif (m_lpBuffer)\r\n\t\tClose();\r\n\tm_nGrowBytes = 0;\r\n\tm_nPosition = 0;\r\n\tm_nBufferSize = 0;\r\n\tm_nFileSize = 0;\r\n}\r\n\r\nBYTE* CMyMemFile::Alloc(DWORD nBytes)\r\n{\r\n\treturn (BYTE*)malloc((UINT)nBytes);\r\n}\r\n\r\nBYTE* CMyMemFile::Realloc(BYTE* lpMem, DWORD nBytes)\r\n{\r\n\treturn (BYTE*)realloc(lpMem, (UINT)nBytes);\r\n}\r\n\r\n\r\n\r\nvoid CMyMemFile::Free(BYTE* lpMem)\r\n{\r\n\tfree(lpMem);\r\n}\r\n\r\nDWORD CMyMemFile::GetPosition() const\r\n{\r\n\r\n\treturn m_nPosition;\r\n}\r\n\r\nvoid CMyMemFile::GrowFile(DWORD dwNewLen)\r\n{\r\n\r\n\tif (dwNewLen > m_nBufferSize)\r\n\t{\r\n\t\t// grow the buffer\r\n\t\tDWORD dwNewBufferSize = (DWORD)m_nBufferSize;\r\n\r\n\t\t// watch out for buffers which cannot be grown!\r\n\t\tif (m_nGrowBytes == 0)\r\n\t\t\treturn;\r\n\r\n\t\t// determine new buffer size\r\n\t\twhile (dwNewBufferSize < dwNewLen)\r\n\t\t\tdwNewBufferSize += m_nGrowBytes;\r\n\r\n\t\t// allocate new buffer\r\n\t\tBYTE* lpNew;\r\n\t\tif (m_lpBuffer == NULL)\r\n\t\t\tlpNew = Alloc(dwNewBufferSize);\r\n\t\telse\r\n\t\t\tlpNew = Realloc(m_lpBuffer, dwNewBufferSize);\r\n\r\n\t\tif (lpNew == NULL)\r\n\t\t\treturn;\r\n\r\n\t\tm_lpBuffer = lpNew;\r\n\t\tm_nBufferSize = dwNewBufferSize;\r\n\t}\r\n}\r\n\r\nvoid CMyMemFile::SetLength(DWORD dwNewLen)\r\n{\r\n\r\n\tif (dwNewLen > m_nBufferSize)\r\n\t\tGrowFile(dwNewLen);\r\n\r\n\tif (dwNewLen < m_nPosition)\r\n\t\tm_nPosition = dwNewLen;\r\n\r\n\tm_nFileSize = dwNewLen;\r\n\r\n}\r\n\r\nUINT CMyMemFile::Read(void* lpBuf, UINT nCount)\r\n{\r\n\r\n\tif (nCount == 0)\r\n\t\treturn 0;\r\n\r\n\r\n\tif (m_nPosition > m_nFileSize)\r\n\t\treturn 0;\r\n\r\n\tUINT nRead;\r\n\tif (m_nPosition + nCount > m_nFileSize)\r\n\t\tnRead = (UINT)(m_nFileSize - m_nPosition);\r\n\telse\r\n\t\tnRead = nCount;\r\n\r\n\tmemcpy((BYTE*)lpBuf, (BYTE*)m_lpBuffer + m_nPosition, nRead);\r\n\tm_nPosition += nRead;\r\n\r\n\r\n\treturn nRead;\r\n}\r\n\r\nvoid CMyMemFile::Write(const void* lpBuf, UINT nCount)\r\n{\r\n\r\n\r\n\tif (nCount == 0)\r\n\t\treturn;\r\n\r\n\r\n\tif (m_nPosition + nCount > m_nBufferSize)\r\n\t\tGrowFile(m_nPosition + nCount);\r\n\r\n\r\n\tmemcpy((BYTE*)m_lpBuffer + m_nPosition, (BYTE*)lpBuf, nCount);\r\n\r\n\tm_nPosition += nCount;\r\n\r\n\tif (m_nPosition > m_nFileSize)\r\n\t\tm_nFileSize = m_nPosition;\r\n\r\n}\r\n\r\nLONG CMyMemFile::Seek(LONG lOff, UINT nFrom)\r\n{\r\n\r\n\tLONG lNewPos = m_nPosition;\r\n\r\n\tif (nFrom == begin)\r\n\t\tlNewPos = lOff;\r\n\telse if (nFrom == current)\r\n\t\tlNewPos += lOff;\r\n\telse if (nFrom == end)\r\n\t\tlNewPos = m_nFileSize + lOff;\r\n\telse\r\n\t\treturn -1;\r\n\r\n\tif (lNewPos < 0)\r\n\t\treturn -1;\r\n\r\n\tm_nPosition = lNewPos;\r\n\r\n\treturn m_nPosition;\r\n}\r\n/*\r\nvoid CMyMemFile::Flush()\r\n{\r\n\tASSERT_VALID(this);\r\n}\r\n*/\r\nvoid CMyMemFile::Close()\r\n{\r\n\tASSERT((m_lpBuffer == NULL && m_nBufferSize == 0) ||\r\n\t\t!m_bAutoDelete || AfxIsValidAddress(m_lpBuffer, (UINT)m_nBufferSize, FALSE));\r\n\tASSERT(m_nFileSize <= m_nBufferSize);\r\n\r\n\tm_nGrowBytes = 0;\r\n\tm_nPosition = 0;\r\n\tm_nBufferSize = 0;\r\n\tm_nFileSize = 0;\r\n\tif (m_lpBuffer && m_bAutoDelete)\r\n\t\tFree(m_lpBuffer);\r\n\tm_lpBuffer = NULL;\r\n}\r\n\r\nvoid CMyMemFile::Abort()\r\n{\r\n\tClose();\r\n}\r\n\r\n// only CMyMemFile supports \"direct buffering\" interaction with CArchive\r\nUINT CMyMemFile::GetBufferPtr(UINT nCommand, UINT nCount,\r\n\tvoid** ppBufStart, void**ppBufMax)\r\n{\r\n\r\n\r\n\tif (nCommand == bufferCheck)\r\n\t\treturn 1;   // just a check for direct buffer support\r\n\r\n\tif (nCommand == bufferCommit)\r\n\t{\r\n\t\t// commit buffer\r\n\t\tm_nPosition += nCount;\r\n\t\tif (m_nPosition > m_nFileSize)\r\n\t\t\tm_nFileSize = m_nPosition;\r\n\t\treturn 0;\r\n\t}\r\n\r\n\r\n\t// when storing, grow file as necessary to satisfy buffer request\r\n\tif (nCommand == bufferWrite && m_nPosition + nCount > m_nBufferSize)\r\n\t\tGrowFile(m_nPosition + nCount);\r\n\r\n\t// store buffer max and min\r\n\t*ppBufStart = m_lpBuffer + m_nPosition;\r\n\r\n\t// end of buffer depends on whether you are reading or writing\r\n\tif (nCommand == bufferWrite)\r\n\t\t*ppBufMax = m_lpBuffer + min(m_nBufferSize, m_nPosition + nCount);\r\n\telse\r\n\t{\r\n\t\tif (nCount == (UINT)-1)\r\n\t\t\tnCount = m_nBufferSize - m_nPosition;\r\n\t\t*ppBufMax = m_lpBuffer + min(m_nFileSize, m_nPosition + nCount);\r\n\t\tm_nPosition += LPBYTE(*ppBufMax) - LPBYTE(*ppBufStart);\r\n\t}\r\n\r\n\t// return number of bytes in returned buffer space (may be <= nCount)\r\n\treturn LPBYTE(*ppBufMax) - LPBYTE(*ppBufStart);\r\n}\r\n\r\nDWORD CMyMemFile::GetFileSize()\r\n{\r\n\treturn m_nFileSize;\r\n}\r\n"
  },
  {
    "path": "krnln/MyMemFile.h",
    "content": "// MyMemFile.h: interface for the CMyMemFile class.\r\n//\r\n//////////////////////////////////////////////////////////////////////\r\n\r\n#if !defined(AFX_MYMEMFILE_H__0D0A64A2_866B_4027_AD22_AEFE48A79B01__INCLUDED_)\r\n#define AFX_MYMEMFILE_H__0D0A64A2_866B_4027_AD22_AEFE48A79B01__INCLUDED_\r\n\r\n#if _MSC_VER > 1000\r\n#pragma once\r\n#endif // _MSC_VER > 1000\r\n\r\nclass CMyMemFile  \r\n{\r\n\r\npublic:\r\n\r\n// Constructors\r\n\tCMyMemFile(UINT nGrowBytes = 1024);\r\n\tCMyMemFile(BYTE* lpBuffer, UINT nBufferSize, UINT nGrowBytes = 0);\r\n\r\n// Operations\r\n\tvoid Attach(BYTE* lpBuffer, UINT nBufferSize, UINT nGrowBytes = 0);\r\n\tBYTE* Detach();\r\n\r\n// Advanced Overridables\r\nprotected:\r\n\tvirtual BYTE* Alloc(DWORD nBytes);\r\n\tvirtual BYTE* Realloc(BYTE* lpMem, DWORD nBytes);\r\n//\tvirtual BYTE* Memcpy(BYTE* lpMemTarget, const BYTE* lpMemSource, UINT nBytes);\r\n\tvirtual void Free(BYTE* lpMem);\r\n\tvirtual void GrowFile(DWORD dwNewLen);\r\n\r\n// Implementation\r\nprotected:\r\n\tUINT m_nGrowBytes;\r\n\tDWORD m_nPosition;\r\n\tDWORD m_nBufferSize;\r\n\tDWORD m_nFileSize;\r\n\tBYTE* m_lpBuffer;\r\n\tBOOL m_bAutoDelete;\r\n\r\npublic:\r\n\tDWORD GetFileSize();\r\n\tvirtual ~CMyMemFile();\r\n\r\n\tvirtual DWORD GetPosition() const;\r\n\t//BOOL GetStatus(CFileStatus& rStatus) const;\r\n\tenum SeekPosition { begin = 0x0, current = 0x1, end = 0x2 };\r\n\tvirtual LONG Seek(LONG lOff, UINT nFrom);\r\n\tvirtual void SetLength(DWORD dwNewLen);\r\n\tvirtual UINT Read(void* lpBuf, UINT nCount);\r\n\tvirtual void Write(const void* lpBuf, UINT nCount);\r\n\tvirtual void Abort();\r\n//\tvirtual void Flush();\r\n\tvirtual void Close();\r\n\tenum BufferCommand { bufferRead, bufferWrite, bufferCommit, bufferCheck };\r\n\tvirtual UINT GetBufferPtr(UINT nCommand, UINT nCount = 0,\r\n\t\tvoid** ppBufStart = NULL, void** ppBufMax = NULL);\r\n\r\n\t// Unsupported APIs\r\n//\tvirtual CFile* Duplicate() const;\r\n//\tvirtual void LockRange(DWORD dwPos, DWORD dwCount);\r\n//\tvirtual void UnlockRange(DWORD dwPos, DWORD dwCount);\r\n\r\n};\r\n\r\n#endif // !defined(AFX_MYMEMFILE_H__0D0A64A2_866B_4027_AD22_AEFE48A79B01__INCLUDED_)\r\n"
  },
  {
    "path": "krnln/Myfunctions.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n#include <stdio.h>\r\n#define MAX(x, y) (x) > (y) ? (x) : (y)\r\n\r\nunsigned char lowtable[] =\r\n{\r\n\t0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,\r\n\t0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,\r\n\t0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,\r\n\t0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,\r\n\t0x40, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',\r\n\t'p' , 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',0x5B,0x5C,0x5D,0x5E,0x5F,\r\n\t0x60, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',\r\n\t'p' , 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',0x7B,0x7C,0x7D,0x7E,0x7F,\r\n\t0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,\r\n\t0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,\r\n\t0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,\r\n\t0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,\r\n\t0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,\r\n\t0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,\r\n\t0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,\r\n\t0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF\r\n};\r\n\r\nunsigned char uptable[] =\r\n{\r\n\t0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,\r\n\t0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,\r\n\t0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,\r\n\t0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,\r\n\t0x40, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',\r\n\t'P' , 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',0x5B,0x5C,0x5D,0x5E,0x5F,\r\n\t0x60, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',\r\n\t'P' , 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',0x7B,0x7C,0x7D,0x7E,0x7F,\r\n\t0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,\r\n\t0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,\r\n\t0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,\r\n\t0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,\r\n\t0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,\r\n\t0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,\r\n\t0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,\r\n\t0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF\r\n};\r\n\r\nint __fastcall isSSE2()\r\n{\r\n\tstatic int bIsSSE2 = FALSE;\r\n\tstatic int bIsSSE2Check = FALSE;\r\n\tif (bIsSSE2Check)\r\n\t\treturn bIsSSE2;\r\n\tint res = 0;\r\n\t__asm\r\n\t{\r\n\t\tmov eax, 01h;\r\n\t\tcpuid;\r\n\t\tmov res, edx;\r\n\t}\r\n\tbIsSSE2 = res & (1 << 26);\r\n\tbIsSSE2Check = TRUE;\r\n\treturn bIsSSE2;\r\n}\r\n\r\nint inline MyMemCmp(unsigned char* a, unsigned char* b, int len)\r\n{\r\n\tfor (int i = 0; i < (len >> 2); i++)\r\n\t{\r\n\t\tif (((int*)a)[0] != ((int*)b)[0])\r\n\t\t\treturn 1;\r\n\t\ta += 4;b += 4;\r\n\t}\r\n\tif ((len & 2) != 0)\r\n\t{\r\n\t\tif (((short*)a)[0] != ((short*)b)[0])\r\n\t\t\treturn 1;\r\n\t\ta += 2;b += 2;\r\n\t}\r\n\tif ((len & 1) != 0 && a[0] != b[0])\r\n\t\treturn 1;\r\n\treturn 0;\r\n}\r\n\r\nstatic size_t mystrlen_normal(const char* pStr)\r\n{\r\n\tconst char* char_ptr;\r\n\tconst unsigned int* longword_ptr;\r\n\tregister unsigned int longword, himagic, lomagic;\r\n\tconst char* cp;\r\n\r\n\tfor (char_ptr = pStr; ((unsigned int)char_ptr & (sizeof(unsigned int) - 1)) != 0;\r\n\t\t++char_ptr) {\r\n\t\tif (*char_ptr == '\\0')\r\n\t\t\treturn char_ptr - pStr;\r\n\t}\r\n\r\n\tlongword_ptr = (unsigned int*)char_ptr;\r\n\thimagic = 0x80808080L;\r\n\tlomagic = 0x01010101L;\r\n\twhile (1) {\r\n\t\tlongword = *longword_ptr++;\r\n\t\tif (((longword - lomagic) & ~longword & himagic) != 0) {\r\n\t\t\tcp = (const char*)(longword_ptr - 1);\r\n\t\t\tif (cp[0] == 0)\r\n\t\t\t\treturn cp - pStr;\r\n\t\t\tif (cp[1] == 0)\r\n\t\t\t\treturn cp - pStr + 1;\r\n\t\t\tif (cp[2] == 0)\r\n\t\t\t\treturn cp - pStr + 2;\r\n\t\t\tif (cp[3] == 0)\r\n\t\t\t\treturn cp - pStr + 3;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nstatic size_t mystrlen_SSE2(const char* pStr)\r\n{\r\n\tsize_t res = 0;\r\n\t__asm\r\n\t{\r\n\t\tmov eax, pStr;                        // get pointer to string\r\n\t\ttest eax, eax;\r\n\t\tje END__;                            // return 0 if eax is NULL\r\n\t\tmov ecx, eax;                        // copy pointer\r\n\t\t// pxor xmm0,xmm0;                   // set to zero\r\n\t\t_EMIT 0x66;\r\n\t\t_EMIT 0x0F;\r\n\t\t_EMIT 0xEF;\r\n\t\t_EMIT 0xC0;\r\n\t\tand ecx, 0Fh;                        // lower 4 bits indicate misalignment\r\n\t\tand eax, 0FFFFFFF0h;                 // align pointer by 16\r\n\t\t// movdqa xmm1, [eax];               // read from nearest preceding boundary\r\n\t\t_EMIT 0x66;\r\n\t\t_EMIT 0x0F;\r\n\t\t_EMIT 0x6F;\r\n\t\t_EMIT 0x08;\r\n\t\t// pcmpeqb xmm1,xmm0;                // compare 16 bytes with zero\r\n\t\t_EMIT 0x66;\r\n\t\t_EMIT 0x0F;\r\n\t\t_EMIT 0x74;\r\n\t\t_EMIT 0xC8;\r\n\t\t// pmovmskb edx, xmm1;               // get one bit for each byte result\r\n\t\t_EMIT 0x66;\r\n\t\t_EMIT 0x0F;\r\n\t\t_EMIT 0xD7;\r\n\t\t_EMIT 0xD1;\r\n\t\tshr edx, cl;                         // shift out false bits\r\n\t\tshl edx, cl;                         // shift back again\r\n\t\tbsf edx, edx;                        // find first 1 - bit\r\n\t\tjne A200;                            // found\r\n\r\n\t\t//; Main loop, search 16 bytes at a time\r\n\tA100:\r\n\t\tadd eax, 10h;                        // increment pointer by 16\r\n\t\t// movdqa   xmm1, [eax];             // read 16 bytes aligned\r\n\t\t_EMIT 0x66;\r\n\t\t_EMIT 0x0F;\r\n\t\t_EMIT 0x6F;\r\n\t\t_EMIT 0x08;\r\n\t\t// pcmpeqb  xmm1, xmm0;              // compare 16 bytes with zero\r\n\t\t_EMIT 0x66;\r\n\t\t_EMIT 0x0F;\r\n\t\t_EMIT 0x74;\r\n\t\t_EMIT 0xC8;\r\n\t\t// pmovmskb edx, xmm1;               // get one bit for each byte result\r\n\t\t_EMIT 0x66;\r\n\t\t_EMIT 0x0F;\r\n\t\t_EMIT 0xD7;\r\n\t\t_EMIT 0xD1;\r\n\t\tbsf edx, edx;                        // find first 1 - bit\r\n\t\t//; (moving the bsf out of the loop and using test here would be faster for long strings on old processors,\r\n\t\t//;  but we are assuming that most strings are short, and newer processors have higher priority)\r\n\t\tje A100;                            // loop if not found\r\n\r\n\tA200: //; Zero - byte found.Compute string length\r\n\t\tsub eax, pStr;                        // subtract start address\r\n\t\tadd eax, edx;                        // add byte index\r\n\t\tmov res, eax;\r\n\tEND__:\r\n\t}\r\n\treturn res;\r\n}\r\n\r\nsize_t mystrlen_auto(const char* pStr)\r\n{ // ˺Ϊ亯ֻᱻһΡ\r\n\tif (isSSE2())\r\n\t{ // ֧SSE2ָ\r\n\t\tmystrlen = mystrlen_SSE2;\r\n\t\treturn mystrlen_SSE2(pStr);\r\n\t}\r\n\telse\r\n\t{\r\n\t\tmystrlen = mystrlen_normal;\r\n\t\treturn mystrlen_normal(pStr);\r\n\t}\r\n\treturn 0;\r\n}\r\nMYSTRLEN mystrlen = mystrlen_auto;\r\n\r\nint __fastcall mymemchr(unsigned char* pSrc, int nLen, unsigned char Des)\r\n{\r\n\tregister unsigned int longword, dmagic, * longword_ptr;\r\n\tunsigned char* cp;\r\n\tunsigned char* char_ptr = pSrc;\r\n\tfor (int i = 0; i < (nLen & 3);i++)\r\n\t\tif (*char_ptr++ == Des)\r\n\t\t\treturn char_ptr - pSrc - 1;\r\n\r\n\tdmagic = Des | (Des << 8) | (Des << 16) | (Des << 24);\r\n\tfor (longword_ptr = (unsigned int*)char_ptr; longword_ptr < (unsigned int*)(pSrc + nLen); longword_ptr++)\r\n\t{\r\n\t\tlongword = *longword_ptr ^ dmagic;\r\n\t\tif (((longword - 0x01010101) & ~longword & 0x80808080) != 0)\r\n\t\t{\r\n\t\t\tcp = (unsigned char*)(longword_ptr);\r\n\t\t\tif (cp[0] == Des)\r\n\t\t\t\treturn cp - pSrc;\r\n\t\t\tif (cp[1] == Des)\r\n\t\t\t\treturn cp - pSrc + 1;\r\n\t\t\tif (cp[2] == Des)\r\n\t\t\t\treturn cp - pSrc + 2;\r\n\t\t\tif (cp[3] == Des)\r\n\t\t\t\treturn cp - pSrc + 3;\r\n\t\t}\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\nint __fastcall myinstring(unsigned char* src, int slen, unsigned char* des, int dlen)\r\n{\r\n\t//\tregister unsigned char* naddr;\r\n\t//\tint sl;int i;int j;\r\n\tint i;\r\n\tif (!src || !des || !slen || !dlen || dlen > slen)\r\n\t\treturn -1;\r\n\r\n\tswitch (dlen)\r\n\t{\r\n\tcase 1:  // Ӵֱӱ\r\n\t\treturn mymemchr(src, slen, des[0]);\r\n\tcase 2:\r\n\t\tfor (i = 0; i < slen - 1; i++)\r\n\t\t\tif (((short*)(src + i))[0] == ((short*)des)[0])\r\n\t\t\t\treturn i;\r\n\t\treturn -1;\r\n\tcase 3:\r\n\t\tfor (i = 0; i < slen - 2; i++)\r\n\t\t\tif (((short*)(src + i))[0] == ((short*)des)[0])\r\n\t\t\t\tif (src[i + 2] == des[2])\r\n\t\t\t\t\treturn i;\r\n\t\treturn -1;\r\n\tcase 4:\r\n\t\tfor (i = 0; i < slen - 3; i++)\r\n\t\t\tif (((int*)(src + i))[0] == ((int*)des)[0])\r\n\t\t\t\treturn i;\r\n\t\treturn -1;\r\n\tcase 5:\r\n\t\tfor (i = 0; i < slen - 4; i++)\r\n\t\t\tif (((int*)(src + i))[0] == ((int*)des)[0])\r\n\t\t\t\tif (src[i + 4] == des[4])\r\n\t\t\t\t\treturn i;\r\n\t\treturn -1;\r\n\tcase 6:\r\n\t\tfor (i = 0; i < slen - 5; i++)\r\n\t\t\tif (((int*)(src + i))[0] == ((int*)des)[0])\r\n\t\t\t\tif (((short*)(src + i + 4))[0] == ((short*)(des + 4))[0])\r\n\t\t\t\t\treturn i;\r\n\t\treturn -1;\r\n\tdefault:// ӴʹBM㷨,\r\n\t\treturn boyer_moore(src, slen, des, dlen);\r\n\t}\r\n\r\n}\r\n\r\nchar* TBR::toString()\r\n{\r\n\tif (m_nCount <= 0 || m_nTLen <= 0 || !m_data)\r\n\t{\r\n\t\treturn NULL;\r\n\t}\r\n\tchar* pText = (char*)E_MAlloc_Nzero(m_nTLen + 1);\r\n\tchar* pRetnTmp = pText;\r\n\r\n\tfor (int i = 0; i < m_nCount; i++)\r\n\t{\r\n\t\tmemcpy(pRetnTmp, m_data[i].addr, m_data[i].len);\r\n\t\tpRetnTmp += m_data[i].len;\r\n\t}\r\n\tpText[m_nTLen] = '\\0';\r\n\treturn pText;\r\n}\r\n\r\nTBR::TBR()\r\n{\r\n\tm_nCount = 0;\r\n\tm_nTCount = 0;\r\n\tm_nTLen = 0;\r\n\tm_data = NULL;\r\n}\r\nTBR::~TBR()\r\n{\r\n\tif (m_data)\r\n\t{\r\n\t\tfree(m_data);\r\n\t}\r\n}\r\nvoid TBR::add(PVOID addr, size_t len)\r\n{\r\n\tif (!m_data)\r\n\t{\r\n\t\tm_data = (PTBRECORD)malloc(512 * sizeof(TBRECORD));\r\n\t\tif (!m_data)\r\n\t\t\treturn;\r\n\t\tm_nTCount = 512;\r\n\t}\r\n\tif (m_nCount >= m_nTCount)\r\n\t{\r\n\t\tint nNewCount = m_nTCount << 1;\r\n\t\tPVOID pNewData = realloc(m_data, nNewCount * sizeof(TBRECORD));\r\n\t\tif (!pNewData)\r\n\t\t{\r\n\t\t\tpNewData = malloc(sizeof(TBRECORD) * nNewCount);\r\n\t\t\tif (!pNewData)\r\n\t\t\t\treturn;\r\n\t\t\tmemcpy(pNewData, m_data, sizeof(TBRECORD) * m_nTCount);\r\n\t\t\tfree(m_data);\r\n\t\t}\r\n\t\tm_data = (TBRECORD*)pNewData;\r\n\t\tm_nTCount = nNewCount;\r\n\t}\r\n\tif (len < 0)\r\n\t{\r\n\t\tlen = 0;\r\n\t}\r\n\tm_data[m_nCount].addr = addr;\r\n\tm_data[m_nCount++].len = len;\r\n\tm_nTLen += len;\r\n}\r\n\r\nINT __fastcall mystristr(char* str1, char* str2)\r\n{\r\n\tregister char* cp = str1;\r\n\tregister char* s1, * s2;\r\n\tregister unsigned char* lt = lowtable;\r\n\twhile (*cp)\r\n\t{\r\n\t\ts1 = cp;\r\n\t\ts2 = str2;\r\n\t\twhile (*s1 && *s2 && (*s1 == *s2 || lt[(unsigned char)(*s1)] == lt[(unsigned char)(*s2)]))\r\n\t\t\ts1++, s2++;\r\n\t\tif (!*s2)\r\n\t\t\treturn cp - str1;\r\n\r\n\t\tif (*cp < 0)\r\n\t\t{\r\n\t\t\tcp++;\r\n\t\t\tif (!*cp)\r\n\t\t\t\treturn -1;\r\n\t\t}\r\n\t\tcp++;\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\nINT __fastcall mystrstr(char* str1, char* str2)\r\n{\r\n\tregister char* cp = str1;\r\n\tregister char* s1, * s2;\r\n\twhile (*cp)\r\n\t{\r\n\t\ts1 = cp;\r\n\t\ts2 = str2;\r\n\t\twhile (*s1 && *s2 && !(*s1 - *s2))\r\n\t\t\ts1++, s2++;\r\n\t\tif (!*s2)\r\n\t\t\treturn cp - str1;\r\n\r\n\t\tif (*cp < 0)\r\n\t\t{\r\n\t\t\tcp++;\r\n\t\t\tif (!*cp)\r\n\t\t\t\treturn -1;\r\n\t\t}\r\n\t\tcp++;\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\n#define ALPHABET_LEN 256\r\n#define NOT_FOUND patlen\r\n\r\n// delta1 table: delta1[c] contains the distance between the last\r\n// character of pat and the rightmost occurrence of c in pat.\r\n// If c does not occur in pat, then delta1[c] = patlen.\r\n// If c is at string[i] and c != pat[patlen-1], we can\r\n// safely shift i over by delta1[c], which is the minimum distance\r\n// needed to shift pat forward to get string[i] lined up\r\n// with some character in pat.\r\n// this algorithm runs in alphabet_len+patlen time.\r\nvoid make_delta1(int* delta1, unsigned char* pat, int patlen) {\r\n\tint i;\r\n\r\n\tfor (i = 0; i < ALPHABET_LEN; i++) {\r\n\t\tdelta1[i] = NOT_FOUND;\r\n\t}\r\n\tfor (i = 0; i < patlen - 1; i++) {\r\n\t\tdelta1[pat[i]] = patlen - 1 - i;\r\n\t}\r\n}\r\n\r\n// true if the suffix of word starting from word[pos] is a prefix\r\n// of word\r\nint is_prefix(unsigned char* word, int wordlen, int pos) {\r\n\tint i;\r\n\tint suffixlen = wordlen - pos;\r\n\r\n\tfor (i = 0; i < suffixlen; i++) {\r\n\t\tif (word[i] != word[pos + i]) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n\treturn 1;\r\n}\r\n\r\n// length of the longest suffix of word ending on word[pos].\r\n// suffix_length(\"dddbcabc\", 8, 4) = 2\r\nint suffix_length(unsigned char* word, int wordlen, int pos) {\r\n\tint i;\r\n\t// increment suffix length i to the first mismatch or beginning\r\n\t// of the word\r\n\tfor (i = 0; (word[pos - i] == word[wordlen - 1 - i]) && (i < pos); i++);\r\n\treturn i;\r\n}\r\n\r\n// delta2 table: given a mismatch at pat[pos], we want to align\r\n// with the next possible full match could be based on what we\r\n// know about pat[pos+1] to pat[patlen-1].\r\n//\r\n// In case 1:\r\n// pat[pos+1] to pat[patlen-1] does not occur elsewhere in pat,\r\n// the next plausible match starts at or after the mismatch.\r\n// If, within the substring pat[pos+1 .. patlen-1], lies a prefix\r\n// of pat, the next plausible match is here (if there are multiple\r\n// prefixes in the substring, pick the longest). Otherwise, the\r\n// next plausible match starts past the character aligned with\r\n// pat[patlen-1].\r\n//\r\n// In case 2:\r\n// pat[pos+1] to pat[patlen-1] does occur elsewhere in pat. The\r\n// mismatch tells us that we are not looking at the end of a match.\r\n// We may, however, be looking at the middle of a match.\r\n//\r\n// The first loop, which takes care of case 1, is analogous to\r\n// the KMP table, adapted for a 'backwards' scan order with the\r\n// additional restriction that the substrings it considers as\r\n// potential prefixes are all suffixes. In the worst case scenario\r\n// pat consists of the same letter repeated, so every suffix is\r\n// a prefix. This loop alone is not sufficient, however:\r\n// Suppose that pat is \"ABYXCDEYX\", and text is \".....ABYXCDEYX\".\r\n// We will match X, Y, and find B != E. There is no prefix of pat\r\n// in the suffix \"YX\", so the first loop tells us to skip forward\r\n// by 9 characters.\r\n// Although superficially similar to the KMP table, the KMP table\r\n// relies on information about the beginning of the partial match\r\n// that the BM algorithm does not have.\r\n//\r\n// The second loop addresses case 2. Since suffix_length may not be\r\n// unique, we want to take the minimum value, which will tell us\r\n// how far away the closest potential match is.\r\nvoid make_delta2(int* delta2, unsigned char* pat, int patlen) {\r\n\tint p;\r\n\tint last_prefix_index = 1;\r\n\r\n\t// first loop, prefix pattern\r\n\tfor (p = patlen - 1; p >= 0; p--) {\r\n\t\tif (is_prefix(pat, patlen, p + 1)) {\r\n\t\t\tlast_prefix_index = p + 1;\r\n\t\t}\r\n\t\tdelta2[p] = (patlen - 1 - p) + last_prefix_index;\r\n\t}\r\n\r\n\t// this is overly cautious, but will not produce anything wrong\r\n\t// second loop, suffix pattern\r\n\tfor (p = 0; p < patlen - 1; p++) {\r\n\t\tint slen = suffix_length(pat, patlen, p);\r\n\t\tif (pat[p - slen] != pat[patlen - 1 - slen]) {\r\n\t\t\tdelta2[patlen - 1 - slen] = patlen - 1 - p + slen;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nint boyer_moore(unsigned char* string, int stringlen, unsigned char* pat, int patlen) {\r\n\tint i;\r\n\tint delta1[ALPHABET_LEN];\r\n\tint* delta2 = (int*)malloc(patlen * sizeof(int));\r\n\tif (!delta2)\r\n\t\treturn -1;\r\n\tmake_delta1(delta1, pat, patlen);\r\n\tmake_delta2(delta2, pat, patlen);\r\n\tint n_shifts = 0;\r\n\r\n\ti = patlen - 1;\r\n\twhile (i < stringlen) {\r\n\t\tint j = patlen - 1;\r\n\t\twhile (j >= 0 && (string[i] == pat[j])) {\r\n\t\t\t--i;\r\n\t\t\t--j;\r\n\t\t}\r\n\r\n\t\tif (j < 0) {\r\n\t\t\tfree(delta2);\r\n\t\t\treturn i + 1;\r\n\t\t}\r\n\r\n\t\ti += max(delta1[string[i]], delta2[j]);\r\n\t}\r\n\tfree(delta2);\r\n\treturn -1;\r\n}\r\n\r\n\r\nvoid swap_hex(unsigned char* str, int len)\r\n{\r\n\tfor (int i = 0; i < len / 2; i += sizeof(WORD))\r\n\t{\r\n\t\tWORD temp = *(WORD*)(str + len - i - sizeof(WORD));\r\n\t\t*(WORD*)(str + len - i - sizeof(WORD)) = *(WORD*)(str + i);\r\n\t\t*(WORD*)(str + i) = temp;\r\n\t}\r\n}\r\n\r\nvoid E_RC4_init(unsigned char* keytable, unsigned char* key, int keylen)\r\n{\r\n\tint i = 0, j = 0;\r\n\tunsigned char k[256] = { 0 };\r\n\tunsigned char tmp = 0;\r\n\tfor (i = 0; i < 256; i++) {\r\n\t\tkeytable[i] = i;\r\n\t\tk[i] = key[i % keylen];\r\n\t}\r\n\tfor (i = 0; i < 256; i++) {\r\n\t\ttmp = keytable[i];\r\n\t\tj = (j + tmp + k[i]) % 256;\r\n\t\tkeytable[i] = keytable[j];//s[i]s[j]\r\n\t\tkeytable[j] = tmp;\r\n\t}\r\n\tkeytable[256] = 0;\r\n\tkeytable[257] = 0;\r\n}\r\n\r\nvoid E_RC4_updatetable(int len, unsigned char* keytable)\r\n{\r\n\tint i;\r\n\tunsigned char tmp;\r\n\tunsigned char x = keytable[256];\r\n\tunsigned char y = keytable[257];\r\n\tfor (i = 0; i < len; i++)\r\n\t{\r\n\t\tx = (x + 1);\r\n\t\ttmp = keytable[x];\r\n\t\ty = (y + tmp);\r\n\t\tkeytable[x] = keytable[y];//s[x]s[y]\r\n\t\tkeytable[y] = tmp;\r\n\t}\r\n\tkeytable[256] = x;\r\n\tkeytable[257] = y;\r\n}\r\n\r\nvoid E_RC4(unsigned char* data, int datalen, unsigned char* keytable)\r\n{\r\n\tint i;\r\n\tunsigned char tmp;\r\n\tunsigned char x = keytable[256];\r\n\tunsigned char y = keytable[257];\r\n\tfor (i = 0; i < datalen; i++)\r\n\t{\r\n\t\tx = (x + 1);\r\n\t\ttmp = keytable[x];\r\n\t\ty = (y + tmp);\r\n\t\tkeytable[x] = keytable[y];//s[x]s[y]\r\n\t\tkeytable[y] = tmp;\r\n\t\tdata[i] ^= keytable[(unsigned char)(keytable[x] + tmp)];\r\n\t}\r\n\tkeytable[256] = x;\r\n\tkeytable[257] = y;\r\n}\r\n\r\n#define ERC4_TLEN 258\r\n#define ERC4_CHUNK 4096\r\nBOOL E_RC4_Calc(int pos, unsigned char* pData, int nDlen, unsigned char* pKeytable, int nCryptStart, unsigned char* pMD5)\r\n{\r\n\tint nCTLen, nCTRemain;\r\n\tint nTableLen, nTableIndex;\r\n\tint nChunk, nOChunk;\r\n\tint nF, nB;\r\n\tunsigned char pTableTMP[ERC4_TLEN];\r\n\tunsigned char* pTableData, * pTableData2;\r\n\tunsigned char pNewPass[40]; // 4 + 32 + 4\r\n\r\n\tmemcpy(pTableTMP, pKeytable, ERC4_TLEN);\r\n\r\n\tnCTLen = nCryptStart;\r\n\tnCTRemain = nCTLen - pos;\r\n\tif (nCTRemain > 0)\r\n\t{\r\n\t\tpData += nCTRemain;\r\n\t\tnDlen -= nCTRemain;\r\n\t\tif (nDlen <= 0)\r\n\t\t\treturn FALSE;\r\n\t\tpos = nCTLen;\r\n\t}\r\n\r\n\tE_RC4_updatetable(4 * (pos / ERC4_CHUNK), pTableTMP);\r\n\tnTableLen = 4 * (nDlen / ERC4_CHUNK) + 8;\r\n\tif (nTableLen % 4 > 0)\r\n\t\tnTableLen = nTableLen + nTableLen % 4;\r\n\r\n\tpTableData = new unsigned char[nTableLen];\r\n\tmemset(pTableData, 0, nTableLen);\r\n\tpTableData2 = pTableData;\r\n\tE_RC4(pTableData, nTableLen, pTableTMP);\r\n\r\n\tnTableIndex = pos / ERC4_CHUNK;\r\n\tnChunk = pos % ERC4_CHUNK;\r\n\tif (nChunk >= 0)\r\n\t{\r\n\t\tnF = *((int*)pTableData);\r\n\t\tnB = nTableIndex ^ nF;\r\n\r\n\t\t*((int*)pNewPass) = nF;\r\n\t\tmemcpy(pNewPass + 4, pMD5, 32);\r\n\t\t*((int*)(pNewPass + 36)) = nB;\r\n\r\n\t\tnTableIndex++;\r\n\t\tpTableData += 4;\r\n\r\n\t\tE_RC4_init(pTableTMP, pNewPass, 40);\r\n\t\tE_RC4_updatetable(nChunk + 36, pTableTMP);\r\n\r\n\t\tnOChunk = min(ERC4_CHUNK - nChunk, nDlen);\r\n\t\tE_RC4(pData, nOChunk, pTableTMP);\r\n\r\n\t\tnDlen -= nOChunk;\r\n\t\tpData += nOChunk;\r\n\t}\r\n\r\n\twhile (nDlen > 0)\r\n\t{\r\n\t\tnF = *((int*)pTableData);\r\n\t\tnB = nTableIndex ^ nF;\r\n\r\n\t\t*((int*)pNewPass) = nF;\r\n\t\tmemcpy(pNewPass + 4, pMD5, 32);\r\n\t\t*((int*)(pNewPass + 36)) = nB;\r\n\r\n\t\tnTableIndex++;\r\n\t\tpTableData += 4;\r\n\r\n\t\tE_RC4_init(pTableTMP, pNewPass, 40);\r\n\t\tE_RC4_updatetable(nChunk + 36, pTableTMP);\r\n\r\n\t\tif (nDlen <= ERC4_CHUNK)\r\n\t\t{\r\n\t\t\tE_RC4(pData, nDlen, pTableTMP);\r\n\t\t\tpData += nDlen;\r\n\t\t\tnDlen = 0;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tE_RC4(pData, ERC4_CHUNK, pTableTMP);\r\n\t\tnDlen -= ERC4_CHUNK;\r\n\t\tpData += ERC4_CHUNK;\r\n\t}\r\n\r\n\tdelete[]pTableData2;\r\n\treturn TRUE;\r\n}"
  },
  {
    "path": "krnln/Myfunctions.h",
    "content": "#ifndef _MY_FUNCS_\r\n#define _MY_FUNCS_\r\n\r\n#if _MSC_VER > 1000\r\n#pragma once\r\n#endif // _MSC_VER > 1000\r\n\r\ntypedef struct _MEMSP_{\r\n\tchar* pData;\r\n\tint nLen;\r\n}MEMSP, *PMEMSP;\r\n\r\ntypedef struct _TBRECORD{\r\n\tPVOID\taddr;\t//ݵַ\r\n\tDWORD\tlen;\t//ݳ\r\n}TBRECORD, *PTBRECORD;\r\n\r\nclass TBR\r\n{\r\npublic:\r\n\tTBR();\r\n\t~TBR();\r\n\tvoid add(PVOID addr, size_t len);\r\n\tchar* toString(); //ֵҪͷ\r\n\tint m_nCount;\r\n\tint m_nTCount;\r\n\tsize_t m_nTLen;\r\n\tPTBRECORD m_data;\r\n};\r\n\r\nextern unsigned char lowtable[];\r\nextern unsigned char uptable[];\r\n\r\nint __fastcall mymemchr(unsigned char *pSrc, int nLen, unsigned char Des);\r\nint boyer_moore(unsigned char* string, int stringlen, unsigned char* pat, int patlen);\r\n\r\nint inline MyMemCmp(unsigned char* a, unsigned char* b, int len);\r\n\r\ntypedef size_t (*MYSTRLEN)(const char *str);\r\n// ȡַ\r\nextern MYSTRLEN mystrlen;\r\n\r\nint __fastcall myinstring(unsigned char *src, int slen,unsigned char *des, int dlen);\r\nINT __fastcall mystristr(char* str1, char* str2);\r\nINT __fastcall mystrstr(char* str1, char* str2);\r\n\r\nvoid swap_hex(unsigned char* string, int length);\r\nvoid E_RC4_init(unsigned char* keytable, unsigned char* key, int keylen);\r\nvoid E_RC4_updatetable(int len, unsigned char* keytable);\r\nvoid E_RC4(unsigned char* data, int datalen, unsigned char* keytable);\r\nBOOL E_RC4_Calc(int pos, unsigned char *pData,int nDlen, unsigned char *pKeytable, int nCryptStart, unsigned char *pMD5);\r\n\r\n#endif\r\n"
  },
  {
    "path": "krnln/NumToChinese.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <stdio.h>\r\n#include <math.h>\r\n#include \"Myfunctions.h\"\r\n\r\nchar bigChn []= \"\\0Ҽ\\0\\0\\0\\0\\0½\\0\\0\\0\\0\";//48-57\r\nchar smlChn []= \"\\0һ\\0\\0\\0\\0\\0\\0\\0\\0\\0\";\r\nchar strNumLeven1 []= \"\\0Ǫ\\0\\0ʰ\\0\\0\";\r\nchar strNumLeven2 []= \"\\0ǧ\\0\\0ʮ\\0\\0\";\r\n\r\nBOOL ReadChnNum(LPSTR pText,LPSTR pStrSrc,LPSTR pNumStr,LPSTR pNumLeven,INT nNum,INT& nPre)\r\n{\r\n\r\n\tpNumLeven += ((5-nNum)*3);\r\n\tBOOL bAllZero = TRUE;\r\n\r\n\tfor(INT i=0;i<nNum;i++)\r\n\t{\r\n\t\tINT nOffset = pStrSrc[i]-48;\r\n\t\tLPSTR pStr = pNumStr + nOffset*3;\r\n\r\n\t\tif(nOffset !=0)\r\n\t\t{\r\n\t\t\tif(nPre ==0)\r\n\t\t\t\tstrcat(pText,\"\");\r\n\t\t\tstrcat(pText,pStr);\r\n\t\t\tpStr = pNumLeven + i*3;\r\n\t\t\tstrcat(pText,pStr);\r\n\t\t\tbAllZero = FALSE;\r\n\t\t}\r\n\t\tnPre = nOffset;\r\n\r\n\t}\r\n\treturn bAllZero;\r\n\r\n}\r\nLPSTR IntNumToChn (double dNum,BOOL bSml,INT& nPre)\r\n{\r\n\tchar str [MAX_PATH];\r\n\tLPSTR pText = NULL;\r\n\tsprintf(str,\"%.0lf\",dNum);\r\n\tINT nLen = mystrlen(str);\r\n\tif(nLen>13)\r\n\t{\r\n\t\tpText = (LPSTR)malloc (3);\r\n\t\tstrcpy(pText,\"\");\r\n\t\treturn pText;\r\n\t}\r\n\tpText = (LPSTR)malloc (nLen*4+4);\r\n\t*pText=0;\r\n\tLPSTR pNum;\r\n\tLPSTR pNumLeven;\r\n\tif(bSml)\r\n\t{\r\n\t\tpNum = smlChn;\r\n\t\tpNumLeven = strNumLeven2;\r\n\t}\r\n\telse\r\n\t{\r\n\t\tpNum = bigChn;\r\n\t\tpNumLeven = strNumLeven1;\r\n\t}\r\n\r\n\tLPSTR pSrc = str;\r\n\tif(*pSrc==45)\r\n\t{\r\n\t\tpSrc++;\r\n\t\tstrcat(pText,\"\");\r\n\t}\r\n\t//Ǫʰ-Ǫʰ-Ǫʰ\r\n\tnPre = -1;\r\n\tif(nLen > 8)\r\n\t{\r\n\t\tINT nNum = nLen - 8;\r\n\t\tReadChnNum(pText,pSrc,pNum,pNumLeven,nNum,nPre);\r\n\t\tstrcat(pText,\"\");\r\n\t\tpSrc+=nNum;\r\n\t\tBOOL nAll0 = ReadChnNum(pText,pSrc,pNum,pNumLeven,4,nPre);\r\n\t\tif(!nAll0)\r\n\t\t\t//strcat(pText,\"\");\r\n\t\t//else\r\n\t\t\tstrcat(pText,\"\");\r\n\t\tpSrc+=4;\r\n\t\tReadChnNum(pText,pSrc,pNum,pNumLeven,4,nPre);\r\n\r\n\r\n\t}else if(nLen > 4)\r\n\t{\r\n\t\tINT nNum = nLen - 4;\r\n\t\tReadChnNum(pText,pSrc,pNum,pNumLeven,nNum,nPre);\r\n\t\tstrcat(pText,\"\");\r\n\t\tpSrc+=nNum;\r\n\t\tReadChnNum(pText,pSrc,pNum,pNumLeven,4,nPre);\r\n\t}\r\n\telse \r\n\t{\r\n\t\tReadChnNum(pText,pSrc,pNum,pNumLeven,nLen,nPre);\r\n\t}\r\n\r\n\r\n\t\r\n\treturn pText;\r\n\t\r\n\r\n}\r\nLPSTR FloatNumToChn (double dNum,BOOL bSml)//ﲻܴ0ֵ\r\n{\r\n\tchar str [MAX_PATH];\r\n\tdNum = fabs(dNum);\r\n\r\n\tsprintf(str,\"%.2lf\",dNum);\r\n\tLPSTR pSrc = str;\r\n\twhile(*pSrc !=0 && *pSrc != '.')\r\n\t\tpSrc++;\r\n\tif(*pSrc ==0)\r\n\t\treturn NULL;\r\n\tpSrc++;\r\n\r\n\tLPSTR pNum;\r\n\r\n\tif(bSml)\r\n\t\tpNum = smlChn;\r\n\telse\r\n\t\tpNum = bigChn;\r\n\r\n\tLPSTR pText = (LPSTR)malloc (64);\r\n\tstrcpy(pText,\"\");\r\n\r\n\tINT nOffset = pSrc[0]-48;\r\n\tLPSTR pStr = pNum + nOffset*3;\r\n\tstrcat(pText,pStr);\r\n\tnOffset = pSrc[1]-48;\r\n\tif(nOffset)\r\n\t{\r\n\t\tpStr = pNum + nOffset*3;\r\n\t\tstrcat(pText,pStr);\r\n\t}\r\n\r\n\treturn pText;\r\n}\r\n\r\nLPSTR FloatNumToRMB (double dNum,BOOL bSml)//ﲻܴ0ֵ\r\n{\r\n\tchar str [MAX_PATH];\r\n\tdNum = fabs(dNum);\r\n\r\n\tsprintf(str,\"%.2lf\",dNum);\r\n\tLPSTR pSrc = str;\r\n\twhile(*pSrc !=0 && *pSrc != '.')\r\n\t\tpSrc++;\r\n\tif(*pSrc ==0)\r\n\t\treturn NULL;\r\n\tpSrc++;\r\n\r\n\tLPSTR pNum;\r\n\r\n\tif(bSml)\r\n\t\tpNum = smlChn;\r\n\telse\r\n\t\tpNum = bigChn;\r\n\r\n\tLPSTR pText = (LPSTR)malloc (64);\r\n\t*pText=0;\r\n\r\n\r\n\tINT nOffset = pSrc[0]-48;\r\n\tif(nOffset)\r\n\t{\r\n\t\tLPSTR pStr = pNum + nOffset*3;\r\n\t\tstrcat(pText,pStr);\r\n\t\tstrcat(pText,\"\");\r\n\t}\r\n\tnOffset = pSrc[1]-48;\r\n\tif(nOffset)\r\n\t{\r\n\t\tLPSTR pStr = pNum + nOffset*3;\r\n\t\tstrcat(pText,pStr);\r\n\t\tstrcat(pText,\"\");\r\n\t}\r\n\r\n\treturn pText;\r\n}"
  },
  {
    "path": "krnln/SDataToStr.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <stdio.h>\r\n#include \"LTrimZeroChr.h\"\r\n#include \"Myfunctions.h\"\r\nchar* SDataToStr(PMDATA_INF pArgInf)\r\n{\r\n\tchar* pSrc = NULL;\r\n\tchar str[MAX_PATH];\r\n\tif ((pArgInf->m_dtDataType & DT_IS_ARY) == 0)//\r\n\t{\r\n\r\n\r\n\t\tswitch (pArgInf->m_dtDataType)\r\n\t\t{\r\n\t\tcase SDT_BYTE:\r\n\t\tcase SDT_SHORT:\r\n\t\tcase SDT_INT:\r\n\t\tcase SDT_SUB_PTR:\r\n\t\t\tsprintf(str, \"%d\", pArgInf->m_int);\r\n\t\t\tpSrc = str;\r\n\t\t\tbreak;\r\n\t\tcase SDT_INT64:\r\n\t\t\tsprintf(str, \"%I64d\", pArgInf->m_int64);\r\n\t\t\tpSrc = str;\r\n\t\t\tbreak;\r\n\t\tcase SDT_FLOAT:\r\n\t\t\tsprintf(str, \"%f\", pArgInf->m_float);\r\n\t\t\tLTrimZeroChr(str);\r\n\t\t\tpSrc = str;\r\n\t\t\tbreak;\r\n\t\tcase SDT_DOUBLE:\r\n\t\t\tsprintf(str, \"%.13g\", pArgInf->m_double);\r\n\t\t\tLTrimZeroChr(str);\r\n\t\t\tpSrc = str;\r\n\t\t\tbreak;\r\n\t\tcase SDT_BOOL:\r\n\t\t\tif (pArgInf->m_bool)\r\n\t\t\t\tstrcpy(str, \"\");\r\n\t\t\telse\r\n\t\t\t\tstrcpy(str, \"\");\r\n\t\t\tpSrc = str;\r\n\t\t\tbreak;\r\n\r\n\t\tcase SDT_DATE_TIME:\r\n\t\t\tDateTimeFormat(str, pArgInf->m_double);\r\n\t\t\tpSrc = str;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tif (pSrc)\r\n\t\t{\r\n\t\t\tINT nLen = mystrlen(str);\r\n\t\t\tpSrc = (LPSTR)malloc(nLen + 1);\r\n\t\t\tstrcpy(pSrc, str);\r\n\t\t}\r\n\t}\r\n\treturn pSrc;\r\n}"
  },
  {
    "path": "krnln/StdAfx.cpp",
    "content": "// stdafx.cpp : source file that includes just the standard includes\r\n//\tkrnln.pch will be the pre-compiled header\r\n//\tstdafx.obj will contain the pre-compiled type information\r\n\r\n#include \"stdafx.h\"\r\n\r\n"
  },
  {
    "path": "krnln/StdAfx.h",
    "content": "// stdafx.h : include file for standard system include files,\r\n//  or project specific include files that are used frequently, but\r\n//      are changed infrequently\r\n//\r\n\r\n#if !defined(AFX_STDAFX_H__F1B1835D_D6C8_463B_BD64_E80802519246__INCLUDED_)\r\n#define AFX_STDAFX_H__F1B1835D_D6C8_463B_BD64_E80802519246__INCLUDED_\r\n\r\n#if _MSC_VER > 1000\r\n#pragma once\r\n#endif // _MSC_VER > 1000\r\n\r\n\r\n#define VC_EXTRALEAN\t\t// Exclude rarely-used stuff from Windows headers\r\n\r\n//#include <afx.h>\r\n//#include <afxwin.h>\r\n#include <windows.h>\r\n\r\n// TODO: reference additional headers your program requires here\r\n#ifndef DOUBLE\r\ntypedef double DOUBLE;\r\n#endif\r\n\r\n#ifndef DATE\r\ntypedef double DATE;\r\n#endif\r\n\r\n#include \"lib2.h\"\r\n\r\n\r\n//**********************************************//\r\n// øʽ LIBAPI (ֵ,  )\r\n// nArgCount\t\r\n// ArgInf\t\tһȡָ PMDATA_INF pArgInf = &ArgInf;Ȼ\r\n//\t\t\t\t\tpArgInf[0] һ\r\n//\t\t\t\t\tpArgInf[1] ڶ\r\n//\t\t\t\t\t... \r\n//**********************************************//\r\n#define LIBAPI(rType, fnName) extern \"C\" rType _cdecl fnName(INT nArgCount,MDATA_INF ArgInf,...)\r\n\r\ntypedef void (*PDESTROY)(void);\r\nextern \"C\" {\r\n\tvoid  _cdecl E_DestroyRes();\r\n\tvoid  _cdecl E_Init();\r\n\tvoid  _cdecl E_End (DWORD Param1);\r\n\tvoid  _cdecl E_ReportError (DWORD Param1, DWORD MethodId, DWORD position);\r\n\tvoid*  _cdecl E_MAlloc (DWORD Param1);\r\n\tvoid*  _cdecl E_MAlloc_Nzero (DWORD Param1);\r\n\tvoid*  _cdecl E_MRealloc (void * Param1,DWORD Param2);\r\n\tvoid  _cdecl E_MFree (void * Param1);\r\n\tvoid  _cdecl E_Destroy (PDESTROY Param1);\r\n\tchar* _cdecl krnln_BJCase (INT nArgCount,MDATA_INF ArgInf,...);\r\n\tchar* _cdecl krnln_LTrim (INT nArgCount,MDATA_INF ArgInf,...);\r\n\tvoid*  _cdecl E_NULLARRAY ();\r\n}\r\n\r\nvoid* GetAryElementInf(void* pAryData ,DWORD& AryElementCount);\r\nvoid FreeAryElement (void* pAryData);\r\nvoid GetTimePart(DATE dt,INT& nHour,INT& nMinute,INT& nSecond);\r\nvoid GetDatePart(DATE dt,INT& nYear,INT& nMonth,INT& nDay);\r\n//СϵһaΪ,bΪС,aΪ׼\r\n//ȷaֻbֻС\r\ndouble makedb(double a, double b);\r\n//׵ʱͣתԶʱͣλ \r\nDATE toMyDate(DATE dt);\r\n//Զʱת׵ʱ\r\nDATE toEDate(DATE dt);\r\nvoid DateTimeFormat(LPSTR strValue,DATE dt,BOOL bOnlyDatePart=FALSE);\r\ndouble GetSpecDateTime(INT nYear, INT nMonth, INT nDay, INT nHour,INT nMinute,INT nSecond);\r\n\r\n#define DTT_IS_NULL_DATA_TYPE   0\r\n#define DTT_IS_SYS_DATA_TYPE    1\r\n#define DTT_IS_USER_DATA_TYPE   2\r\n#define DTT_IS_LIB_DATA_TYPE    3\r\n#define ASSERT(x)\r\nINT GetDataTypeType (DATA_TYPE dtDataType);\r\nLPBYTE CloneBinData (LPBYTE pData, INT nDataSize);\r\nchar* CloneTextData (char* ps, INT nTextLen);\r\nchar* CloneTextData (char* ps);\r\nINT GetSysDataTypeDataSize (DATA_TYPE dtSysDataType);\r\n\r\n#define\t\tVAR_BYTE\t\tMAKELONG (MAKEWORD (1, 1), 0xa000)\t\t// ֽ\r\n#define\t\tVAR_SHORT\t\tMAKELONG (MAKEWORD (1, 2), 0xa000)\t\t// \r\n#define\t\tVAR_INT\t\t\tMAKELONG (MAKEWORD (1, 3), 0xa000)\t\t// \r\n#define\t\tVAR_INT64\t\tMAKELONG (MAKEWORD (1, 4), 0xa000)\t\t// \r\n#define\t\tVAR_FLOAT\t\tMAKELONG (MAKEWORD (1, 5), 0xa000)\t\t// С\r\n#define\t\tVAR_DOUBLE\t\tMAKELONG (MAKEWORD (1, 6), 0xa000)\t\t// ˫С\r\n#define\t\tVAR_BOOL\t\tMAKELONG (MAKEWORD (2, 0), 0xa000)\t\t// ߼\r\n#define\t\tVAR_DATE_TIME\tMAKELONG (MAKEWORD (3, 0), 0xa000)\t\t// ʱ\r\n#define\t\tVAR_TEXT\t\tMAKELONG (MAKEWORD (4, 0), 0xa000)\t\t// ı\r\n#define\t\tVAR_BIN\t\t\tMAKELONG (MAKEWORD (5, 0), 0xa000)\t\t// ֽڼ\r\n#define\t\tVAR_SUB_PTR\t\tMAKELONG (MAKEWORD (6, 0), 0xa000)\t\t// ¼ûӳĴַ\r\n\r\nLPSTR IntNumToChn (double dNum,BOOL bSml,INT& nPre);\r\nLPSTR FloatNumToChn (double dNum,BOOL bSml);\r\nLPSTR FloatNumToRMB (double dNum,BOOL bSml);\r\n\r\nINT GetDaysOfSpecMonth(INT nYear,INT nMonth);\r\nINT GetWeekDay(DATE date);\r\n\r\ntypedef struct\r\n{\r\n\tINT nType;  \r\n\tvoid* FileHandle;\r\n\tvoid* pLast;\r\n\tINT nCryptStart;\r\n\tunsigned char strMD5[36];\r\n\tunsigned char strTable[258];\r\n}\r\nFILEELEMENT, *PFILEELEMENT;\r\n\r\nBOOL IsInFileMangerList(PFILEELEMENT pFile);\r\nvoid ResetFileIO();\r\nvoid CloseEfile(PFILEELEMENT pFile);\r\nvoid AddFileMangerList(PFILEELEMENT pFile);\r\n\r\nchar* SDataToStr (PMDATA_INF pArgInf);\r\nHKEY GetRegRootVal(INT nVal);\r\n\r\ntypedef struct\r\n{\r\n\tLPDISPATCH pDisp;  \r\n\tHRESULT hRet;\r\n}\r\nEYDISPATCH, *PEYDISPATCH;\r\n\r\ntypedef INT (__stdcall*EError_CALLBACK)(int nCode, char* errText);\r\nextern EError_CALLBACK fnEError_callback;\r\n\r\nBOOL replaceText(LPSTR& pDest,LPSTR pSub,LPSTR pRplStr,BOOL bNeedFree);\r\n//ֵֿ֧֧ʵֺ\r\nvoid BlackMoonInitAllElib();\r\nvoid BlackMoonFreeAllElib();\r\n//{{AFX_INSERT_LOCATION}}\r\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r\n\r\n#endif // !defined(AFX_STDAFX_H__F1B1835D_D6C8_463B_BD64_E80802519246__INCLUDED_)\r\n"
  },
  {
    "path": "krnln/eHelpFunc.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n#pragma comment(lib,\"kernel32.lib\") \r\n#pragma comment(lib,\"user32.lib\") \r\n\r\nHANDLE hBlackMoonInstanceHandle = NULL;\r\nDWORD dwBlackMoonPESizeOfImage = 0;\r\nDWORD dwBlackMoonPEAddrrStart;\r\nDWORD dwBlackMoonPEAddrrEnd;\r\n\r\nEError_CALLBACK fnEError_callback = NULL;\r\nINT isErrorCallBack = 0;\r\n\r\nvoid GetBlackMoonPESizeOfImage()\r\n{\r\n\tPBYTE module;\r\n\tif(hBlackMoonInstanceHandle)\r\n\t\tmodule = (PBYTE)hBlackMoonInstanceHandle;\r\n\telse\r\n\t\tmodule = (PBYTE)::GetModuleHandle(NULL);\r\n\tdwBlackMoonPESizeOfImage = ((PIMAGE_NT_HEADERS)(module+((PIMAGE_DOS_HEADER)module)->e_lfanew))->OptionalHeader.SizeOfImage;\r\n\tdwBlackMoonPEAddrrStart = (DWORD)module;\r\n\tdwBlackMoonPEAddrrEnd = (DWORD)module+dwBlackMoonPESizeOfImage;\r\n\r\n}\r\nLPSTR sErrorListForE []=\r\n{\r\n(LPSTR)\"Ա±곬巶Χ\",\r\n(LPSTR)\"δõҪֵ\",\r\n(LPSTR)\"ԱʱάΪ1ҲڸĿǰеά\",\r\n(LPSTR)\"Ա±ڵ1\",\r\n(LPSTR)\"ݻͲƥ\",\r\n(LPSTR)\"DLLֶջͨDLLĿȷ\",\r\n(LPSTR)\"δݻ߷˷ϵͳͻ\",\r\n(LPSTR)\"Ƚֻʹõڻ򲻵Ƚ\",\r\n(LPSTR)\"ѡֵС򳬳ṩΧ\",\r\n(LPSTR)\"ض顱άֵάʱڵ\",\r\n(LPSTR)\"ṩͲҪ\"\r\n};\r\n//extern BOOL bIsEnterFromBMEntrypoint;\r\nextern INT nBMProtectESP;\r\nextern INT nBMProtectEBP;\r\nextern \"C\" {\r\n\r\n\r\n\r\nPDESTROY DestroyAddress = NULL;\r\n\r\nPDESTROY HFileDestroyAddress = NULL;\r\n\r\nPDESTROY DestroyMidiPlayer = NULL;\r\n\r\nHANDLE hBlackMoonHeap = NULL;\r\n\r\nPDESTROY BlackMoonFreeAllUserDll = NULL;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4731)\r\n\tvoid  _cdecl E_End (DWORD Param1){\r\n\r\n\t\tE_DestroyRes();\r\n\t\t//if(bIsEnterFromBMEntrypoint)\r\n\t\tif(nBMProtectESP==0){\r\n\t\t\t ExitProcess(Param1);\r\n\t\t\t return;\r\n\t\t}\r\n\r\n\t\t__asm {\r\n\t\t\tmov eax,Param1;\r\n\t\t\tmov ebp,nBMProtectEBP;\r\n\t\t\tmov esp,nBMProtectESP;\r\n\t\t\tsub esp,4;\r\n\t\t\tret;\r\n\t\t}\r\n\r\n\t}\r\n#pragma warning(pop)\r\n\r\n\tvoid  _cdecl E_ReportError (DWORD Param1, DWORD MethodId, DWORD position){\r\n\t\tchar ErrorString [255];\r\n//\t\tint nEbx;\r\n\t\t//__asm mov nEbx,ebx;\r\n\t\tLPSTR ptxt = NULL;\r\n\t\tif(0 <Param1 && Param1<12)\r\n\t\t\tptxt = sErrorListForE[Param1-1];\r\n\r\n\t\tBOOL bThreeParam = FALSE;\r\n\t\tchar *pRetnAddr = (char*)*(&Param1-1); // ȡصַ\r\n\t\tif (NULL != pRetnAddr)\r\n\t\t{\r\n\t\t\tif (0xC483 == *(unsigned short*)(pRetnAddr)) // ǷΪadd esp, xxx;\r\n\t\t\t{\r\n\t\t\t\tbThreeParam = (0x0C <= *(pRetnAddr+2)); // ƽջΪ12ʾ\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (bThreeParam) // 5.8汾ϲŻɵİ汾ֻһ\r\n\t\t{ wsprintf(ErrorString, \"program internal error number is %d. \\r\\n%s\\r\\nλ:%d,%d\", Param1, ptxt, MethodId, position); }\r\n\t\telse\r\n\t\t{ wsprintf(ErrorString, \"program internal error number is %d. \\r\\n%s\\r\\n\", Param1, ptxt); }\r\n\r\n\t\tINT nNoErrorBox = 0;\r\n  \t\tif (fnEError_callback && !isErrorCallBack)\r\n\t\t{\r\n\t\t\tisErrorCallBack = 1;\r\n\t\t\tnNoErrorBox = fnEError_callback(Param1, ErrorString);\r\n\t\t\tisErrorCallBack = 0;\r\n\t\t}\r\n\r\n\t\tif (!nNoErrorBox)\r\n  \t\t\tMessageBox(0, ErrorString, \"error\", MB_ICONERROR);\r\n\r\n\t\tE_End(0);\r\n\r\n\t}\r\n\r\n\tvoid*  _cdecl E_MAlloc (DWORD Param1){\r\n\t\t\r\n\t\tif(hBlackMoonHeap==NULL)\r\n\t\t\thBlackMoonHeap =::GetProcessHeap();\r\n\t\tvoid * pData = HeapAlloc(hBlackMoonHeap, HEAP_ZERO_MEMORY, Param1);//malloc(Param1);//\r\n\t\t\r\n\t\tif(!pData)\r\n\t\t\t//ZeroMemory(pData,Param1);\r\n\t\t//else\r\n\t\t{\r\n\t\t\tchar ErrorString[255];\r\n\t\t\tchar** pRetnAddr = (char**)(&Param1 - 1); // ȡصַ\r\n\t\t\twsprintf(ErrorString, \"%dֽڴʧ.\\r\\n\"\r\n\t\t\t\t\"ջϢ:\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\", \r\n\t\t\t\tParam1,\r\n\t\t\t\tpRetnAddr[0], pRetnAddr[1],\r\n\t\t\t\tpRetnAddr[2], pRetnAddr[3],\r\n\t\t\t\tpRetnAddr[4], pRetnAddr[5],\r\n\t\t\t\tpRetnAddr[6], pRetnAddr[7],\r\n\t\t\t\tpRetnAddr[8], pRetnAddr[9],\r\n\t\t\t\tpRetnAddr[10], pRetnAddr[11],\r\n\t\t\t\tpRetnAddr[12], pRetnAddr[13],\r\n\t\t\t\tpRetnAddr[14], pRetnAddr[15]);\r\n\t\t\tMessageBox(0, ErrorString, \"error\", MB_ICONERROR);\r\n\t\t\tE_End (0);\r\n\t\t}\r\n\r\n\t\treturn pData;\r\n\t}\r\n\r\n\tvoid*  _cdecl E_MAlloc_Nzero (DWORD Param1){\r\n\t\t\r\n\t\tif(hBlackMoonHeap==NULL)\r\n\t\t\thBlackMoonHeap =::GetProcessHeap();\r\n\t\tvoid * pData = HeapAlloc(hBlackMoonHeap, NULL, Param1);//malloc(Param1);//\r\n\t\t\r\n\t\tif(!pData)\r\n\t\t{\r\n\t\t\tchar ErrorString[255];\r\n\t\t\tchar** pRetnAddr = (char**)(&Param1 - 1); // ȡصַ\r\n\t\t\twsprintf(ErrorString, \"%dֽڴʧ.\\r\\n\"\r\n\t\t\t\t\"ջϢ:\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\", \r\n\t\t\t\tParam1,\r\n\t\t\t\tpRetnAddr[0], pRetnAddr[1],\r\n\t\t\t\tpRetnAddr[2], pRetnAddr[3],\r\n\t\t\t\tpRetnAddr[4], pRetnAddr[5],\r\n\t\t\t\tpRetnAddr[6], pRetnAddr[7],\r\n\t\t\t\tpRetnAddr[8], pRetnAddr[9],\r\n\t\t\t\tpRetnAddr[10], pRetnAddr[11],\r\n\t\t\t\tpRetnAddr[12], pRetnAddr[13],\r\n\t\t\t\tpRetnAddr[14], pRetnAddr[15]);\r\n\t\t\tMessageBox(0, ErrorString, \"error\", MB_ICONERROR);\r\n\t\t\tE_End (0);\r\n\t\t}\r\n\t\t\r\n\t\treturn pData;\r\n\t}\r\n\r\n\tvoid*  _cdecl E_MRealloc (void * Param1,DWORD Param2){\r\n\t\tvoid * pData;\r\n\t\tif(hBlackMoonHeap==NULL)\r\n\t\t\thBlackMoonHeap =::GetProcessHeap();\r\n\t\t\r\n\t\tif(Param1)\r\n\t\t\tpData = HeapReAlloc(hBlackMoonHeap, 0, Param1, Param2);//realloc(Param1, Param2);//\r\n\t\telse\r\n\t\t\tpData = HeapAlloc(hBlackMoonHeap, HEAP_ZERO_MEMORY, Param2);//malloc(Param2);//\r\n\t\r\n\t\tif(!pData)\r\n\t\t{\r\n\t\t\tchar ErrorString[255];\r\n\t\t\tchar** pRetnAddr = (char**)(&Param2 - 2); // ȡصַ\r\n\t\t\twsprintf(ErrorString, \"%dֽڴʧ.\\r\\n\"\r\n\t\t\t\t\"ջϢ:\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\"\r\n\t\t\t\t\"0x%08X\\r\\n0x%08X\\r\\n\", \r\n\t\t\t\tParam1,\r\n\t\t\t\tpRetnAddr[0], pRetnAddr[1],\r\n\t\t\t\tpRetnAddr[2], pRetnAddr[3],\r\n\t\t\t\tpRetnAddr[4], pRetnAddr[5],\r\n\t\t\t\tpRetnAddr[6], pRetnAddr[7],\r\n\t\t\t\tpRetnAddr[8], pRetnAddr[9],\r\n\t\t\t\tpRetnAddr[10], pRetnAddr[11],\r\n\t\t\t\tpRetnAddr[12], pRetnAddr[13],\r\n\t\t\t\tpRetnAddr[14], pRetnAddr[15]);\r\n\t\t\tMessageBox(0, \"ڴ治\", \"error\", MB_ICONERROR);\r\n\t\t\tE_End (0);\r\n\t\t}\r\n\r\n\t\treturn pData;\r\n\r\n\t}\r\n\t\r\n\r\n\tvoid  _cdecl E_MFree (void * Param1){\r\n\r\n\r\n\r\n\r\n\t\tif((DWORD)Param1 > 0xFFFF)\r\n\t\t{\r\n\t\t\tif(dwBlackMoonPESizeOfImage==0)\r\n\t\t\t\tGetBlackMoonPESizeOfImage();\r\n\r\n\r\n\t\t\tif(dwBlackMoonPEAddrrStart <= (DWORD)Param1 && (DWORD)Param1 <= dwBlackMoonPEAddrrEnd)\r\n\t\t\t{\r\n\t\t\t\t//MessageBox(NULL,\"ErrorString\",\"ָ\",MB_OK);\r\n\t\t\t\treturn;\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t\r\n\t\t\t//жǷЧĶڴ\r\n\t\t\tif (HeapValidate(hBlackMoonHeap, HEAP_NO_SERIALIZE, Param1) == 0)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tHeapFree(hBlackMoonHeap, 0 , Param1);  //free(Param1);//\r\n\r\n\r\n\t\t\t\r\n\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\tvoid  _cdecl E_Destroy (PDESTROY Param1){\r\n\t\t//int nIdx;\r\n\t\t//__asm mov nIdx,eax;\t\r\n\t\t//if(nIdx==3)\t//2\r\n\t\t\tDestroyAddress = Param1; \r\n\r\n\t}\r\n\r\n\tvoid  _cdecl E_HelpFunc12 (DWORD Param1){\r\n\t\tint nIdx;\r\n\t\t__asm mov nIdx,eax;\t\r\n\t//\tif(nIdx==3)\t//12ź,2\r\n\r\n\t}\r\n\t\r\n\tvoid*  _cdecl E_CloneConstArray (DWORD Param1,void** Param2){\r\n\t\tvoid *result;\r\n\t\tresult = (void *)1;\r\n\t\tif(dwBlackMoonPESizeOfImage==0)\r\n\t\t\tGetBlackMoonPESizeOfImage();\r\n\t\tvoid* pAryData = *Param2;\r\n\t\t\r\n\t\t\r\n\t\tif(dwBlackMoonPEAddrrStart <= (DWORD)pAryData && (DWORD)pAryData <= dwBlackMoonPEAddrrEnd)\r\n\t\t{\r\n\t\t\tLPINT pnData;\r\n\t\t\tINT nArys,nDim;\r\n\t\t\tUINT nElementCount;\r\n\t\t\t\r\n\t\t\tpnData = (LPINT)pAryData;\r\n\t\t\t\r\n\t\t\tnArys=*pnData; //ȡά\r\n\t\t\tnDim = nArys;\r\n\t\t\tpnData +=1;\r\n\t\t\t\r\n\t\t\t// ԱĿ\r\n\t\t\tnElementCount = 1;\r\n\t\t\twhile (nArys > 0)\r\n\t\t\t{\r\n\t\t\t\tnElementCount *= pnData[0];\r\n\t\t\t\tpnData ++;\r\n\t\t\t\tnArys--;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tDWORD dwSize = Param1 * nElementCount + (nDim+1)*sizeof(INT);\r\n\t\t\tresult = E_MAlloc_Nzero(dwSize);\r\n\t\t\tmemcpy(result,pAryData,dwSize);\r\n\t\t\t*Param2 = result;\r\n\r\n\t\t\t\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tvoid*  _cdecl E_NULLARRAY ()\r\n\t{\r\n\t\tLPBYTE p = (LPBYTE)E_MAlloc_Nzero (sizeof (INT) * 2);\r\n\t\t*(LPINT)p = 1;  // ά\r\n\t\t*(LPINT)(p + sizeof (INT)) = 0;\r\n\t\treturn p;\r\n\t}\r\n\r\n\tvoid BlackMoonCalleLibFunctionHelper(INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPFN_EXECUTE_CMD pfn;\r\n\t\t__asm mov pfn, eax;\r\n\t\tMDATA_INF RetData={0};\r\n\t\tpfn(&RetData,nArgCount,&ArgInf);\r\n\t\t__asm{\r\n\t\t\tmov eax, RetData.m_unit.m_dwFormID;\r\n\t\t\tmov edx, RetData.m_unit.m_dwUnitID;\r\n\t\t\tmov ecx, RetData.m_dtDataType\r\n\t\t}\t\t\r\n\t}\r\n//\tvoid main(){};\r\n}\r\nextern \"C\" INT BlackMoonCalleLibList;\r\nextern \"C\" DWORD BlackMoonFuncForeLib;\r\n\r\nvoid BlackMoonInitAllElib(){\r\n\tLPINT pfnNotifySys = &BlackMoonCalleLibList;\r\n\twhile(*pfnNotifySys){\r\n\t\tPFN_NOTIFY_SYS g_fnNotifySys = (PFN_NOTIFY_SYS)*pfnNotifySys;\r\n\t\tg_fnNotifySys(NL_SYS_NOTIFY_FUNCTION,BlackMoonFuncForeLib,0);\r\n\t\tpfnNotifySys++;\r\n\t}\r\n}\r\n\r\nvoid BlackMoonFreeAllElib(){\r\n\tLPINT pfnNotifySys = &BlackMoonCalleLibList;\r\n\twhile(*pfnNotifySys){\r\n\t\tPFN_NOTIFY_SYS g_fnNotifySys = (PFN_NOTIFY_SYS)*pfnNotifySys;\r\n\t\tg_fnNotifySys(NL_FREE_LIB_DATA,0,0);\r\n\t\tpfnNotifySys++;\r\n\t}\r\n\tif(BlackMoonFreeAllUserDll)\r\n\t\tBlackMoonFreeAllUserDll();\r\n}\r\n\r\n\r\n// - ôʾ\r\n/*\r\n    øʽ ޷ֵ ôʾ ӳָ дʾӳݣ - ϵͳֿ֧->\r\n    ӢƣSetErrorManger\r\n    õʱ˵³شʱԸôϸʾӳַδдãشʱʱԶʾôϸϢֱ˳Ϊ߼\r\n    <1>Ϊдʾӳ򡱣Ϊӳָ루SubPtrԱʡԡעӳһΪͣմ룬\r\n\tڶΪıͣϸıͬʱӳ뷵һ߼ֵʾѾдϣϵͳʾôϢؼٱʾϵͳʾôϢ\r\n\tñȫȷԤ⣬⣬ע¼㣺 \r\n\t1ôʾӳҪµĴ \r\n\t2ڽôʾӳϵͳԶر¼Ϣ֪ͨƣҲ˵κ¼޷õӦ \r\n\t3Σӳ˳ϵͳԶӦóرա  ʡԱϵͳָʾĬϴʽ\r\n*/\r\nLIBAPI(void, krnln_SetErrorManger)\r\n{\r\n\tif (ArgInf.m_dtDataType == SDT_SUB_PTR && ArgInf.m_pdwSubCodeAdr)\r\n\t\tfnEError_callback = (EError_CALLBACK)ArgInf.m_pdwSubCodeAdr;\r\n\telse\r\n\t\tfnEError_callback = NULL;\r\n}\r\n\r\n/*\r\n\tøʽ ı͡ DLLװĿ¼ ı DLLװĿ¼ݣ - ϵͳֿ֧->\r\n\tӢƣSetDllCmdLoadPath\r\n\tõִеDLLʱװDLLļװ·ϵͳȵ·ȥװָDLLļýDLLеδָȫ·DLLļװؾӰ죬ڳڼȫЧִк󷵻ϵͳڱǰֵΪ߼\r\n\t<1>ΪDLLװĿ¼ΪıͣtextԱʡԡָϵͳDLLDLLļװ·ʡԣĬֵΪı\r\n\r\n\tϵͳ Windows\r\n*/\r\n\r\n#if _MSC_VER < 1916 //VS2017 VS2019\r\ntypedef BOOL (WINAPI *MySetDllDirectoryA)(LPCSTR lpPathName);\r\ntypedef DWORD (WINAPI *MyGetDllDirectoryA)(DWORD nBufferLength, LPSTR lpBuffer);\r\n#endif\r\n\r\nLIBAPI(char*, _krnln_SetDllCmdLoadPath)\r\n{\r\n\tchar szPath[MAX_PATH];\r\n#if _MSC_VER >= 1916 //VS2017 VS2019\r\n\tDWORD dwLen = GetDllDirectoryA(MAX_PATH, szPath);\r\n\tif (ArgInf.m_pText) {\r\n\t\tSetDllDirectoryA(ArgInf.m_pText);\r\n\t}\r\n#else\r\n\tHMODULE hKernel32 = GetModuleHandle(\"Kernel32.dll\");\r\n\tif (!hKernel32)\r\n\t\treturn NULL;\r\n\r\n\tMyGetDllDirectoryA MyGetDllDirectory = (MyGetDllDirectoryA)GetProcAddress(hKernel32, \"GetDllDirectoryA\");\r\n\tMySetDllDirectoryA MySetDllDirectory = (MySetDllDirectoryA)GetProcAddress(hKernel32, \"SetDllDirectoryA\");\r\n\r\n\tif(!MyGetDllDirectory || !MySetDllDirectory)\r\n\t\treturn NULL;\r\n\r\n\tDWORD dwLen = MyGetDllDirectory(MAX_PATH, szPath);\r\n\tif (ArgInf.m_pText) {\r\n\t\tMySetDllDirectory(ArgInf.m_pText);\r\n\t}\r\n#endif\r\n\tchar* pText = NULL;\r\n\tif (dwLen > 0 && dwLen < MAX_PATH) {\r\n\t\tpText = (char*)E_MAlloc_Nzero(dwLen);\r\n\t\tmemcpy(pText, szPath, dwLen);\r\n\t\tpText[dwLen] = '\\0';\r\n\t}\r\n\treturn pText;\r\n}"
  },
  {
    "path": "krnln/krnln_BJCase.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n\r\n//ı - \r\n/*\r\n    øʽ ı͡  ı 任ı - ϵͳֿ֧->ı\r\n    ӢƣBJCase\r\n    ıеȫĸոֱ任Ϊǣر任ĽıΪ\r\n    <1>Ϊ任ıΪıͣtext\r\n\r\n' ַΧ163ͷ176--185\r\n' дĸ163ͷ193--218\r\n' Сдĸ163ͷ225--250\r\n' ///////////Ϊȫǵģǰǵ\r\n' ַΧ48--57\r\n' дĸ65--90\r\n' Сдĸ97-122\r\nֽڼ ()  ' 163,174,163,173\r\n*/\r\nLIBAPI(char*, krnln_BJCase)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tsize_t nLen = mystrlen(ArgInf.m_pText);\r\n\tif (nLen == 0) return NULL;\r\n\r\n\tchar* pszLast = ArgInf.m_pText + nLen;\r\n\tchar* pszFirst = ArgInf.m_pText;\r\n\tchar* pszSrc = (char*)malloc(nLen + 1);\r\n\tchar* pszTmp = pszSrc;\r\n\tsize_t sSublen;\r\n\tfor (;;)\r\n\t{\r\n\t\tchar* pPos = strstr(pszFirst, \"\");\r\n\t\tif (!pPos) break;\r\n\t\tsSublen = pPos - pszFirst;\r\n\t\tif (sSublen > 0)\r\n\t\t{\r\n\t\t\tmemcpy(pszTmp, pszFirst, sSublen);\r\n\t\t}\r\n\t\tpszTmp[sSublen] = '\\\\';\r\n\t\tpszTmp += sSublen + 1;\r\n\t\tpszFirst = pPos\t+ 2;\r\n\t}\r\n\tsSublen = pszLast - pszFirst;\r\n\tif (sSublen > 0)\r\n\t{\r\n\t\tmemcpy(pszTmp, pszFirst, sSublen);\r\n\t\tpszTmp += sSublen;\r\n\t}\r\n\tpszTmp[0] = '\\0';\r\n\r\n\tnLen = mystrlen(pszSrc);\r\n\tINT nBufLen = nLen + 1;\r\n\tchar *pBJText = (char*)E_MAlloc(nBufLen);\r\n\tLCMapString (2052, LCMAP_HALFWIDTH, pszSrc, nLen, pBJText, nBufLen);\r\n\tfree(pszSrc);\r\n\treturn pBJText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_BinLeft.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ֽڼ - ȡֽڼ\r\n/*\r\n    øʽ ֽڼ ȡֽڼ ֽڼ ȡ䲿ֵֽڼ ȡֽڵĿ - ϵͳֿ֧->ֽڼ\r\n    ӢƣBinLeft\r\n    һֽڼаָֽڼдָֽڡΪ\r\n    <1>Ϊȡ䲿ֵֽڼΪֽڼbin\r\n    <2>ΪȡֽڵĿΪͣint\r\n*/\r\nLIBAPI(void*, krnln_BinLeft)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[0].m_pBin == NULL)\r\n\t\treturn NULL;\r\n\tINT nDataSize = pArgInf[0].m_pInt[1];\r\n\tif(nDataSize == 0 || pArgInf[1].m_int <= 0 )\r\n\t\treturn NULL;\r\n\tif(nDataSize > pArgInf[1].m_int)\r\n\t\tnDataSize = pArgInf[1].m_int;\r\n\r\n\treturn CloneBinData ((LPBYTE)(pArgInf[0].m_pInt + 2),nDataSize);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_BinLen.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ֽڼ - ȡֽڼ\r\n/*\r\n    øʽ ͡ ȡֽڼ ֽڼ ֽڼݣ - ϵͳֿ֧->ֽڼ\r\n    ӢƣBinLen\r\n    ȡֽڼݵĳȡΪ\r\n    <1>ΪֽڼݡΪֽڼbinֵָ䳤ȵֽڼݡ\r\n*/\r\nLIBAPI(int, krnln_BinLen)\r\n{\r\n\tif(ArgInf.m_pBin == NULL) return 0;\r\n\treturn ArgInf.m_pInt[1];\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_BinMid.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ֽڼ - ȡֽڼм\r\n/*\r\n    øʽ ֽڼ ȡֽڼм ֽڼ ȡ䲿ֵֽڼ ʼȡλã ȡֽڵĿ - ϵͳֿ֧->ֽڼ\r\n    ӢƣBinMid\r\n    һֽڼаָֽڼдָλָֽڡΪ\r\n    <1>Ϊȡ䲿ֵֽڼΪֽڼbin\r\n    <2>ΪʼȡλáΪͣint1Ϊλã2Ϊ2λãơ\r\n    <3>ΪȡֽڵĿΪͣint\r\n*/\r\nLIBAPI(void*, krnln_BinMid)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[0].m_pBin == NULL)\r\n\t\treturn NULL;\r\n\tINT nDataSize = pArgInf[0].m_pInt[1];\r\n\tINT nObjLen = pArgInf[2].m_int;\r\n\tif(nDataSize == 0 ||  nObjLen<= 0 )\r\n\t\treturn NULL;\r\n\tINT nStart = pArgInf[1].m_int;\r\n\tif(nStart-1 > nDataSize)\r\n\t\treturn NULL;\r\n\tif(nStart<=0)\r\n\t\tnStart = 1;\r\n\tif(nStart-1 + nObjLen >= nDataSize)\r\n\t\tnObjLen = nDataSize - nStart+1;\r\n\tnDataSize = nObjLen;\r\n\r\n\r\n\treturn CloneBinData ((LPBYTE)(pArgInf[0].m_pBin + 2*sizeof(INT)+ nStart-1),nDataSize);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_BinRight.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ֽڼ - ȡֽڼұ\r\n/*\r\n    øʽ ֽڼ ȡֽڼұ ֽڼ ȡ䲿ֵֽڼ ȡֽڵĿ - ϵͳֿ֧->ֽڼ\r\n    ӢƣBinRight\r\n    һֽڼаָֽڼдұָֽڡΪ\r\n    <1>Ϊȡ䲿ֵֽڼΪֽڼbin\r\n    <2>ΪȡֽڵĿΪͣint\r\n*/\r\nLIBAPI(void*, krnln_BinRight)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[0].m_pBin == NULL)\r\n\t\treturn NULL;\r\n\tINT nDataSize = pArgInf[0].m_pInt[1];\r\n\tif(nDataSize == 0 || pArgInf[1].m_int <= 0 )\r\n\t\treturn NULL;\r\n\tINT nOffset = nDataSize - pArgInf[1].m_int;\r\n\tif(nOffset < 0)\r\n\t\tnOffset = 0;\r\n\tnDataSize = pArgInf[1].m_int;\r\n\tif (nDataSize > pArgInf[0].m_pInt[1]) {\r\n\t\tnDataSize = pArgInf[0].m_pInt[1];\r\n\t}\r\n\treturn CloneBinData ((LPBYTE)(pArgInf[0].m_pBin + 2*sizeof(INT) + nOffset), nDataSize);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ChDir.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//̲ - ıĿ¼\r\n/*\r\n    øʽ ߼͡ ıĿ¼ ı ı䵽Ŀ¼ - ϵͳֿ֧->̲\r\n    ӢƣChDir\r\n    ı䵱ǰĿ¼ıȱʡλáɹ棬ʧܷؼ١Ϊ\r\n    <1>Ϊı䵽Ŀ¼ΪıͣtextֵָĸĿ¼ΪµȱʡĿ¼ܻûָڵǰϸıȱʡĿ¼\r\n*/\r\nLIBAPI(BOOL, krnln_ChDir)\r\n{\r\n\treturn SetCurrentDirectory(ArgInf.m_pText);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ChDrive.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//̲ - ı\r\n/*\r\n    øʽ ߼͡ ı ı ı䵽 - ϵͳֿ֧->̲\r\n    ӢƣChDrive\r\n    ı䵱ǰȱʡɹ棬ʧܷؼ١Ϊ\r\n    <1>Ϊı䵽ΪıͣtextֵָһڵơABCȣֻȡøıĵһַʹ㳤ȵıǰı䡣\r\n*/\r\nLIBAPI(BOOL, krnln_ChDrive)\r\n{\r\n\tchar DirName [MAX_PATH];\r\n\r\n\tif(!*(ArgInf.m_pText))\r\n\t\treturn FALSE;\r\n\r\n\tDirName[0]=*ArgInf.m_pText;\r\n\tDirName[1]=':';\r\n\tDirName[2]='\\\\';\r\n\tDirName[3]=0;\r\n\r\n\treturn SetCurrentDirectory(DirName);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ClearClipBoard.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ϵͳ - \r\n/*\r\n    øʽ ޷ֵ   - ϵͳֿ֧->ϵͳ\r\n    ӢƣClearClipBoard\r\n    ǰ Windows ϵͳеݡΪ\r\n*/\r\nLIBAPI(void, krnln_ClearClipBoard)\r\n{\r\n\tif(OpenClipboard(NULL))\r\n\t{\r\n\t\tEmptyClipboard();\r\n\t\tCloseClipboard();\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_CryptOpen.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"md5t.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n// øʽ ͡ 򿪼ļ ı 򿪵ļƣ 򿪷ʽݣ ʽݣı ļݣ ȣݣ - ϵͳֿ֧->ļд\r\n// ӢƣCryptOpen\r\n// һָܵļԶԴļпٰȫʣִ֧ߴļɹرļļţʧܷ 0Ϊ\r\n// <1>Ϊ򿪵ļơΪıͣtext\r\n// <2>Ϊ򿪷ʽΪͣintԱʡԡֵ˵ļĲʽʡԱĬΪ#дʽֵΪ³֮һ\r\n// 1#룺ָļݣļʧܣ\r\n// 2#ддݵָļļʧܣ\r\n// 3#дļжݻдݵļļʧܣ\r\n// 4#ддݵָļļȴһļѾھеݣ\r\n// 5#ддݵָļļ򴴽һļѾھֱӴ򿪣\r\n// 6#Ķļжݻдݵļļ򴴽һļѾھֱӴ򿪡\r\n// <3>ΪʽΪͣintԱʡԡֵָ̲ļķʽʡԱĬΪ#ơʽֵΪ³֮һ\r\n// 1#ƣдļ\r\n// 2#̶ֹֹļ\r\n// 3#ֹдֹдļ\r\n// 4#ֹд̶ֹдļ\r\n// <4>Ϊļ롱ΪıͣtextԱʡԡ򿪵ļвκݣΪļ򽫴ļָļʱʹõ룬Ժдļеݶʹôܺд롣볤Ϊ6ַϣûʹú֡ĸ֡ţԱ֤뱾İȫԡ򿪵ļѾݣṩʴʱҪȷ룬ûмܣṩıԱʾҪ롣עϵͳȥУȷԣṩ룬дļݽõĽǧע⡣ҪУǷȷڼܺļбȷııժҪϢݲֿ֧һеġȡժҪȻڴ򿪼ļϢ֤ϵͳʹõļ㷨ǹʱ׼RC4㷨Ա֤ݵİȫԡʡԣĬΪı롣\r\n// <5>ΪȡΪͣintԱʡԡָļײʼϣֵܲĳȣϵͳڶдڵʱʹмӽܲ˲ļΪ֣ԷĳЩӦóͬʱһЩݡע⵱мݵļʱ˲ֵ½˼ļʱṩĲֵһ£ݷʴʡԣĬֵΪ0û\r\n// \r\n// ϵͳ Windows\r\nLIBAPI(void*, krnln_CryptOpen) // δ \r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tDWORD dwDesiredAccess,dwShareMode,dwCreationDisposition;\r\n\t\r\n\tif(pArgInf[1].m_dtDataType == _SDT_NULL)\r\n\t{//#д\r\n\t\tdwDesiredAccess = GENERIC_READ | GENERIC_WRITE;\r\n\t\tdwCreationDisposition = OPEN_EXISTING;\r\n\t}\r\n\telse\r\n\t{\r\n\t\tswitch (pArgInf[1].m_int)\r\n\t\t{\r\n\t\tcase 1://#\r\n\t\t\tdwDesiredAccess = GENERIC_READ;\r\n\t\t\tdwCreationDisposition = OPEN_EXISTING;\r\n\t\t\tbreak;\r\n\t\tcase 2://#д\r\n\t\t\tdwDesiredAccess = GENERIC_WRITE;\r\n\t\t\tdwCreationDisposition = OPEN_EXISTING;\r\n\t\t\tbreak;\r\n\t\tcase 4://#д\r\n\t\t\tdwDesiredAccess = GENERIC_WRITE;\r\n\t\t\tdwCreationDisposition = CREATE_ALWAYS;\r\n\t\t\tbreak;\r\n\t\tcase 5://#д\r\n\t\t\tdwDesiredAccess = GENERIC_WRITE;\r\n\t\t\tdwCreationDisposition = OPEN_ALWAYS;\r\n\t\t\tbreak;\r\n\t\tcase 6://#Ķ\r\n\t\t\tdwDesiredAccess = GENERIC_READ | GENERIC_WRITE;\r\n\t\t\tdwCreationDisposition = OPEN_ALWAYS;\r\n\t\t\tbreak;\r\n\t\tdefault://#д\r\n\t\t\tdwDesiredAccess = GENERIC_READ | GENERIC_WRITE;\r\n\t\t\tdwCreationDisposition = OPEN_EXISTING;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\t\r\n\tif(pArgInf[2].m_dtDataType == _SDT_NULL)\r\n\t\tdwShareMode = (FILE_SHARE_READ | FILE_SHARE_WRITE );\r\n\telse\r\n\t{\r\n\t\tif(pArgInf[2].m_int ==2)\r\n\t\t\tdwShareMode = FILE_SHARE_WRITE ;\r\n\t\telse if(pArgInf[2].m_int ==3)\r\n\t\t\tdwShareMode = FILE_SHARE_READ ;\r\n\t\telse if(pArgInf[2].m_int ==4)\r\n\t\t\tdwShareMode = 0;\r\n\t\telse\r\n\t\t\tdwShareMode = (FILE_SHARE_READ | FILE_SHARE_WRITE );\r\n\t}\r\n\t\r\n\tHANDLE hFile = CreateFile(ArgInf.m_pText,\r\n\t\tdwDesiredAccess,\r\n\t\tdwShareMode,\r\n\t\tNULL,\r\n\t\tdwCreationDisposition,\r\n\t\tFILE_ATTRIBUTE_ARCHIVE,\r\n\t\t0);\r\n\t\r\n\t\r\n\tif(hFile != INVALID_HANDLE_VALUE)\r\n\t{\r\n\t\tPFILEELEMENT pFile = new FILEELEMENT;\r\n\t\tif (pArgInf[3].m_dtDataType == _SDT_NULL || !pArgInf[3].m_pText || !*(pArgInf[3].m_pText))\r\n\t\t\tpFile->nType = 1; // ͨļ\r\n\t\telse\r\n\t\t{\r\n\t\t\tint nKeylen = mystrlen(pArgInf[3].m_pText);\r\n\t\t\tpFile->nType = 3; // ļ\r\n\r\n\t\t\tGetBufMD5(pFile->strMD5, (unsigned char*)pArgInf[3].m_pText, nKeylen);\r\n\t\t\tswap_hex(pFile->strMD5, 32); //תMD5\r\n\r\n\t\t\tmemset(pFile->strTable,0,258);\r\n\t\t\tE_RC4_init(pFile->strTable, (unsigned char*)pArgInf[3].m_pText, nKeylen);\r\n\r\n\t\t\t//\r\n\t\t\tif(pArgInf[4].m_dtDataType == _SDT_NULL)\r\n\t\t\t\tpFile->nCryptStart = 0;\r\n\t\t\telse\r\n\t\t\t\tpFile->nCryptStart = pArgInf[4].m_int;\r\n\t\t}\r\n\r\n\t\tpFile->FileHandle = hFile;\r\n\t\tAddFileMangerList(pFile);\r\n\t\treturn pFile;\r\n\t}\r\n\treturn NULL;\r\n}\r\n\r\n"
  },
  {
    "path": "krnln/krnln_CurDir.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n//̲ - ȡǰĿ¼\r\n/*\r\n    øʽ ı͡ ȡǰĿ¼  - ϵͳֿ֧->̲\r\n    ӢƣCurDir\r\n    һıǰĿ¼ʧܣؿıΪ\r\n*/\r\nLIBAPI(char*, krnln_CurDir)\r\n{\r\n\tchar DirName [MAX_PATH];\r\n\tchar* pText = NULL;\r\n\r\n\tif(GetCurrentDirectory(MAX_PATH,DirName))\r\n\t{\r\n\t\tINT nLen = mystrlen(DirName);\r\n\t\tpText = CloneTextData(DirName,nLen);\r\n\t}\r\n\treturn pText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_DeleteRegItem.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n#pragma comment(lib,\"advapi32.lib\") \r\n//ϵͳ - ɾע\r\n/*\r\n    øʽ ߼͡ ɾע  Ŀ¼ı ȫ·ע - ϵͳֿ֧->ϵͳ\r\n    ӢƣDeleteRegItem\r\n     Windows עɾָעעĿ¼ɾעĬֵĿӡ\\ţ硰test\\ɹ棬򷵻ؼ١עɾĿ¼֮ǰɾĿ¼еĿΪм\r\n    <1>ΪĿ¼ΪͣintΪ³ֵ֮һ 1#ࣻ 2#ã 3#û 4#ػ 5#û\r\n    <2>Ϊȫ·עΪıͣtext\r\n*/\r\nLIBAPI(BOOL, krnln_DeleteRegItem)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tHKEY hRootkey = GetRegRootVal(pArgInf[0].m_int);\r\n\tBOOL bRet = FALSE;\r\n\tINT nLen = mystrlen(pArgInf[1].m_pText);\r\n\tif(hRootkey && nLen)\r\n\t{\r\n\t\tHKEY hkey;\r\n\t\tLPSTR pSubkey = new char [nLen +1];\r\n\t\tstrcpy(pSubkey,pArgInf[1].m_pText);\r\n\t\tLPSTR pKeyname = strrchr(pSubkey,'\\\\');\r\n\t\tif(pKeyname)\r\n\t\t{\r\n\t\t\t*pKeyname = 0;\r\n\t\t\tpKeyname++;\r\n\t\t}\r\n\t\tif(RegOpenKeyEx(hRootkey,pSubkey,0,KEY_ALL_ACCESS,&hkey)==ERROR_SUCCESS)\r\n\t\t{\r\n\t\t\tbRet = (RegDeleteValue(hkey,pKeyname)==ERROR_SUCCESS);\r\n\t\t\tRegCloseKey(hkey);\r\n\t\t}\r\n\t\tif(bRet == FALSE)\r\n\t\t{\r\n\t\t\tbRet = (RegDeleteKey(hRootkey,pArgInf[1].m_pText)==ERROR_SUCCESS);\r\n\t\t}\r\n\r\n\t\tdelete [] pSubkey;\r\n\t}\r\n\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_Dispatch.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"OLECTL.H\"\r\n#include \"Myfunctions.h\"\r\n#include <stdio.h>\r\n#pragma comment(lib,\"ole32.lib\")\r\n#pragma comment(lib,\"oleaut32.lib\")\r\n\r\n#define\t\tDTC_COM_OBJECT  \t\t48\r\n#define     DTC_VARIANT             49\r\n#define\t\tDTP_COM_OBJECT      MAKELONG (DTC_COM_OBJECT, 1)\r\n#define     DTP_VARIANT         MAKELONG (DTC_VARIANT, 1)\r\n\r\n\r\n\r\nLPOLESTR ASCII2Unicode(LPSTR pAsciiText)\r\n{\r\n\tif(pAsciiText==NULL)\r\n\t\treturn NULL;\r\n\tDWORD dwMinSize;\r\n    dwMinSize = MultiByteToWideChar (CP_ACP, 0, pAsciiText, -1, NULL, 0);\r\n\t\r\n    if(dwMinSize==0)\r\n\t\treturn NULL;\r\n    LPOLESTR lpwszStr = (LPOLESTR)new USHORT [dwMinSize];\r\n    // Convert headers from ASCII to Unicode.\r\n    MultiByteToWideChar (CP_ACP, 0, pAsciiText, -1, lpwszStr, dwMinSize);  \r\n\treturn lpwszStr;\r\n}\r\nLPSTR Unicode2EASCII(LPOLESTR pBStrText)\r\n{\r\n\tif(pBStrText==NULL)\r\n\t\treturn NULL;\r\n\t//Ҫתַ \r\n\tDWORD dwLen=WideCharToMultiByte (CP_ACP, 0, pBStrText, -1, NULL,0, NULL, NULL) ; \r\n\t//תַ\r\n\tif(dwLen==0)\r\n\t\treturn NULL;\r\n\tLPSTR pText =(char*)E_MAlloc (dwLen);\r\n\tWideCharToMultiByte (CP_ACP, 0, pBStrText, -1, pText,dwLen, NULL, NULL);\r\n\treturn pText;\r\n}\r\n\r\nHRESULT Dispatch_GetIDsOfNames(LPDISPATCH lpDispatch,LPSTR pszName,DISPID* rgDispid)\r\n{\r\n\tLPOLESTR lpzCom = ASCII2Unicode(pszName);\r\n\tHRESULT hRet = 0;\r\n\t/*\r\n\tUINT nMax = 0;\r\n\thRet = lpDispatch->GetTypeInfoCount(&nMax);\r\n\tif(hRet ==S_OK){\r\n\r\n\t\t\t\r\n\t\tITypeInfo* pp = NULL;\r\n\t\tfor(UINT i=0;i<nMax;i++){\r\n\t\t\thRet = lpDispatch->GetTypeInfo(i,0,&pp);\r\n\t\t\tif(hRet ==S_OK){\r\n\t\t\t\thRet = pp->GetIDsOfNames(&lpzCom,1,rgDispid);\r\n\r\n\t\t\t\tpp->Release();\r\n\t\t\t\tif(hRet ==S_OK){\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(lpzCom)\r\n\t\t\t\t\t\tdelete [] lpzCom;\r\n\t\t\t\t\treturn hRet;\r\n\t\t\t\t}\r\n\t\t\tchar ErrorString [1024];\r\n  \t\t\twsprintf(ErrorString, \"%x %d\", hRet,*rgDispid);\r\n\t\t\t\tMessageBox(NULL,ErrorString,NULL,MB_OK);\r\n\t\t\t\tpp = NULL;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n*/\r\n\t\r\n\r\n\t//hRet = lpDispatch->GetIDsOfNames(IID_NULL,&lpzCom,1, LOCALE_USER_DEFAULT,rgDispid); //ԭ\r\n\thRet = lpDispatch->GetIDsOfNames(IID_NULL,&lpzCom,1, GetUserDefaultLCID(),rgDispid);\r\n\tif(lpzCom)\r\n\t\tdelete [] lpzCom;\r\n\treturn hRet;\r\n\r\n}\r\n\r\nHRESULT Dispatch_InvokeHelper(LPDISPATCH lpDispatch,DISPID dwDispID, WORD wFlags,\r\n\tVARIANT* pvarResult, INT nArgCount, PMDATA_INF pArgInf)\r\n{\r\n\tDISPPARAMS dispparams;\r\n\tmemset(&dispparams, 0, sizeof dispparams);\r\n\r\n\t//Ƿдַ\r\n\tBOOL* pbIsRef = NULL;\r\n\tif (nArgCount > 0)\r\n\t{\r\n\t\tpbIsRef = new BOOL[nArgCount];\r\n\t\tmemset(pbIsRef, 0, sizeof(BOOL) * nArgCount);\r\n\t}\r\n\t\r\n\tITypeInfo* pTypeInfo;\r\n\tlpDispatch->GetTypeInfo(0,0,&pTypeInfo);\r\n\t\r\n\tTYPEATTR* pAttr; \r\n\tINT bIsMethod = FALSE;\r\n\tpTypeInfo->GetTypeAttr(&pAttr);\r\n\tif(wFlags == DISPATCH_METHOD)\r\n\t{\r\n\t\tFUNCDESC* pFuncDesc = NULL; \r\n\t\t\r\n\t\tfor (INT i=0;i <pAttr->cFuncs;i++) \r\n\t\t{\r\n\t\t\tHRESULT hr = pTypeInfo->GetFuncDesc(i, &pFuncDesc); \r\n\t\t\tif(hr == S_OK && pFuncDesc->memid == dwDispID)\r\n\t\t\t{\r\n\t\t\t\tINT nMax = min(nArgCount,pFuncDesc->cParams);\r\n\t\t\t\tfor(INT j=0;j<nMax;j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(pFuncDesc->lprgelemdescParam[j].tdesc.vt==VT_PTR || \r\n\t\t\t\t\t\t(pFuncDesc->lprgelemdescParam[j].tdesc.vt & VT_BYREF)==VT_BYREF)\r\n\t\t\t\t\t\tpbIsRef[j] = TRUE;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (pFuncDesc->invkind == INVOKE_PROPERTYPUT && nArgCount == 0) // д Ϊ0\r\n\t\t\t\t\twFlags = INVOKE_PROPERTYGET;\r\n\t\t\t\telse\r\n\t\t\t\t\twFlags = pFuncDesc->invkind;\r\n\r\n\t\t\t\tbIsMethod = TRUE;\r\n\t\t\t\tpTypeInfo->ReleaseFuncDesc(pFuncDesc); \r\n\t\t\t\tbreak; \r\n\t\t\t}\r\n\t\t\tpTypeInfo->ReleaseFuncDesc(pFuncDesc); \r\n\t\t\tpFuncDesc = NULL; \r\n\t\t}\r\n\t}\r\n\tif (!bIsMethod)\r\n\t{\r\n\t\tVARDESC* pVarDesc = NULL; \r\n\t\t\r\n\t\tfor (INT i=0;i <pAttr->cVars;i++) \r\n\t\t{\r\n\t\t\tHRESULT hr = pTypeInfo->GetVarDesc(i, &pVarDesc); \r\n\t\t\tif(hr == S_OK && pVarDesc->memid == dwDispID)\r\n\t\t\t{\r\n\t\t\t\tif(pVarDesc->elemdescVar.tdesc.vt==VT_PTR || \r\n\t\t\t\t\t(pVarDesc->elemdescVar.tdesc.vt & VT_BYREF)==VT_BYREF)\r\n\t\t\t\t\tpbIsRef[0] = TRUE;\r\n\t\t\t\t\r\n\t\t\t\tif (wFlags == DISPATCH_METHOD)\r\n\t\t\t\t\twFlags = INVOKE_PROPERTYGET;\r\n\r\n\t\t\t\tpTypeInfo->ReleaseVarDesc(pVarDesc); \r\n\t\t\t\tbreak; \r\n\t\t\t}\r\n\t\t\tpTypeInfo->ReleaseVarDesc(pVarDesc); \r\n\t\t\tpVarDesc = NULL; \r\n\t\t}\r\n\t}\r\n\tpTypeInfo->ReleaseTypeAttr(pAttr); \r\n\tpTypeInfo->Release ();\r\n\r\n\t// determine number of arguments\r\n\tdispparams.cArgs = nArgCount;\r\n\tDISPID dispidNamed = DISPID_PROPERTYPUT;\r\n\tif (wFlags & (DISPATCH_PROPERTYPUT|DISPATCH_PROPERTYPUTREF))\r\n\t{\r\n\t\t//ASSERT(dispparams.cArgs > 0);\r\n\t\tdispparams.cNamedArgs = 1;\r\n\t\tdispparams.rgdispidNamedArgs = &dispidNamed;\r\n\t}\r\n\tif (dispparams.cArgs != 0)\r\n\t{\r\n\t\t// allocate memory for all VARIANT parameters\r\n\t\tVARIANT* pArg = new VARIANT[dispparams.cArgs];\r\n\t\tASSERT(pArg != NULL);   // should have thrown exception\r\n\t\tdispparams.rgvarg = pArg;\r\n\t\tmemset(pArg, 0, sizeof(VARIANT) * dispparams.cArgs);\r\n\r\n\t\t// get ready to walk vararg list\r\n\t\tpArg += dispparams.cArgs - 1;   // params go in opposite order\r\n\r\n\t\tfor(INT i=0;i<nArgCount;i++)\r\n\t\t{\t\r\n\t\t\tif((pArgInf[i].m_dtDataType & DT_IS_ARY) == 0)//\r\n\t\t\t{\t\r\n\t\t\t\t\r\n\t\t\t\tswitch(pArgInf[i].m_dtDataType)\r\n\t\t\t\t{\r\n\t\t\t\tcase SDT_BYTE:\r\n\t\t\t\t\tpArg->vt = VT_UI1;\r\n\t\t\t\t\tpArg->intVal = pArgInf[i].m_int;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_SHORT:\r\n\t\t\t\t\tpArg->vt = VT_I2;\r\n\t\t\t\t\tpArg->intVal = pArgInf[i].m_int;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_INT:\r\n\t\t\t\t\tpArg->vt = VT_I4;\r\n\t\t\t\t\tpArg->intVal = pArgInf[i].m_int;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_SUB_PTR:\r\n\t\t\t\t\tpArg->vt = VT_UI4;\r\n\t\t\t\t\tpArg->intVal = pArgInf[i].m_int;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_INT64:\r\n\t\t\t\t\tpArg->vt = VT_I8;\r\n\t\t\t\t\tpArg->date = pArgInf[i].m_date;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_FLOAT:\r\n\t\t\t\t\tpArg->vt = VT_R4;\r\n\t\t\t\t\tpArg->fltVal= pArgInf[i].m_float;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_DOUBLE:\r\n\t\t\t\t\tpArg->vt = VT_R8;\r\n\t\t\t\t\tpArg->date = pArgInf[i].m_date;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_BOOL:\r\n\t\t\t\t\tpArg->vt = VT_BOOL;\r\n\t\t\t\t\tpArg->boolVal = pArgInf[i].m_bool?-1:0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_DATE_TIME:\r\n\t\t\t\t\tpArg->vt = VT_DATE;\r\n\t\t\t\t\tpArg->date = pArgInf[i].m_date;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_TEXT:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_BSTR;\r\n\t\t\t\t\t\tLPOLESTR lpsz = ASCII2Unicode(pArgInf[i].m_pText);\r\n\t\t\t\t\t\tpArg->bstrVal = ::SysAllocString(lpsz);\r\n\t\t\t\t\t\tdelete [] lpsz;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_BIN:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_ARRAY | VT_UI1;\r\n\t\t\t\t\t\tINT nLength=*(LPINT)(pArgInf[i].m_pBin + sizeof (INT));\r\n\t\t\t\t\t\tBYTE* pbuf=pArgInf[i].m_pBin + sizeof (INT) * 2;\r\n\r\n\t\t\t\t\t\tSAFEARRAY* psa;\r\n\t\t\t\t\t\tSAFEARRAYBOUND rgsabound[1];\r\n\t\t\t\t\t\trgsabound[0].lLbound = 0;\r\n\t\t\t\t\t\trgsabound[0].cElements = nLength;\r\n\t\t\t\t\t\tpsa = SafeArrayCreate(VT_UI1, 1, rgsabound);\r\n\t\t\t\t\t\tpsa->pvData=pbuf;\r\n\t\t\t\t\t\tpArg->parray = psa;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase DTP_VARIANT:\r\n\t\t\t\t\tif(pbIsRef[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_VARIANT | VT_BYREF;\r\n\t\t\t\t\t\tpArg->pvarVal = (VARIANT*)pArgInf[i].m_pCompoundData;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\t//memcpy(pArg,(VARIANT*)pArgInf[i].m_pCompoundData,sizeof(VARIANT));\r\n\t\t\t\t\t\tVariantCopy(pArg,(VARIANT*)pArgInf[i].m_pCompoundData);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase DTP_COM_OBJECT:\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(pbIsRef[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(wFlags==DISPATCH_PROPERTYPUT)//ΪַʱתΪдַ־\r\n\t\t\t\t\t\t\t wFlags = DISPATCH_PROPERTYPUTREF;\r\n\t\t\t\t\t\tpArg->vt = VT_DISPATCH | VT_BYREF;\r\n\t\t\t\t\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[i].m_ppCompoundData;\r\n\t\t\t\t\t\tpArg->ppdispVal = (LPDISPATCH*)pDest;\r\n\t\t\t\t\t}else{\t\t\t\r\n\t\t\t\t\t\tpArg->vt = VT_DISPATCH;\r\n\t\t\t\t\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[i].m_ppCompoundData;\r\n\t\t\t\t\t\tpArg->pdispVal = pDest->pDisp;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t\r\n\t\t\t\tDWORD dtDataType = ~DT_IS_ARY & pArgInf[i].m_dtDataType;\r\n\t\t\t\tswitch(dtDataType)\r\n\t\t\t\t{\r\n\t\t\t\tcase SDT_BYTE:\r\n\t\t\t\t\tif(pbIsRef[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_UI1|VT_BYREF;\r\n\t\t\t\t\t\tpArg->intVal = pArgInf[i].m_int;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_UI1;\r\n\t\t\t\t\t\tpArg->bVal = *pArgInf[i].m_pByte;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_SHORT:\r\n\t\t\t\t\tif(pbIsRef[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_I2|VT_BYREF;\r\n\t\t\t\t\t\tpArg->intVal = pArgInf[i].m_int;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_I2;\r\n\t\t\t\t\t\tpArg->iVal = *pArgInf[i].m_pShort;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_INT:\r\n\t\t\t\t\tif(pbIsRef[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_I4|VT_BYREF;\r\n\t\t\t\t\t\tpArg->intVal = pArgInf[i].m_int;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_I4;\r\n\t\t\t\t\t\tpArg->intVal = *pArgInf[i].m_pInt;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_SUB_PTR:\r\n\t\t\t\t\tif(pbIsRef[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_UI4|VT_BYREF;\r\n\t\t\t\t\t\tpArg->intVal = pArgInf[i].m_int;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_UI4;\r\n\t\t\t\t\t\tpArg->uintVal = *pArgInf[i].m_pdwSubCodeAdr;\r\n\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_INT64:\r\n\t\t\t\t\tif(pbIsRef[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_I8|VT_BYREF;\r\n\t\t\t\t\t\tpArg->intVal = pArgInf[i].m_int;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_I8;\r\n\t\t\t\t\t\tpArg->date = *pArgInf[i].m_pDate;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_FLOAT:\r\n\t\t\t\t\tif(pbIsRef[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_R4|VT_BYREF;\r\n\t\t\t\t\t\tpArg->intVal = pArgInf[i].m_int;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_R4;\r\n\t\t\t\t\t\tpArg->fltVal = *pArgInf[i].m_pFloat;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_DOUBLE:\r\n\t\t\t\t\tif(pbIsRef[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_R8|VT_BYREF;\r\n\t\t\t\t\t\tpArg->intVal = pArgInf[i].m_int;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_R8;\r\n\t\t\t\t\t\tpArg->date = *pArgInf[i].m_pDate;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_BOOL:\r\n\t\t\t\t\tif(pbIsRef[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_BOOL|VT_BYREF;\r\n\t\t\t\t\t\tif(*pArgInf[i].m_pBool)\r\n\t\t\t\t\t\t\t*pArgInf[i].m_pBool = -1;\r\n\t\t\t\t\t\tpArg->intVal = pArgInf[i].m_int;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_BOOL;\r\n\t\t\t\t\t\tpArg->boolVal = *pArgInf[i].m_pBool?-1:0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_DATE_TIME:\r\n\t\t\t\t\tif(pbIsRef[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_DATE|VT_BYREF;\r\n\t\t\t\t\t\tpArg->intVal = pArgInf[i].m_int;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_DATE;\r\n\t\t\t\t\t\tpArg->date = *pArgInf[i].m_pDate;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_TEXT:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(pbIsRef[i])\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tpArg->vt = VT_BSTR|VT_BYREF;\r\n\t\t\t\t\t\t\tif(*pArgInf[i].m_ppText)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tLPOLESTR lpsz = ASCII2Unicode(*pArgInf[i].m_ppText);\r\n\t\t\t\t\t\t\t\tLPOLESTR* pp = &pArg->bstrVal;\r\n\t\t\t\t\t\t\t\tpp++;\r\n\t\t\t\t\t\t\t\t*pp = ::SysAllocString(lpsz);\r\n\t\t\t\t\t\t\t\tpArg->pbstrVal = pp;\r\n\t\t\t\t\t\t\t\tdelete [] lpsz;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tpArg->vt = VT_BSTR;\r\n\t\t\t\t\t\t\tif(*pArgInf[i].m_ppText)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tLPOLESTR lpsz = ASCII2Unicode(*pArgInf[i].m_ppText);\r\n\t\t\t\t\t\t\t\tpArg->bstrVal = ::SysAllocString(lpsz);\r\n\t\t\t\t\t\t\t\tdelete [] lpsz;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SDT_BIN:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpArg->vt = VT_ARRAY | VT_UI1;\r\n\t\t\t\t\t\t//pArg->vt = VT_ARRAY | VT_UI1| VT_BYREF;\r\n\t\t\t\t\t\tLPBYTE pBin = *pArgInf[i].m_ppBin;\r\n\t\t\t\t\t\tif(pBin)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tINT nLength=*(LPINT)(pBin + sizeof (INT));\r\n\t\t\t\t\t\t\tBYTE* pbuf = pBin + sizeof (INT) * 2;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tSAFEARRAY* psa;\r\n\t\t\t\t\t\t\tSAFEARRAYBOUND rgsabound[1];\r\n\t\t\t\t\t\t\trgsabound[0].lLbound = 0;\r\n\t\t\t\t\t\t\trgsabound[0].cElements = nLength;\r\n\t\t\t\t\t\t\tpsa = SafeArrayCreate(VT_UI1, 1, rgsabound);\r\n\t\t\t\t\t\t\tpsa->pvData=pbuf;\r\n\t\t\t\t\t\t\tpArg->parray = psa;\r\n\t\t\t\t\t\t\t/*\r\n\t\t\t\t\t\t\tINT nLength=*(LPINT)(pBin + sizeof (INT));\r\n\t\t\t\t\t\t\tBYTE* pbuf=pBin + sizeof (INT) * 2;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tSAFEARRAY* psa;\r\n\t\t\t\t\t\t\tSAFEARRAYBOUND rgsabound[1];\r\n\t\t\t\t\t\t\trgsabound[0].lLbound = 0;\r\n\t\t\t\t\t\t\trgsabound[0].cElements = nLength;\r\n\t\t\t\t\t\t\tpsa = SafeArrayCreate(VT_UI1, 1, rgsabound);\r\n\t\t\t\t\t\t\tpsa->pvData=pbuf;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tSAFEARRAY** pp = &pArg->parray;\r\n\t\t\t\t\t\t\tpp++;\r\n\t\t\t\t\t\t\t*pp = psa;\r\n\t\t\t\t\t\t\tpArg->pparray = pp;*/\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase DTP_VARIANT:\r\n\t\t\t\t\t//if(pbIsRef[i])\r\n\t\t\t\t//\t{\r\n\t\t\t\t\t\tpArg->vt = VT_VARIANT | VT_BYREF;\r\n\t\t\t\t\t\tpArg->pvarVal = (VARIANT*)*pArgInf[i].m_ppCompoundData;\r\n\t\t\t\t//\t}else\r\n\t\t\t\t//\t\tmemcpy(pArg,(VARIANT*)*pArgInf[i].m_ppCompoundData,sizeof(VARIANT));\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase DTP_COM_OBJECT:\r\n\t\t\t\t\tif(pbIsRef[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(wFlags==DISPATCH_PROPERTYPUT)\r\n\t\t\t\t\t\t\t wFlags = DISPATCH_PROPERTYPUTREF;//ΪַʱתΪдַ־\r\n\t\t\t\t\t\tpArg->vt = VT_DISPATCH | VT_BYREF;\r\n\t\t\t\t\t\tPEYDISPATCH pDest = *(PEYDISPATCH*)pArgInf[i].m_ppCompoundData;\r\n\t\t\t\t\t\tpArg->ppdispVal = (LPDISPATCH*)pDest;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tpArg->vt = VT_DISPATCH;\r\n\t\t\t\t\t\tPEYDISPATCH pDest = *(PEYDISPATCH*)pArgInf[i].m_ppCompoundData;\r\n\t\t\t\t\t\tpArg->pdispVal = pDest->pDisp;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t\t\t--pArg; // get ready to fill next argument\r\n\t\t}\r\n\t\tdelete [] pbIsRef;\r\n\r\n\t}\r\n\r\n\tUINT nArgErr = (UINT)-1;  // initialize to invalid arg\r\n\r\n\t// make the call\r\n\tHRESULT hRet = lpDispatch->Invoke(dwDispID, IID_NULL, 0, wFlags,\r\n\t\t&dispparams, pvarResult, NULL, &nArgErr);\r\n\r\n\t// cleanup any arguments that need cleanup\r\n\tif (dispparams.cArgs != 0)\r\n\t{\r\n\t\tVARIANT* pArg = dispparams.rgvarg + dispparams.cArgs - 1;\r\n\t\tfor(INT i=0;i<nArgCount;i++)\r\n\t\t{\r\n\t\t\tswitch (pArg->vt)\r\n\t\t\t{\r\n\t\t\tcase VT_BSTR:\r\n\t\t\t\tif(pArgInf[i].m_dtDataType !=(DTP_VARIANT |DT_IS_ARY))\r\n\t\t\t\t\tVariantClear(pArg);\r\n\t\t\t\tbreak;\r\n\t\t\tcase VT_BSTR|VT_BYREF:\r\n\t\t\t\tif(pArgInf[i].m_dtDataType==VAR_TEXT && pArg->pbstrVal)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(*pArgInf[i].m_ppText)\r\n\t\t\t\t\t\tE_MFree(*pArgInf[i].m_ppText);\r\n\t\t\t\t\t*pArgInf[i].m_ppText = Unicode2EASCII(*pArg->pbstrVal);\r\n\t\t\t\t}\r\n\t\t\t\tVariantClear(pArg);\r\n\t\t\t\tbreak;\r\n\t\t\tcase VT_ARRAY | VT_UI1:\r\n\t\t\t\tSafeArrayDestroy(pArg->parray);\r\n\t\t\t\tbreak;\r\n\t\t\t\t/*\r\n\t\t\tcase VT_ARRAY | VT_UI1| VT_BYREF:\r\n\t\t\t\tif(pArg->pparray)\r\n\t\t\t\t\tSafeArrayDestroy(*pArg->pparray);\r\n\t\t\t\tbreak;*/\r\n\t\t\t}\r\n\t\t\t--pArg;\r\n\t\t}\r\n\r\n\t}\r\n\tdelete[] dispparams.rgvarg;\r\n\r\n\treturn hRet;\r\n}\r\n\r\nextern \"C\" \r\n{\r\n\t/*\r\n\tƶ\r\n\t\r\n\t*/\r\n\tvoid _cdecl krnln_DispCopy (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp)\r\n\t\t\tpDest->pDisp->Release();\r\n\t\tPEYDISPATCH pSrc = (PEYDISPATCH)pArgInf[1].m_pCompoundData;\r\n\t\tpDest->pDisp = pSrc->pDisp;\r\n\t\tif(pDest->pDisp)\r\n\t\t\tpDest->pDisp->AddRef();\r\n\r\n\r\n\t}\r\n\r\n\t/*\r\n    øʽ ߼͡ 󣮴 ı ͣı Ϳļݣ - ϵͳֿ֧->\r\n    ӢƣCreateObject\r\n    ָ͵ COM 󣬱еԭݽͷšɹ棬򷵻ؼ١ΪԱ\r\n    <1>Ϊ͡ΪıͣtextָıƩ硰Word.ApplicationExcel.Application{000209FF-0000-0000-C000-000000000046}Ⱦɡ\r\n    <2>ΪͿļΪıͣtextԱʡԡҪͨͿָܷ󣬿ڱṩͿͿļעûṩļ·ڵǰĿ¼޷ҵļϵͳԶʡԱĬΪҪͿļ\r\n\r\n\t\r\n\t*/\r\n\tBOOL _cdecl krnln_DispCreateObject (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp)\r\n\t\t{\r\n\t\t\tpDest->pDisp->Release();\r\n\t\t\tpDest->pDisp = NULL;\r\n\t\t}\r\n\t\tLPOLESTR lpzCom = ASCII2Unicode(pArgInf[1].m_pText);\r\n\t\tif(lpzCom==NULL){\r\n\t\t\tpDest->hRet = 0;\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\tLPUNKNOWN lpUnknown = NULL;\r\n\t\tSCODE sc = S_OK;\r\n\t\tif(pArgInf[2].m_dtDataType != _SDT_NULL && pArgInf[2].m_pText)\r\n\t\t{\r\n\t\t\tLPOLESTR lpzFile = ASCII2Unicode(pArgInf[2].m_pText);\r\n\t\t\tITypeLib * ptlib;\r\n\t\t\tif(LoadTypeLib(lpzFile,&ptlib) == S_OK)\r\n\t\t\t{\r\n\t\t\t\tULONG lHash= LHashValOfNameSys(SYS_WIN32,GetUserDefaultLCID(),lpzCom);\r\n\t\t\t\tITypeInfo* pTinfo = NULL;\r\n\t\t\t\tMEMBERID rgMid;\r\n\t\t\t\tUSHORT cFd;\r\n\t\t\t\tif(ptlib->FindName(lpzCom,lHash,&pTinfo,&rgMid,&cFd)==S_OK){\r\n\t\t\t\t\tif(cFd == 1){\r\n\t\t\t\t\t\tif(pTinfo->CreateInstance(NULL,IID_IUnknown, (LPVOID*)&lpUnknown)==S_OK){\r\n\t\t\t\t\t\t\tif(strchr(pArgInf[2].m_pText,'\\\\')!=NULL){\r\n\t\t\t\t\t\t\t\tpDest->hRet = RegisterTypeLib(ptlib,lpzFile,NULL);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpTinfo->Release();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\tptlib->Release();\r\n\t\t\t}\r\n\r\n\t\t\tdelete [] lpzFile;\r\n\t\t\tif(lpUnknown){\r\n\t\t\t\tdelete [] lpzCom;\r\n\t\t\t\tgoto RunCom;\r\n\t\t\t}\r\n\t\t\t\r\n\r\n\t\t}\r\n\t\tCLSID clsid;\r\n\r\n\t\tpDest->hRet = CLSIDFromProgID(lpzCom,&clsid);\r\n\t\tif(FAILED(pDest->hRet))\r\n\t\t\tpDest->hRet = CLSIDFromString(lpzCom,&clsid);\r\n\t\tdelete [] lpzCom;\r\n\t\tif(FAILED(pDest->hRet))\r\n\t\t\treturn FALSE;\r\n\t\t// create an instance of the object\r\n\t\t\r\n\t\tsc = CoCreateInstance(clsid, NULL, CLSCTX_ALL | CLSCTX_REMOTE_SERVER,\r\n\t\t\tIID_IUnknown, (LPVOID*)&lpUnknown);\r\n\t\tif (sc == E_INVALIDARG)\r\n\t\t{\r\n\t\t\t// may not support CLSCTX_REMOTE_SERVER, so try without\r\n\t\t\tsc = CoCreateInstance(clsid, NULL, CLSCTX_ALL & ~CLSCTX_REMOTE_SERVER,\r\n\t\t\t\tIID_IUnknown, (LPVOID*)&lpUnknown);\r\n\t\t}\r\n\r\n\t\tif (FAILED(sc))\r\n\t\t\tgoto Failed;\r\n\r\nRunCom:\t\t\r\n\t\t// make sure it is running\r\n\t\tsc = OleRun(lpUnknown);\r\n\t\tif (FAILED(sc)){\r\n\t\t\tlpUnknown->Release();\r\n\t\t\tgoto Failed;\r\n\t\t}\r\n\t\t// query for IDispatch interface\r\n\t/*\tsc = lpUnknown->QueryInterface(IID_IDispatch,(void**)&pDest->pDisp);\r\n\t\tif (pDest->pDisp == NULL)\r\n\t\t\tgoto Failed;*/\r\n\t\tpDest->hRet = sc;\r\n\t\tpDest->pDisp = (IDispatch*)lpUnknown;\r\n\t\treturn TRUE;\r\n\t\t\r\nFailed:\r\n\r\n\t\tpDest->hRet = sc;\r\n\t\treturn FALSE;\r\n\r\n\t}\r\n\r\n\t/*\r\n    øʽ ߼͡ 󣮻ȡ ı ͣ - ϵͳֿ֧->\r\n    ӢƣGetObject\r\n    ȡǰϵͳѾڵָ COM 󣬱еԭݽͷšɹ棬򷵻ؼ١ΪԱ\r\n    <1>Ϊ͡ΪıͣtextָıƩ硰Word.ApplicationExcel.Application{000209FF-0000-0000-C000-000000000046}Ⱦɡ\r\n\t\r\n\t*/\r\n\tBOOL _cdecl krnln_DispGetObject (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp)\r\n\t\t{\r\n\t\t\tpDest->pDisp->Release();\r\n\t\t\tpDest->pDisp=NULL;\r\n\t\t}\r\n\t\tCLSID clsid;\r\n\t\tLPOLESTR lpzCom = ASCII2Unicode(pArgInf[1].m_pText);\r\n\t\tpDest->hRet = CLSIDFromProgID(lpzCom,&clsid);\r\n\t\tif(FAILED(pDest->hRet))\r\n\t\t\tpDest->hRet = CLSIDFromString(lpzCom,&clsid);\r\n\t\tdelete [] lpzCom;\r\n\t\tif(FAILED(pDest->hRet))\r\n\t\t\treturn FALSE;\r\n\r\n\t\tDWORD dwReserved;\r\n\t\tpDest->hRet = GetActiveObject(clsid,&dwReserved,(LPUNKNOWN*)&pDest->pDisp);\r\n\t\tif(FAILED(pDest->hRet))\r\n\t\t\treturn FALSE;\r\n\t\treturn TRUE;\r\n\r\n\t}\r\n\r\n\t/*\r\n    øʽ ޷ֵ   - ϵͳֿ֧->\r\n    ӢƣClear\r\n    ͷŲաñ˳ʱԶͷš磺ӳֲУӳ˳ʱöᱻԶͷšΪԱ\r\n\t\r\n\t*/\r\n\tvoid _cdecl krnln_DispClear (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)ArgInf.m_pCompoundData;\r\n\t\tif(pDest->pDisp)\r\n\t\t{\r\n\t\t\tpDest->pDisp->Release();\r\n\t\t\tpDest->pDisp = NULL;\r\n\t\t}\r\n\t\tpDest->hRet = NULL;\r\n\t\t\r\n\t}\r\n\r\n\t/*\r\n    øʽ ߼͡ ǷΪ  - ϵͳֿ֧->\r\n    ӢƣIsEmpty\r\n    Ϊգ棬򷵻ؼ١ΪԱ\t\r\n\t*/\r\n\tBOOL _cdecl krnln_DispIsEmpty (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)ArgInf.m_pCompoundData;\r\n\t\tif(pDest->pDisp)\r\n\t\t\treturn FALSE;\r\n\t\treturn TRUE;\r\n\t\t\r\n\t}\r\n\r\n\t/*\r\n    øʽ ߼͡ Ƿ  Ķ - ϵͳֿ֧->\r\n    ӢƣIsEqual\r\n    ָȣ棬򷵻ؼ١ΪԱ\r\n    <1>ΪĶ󡱣ΪComObjectָǷȵĶ\r\n\t\r\n\t*/\r\n\tBOOL _cdecl krnln_DispIsEqual (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tPEYDISPATCH pSrc = (PEYDISPATCH)pArgInf[1].m_pCompoundData;\r\n\r\n\t\tif(pDest->pDisp == pSrc->pDisp)\r\n\t\t\treturn TRUE;\r\n\t\treturn FALSE;\r\n\r\n\t}\r\n\r\n\t/*\r\n    øʽ ı͡ 󣮶ı ı ƣͨ ݣݣ...  - ϵͳֿ֧->\r\n    ӢƣGetTextProperty\r\n    ȡرָıֵʧܽؿıҽִСȡ󡱷طǿıΪԱһԱظӡ\r\n    <1>ΪơΪıͣtext\r\n    <2>ΪݡΪͨͣallԱʡԡչṩдҪݡдԲҪκβ뱣ֱΪա\r\n\t*/\r\n\tchar* _cdecl krnln_DispGetTextProperty (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t\tLPDISPATCH lpDispatch = NULL;\r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IDispatch,(void **)&lpDispatch);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn NULL;\r\n\t\tDISPID dwDispid;\r\n\t\tpDest->hRet = Dispatch_GetIDsOfNames(lpDispatch,pArgInf[1].m_pText,&dwDispid);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn NULL;\r\n\t\tINT nCount = nArgCount - 2;\r\n// \t\tif(pArgInf[nArgCount-1].m_dtDataType == _SDT_NULL)\r\n// \t\t\tnCount --;\r\n\t\tfor (int i = nArgCount - 1; i >= 2 && pArgInf[i].m_dtDataType == _SDT_NULL; i--)\r\n\t\t\tnCount --;\r\n\t\t\r\n\t\tVARIANT vaResult;\r\n\t\tmemset(&vaResult, 0, sizeof vaResult);\r\n\t\tpDest->hRet = Dispatch_InvokeHelper(lpDispatch,\r\n\t\t\tdwDispid,DISPATCH_PROPERTYGET,&vaResult,nCount,&pArgInf[2]);\r\n\r\n\t\tlpDispatch->Release();\r\n\r\n\t\tLPSTR pText = NULL;\r\n\t\tif(vaResult.vt != VT_BSTR)\r\n\t\t{\r\n\t\t\tVARIANTARG vargDest;\r\n\t\t\tmemcpy(&vargDest,&vaResult,sizeof(VARIANTARG));\r\n\t\t\tmemset(&vaResult,0,sizeof(VARIANTARG));\r\n\t\t\tHRESULT hr = VariantChangeType(&vaResult,&vargDest,0,VT_BSTR);\r\n\t\t\tif(!FAILED(hr))\r\n\t\t\t\tpText = Unicode2EASCII(vaResult.bstrVal);\r\n\t\t}\r\n\t\telse\r\n\t\t\tpText = Unicode2EASCII(vaResult.bstrVal);\r\n\t/*\telse{ȡصǶ͵\r\n\t\t\tVARIANTARG vargDest;\r\n\t\t\tmemcpy(&vargDest,&vaResult,sizeof(VARIANTARG));\r\n\t\t\tmemset(&vaResult,0,sizeof(VARIANTARG));\r\n\t\t\tpDest->hRet = VariantChangeType(&vaResult,&vargDest,0,VT_BSTR);\r\n\t\t\tVariantClear(&vargDest);\r\n\r\n\t\t\tif(pDest->hRet == S_OK){\r\n\t\t\t\tpText = Unicode2EASCII(vaResult.bstrVal);\r\n\r\n\t\t\tchar ErrorString [1024];\r\n  \t\t\twsprintf(ErrorString, \"%s %d\", pText,dwDispid);\r\n\t\t\tMessageBox(NULL,ErrorString,pArgInf[1].m_pText,MB_OK);\r\n\t\t\t}\r\n\t\t}*/\r\n\t\t\r\n\t\tVariantClear(&vaResult);\r\n\r\n\r\n\t\treturn pText;\r\n\t\t\r\n\t}\r\n\t/*\r\n    øʽ ˫С͡ 󣮶ֵ ı ƣͨ ݣݣ...  - ϵͳֿ֧->\r\n    ӢƣGetNumProperty\r\n    ȡرֵֵָʧֵܽ0ҽִСȡ󡱷طǿıΪԱһԱظӡ\r\n    <1>ΪơΪıͣtext\r\n    <2>ΪݡΪͨͣallԱʡԡչṩдҪݡдԲҪκβ뱣ֱΪա\r\n\t*/\r\n\tvoid _cdecl krnln_DispGetNumProperty (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn ;\r\n\t\t}\r\n\t\tLPDISPATCH lpDispatch = NULL;\r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IDispatch,(void **)&lpDispatch);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn ;\r\n\t\tDISPID dwDispid;\r\n\t\tpDest->hRet = Dispatch_GetIDsOfNames(lpDispatch,pArgInf[1].m_pText,&dwDispid);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn ;\r\n\t\tINT nCount = nArgCount - 2;\r\n// \t\tif(pArgInf[nArgCount-1].m_dtDataType == _SDT_NULL)\r\n// \t\t\tnCount --;\r\n\t\tfor (int i = nArgCount - 1; i >= 2 && pArgInf[i].m_dtDataType == _SDT_NULL; i--)\r\n\t\t\tnCount --;\r\n\r\n\t\tVARIANT vaResult;\r\n\t\tmemset(&vaResult, 0, sizeof vaResult);\r\n\t\tpDest->hRet = Dispatch_InvokeHelper(lpDispatch,\r\n\t\t\tdwDispid,DISPATCH_PROPERTYGET,&vaResult,nCount,&pArgInf[2]);\r\n\r\n\r\n\r\n\t\tlpDispatch->Release();\r\n\t\tMDATA_INF RetVal;\r\n\r\n\t\tswitch (vaResult.vt)\r\n\t\t{\r\n\t\tcase VT_UI1:\r\n\t\t\tRetVal.m_double = vaResult.bVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_I2:\r\n\t\t\tRetVal.m_double = vaResult.iVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_I4:\r\n\t\t\tRetVal.m_double = vaResult.lVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_R4:\r\n\t\t\tRetVal.m_double = vaResult.fltVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_R8:\r\n\t\t\tRetVal.m_double = vaResult.dblVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_DATE:\r\n\t\t\tRetVal.m_double = vaResult.date;\r\n\t\t\tbreak;\r\n\t\tcase VT_CY:\r\n\t\t\tVarR8FromCy(vaResult.cyVal,&RetVal.m_double);\r\n\t\t\tbreak;\r\n\t\tcase VT_I1:\r\n\t\t\tRetVal.m_double = vaResult.cVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_UI2:\r\n\t\t\tRetVal.m_double = vaResult.uiVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_UI4:\r\n\t\t\tRetVal.m_double = vaResult.ulVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_BOOL:\r\n\t\t\tVarR8FromBool(vaResult.boolVal,&RetVal.m_double);\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tRetVal.m_double = 0;\r\n\t\t\tbreak;\t\r\n\t\t}\r\n\t\t\r\n\t\tVariantClear(&vaResult);\r\n\r\n\t\t__asm\r\n\t\t{\r\n\t\t\tmov eax,RetVal.m_unit.m_dwFormID;\r\n\t\t\tmov edx,RetVal.m_unit.m_dwUnitID;\r\n\t\t}\r\n\t\t\r\n\t}\r\n\t/*\r\n    øʽ ߼͡ 󣮶߼ ı ƣͨ ݣݣ...  - ϵͳֿ֧->\r\n    ӢƣGetBoolProperty\r\n    ȡرָ߼ֵʧܽؼ٣ҽִСȡ󡱷طǿıΪԱһԱظӡ\r\n    <1>ΪơΪıͣtext\r\n    <2>ΪݡΪͨͣallԱʡԡչṩдҪݡдԲҪκβ뱣ֱΪա\r\n\t*/\r\n\tBOOL _cdecl krnln_DispGetBoolProperty (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t\tLPDISPATCH lpDispatch = NULL;\r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IDispatch,(void **)&lpDispatch);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn NULL;\r\n\t\tDISPID dwDispid;\r\n\t\tpDest->hRet = Dispatch_GetIDsOfNames(lpDispatch,pArgInf[1].m_pText,&dwDispid);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn NULL;\r\n\t\tINT nCount = nArgCount - 2;\r\n// \t\tif(pArgInf[nArgCount-1].m_dtDataType == _SDT_NULL)\r\n// \t\t\tnCount --;\r\n\t\tfor (int i = nArgCount - 1; i >= 2 && pArgInf[i].m_dtDataType == _SDT_NULL; i--)\r\n\t\t\tnCount --;\r\n\r\n\t\tVARIANT vaResult;\r\n\t\tmemset(&vaResult, 0, sizeof vaResult);\r\n\t\tpDest->hRet = Dispatch_InvokeHelper(lpDispatch,\r\n\t\t\tdwDispid,DISPATCH_PROPERTYGET,&vaResult,nCount,&pArgInf[2]);\r\n\t\tlpDispatch->Release();\r\n\t\tBOOL bRet = FALSE;\r\n\t\tif(vaResult.vt == VT_BOOL)\r\n\t\t\tbRet =(vaResult.boolVal != 0 ? 1:0);\r\n\t\t\r\n\t\tVariantClear(&vaResult);\r\n\r\n\t\treturn bRet;\r\n\t\t\r\n\t}\r\n\t/*\r\n    øʽ ʱ͡ 󣮶 ı ƣͨ ݣݣ...  - ϵͳֿ֧->\r\n    ӢƣGetDateProperty\r\n    ȡرָʱֵʧܽ10011գҽִСȡ󡱷طǿıΪԱһԱظӡ\r\n    <1>ΪơΪıͣtext\r\n    <2>ΪݡΪͨͣallԱʡԡչṩдҪݡдԲҪκβ뱣ֱΪա\r\n\t*/\r\n\tvoid _cdecl krnln_DispGetDateProperty (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn ;\r\n\t\t}\r\n\t\tLPDISPATCH lpDispatch = NULL;\r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IDispatch,(void **)&lpDispatch);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn ;\r\n\t\tDISPID dwDispid;\r\n\t\tpDest->hRet = Dispatch_GetIDsOfNames(lpDispatch,pArgInf[1].m_pText,&dwDispid);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn ;\r\n\t\tINT nCount = nArgCount - 2;\r\n// \t\tif(pArgInf[nArgCount-1].m_dtDataType == _SDT_NULL)\r\n// \t\t\tnCount --;\r\n\t\tfor (int i = nArgCount - 1; i >= 2 && pArgInf[i].m_dtDataType == _SDT_NULL; i--)\r\n\t\t\tnCount --;\r\n\r\n\t\tVARIANT vaResult;\r\n\t\tmemset(&vaResult, 0, sizeof vaResult);\r\n\t\tpDest->hRet = Dispatch_InvokeHelper(lpDispatch,\r\n\t\t\tdwDispid,DISPATCH_PROPERTYGET,&vaResult,nCount,&pArgInf[2]);\r\n\t\tlpDispatch->Release();\r\n\r\n\t\tMDATA_INF RetVal;\r\n\r\n\t\tif(vaResult.vt == VT_DATE)\r\n\t\t\tRetVal.m_date = vaResult.date;\r\n\t\telse\r\n\t\t\tRetVal.m_date = 0;\r\n\t\t\r\n\t\tVariantClear(&vaResult);\r\n\r\n\t\t__asm\r\n\t\t{\r\n\t\t\tmov eax,RetVal.m_unit.m_dwFormID;\r\n\t\t\tmov edx,RetVal.m_unit.m_dwUnitID;\r\n\t\t}\r\n\t\t\r\n\t}\r\n\t/*\r\n    øʽ  󣮶 ı ƣͨ ݣݣ...  - ϵͳֿ֧->\r\n    ӢƣGetObjectProperty\r\n    ȡرֵָʧܽΪյĶҽִСȡ󡱷طǿıΪԱһԱظӡ\r\n    <1>ΪơΪıͣtext\r\n    <2>ΪݡΪͨͣallԱʡԡչṩдҪݡдԲҪκβ뱣ֱΪա\r\n\t*/\r\n\tvoid* _cdecl krnln_DispGetObjectProperty (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pdispRet = (PEYDISPATCH)E_MAlloc(sizeof(EYDISPATCH));\r\n\t\t//memset(pdispRet,0,sizeof(EYDISPATCH));\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn pdispRet;\r\n\t\t}\r\n\t\tLPDISPATCH lpDispatch = NULL;\r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IDispatch,(void **)&lpDispatch);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn pdispRet;\r\n\t\tDISPID dwDispid;\r\n\t\tpDest->hRet = Dispatch_GetIDsOfNames(lpDispatch,pArgInf[1].m_pText,&dwDispid);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn pdispRet;\r\n\t\tINT nCount = nArgCount - 2;\r\n// \t\tif(pArgInf[nArgCount-1].m_dtDataType == _SDT_NULL)\r\n// \t\t\tnCount --;\r\n\t\tfor (int i = nArgCount - 1; i >= 2 && pArgInf[i].m_dtDataType == _SDT_NULL; i--)\r\n\t\t\tnCount --;\r\n\r\n\t\tVARIANT vaResult;\r\n\t\tmemset(&vaResult, 0, sizeof vaResult);\r\n\t\tpDest->hRet = Dispatch_InvokeHelper(lpDispatch,\r\n\t\t\tdwDispid,DISPATCH_PROPERTYGET,&vaResult,nCount,&pArgInf[2]);\r\n\t\tlpDispatch->Release();\r\n\t\t\r\n\r\n\t\tswitch (vaResult.vt)\r\n\t\t{\r\n\t\tcase VT_DISPATCH:\r\n\t\t\tpdispRet->pDisp = vaResult.pdispVal;\r\n\t\t\tif(pdispRet->pDisp)\r\n\t\t\t\tpdispRet->pDisp->AddRef();\r\n\t\t\tbreak;\r\n\t\tcase VT_UNKNOWN:\r\n\t\t\tpdispRet->pDisp = (LPDISPATCH)vaResult.punkVal;\r\n\t\t\tif(pdispRet->pDisp)\r\n\t\t\t\tpdispRet->pDisp->AddRef();\r\n\t\t\tbreak;\r\n\t\tcase VT_DISPATCH|VT_BYREF:\r\n\t\t\tpdispRet->pDisp = *vaResult.ppdispVal;\r\n\t\t\tif(pdispRet->pDisp)\r\n\t\t\t\tpdispRet->pDisp->AddRef();\r\n\t\t\tbreak;\r\n\t\tcase VT_UNKNOWN|VT_BYREF:\r\n\t\t\tpdispRet->pDisp = *(LPDISPATCH*)vaResult.ppunkVal;\r\n\t\t\tif(pdispRet->pDisp)\r\n\t\t\t\tpdispRet->pDisp->AddRef();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tVariantClear(&vaResult);\r\n\r\n\t\treturn pdispRet;\r\n\t\t\r\n\t}\r\n\r\n\t/*\r\n    øʽ ͡ 󣮶 ı ƣͨ ݣݣ...  - ϵͳֿ֧->\r\n    ӢƣGetProperty\r\n    ȡرֵָȡ͵ԡʧֵܽΪյıͶҽִСȡ󡱷طǿı򽫷ذӦݵıͶ󡣱ΪԱһԱظӡ\r\n    <1>ΪơΪıͣtext\r\n    <2>ΪݡΪͨͣallԱʡԡչṩдҪݡдԲҪκβ뱣ֱΪա\r\n\t*/\r\n\tvoid* _cdecl krnln_DispGetProperty (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tVARIANT* pVarRet = (VARIANT*)E_MAlloc(sizeof(VARIANT));\r\n\t\t//memset(pVarRet,0,sizeof(VARIANT));\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn pVarRet;\r\n\t\t}\r\n\t\tLPDISPATCH lpDispatch = NULL;\r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IDispatch,(void **)&lpDispatch);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn pVarRet;\r\n\t\tDISPID dwDispid;\r\n\t\tpDest->hRet = Dispatch_GetIDsOfNames(lpDispatch,pArgInf[1].m_pText,&dwDispid);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn pVarRet;\r\n\t\tINT nCount = nArgCount - 2;\r\n// \t\tif(pArgInf[nArgCount-1].m_dtDataType == _SDT_NULL)\r\n// \t\t\tnCount --;\r\n\t\tfor (int i = nArgCount - 1; i >= 2 && pArgInf[i].m_dtDataType == _SDT_NULL; i--)\r\n\t\t\tnCount --;\r\n\t\t/*char tt[2];\r\n\t\titoa(nCount,tt,10);\r\n\t\tMessageBox(NULL,tt,\"count\",MB_OK);*/\r\n\r\n\t\tpDest->hRet = Dispatch_InvokeHelper(lpDispatch,\r\n\t\t\tdwDispid,DISPATCH_PROPERTYGET,pVarRet,nCount,&pArgInf[2]);\r\n\t\tlpDispatch->Release();\r\n\t\t\r\n\t\treturn pVarRet;\r\n\t\t\r\n\t}\r\n\r\n\t/*\r\n    øʽ ߼͡ д ı ƣͨ ݣݣ...  - ϵͳֿ֧->\r\n    ӢƣSetProperty\r\n    ñָԵֵʧܣؼ٣ҽִСȡ󡱷طǿıΪԱһԱظӡ\r\n    <1>ΪơΪıͣtext\r\n    <2>ΪݡΪͨͣallԱʡԡչṩдҪݡдԲҪκβ뱣ֱΪա\r\n\t*/\r\n\tBOOL _cdecl krnln_DispSetProperty (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t\tLPDISPATCH lpDispatch = NULL;\r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IDispatch,(void **)&lpDispatch);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn NULL;\r\n\t\tDISPID dwDispid;\r\n\t\tpDest->hRet = Dispatch_GetIDsOfNames(lpDispatch,pArgInf[1].m_pText,&dwDispid);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn NULL;\r\n\r\n\t\tINT nCount = nArgCount - 2;\r\n// \t\tif(pArgInf[nArgCount-1].m_dtDataType == _SDT_NULL)\r\n// \t\t\tnCount --;\r\n\t\tfor (int i = nArgCount - 1; i >= 2 && pArgInf[i].m_dtDataType == _SDT_NULL; i--)\r\n\t\t\tnCount --;\r\n\r\n\t\tDWORD dwFlags = DISPATCH_PROPERTYPUT;\r\n/*\t\tif(nCount>0 && (pArgInf[2].m_dtDataType & ~DT_IS_ARY) == DTP_COM_OBJECT)\r\n\t\t\tdwFlags = DISPATCH_PROPERTYPUTREF;\r\n\t\telse\r\n\t\t\tdwFlags = DISPATCH_PROPERTYPUT;*/\r\n\r\n\t\tpDest->hRet = Dispatch_InvokeHelper(lpDispatch,\r\n\t\t\tdwDispid,(WORD)dwFlags,NULL,nCount,&pArgInf[2]);\r\n\t\tlpDispatch->Release();\r\n\t\tBOOL bRet;\r\n\t\tif(pDest->hRet == S_OK)\r\n\t\t\tbRet = TRUE;\r\n\t\telse\r\n\t\t\tbRet = FALSE;\r\n\t\treturn bRet;\r\n\t\t\r\n\t}\r\n\t/*\r\n    øʽ ޷ֵ 󣮷 ı ƣͨ ݣݣ...  - ϵͳֿ֧->\r\n    ӢƣRunMethod\r\n    ִбָ䷵ֵʧܣִСȡ󡱷طǿıΪԱһԱظӡ\r\n    <1>ΪơΪıͣtextṩ÷ơ\r\n    <2>ΪݡΪͨͣallԱʡԡչṩ÷Ҫݡ÷Ҫκβ뱣ֱΪա\r\n\t*/\r\n\tvoid _cdecl krnln_DispRunMethod (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn ;\r\n\t\t}\r\n\t\tLPDISPATCH lpDispatch = NULL;\r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IDispatch,(void **)&lpDispatch);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn ;\r\n\t\tDISPID dwDispid;\r\n\t\tpDest->hRet = Dispatch_GetIDsOfNames(lpDispatch,pArgInf[1].m_pText,&dwDispid);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn ;\r\n\t\tINT nCount = nArgCount - 2;\r\n// \t\tif(pArgInf[nArgCount-1].m_dtDataType == _SDT_NULL)\r\n// \t\t\tnCount --;\r\n\t\tfor (int i = nArgCount - 1; i >= 2 && pArgInf[i].m_dtDataType == _SDT_NULL; i--)\r\n\t\t\tnCount --;\r\n\r\n\t\tVARIANT vaResult;\r\n\t\tmemset(&vaResult, 0, sizeof vaResult);\r\n\t\tpDest->hRet = Dispatch_InvokeHelper(lpDispatch,\r\n\t\t\tdwDispid,DISPATCH_METHOD,&vaResult,nCount,&pArgInf[2]);\r\n\t\tlpDispatch->Release();\r\n\t\tif(vaResult.vt != VT_EMPTY)\r\n\t\t\tVariantClear(&vaResult);\r\n\t\t\r\n\t}\r\n\r\n\t/*\r\n    øʽ ͡ ͨ÷ ı ƣͨ ݣݣ...  - ϵͳֿ֧->\r\n    ӢƣRunVariantMethod\r\n    ִбָһͶֵöڼ¼÷ķݡִзκݵķ÷ûзݣرͶֵΪաʧܣһֵΪյıͶҽִСȡ󡱷طǿıΪԱһԱظӡ\r\n    <1>ΪơΪıͣtextṩ÷ơ\r\n    <2>ΪݡΪͨͣallԱʡԡչṩ÷Ҫݡ÷Ҫκβ뱣ֱΪա\r\n\t*/\r\n\tvoid* _cdecl krnln_DispRunVariantMethod (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tVARIANT* pVarRet = (VARIANT*)E_MAlloc(sizeof(VARIANT));\r\n\t\t//memset(pVarRet,0,sizeof(VARIANT));\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn pVarRet;\r\n\t\t}\r\n\t\tLPDISPATCH lpDispatch = NULL;\r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IDispatch,(void **)&lpDispatch);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn pVarRet;\r\n\t\tDISPID dwDispid;\r\n\t\tpDest->hRet = Dispatch_GetIDsOfNames(lpDispatch,pArgInf[1].m_pText,&dwDispid);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn pVarRet;\r\n\t\tINT nCount = nArgCount - 2;\r\n// \t\tif(pArgInf[nArgCount-1].m_dtDataType == _SDT_NULL)\r\n// \t\t\tnCount --;\r\n\t\tfor (int i = nArgCount - 1; i >= 2 && pArgInf[i].m_dtDataType == _SDT_NULL; i--)\r\n\t\t\tnCount --;\r\n\r\n\t\tpDest->hRet = Dispatch_InvokeHelper(lpDispatch,\r\n\t\t\tdwDispid,DISPATCH_METHOD,pVarRet,nCount,&pArgInf[2]);\r\n\t\tlpDispatch->Release();\r\n\t\t\r\n\t\treturn pVarRet;\r\n\t\t\r\n\t}\r\n\r\n\t/*\r\n    øʽ ı͡ ı ı ƣͨ ݣݣ...  - ϵͳֿ֧->\r\n    ӢƣRunTextMethod\r\n    ִб󷵻ıݵķʧܽؿıҽִСȡ󡱷طǿıΪԱһԱظӡ\r\n    <1>ΪơΪıͣtextṩ÷ơ\r\n    <2>ΪݡΪͨͣallԱʡԡչṩ÷Ҫݡ÷Ҫκβ뱣ֱΪա\r\n\t*/\r\n\tchar* _cdecl krnln_DispRunTextMethod (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t\tLPDISPATCH lpDispatch = NULL;\r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IDispatch,(void **)&lpDispatch);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn NULL;\r\n\t\tDISPID dwDispid;\r\n\t\tpDest->hRet = Dispatch_GetIDsOfNames(lpDispatch,pArgInf[1].m_pText,&dwDispid);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn NULL;\r\n\t\tINT nCount = nArgCount - 2;\r\n// \t\tif(pArgInf[nArgCount-1].m_dtDataType == _SDT_NULL)\r\n// \t\t\tnCount --;\r\n\t\tfor (int i = nArgCount - 1; i >= 2 && pArgInf[i].m_dtDataType == _SDT_NULL; i--)\r\n\t\t\tnCount --;\r\n\r\n\t\tVARIANT vaResult;\r\n\t\tmemset(&vaResult, 0, sizeof vaResult);\r\n\t\tpDest->hRet = Dispatch_InvokeHelper(lpDispatch,\r\n\t\t\tdwDispid,DISPATCH_METHOD,&vaResult,nCount,&pArgInf[2]);\r\n\t\tlpDispatch->Release();\r\n\r\n\t\tLPSTR pText = NULL;\r\n\t\tif(vaResult.vt != VT_BSTR)\r\n\t\t{\r\n\t\t\tVARIANTARG vargDest;\r\n\t\t\tmemcpy(&vargDest,&vaResult,sizeof(VARIANTARG));\r\n\t\t\tmemset(&vaResult,0,sizeof(VARIANTARG));\r\n\t\t\tHRESULT hr = VariantChangeType(&vaResult,&vargDest,0,VT_BSTR);\r\n \t\t\tif(!FAILED(hr))\r\n \t\t\t\tpText = Unicode2EASCII(vaResult.bstrVal);\r\n\t\t}\r\n\t\telse\r\n\t\t\tpText = Unicode2EASCII(vaResult.bstrVal);\r\n\r\n\t\tVariantClear(&vaResult);\r\n\r\n\t\treturn pText;\r\n\t}\r\n\r\n\t/*\r\n    øʽ ˫С͡ ֵ ı ƣͨ ݣݣ...  - ϵͳֿ֧->\r\n    ӢƣRunNumMethod\r\n    ִб󷵻ֵݵķʧֵܽ0ҽִСȡ󡱷طǿıΪԱһԱظӡ\r\n    <1>ΪơΪıͣtextṩ÷ơ\r\n    <2>ΪݡΪͨͣallԱʡԡչṩ÷Ҫݡ÷Ҫκβ뱣ֱΪա\r\n\t*/\r\n\tvoid _cdecl krnln_DispRunNumMethod (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn ;\r\n\t\t}\r\n\r\n\t\tLPDISPATCH lpDispatch = NULL;\r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IDispatch,(void **)&lpDispatch);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn ;\r\n\t\tDISPID dwDispid;\r\n\t\tpDest->hRet = Dispatch_GetIDsOfNames(lpDispatch,pArgInf[1].m_pText,&dwDispid);\r\n\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn ;\r\n\t\tINT nCount = nArgCount - 2;\r\n// \t\tif(pArgInf[nArgCount-1].m_dtDataType == _SDT_NULL)\r\n// \t\t\tnCount --;\r\n\t\tfor (int i = nArgCount - 1; i >= 2 && pArgInf[i].m_dtDataType == _SDT_NULL; i--)\r\n\t\t\tnCount --;\r\n\r\n\t\tVARIANT vaResult;\r\n\t\tmemset(&vaResult, 0, sizeof vaResult);\r\n\t\tpDest->hRet = Dispatch_InvokeHelper(lpDispatch,\r\n\t\t\tdwDispid,DISPATCH_METHOD,&vaResult,nCount,&pArgInf[2]);\r\n\t\tlpDispatch->Release();\r\n\t\tMDATA_INF RetVal;\r\n\t\t\r\n\t\tswitch (vaResult.vt)\r\n\t\t{\r\n\t\tcase VT_UI1:\r\n\t\t\tRetVal.m_double = vaResult.bVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_I2:\r\n\t\t\tRetVal.m_double = vaResult.iVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_I4:\r\n\t\t\tRetVal.m_double = vaResult.lVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_R4:\r\n\t\t\tRetVal.m_double = vaResult.fltVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_R8:\r\n\t\t\tRetVal.m_double = vaResult.dblVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_DATE:\r\n\t\t\tRetVal.m_double = vaResult.date;\r\n\t\t\tbreak;\r\n\t\tcase VT_CY:\r\n\t\t\tVarR8FromCy(vaResult.cyVal,&RetVal.m_double);\r\n\t\t\tbreak;\r\n\t\tcase VT_I1:\r\n\t\t\tRetVal.m_double = vaResult.cVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_UI2:\r\n\t\t\tRetVal.m_double = vaResult.uiVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_UI4:\r\n\t\t\tRetVal.m_double = vaResult.ulVal;\r\n\t\t\tbreak;\r\n\t\tcase VT_BOOL:\r\n\t\t\tVarR8FromBool(vaResult.boolVal,&RetVal.m_double);\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tRetVal.m_double = 0;\r\n\t\t\tbreak;\t\r\n\t\t}\r\n\t\t\r\n\t\tVariantClear(&vaResult);\r\n\r\n\t\t__asm\r\n\t\t{\r\n\t\t\tmov eax,RetVal.m_unit.m_dwFormID;\r\n\t\t\tmov edx,RetVal.m_unit.m_dwUnitID;\r\n\t\t}\r\n\t\t\r\n\t}\r\n\t/*\r\n    øʽ ߼͡ ߼ ı ƣͨ ݣݣ...  - ϵͳֿ֧->\r\n    ӢƣRunBoolMethod\r\n    ִб󷵻߼ݵķʧܽؼ٣ҽִСȡ󡱷طǿıΪԱһԱظӡ\r\n    <1>ΪơΪıͣtextṩ÷ơ\r\n    <2>ΪݡΪͨͣallԱʡԡչṩ÷Ҫݡ÷Ҫκβ뱣ֱΪա\r\n\t*/\r\n\tBOOL _cdecl krnln_DispRunBoolMethod (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t\tLPDISPATCH lpDispatch = NULL;\r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IDispatch,(void **)&lpDispatch);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn NULL;\r\n\t\tDISPID dwDispid;\r\n\t\tpDest->hRet = Dispatch_GetIDsOfNames(lpDispatch,pArgInf[1].m_pText,&dwDispid);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn NULL;\r\n\t\tINT nCount = nArgCount - 2;\r\n// \t\tif(pArgInf[nArgCount-1].m_dtDataType == _SDT_NULL)\r\n// \t\t\tnCount --;\r\n\t\tfor (int i = nArgCount - 1; i >= 2 && pArgInf[i].m_dtDataType == _SDT_NULL; i--)\r\n\t\t\tnCount --;\r\n\r\n\t\tVARIANT vaResult;\r\n\t\tmemset(&vaResult, 0, sizeof vaResult);\r\n\t\tpDest->hRet = Dispatch_InvokeHelper(lpDispatch,\r\n\t\t\tdwDispid,DISPATCH_METHOD,&vaResult,nCount,&pArgInf[2]);\r\n\t\tlpDispatch->Release();\r\n\t\tBOOL bRet = FALSE;\r\n\t\tif(vaResult.vt == VT_BOOL)\r\n\t\t\tbRet =(vaResult.boolVal != 0 ? 1:0);\r\n\t\t\r\n\t\tVariantClear(&vaResult);\r\n\r\n\t\treturn bRet;\r\n\t\t\r\n\t}\r\n\t/*\r\n    øʽ ʱ͡ ڷ ı ƣͨ ݣݣ...  - ϵͳֿ֧->\r\n    ӢƣRunDateMethod\r\n    ִб󷵻ʱݵķʧܽ10011գҽִСȡ󡱷طǿıΪԱһԱظӡ\r\n    <1>ΪơΪıͣtextṩ÷ơ\r\n    <2>ΪݡΪͨͣallԱʡԡչṩ÷Ҫݡ÷Ҫκβ뱣ֱΪա\r\n\t*/\r\n\tvoid _cdecl krnln_DispRunDateMethod (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn ;\r\n\t\t}\r\n\t\tLPDISPATCH lpDispatch = NULL;\r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IDispatch,(void **)&lpDispatch);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn ;\r\n\t\tDISPID dwDispid;\r\n\t\tpDest->hRet = Dispatch_GetIDsOfNames(lpDispatch,pArgInf[1].m_pText,&dwDispid);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn ;\r\n\t\tINT nCount = nArgCount - 2;\r\n// \t\tif(pArgInf[nArgCount-1].m_dtDataType == _SDT_NULL)\r\n// \t\t\tnCount --;\r\n\t\tfor (int i = nArgCount - 1; i >= 2 && pArgInf[i].m_dtDataType == _SDT_NULL; i--)\r\n\t\t\tnCount --;\r\n\r\n\t\tVARIANT vaResult;\r\n\t\tmemset(&vaResult, 0, sizeof vaResult);\r\n\t\tpDest->hRet = Dispatch_InvokeHelper(lpDispatch,\r\n\t\t\tdwDispid,DISPATCH_METHOD,&vaResult,nCount,&pArgInf[2]);\r\n\t\tlpDispatch->Release();\r\n\r\n\t\tMDATA_INF RetVal;\r\n\r\n\t\tif(vaResult.vt == VT_DATE)\r\n\t\t\tRetVal.m_date = vaResult.date;\r\n\t\telse\r\n\t\t\tRetVal.m_date = 0;\r\n\t\t\r\n\t\tVariantClear(&vaResult);\r\n\r\n\t\t__asm\r\n\t\t{\r\n\t\t\tmov eax,RetVal.m_unit.m_dwFormID;\r\n\t\t\tmov edx,RetVal.m_unit.m_dwUnitID;\r\n\t\t}\r\n\t\t\r\n\t}\r\n\t/*\r\n    øʽ  󣮶ͷ ı ƣͨ ݣݣ...  - ϵͳֿ֧->\r\n    ӢƣRunObjectMethod\r\n    ִб󷵻ضݵķʧܽΪյĶҽִСȡ󡱷طǿıΪԱһԱظӡ\r\n    <1>ΪơΪıͣtextṩ÷ơ\r\n    <2>ΪݡΪͨͣallԱʡԡչṩ÷Ҫݡ÷Ҫκβ뱣ֱΪա\r\n\t*/\r\n\tvoid* _cdecl krnln_DispRunObjectMethod (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pdispRet = (PEYDISPATCH)E_MAlloc(sizeof(EYDISPATCH));\r\n\t\t//memset(pdispRet,0,sizeof(EYDISPATCH));\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn pdispRet;\r\n\t\t}\r\n\t\tLPDISPATCH lpDispatch = NULL;\r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IDispatch,(void **)&lpDispatch);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn pdispRet;\r\n\t\tDISPID dwDispid;\r\n\t\tpDest->hRet = Dispatch_GetIDsOfNames(lpDispatch,pArgInf[1].m_pText,&dwDispid);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn pdispRet;\r\n\t\tINT nCount = nArgCount - 2;\r\n// \t\tif(pArgInf[nArgCount-1].m_dtDataType == _SDT_NULL)\r\n// \t\t\tnCount --;\r\n\t\tfor (int i = nArgCount - 1; i >= 2 && pArgInf[i].m_dtDataType == _SDT_NULL; i--)\r\n\t\t\tnCount --;\r\n\r\n\t\tVARIANT vaResult;\r\n\t\tmemset(&vaResult, 0, sizeof vaResult);\r\n\t\tpDest->hRet = Dispatch_InvokeHelper(lpDispatch,\r\n\t\t\tdwDispid,DISPATCH_METHOD,&vaResult,nCount,&pArgInf[2]);\r\n\t\tlpDispatch->Release();\r\n\t\t\r\n\t\tswitch (vaResult.vt)\r\n\t\t{\r\n\t\tcase VT_DISPATCH:\r\n\t\t\tpdispRet->pDisp = vaResult.pdispVal;\r\n\t\t\tif(pdispRet->pDisp)\r\n\t\t\t\tpdispRet->pDisp->AddRef();\r\n\t\t\tbreak;\r\n\t\tcase VT_UNKNOWN:\r\n\t\t\tpdispRet->pDisp = (LPDISPATCH)vaResult.punkVal;\r\n\t\t\tif(pdispRet->pDisp)\r\n\t\t\t\tpdispRet->pDisp->AddRef();\r\n\t\t\tbreak;\r\n\t\tcase VT_DISPATCH|VT_BYREF:\r\n\t\t\tpdispRet->pDisp = *vaResult.ppdispVal;\r\n\t\t\tif(pdispRet->pDisp)\r\n\t\t\t\tpdispRet->pDisp->AddRef();\r\n\t\t\tbreak;\r\n\t\tcase VT_UNKNOWN|VT_BYREF:\r\n\t\t\tpdispRet->pDisp = *(LPDISPATCH*)vaResult.ppunkVal;\r\n\t\t\tif(pdispRet->pDisp)\r\n\t\t\t\tpdispRet->pDisp->AddRef();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tVariantClear(&vaResult);\r\n\r\n\t\treturn pdispRet;\r\n\t\t\r\n\t}\r\n\r\n\t/*\r\n     øʽ ߼͡ 󣮴ͼƬ ֽڼ ͼƬݣ - ϵͳֿ֧->\r\n    ӢƣCreatePicDispObj\r\n    ΪָͼƬݴӦ COM ͼƬ󣬱еԭݽͷšɹ棬򷵻ؼ١ΪԱ\r\n    <1>ΪͼƬݡΪֽڼbinṩͼƬͼƬݡ\r\n\t*/\r\n\tBOOL _cdecl krnln_DispCreatePicDispObj (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp)\r\n\t\t{\r\n\t\t\tpDest->pDisp->Release();\r\n\t\t\tpDest->pDisp=NULL;\r\n\t\t}\r\n\t\tif(pArgInf[1].m_pBin==NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\tINT nLength=*(LPINT)(pArgInf[1].m_pBin + sizeof (INT));\r\n\t\tif(nLength <= 0)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\tBYTE* pbuf=pArgInf[1].m_pBin + sizeof (INT) * 2;\r\n\t\tLPVOID pvData = NULL;\r\n\t\t//ڴ棬׼ͼƬļ\r\n\t\t//GlobalAllocӶѷָֽڵڴ\r\n\t\tHGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, nLength);\r\n\t\t//GlobalLockסһȫֵڴͬʱһָֽڵָ \r\n\t\tpvData = GlobalLock(hGlobal);\r\n\t\tmemcpy(pvData,pbuf,nLength);\r\n\t\tGlobalUnlock(hGlobal);\r\n\r\n\t\t//ˣѾļݶڴ浱\r\n\t\tLPSTREAM pstm = NULL;\r\n\t\t//ȫڴ洴IStreamӿָ\r\n\t\tpDest->hRet = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm);\r\n\t\tif(FAILED(pDest->hRet))\r\n\t\t{\r\n\t\t\tGlobalFree(hGlobal); \r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\r\n\t\t//ͼƬļIPictureӿָ\r\n\t\tpDest->hRet = ::OleLoadPicture(pstm, nLength, FALSE, IID_IPicture, (LPVOID *)&pDest->pDisp);\r\n\t\tpstm->Release();\r\n\t\tGlobalFree(hGlobal); \r\n\r\n\t\tif(FAILED(pDest->hRet))\r\n\t\t\treturn FALSE;\r\n\t\treturn TRUE;\r\n\t\t\r\n\t}\r\n\t/*\r\n    øʽ ֽڼ ȡͼƬ  - ϵͳֿ֧->\r\n    ӢƣGetPic\r\n    Ϊ COM ͼƬȡͼƬݡɹͼƬֽڼʧܷؿֽڼΪԱ\r\n\t*/\r\n\tvoid* _cdecl krnln_DispGetPic (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t\tIPicture*   pPicture=NULL;   \r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IPicture,(void **)&pPicture);\r\n\t\tif(pDest->hRet != S_OK)\r\n\t\t\treturn NULL;\r\n\t\tLPSTREAM   pStream;   \r\n\t\tCreateStreamOnHGlobal(NULL,TRUE,&pStream);   \r\n\t\tLONG   size;   \r\n\t\tpDest->hRet = pPicture->SaveAsFile(pStream,TRUE,&size);\r\n\t\tif(pDest->hRet != S_OK || size==0)\r\n\t\t{\r\n\t\t\tpPicture->Release ();\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t\tLARGE_INTEGER   li;   \r\n\t\tli.HighPart   =0;   \r\n\t\tli.LowPart   =0;   \r\n\t\tULARGE_INTEGER   ulnewpos;   \r\n\t\tpStream->Seek(   li,STREAM_SEEK_SET,&ulnewpos);  \r\n\t\t\r\n\t\tLPBYTE pd = (LPBYTE)E_MAlloc ((DWORD)(sizeof (INT) * 2 + size));\r\n\t\t*(LPINT)pd = 1;\r\n\t\t*(LPINT)(pd + sizeof (INT)) =\tsize;\r\n\t\tULONG   uReadCount   =   1;   \r\n\t\tpDest->hRet =pStream->Read(pd + sizeof (INT) * 2,size,&uReadCount); \r\n\t\tpStream->Release();   \r\n\t\tpPicture->Release ();\r\n\t\treturn pd;\r\n\t}\r\n\t/*\r\n    øʽ ı͡ ȡ  - ϵͳֿ֧->\r\n    ӢƣGetErrorText\r\n    дԡִж󷽷ȡʱִбԼǷִгɹɹؿıʧܣһϢķǿıΪԱ\t\r\n\t*/\r\n\tchar* _cdecl krnln_DispGetErrorText (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)ArgInf.m_pCompoundData;\r\n\t\tif(pDest->hRet == NULL)\r\n\t\t\treturn NULL;\r\n\t\tchar strErr[MAX_PATH];\r\n\t\tLPSTR pText = NULL;\r\n\t\tDWORD dwLen = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,NULL,pDest->hRet,NULL,strErr,MAX_PATH,NULL);\r\n\t\tif(dwLen)\r\n\t\t\tpText = CloneTextData(strErr,mystrlen(strErr));\r\n\t\treturn pText;\r\n\t\t\r\n\t}\r\n\t/*\r\n    øʽ ߼͡ ȡӿ ͨ 򴰿ı ӿڱ־ݣ - ϵͳֿ֧->\r\n    ӢƣQueryInterface\r\n    ȡָOCXеָӿڣеԭݽͷšɹ棬ʧܷؼ١ΪԱ\r\n    <1>Ϊ򴰿ΪͨͣallṩȡӿڶĶݣΪ֮һ1COMװװĶͣ 2ֿ֧еġ() 3COMװװOCX͡\r\n    <2>Ϊӿڱ־ΪıͣtextԱʡԡڱָȡӿڵľƻȫΨһ־(GUID)硰IDataSourceControl{B62EE548-2B65-43BE-9F39-E2B71742578A}ȡʡԣĬȡĻӿڡ\t\r\n\t*/\r\n\tBOOL _cdecl krnln_DispQueryInterface (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp)\r\n\t\t{\r\n\t\t\tpDest->pDisp->Release();\r\n\t\t\tpDest->pDisp=NULL;\r\n\t\t}\r\n\t\tif(pArgInf[1].m_dtDataType != DTP_COM_OBJECT)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\tPEYDISPATCH pSrc = (PEYDISPATCH)pArgInf[1].m_pCompoundData;\r\n\t\tif(pSrc->pDisp==NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\r\n\t\tCLSID clsid;\r\n\t\tif(pArgInf[2].m_dtDataType != _SDT_NULL)\r\n\t\t{\r\n\t\t\tLPOLESTR lpzCom = ASCII2Unicode(pArgInf[2].m_pText);\r\n\t\t\tpDest->hRet = CLSIDFromProgID(lpzCom,&clsid);\r\n\t\t\tif(FAILED(pDest->hRet))\r\n\t\t\t\tpDest->hRet = CLSIDFromString(lpzCom,&clsid);\r\n\t\t\tdelete [] lpzCom;\r\n\t\t\tif(FAILED(pDest->hRet))\r\n\t\t\t\treturn FALSE;\r\n\t\t}\r\n\t\telse\r\n\t\t\tclsid = IID_IDispatch;\r\n\r\n\t\tpDest->hRet = pSrc->pDisp->QueryInterface(clsid,(void**)&pDest->pDisp);\r\n\t\tif(FAILED(pDest->hRet))\r\n\t\t\treturn FALSE;\r\n\t\treturn TRUE;\r\n\r\n\t}\r\n\t/*\r\n    øʽ ߼͡ 󣮴  ݣ - ϵͳֿ֧->\r\n    ӢƣCreateFontDispObj\r\n    ΪָݴӦ COM 󣬱еԭݽͷšɹ棬򷵻ؼ١ΪԱ\r\n    <1>ΪݡΪ壨fontṩݡ\r\n\t*/\r\n\tBOOL _cdecl krnln_DispCreateFontDispObj (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp)\r\n\t\t{\r\n\t\t\tpDest->pDisp->Release();\r\n\t\t\tpDest->pDisp=NULL;\r\n\t\t}\r\n\t\tif(pArgInf[1].m_pBin==NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\tFONTDESC fd;\r\n\t\tfd.cbSizeofstruct = sizeof(FONTDESC);\r\n\t\tfd.lpstrName = ASCII2Unicode((LPSTR)pArgInf[1].m_pInt[6]);\r\n\t\tfd.sWeight = (short)pArgInf[1].m_pInt[1]?700:400;\r\n\t\tfd.sCharset = DEFAULT_CHARSET;\r\n\t\tfd.fItalic = pArgInf[1].m_pInt[2];\r\n\t\tfd.fUnderline = pArgInf[1].m_pInt[4];\r\n\t\tfd.fStrikethrough = pArgInf[1].m_pInt[3];\r\n\r\n\t\tfd.cySize.Lo = pArgInf[1].m_pInt[5]*10000;  \r\n\t\tfd.cySize.Hi = 0;\r\n\t\t\r\n\t\tpDest->hRet = OleCreateFontIndirect(&fd, IID_IFontDisp, (void**) &pDest->pDisp);\r\n\t\tdelete [] fd.lpstrName;\r\n\t\tif(FAILED(pDest->hRet))\r\n\t\t\treturn FALSE;\r\n\t\treturn TRUE;\r\n\t}\r\n\t/*\r\n    øʽ 塵 ȡ  - ϵͳֿ֧->\r\n    ӢƣGetFont\r\n    Ϊ COM ȡݡʧܣִСȡ󡱷طǿıΪԱ\r\n\t*/\r\n\tvoid* _cdecl krnln_DispGetFont (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tLPINT pFont = (LPINT)E_MAlloc ((DWORD)(sizeof (INT) * 7));\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf[0].m_pCompoundData;\r\n\t\tif(pDest->pDisp == NULL)\r\n\t\t{\r\n\t\t\tpDest->hRet = E_POINTER;\r\n\t\t\treturn pFont;\r\n\t\t}\r\n\t\tIFont*pDisp = NULL;\r\n\t\tpDest->hRet = pDest->pDisp->QueryInterface(IID_IFont, (void**) &pDisp);\r\n\t\tif(FAILED(pDest->hRet))\r\n\t\t\treturn pFont;\r\n\t\tpDisp->get_Bold(&pFont[1]);\r\n\t\tpDisp->get_Italic(&pFont[2]);\r\n\t\tpDisp->get_Strikethrough(&pFont[3]);\r\n\t\tpDisp->get_Underline(&pFont[4]);\r\n\r\n\t\tCY cySize;\r\n\t\tpDisp->get_Size(&cySize);\r\n\t\tpFont[5]=cySize.Lo/10000;\r\n\t\tBSTR strName=NULL;\r\n\t\tpDisp->get_Name(&strName);\r\n\t\tpDisp->Release();\r\n\t\tif(strName)\r\n\t\t{\r\n\t\t\tpFont[6]=(INT)Unicode2EASCII(strName);\r\n\t\t\tSysFreeString(strName);\r\n\t\t}\r\n\t\t\r\n\r\n\t\treturn pFont;\r\n\t}\r\n}\r\n/*\r\nHRESULT hr = S_OK; \r\nFUNCDESC* pFuncDesc = NULL; \r\nTYPEATTR* pAttr; \r\nhr = pTypeInfo->GetTypeAttr(&pAttr); \r\nif (FAILED(hr)) \r\n  return hr; \r\nint i; \r\nfor (i=0;i <pAttr->cFuncs;i++) \r\n{ \r\n  hr = pTypeInfo->GetFuncDesc(i, &pFuncDesc); \r\n  if (FAILED(hr)) \r\n    return hr; \r\n  if (pFuncDesc->memid == dispidMember) \r\n    break; \r\n  pTypeInfo->ReleaseFuncDesc(pFuncDesc); \r\n  pFuncDesc = NULL; \r\n} \r\npTypeInfo->ReleaseTypeAttr(pAttr); \r\n\r\nif (pFuncDesc != NULL) \r\n{ \r\n#define E_POINTER                        _HRESULT_TYPEDEF_(0x80000005L)\r\n#define E_POINTER                        _HRESULT_TYPEDEF_(0x80004003L)\r\n  // do something 80004003\r\n}\r\n*/"
  },
  {
    "path": "krnln/krnln_DoEvents.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n// - ¼\r\n/*\r\n    øʽ ޷ֵ ¼  - ϵͳֿ֧->\r\n    ӢƣDoEvents\r\n    ʱתÿȨԱ Windows ϵͳлᴦû̻¼ֱϵͳе¼Ż᷵ءΪм\r\n*/\r\nLIBAPI(void, krnln_DoEvents)\r\n{\r\n\tMSG Msg;\r\n\twhile(PeekMessage(&Msg,NULL,NULL,NULL,PM_NOREMOVE))\r\n\t{\r\n\t\tif(Msg.message == WM_QUIT)\r\n\t\t\tbreak;\r\n\t\tGetMessage (&Msg, NULL, 0, 0);\r\n\t\tTranslateMessage (&Msg);\r\n\t\tDispatchMessage (&Msg);\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_FSeek.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n//ļд - ƶдλ\r\n/*\r\n    øʽ ߼͡ ƶдλ  вļţ ʼƶλãݣ ƶ룩 - ϵͳֿ֧->ļд\r\n    ӢƣFSeek\r\n    ڱ򿪵ļУһдλáɹ棬ʧܷؼ١Ϊ\r\n    <1>ΪвļšΪͣintļɡļء\r\n    <2>ΪʼƶλáΪͣintԱʡԡֵָļпʼƶλáΪ³֮һ\r\n\t1#ļף 2#ļβ 3#λáʡԣĬֵΪ#ļס\r\n    <3>Ϊƶ롱Ϊͣintֵָʼƶλõƶȡ\r\n*/\r\nLIBAPI(BOOL, krnln_FSeek)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn FALSE;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn FALSE;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tBOOL bRet = FALSE;\r\n\r\n\tif(pFile->nType == 1 || pFile->nType == 3)//ļ ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tDWORD dwMoveMethod;\r\n\t\tswitch(pArgInf[1].m_int)\r\n\t\t{\r\n\t\tcase 2://#ļβ\r\n\t\t\tdwMoveMethod = FILE_END;\r\n\t\t\tbreak;\r\n\t\tcase 3://#λ\r\n\t\t\tdwMoveMethod = FILE_CURRENT;\r\n\t\t\tbreak;\r\n\t\tdefault://#ļ\r\n\t\t\tdwMoveMethod = FILE_BEGIN;\r\n\t\t}\r\n\t\tbRet = SetFilePointer(hFile,pArgInf[2].m_int,NULL,dwMoveMethod);\r\n\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\t\tDWORD dwMoveMethod;\r\n\t\tswitch(pArgInf[1].m_int)\r\n\t\t{\r\n\t\tcase 2://#ļβ\r\n\t\t\tdwMoveMethod = CMyMemFile::end;\r\n\t\t\tbreak;\r\n\t\tcase 3://#λ\r\n\t\t\tdwMoveMethod = CMyMemFile::current;\r\n\t\t\tbreak;\r\n\t\tdefault://#ļ\r\n\t\t\tdwMoveMethod = CMyMemFile::begin;\r\n\t\t}\r\n\t\t\r\n\t\tbRet = (pMemFile->Seek(pArgInf[2].m_int,dwMoveMethod) != -1);\r\n\r\n\t}\r\n\treturn bRet;\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_FileCopy.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//̲ - ļ\r\n/*\r\n    øʽ ߼͡ ļ ı Ƶļı Ƶļ - ϵͳֿ֧->̲\r\n    ӢƣFileCopy\r\n    ɹ棬ʧܷؼ١Ϊ\r\n    <1>ΪƵļΪıͣtext\r\n    <2>ΪƵļΪıͣtext\r\n\r\n*/\r\nLIBAPI(BOOL, krnln_FileCopy)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\treturn CopyFile(pArgInf[0].m_pText,pArgInf[1].m_pText,FALSE);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_FileDateTime.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <SHLWAPI.h>\r\n#pragma comment(lib,\"SHLWAPI.lib\") \r\n//̲ - ȡļʱ\r\n/*\r\n    øʽ ʱ͡ ȡļʱ ı ļ - ϵͳֿ֧->̲\r\n    ӢƣFileDateTime\r\n    ָļ޸ĺںʱ䡣ļڣ10011աΪ\r\n    <1>ΪļΪıͣtext\r\n\tFileTimeToLocalFileTime\r\n\tFileTimeToSystemTime \r\n\r\n*/\r\nLIBAPI(void, krnln_FileDateTime) //ֱ޸eaxedxֵָ\r\n{\r\n\tWIN32_FIND_DATA FindFileData;\r\n\tHANDLE hFind = FindFirstFile(ArgInf.m_pText, &FindFileData);\r\n\tArgInf.m_date =  -657434;//10011\r\n\tif (hFind != INVALID_HANDLE_VALUE)\r\n\t{\r\n\t\tFindClose(hFind);\r\n\t\tif(FileTimeToLocalFileTime(&FindFileData.ftLastWriteTime,&FindFileData.ftCreationTime))\r\n\t\t{\r\n\t\t\tSYSTEMTIME now;\r\n\t\t\tif(FileTimeToSystemTime (&FindFileData.ftCreationTime,&now))\r\n\t\t\t\tArgInf.m_double = GetSpecDateTime(now.wYear, now.wMonth, now.wDay, now.wHour, now.wMinute, now.wSecond);\r\n\t\t}\r\n\t}\r\n\t__asm{\r\n\t\tmov eax, ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx, ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n// {//ԭ\r\n// \tHANDLE hFile = CreateFile(ArgInf.m_pText,\r\n// \t\tGENERIC_READ,\r\n// \t\tFILE_SHARE_READ|FILE_SHARE_WRITE,\r\n// \t\tNULL,\r\n// \t\tOPEN_EXISTING,\r\n// \t\tFILE_ATTRIBUTE_ARCHIVE,\r\n// \t\t0);\r\n// \r\n// \tArgInf.m_date =  -657434;//10011\r\n// \tif(hFile != INVALID_HANDLE_VALUE)\r\n// \t{\r\n// \t\tFILETIME CreationTime,LastWriteTime;\r\n// \t\tBOOL bRet = GetFileTime(hFile,&CreationTime,NULL,&LastWriteTime);\r\n// \t\tCloseHandle(hFile);\r\n// \t\tif(bRet)\r\n// \t\t{\r\n// \t\t\tif(FileTimeToLocalFileTime(&LastWriteTime,&CreationTime))\r\n// \t\t\t{\r\n// \t\t\t\tSYSTEMTIME now;\r\n// \t\t\t\tif(FileTimeToSystemTime (&CreationTime,&now))\r\n// \t\t\t\t\tArgInf.m_double = GetSpecDateTime(now.wYear, now.wMonth, now.wDay, now.wHour, now.wMinute, now.wSecond);\r\n// \r\n// \t\t\t}\r\n// \r\n// \r\n// \t\t}\r\n// \r\n// \t}\r\n// \t\t\r\n// \r\n// \t__asm{\r\n// \t\tmov eax, ArgInf.m_unit.m_dwFormID;\r\n// \t\tmov edx, ArgInf.m_unit.m_dwUnitID;\r\n// \t}\r\n// }\r\n"
  },
  {
    "path": "krnln/krnln_FileLen.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//̲ - ȡļߴ\r\n/*\r\n    øʽ ͡ ȡļߴ ı ļ - ϵͳֿ֧->̲\r\n    ӢƣFileLen\r\n    һļĳȣλֽڡļڣ -1Ϊ\r\n    <1>ΪļΪıͣtext\r\n*/\r\nLIBAPI(int, krnln_FileLen)\r\n{\r\n\tWIN32_FIND_DATA FindFileData;\r\n\tHANDLE hFind = FindFirstFile(ArgInf.m_pText, &FindFileData);\r\n\tif (hFind != INVALID_HANDLE_VALUE)\r\n\t{\r\n\t\tFindClose(hFind);\r\n\t\tif (FindFileData.nFileSizeHigh == 0xFFFFFFFF)\r\n\t\t\treturn -1;\r\n\t\treturn FindFileData.nFileSizeLow;\r\n\t}\r\n\treturn -1;\r\n}\r\n// {//ԭ\r\n// \tHANDLE hFile = CreateFile(ArgInf.m_pText,\r\n// \t\tGENERIC_READ,\r\n// \t\tFILE_SHARE_READ|FILE_SHARE_WRITE,\r\n// \t\tNULL,\r\n// \t\tOPEN_EXISTING,\r\n// \t\tFILE_ATTRIBUTE_ARCHIVE,\r\n// \t\t0);\r\n// \r\n// \tif(hFile == INVALID_HANDLE_VALUE)\r\n// \t\treturn -1;\r\n// \tDWORD FileSizeLow,FileSizeHigh;\r\n// \tFileSizeLow = GetFileSize(hFile,&FileSizeHigh);\r\n// \tCloseHandle(hFile);\r\n// \tif(0xFFFFFFFF == FileSizeHigh)\r\n// \t\treturn -1;\r\n// \treturn FileSizeLow;\r\n// }\r\n"
  },
  {
    "path": "krnln/krnln_FileMove.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//̲ - ƶļ\r\n/*\r\n    øʽ ߼͡ ƶļ ı ƶļı ƶλã - ϵͳֿ֧->̲\r\n    ӢƣFileMove\r\n    ļһλƶһλáɹ棬ʧܷؼ١Ϊ\r\n    <1>ΪƶļΪıͣtext\r\n    <2>ΪƶλáΪıͣtext\r\n*/\r\nLIBAPI(BOOL, krnln_FileMove)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tBOOL result = MoveFile(pArgInf[0].m_pText,pArgInf[1].m_pText);\r\n\tif(!result){\r\n\t\tresult = CopyFile(pArgInf[0].m_pText,pArgInf[1].m_pText, 0);\r\n\t\tif (result)\r\n\t\t\tresult = DeleteFile(pArgInf[0].m_pText);\r\n\r\n\t}\r\n\treturn result;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetAllPY.cpp",
    "content": "#include \"StdAfx.h\"\r\n#include \"mem.h\"\r\n#include \"Myfunctions.h\"\r\n\r\nextern char * FindPY(BYTE a1);\r\nextern WORD s_wPYTab [];\r\nextern WORD s_wManyPYTab [];\r\n//ƴ - ȡз\r\n/*\r\nøʽ ı页 ȡз ı ȡƴĺ֣ - ϵͳֿ֧->ƴ\r\nӢƣGetAllPY\r\nذָƴı飨ֶ֧֣Ŀǰֹ֧꺺֡صá顱浽ͬΪ\r\n<1>Ϊȡƴĺ֡Ϊıͣtextֻȡıײĵһ֣ıײΪ꺺֣һԱĿΪ 0 Ŀı顣\r\n*/\r\nLIBAPI(LPBYTE, krnln_GetAllPY)\r\n{\r\n\tconst char *v3; // edx@1\r\n\tchar v4; // al@3\r\n\tWORD v5; // bx@7\r\n\tsigned int v6; // ecx@10\r\n\tchar *v7; // edi@10\r\n\tchar v8; // zf@12\r\n\tsigned int v9; // ecx@14\r\n\tsigned int v10; // ecx@14\r\n\tunsigned int v11; // ebp@14\r\n\tchar *v12; // edi@14\r\n\tconst void *v13; // esi@14\r\n\tchar v14; // zf@16\r\n\t__int16 v15; // bx@19\r\n\tsigned int v16; // ecx@20\r\n\tchar *v17; // edi@20\r\n\tchar v18; // zf@22\r\n\tsigned int v19; // ecx@24\r\n\tsigned int v20; // ecx@24\r\n\tunsigned int v21; // ebx@24\r\n\tchar *v22; // edi@24\r\n\tconst void *v23; // esi@24\r\n\tchar v24; // zf@26\r\n\tchar *v25; // eax@29\r\n\tint v26; // eax@30\r\n\tint v27; // ebx@30\r\n\tsigned int v28; // ebp@30\r\n\tunsigned __int16 v29; // bx@31\r\n\tsigned int v30; // ecx@33\r\n\tchar *v31; // edi@33\r\n\tchar v32; // zf@35\r\n\tunsigned int v33; // edx@37\r\n\tsigned int v34; // ecx@37\r\n\tsigned int v35; // ecx@37\r\n\tchar *v36; // edi@37\r\n\tconst void *v37; // esi@37\r\n\tchar v38; // zf@39\r\n\t__int16 v39; // bx@42\r\n\tsigned int v40; // ecx@43\r\n\tchar *v41; // edi@43\r\n\tchar v42; // zf@45\r\n\tsigned int v43; // ecx@47\r\n\tsigned int v44; // ecx@47\r\n\tunsigned int v45; // ebx@47\r\n\tchar *v46; // edi@47\r\n\tconst void *v47; // esi@47\r\n\tchar v48; // zf@49\r\n\tchar *v49; // eax@52\r\n\t//unsigned int v51; // edi@53\r\n\t//int v52; // eax@53\r\n\tchar *v53; // [sp+10h] [bp-80h]@30\r\n\tCMyDWordArray v54; // [sp+18h] [bp-78h]@1\r\n    //unsigned int v56; // [sp+28h] [bp-68h]@53\r\n\tchar v57; // [sp+2Ch] [bp-64h]@9\r\n\t\r\n\t\r\n\t\r\n\tv3 = ArgInf.m_pText;\r\n\t\r\n\tif ( v3 )\r\n\t{\r\n\t\t\r\n\t\tif ( mystrlen(v3) >= 2 )\r\n\t\t{\r\n\t\t\tv4 = v3[0];\r\n\t\t\t//LOBYTE(v3) = v3[1];\r\n\t\t\tINT ii = v3[1];\r\n\t\t\t//ii = (ii & 0xFF) | (0xFF & v3[1]);\r\n\t\t\t//v3 = (char *)ii;\r\n\t\t\t\r\n\t\t\tif ( (BYTE)v4 >= 0xB0u )\r\n\t\t\t{\r\n\t\t\t\tif ( (BYTE)v4 <= 0xF7u )\r\n\t\t\t\t{\r\n\t\t\t\t\tif ( (BYTE)ii >= 0xA1u )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ( (BYTE)ii <= 0xFEu )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t//v3 = (const char *)(unsigned __int8)v3;\r\n\t\t\t\t\t\t\tv5 = *((WORD *)&s_wPYTab + (BYTE)ii + 94 * (BYTE)v4 - 16705);\r\n\t\t\t\t\t\t\tif ( v5 )\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tii = v5>>8;\r\n\t\t\t\t\t\t\t\tif ( ii & 0x80 )\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tv27 = v5 & 0x7FFF;\r\n\t\t\t\t\t\t\t\t\tv28 = 0;\r\n\t\t\t\t\t\t\t\t\tv26 = (int)((char *)&s_wManyPYTab + 6 * v27);\r\n\t\t\t\t\t\t\t\t\tv53 = (char *)&s_wManyPYTab + 6 * v27;\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tv29 = *(WORD *)v26;\r\n\t\t\t\t\t\t\t\t\t\tif ( !*(WORD *)v26 )\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tv57 = 0;\r\n\t\t\t\t\t\t\t\t\t\tif ( (BYTE)v29 )\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tv31 = FindPY((BYTE)v29);\r\n\t\t\t\t\t\t\t\t\t\t\tv30 = -1;\r\n\t\t\t\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tif ( !v30 )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t\tv32 = *v31++ == 0;\r\n\t\t\t\t\t\t\t\t\t\t\t\t--v30;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\twhile ( !v32 );\r\n\t\t\t\t\t\t\t\t\t\t\tv35 = ~v30;\r\n\t\t\t\t\t\t\t\t\t\t\tv37 = &v31[-v35];\r\n\t\t\t\t\t\t\t\t\t\t\tv36 = &v57;\r\n\t\t\t\t\t\t\t\t\t\t\tv33 = v35;\r\n\t\t\t\t\t\t\t\t\t\t\tv34 = -1;\r\n\t\t\t\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tif ( !v34 )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t\tv38 = *v36++ == 0;\r\n\t\t\t\t\t\t\t\t\t\t\t\t--v34;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\twhile ( !v38 );\r\n\t\t\t\t\t\t\t\t\t\t\tmemcpy(v36 - 1, v37, v33);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tv39 = v29 >> 8;\r\n\t\t\t\t\t\t\t\t\t\tif ( (BYTE)v39 )\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tv41 = FindPY((BYTE)v39);\r\n\t\t\t\t\t\t\t\t\t\t\tv40 = -1;\r\n\t\t\t\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tif ( !v40 )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t\tv42 = *v41++ == 0;\r\n\t\t\t\t\t\t\t\t\t\t\t\t--v40;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\twhile ( !v42 );\r\n\t\t\t\t\t\t\t\t\t\t\tv44 = ~v40;\r\n\t\t\t\t\t\t\t\t\t\t\tv47 = &v41[-v44];\r\n\t\t\t\t\t\t\t\t\t\t\tv45 = v44;\r\n\t\t\t\t\t\t\t\t\t\t\tv46 = &v57;\r\n\t\t\t\t\t\t\t\t\t\t\tv43 = -1;\r\n\t\t\t\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tif ( !v43 )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t\tv48 = *v46++ == 0;\r\n\t\t\t\t\t\t\t\t\t\t\t\t--v43;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\twhile ( !v48 );\r\n\t\t\t\t\t\t\t\t\t\t\tmemcpy(v46 - 1, v47, v45);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tv49 = CloneTextData(&v57);\r\n\t\t\t\t\t\t\t\t\t\t//CFreqMem__AddDWord(&v54, v49);\r\n\t\t\t\t\t\t\t\t\t\tv54.AddDWord((DWORD)v49);\r\n\t\t\t\t\t\t\t\t\t\t++v28;\r\n\t\t\t\t\t\t\t\t\t\tv26 = (int)(v53 + 2);\r\n\t\t\t\t\t\t\t\t\t\tv53 += 2;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\twhile ( v28 < 3 );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tv57 = 0;\r\n\t\t\t\t\t\t\t\t\tif ( (BYTE)v5 )\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tv7 = FindPY((BYTE)v5);\r\n\t\t\t\t\t\t\t\t\t\tv6 = -1;\r\n\t\t\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tif ( !v6 )\r\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\tv8 = *v7++ == 0;\r\n\t\t\t\t\t\t\t\t\t\t\t--v6;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\twhile ( !v8 );\r\n\t\t\t\t\t\t\t\t\t\tv10 = ~v6;\r\n\t\t\t\t\t\t\t\t\t\tv13 = &v7[-v10];\r\n\t\t\t\t\t\t\t\t\t\tv11 = v10;\r\n\t\t\t\t\t\t\t\t\t\tv12 = &v57;\r\n\t\t\t\t\t\t\t\t\t\tv9 = -1;\r\n\t\t\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tif ( !v9 )\r\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\tv14 = *v12++ == 0;\r\n\t\t\t\t\t\t\t\t\t\t\t--v9;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\twhile ( !v14 );\r\n\t\t\t\t\t\t\t\t\t\tmemcpy(v12 - 1, v13, v11);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tv15 = v5 >> 8;\r\n\t\t\t\t\t\t\t\t\tif ( (BYTE)v15 )\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tv17 = FindPY((BYTE)v15);\r\n\t\t\t\t\t\t\t\t\t\tv16 = -1;\r\n\t\t\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tif ( !v16 )\r\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\tv18 = *v17++ == 0;\r\n\t\t\t\t\t\t\t\t\t\t\t--v16;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\twhile ( !v18 );\r\n\t\t\t\t\t\t\t\t\t\tv20 = ~v16;\r\n\t\t\t\t\t\t\t\t\t\tv23 = &v17[-v20];\r\n\t\t\t\t\t\t\t\t\t\tv21 = v20;\r\n\t\t\t\t\t\t\t\t\t\tv22 = &v57;\r\n\t\t\t\t\t\t\t\t\t\tv19 = -1;\r\n\t\t\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tif ( !v19 )\r\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\tv24 = *v22++ == 0;\r\n\t\t\t\t\t\t\t\t\t\t\t--v19;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\twhile ( !v24 );\r\n\t\t\t\t\t\t\t\t\t\tmemcpy(v22 - 1, v23, v21);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tv25 = CloneTextData(&v57);\r\n\t\t\t\t\t\t\t\t\t//CFreqMem__AddDWord(&v54, v25);\r\n\t\t\t\t\t\t\t\t\tv54.AddDWord((DWORD)v25);\r\n\t\t\t\t\t\t\t\t}\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n  /*\r\n  v51 = 4 * (v56 >> 2);\r\n  v52 = krnl_MMalloc(v51 + 8, v3);\r\n  *(DWORD *)v52 = 1;\r\n  *(DWORD *)(v52 + 4) = v56 >> 2;\r\n  memcpy((void *)(v52 + 8), (const void *)(v56 != 0 ? v55 : 0), v51);*/\r\n  //v54 = &CFreqMem___vftable_;\r\n  // ±ݡ\r\n  \r\n  INT nSize = v54.GetDWordCount () * sizeof (DWORD);\r\n  LPBYTE p = (LPBYTE)E_MAlloc_Nzero (sizeof (INT) * 2 + nSize);\r\n  *(LPINT)p = 1;  // ά\r\n  *(LPINT)(p + sizeof (INT)) = v54.GetDWordCount ();\r\n  memcpy (p + sizeof (INT) * 2, v54.GetPtr (), nSize);\r\n  \r\n  //*(DWORD *)a1 = v52;\r\n  return p;\r\n  \r\n}\r\n\r\n//ƴ - ȡз\r\n/*\r\nøʽ ͡ ȡĿ ı ȡ䷢Ŀĺ֣ - ϵͳֿ֧->ƴ\r\nӢƣGetPYCount\r\nֵָķĿΪ\r\n<1>Ϊȡ䷢Ŀĺ֡Ϊıͣtextֻȡıײĵһ֣ıײΪ꺺֣ 0\r\n*/\r\nLIBAPI(int, krnln_GetPYCount)\r\n{\r\n\tint v3; // eax@1\r\n\tint v4; // edx@1\r\n\tint v5; // esi@1\r\n\tunsigned __int8 v6; // dl@3\r\n\tunsigned __int8 v8; // [sp+8h] [bp+4h]@3\r\n\tunsigned __int8 v9; // [sp+10h] [bp+Ch]@3\r\n\t\r\n\tPMDATA_INF a3 = &ArgInf;\r\n\t//  LOBYTE(v3) = a3;\r\n\tv5 = 0;\r\n\tv4 = (INT)a3->m_pText;\r\n\tif ( v4 )\r\n\t{\r\n\t\t//    LOBYTE(v3) = 0;\r\n\t\tif ( mystrlen((const char *)v4) >= 2 )\r\n\t\t{\r\n\t\t\t//LOBYTE(v3) = *(BYTE *)v4;\r\n\t\t\tv3 = *(BYTE *)v4;\r\n\t\t\tv6 = *(BYTE *)(v4 + 1);\r\n\t\t\tv8 = v3;\r\n\t\t\tv9 = v6;\r\n\t\t\tif ( (BYTE)v3 >= 0xB0u )\r\n\t\t\t{\r\n\t\t\t\tif ( (BYTE)v3 <= 0xF7u )\r\n\t\t\t\t{\r\n\t\t\t\t\tif ( v6 >= 0xA1u )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ( v6 <= 0xFEu )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t//LOWORD(v3) = *((WORD *)&s_wPYTab + v9 + 94 * v8 - 16705);\r\n\t\t\t\t\t\t\tv3 =  *((WORD *)&s_wPYTab + v9 + 94 * v8 - 16705);\r\n\t\t\t\t\t\t\tif (v3 )\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tINT ii = v3>>8;\r\n\t\t\t\t\t\t\t\tif ( ii & 0x80 )\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tv3 &= 0x7FFFu;\r\n\t\t\t\t\t\t\t\t\tv5 = (*((WORD *)&s_wManyPYTab + 3 * v3 + 2) != 0) + 2;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tv5 = 1;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn v5;\r\n}\r\n\r\nchar *__cdecl GetPY(PMDATA_INF a1, int a2, const char **a3, int a4)\r\n{\r\n\tconst char *v4; // edx@1\r\n\tPMDATA_INF v5; // esi@1\r\n\tchar v6; // al@3\r\n\tchar v7; // dl@3\r\n\tint v8; // ecx@7\r\n\tunsigned __int16 v9; // bx@7\r\n\tsigned int v10; // ecx@16\r\n\tchar *v11; // edi@16\r\n\tchar v12; // zf@18\r\n\tunsigned int v13; // edx@20\r\n\tsigned int v14; // ecx@20\r\n\tsigned int v15; // ecx@20\r\n\tchar *v16; // edi@20\r\n\tconst void *v17; // esi@20\r\n\tchar v18; // zf@22\r\n\t__int16 v19; // bx@25\r\n\tsigned int v20; // ecx@27\r\n\tchar *v21; // edi@27\r\n\tchar v22; // zf@29\r\n\tsigned int v23; // ecx@31\r\n\tsigned int v24; // ecx@31\r\n\tunsigned int v25; // ebx@31\r\n\tchar *v26; // edi@31\r\n\tconst void *v27; // esi@31\r\n\tchar v28; // zf@33\r\n\tchar *result; // eax@36\r\n\tchar v30[128]; // [sp+14h] [bp-64h]@1//ջڴܴ\r\n\tchar v31; // [sp+84h] [bp+Ch]@3\r\n\t\r\n\tv5 = (PMDATA_INF )a3;\r\n\tv30[0] = 0;//\r\n\tv4 = *a3;\r\n\tif ( *a3 )\r\n\t{\r\n\t\tif ( mystrlen(*a3) >= 2 )\r\n\t\t{\r\n\t\t\tv6 = *v4;\r\n\t\t\tv7 = v4[1];\r\n\t\t\tv31 = v6;\r\n\t\t\tif ( (unsigned __int8)v6 >= 0xB0u )\r\n\t\t\t{\r\n\t\t\t\tif ( (unsigned __int8)v6 <= 0xF7u )\r\n\t\t\t\t{\r\n\t\t\t\t\tif ( (unsigned __int8)v7 >= 0xA1u )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ( (unsigned __int8)v7 <= 0xFEu )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tv8 = (*((DWORD *)v5 + 3) - 1) & ((*((DWORD *)v5 + 3) - 1 < 0) - 1);\r\n\t\t\t\t\t\t\tv9 = *((WORD *)&s_wPYTab + (unsigned __int8)v7 + 94 * (unsigned __int8)v31 - 16705);\r\n\t\t\t\t\t\t\tif ( v9 )\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tINT ii = v9 >> 8;\r\n\t\t\t\t\t\t\t\tif ( ii & 0x80 )\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif ( v8 >= 3 )\r\n\t\t\t\t\t\t\t\t\t\tgoto LABEL_36;\r\n\t\t\t\t\t\t\t\t\tv9 = *((WORD *)&s_wManyPYTab + v8 + 2 * (v9 & 0x7FFF) + (v9 & 0x7FFF));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif ( v8 )\r\n\t\t\t\t\t\t\t\t\t\tgoto LABEL_36;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif ( v9 )\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif ( (BYTE)v9 )\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tif ( a4 != 2 )\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tv11 = FindPY((BYTE)v9);\r\n\t\t\t\t\t\t\t\t\t\t\tv10 = -1;\r\n\t\t\t\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tif ( !v10 )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t\tv12 = *v11++ == 0;\r\n\t\t\t\t\t\t\t\t\t\t\t\t--v10;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\twhile ( !v12 );\r\n\t\t\t\t\t\t\t\t\t\t\tv15 = ~v10;\r\n\t\t\t\t\t\t\t\t\t\t\tv17 = &v11[-v15];\r\n\t\t\t\t\t\t\t\t\t\t\tv16 = v30;//\r\n\t\t\t\t\t\t\t\t\t\t\tv13 = v15;\r\n\t\t\t\t\t\t\t\t\t\t\tv14 = -1;\r\n\t\t\t\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tif ( !v14 )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t\tv18 = *v16++ == 0;\r\n\t\t\t\t\t\t\t\t\t\t\t\t--v14;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\twhile ( !v18 );\r\n\t\t\t\t\t\t\t\t\t\t\tmemcpy(v16 - 1, v17, v13);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tv19 = v9 >> 8;\r\n\t\t\t\t\t\t\t\t\tif ( (BYTE)v19 )\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tif ( a4 != 1 )\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tv21 = FindPY((BYTE)v19);\r\n\t\t\t\t\t\t\t\t\t\t\tv20 = -1;\r\n\t\t\t\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tif ( !v20 )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t\tv22 = *v21++ == 0;\r\n\t\t\t\t\t\t\t\t\t\t\t\t--v20;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\twhile ( !v22 );\r\n\t\t\t\t\t\t\t\t\t\t\tv24 = ~v20;\r\n\t\t\t\t\t\t\t\t\t\t\tv27 = &v21[-v24];\r\n\t\t\t\t\t\t\t\t\t\t\tv25 = v24;\r\n\t\t\t\t\t\t\t\t\t\t\tv26 = v30;//\r\n\t\t\t\t\t\t\t\t\t\t\tv23 = -1;\r\n\t\t\t\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tif ( !v23 )\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t\tv28 = *v26++ == 0;\r\n\t\t\t\t\t\t\t\t\t\t\t\t--v23;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\twhile ( !v28 );\r\n\t\t\t\t\t\t\t\t\t\t\tmemcpy(v26 - 1, v27, v25);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\nLABEL_36:\r\n\tresult = CloneTextData(v30);//\r\n\ta1->m_pText = result;\r\n\treturn result;\r\n}\r\n//ƴ - ȡƴ\r\n/*\r\nøʽ ı͡ ȡƴ ı ȡƴĺ֣ ȡƴ - ϵͳֿ֧->ƴ\r\nӢƣGetPY\r\nذֵָָƴıָƴ벻ڣؿıĿǰֹ֧꺺ֵ֡ĵһΪΪ\r\n<1>Ϊȡƴĺ֡Ϊıͣtextֻȡıײĵһ֣ıײΪ꺺֣һı\r\n<2>ΪȡƴΪͣintʼֵΪ1Ӧ 1 úֵķĿ֮䡣ֵķĿʹáȡĿȡá\r\n*/\r\nLIBAPI(char*, krnln_GetPY)\r\n{\r\n\tMDATA_INF ret;\r\n\treturn GetPY(&ret, nArgCount, (const char **)&ArgInf, 0);\r\n\t\r\n}\r\n//ƴ - ȡĸ\r\n/*\r\nøʽ ı͡ ȡĸ ı ȡƴĺ֣ ȡƴ - ϵͳֿ֧->ƴ\r\nӢƣGetSM\r\nذָָƴĸıָƴ벻ڻúִ˷ĸؿıĿǰֹ֧꺺֡Ϊ\r\n<1>Ϊȡƴĺ֡Ϊıͣtextֻȡıײĵһ֣ıײΪ꺺֣һı\r\n<2>ΪȡƴΪͣintʼֵΪ1Ӧ 1 úֵķĿ֮䡣ֵķĿʹáȡĿȡá\r\n*/\r\nLIBAPI(char*, krnln_GetSM)\r\n{\r\n\tMDATA_INF ret;\r\n\treturn GetPY(&ret, nArgCount, (const char **)&ArgInf, 1);\r\n\t\r\n}\r\n//ƴ - ȡĸ\r\n/*\r\nøʽ ı͡ ȡĸ ı ȡƴĺ֣ ȡƴ - ϵͳֿ֧->ƴ\r\nӢƣGetYM\r\nذָָƴĸıָƴ벻ڣؿıĿǰֹ֧꺺֡Ϊ\r\n<1>Ϊȡƴĺ֡Ϊıͣtextֻȡıײĵһ֣ıײΪ꺺֣һı\r\n<2>ΪȡƴΪͣintʼֵΪ1Ӧ 1 úֵķĿ֮䡣ֵķĿʹáȡĿȡá\r\n*/\r\nLIBAPI(char*, krnln_GetYM)\r\n{\r\n\tMDATA_INF ret;\r\n\treturn GetPY(&ret, nArgCount, (const char **)&ArgInf, 2);\r\n\t\r\n}\r\n\r\nunsigned char __cdecl ConvertNanFangPY(unsigned char a1, unsigned char a2, int a);\r\n//ƴ - Ƚ\r\n/*\r\nøʽ ߼͡ Ƚ ı Ƚıһı Ƚı߼ Ƿ֧Ϸ߼ ǷΪģȽϣݣ - ϵͳֿ֧->ƴ\r\nӢƣCompPY\r\nȽıķͬ棬򷵻ؼ١ıеķǹ꺺ֲ֣м򵥵ֵȽϡΪ\r\n<1>ΪȽıһΪıͣtext\r\n<2>ΪȽıΪıͣtext\r\n<3>ΪǷ֧ϷΪ߼ͣboolʼֵΪ桱Ϊ֧Ϸ֧ϷȽʱΪķͬ磺 n  l z  zh ie  ue ȵȡ\r\n<4>ΪǷΪģȽϡΪ߼ͣboolԱʡԡΪʱȽıһķڴȽıײʱΪȽͨʡԣĬֵΪ١\r\n*/\r\nLIBAPI(BOOL, krnln_CompPY)\r\n{\r\n\tint v3; // ebx@1\r\n\tint v4; // ebp@1\r\n\tint v5; // esi@2\r\n\tint v6; // eax@4\r\n\tunsigned int v7; // edx@4\r\n\tunsigned int v8; // ecx@4\r\n\tchar v9; // cl@10\r\n\tunsigned __int8 v10; // dl@14\r\n\tunsigned __int8 v11; // cl@15\r\n\tsigned int v12; // ebp@26\r\n\tsigned int v13; // edi@27\r\n\tunsigned __int8 v14; // al@28\r\n\tint v15; // edx@28\r\n\t__int16 v16; // bx@30\r\n\tunsigned __int16 v17; // cx@32\r\n\tunsigned __int16 v18; // si@32\r\n\tunsigned __int8 v19; // al@32\r\n\tint v20; // edx@34\r\n\tint *v21; // ecx@35\r\n\tchar *v22; // eax@40\r\n\tint v23; // ebx@40\r\n\tunsigned int v24; // ebp@41\r\n\tint *v25; // esi@41\r\n\t__int16 v26; // bx@42\r\n\t__int16 v27; // dx@43\r\n\tsigned int v28; // ebx@45\r\n\tchar *v29; // edi@45\r\n\t__int16 v30; // si@46\r\n\tint v31; // edx@47\r\n\t__int16 v32; // ax@48\r\n\tint *v33; // ecx@48\r\n\tint v35; // [sp+10h] [bp-2Ch]@8\r\n\tint v36; // [sp+14h] [bp-28h]@9\r\n\tint v37; // [sp+18h] [bp-24h]@1\r\n\tchar v38; // [sp+1Ch] [bp-20h]@10\r\n\tsigned int v39; // [sp+20h] [bp-1Ch]@26\r\n\tsigned int v40; // [sp+24h] [bp-18h]@26\r\n\tchar v41; // [sp+28h] [bp-14h]@10\r\n\tunsigned __int8 v42; // [sp+2Ch] [bp-10h]@18\r\n\tunsigned __int8 v43; // [sp+30h] [bp-Ch]@18\r\n\tint v44[20]; // [sp+34h] [bp-8h]@33\r\n\tunsigned __int8 v45; // [sp+48h] [bp+Ch]@32 ջܴ\r\n\tunsigned __int8 v46; // [sp+48h] [bp+Ch]@43\r\n\t\r\n\tINT a2 = nArgCount;\r\n\tPMDATA_INF a3 = &ArgInf;\r\n\tv4 = a3->m_int;\r\n\tv3 = a3[1].m_int;\r\n\tv37 = a3[2].m_int;\r\n\tif ( a3[3].m_dtDataType )\r\n\t\tv5 = a3[3].m_bool;\r\n\telse\r\n\t\tv5 = 0;\r\n\tv6 = 0;\r\n\tv7 = mystrlen((const char *)v4)-1;\r\n\tv8 = mystrlen((const char *)v3)-1;\r\n\tif ( v5 == 1 )\r\n\t\t//LOBYTE(v6) = (signed int)v7 <= (signed int)v8;\r\n\t\tv6 =(BYTE)(signed int)v7 <= (signed int)v8;\r\n\telse\r\n\t\tv6 = v7 == v8;\r\n\tif ( v6 )\r\n\t{\r\n\t\tv35 =  a3->m_int;\r\n\t\t\r\n\t\twhile ( 1 )\r\n\t\t{\r\n\t\t\tv6 =(BYTE) *(BYTE *)v4;\r\n\t\t\tv36 = v3;\r\n\t\t\tif ( !*(BYTE *)v4 )\r\n\t\t\t\tbreak;\r\n\t\t\tv9 = *(BYTE *)v3;\r\n\t\t\tv41 = *(BYTE *)v4;\r\n\t\t\tv38 = *(BYTE *)v3;\r\n\t\t\tif ( v6 & 0x80 )\r\n\t\t\t{\r\n\t\t\t\tif ( !(v9 & 0x80) || (v10 = *(BYTE *)(v4 + 1), !v10) || (v11 = *(BYTE *)(v3 + 1), !v11) )\r\n\t\t\t\t\treturn v6;\r\n\t\t\t\t\r\n\t\t\t\tif ( *(WORD *)v4 == *(WORD *)v3 )\r\n\t\t\t\t{\r\n\t\t\t\t\tv4 += 2;\r\n\t\t\t\t\tv3 += 2;\r\n\t\t\t\t\tv35 = v4;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tv42 = *(BYTE *)(v4 + 1);\r\n\t\t\t\t\tv43 = *(BYTE *)(v3 + 1);\r\n\t\t\t\t\tif ( (BYTE)v6 < 0xB0u\r\n\t\t\t\t\t\t|| (BYTE)v6 > 0xF7u\r\n\t\t\t\t\t\t|| v10 < 0xA1u\r\n\t\t\t\t\t\t|| v10 > 0xFEu\r\n\t\t\t\t\t\t|| (v6 = *(BYTE *)v3, (unsigned __int8)v38 < 0xB0u)\r\n\t\t\t\t\t\t|| (unsigned __int8)v38 > 0xF7u\r\n\t\t\t\t\t\t|| v11 < 0xA1u\r\n\t\t\t\t\t\t|| v11 > 0xFEu )\r\n\t\t\t\t\t\treturn v6;\r\n\t\t\t\t\t\r\n\t\t\t\t\tv12 = 0;\r\n\t\t\t\t\tv40 = 0;\r\n\t\t\t\t\tv39 = 0;\r\n\t\t\t\t\tdo\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tv13 = 0;\r\n\t\t\t\t\t\tif ( v12 )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tv15 = 47 * (unsigned __int8)v38;\r\n\t\t\t\t\t\t\tv14 = v43;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tv15 = 47 * (unsigned __int8)v41;\r\n\t\t\t\t\t\t\tv14 = v42;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tv16 = *((WORD *)&s_wPYTab + v14 + 2 * v15 - 16705);\r\n\t\t\t\t\t\tif ( !v16 )\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tINT ii = v16>>8;\r\n\t\t\t\t\t\tif ( ii & 0x80 )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tv23 = v16 & 0x7FFF;\r\n\t\t\t\t\t\t\tv22 = (char *)&s_wManyPYTab + 6 * v23;\r\n\t\t\t\t\t\t\tif ( v12 )\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tv28 = 0;\r\n\t\t\t\t\t\t\t\tv29 = v22;\r\n\t\t\t\t\t\t\t\twhile ( 1 )\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tv30 = *(WORD *)v29;\r\n\t\t\t\t\t\t\t\t\tif ( !*(WORD *)v29 )\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tv31 = 0;\r\n\t\t\t\t\t\t\t\t\tif ( (WORD)v44[0] )\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tv32 = v44[0];//\r\n\t\t\t\t\t\t\t\t\t\tv33 = v44;//\r\n\t\t\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tif ( v32 == v30 )\r\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\tv32 = *((WORD *)v33 + 1);\r\n\t\t\t\t\t\t\t\t\t\t\tv33 = (int *)((char *)v33 + 2);\r\n\t\t\t\t\t\t\t\t\t\t\t++v31;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\twhile ( v32 );\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tif ( *((WORD *)v44 + v31) != v30 )//&V44\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t++v28;\r\n\t\t\t\t\t\t\t\t\t\tv29 += 2;\r\n\t\t\t\t\t\t\t\t\t\tif ( v28 < 3 )\r\n\t\t\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tgoto LABEL_55;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tv40 = 1;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tv25 = v44;//\r\n\t\t\t\t\t\t\t\tv24 = (UINT)((char *)&s_wManyPYTab + 6 * v23) - (UINT)v44;//&V44\r\n\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tv26 = *(WORD *)((char *)v25 + v24);\r\n\t\t\t\t\t\t\t\t\tif ( !v26 )\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tv46 = ConvertNanFangPY((unsigned char)v26, 0, v37);\r\n\t\t\t\t\t\t\t\t\t//HIBYTE(v27) = ConvertNanFangPY(HIBYTE(v26), v46, v37);\r\n\t\t\t\t\t\t\t\t\t//++v13;\r\n\t\t\t\t\t\t\t\t\t//LOBYTE(v27) = v46; //˴\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tii = v26 >>8;\r\n\t\t\t\t\t\t\t\t\tii = ConvertNanFangPY(ii, v46, v37);\r\n\t\t\t\t\t\t\t\t\t++v13;\r\n\t\t\t\t\t\t\t\t\tv27 = MAKEWORD(v46,ii);\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t*(WORD *)v25 = v27;\r\n\t\t\t\t\t\t\t\t\tv25 = (int *)((char *)v25 + 2);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\twhile ( v13 < 3 );\r\n\t\t\t\t\t\t\t\tv12 = v39;\r\n\t\t\t\t\t\t\t\t*((WORD *)v44 + v13) = 0;//&V44\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tv19 = ConvertNanFangPY((unsigned char)v16, 0, v37);\r\n\t\t\t\t\t\t\tv45 = v19;\r\n\t\t\t\t\t\t\t//LOBYTE(v6) = ConvertNanFangPY(HIBYTE(v16), v19, v37);\r\n\t\t\t\t\t\t\t//HIBYTE(v17) = v6;\r\n\t\t\t\t\t\t\t// LOBYTE(v17) = v45;//˴\r\n\t\t\t\t\t\t\tii = v16 >>8;\r\n\t\t\t\t\t\t\tv6 = (BYTE)ConvertNanFangPY(ii, v19, v37);\r\n\t\t\t\t\t\t\tv17 = MAKEWORD(v45,v6);\r\n\t\t\t\t\t\t\tv18 = v17;\r\n\t\t\t\t\t\t\tif ( v12 )\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tv20 = 0;\r\n\t\t\t\t\t\t\t\tif ( (WORD)v44[0] )//&V44\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tv6 = (WORD)v44[0];//&V44\r\n\t\t\t\t\t\t\t\t\tv21 = v44;//\r\n\t\t\t\t\t\t\t\t\tdo\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tif ( v6 == v18 )\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tv6 = *((WORD *)v21 + 1);\r\n\t\t\t\t\t\t\t\t\t\tv21 = (int *)((char *)v21 + 2);\r\n\t\t\t\t\t\t\t\t\t\t++v20;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\twhile ( v6 );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif ( *((WORD *)v44 + v20) != v18 )//&V44\r\n\t\t\t\t\t\t\t\t\treturn v6;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tv44[0] = v17;//\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\nLABEL_55:\r\n\t\t\t\t\t\t++v12;\r\n\t\t\t\t\t\tv39 = v12;\r\n          }\r\n          while ( v12 <= 1 );\r\n          v6 = (BYTE)v40;\r\n          if ( v40 )\r\n\t\t\t  return v6;\r\n          v4 = v35 + 2;\r\n          v3 = v36 + 2;\r\n          v35 += 2;\r\n        }\r\n      }\r\n      else\r\n      {\r\n\t\t  if ( v6 != v9 )\r\n\t\t\t  return v6;\r\n\t\t  ++v4;\r\n\t\t  ++v3;\r\n\t\t  v35 = v4;\r\n      }\r\n    }\r\n    //v6 = (BYTE)a1;\r\n    //*(DWORD *)a1 = 1;\r\n\t\r\n\tv6=1;\r\n  }\r\n  return v6;\r\n  \r\n}\r\n//int ComparePYQuickStr(char *,CMyDWordArray &,int,int);\r\nextern \"C\" {\r\n\tint __stdcall ComparePYQuickStr(char *a1, CMyDWordArray* a2, int a3);\r\n\r\n\tint __stdcall PrepareComparePYQuickStr(char *a1, CMyDWordArray* a2, int a3, int a4);\r\n}\r\n//int PrepareComparePYQuickStr(char *,CMyDWordArray &,CFreqMem *,int,unsigned char,int);\r\n//ƴ - ֱȽ \r\n/*\r\nøʽ ߼͡ ֱȽ ı Ƚƴ֣ı Ƚͨı߼ Ƿ֧Ϸ ƴݣ - ϵͳֿ֧->ƴ\r\nӢƣCompPYCode\r\nһƴıһͨıȽϣ棬򷵻ؼ١Ϊ\r\n<1>ΪȽƴ֡Ϊıͣtextƴࣺ\r\nһƴȫƴࣺ 磺jsjƥ䡰ͬʱjisuanjiҲƥ䡰ϵͳԶб־ƴʽȫƴʽ\r\n˫ƴࣺ 磺jisrjiƥ䡰˫ƴķ Windows ϵͳµ˫ƴ뷨һ£\r\nԶбࣺ ʹôƴֵײһַб𣺷ֺ (;) ƴȫƴ࣬ð (:) ˫ƴ࣬ȲΪֺҲΪðţĬΪƴȫƴࡣ硰jsj;jsj;jisuanji:jisrjiƥ䡰\r\nдƴʱһЩ\r\nһΪƥĿıеĴСдӢĸӦλôʹöӦĴдӢĸ磺jsjAƥ䡰aA\r\nΪƥĿıеİ֣Ӧλôʹø֡磺jsj1ƥ䡰1\r\nΪƥĿıеĺַŻ֪ĺ֣Ӧλôʹøú֡磺jj1ƥ䡰1\r\nġƴڲܰˡ_Ƿš\r\n<2>ΪȽͨıΪıͣtext\r\n<3>ΪǷ֧ϷΪ߼ͣboolʼֵΪ桱Ϊ֧Ϸ֧ϷȽʱΪķͬ磺 n  l z  zh ie  ue ȵȡ\r\n<4>Ϊƴ𡱣ΪͣintԱʡԡֵΪ³֮һ 1#ƴȫƴ 2#˫ƴ 3#Զб ʡԱĬΪ#Զб𡱡\r\n*/\r\nLIBAPI(BOOL, krnln_CompPYCode)\r\n{\r\n\tint v3; // eax@1\r\n\tint v4; // ecx@1\r\n\tint v5; // ebx@1\r\n\tint v6; // edi@1\r\n\tint v7; // edx@1\r\n\tsigned int v8; // esi@2\r\n\tsigned int v9; // eax@3\r\n\tchar result; // al@9\r\n\tunsigned int v11; // esi@16\r\n\tint v12; // eax@16\r\n\tsigned int i; // edi@19\r\n\tint v14; // ecx@20\r\n\tCMyDWordArray* v15; // [sp+10h] [bp-14h]@16\r\n\tint v16; // [sp+18h] [bp-Ch]@20\r\n\tunsigned int v17; // [sp+20h] [bp-4h]@16\r\n\tint v18; // [sp+30h] [bp+Ch]@1\r\n\tint a1 = 0;\r\n\tint a3 =(int)&ArgInf;\r\n\t\r\n\tv3 = a3;\r\n\tv7 = *(DWORD *)(a3 + 44);\r\n\tv4 = *(DWORD *)(a3 + 12);\r\n\tv5 = *(DWORD *)(a3 + 24);\r\n\tv6 = *(DWORD *)a3;\r\n\tv18 = *(DWORD *)(a3 + 12);\r\n\t\r\n\tif ( !v7 )\r\n\t{\r\n\t\tv8 = 3;\r\n\t\tgoto LABEL_9;\r\n\t}\r\n\tv9 = *(DWORD *)(v3 + 36);\r\n\tif ( v9 > 3 )\r\n\t\tgoto LABEL_29;\r\n\tif ( v9 < 1 )\r\n\t{\r\n\t\tv8 = 1;\r\n\t\tgoto LABEL_9;\r\n\t}\r\n\tif ( v9 <= 3 )\r\n\t\tv8 = v9;\r\n\telse\r\nLABEL_29:\r\n\tv8 = 3;\r\nLABEL_9:\r\n\ta1 = 0;\r\n\tresult = *(BYTE *)v6;\r\n\tif ( *(BYTE *)v6 )\r\n\t{\r\n\t\tif ( *(BYTE *)v4 )\r\n\t\t{\r\n\t\t\tif ( v8 == 3 )\r\n\t\t\t{\r\n\t\t\t\tv8 = 1;\r\n\t\t\t\tif ( result == 59 )\r\n\t\t\t\t{\r\n\t\t\t\t\t++v6;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif ( result == 58 )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t++v6;\r\n\t\t\t\t\t\tv8 = 2;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//v12 = CFreqMem__CFreqMem(&v15);\r\n\t\t\tv15 = new CMyDWordArray();\r\n\t\t\t\r\n\t\t\t//LOBYTE(v12) = v8 == 1;\r\n\t\t\t//v15 = &CMyDWordArray___vftable_;\r\n\t\t\t\r\n\t\t\tv12 = v8 == 1;\r\n\t\t\tPrepareComparePYQuickStr((char*)v6, v15, v12 + 58, v5);\r\n\t\t\tDWORD* pv15 =(DWORD*)v15;\r\n\t\t\tv16 =(INT)pv15[2];\r\n\t\t\tv17 =pv15[4];\r\n\t\t\tv11 = (v17 >> 2) - 1;\r\n\t\t\tif ( (signed int)((v17 >> 2) - 1) >= 0 )\r\n\t\t\t{\r\n\t\t\t\tif ( ComparePYQuickStr((char*)v18, v15, v5) == 1 )\r\n\t\t\t\t\ta1 = 1;\r\n\t\t\t}\r\n\t\t\t//char txt [50];\r\n\r\n\r\n\t\t\tfor ( i = 0; i <= (int)v11; ++i )\r\n\t\t\t{\r\n\t\t\t\t\r\n\t\t\t\tv14 = *(DWORD *)(v16 + 4 * i);\r\n\t\r\n\t\t\t\t//DWORD dwAddrr = *(DWORD*)v15->GetAt(i);\r\n\t\t\t\t//itoa(dwAddrr,txt,16);\r\n\t\t\t\t//if(::IsBadCodePtr ((int (__stdcall *)(void))dwAddrr))\r\n\t\t\t\t\t//MessageBox(NULL,txt,\"Arr\",MB_OK);\r\n\r\n\t\t\t\tif ( v14 ){\r\n\t\t\t\t\t_asm {\r\n\t\t\t\t\t\tpush ecx;\r\n\t\t\t\t\t\tpush edx;\r\n\t\t\t\t\t\tmov ecx,v14;\r\n\t\t\t\t\t\tmov edx, [ecx]\r\n\t\t\t\t\t\tpush 1;\r\n\t\t\t\t\t\tcall [edx];\r\n\t\t\t\t\t\tpop edx;\r\n\t\t\t\t\t\tpop ecx;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t/*_asm mov ecx,eax;//һҪECXֵ\r\n\t\t\t\t\t(**(void (__stdcall ***)(DWORD))v14)(1);*/\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\tv15->Free();\r\n\t\t\tdelete v15;\r\n\t\t\treturn a1;\r\n\t\t}\r\n\t\tif ( result )\r\n\t\t\treturn result;\r\n\t}\r\n\tif ( !*(BYTE *)v4 )\r\n\t\ta1 = 1;\r\n\treturn a1;\r\n\t\r\n\t\r\n}"
  },
  {
    "path": "krnln/krnln_GetAttr.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//̲ - ȡļ\r\n/*\r\n    øʽ ͡ ȡļ ı ļ - ϵͳֿ֧->̲\r\n    ӢƣGetAttr\r\n    һļĿ¼ԡֵ³͹ɣ 1#ֻļ 2#ļ  4#ϵͳļ 16#Ŀ¼32#浵ļ ҪжǷĳԣڷֵҪֵ֪֮ʹáλ롱бȽϡõĽΪ㣬ʾֵȡļʧܣ -1Ϊ\r\n    <1>ΪļΪıͣtext\r\n*/\r\nLIBAPI(int, krnln_GetAttr)\r\n{\r\n\treturn GetFileAttributes(ArgInf.m_pText);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetBackColor.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ϵͳ - ȡĬϵɫ\r\n/*\r\n    øʽ ͡ ȡĬϵɫ  - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetBackColor\r\n    ȡWindowsϵͳĬϴڱɫΪ\r\n*/\r\nLIBAPI(int, krnln_GetBackColor)\r\n{\r\n\treturn GetSysColor(0xF);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetBinElement.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"mem.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ֽڼ - ȡֽڼ\r\n/*\r\n    øʽ ͨ͡ ȡֽڼ ֽڼ ȡݵֽڼ ȡݵͣ ʼλãݣ - ϵͳֿ֧->ֽڼ\r\n    ӢƣGetBinElement\r\n    ȡֽڼָλָ͵ݡΪ\r\n    <1>ΪȡݵֽڼΪֽڼbin\r\n    <2>Ϊȡݵ͡ΪͣintֵΪ³ 1#ֽͣ 2#ͣ 3#ͣ 4#ͣ 5#Сͣ 6#˫Сͣ 7#߼ͣ 8#ʱͣ 9#ӳָͣ 10#ı͡תݽԶЧУ鼰ת\r\n    <3>ΪʼλáΪͣintԱʡԡָֽڼʲôطʼȡݣֵ1ʼʡԣĬΪֵ1ΪṩһͱִкԶ޸ĸñݣֵƶһλáƶ󵽴ֽڼĩβ޸ĸñΪ-1\r\n*/\r\n// \r\nvoid SetMDataValue (PMDATA_INF pRetData, LPBYTE pData, INT nDataSize)\r\n{\r\n\tswitch (pRetData->m_dtDataType)\r\n\t{\r\n\tcase SDT_BYTE:\r\n\t\tpRetData->m_byte = *pData;\r\n\t\tbreak;\r\n\tcase SDT_SHORT:\r\n\t\tpRetData->m_short = *(SHORT*)pData;\r\n\t\tbreak;\r\n\tcase SDT_INT:\r\n\t\tpRetData->m_int = *(INT*)pData;\r\n\t\tbreak;\r\n\tcase SDT_INT64:\r\n\t\tpRetData->m_int64 = *(INT64*)pData;\r\n\t\tbreak;\r\n\tcase SDT_FLOAT:\r\n\t\tpRetData->m_float = *(FLOAT*)pData;\r\n\t\tbreak;\r\n\tcase SDT_DOUBLE:\r\n\t\tpRetData->m_double = *(DOUBLE*)pData;\r\n\t\tbreak;\r\n\tcase SDT_BOOL:\r\n\t\tpRetData->m_bool = (*(BOOL*)pData != FALSE);\r\n\t\tbreak;\r\n\tcase SDT_DATE_TIME:\r\n\t\tpRetData->m_date = *(DATE*)pData;//max (MIN_DATE, min (MAX_DATE, *(DATE*)pData));\r\n\t\tbreak;\r\n\tcase SDT_SUB_PTR:\r\n\t\tpRetData->m_dwSubCodeAdr = *(LPDWORD)pData;\r\n\t\tbreak;\r\n\tcase SDT_TEXT: {\r\n\t\tINT nEndPos = FindByte (pData, nDataSize, 0);\r\n\t\tpRetData->m_pText = CloneTextData ((char*)pData,\r\n\t\t\t(nEndPos != -1 ? nEndPos : nDataSize));\r\n\t\t\r\n\t\tbreak; }\r\n\tcase SDT_BIN:\r\n\t\tpRetData->m_pBin = CloneBinData (pData, nDataSize);\r\n\t\tbreak;\r\n//\t\tDEFAULT_FAILD;\r\n\t}\r\n}\r\n\r\nLIBAPI(void, krnln_GetBinElement) // ֱ޸eax,edx,ecxԲҪֵָ\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\tINT nType = pArgInf [1].m_int;\r\n\tif (nType < 1 || nType > 10)\r\n\t\tE_ReportError(100,0,0);\r\n\r\n\t//!!! Ϊ _SDT_ALL ݣ\r\n\t// pRetData->m_dtDataType Ϊݵ DATA_TYPE \r\n\tMDATA_INF RetData;\r\n\tmemset(&RetData,0,sizeof(MDATA_INF));\r\n\tRetData.m_dtDataType =\r\n\t\tnType == 1 ? SDT_BYTE :\r\n\tnType == 2 ? SDT_SHORT :\r\n\tnType == 3 ? SDT_INT :\r\n\tnType == 4 ? SDT_INT64 :\r\n\tnType == 5 ? SDT_FLOAT :\r\n\tnType == 6 ? SDT_DOUBLE :\r\n\tnType == 7 ? SDT_BOOL :\r\n\tnType == 8 ? SDT_DATE_TIME :\r\n\tnType == 9 ? SDT_SUB_PTR :\r\n\tSDT_TEXT;\r\n\r\n\tif(pArgInf [0].m_pBin==NULL) \r\n\t{\r\n\t\t__asm{\r\n\t\t\tmov eax, RetData.m_unit.m_dwFormID;\r\n\t\t\tmov edx, RetData.m_unit.m_dwUnitID;\r\n\t\t\tmov ecx, RetData.m_dtDataType;\r\n\t\t}\r\n\t\treturn;\r\n\t}\r\n\r\n\r\n\tLPBYTE pData = pArgInf [0].m_pBin + sizeof (INT) * 2;\r\n\tINT nDataSize = *(LPINT)(pData - sizeof (INT)); //ֽڼ\r\n\t\r\n\r\n\tINT nOffset;\r\n\tLPINT pOffset = NULL;\r\n\tif(pArgInf[2].m_dtDataType == _SDT_NULL)\r\n\t\tnOffset = 0;\r\n\telse\r\n\t{\r\n\t\tif(pArgInf[2].m_dtDataType == VAR_INT)//Ǳ\r\n\t\t{\r\n\t\t\tnOffset = *pArgInf[2].m_pInt - 1;\r\n\t\t\tpOffset = pArgInf[2].m_pInt;\r\n\r\n\t\t}\r\n\t\telse\r\n\t\t\tnOffset = pArgInf[2].m_int - 1;\r\n\r\n\t}\r\n\r\n\r\n\r\n\tINT nNeedSize = GetSysDataTypeDataSize (RetData.m_dtDataType);\r\n\tpData += nOffset;\r\n\tnDataSize -= nOffset;\r\n\tif(nOffset < 0 || nDataSize <=0)\r\n\t{\r\n\t\tif(pOffset)*pOffset = -1;\r\n\t\tgoto end;\r\n\t}\r\n\t\r\n\tDWORD dwbuf [2];\r\n\t\r\n\tif (nType != 10 && nDataSize < nNeedSize)\r\n\t{\r\n\t\tASSERT (nDataSize < sizeof (dwbuf));\r\n\t\tdwbuf [0] = dwbuf [1] = 0;\r\n\t\tmemcpy (dwbuf, pData, nDataSize);\r\n\t\tpData = (LPBYTE)dwbuf;\r\n\t\tnDataSize = nNeedSize;\r\n\t}\r\n\tSetMDataValue (&RetData, pData, nDataSize);\r\n\tif(pOffset)\r\n\t{\r\n\t\tif(nType == 10){\r\n\t\t\tif(RetData.m_pText)\r\n\t\t\t\t*pOffset+=(mystrlen(RetData.m_pText)+1);\r\n\t\t\telse\r\n\t\t\t\t*pOffset+=1;//strlenȡıָNULLʱ\r\n\t\t}else\r\n\t\t\t*pOffset+=nNeedSize;\r\n\t\tif(*pOffset > pArgInf [0].m_pInt[1])\r\n\t\t\t*pOffset = -1;//ݳ\r\n\t}\r\n\r\nend:\r\n\t__asm{\r\n\t\tmov eax, RetData.m_unit.m_dwFormID;\r\n\t\tmov edx, RetData.m_unit.m_dwUnitID;\r\n\t\tmov ecx, RetData.m_dtDataType;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetBinRegItem.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n#pragma comment(lib,\"advapi32.lib\") \r\n//ϵͳ - ȡֽڼע\r\n/*\r\n    øʽ ֽڼ ȡֽڼע  Ŀ¼ı ȫ·עֽڼ Ĭֽڼݣ - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetBinRegItem\r\n     Windows עзָֽڼעֵȡעĬֵĿӡ\\ţ硰test\\롰ȡֽڼעͬǱȡλôעΪм\r\n    <1>ΪĿ¼ΪͣintΪ³ֵ֮һ 1#ࣻ 2#ã 3#û 4#ػ 5#û\r\n    <2>Ϊȫ·עΪıͣtext\r\n    <3>ΪĬֽڼΪֽڼbinԱʡԡָעڣشĬֽڼָעұʡԣؿֽڼ\r\n*/\r\nLIBAPI(void*, krnln_GetBinRegItem)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tHKEY hRootkey = GetRegRootVal(pArgInf[0].m_int);\r\n\tLPBYTE pBin = NULL;\r\n\tINT nLen = mystrlen(pArgInf[1].m_pText);\r\n\tif(hRootkey && nLen)\r\n\t{\r\n\t\tHKEY hkey;\r\n\t\tLPSTR pSubkey = new char [nLen +1];\r\n\t\tstrcpy(pSubkey,pArgInf[1].m_pText);\r\n\t\tLPSTR pKeyname = strrchr(pSubkey,'\\\\');\r\n\t\tif(pKeyname)\r\n\t\t{\r\n\t\t\t*pKeyname = 0;\r\n\t\t\tpKeyname++;\r\n\t\t}\r\n\t\tif(RegOpenKey(hRootkey,pSubkey,&hkey)==ERROR_SUCCESS)\r\n\t\t{\r\n\t\t\r\n\t\t\tDWORD nLen = 1024;\r\n\t\t\tDWORD dwType = REG_BINARY;\r\n\t\t\tINT nRet;\r\n\t\t\tLPBYTE pData;\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tpData = new BYTE[nLen];\r\n\r\n\t\t\t\tnRet = RegQueryValueEx(hkey,pKeyname,NULL,&dwType,pData,&nLen);\r\n\t\t\t\tif(nRet == ERROR_SUCCESS)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(dwType == REG_BINARY)\r\n\t\t\t\t\t\tpBin = CloneBinData(pData,nLen);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t}else if (nRet == ERROR_MORE_DATA)\r\n\t\t\t\t{\r\n\t\t\t\t\tdelete [] pData;\r\n\r\n\t\t\t\t}else\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}while(1);\r\n\r\n\t\t\tdelete [] pData;\r\n\r\n\t\t\tRegCloseKey(hkey);\r\n\r\n\r\n\t\t}\r\n\t\tdelete [] pSubkey;\r\n\t}\r\n\r\n\tif(pBin == NULL && pArgInf[2].m_dtDataType != _SDT_NULL && pArgInf[2].m_pBin)\r\n\t{\r\n\t\tpBin = CloneBinData(pArgInf[2].m_pBin+2*sizeof(INT),pArgInf[2].m_pInt[1]);\r\n\t}\r\n\treturn pBin;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetClipBoardText.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n//ϵͳ - ȡı\r\n/*\r\n    øʽ ı͡ ȡı  - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetClipBoardText\r\n    شڵǰ Windows ϵͳеıǰıݣؿıΪ\r\n*/\r\nLIBAPI(char*, krnln_GetClipBoardText)\r\n{\r\n\r\n\tchar* pText = NULL;\r\n\tif(OpenClipboard(NULL))\r\n\t{\r\n\t\tHANDLE hClip =  GetClipboardData(CF_TEXT);\r\n\t\tif(hClip)\r\n\t\t{\r\n\t\t\tLPSTR pStr = (LPSTR)GlobalLock(hClip);\r\n\t\t\tpText = CloneTextData(pStr,mystrlen(pStr));\r\n\t\t\tGlobalUnlock(hClip);\r\n\t\t}\r\n\t\tCloseClipboard();\r\n\t}\r\n\treturn pText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetCmdLine.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"mem.h\"\r\n\r\n#pragma comment(lib,\"shell32.lib\") \r\n\r\n//ȡ - ȡ\r\n/*\r\n    øʽ ޷ֵ ȡ ıͱ űȡı - ϵͳֿ֧->ȡ\r\n    ӢƣGetCmdLine\r\n    ȡ׳ʱִļԿոָıΡΪ\r\n    <1>ΪűȡıΪıͣtextṩʱֻṩ顣ִϺ󣬱ڱ˳׳ʱִļԿոָıΡԭݱȫ٣άԶΪı\r\n*/\r\n/*\r\nchar* BMUnicodeToAnsi(LPWSTR lpWstr)\r\n{\r\n\tINT nLen = WideCharToMultiByte(0, 0, lpWstr, -1, NULL, NULL, 0, 0);\r\n\tif(nLen==0)return NULL;\r\n\tchar* pText = (char*)E_MAlloc(nLen +1);\r\n\tWideCharToMultiByte (0, 0, lpWstr, -1,pText, nLen, 0, 0);\r\n\treturn pText;\r\n\r\n}\r\n*/\r\n#define IS_CC(p) p<0\r\n\r\nLIBAPI(void, krnln_GetCmdLine)\r\n{\r\n\tLPWSTR *szArglist;\r\n\tint nArgs, i;\r\n\tint al;\r\n\tchar *pSrc;\r\n\tLPSTR p;\r\n\tCMyDWordArray aryText;\r\n\r\n\tszArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);\r\n\tif (szArglist)\r\n\t{\r\n\t\tfor (i=1; i<nArgs; i++)\r\n\t\t{\r\n\t\t\t//UNICDOEתANSI\r\n\t\t\tal = WideCharToMultiByte(936, NULL, szArglist[i], -1, NULL, NULL, NULL, NULL);\r\n\t\t\tpSrc = NULL;\r\n\t\t\tif (al > 0)\r\n\t\t\t{\r\n\t\t\t\tpSrc = (char*)E_MAlloc_Nzero(al + 1);\r\n\t\t\t\tif (pSrc)\r\n\t\t\t\t{\r\n\t\t\t\t\tal = WideCharToMultiByte(936, NULL, szArglist[i], -1, pSrc, al, NULL, NULL);\r\n\t\t\t\t\tpSrc[al] = 0;\r\n\t\t\t\t}\r\n\t\t\t\taryText.Add ((DWORD)pSrc);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// ! must release memory\r\n\tif(szArglist)\r\n\t\tLocalFree(szArglist);\r\n\r\n\t//!!! ͷԭݡ\r\n\tvoid * pArry = *ArgInf.m_ppAryData;\r\n\tif(pArry)\r\n\t\tFreeAryElement(pArry);\r\n\t\r\n\t// ±ݡ\r\n\tINT nSize = aryText.GetDWordCount () * sizeof (DWORD);\r\n\tp = (LPSTR)E_MAlloc_Nzero (sizeof (INT) * 2 + nSize);\r\n\t*(LPINT)p = 1;  // ά\r\n\t*(LPINT)(p + sizeof (INT)) = aryText.GetDWordCount ();\r\n\tmemcpy (p + sizeof (INT) * 2, aryText.GetPtr (), nSize);\r\n\t*ArgInf.m_ppAryData =  p;  // дظ\r\n}\r\n\r\n/*\r\nextern \"C\" void _cdecl krnln_GetCmdLine (INT nArgCount,MDATA_INF ArgInf,...)\r\n{\r\n/*\r\n\tvoid * pArry = *ArgInf.m_ppAryData;\r\n\tif(pArry)\r\n\t\tFreeAryElement(pArry);\r\n\r\n\tint argCount = 0;\r\n\tLPWSTR* lpArgv = ::CommandLineToArgvW(::GetCommandLineW(), &argCount);\r\n\tLPINT pArryData;\r\n\tif(argCount < 2 )\r\n\t{\r\n\t\tpArryData = (LPINT)E_MAlloc(2 * sizeof(INT));\r\n\t\tpArryData[0]=1;\r\n\t\tpArryData[1]=0;\r\n\t\t*ArgInf.m_ppAryData = pArryData;\r\n\t}\r\n\telse\r\n\t{\r\n\t\targCount --;\r\n\t\tpArryData = (LPINT)E_MAlloc((2+argCount) * sizeof(INT));\r\n\t\tpArryData[0]=1;\r\n\t\tpArryData[1]=argCount;\r\n\t\tLPSTR* pArryText = (LPSTR*)(pArryData+2);\r\n\r\n\t\tfor(INT i=0;i < argCount;i++)\r\n\t\t{\r\n\t\t\tpArryText[i] = BMUnicodeToAnsi(lpArgv[i+1]);\r\n\t\t\t//MessageBox(NULL,pArryText[i],NULL,MB_OK);\r\n\t\t}\r\n\t\t\r\n\r\n\t}\r\n\t*ArgInf.m_ppAryData = pArryData;\r\n\r\n\tGlobalFree(lpArgv);\r\n*/\r\n\r\n/*\r\n\tLPSTR p = GetCommandLine (), pb;\r\n\t// ó\r\n\tchar ch = ' ';\r\n\tif (*p++ == '\\\"')\r\n\t\tch = '\\\"';\r\n\twhile (*p++ != ch);\r\n\tif (ch != ' ' && *p == ' ')  p++;    // һո\r\n\t\r\n\tCMyDWordArray aryText;\r\n\t\r\n\twhile (*p != '\\0')\r\n\t{\r\n\t\tif (*p == '\\\"')\r\n\t\t{\r\n\t\t\tp++;\r\n\t\t\tpb = p;\r\n\t\t\twhile (*pb != '\\0' && *pb != '\\\"')\r\n\t\t\t{\r\n\t\t\t\tif (IS_CC (*pb) == TRUE)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (pb [1] == 0)  break;\r\n\t\t\t\t\tpb++;\r\n\t\t\t\t}\r\n\t\t\t\tpb++;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\taryText.Add ((DWORD)CloneTextData ((char*)p, pb - p));\r\n\t\t\t\r\n\t\t\tp = pb;\r\n\t\t\tif (*p != '\\0')  p++;\r\n\t\t}\r\n\t\telse if (*p > ' ' || *pb<0)\r\n\t\t{\r\n\t\t\tpb = p;\r\n\t\t\twhile (*pb != '\\0' && *pb != '\\\"' && (*pb > ' ' || *pb<0))\r\n\t\t\t{\r\n\t\t\t\tif (IS_CC (*pb) == TRUE)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (pb [1] == 0)  break;\r\n\t\t\t\t\tpb++;\r\n\t\t\t\t}\r\n\t\t\t\tpb++;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\taryText.Add ((DWORD)CloneTextData ((char*)p, pb - p));\r\n\t\t\t\r\n\t\t\tp = pb;\r\n\t\t}\r\n\t\telse\r\n\t\t\tp++;\r\n\t}\r\n\t\r\n\t//!!! ͷԭݡ\r\n\tvoid * pArry = *ArgInf.m_ppAryData;\r\n\tif(pArry)\r\n\t\tFreeAryElement(pArry);\r\n\t\r\n\t// ±ݡ\r\n\tINT nSize = aryText.GetDWordCount () * sizeof (DWORD);\r\n\tp = (LPSTR)E_MAlloc_Nzero (sizeof (INT) * 2 + nSize);\r\n\t*(LPINT)p = 1;  // ά\r\n\t*(LPINT)(p + sizeof (INT)) = aryText.GetDWordCount ();\r\n\tA_memcpy (p + sizeof (INT) * 2, aryText.GetPtr (), nSize);\r\n\t*ArgInf.m_ppAryData =  p;  // дظ\r\n}\r\n*/"
  },
  {
    "path": "krnln/krnln_GetColorCount.cpp",
    "content": "#include \"stdafx.h\"\r\n#pragma comment(lib,\"gdi32.lib\") \r\n//ϵͳ - ȡɫ\r\n/*\r\n    øʽ ͡ ȡɫ  - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetColorCount\r\n    صǰʾʽṩɫʾĿΪ\r\n*/\r\nLIBAPI(int, krnln_GetColorCount)\r\n{\r\n\tHDC hdc = ::GetDC(NULL);\r\n\tINT nRet = GetDeviceCaps(hdc,COLORRES);\r\n\t::ReleaseDC (NULL,hdc);\r\n\treturn (1 << nRet);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetCursorHorzPos.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ϵͳ - ȡˮƽλ\r\n/*\r\n    øʽ ͡ ȡˮƽλ  - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetCursorHorzPos\r\n    ָĵǰˮƽλãλΪص㣬ĻߡΪ\r\n*/\r\nLIBAPI(int, krnln_GetCursorHorzPos)\r\n{\r\n\tPOINT point;\r\n\tif(GetCursorPos(&point))\r\n\t\treturn point.x;\r\n\treturn 0;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetCursorVertPos.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ϵͳ - ȡ괹ֱλ\r\n/*\r\n    øʽ ͡ ȡ괹ֱλ  - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetCursorVertPos\r\n    ָĵǰֱλãλΪص㣬ĻߡΪ\r\n*/\r\nLIBAPI(int, krnln_GetCursorVertPos)\r\n{\r\n\tPOINT point;\r\n\tif(GetCursorPos(&point))\r\n\t\treturn point.y;\r\n\treturn 0;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetDataTypeSize.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n// - ȡͳߴ\r\n/*\r\n    øʽ ͡ ȡͳߴ  ȡߴͣ - ϵͳֿ֧->\r\n    ӢƣGetDataTypeSize\r\n    ȡָ͵ݳߴ磬ͲΪıֽڼûԶ͡Ϊ\r\n    <1>Ϊȡߴ͡ΪͣintֵΪ³\r\n\t1#ֽͣ 2#ͣ 3#ͣ 4#ͣ 5#Сͣ 6#˫Сͣ 7#߼ͣ 8#ʱͣ 9#ӳָ͡\r\n*/\r\nLIBAPI(int, krnln_GetDataTypeSize)\r\n{\r\n\tswitch (ArgInf.m_int)\r\n\t{\r\n\tcase 1://SDT_BYTE:\r\n\t\treturn sizeof (BYTE);\r\n\tcase 2://SDT_SHORT:\r\n\t\tASSERT (sizeof (SHORT) == 2);\r\n\t\treturn sizeof (SHORT);\r\n\tcase 7://SDT_BOOL:\r\n\t\tASSERT (sizeof (BOOL) == 4);\r\n\t\treturn sizeof (BOOL);\r\n\tcase 3://SDT_INT:\r\n\t\tASSERT (sizeof (INT) == 4);\r\n\t\treturn sizeof (INT);\r\n\tcase 5://SDT_FLOAT:\r\n\t\tASSERT (sizeof (FLOAT) == 4);\r\n\t\treturn sizeof (FLOAT);\r\n\tcase 9://SDT_SUB_PTR:    // ¼ӳĵַָ\r\n\t\treturn sizeof (DWORD);\r\n\t//case SDT_TEXT:    // ıͺֽڼΪһָ,Ϊĸֽ.\r\n\t//case SDT_BIN:\r\n\t\t//return sizeof (DWORD);\r\n\tcase 4://SDT_INT64:\r\n\t\tASSERT (sizeof (INT64) == 8);\r\n\t\treturn sizeof (INT64);\r\n\tcase 6://SDT_DOUBLE:\r\n\t\tASSERT (sizeof (DOUBLE) == 8);\r\n\t\treturn sizeof (DOUBLE);\r\n\tcase 8://SDT_DATE_TIME:\r\n\t\tASSERT (sizeof (DATE) == 8);\r\n\t\treturn sizeof (DATE);\r\n\tdefault:\r\n\t\tASSERT (FALSE);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\treturn 0;\r\n\r\n\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetDatePart.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n//ʱ - ȡ\r\n/*\r\n    øʽ ʱ͡ ȡ ʱ ʱ䣩 - ϵͳֿ֧->ʱ\r\n    ӢƣGetDatePart\r\n    һʱݵڲ֣Сʱӡ뱻̶Ϊ0ʱ00롣Ϊ\r\n    <1>Ϊʱ䡱Ϊʱͣdate\r\n*/\r\nLIBAPI(void, krnln_GetDatePart) // ֱ޸eaxedx,ԲҪֵָ\r\n{\r\n\tDATE objDate;\r\n\tDATE dt = modf(ArgInf.m_date,&objDate);\r\n\tArgInf.m_date = objDate;\r\n\t__asm{\r\n\t\tmov eax, ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx, ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetDaysOfSpecMonth.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ʱ - ȡĳ\r\n/*\r\n    øʽ ͡ ȡĳ  ݣ ·ݣ - ϵͳֿ֧->ʱ\r\n    ӢƣGetDaysOfSpecMonth\r\n    ָ··Ч0Ϊ\r\n    <1>ΪݡΪͣintֵ 100  9999\r\n    <2>Ϊ·ݡΪͣintֵ 1  12\r\n*/\r\nLIBAPI(int, krnln_GetDaysOfSpecMonth)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[1].m_int <=0 || pArgInf[1].m_int >12 || pArgInf[0].m_int <100 || pArgInf[1].m_int>9999)\r\n\t\treturn 0;\r\n\treturn GetDaysOfSpecMonth(pArgInf[0].m_int,pArgInf[1].m_int);\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetDiskFreeSpace.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//̲ - ȡʣռ\r\n/*\r\n    øʽ ͡ ȡʣռ ı ַݣ - ϵͳֿ֧->̲\r\n    ӢƣGetDiskFreeSpace\r\n     1024 ֽڣKBΪλָʣռ䡣ʧܣ-1Ϊ\r\n    <1>ΪַΪıͣtextԱʡԡơABCȣֻȡøıĵһַʡԣĬʹõǰ\r\n\r\n*/\r\nLIBAPI(int, krnln_GetDiskFreeSpace)\r\n{\r\n\tchar DirName [MAX_PATH];\r\n\tif(ArgInf.m_dtDataType == _SDT_NULL)\r\n\t{\r\n\t\tif(GetCurrentDirectory(MAX_PATH,DirName)==0)\r\n\t\t\treturn -1;\r\n\t\tDirName[2]=0;\r\n\r\n\t}\r\n\telse\r\n\t{\r\n\t\tif(mystrlen(ArgInf.m_pText)==0)\r\n\t\t\treturn -1;\r\n\r\n\t\tDirName[0]=*ArgInf.m_pText;\r\n\t\tDirName[1]=':';\r\n\t\tDirName[2]=0;\r\n\r\n\t}\r\n\tULARGE_INTEGER FreeBytesAvailableToCaller, TotalNumberOfBytes, TotalNumberOfFreeBytes;\r\n\r\n\tif(GetDiskFreeSpaceEx(DirName,&FreeBytesAvailableToCaller,&TotalNumberOfBytes,&TotalNumberOfFreeBytes))\r\n\t{\r\n\t\tINT nRet = INT(FreeBytesAvailableToCaller.QuadPart/1024);\r\n\t\treturn nRet;\r\n\t}\r\n\treturn -1;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetDiskLabel.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//̲ - ȡ̾\r\n/*\r\n    øʽ ı͡ ȡ̾ ı ַݣ - ϵͳֿ֧->̲\r\n    ӢƣGetDiskLabel\r\n    ̵ָľıΪ\r\n    <1>ΪַΪıͣtextԱʡԡơABCȣֻȡøıĵһַʡԣĬʹõǰ\r\n\r\n*/\r\nLIBAPI(char*, krnln_GetDiskLabel)\r\n{\r\n\tchar DirName [MAX_PATH];\r\n\tif(ArgInf.m_dtDataType == _SDT_NULL)\r\n\t{\r\n\t\tif(GetCurrentDirectory(MAX_PATH,DirName)==0)\r\n\t\t\treturn NULL;\r\n\t\tDirName[3]=0;\r\n\r\n\t}\r\n\telse\r\n\t{\r\n\t\tif(mystrlen(ArgInf.m_pText)==0)\r\n\t\t\treturn NULL;\r\n\r\n\t\tDirName[0]=*ArgInf.m_pText;\r\n\t\tDirName[1]=':';\r\n\t\tDirName[2]='\\\\';\r\n\t\tDirName[3]=0;\r\n\r\n\t}\r\n\r\n\tchar* pText = NULL;\r\n\tchar strVolume [MAX_PATH];\r\n\tchar FileSystemNameBuffer [64];\r\n\tDWORD VolumeSerialNumber;\r\n\r\n\tif(GetVolumeInformation(DirName,strVolume,MAX_PATH,\r\n\t\t&VolumeSerialNumber,\r\n\t\tNULL,\r\n\t\tNULL,\r\n\t\tFileSystemNameBuffer,\r\n\t\t64))\r\n\t{\r\n\t\tINT nLen = mystrlen(strVolume);\r\n\t\tpText = CloneTextData(strVolume,nLen);\r\n\r\n\t}\r\n\treturn pText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetDiskTotalSpace.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//̲ - ȡܿռ\r\n/*\r\n    øʽ ͡ ȡܿռ ı ַݣ - ϵͳֿ֧->̲\r\n    ӢƣGetDiskTotalSpace\r\n     1024 ֽڣKBΪλָȫռ䡣ʧܣ-1Ϊ\r\n    <1>ΪַΪıͣtextԱʡԡơABCȣֻȡøıĵһַʡԣĬʹõǰ\r\n*/\r\nLIBAPI(int, krnln_GetDiskTotalSpace)\r\n{\r\n\tchar DirName [MAX_PATH];\r\n\tif(ArgInf.m_dtDataType == _SDT_NULL)\r\n\t{\r\n\t\tif(GetCurrentDirectory(MAX_PATH,DirName)==0)\r\n\t\t\treturn -1;\r\n\t\tDirName[2]=0;\r\n\r\n\t}\r\n\telse\r\n\t{\r\n\t\tif(mystrlen(ArgInf.m_pText)==0)\r\n\t\t\treturn -1;\r\n\r\n\t\tDirName[0]=*ArgInf.m_pText;\r\n\t\tDirName[1]=':';\r\n\t\tDirName[2]=0;\r\n\r\n\t}\r\n\t//ULARGE_INTEGER FreeBytesAvailableToCaller, TotalNumberOfBytes, TotalNumberOfFreeBytes;\r\n\tDWORD SectorsPerCluster, BytesPerSector, NumberOfFreeClusters, nNumerator;\r\n\r\n\tif (GetDiskFreeSpace(DirName, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &nNumerator))\r\n\t{\r\n\t\tint nRet = int(MulDiv(BytesPerSector * SectorsPerCluster, nNumerator, 1024));\r\n\t\treturn nRet;\r\n\t}\r\n// \tif(GetDiskFreeSpaceEx(DirName,&FreeBytesAvailableToCaller,&TotalNumberOfBytes,&TotalNumberOfFreeBytes))\r\n// \t{\r\n// \t\tINT nRet = INT(TotalNumberOfBytes.QuadPart/1024);\r\n// \t\treturn nRet;\r\n// \t}\r\n\treturn -1;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetEnv.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ȡ - \r\n/*\r\n    øʽ ı͡  ı ƣ - ϵͳֿ֧->ȡ\r\n    ӢƣGetEnv\r\n    ıһϵͳɹʱȡõֵʧ򷵻ؿıΪ\r\n    <1>ΪơΪıͣtext\r\n*/\r\nLIBAPI(char*, krnln_GetEnv)\r\n{\r\n\tchar* pBuf ;\r\n\tUINT nLen = MAX_PATH;\r\n\tUINT nRet;\r\nredo:\r\n\tpBuf = (char*)E_MAlloc(nLen);\r\n\tnRet = GetEnvironmentVariable(ArgInf.m_pText,pBuf,nLen);\r\n\tif(nRet > nLen)\r\n\t{\r\n\t\tE_MFree(pBuf);\r\n\t\tnLen = nRet;\r\n\t\tgoto redo;\r\n\t}\r\n\treturn pBuf;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetHDiskCode.cpp",
    "content": "#include \"stdafx.h\"\r\n/*\r\n    øʽ ͡ ȡӲ  - ϵͳֿ֧->\r\n    ӢƣGetHDiskCode\r\n    صеһӲ̵֣ǽӲصģҲ˵κϵͳ޹أϵͳûʹôԼĳĳһ̨УԱԼİȨκ Windows ϵͳ汾Сִк 0 ʾ˴ȡӲʧܡпΪʱ I/O ͻɣʧܺԵȴһʱԣԲο̣ظκȻʧܣӲ޷ȡ֡Ϊ\r\n*/\r\nextern DWORD __cdecl krnln_GetHD___Code(int *a1);\r\n\r\nLIBAPI(DWORD, krnln_GetHDiskCode)\r\n{\r\n  return krnln_GetHD___Code(NULL);\r\n}"
  },
  {
    "path": "krnln/krnln_GetHostName.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n#pragma comment(lib,\"WS2_32.LIB\")\r\n//ͨ - ȡ\r\n/*\r\n    øʽ ı͡ ȡ  - ϵͳֿ֧->ͨ\r\n    ӢƣGetHostName\r\n    رͨѶб־ַΪ\r\n*/\r\nLIBAPI(void*, krnln_GetHostName)\r\n{\r\n\tWSAData wsaData;\r\n\tLPSTR pText=NULL;\r\n\tif(WSAStartup(MAKEWORD(2,2),&wsaData)==0)\r\n\t{\r\n\t\tchar hst[MAX_PATH];\r\n\t\tif(gethostname(hst,MAX_PATH)==0)\r\n\t\t{\r\n\t\t\tpText=CloneTextData(hst,mystrlen(hst));\r\n\t\t}\r\n\t\tWSACleanup ();\r\n\t}\r\n\treturn pText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetIntInsideBin.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n// øʽ ͡ ȡֽڼ ֽڼ ֽڼ ȡƫƣ߼ Ƿתֽݣ - ϵͳֿ֧->ֽڼ\r\n// ӢƣGetIntInsideBin\r\n// ֽڼָλôΪ\r\n// <1>ΪֽڼΪֽڼbinṩֽڼ\r\n// <2>ΪȡƫơΪͣintṩȡֵֽڼеƫλá\r\n// <3>ΪǷתֽ򡱣Ϊ߼ͣboolԱʡԡָǷȡֵֽзת,Ʃʮ0x12345678,תΪ0x78563412. JavaԽݽʱô. ʡԣĬֵΪ.\r\n// \r\n// ϵͳ WindowsLinux\r\n\r\nLIBAPI(int, krnln_GetIntInsideBin)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\r\n\tLPBYTE pSrc = pArgInf[0].m_pBin;\r\n\tif (!pSrc) return 0;\r\n\t\r\n\tint nLen = pArgInf[0].m_pInt[1];\r\n\tint off = pArgInf[1].m_int;\r\n\tif (nLen - off < 4) return 0;\r\n\t\r\n\tint nValue = *(LPINT)(pSrc + off + 2*sizeof(int));\r\n\tif (pArgInf[2].m_dtDataType != _SDT_NULL && pArgInf[2].m_bool)\r\n\t{\r\n\t\tunsigned int nTmp = (unsigned int)nValue;\r\n\t\tnValue = nTmp >> 24;\r\n\t\tnValue |= ((nTmp & 0x00FF0000) >> 8);\r\n\t\tnValue |= ((nTmp & 0x0000FF00) << 8);\r\n\t\tnValue |= ((nTmp & 0x000000FF) << 24);\r\n\t}\r\n\treturn nValue;\r\n}"
  },
  {
    "path": "krnln/krnln_GetKeyText.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ϵͳ - \r\n/*\r\n    øʽ ı͡  ı ļı ƣı ƣı Ĭıݣ - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetKeyText\r\n    ȡָļָĿıݡΪ\r\n    <1>ΪļΪıͣtextָļƣͨ.iniΪļ׺\r\n    <2>ΪơΪıͣtextڵơ\r\n    <3>ΪơΪıͣtextֵָеơ\r\n    <4>ΪĬıΪıͣtextԱʡԡָڣشĬıָұʡԣؿı\r\n*/\r\nLIBAPI(char*, krnln_GetKeyText)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tLPSTR pBuff = NULL;\r\n\tINT nLen = 1024;\r\n\tdo\r\n\t{\r\n\r\n\t\tpBuff = new char[nLen];\r\n\t\tINT nRet = GetPrivateProfileString (pArgInf[1].m_pText, pArgInf[2].m_pText, pArgInf[3].m_pText, pBuff, nLen, pArgInf[0].m_pText);\r\n\r\n\t\tif(nRet < nLen-1)\r\n\t\t\tbreak;\r\n\t\tnLen = nRet+1024;\r\n\t\tdelete[] pBuff;\r\n\t}while(1);\r\n\r\n\tLPSTR pText = NULL;\r\n\tnLen = mystrlen(pBuff);\r\n\tif(nLen)\r\n\t{\r\n\t\tpText = CloneTextData(pBuff,nLen);\r\n\t}\r\n\tdelete[] pBuff;\r\n\treturn pText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetLastError.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ϵͳ - ȡ\r\n/*\r\n    øʽ ͡ ȡ  - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetLastError\r\n    òϵͳGetLastError,ظAPIúķֵ.Ϊ\r\n\t\r\n\tϵͳ Windows\r\n*/\r\nLIBAPI(INT, krnln_GetLastError)\r\n{\r\n\treturn GetLastError();\r\n}"
  },
  {
    "path": "krnln/krnln_GetNumRegItem.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n#pragma comment(lib,\"advapi32.lib\") \r\n//ϵͳ - ȡֵע\r\n/*\r\n    øʽ ͡ ȡֵע  Ŀ¼ı ȫ·ע Ĭֵݣ - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetNumRegItem\r\n     Windows עзֵָעֵȡעĬֵĿӡ\\ţ硰test\\롰ȡֵעͬǱȡλôעΪм\r\n    <1>ΪĿ¼ΪͣintΪ³ֵ֮һ 1#ࣻ 2#ã 3#û 4#ػ 5#û\r\n    <2>Ϊȫ·עΪıͣtext\r\n    <3>ΪĬֵΪͣintԱʡԡָעڣشĬֵָעұʡԣֵ 0\r\n*/\r\nLIBAPI(int, krnln_GetNumRegItem)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tHKEY hRootkey = GetRegRootVal(pArgInf[0].m_int);\r\n\tBOOL bOk = FALSE;\r\n\tINT nRetVal = 0;\r\n\tINT nLen = mystrlen(pArgInf[1].m_pText);\r\n\tif(hRootkey && nLen)\r\n\t{\r\n\t\tHKEY hkey;\r\n\t\tLPSTR pSubkey = new char [nLen +1];\r\n\t\tstrcpy(pSubkey,pArgInf[1].m_pText);\r\n\t\tLPSTR pKeyname = strrchr(pSubkey,'\\\\');\r\n\t\tif(pKeyname)\r\n\t\t{\r\n\t\t\t*pKeyname = 0;\r\n\t\t\tpKeyname++;\r\n\t\t}\r\n\t\tif(RegOpenKey(hRootkey,pSubkey,&hkey)==ERROR_SUCCESS)\r\n\t\t{\r\n\t\t\r\n\t\t\tDWORD nLen = 4;\r\n\t\t\tDWORD dwType = REG_DWORD;\r\n\r\n\t\t\tif(ERROR_SUCCESS == RegQueryValueEx(hkey,pKeyname,NULL,&dwType,(LPBYTE)&nRetVal,&nLen))\r\n\t\t\t{\r\n\t\t\t\tif(dwType == REG_DWORD)\r\n\t\t\t\t\tbOk = TRUE;\r\n\t\t\t}\r\n\r\n\t\t\tRegCloseKey(hkey);\r\n\r\n\t\t}\r\n\t\tdelete [] pSubkey;\r\n\t}\r\n\r\n\tif(bOk == FALSE && pArgInf[2].m_dtDataType != _SDT_NULL)\r\n\t{\r\n\t\tnRetVal = pArgInf[2].m_int;\r\n\t}\r\n\treturn nRetVal;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetRunFileName.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ȡ - ȡִļ\r\n/*\r\n    øʽ ı͡ ȡִļ  - ϵͳֿ֧->ȡ\r\n    ӢƣGetRunFileName\r\n    ȡǰִе׳ļơΪ\r\n*/\r\nLIBAPI(char*, krnln_GetRunFileName)\r\n{\r\n\tchar strFile[MAX_PATH];\r\n\tint nLen;\r\n\tchar* pSrc = strFile;\r\n\r\n\tif(::GetModuleFileName(NULL,strFile,MAX_PATH))\r\n\t{\r\n\t\tnLen = mystrlen(strFile);\r\n\t\tchar* pFind = strFile+nLen;\r\n\t\tdo{\r\n\t\t\tpFind --;\r\n\t\t\tif(*pFind == '\\\\')\r\n\t\t\t{\r\n\t\t\t\tpSrc = pFind +1;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t}while(pFind > strFile);\r\n\t}\r\n\r\n\tnLen = mystrlen(pSrc);\r\n\tchar *pText = (char*)E_MAlloc_Nzero(nLen+1);\r\n\tstrcpy(pText,pSrc);\r\n\treturn pText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetRunPath.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ȡ - ȡĿ¼\r\n/*\r\n    øʽ ı͡ ȡĿ¼  - ϵͳֿ֧->ȡ\r\n    ӢƣGetRunPath\r\n    ȡǰִе׳ļĿ¼Ϊ\r\n*/\r\nLIBAPI(char*, krnln_GetRunPath)\r\n{\r\n\tchar strFile[MAX_PATH];\r\n\tint nLen;\r\n\r\n\tif(::GetModuleFileName(NULL,strFile,MAX_PATH))\r\n\t{\r\n\t\tnLen = mystrlen(strFile);\r\n\t\tchar* pFind = strFile+nLen;\r\n\t\tdo{\r\n\t\t\tpFind --;\r\n\t\t\tif(*pFind == '\\\\')\r\n\t\t\t{\r\n\t\t\t\t*pFind = 0;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t}while(pFind > strFile);\r\n\t}\r\n\r\n\tnLen = mystrlen(strFile);\r\n\tchar *pText = (char*)E_MAlloc_Nzero(nLen+1);\r\n\tstrcpy(pText,strFile);\r\n\treturn pText;\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetRuntimeDataType.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n/*\r\n\tøʽ ͡ȡʱ (ͨ ȡ͵)\r\n\tӢƣGetRuntimeDataType\r\n\tṩʱֵ. ע: \r\n\tڳϵͳֿֿ֧֧ж,ôÿһγֵܻᷢ仯(Ϊʱضλԭ),\r\n\tڳйиֵǲ仯.,ݵκʱʼһ㶨ֵ.\r\n\t<1>Ϊȡ͵ݡΪͨ͡ȡʱ͵\r\n*/\t\r\nLIBAPI(int, krnln_GetRuntimeDataType)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\treturn (int)pArgInf [0].m_dtDataType;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetScreenHeight.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ϵͳ - ȡĻ߶\r\n/*\r\n    øʽ ͡ ȡĻ߶  - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetScreenHeight\r\n    Ļǰʾĸ߶ȣλΪص㡣Ϊ\r\n*/\r\n\r\nLIBAPI(int, krnln_GetScreenHeight)\r\n{\r\n\treturn GetSystemMetrics(SM_CYSCREEN);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetScreenWidth.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ϵͳ - ȡĻ\r\n/*\r\n    øʽ ͡ ȡĻ  - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetScreenWidth\r\n    ĻǰʾĿȣλΪص㡣Ϊ\r\n*/\r\nLIBAPI(int, krnln_GetScreenWidth)\r\n{\r\n\treturn GetSystemMetrics(SM_CXSCREEN);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetSectionNames.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"mem.h\"\r\n#include \"Myfunctions.h\"\r\n//ϵͳ - ȡý\r\n/*\r\n    øʽ ı页 ȡý ı ļ - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetSectionNames\r\n    ָļнı顣Ϊ\r\n    <1>ΪļΪıͣtextָļƣͨ.iniΪļ׺\r\n\r\n*/\r\nLIBAPI(void*, krnln_GetSectionNames)\r\n{\r\n\tCMyDWordArray aryText;\r\n#define   MAX_ALLSECTIONS   0x32000 \r\n//\tLPSTR pBuff = NULL;\r\n\tINT nLen = MAX_ALLSECTIONS;\r\n//\tdo\r\n//\t{\r\n//\t\tpBuff = new char[nLen+1];\r\n\t\tchar pBuff [MAX_ALLSECTIONS];\r\n\t\tINT nRet = GetPrivateProfileSectionNames(pBuff, MAX_ALLSECTIONS, ArgInf.m_pText);\r\n\t\t\t\t\r\n//\t\tif(nRet < nLen)\r\n//\t\t{\r\n\t\t\tif(nRet >0)\r\n\t\t\t{\r\n\t\t\t\tLPSTR pText = pBuff;\r\n\t\t\t\tLPSTR pEnd = pText + nRet;\r\n\t\t\t\twhile(*pText !=0 && pText < pEnd)\r\n\t\t\t\t{\r\n\t\t\t\t\tnLen = mystrlen(pText);\r\n\t\t\t\t\taryText.Add ((DWORD)CloneTextData (pText, nLen));\r\n\t\t\t\t\tpText+=(nLen+1);\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\t//delete[] pBuff;\r\n\t\t\t//break;\r\n//\t\t}\r\n\t\t//nLen = nRet;\r\n//\t\tdelete[] pBuff;\r\n//\t}while(1);\r\n\r\n\t\r\n\r\n\t\r\n\t// ±ݡ\r\n\tINT nSize = aryText.GetDWordCount () * sizeof (DWORD);\r\n\tLPSTR p = (LPSTR)E_MAlloc_Nzero (sizeof (INT) * 2 + nSize);\r\n\t*(LPINT)p = 1;  // ά\r\n\t*(LPINT)(p + sizeof (INT)) = aryText.GetDWordCount ();\r\n\tmemcpy (p + sizeof (INT) * 2, aryText.GetPtr (), nSize);\r\n\treturn  p;  // дظ\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetSpecTime.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ʱ - ָʱ\r\n/*\r\n    øʽ ʱ͡ ָʱ  ꣬ £ݣ գݣ Сʱݣ ӣݣ ݣ - ϵͳֿ֧->ʱ\r\n    ӢƣGetSpecTime\r\n    ذָꡢ¡աСʱ֡ʱ䡣ָЧʱ䣬ԶʹЧʱ档Ϊ\r\n    <1>ΪꡱΪͣint\r\n    <2>Ϊ¡ΪͣintԱʡԡʡԣĬΪ 1 ¡\r\n    <3>ΪաΪͣintԱʡԡʡԣĬΪ 1 ա\r\n    <4>ΪСʱΪͣintԱʡԡʡԣĬΪ 0 ʱ\r\n    <5>ΪӡΪͣintԱʡԡʡԣĬΪ 0 ӡ\r\n    <6>Ϊ롱ΪͣintԱʡԡʡԣĬΪ 0 롣\r\n*/\r\nLIBAPI(void, krnln_GetSpecTime) // ֱ޸eaxeax,ԲҪֵָ\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\t\r\n\tINT nYear, nMonth, nDay;\r\n\tINT nHour, nMinute, nSecond;\r\n\tnYear = pArgInf[0].m_int;\r\n\tif(nYear < 100) nYear =100;\r\n\r\n\tif(pArgInf[1].m_dtDataType ==_SDT_NULL)\r\n\t\tnMonth = 1;\r\n\telse\r\n\t{\r\n\t\tnMonth = pArgInf[1].m_int;\r\n\t\tif(nMonth < 1)\r\n\t\t\tnMonth =1;\r\n\t\telse if (nMonth > 12)\r\n\t\t\tnMonth =12;\r\n\t}\r\n\r\n\tif(pArgInf[2].m_dtDataType ==_SDT_NULL)\r\n\t\tnDay = 1;\r\n\telse\r\n\t{\r\n\t\tnDay = pArgInf[2].m_int;\r\n\t\tif(nDay < 1)\r\n\t\t\tnDay = 1;\r\n\t\telse\r\n\t\t{\r\n\t\t\tINT nMaxDay = GetDaysOfSpecMonth(nYear,nMonth);\r\n\t\t\tif(nDay > nMaxDay)\r\n\t\t\t\tnDay = nMaxDay;\r\n\t\t}\r\n\t}\r\n\r\n\tnHour = pArgInf[3].m_int;\r\n\tif(nHour < 0)\r\n\t\tnHour = 0;\r\n\telse if (nHour > 23)\r\n\t\tnHour = 23;\r\n\r\n\tnMinute = pArgInf[4].m_int;\r\n\tif(nMinute < 0)\r\n\t\tnMinute = 0;\r\n\telse if (nMinute > 59)\r\n\t\tnMinute = 59;\r\n\r\n\tnSecond = pArgInf[5].m_int;\r\n\tif(nSecond < 0)\r\n\t\tnSecond = 0;\r\n\telse if (nSecond > 59)\r\n\t\tnSecond = 59;\r\n\r\n\tArgInf.m_double = GetSpecDateTime(nYear, nMonth, nDay, nHour, nMinute, nSecond);\r\n\t__asm{\r\n\t\tmov eax, ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx, ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetSysVer.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n#define VER_NT_WORKSTATION              0x0000001\r\n#define VER_NT_DOMAIN_CONTROLLER        0x0000002\r\n#define VER_NT_SERVER                   0x0000003\r\ntypedef   struct   OSVERSIONINFOEX1\r\n{ \r\n\tDWORD   dwOSVersionInfoSize; \r\n\tDWORD   dwMajorVersion; \r\n\tDWORD   dwMinorVersion; \r\n\tDWORD   dwBuildNumber; \r\n\tDWORD   dwPlatformId; \r\n\tWCHAR     szCSDVersion[128];           //   Maintenance   string   for   PSS   usage\r\n\tWORD       wServicePackMajor; \r\n\tWORD       wServicePackMinor; \r\n\tWORD       wSuiteMask; \r\n\tBYTE     wProductType; \r\n\tBYTE     wReserved; \r\n}   OSVERSIONINFOEXW1; \r\n\r\n#if _MSC_VER >= 1916 //VS2017 VS2019\r\ntypedef BOOL (WINAPI *MyGetVersionExA)(_Inout_ LPOSVERSIONINFOA lpVersionInformation);\r\n#endif\r\n\r\n//ϵͳ - ȡϵͳ\r\n/*\r\n    øʽ ͡ ȡϵͳ  - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetSysVer\r\n    صǰϵͳİ汾𡣷ֵΪֵ֮һ0δ֪ 1Windows 32S 2Windows 9X (Win95Win98WinME) 3Windows NT (WinNTWin2000WinXP) 4LinuxΪ\r\n*/\r\nLIBAPI(int, krnln_GetSysVer)\r\n{\r\n\tOSVERSIONINFO VersionInformation;\r\n\tINT nRet = 0;\r\n\tmemset(&VersionInformation,0,sizeof(OSVERSIONINFO));\r\n\tVersionInformation.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);\r\n\r\n#if _MSC_VER >= 1916 //VS2017 VS2019\r\n\tHMODULE hKernel32 = GetModuleHandle(\"Kernel32.dll\");\r\n\tif (!hKernel32)\r\n\t\treturn 0;\r\n\tMyGetVersionExA MyGetVersion = (MyGetVersionExA)GetProcAddress(hKernel32, \"GetVersionExA\");\r\n\tif (!MyGetVersion)\r\n\t\treturn 0;\r\n\tif (MyGetVersion(&VersionInformation))\r\n#else\r\n\tif(GetVersionEx(&VersionInformation))\r\n#endif\r\n\t{\r\n\t\tswitch(VersionInformation.dwPlatformId)\r\n\t\t{\r\n\t\tcase VER_PLATFORM_WIN32s:\r\n\t\t\tnRet = 1;\r\n\t\t\tbreak;\r\n\t\tcase VER_PLATFORM_WIN32_WINDOWS:\r\n\t\t\tnRet = 2;\r\n\t\t\tbreak;\r\n\t\tcase VER_PLATFORM_WIN32_NT:\r\n\t\t\tnRet = 3;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t}\r\n\treturn nRet;\r\n\r\n}\r\n\r\n\r\n//ϵͳ - ȡϵͳ2\r\n/*\r\n    øʽ ͡ ȡϵͳ2  - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetSysVer2\r\n    صǰϵͳİ汾𡣷ֵΪֵ֮һ0δ֪ 1Windows 32S 2Windows 9X (Win95Win98WinME) 3Windows NTϵͳ(г) \r\n\t4Linux 5Windows 10 6Windows Server 2016 Technical Preview 7Windows 8.1 8Windows Server 2012 R2 9Windows 8 10Windows Server 2012 \r\n\t11Windows 7 12Windows Server 2008 R2 13Windows Server 2008 14Windows VistaΪ\r\n*/\r\n\r\nLIBAPI(int, krnln_GetSysVer2)\r\n{\r\n\tOSVERSIONINFOEX1 VerInfoEx;\r\n\tINT nRet = 0;\r\n\tmemset(&VerInfoEx,0,sizeof(OSVERSIONINFOEX1));\r\n\tVerInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX1);\r\n\r\n#if _MSC_VER >= 1916 //VS2017 VS2019\r\n\tHMODULE hKernel32 = GetModuleHandle(\"Kernel32.dll\");\r\n\tif (!hKernel32)\r\n\t\treturn 0;\r\n\tMyGetVersionExA MyGetVersion = (MyGetVersionExA)GetProcAddress(hKernel32, \"GetVersionExA\");\r\n\tif (!MyGetVersion)\r\n\t\treturn 0;\r\n\tif (MyGetVersion((OSVERSIONINFO*)&VerInfoEx))\r\n#else\r\n\tif(GetVersionEx((OSVERSIONINFO*)&VerInfoEx))\r\n#endif\r\n\t{\r\n\t\tswitch(VerInfoEx.dwPlatformId)\r\n\t\t{\r\n\t\tcase VER_PLATFORM_WIN32s:\r\n\t\t\tnRet = 1; //Windows 32S\r\n\t\t\tbreak;\r\n\t\tcase VER_PLATFORM_WIN32_WINDOWS:\r\n\t\t\tnRet = 2; //Windows 9X (Win95Win98WinME)\r\n\t\t\tbreak;\r\n\t\tcase VER_PLATFORM_WIN32_NT:\r\n\t\t\tswitch (VerInfoEx.dwMajorVersion)\r\n\t\t\t{\r\n\t\t\tcase 10:\r\n\t\t\t\tif (VerInfoEx.wProductType==VER_NT_WORKSTATION)\r\n\t\t\t\t\tnRet = 5; //Windows 10\r\n\t\t\t\telse\r\n\t\t\t\t\tnRet = 6; //Windows Server 2016 Technical Preview\r\n\t\t\t\r\n\t\t\t\tbreak;\r\n\t\t\tcase 6:\r\n\t\t\t\tswitch (VerInfoEx.dwMinorVersion)\r\n\t\t\t\t{\r\n\t\t\t\tcase 3:\r\n\t\t\t\t\tif (VerInfoEx.wProductType==VER_NT_WORKSTATION)\r\n\t\t\t\t\t\tnRet = 7; //Windows 8.1\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tnRet = 8; //Windows Server 2012 R2\r\n\t\t\t\t\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\tif (VerInfoEx.wProductType==VER_NT_WORKSTATION)\r\n\t\t\t\t\t\tnRet = 9; //Windows 8\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tnRet = 10; //Windows Server 2012\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 1:\r\n\t\t\t\t\tif (VerInfoEx.wProductType==VER_NT_WORKSTATION)\r\n\t\t\t\t\t\tnRet = 11; //Windows 7\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tnRet = 12; //Windows Server 2008 R2\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif (VerInfoEx.wProductType==VER_NT_WORKSTATION)\r\n\t\t\t\t\t\tnRet = 14; //Windows Vista\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tnRet = 13; //Windows Server 2008\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tnRet = 3; //Windows NTϵͳ(г)\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn nRet;\r\n}"
  },
  {
    "path": "krnln/krnln_GetTempFileName.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <SHLWAPI.h>\r\n#include \"Myfunctions.h\"\r\n#pragma comment(lib,\"SHLWAPI.lib\") \r\n//̲ - ȡʱļ\r\n/*\r\n    øʽ ı͡ ȡʱļ ı Ŀ¼ݣ - ϵͳֿ֧->̲\r\n    ӢƣGetTempFileName\r\n    һָĿ¼ȷڵ .TMP ȫ·ļơΪ\r\n    <1>ΪĿ¼ΪıͣtextԱʡԡʡԱĬϽʹϵͳı׼ʱĿ¼\r\n*/\r\nLIBAPI(char*, krnln_GetTempFileName)\r\n{\r\n\tchar DirName [MAX_PATH];\r\n\tif(ArgInf.m_dtDataType == _SDT_NULL)\r\n\t{\r\n\t\tif(GetTempPath(MAX_PATH,DirName)==FALSE)\r\n\t\t\tDirName[0]=0;\r\n\t}\r\n\telse\r\n\t\tstrcpy(DirName,ArgInf.m_pText);\r\n\r\n\tchar* pText = NULL;\r\n\tchar TempFileName [MAX_PATH];\r\n\tINT nLen = mystrlen(DirName);\r\n\tif(DirName[nLen-1]!='\\\\')\r\n\t\tDirName[nLen]='\\\\';\r\n\tdo{\r\n\t\twsprintf(TempFileName, \"%s%x.tmp\", DirName,GetTickCount());\r\n\t}while(PathFileExists(TempFileName));\r\n\r\n\r\n//\tif(GetTempFileName(DirName,\"14f\",0,TempFileName))\r\n//\t{\r\n\t\tnLen = mystrlen(TempFileName);\r\n\t\tpText = (char*)E_MAlloc_Nzero(nLen+1);\r\n\t\tstrcpy(pText,TempFileName);\r\n//\t}\r\n\treturn pText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetTextRegItem.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n#pragma comment(lib,\"advapi32.lib\") \r\n\r\n//ϵͳ - ȡıע\r\n/*\r\n    øʽ ı͡ ȡıע  Ŀ¼ı ȫ·עı Ĭıݣ - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetTextRegItem\r\n     Windows עзָıעֵȡעĬֵĿӡ\\ţ硰test\\롰ȡıעͬǱȡλôעΪм\r\n    <1>ΪĿ¼ΪͣintΪ³ֵ֮һ 1#ࣻ 2#ã 3#û 4#ػ 5#û\r\n    <2>Ϊȫ·עΪıͣtext\r\n    <3>ΪĬıΪıͣtextԱʡԡָעڣشĬıָעұʡԣһΪ 0 Ŀı\r\n*/\r\nLIBAPI(char*, krnln_GetTextRegItem)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tHKEY hRootkey = GetRegRootVal(pArgInf[0].m_int);\r\n\tLPSTR pText = NULL;\r\n\tINT nLen = mystrlen(pArgInf[1].m_pText);\r\n\tif(hRootkey && nLen)\r\n\t{\r\n\t\tHKEY hkey;\r\n\t\tLPSTR pSubkey = new char [nLen +1];\r\n\t\tstrcpy(pSubkey,pArgInf[1].m_pText);\r\n\t\tLPSTR pKeyname = strrchr(pSubkey,'\\\\');\r\n\t\tif(pKeyname)\r\n\t\t{\r\n\t\t\t*pKeyname = 0;\r\n\t\t\tpKeyname++;\r\n\t\t}\r\n\t\tif(RegOpenKey(hRootkey,pSubkey,&hkey)==ERROR_SUCCESS)\r\n\t\t{\r\n\t\t\r\n\t\t\tDWORD nLen = 1024;\r\n\t\t\tDWORD dwType = REG_SZ;\r\n\t\t\tINT nRet;\r\n\t\t\tLPSTR pData;\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tpData = new char[nLen];\r\n\r\n\t\t\t\tnRet = RegQueryValueEx(hkey,pKeyname,NULL,&dwType,(LPBYTE)pData,&nLen);\r\n\t\t\t\tif(nRet == ERROR_SUCCESS)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(dwType == REG_SZ || dwType == REG_EXPAND_SZ)\r\n\t\t\t\t\t\tpText = CloneTextData(pData,mystrlen(pData));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t}else if (nRet == ERROR_MORE_DATA)\r\n\t\t\t\t{\r\n\t\t\t\t\tdelete [] pData;\r\n\r\n\t\t\t\t}else \t\r\n\t\t\t\t\tbreak;\r\n\r\n\r\n\t\t\t}while(1);\r\n\r\n\t\t\tdelete [] pData;\r\n\r\n\t\t\tRegCloseKey(hkey);\r\n\r\n\r\n\t\t}\r\n\t\tdelete [] pSubkey;\r\n\t}\r\n\r\n\tif(pText ==NULL && pArgInf[2].m_dtDataType != _SDT_NULL && pArgInf[2].m_pText)\r\n\t{\r\n\t\tpText = CloneTextData(pArgInf[2].m_pText,mystrlen(pArgInf[2].m_pText));\r\n\t}\r\n\treturn pText;\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetTickCount.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ϵͳ - ȡʱ\r\n/*\r\n    øʽ ͡ ȡʱ  - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetTickCount\r\n     Windows ϵͳΪֹĺΪ\r\n*/\r\nLIBAPI(int, krnln_GetTickCount)\r\n{\r\n\treturn GetTickCount();\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetTimePart.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n//ʱ - ȡʱ\r\n/*\r\n    øʽ ʱ͡ ȡʱ ʱ ʱ䣩 - ϵͳֿ֧->ʱ\r\n    ӢƣGetTimePart\r\n    һʱݵʱ䲿֣ꡢ¡ձ̶Ϊ200011աΪ\r\n    <1>Ϊʱ䡱Ϊʱͣdate\r\n*/\r\nLIBAPI(void, krnln_GetTimePart) // ֱ޸EaxedxԲҪֵָ\r\n{\r\n\tINT nHour, nMinute, nSecond;\r\n\tGetTimePart(ArgInf.m_date, nHour, nMinute, nSecond);\r\n\tArgInf.m_date = GetSpecDateTime(2000,1,1,nHour, nMinute, nSecond);\r\n\t__asm{\r\n\t\tmov eax, ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx, ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_GetWinPic.cpp",
    "content": "#include \"stdafx.h\"\r\n#pragma comment(lib,\"gdi32.lib\")\r\n#include <stdio.h>\r\n//ϵͳ - \r\n/*\r\n    øʽ ֽڼ   ھݣ ȣݣ ߶ȣݣ - ϵͳֿ֧->ϵͳ\r\n    ӢƣGetWinPic\r\n    ָڻĻʾݣӦͼƬݡʧܣؿֽڼΪ߼\r\n    <1>ΪھΪͣintԱʡԡָʾݵĴڡʡԣĬΪĻʾݡ\r\n    <2>ΪȡΪͣintԱʡԡָͼƬȡС0ֵָͼƬȡͼƬȵİٷֱȣСΪ10%0ͼƬԭ0ָͼƬľԿȡʡԣĬֵΪ0\r\n    <3>Ϊ߶ȡΪͣintԱʡԡָͼƬ߶ȡС0ֵָͼƬ߶ȡͼƬ߶ȵİٷֱȣСΪ10%0ͼƬԭ߶0ָͼƬľԸ߶ȡʡԣĬֵΪ0\r\n*/\r\nLIBAPI(void*, krnln_GetWinPic)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tHWND hWnd = (HWND)pArgInf[0].m_pCompoundData;\r\n\tHDC hdc = GetDC(hWnd);\r\n\tif(hdc==NULL)\r\n\t\treturn NULL;\r\n\tRECT rect;\r\n\r\n\tHWND HObjWnd = hWnd;\r\n\tif(HObjWnd==NULL)\r\n\t\tHObjWnd = GetDesktopWindow();\r\n\tif(GetWindowRect(HObjWnd,&rect)==FALSE)\r\n\t{\r\n\t\tReleaseDC(hWnd,hdc);\r\n\t\treturn NULL;\r\n\t}\r\n\r\n\tSIZE sz; \r\n\tsz.cx=rect.right-rect.left; \r\n\tsz.cy=rect.bottom-rect.top; \r\n\tint nWidth, nHeight;\r\n\tnWidth = sz.cx;\r\n\tnHeight = sz.cy;\r\n\tif(pArgInf[1].m_dtDataType != _SDT_NULL)\r\n\t{\r\n\t\tif(pArgInf[1].m_int > 0)\r\n\t\t\tnWidth = pArgInf[1].m_int;\r\n\t\telse if(pArgInf[1].m_int < 0)\r\n\t\t{\r\n\t\t\tif(pArgInf[1].m_int<-10)\r\n\t\t\t\tpArgInf[1].m_int=-10;\r\n\t\t\tnWidth = (sz.cx * -1* pArgInf[1].m_int)/100;\r\n\t\t}\r\n\t}\r\n\tif(pArgInf[2].m_dtDataType != _SDT_NULL)\r\n\t{\r\n\t\tif(pArgInf[2].m_int > 0)\r\n\t\t\tnHeight = pArgInf[2].m_int;\r\n\t\telse if(pArgInf[2].m_int < 0)\r\n\t\t{\r\n\t\t\tif(pArgInf[2].m_int<-10)\r\n\t\t\t\tpArgInf[2].m_int=-10;\r\n\t\t\tnHeight = (sz.cy * -1* pArgInf[2].m_int)/100;\r\n\t\t}\r\n\t}\r\n\tHDC hMemDC = CreateCompatibleDC(hdc);\r\n\tHBITMAP   hBitmap,hOldBitmap;   \r\n\thBitmap = CreateCompatibleBitmap(hdc, nWidth, nHeight);\r\n\thOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);\r\n\t//StretchBlt(hMemDC, 0, 0, nWidth, nHeight,hdc, rect.left, rect.top,rect.right,rect.bottom, SRCCOPY);\r\n\tSetStretchBltMode(hMemDC, HALFTONE);//ֹʱʧ\r\n\tStretchBlt(hMemDC, 0, 0, nWidth, nHeight,hdc, -8, 0, sz.cx, sz.cy, SRCCOPY);\r\n\r\n\tBITMAP bmp; \r\n\t::GetObject(hBitmap, sizeof(BITMAP), &bmp);\r\n\t//ڴ汣λͼ \r\n\r\n\tDWORD dwSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER) + bmp.bmWidthBytes * bmp.bmHeight;\r\n\tLPBYTE pData = (LPBYTE)E_MAlloc(dwSize+2* sizeof(INT));\r\n\tLPBYTE pArry =pData;\r\n\t*(LPINT)pArry=1;\r\n\tpArry+=sizeof(INT);\r\n\t*(LPINT)pArry=dwSize;\r\n\tpArry+=sizeof(INT);\r\n\r\n\tLPBITMAPFILEHEADER pBfh = (LPBITMAPFILEHEADER)pArry;//λͼļͷ \r\n\tmemset(pBfh,0,sizeof(BITMAPFILEHEADER));\r\n\tpBfh->bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);//λͼݵƫ \r\n\tpBfh->bfSize = pBfh->bfOffBits + bmp.bmWidthBytes * bmp.bmHeight;//ļܵĴС \r\n\tpBfh->bfType = (WORD)0x4d42; \r\n\r\n\tpArry+=sizeof(BITMAPFILEHEADER);\r\n\r\n\tLPBITMAPINFOHEADER pBih = (LPBITMAPINFOHEADER)pArry;//λͼϢͷ \r\n\tmemset(pBih,0,sizeof(BITMAPINFOHEADER));\r\n\tpBih->biSize = sizeof(BITMAPINFOHEADER); \r\n\tpBih->biWidth = bmp.bmWidth;// \r\n\tpBih->biHeight = bmp.bmHeight;//߶ \r\n\tpBih->biPlanes = 1;\r\n\tpBih->biBitCount = bmp.bmBitsPixel;//ÿֽڴС \r\n\tpBih->biCompression = BI_RGB; \r\n\tpBih->biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;//ͼݴС \r\n\tpBih->biXPelsPerMeter = 0;\r\n\tpBih->biYPelsPerMeter = 0;\r\n\tpBih->biClrUsed = 0;\r\n\tpBih->biClrImportant = 0;\r\n\tpArry+=sizeof(BITMAPINFOHEADER);\r\n\r\n\tGetDIBits(hMemDC, hBitmap, 0, nHeight, pArry, \r\n\t(LPBITMAPINFO)pBih, DIB_RGB_COLORS);//ȡλͼ \r\n\t\r\n\r\n\tSelectObject(hMemDC, hOldBitmap);\r\n\tDeleteDC(hMemDC);\r\n\tReleaseDC(hWnd,hdc);\r\n\tDeleteObject(hBitmap);\r\n\treturn pData;\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_HostNameToIP.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n#pragma comment(lib,\"WS2_32.LIB\")\r\n//ͨ - תΪIPַ\r\n/*\r\n    øʽ ı͡ תΪIPַ ı ת - ϵͳֿ֧->ͨ\r\n    ӢƣHostNameToIP\r\n    ָתΪ IP ַʧܷؿıΪ\r\n    <1>ΪתΪıͣtext\r\n*/\r\n\r\nDWORD MYGetIPbyname(char *HostName)\r\n{\r\n\tDWORD retIP;\r\n\thostent* heDestHost = gethostbyname (HostName);\r\n\r\n\tif(heDestHost)\r\n\t\tretIP=*(DWORD *)*heDestHost->h_addr_list;\r\n\telse\r\n\t\tretIP=0xFFFFFFFF;\r\n\treturn retIP;\r\n}\r\n\r\nLIBAPI(char*, krnln_HostNameToIP)\r\n{\r\n\tWSAData wsaData;\r\n\tLPSTR pText=NULL;\r\n\tif(WSAStartup(MAKEWORD(2,2),&wsaData)==0)\r\n\t{\r\n\t\tDWORD retIP = MYGetIPbyname(ArgInf.m_pText);\r\n\t\tif(retIP !=0xFFFFFFFF)\r\n\t\t{\r\n\t\t\tsockaddr_in localaddr;\r\n\t\t\tlocaladdr.sin_addr.S_un.S_addr=retIP;\r\n\t\t\tLPSTR pIp = inet_ntoa(localaddr.sin_addr);\r\n\t\t\tpText=CloneTextData(pIp,mystrlen(pIp));\r\n\r\n\t\t}\r\n\t\tWSACleanup ();\r\n\t}\r\n\treturn pText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_IDiv.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n// - \r\n/*\r\n    øʽ ˫С͡  ˫С ˫С ...  - ϵͳֿ֧->\r\n    ӢƣIDiv\r\n    ֵ̣֣Ϊ\\ΪһԱظӡ\r\n    <1>ΪΪ˫Сͣdouble\r\n    <2>ΪΪ˫Сͣdouble\r\n*/\r\nLIBAPI(void, krnln_IDiv) // ֱ޸eaxedxԲҪֵָ\r\n{\r\n\tPMDATA_INF pArg = &ArgInf;\r\n\r\n\tfor(int i=1;i< nArgCount;i++)\r\n\t{\r\n\t\tArgInf.m_double = floor(ArgInf.m_double /pArg[i].m_double);\r\n\t}\r\n\r\n\t__asm\r\n\t{\r\n\t\tmov eax,ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx,ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_IPToHostName.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n#pragma comment(lib,\"WS2_32.LIB\")\r\n//ͨ - תΪ\r\n/*\r\n    øʽ ı͡ תΪ ı תIPַ - ϵͳֿ֧->ͨ\r\n    ӢƣIPToHostName\r\n    ָ IP ַתΪʧܷؿıΪ\r\n    <1>ΪתIPַΪıͣtext\r\n*/\r\n\r\nLIBAPI(char*, krnln_IPToHostName)\r\n{\r\n\tWSAData wsaData;\r\n\tLPSTR pText=NULL;\r\n\tif(WSAStartup(MAKEWORD(2,2),&wsaData)==0)\r\n\t{\r\n\t\tDWORD retIP = inet_addr(ArgInf.m_pText);\r\n\t\tif(retIP !=0xFFFFFFFF)\r\n\t\t{\r\n\t\t\thostent* hostinfo=gethostbyaddr((char*)&retIP,sizeof(retIP),AF_INET);\r\n\t\t\tpText=CloneTextData(hostinfo->h_name,mystrlen(hostinfo->h_name));\r\n\t\t\r\n\t\t}\r\n\t\tWSACleanup ();\r\n\t}\r\n\treturn pText;\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_InBin.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ֽڼ - Ѱֽڼ\r\n/*\r\n    øʽ ͡ Ѱֽڼ ֽڼ Ѱֽڼֽڼ Ѱҵֽڼ ʼѰλãݣ - ϵͳֿ֧->ֽڼ\r\n    ӢƣInBin\r\n    һֽڼһֽڼȳֵλãλֵ 1 ʼδҵ -1Ϊ\r\n    <1>ΪѰֽڼΪֽڼbin\r\n    <2>ΪѰҵֽڼΪֽڼbin\r\n    <3>ΪʼѰλáΪͣintԱʡԡ1Ϊλã2Ϊ2λãƣʡԣѰֽڼĬϴײʼֽڼĬϴβʼ\r\n\r\n*/\r\nLIBAPI(int, krnln_InBin)\r\n{ // ߺ \r\n \tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[0].m_pBin==NULL || pArgInf[1].m_pBin==NULL)\r\n \t\treturn -1;\r\n\r\n\tINT nLen = pArgInf[0].m_pInt[1];\r\n\tINT nSubLen = pArgInf[1].m_pInt[1];\r\n\r\n\tregister unsigned char* pSrc;\r\n\tint off;\r\n\tif(pArgInf[2].m_dtDataType == _SDT_NULL || pArgInf[2].m_int <= 1)\r\n\t{\r\n\t\toff = 1;\r\n\t\tpSrc = pArgInf[0].m_pBin + 2*sizeof(INT);\r\n\t}\r\n\telse\r\n\t{\r\n\t\toff = pArgInf[2].m_int;\r\n\t\tpSrc = pArgInf[0].m_pBin + 2*sizeof(INT) + off - 1;\r\n\t\tnLen -= off - 1;\r\n\t}\r\n\r\n \tif(nLen<=0 || nSubLen<=0 || nSubLen > nLen)\r\n\t\treturn -1;\r\n\r\n\tregister unsigned char* pDes = pArgInf[1].m_pBin + 2*sizeof(INT);\r\n\tint i;\r\n\r\n\t// Ӵֱӱ\r\n\tswitch (nSubLen)\r\n\t{\r\n\tcase 1:\r\n\t\ti = mymemchr(pSrc, nLen, pDes[0]);\r\n\t\tif (i >= 0)\r\n\t\t\treturn i + off;\r\n\t\telse\r\n\t\t\treturn -1;\r\n\tcase 2:\r\n\t\tfor (i=0; i < nLen - 1; i++)\r\n\t\t\tif (((short*)(pSrc+i))[0] == ((short*)pDes)[0])\r\n\t\t\t\treturn i + off;\r\n\t\treturn -1;\r\n\tcase 3:\r\n\t\tfor (i=0; i < nLen - 2; i++)\r\n\t\t\tif (((short*)(pSrc+i))[0] == ((short*)pDes)[0])\r\n\t\t\t\tif (pSrc[i+2] == pDes[2])\r\n\t\t\t\t\treturn i + off;\t\r\n\t\treturn -1;\r\n\tcase 4:\r\n\t\tfor (i=0; i < nLen - 3; i++)\r\n\t\t\tif (((int*)(pSrc+i))[0] == ((int*)pDes)[0])\r\n\t\t\t\treturn i + off;\r\n\t\treturn -1;\r\n\tcase 5:\r\n\t\tfor (i=0; i < nLen - 4; i++)\r\n\t\t\tif (((int*)(pSrc+i))[0] == ((int*)pDes)[0])\r\n\t\t\t\tif (pSrc[i+4] == pDes[4])\r\n\t\t\t\t\treturn i + off;\t\t\r\n\t\treturn -1;\r\n\tcase 6:\r\n\t\tfor (i=0; i < nLen - 5; i++)\r\n\t\t\tif (((int*)(pSrc+i))[0] == ((int*)pDes)[0])\r\n\t\t\t\tif (((short*)(pSrc+i+4))[0] == ((short*)(pDes+4))[0])\r\n\t\t\t\t\treturn i + off;\r\n\t\treturn -1;\r\n\tdefault:  // ӴʹBM㷨,\r\n\t\tint naddr = boyer_moore(pSrc, nLen, pDes, nSubLen);\r\n\t\tif (naddr >= 0)\r\n\t\t\treturn naddr + off;\r\n\t}\r\n\r\n// Ӵʹ Sunday㷨,\r\n// \tunsigned int next[256];\r\n// \tfor (i=0; i < 256; i++)\r\n// \t\tnext[i] = nSubLen;\r\n// \tfor (i = 0; i < nSubLen; i++)\r\n// \t\tnext[pDes[i]] = nSubLen - i;\r\n// \r\n// \tregister unsigned char* naddr;\r\n// \tfor (naddr = pSrc; naddr <= pSrc + nLen - nSubLen; naddr += next[naddr[nSubLen]])\r\n// \t\tif (MyMemCmp(naddr, pDes, nSubLen)==0)\r\n// \t\t\treturn naddr - pSrc + off;\r\n\t\t\r\n\treturn -1;\r\n}\r\n// { // ԭ\r\n// \tPMDATA_INF pArgInf = &ArgInf;\r\n// \tif(pArgInf[0].m_pBin==NULL || pArgInf[1].m_pBin==NULL)\r\n// \t\treturn -1;\r\n// \r\n// \tINT nLen = pArgInf[0].m_pInt[1];\r\n// \tINT nSubLen = pArgInf[1].m_pInt[1];\r\n// \tif(nLen==0 || nSubLen==0 || nSubLen > nLen)return -1;\r\n// \t\r\n// \tINT nStart;\r\n// \tif(pArgInf[2].m_dtDataType ==_SDT_NULL || pArgInf[2].m_int <=0)\r\n// \t\tnStart = 1;\r\n// \telse\r\n// \t\tnStart = pArgInf[2].m_int;\r\n// \r\n// \tINT nEnd = nLen - nSubLen;\r\n// \tif(nStart > (nEnd+1))return -1;\r\n// \tLPBYTE pSrc = pArgInf[0].m_pBin + 2*sizeof(INT);\r\n// \tLPBYTE pStart = pSrc + nStart -1;\r\n// \tLPBYTE pEnd = pSrc + nEnd;\r\n// \tLPBYTE pObj = pArgInf[1].m_pBin + 2*sizeof(INT);\r\n// \r\n// \twhile(pStart <= pEnd)\r\n// \t{\r\n// \t\tif(memcmp(pStart,pObj,nSubLen)==0)\r\n// \t\t{\r\n// \t\t\tnStart = pStart - pSrc +1;\r\n// \t\t\treturn nStart;\r\n// \t\t}\r\n// \t\tpStart++;\r\n// \t}\r\n// \r\n// \r\n// \treturn -1;\t\r\n// }\r\n"
  },
  {
    "path": "krnln/krnln_InBinRev.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\nextern \"C\" int inline MyMemCmp2(unsigned char* a, unsigned char* b, int len)\r\n{\r\n\tfor (int i=0; i < (len>>2); i++)\r\n\t{\r\n\t\tif (((int*)a)[0]!=((int*)b)[0])\r\n\t\t\treturn 1;\r\n\t\ta+=4;b+=4;\r\n\t}\r\n\tif ((len&2) != 0)\r\n\t{\r\n\t\tif (((short*)a)[0]!=((short*)b)[0])\r\n\t\t\treturn 1;\r\n\t\ta+=2;b+=2;\r\n\t}\r\n\tif ((len&1) != 0 && a[0]!=b[0])\r\n\t\treturn 1;\r\n\treturn 0;\r\n}\r\n//ֽڼ - ֽڼ\r\n/*\r\n    øʽ ͡ ֽڼ ֽڼ Ѱֽڼֽڼ Ѱҵֽڼ ʼѰλãݣ - ϵͳֿ֧->ֽڼ\r\n    ӢƣInBinRev\r\n    һֽڼһֽڼֵλãλֵ 1 ʼδҵ -1Ϊ\r\n    <1>ΪѰֽڼΪֽڼbin\r\n    <2>ΪѰҵֽڼΪֽڼbin\r\n    <3>ΪʼѰλáΪͣintԱʡԡ1Ϊλã2Ϊ2λãƣʡԣѰֽڼĬϴײʼֽڼĬϴβʼ\r\n*/\r\nLIBAPI(int, krnln_InBinRev)\r\n{ // ߺ \r\n \tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[0].m_pBin==NULL || pArgInf[1].m_pBin==NULL)\r\n \t\treturn -1;\r\n\r\n\tINT nLen = pArgInf[0].m_pInt[1];\r\n\tINT nSubLen = pArgInf[1].m_pInt[1];\r\n\tif (nLen <= 0 || nSubLen <= 0 || nSubLen > nLen) return -1;\r\n\r\n\tregister unsigned char* pSrc = pArgInf[0].m_pBin + 2*sizeof(INT);\r\n\tint off;\r\n\tif (pArgInf[2].m_dtDataType == _SDT_NULL)\r\n\t\toff = nLen - nSubLen;\r\n\telse\r\n\t{\r\n\t\toff = pArgInf[2].m_int;\r\n\t\tif (off < 1) \r\n\t\t\treturn -1;\r\n\t\tif (off <= nLen)\r\n\t\t\tnLen = off;\r\n\t\toff = nLen - nSubLen;\r\n\t}\r\n\r\n \tif (off < 0) return -1;\r\n\r\n\tregister unsigned char* pDes = pArgInf[1].m_pBin + 2*sizeof(INT);\r\n\tint i;\r\n\t//int j;\r\n\t// Ӵֱӱ\r\n\tif (nSubLen == 1)\r\n\t{\r\n\t\tfor (i = off; i >= 0; i--)\r\n\t\t\tif (pSrc[i] == pDes[0])\r\n\t\t\t\treturn i + 1;\r\n\t\t\t\r\n\t\treturn -1;\r\n\t}\r\n\telse if (nSubLen == 2)\r\n\t{\r\n\t\tfor (i = off; i >= 0; i--)\r\n\t\t\tif (((short*)(pSrc+i))[0] == ((short*)pDes)[0])\r\n\t\t\t\treturn i + 1;\r\n\t\t\t\r\n\t\treturn -1;\r\n\t}\r\n\telse if (nSubLen == 3)\r\n\t{\r\n\t\tfor (i = off; i >= 0; i--)\r\n\t\t\tif (((short*)(pSrc+i))[0] == ((short*)pDes)[0])\r\n\t\t\t\tif (pSrc[i+2] == pDes[2])\r\n\t\t\t\t\treturn i + 1;\r\n\t\t\t\r\n\t\treturn -1;\r\n\t}\r\n\telse if (nSubLen == 4)\r\n\t{\r\n\t\tfor (i = off; i >= 0; i--)\r\n\t\t\tif (((int*)(pSrc+i))[0] == ((int*)pDes)[0])\r\n\t\t\t\treturn i + 1;\r\n\t\t\t\r\n\t\treturn -1;\r\n\t}\r\n\telse if (nSubLen == 5)\r\n\t{\r\n\t\tfor (i = off; i >= 0; i--)\r\n\t\t\tif (((int*)(pSrc+i))[0] == ((int*)pDes)[0])\r\n\t\t\t\tif (pSrc[i+4] == pDes[4])\r\n\t\t\t\t\treturn i + 1;\r\n\t\t\t\r\n\t\treturn -1;\r\n\t}\r\n\telse if (nSubLen == 6)\r\n\t{\r\n\t\tfor (i = off; i >= 0; i--)\r\n\t\t\tif (((int*)(pSrc+i))[0] == ((int*)pDes)[0])\r\n\t\t\t\tif (((short*)(pSrc+i+4))[0] == ((short*)(pDes+4))[0])\r\n\t\t\t\t\treturn i + 1;\r\n\t\t\t\t\r\n\t\treturn -1;\r\n\t}\r\n \r\n// \tfor (i = off; i >= 0; i--)\r\n// \t\tif (MyMemCmp2(pSrc+i, pDes, nSubLen)==0)\r\n//  \t\t\treturn i + 1;\r\n// \r\n// \treturn -1;\r\n\t// Ӵʹ Sunday㷨,\r\n\tregister unsigned int next[256];\r\n\tfor (i = 0; i < 256; i++)\r\n\t\tnext[i] = nSubLen;\r\n\tfor (i = nSubLen; i > 0; i--)\r\n\t\tnext[pDes[i-1]] = i;\r\n\r\n\tregister unsigned char* naddr = pSrc + off;\r\n\tfor (; naddr >= pSrc; naddr -= next[naddr[-1]])\r\n\t\tif (MyMemCmp2(naddr, pDes, nSubLen)==0)\r\n\t\t\treturn naddr - pSrc + 1;\r\n\t\t\r\n\treturn -1;\r\n}\r\n// {// ԭ\r\n// \tPMDATA_INF pArgInf = &ArgInf;\r\n// \tif(pArgInf[0].m_pBin==NULL || pArgInf[1].m_pBin==NULL)\r\n// \t\treturn -1;\r\n// \r\n// \tINT nLen = pArgInf[0].m_pInt[1];\r\n// \tINT nSubLen = pArgInf[1].m_pInt[1];\r\n// \tif(nLen==0 || nSubLen==0 || nSubLen > nLen)return -1;\r\n// \t\r\n// \tINT nStart;\r\n// \tINT nEnd = nLen - nSubLen;\r\n// \tif(pArgInf[2].m_dtDataType ==_SDT_NULL || pArgInf[2].m_int <=0)\r\n// \t\tnStart = nEnd;\r\n// \telse{\r\n// \t\tnStart = pArgInf[2].m_int - nSubLen;\r\n// \t\tif(nStart <0)\r\n// \t\t\tnStart = 0;\r\n// \t}\r\n// \t\r\n// \tif(nStart > nEnd)\r\n// \t\tnStart = nEnd;\r\n// \r\n// \tLPBYTE pSrc = pArgInf[0].m_pBin + 2*sizeof(INT);\r\n// \tLPBYTE pStart = pSrc + nStart;\r\n// \tLPBYTE pObj = pArgInf[1].m_pBin + 2*sizeof(INT);\r\n// \r\n// \r\n// \t\r\n// \twhile(pStart >= pSrc)\r\n// \t{\r\n// \t\tif(memcmp(pStart,pObj,nSubLen)==0)\r\n// \t\t{\r\n// \t\t\tnStart = pStart - pSrc +1;\r\n// \t\t\treturn nStart;\r\n// \t\t}\r\n// \t\tpStart--;\r\n// \t}\r\n// \r\n// \r\n// \treturn -1;\t\r\n// }\r\n"
  },
  {
    "path": "krnln/krnln_InStr.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ı - Ѱı\r\n/*\r\n    øʽ ͡ Ѱı ı Ѱıı Ѱҵı ʼѰλãݣ߼ ǷִСд - ϵͳֿ֧->ı\r\n    ӢƣInStr\r\n    һֵָһıһıȳֵλãλֵ 1 ʼδҵ-1Ϊ\r\n    <1>ΪѰıΪıͣtext\r\n    <2>ΪѰҵıΪıͣtext\r\n    <3>ΪʼѰλáΪͣintԱʡԡλֵ 1 ʼʡԣĬΪ 1 \r\n    <4>ΪǷִСдΪ߼ͣboolʼֵΪ١Ϊ治ִСдΪ֡\r\n*/\r\nLIBAPI(int, krnln_InStr)\r\n{ // ߺ \r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tINT nStart;\r\n\tchar *str1 = pArgInf[0].m_pText;\r\n\tchar *str2 = pArgInf[1].m_pText;\r\n\tif (!str1 || !str2 || !*str1) return -1; //ıֱӷ\r\n\tif (!*str2) return 1;\r\n\tif (pArgInf[2].m_dtDataType == _SDT_NULL || pArgInf[2].m_int <= 1)\r\n\t\tnStart = 0;\r\n\telse\r\n\t\tnStart = pArgInf[2].m_int - 1;\r\n\r\n\tchar* pStart = str1 + nStart;\r\n\r\n\tchar *cp = str1;\r\n\tchar *s1, *s2;\r\n\t\r\n\tfor (; *cp && cp < pStart; cp++)\r\n\t\t\tif (*cp < 0) cp++;\r\n\r\n\tif (pArgInf[3].m_bool) //ִСд\r\n\t{\r\n\t\tregister unsigned char* lt = lowtable;\r\n\t\twhile (*cp)\r\n\t\t{\r\n\t\t\ts1 = cp;\r\n\t\t\ts2 = str2;\r\n\t\t\twhile ( *s1 && *s2 && (*s1==*s2 || lt[(unsigned char)(*s1)]==lt[(unsigned char)(*s2)]) )\r\n\t\t\t\ts1++, s2++;\r\n\t\t\tif (!*s2)\r\n\t\t\t\treturn cp - str1 + 1;\r\n\t\t\t\t\r\n\t\t\tif (*cp < 0)\r\n\t\t\t{\r\n\t\t\t\tcp++;\r\n\t\t\t\tif (!*cp)\r\n\t\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tcp++;\r\n\t\t}\r\n\t}\r\n\telse  // ִСд\r\n\t{\t\r\n\t\twhile (*cp)\r\n\t\t{\r\n\t\t\ts1 = cp;\r\n\t\t\ts2 = str2;\r\n\t\t\twhile ( *s1 && *s2 && !(*s1-*s2) )\r\n\t\t\t\ts1++, s2++;\r\n\t\t\tif (!*s2)\r\n\t\t\t\treturn cp - str1 + 1;\r\n\t\t\t\r\n\t\t\tif (*cp < 0)\r\n\t\t\t{\r\n\t\t\t\tcp++;\r\n\t\t\t\tif (!*cp)\r\n\t\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tcp++;\r\n\t\t}\r\n\t}\r\n\treturn -1;\r\n}\r\n// \r\n// { // ԭ\r\n// \tPMDATA_INF pArgInf = &ArgInf;\r\n// \tINT nLen = strlen(ArgInf.m_pText);\r\n// \tINT nSubLen = strlen(pArgInf[1].m_pText);\r\n// \tif(nLen==0 || nSubLen==0 || nSubLen > nLen)return -1;\r\n// \t\r\n// \tINT nStart;\r\n// \tif(pArgInf[2].m_dtDataType ==_SDT_NULL || pArgInf[2].m_int <=0)\r\n// \t\tnStart = 1;\r\n// \telse\r\n// \t\tnStart = pArgInf[2].m_int;\r\n// \tINT nEnd = nLen - nSubLen;\r\n// \tif(nStart > (nEnd+1))return -1;\r\n// \tchar* pStart = ArgInf.m_pText + nStart -1;\r\n// \tchar* pEnd = ArgInf.m_pText + nEnd;\r\n// \tif(pArgInf[3].m_bool) //ִСд\r\n// \t{\r\n// \t\twhile(pStart <= pEnd)\r\n// \t\t{\r\n// \t\t\tif(strnicmp(pStart,pArgInf[1].m_pText,nSubLen)==0)\r\n// \t\t\t{\r\n// \t\t\t\tnStart = pStart - ArgInf.m_pText +1;\r\n// \t\t\t\treturn nStart;\r\n// \t\t\t}\r\n// \t\t\tif(*pStart<0)\r\n// \t\t\t\tpStart+=2;\r\n// \t\t\telse\r\n// \t\t\t\tpStart++;\r\n// \t\t}\r\n// \r\n// \t}\r\n// \telse\r\n// \t{\r\n// \t\twhile(pStart <= pEnd)\r\n// \t\t{\r\n// \t\t\tif(strncmp(pStart,pArgInf[1].m_pText,nSubLen)==0)\r\n// \t\t\t{\r\n// \t\t\t\tnStart = pStart - ArgInf.m_pText +1;\r\n// \t\t\t\treturn nStart;\r\n// \t\t\t}\r\n// \t\t\tif(*pStart<0)\r\n// \t\t\t\tpStart+=2;\r\n// \t\t\telse\r\n// \t\t\t\tpStart++;\r\n// \t\t}\r\n// \t}\r\n// \r\n// \r\n// \treturn -1;\t\r\n// }\r\n"
  },
  {
    "path": "krnln/krnln_InStrRev.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n//ı - ı\r\n/*\r\n    øʽ ͡ ı ı Ѱıı Ѱҵı ʼѰλãݣ߼ ǷִСд - ϵͳֿ֧->ı\r\n    ӢƣInStrRev\r\n    һֵָһıһıֵλãλֵ 1 ʼδҵ-1Ϊ\r\n    <1>ΪѰıΪıͣtext\r\n    <2>ΪѰҵıΪıͣtext\r\n    <3>ΪʼѰλáΪͣintԱʡԡλֵ 1 ʼʡԣĬΪӱѰıβʼ\r\n    <4>ΪǷִСдΪ߼ͣboolʼֵΪ١Ϊ治ִСдΪ֡\r\n*/\r\nLIBAPI(int, krnln_InStrRev)\r\n{ // ߺ \r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tINT nStart;\r\n\tchar *str1 = pArgInf[0].m_pText;\r\n\tchar *str2 = pArgInf[1].m_pText;\r\n\tif (!str1 || !str2 || !*str1) return -1; //ıֱӷ\r\n\tif (!*str2) return 1;\r\n\tif (pArgInf[2].m_dtDataType == _SDT_NULL)\r\n\t\tnStart = 0x7FFFFFFF;\r\n\telse\r\n\t{\r\n\t\tif (pArgInf[2].m_int <= 0)\r\n\t\t\treturn -1;\r\n\t\tnStart = pArgInf[2].m_int - 1;\r\n\t}\r\n\t\r\n\tINT nDesLen = mystrlen(str2);\r\n\tchar* pStart = str1 + nStart - nDesLen;\r\n\t\r\n\tchar *cp, *s1, *s2;\r\n\t\r\n\t// str1Ȼ޶ʼλ\r\n\tfor (cp = str1; cp < pStart && *cp; cp++);\r\n\t//\tif (*cp < 0) cp++; // ֲ2⣡\r\n\t\r\n\tif (cp < str1) return -1;\r\n\r\n\tif (pArgInf[3].m_bool) //ִСд\r\n\t{\r\n\t\tregister unsigned char* lt = lowtable;\r\n\t\twhile (cp >= str1)\r\n\t\t{\r\n\t\t\ts1 = cp;\r\n\t\t\ts2 = str2;\r\n\t\t\twhile ( *s1 && *s2 && (*s1==*s2 || lt[(unsigned char)(*s1)]==lt[(unsigned char)(*s2)]) )\r\n\t\t\t\ts1++, s2++;\r\n\t\t\tif (!*s2)\r\n\t\t\t\treturn cp - str1 + 1;\r\n\t\t\tcp--;\r\n\t\t}\r\n\t}\r\n\telse  // ִСд\r\n\t{\t\r\n\t\twhile (cp >= str1)\r\n\t\t{\r\n\t\t\ts1 = cp;\r\n\t\t\ts2 = str2;\r\n\t\t\twhile ( *s1 && *s2 && !(*s1-*s2) )\r\n\t\t\t\ts1++, s2++;\r\n\t\t\tif (!*s2)\r\n\t\t\t\treturn cp - str1 + 1;\r\n\t\t\tcp--;\r\n\t\t}\r\n\t}\r\n\treturn -1;\r\n}\r\n// {\r\n// \tPMDATA_INF pArgInf = &ArgInf;\r\n// \tINT nLen = strlen(ArgInf.m_pText);\r\n// \tINT nSubLen = strlen(pArgInf[1].m_pText);\r\n// \tif(nLen==0 || nSubLen==0 || nSubLen > nLen)return -1;\r\n// \t\r\n// \tINT nStart;\r\n// \tINT nEnd = nLen - nSubLen;\r\n// \tif(pArgInf[2].m_dtDataType ==_SDT_NULL || pArgInf[2].m_int <=0)\r\n// \t\tnStart = nEnd;\r\n// \telse{\r\n// \t\tnStart = pArgInf[2].m_int - nSubLen;\r\n// \t\tif(nStart <0)\r\n// \t\t\tnStart = 0;\r\n// \t}\r\n// \t\r\n// \tif(nStart > nEnd)\r\n// \t\tnStart = nEnd;\r\n// \tchar* pStart = ArgInf.m_pText + nStart;\r\n// //MessageBox(NULL,pStart,NULL,MB_OK);\r\n// \tif(pArgInf[3].m_bool) //ִСд\r\n// \t{\r\n// \t\twhile(pStart >= ArgInf.m_pText)\r\n// \t\t{\r\n// \t\t\tif(strnicmp(pStart,pArgInf[1].m_pText,nSubLen)==0)\r\n// \t\t\t{\r\n// \t\t\t\tnStart = pStart - ArgInf.m_pText +1;\r\n// \t\t\t\treturn nStart;\r\n// \t\t\t}\r\n// \t\t\tpStart--;\r\n// \t\t}\r\n// \r\n// \t}\r\n// \telse\r\n// \t{\r\n// \t\twhile(pStart >= ArgInf.m_pText)\r\n// \t\t{\r\n// \t\t\tif(strncmp(pStart,pArgInf[1].m_pText,nSubLen)==0)\r\n// \t\t\t{\r\n// \t\t\t\tnStart = pStart - ArgInf.m_pText +1;\r\n// \t\t\t\treturn nStart;\r\n// \t\t\t}\r\n// \t\t\tpStart--;\r\n// \t\t}\r\n// \t}\r\n// \r\n// \r\n// \treturn -1;\t\r\n// }\r\n"
  },
  {
    "path": "krnln/krnln_InputBox.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\nBYTE BMInputBoxDialogTemplateData []={\r\n0xC0,0x08,0xC8,0x80,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,\r\n0x5C,0x00,0x00,0x00,0x00,0x00,0xF7,0x8B,0x93,0x8F,0x65,0x51,0x1A,0xFF,0x00,0x00,\r\n0x09,0x00,0x8B,0x5B,0x53,0x4F,0x00,0x00,0x00,0x10,0x02,0x50,0x00,0x00,0x00,0x00,\r\n0x07,0x00,0x07,0x00,0xEE,0x00,0x23,0x00,0xFF,0xFF,0xFF,0xFF,0x82,0x00,0x00,0x00,\r\n0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x50,0x00,0x00,0x00,0x00,0x0C,0x00,0x0B,0x00,\r\n0xE5,0x00,0x1B,0x00,0x68,0x04,0xFF,0xFF,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r\n0x80,0x00,0x81,0x50,0x00,0x00,0x00,0x00,0x07,0x00,0x2D,0x00,0xEE,0x00,0x0C,0x00,\r\n0xE9,0x03,0xFF,0xFF,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x81,0x50,\r\n0x00,0x00,0x00,0x00,0x07,0x00,0x2D,0x00,0xEE,0x00,0x0C,0x00,0xEA,0x03,0xFF,0xFF,\r\n0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x50,0x00,0x00,0x00,0x00,\r\n0x3F,0x00,0x42,0x00,0x37,0x00,0x13,0x00,0x01,0x00,0xFF,0xFF,0x80,0x00,0x6E,0x78,\r\n0xA4,0x8B,0x93,0x8F,0x65,0x51,0x28,0x00,0x26,0x00,0x4F,0x00,0x29,0x00,0x00,0x00,\r\n0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x50,0x00,0x00,0x00,0x00,0x86,0x00,0x42,0x00,\r\n0x37,0x00,0x13,0x00,0x02,0x00,0xFF,0xFF,0x80,0x00,0xD6,0x53,0x88,0x6D,0x28,0x00,\r\n0x26,0x00,0x43,0x00,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\r\n\r\n/*\r\nøʽ ߼͡  ı ʾϢݣı ڱݣı ʼıݣͨͱ ݵı 뷽ʽݣͨ ڣݣ - ϵͳֿ֧->ϵͳ\r\nӢƣInputBox\r\nһԻʾʾȴûĲ°ťûȷ󣨰¡ȷ롱ťس˳棬򷵻ؼ١Ϊ\r\n<1>ΪʾϢΪıͣtextԱʡԡʾϢУڸ֮ûس (ַ (13))з (ַ (10)) سз (ַ (13) + ַ (10)) ָʾϢֽ̫࣬ᱻʾ\r\n<2>Ϊڱ⡱ΪıͣtextԱʡԡֵָʾڶԻеıʡԣĬΪı룺\r\n<3>ΪʼıΪıͣtextԱʡԡֵָʼõԻıеݡ\r\n<4>ΪݵıΪͨͣallṩʱֻṩֵָıΪֵıͣԲͬȡݡ\r\n<5>Ϊ뷽ʽΪͣintԱʡԡֵΪ³ֵ 1#ı 2# 3#С 4#롣ʡԱĬΪ#ı\r\n<6>ΪڡΪͨͣallԱʡԡָĸ,һ\"\"ݻһʹھ.ʡ,ĬΪ.\r\n*/\r\n/////////////////////////////////////////////////////////////////////////////\r\ntypedef struct\r\n{\r\n\tLPSTR lpText;\r\n\tLPSTR lpTitle;\r\n\tLPSTR lpIntiTxt;\r\n\tINT nType;\r\n\tBOOL bResult;\r\n\tHWND hEdit;\r\n\tLPSTR lpUserInput;\r\n} BMInputBoxDATA;\r\n\r\n\r\n\r\nBOOL CALLBACK BMInputBoxDlgProc( HWND hwndDlg,  // handle to dialog box \r\n\t\t\t\t\t\t\t   UINT uMsg,     // message \r\n\t\t\t\t\t\t\t   WPARAM wParam, // first message parameter \r\n\t\t\t\t\t\t\t   LPARAM lParam  // second message parameter \r\n\t\t\t\t\t\t\t   ) \r\n{ \r\n\tswitch (uMsg) \r\n\t{ \r\n\tcase WM_INITDIALOG: \r\n\t\t{\r\n\t\t\tBMInputBoxDATA* lpData = (BMInputBoxDATA*)lParam;\r\n\t\t\t::SetWindowText (hwndDlg,lpData->lpTitle);\r\n\t\t\tHWND hwndEDIT;\r\n\t\t\tif(lpData->nType ==4)//\r\n\t\t\t{\r\n\t\t\t\thwndEDIT = GetDlgItem(hwndDlg,1001);\r\n\t\t\t\tShowWindow(hwndEDIT, SW_HIDE); \r\n\t\t\t\tlpData->hEdit = GetDlgItem(hwndDlg,1002);\r\n\r\n\t\t\t}else{\r\n\t\t\t\thwndEDIT = GetDlgItem(hwndDlg,1002);\r\n\t\t\t\tShowWindow(hwndEDIT, SW_HIDE); \r\n\t\t\t\tlpData->hEdit = GetDlgItem(hwndDlg,1001);\r\n\t\t\t}\r\n\t\t\tif(lpData->lpIntiTxt)//ʼı\r\n\t\t\t\t::SetWindowText (lpData->hEdit,lpData->lpIntiTxt);\r\n\r\n\t\t\thwndEDIT = GetDlgItem(hwndDlg,1128);\r\n\t\t\tShowWindow(hwndEDIT, SW_HIDE); \r\n\t\t\thwndEDIT = GetDlgItem(hwndDlg,65535);\r\n\r\n\t\t\tif(lpData->lpText)//ʾı\r\n\t\t\t\t::SetWindowText (hwndEDIT,lpData->lpText);\r\n\t\t\telse{\r\n\t\t\t\t\r\n\t\t\t\tShowWindow(hwndEDIT, SW_HIDE); \r\n\t\t\t\tRECT rect;\r\n\t\t\t\tINT x,y;\r\n\t\t\t\tINT offect = 57;\r\n\r\n\t\t\t\thwndEDIT = GetDlgItem(hwndDlg,1);\r\n\t\t\t\t::GetWindowRect(hwndEDIT,&rect);\r\n\t\t\t\t::ScreenToClient (hwndDlg,(LPPOINT)&rect);\r\n\t\t\t\tx=rect.left;\r\n\t\t\t\ty=rect.top-offect;\r\n\t\t\t\t::SetWindowPos (hwndEDIT,NULL,x,y,0,0,SWP_NOSIZE|SWP_NOACTIVATE);\r\n\r\n\t\t\t\thwndEDIT = GetDlgItem(hwndDlg,2);\r\n\t\t\t\t::GetWindowRect(hwndEDIT,&rect);\r\n\t\t\t\t::ScreenToClient (hwndDlg,(LPPOINT)&rect);\r\n\t\t\t\tx=rect.left;\r\n\t\t\t\t::SetWindowPos (hwndEDIT,NULL,x,y,0,0,SWP_NOSIZE|SWP_NOACTIVATE);\r\n\r\n\t\t\t\t::GetWindowRect(lpData->hEdit,&rect);\r\n\t\t\t\t::ScreenToClient (hwndDlg,(LPPOINT)&rect);\r\n\t\t\t\tx=rect.left;\r\n\t\t\t\t::SetWindowPos (lpData->hEdit,NULL,x,11,0,0,SWP_NOSIZE|SWP_NOACTIVATE);\r\n\r\n\t\t\t\t::GetWindowRect(hwndDlg,&rect);\r\n\t\t\t\tx=rect.right - rect.left;\r\n\t\t\t\ty=rect.bottom - rect.top-offect;\r\n\t\t\t\t::SetWindowPos (hwndDlg,NULL,0,0,x,y,SWP_NOMOVE|SWP_NOACTIVATE);\r\n\r\n\r\n\r\n\r\n\t\t\t}\r\n\r\n\t\t\t::SetWindowLong (hwndDlg,GWL_USERDATA,(LONG)lpData);\r\n\r\n\t\t}\r\n\r\n\t\tbreak;\r\n\tcase WM_COMMAND: \r\n\t\t{\r\n\t\t\tBMInputBoxDATA* lpData = (BMInputBoxDATA*)GetWindowLong (hwndDlg,GWL_USERDATA);\r\n\t\t\tINT nID = wParam & 0xffff;\r\n\t\t\tif(nID == IDCANCEL)\r\n\t\t\t\tDestroyWindow(hwndDlg);\r\n\t\t\telse if(nID == IDOK){\r\n\t\t\t\t\r\n\t\t\t\tINT nLen = ::GetWindowTextLength (lpData->hEdit);\r\n\t\t\t\tif(nLen>0)\r\n\t\t\t\t{\r\n\t\t\t\t\tlpData->lpUserInput = new char[nLen+1];\r\n\t\t\t\t\tGetWindowText(lpData->hEdit,lpData->lpUserInput,nLen+1);\r\n\t\t\t\t}\r\n\t\t\t\tlpData->bResult = TRUE;\r\n\t\t\t\tDestroyWindow(hwndDlg);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tbreak;\r\n\tcase WM_CLOSE: \r\n\t\tDestroyWindow(hwndDlg);\r\n\t\tbreak;\r\n\tcase WM_DESTROY: \r\n \t\t// Perform cleanup tasks. \r\n \t\tPostQuitMessage(0); \r\n\t\t//PostMessage (hwndDlg,WM_QUIT,0,0);\r\n\t\tbreak;\r\n\tdefault:\r\n\t\treturn FALSE; \r\n\t\t\r\n\t} \r\n\treturn TRUE; \r\n} \r\n\r\nLIBAPI(int, krnln_InputBox)\r\n{\r\n\tBMInputBoxDATA data;\r\n\tHWND hParent = NULL;\r\n\tmemset(&data,0,sizeof(BMInputBoxDATA));\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[0].m_dtDataType !=_SDT_NULL && mystrlen(pArgInf[0].m_pText)>0)\r\n\t\tdata.lpText = pArgInf[0].m_pText;\r\n\tif(pArgInf[1].m_dtDataType !=_SDT_NULL)\r\n\t\tdata.lpTitle = pArgInf[1].m_pText;\r\n\tif(pArgInf[2].m_dtDataType !=_SDT_NULL)\r\n\t\tdata.lpIntiTxt = pArgInf[2].m_pText;\r\n\r\n\tif(pArgInf[4].m_dtDataType ==_SDT_NULL)\r\n\t\tdata.nType = 1;\r\n\telse{\r\n\t\tdata.nType = pArgInf[4].m_int;\r\n\t\tif(data.nType<1 || data.nType>4)\r\n\t\t\tdata.nType = 1;\r\n\t}\r\n\r\n\tif (6 <= nArgCount)\r\n\t{\r\n\t\tif(pArgInf[5].m_dtDataType !=_SDT_NULL)\r\n\t\t\thParent = (HWND)pArgInf[5].m_int;\r\n\t}\r\n\t \r\n\tLPBYTE lpDialogTemplate = BMInputBoxDialogTemplateData;\r\n\tHWND hDlg  = CreateDialogIndirectParam(::GetModuleHandle (NULL),(LPCDLGTEMPLATE)lpDialogTemplate, hParent, (DLGPROC)BMInputBoxDlgProc, (LPARAM)&data); \r\n\tif(hDlg){\r\n\t\tShowWindow(hDlg , SW_SHOW); \r\n\t\tUpdateWindow(hDlg); \r\n\t\tMSG msg; \r\n\t\twhile(GetMessage( &msg ,NULL,0,0))  { \r\n\t\t\t//if(msg.message == WM_CLOSE)MessageBox(NULL,\"exit\",NULL,MB_OK);\r\n\t\t\tif(msg.hwnd==data.hEdit && msg.message == WM_CHAR){\r\n\t\t\t\tif(msg.wParam == 13)\r\n\t\t\t\t\t::SendMessage (hDlg,WM_COMMAND,IDOK,0);\r\n\t\t\t\telse if(data.nType==2 || data.nType==3){\r\n\t\t\t\t\tif( !(msg.wParam =='-' ||(msg.wParam >='0' && msg.wParam <='9') || (data.nType==3 && msg.wParam =='.')))\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\t\t\r\n\t\t\tTranslateMessage(&msg); \r\n\t\t\tDispatchMessage(&msg); \r\n\t\t} \r\n\t}\r\n\tBOOL bResult = data.bResult ;\r\n\tif(bResult){\r\n\t\tINT nLen = 0;\r\n\t\t\r\n\t\tif(data.lpUserInput)\r\n\t\t\tnLen = mystrlen(data.lpUserInput);\r\n\t\telse\r\n\t\t\tdata.lpUserInput = (LPSTR)\"0\";\r\n\r\n\t\tswitch (pArgInf[3].m_dtDataType) \r\n\t\t{ \r\n\t\tcase SDT_TEXT: \r\n\t\t\tE_MFree(*pArgInf[3].m_ppText);\r\n\t\t\t*pArgInf[3].m_ppText = CloneTextData(data.lpUserInput,nLen);\r\n\t\t\tbreak;\r\n\t\tcase SDT_BYTE: \r\n\t\t\t*pArgInf[3].m_pByte = (BYTE)atoi(data.lpUserInput);\r\n\t\t\tbreak;\r\n\t\tcase SDT_SHORT: \r\n\t\t\t*pArgInf[3].m_pShort = (SHORT)atoi(data.lpUserInput);\r\n\t\t\tbreak;\r\n\t\tcase SDT_INT: \r\n\t\t\t*pArgInf[3].m_pInt = atoi(data.lpUserInput);\r\n\t\t\tbreak;\r\n\t\tcase SDT_INT64: \r\n\t\t\t*pArgInf[3].m_pInt64 = _atoi64(data.lpUserInput);\r\n\t\t\tbreak;\r\n\t\tcase SDT_FLOAT: \r\n\t\t\t*pArgInf[3].m_pFloat = (FLOAT)atof(data.lpUserInput);\r\n\t\t\tbreak;\r\n\t\tcase SDT_DOUBLE: \r\n\t\t\t*pArgInf[3].m_pDouble = atof(data.lpUserInput);\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tbResult = FALSE; \t\r\n\t\t} \r\n\r\n\t\tif(nLen>0)\r\n\t\t\tdelete [] data.lpUserInput;\r\n\t}\r\n\treturn bResult; \r\n\r\n}\r\n/*\r\nint __cdecl krnln_fnInputBox(int a1, int a2, int a3)\r\n{\r\n  char *v3; // edi@2\r\n  int v4; // eax@4\r\n  signed int v5; // eax@12\r\n  int v6; // edx@18\r\n  unsigned int v7; // eax@19\r\n  __int16 v8; // ax@24\r\n  char v9; // al@25\r\n  int v10; // eax@27\r\n  double v11; // st7@31\r\n  int v13; // edx@36\r\n  char v14; // [sp+14h] [bp-F4h]@4\r\n  char v15; // [sp+70h] [bp-98h]@7\r\n  char v16; // [sp+74h] [bp-94h]@5\r\n  char v17; // [sp+78h] [bp-90h]@9\r\n  char *String; // [sp+7Ch] [bp-8Ch]@24\r\n  int v19; // [sp+80h] [bp-88h]@11\r\n  char v20; // [sp+84h] [bp-84h]@36\r\n  char v21; // [sp+C4h] [bp-44h]@36\r\n\r\n  if ( *(_DWORD *)(a3 + 8) )\r\n    v3 = *(char **)a3;\r\n  else\r\n    v3 = 0;\r\n  v4 = IsEmptyStr(v3);\r\n  CInputDlg__CInputDlg(&v14, 0, v4 != 0 ? 1150 : 1037);\r\n  if ( *(_DWORD *)(a3 + 8) )\r\n    CString__operator_(&v16, v3);\r\n  if ( *(_DWORD *)(a3 + 20) )\r\n    CString__operator_(&v15, *(_DWORD *)(a3 + 12));\r\n  if ( *(_DWORD *)(a3 + 32) )\r\n    CString__operator_(&v17, *(_DWORD *)(a3 + 24));\r\n  if ( !*(_DWORD *)(a3 + 56) )\r\n  {\r\n    v19 = 1;\r\n    goto LABEL_18;\r\n  }\r\n  v5 = *(_DWORD *)(a3 + 48);\r\n  if ( v5 > 4 )\r\n    goto LABEL_39;\r\n  if ( v5 < 1 )\r\n  {\r\n    v19 = 1;\r\n    goto LABEL_18;\r\n  }\r\n  if ( v5 <= 4 )\r\n    v19 = *(_DWORD *)(a3 + 48);\r\n  else\r\nLABEL_39:\r\n    v19 = 4;\r\nLABEL_18:\r\n  if ( CDialog__DoModal(&v14) != 1 )\r\n  {\r\n    *(_DWORD *)a1 = 0;\r\n    goto LABEL_36;\r\n  }\r\n  v7 = *(_DWORD *)(a3 + 44);\r\n  if ( v7 > 0x80000301 )\r\n  {\r\n    if ( v7 == -2147482623 )\r\n    {\r\n      *(_QWORD *)*(_DWORD *)(a3 + 36) = _atoi64(String);\r\n    }\r\n    else\r\n    {\r\n      if ( v7 == -2147482367 )\r\n      {\r\n        **(float **)(a3 + 36) = atof(String);\r\n        v6 = a1;\r\n        *(_DWORD *)a1 = 1;\r\n        goto LABEL_36;\r\n      }\r\n      if ( v7 == -2147482111 )\r\n      {\r\n        v11 = atof(String);\r\n        v6 = a1;\r\n        *(_QWORD *)*(_DWORD *)(a3 + 36) = *(_QWORD *)&v11;\r\n        *(_DWORD *)a1 = 1;\r\n        goto LABEL_36;\r\n      }\r\n    }\r\n    goto LABEL_34;\r\n  }\r\n  if ( v7 == -2147482879 )\r\n  {\r\n    v10 = atoi(String);\r\n    v6 = a1;\r\n    **(_DWORD **)(a3 + 36) = v10;\r\n    *(_DWORD *)a1 = 1;\r\n    goto LABEL_36;\r\n  }\r\n  if ( v7 == -2147483644 )\r\n  {\r\n    krnl_MFree(**(_DWORD **)(a3 + 36));\r\n    **(_DWORD **)(a3 + 36) = CloneTextData(String);\r\n    v6 = a1;\r\n    *(_DWORD *)a1 = 1;\r\n    goto LABEL_36;\r\n  }\r\n  if ( v7 == -2147483391 )\r\n  {\r\n    v9 = atoi(String);\r\n    v6 = a1;\r\n    **(_BYTE **)(a3 + 36) = v9;\r\n    *(_DWORD *)a1 = 1;\r\n    goto LABEL_36;\r\n  }\r\n  if ( v7 != -2147483135 )\r\n  {\r\nLABEL_34:\r\n    v6 = a1;\r\n    *(_DWORD *)a1 = 1;\r\n    goto LABEL_36;\r\n  }\r\n  v8 = atoi(String);\r\n  v6 = a1;\r\n  **(_WORD **)(a3 + 36) = v8;\r\n  *(_DWORD *)a1 = 1;\r\nLABEL_36:\r\n  CInputEdit___CInputEdit(&v21, v6);\r\n  CInputEdit___CInputEdit(&v20, v13);\r\n  CString___CString(&String);\r\n  CString___CString(&v17);\r\n  CString___CString(&v16);\r\n  CString___CString(&v15);\r\n  return CDialog___CDialog(&v14);\r\n}\r\n\r\n  */\r\n\t/*\r\n\tHGLOBAL hDialogTemplate = NULL;\r\n\tHINSTANCE hInst = LoadLibrary(\"I:\\\\Program Files\\\\e5\\\\lib\\\\krnln.fne\");\r\n\tHRSRC hResource = ::FindResource(hInst, (LPCSTR)1037, RT_DIALOG);\r\n\thDialogTemplate = LoadResource(hInst, hResource);\r\n\tif (hDialogTemplate != NULL){\r\n\t\tINT nSize = ::SizeofResource (hInst,hResource);\r\n\t\tlpDialogTemplate = new BYTE[nSize];\r\n\t\tmemcpy(lpDialogTemplate,LockResource(hDialogTemplate),nSize);\r\n\r\n\tHANDLE hFile = CreateFile(\"E:\\\\ҵֿ֧\\\\ֲ\\\\InputBox.dat\",\r\n\t\tGENERIC_WRITE,\r\n\t\t0,\r\n\t\tNULL,\r\n\t\tCREATE_ALWAYS,\r\n\t\tFILE_ATTRIBUTE_ARCHIVE,\r\n\t\t0);\r\n\t\r\n\tBOOL bRet = FALSE;\r\n\tif(hFile != INVALID_HANDLE_VALUE)\r\n\t{\r\n\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tbRet = TRUE;\r\n\r\n\r\n\t\t\tif(WriteFile(hFile,lpDialogTemplate,nSize,&dwNumOfByteRead,NULL))\r\n\t\t\t{\r\n\t\t\t\tMessageBox(NULL,\"OK1\",NULL,MB_OK);\r\n\r\n\t\t\t}\r\n\r\n\t\tCloseHandle(hFile);\r\n\t}\r\n\r\n\t}\r\n\r\n\t\t\r\n\tUnlockResource(hDialogTemplate);\r\n\tFreeResource(hDialogTemplate);\r\n\tFreeLibrary(hInst);\r\n*/\r\n"
  },
  {
    "path": "krnln/krnln_InsBin.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n#include \"Myfunctions.h\"\r\n//ļд - ֽڼ\r\n/*\r\n    øʽ ߼͡ ֽڼ  дݵļţֽڼ дֽڼݣ...  - ϵͳֿ֧->ļд\r\n    ӢƣInsBin\r\n    һλֽڼݵļеǰдλôļʱ\"#д\"\"#Ķ\"Ȩޡɹ棬ʧܷؼ١ΪһԱظӡ\r\n    <1>ΪдݵļšΪͣintļɡļء\r\n    <2>ΪдֽڼݡΪֽڼbin\r\n*/\r\nLIBAPI(BOOL, krnln_InsBin)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn NULL;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn NULL;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\tBOOL bRet = FALSE;\r\n\r\n\tif(pFile->nType ==1)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tINT orgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\tif(orgLoc == HFILE_ERROR)\r\n\t\t\treturn FALSE;\r\n\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nBkLen = GetFileSize(hFile,NULL) - orgLoc;\r\n\t\tLPBYTE pBkData = NULL;\r\n\t\tif(nBkLen >0)\r\n\t\t{\r\n\t\t\tpBkData = new BYTE[nBkLen];\r\n\t\t\tif(!ReadFile(hFile, pBkData, nBkLen, &dwNumOfByteRead, 0))\r\n\t\t\t{\r\n\t\t\t\tdelete[] pBkData;\r\n\t\t\t\treturn FALSE;\r\n\t\t\t}\r\n\t\t\tSetFilePointer(hFile,orgLoc,NULL,FILE_BEGIN);//ָԭλ\r\n\t\t}\r\n\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPBYTE pData = pArgInf[i].m_pBin + 2*sizeof(INT);\r\n\t\t\tINT nLen = pArgInf[i].m_pInt[1];\r\n\r\n\t\t\tif(WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL)==FALSE)\r\n\t\t\t{\r\n\t\t\t\tbRet = FALSE;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n/*\t\t\tif(FlushFileBuffers(hFile)==FALSE)\r\n\t\t\t{\r\n\t\t\t\tbRet = FALSE;\r\n\t\t\t\tbreak;\r\n\t\t\t}*/\r\n\t\t}\r\n\t\tif(bRet && pBkData)\r\n\t\t{\r\n\t\t\torgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);//µǰλ,Աָ\r\n\t\t\tif(WriteFile(hFile,pBkData, nBkLen,&dwNumOfByteRead,NULL))\r\n\t\t\t{\r\n\t\t\t\tSetFilePointer(hFile,orgLoc,NULL,FILE_BEGIN);//ָԭλ\r\n//\t\t\t\tif(FlushFileBuffers(hFile)==FALSE)\r\n//\t\t\t\t\tbRet = FALSE;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tbRet = FALSE;\r\n\t\t}\r\n\t\tif(pBkData)\r\n\t\t\tdelete[] pBkData;\r\n\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\t\tLPBYTE pBufStart, pBufMax;\r\n\r\n\t\tINT orgLoc = pMemFile->GetPosition();\r\n\r\n\t\tINT nBkLen = pMemFile->GetBufferPtr (CMyMemFile::bufferRead,-1,(void **)&pBufStart,(void **)&pBufMax);\r\n\t\tLPBYTE pBkData = NULL;\r\n\t\tif(nBkLen >0)\r\n\t\t{\r\n\t\t\tpBkData = new BYTE[nBkLen];\r\n\t\t\tmemcpy(pBkData,pBufStart,nBkLen);\r\n\t\t}\r\n\r\n\t\tpMemFile->Seek (orgLoc,CMyMemFile::begin);\r\n\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPBYTE pData = pArgInf[i].m_pBin + 2*sizeof(INT);\r\n\t\t\tINT nLen = pArgInf[i].m_pInt[1];\r\n\t\t\tpMemFile->Write(pData,nLen);\r\n\t\t}\r\n\t\tif(pBkData)\r\n\t\t{\r\n\t\t\torgLoc = pMemFile->GetPosition();\r\n\t\t\tpMemFile->Write(pBkData, nBkLen);\r\n\t\t\tdelete[] pBkData;\r\n\t\t\tpMemFile->Seek (orgLoc,CMyMemFile::begin);\r\n\t\t}\r\n\r\n\t}else if(pFile->nType == 3)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tINT orgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\tif(orgLoc == HFILE_ERROR)\r\n\t\t\treturn FALSE;\r\n\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nBkLen = GetFileSize(hFile,NULL) - orgLoc;\r\n\t\tLPBYTE pBkData = NULL;\r\n\t\tif(nBkLen >0)\r\n\t\t{\r\n\t\t\tpBkData = new BYTE[nBkLen];\r\n\t\t\tif(!ReadFile(hFile, pBkData, nBkLen, &dwNumOfByteRead, 0))\r\n\t\t\t{\r\n\t\t\t\tdelete[] pBkData;\r\n\t\t\t\treturn FALSE;\r\n\t\t\t}\r\n\t\t\tnBkLen = dwNumOfByteRead;\r\n\t\t\tE_RC4_Calc(orgLoc, (unsigned char*)pBkData, nBkLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\tSetFilePointer(hFile,orgLoc,NULL,FILE_BEGIN);//ָԭλ\r\n\t\t}\r\n\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPBYTE pData = pArgInf[i].m_pBin + 2*sizeof(INT);\r\n\t\t\tINT nLen = pArgInf[i].m_pInt[1];\r\n\t\t\tINT nPos = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\r\n\t\t\tLPBYTE pTMP = (LPBYTE)malloc(nLen);\r\n\t\t\tmemcpy(pTMP, pData, nLen);\r\n\t\t\tpData = pTMP;\r\n\r\n\t\t\tE_RC4_Calc(orgLoc, (unsigned char*)pData, nLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\tif(WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL)==FALSE)\r\n\t\t\t{\r\n\t\t\t\tfree(pData);\r\n\t\t\t\tbRet = FALSE;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tfree(pData);\r\n\t\t}\r\n\t\tif(bRet && pBkData)\r\n\t\t{\r\n\t\t\torgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);//µǰλ,Աָ\r\n\t\t\tE_RC4_Calc(orgLoc, (unsigned char*)pBkData, nBkLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\tif(WriteFile(hFile,pBkData, nBkLen,&dwNumOfByteRead,NULL))\r\n\t\t\t{\r\n\t\t\t\tSetFilePointer(hFile,orgLoc,NULL,FILE_BEGIN);//ָԭλ\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tbRet = FALSE;\r\n\t\t}\r\n\t\tif(pBkData)\r\n\t\t\tdelete[] pBkData;\r\n\t}\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_InsLine.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ļд - ı\r\n/*\r\n    øʽ ߼͡ ı  дıļţͨ дı...  - ϵͳֿ֧->ļд\r\n    ӢƣInsLine\r\n    һλıеļеǰдλôļʱ\"#д\"\"#Ķ\"Ȩޡɹ棬ʧܷؼ١ΪһԱظӡ\r\n    <1>ΪдıļšΪͣintļɡļء\r\n    <2>ΪдıΪͨͣallֵΪıݣԶת޷תΪֽڼӳָ롢ûԶͣдݡ\r\n*/\r\nLIBAPI(BOOL, krnln_InsLine)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn NULL;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn NULL;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\tBOOL bRet = FALSE;\r\n\r\n\tif(pFile->nType ==1)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tINT orgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\tif(orgLoc == HFILE_ERROR)\r\n\t\t\treturn FALSE;\r\n\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nBkLen = GetFileSize(hFile,NULL) - orgLoc;\r\n\t\tLPBYTE pBkData = NULL;\r\n\t\tif(nBkLen >0)\r\n\t\t{\r\n\t\t\tpBkData = new BYTE[nBkLen];\r\n\t\t\tif(!ReadFile(hFile, pBkData, nBkLen, &dwNumOfByteRead, 0))\r\n\t\t\t{\r\n\t\t\t\tdelete[] pBkData;\r\n\t\t\t\treturn FALSE;\r\n\t\t\t}\r\n\t\t\tSetFilePointer(hFile,orgLoc,NULL,FILE_BEGIN);//ָԭλ\r\n\t\t}\r\n\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPSTR pData;\r\n\t\t\tBOOL bNeedFree = FALSE;\r\n\t\t\tif(pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\tpData = pArgInf[i].m_pText;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tpData = SDataToStr(&pArgInf[i]);\r\n\t\t\t\tif(pData == NULL)\r\n\t\t\t\t{\r\n\t\t\t\t\tWriteFile(hFile,\"\\r\\n\",2,&dwNumOfByteRead,NULL);\r\n//\t\t\t\t\tFlushFileBuffers(hFile);\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tbNeedFree = TRUE;\r\n\t\t\t}\r\n\r\n\t\t\tINT nLen = mystrlen(pData);\r\n\t\t\tif(nLen>0)\r\n\t\t\t{\r\n\t\t\t\tif(WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL))\r\n\t\t\t\t{\r\n\t\t\t\t\tWriteFile(hFile,\"\\r\\n\",2,&dwNumOfByteRead,NULL);\r\n//\t\t\t\t\tif(FlushFileBuffers(hFile)==FALSE)\r\n//\t\t\t\t\t\tbRet = FALSE;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tbRet = FALSE;\r\n\t\t\t}\r\n\r\n\t\t\tif(bNeedFree)\r\n\t\t\t\tfree(pData);\r\n\r\n\t\t\tif(bRet == FALSE)\r\n\t\t\t\tbreak;\r\n\r\n\t\t}\r\n\t\tif(bRet && pBkData)//Ϻ\r\n\t\t{\r\n\t\t\torgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);//µǰλ,Աָ\r\n\t\t\tif(WriteFile(hFile,pBkData, nBkLen,&dwNumOfByteRead,NULL))\r\n\t\t\t{\r\n\t\t\t\tSetFilePointer(hFile,orgLoc,NULL,FILE_BEGIN);//ָԭλ\r\n//\t\t\t\tif(FlushFileBuffers(hFile)==FALSE)\r\n//\t\t\t\t\tbRet = FALSE;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tbRet = FALSE;\r\n\t\t\t\r\n\t\t}\r\n\t\tif(pBkData)\r\n\t\t\tdelete[] pBkData;\r\n\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\r\n\t\tINT orgLoc = pMemFile->GetPosition();\r\n\r\n\t\tLPBYTE pBufStart, pBufMax;\r\n\r\n\t\tINT nBkLen = pMemFile->GetBufferPtr (CMyMemFile::bufferRead,-1,(void **)&pBufStart,(void **)&pBufMax);\r\n\t\tLPBYTE pBkData = NULL;\r\n\t\tif(nBkLen >0)\r\n\t\t{\r\n\t\t\tpBkData = new BYTE[nBkLen];\r\n\t\t\tmemcpy(pBkData,pBufStart,nBkLen);\r\n\t\t}\r\n\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPSTR pData;\r\n\t\t\tBOOL bNeedFree = FALSE;\r\n\t\t\tif(pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\tpData = pArgInf[i].m_pText;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tpData = SDataToStr(&pArgInf[i]);\r\n\t\t\t\tif(pData == NULL)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tbNeedFree = TRUE;\r\n\t\t\t}\r\n\r\n\t\t\tINT nLen = mystrlen(pData);\r\n\t\t\tif(nLen>0)\r\n\t\t\t\tpMemFile->Write(pData,nLen);\r\n\t\t\tpMemFile->Write(\"\\r\\n\",2);\r\n\r\n\t\t\tif(bNeedFree)\r\n\t\t\t\tfree(pData);\r\n\t\t}\r\n\t\tif(pBkData)\r\n\t\t{\r\n\t\t\torgLoc = pMemFile->GetPosition();\r\n\t\t\tpMemFile->Write(pBkData, nBkLen);\r\n\t\t\tdelete[] pBkData;\r\n\t\t\tpMemFile->Seek (orgLoc,CMyMemFile::begin);\r\n\t\t}\r\n\r\n\t}else if(pFile->nType ==3)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tINT orgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\tif(orgLoc == HFILE_ERROR)\r\n\t\t\treturn FALSE;\r\n\t\t\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nPos;\r\n\t\tINT nBkLen = GetFileSize(hFile,NULL) - orgLoc;\r\n\t\tLPBYTE pBkData = NULL;\r\n\t\tif(nBkLen >0)\r\n\t\t{\r\n\t\t\tpBkData = new BYTE[nBkLen];\r\n\t\t\tif(!ReadFile(hFile, pBkData, nBkLen, &dwNumOfByteRead, 0))\r\n\t\t\t{\r\n\t\t\t\tdelete[] pBkData;\r\n\t\t\t\treturn FALSE;\r\n\t\t\t}\r\n\t\t\tnBkLen = dwNumOfByteRead;\r\n\t\t\tE_RC4_Calc(orgLoc, (unsigned char*)pBkData, nBkLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\tSetFilePointer(hFile,orgLoc,NULL,FILE_BEGIN);//ָԭλ\r\n\t\t}\r\n\r\n\t\tunsigned char pszRN[2] = {0};\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPSTR pData;\r\n\t\t\tBOOL bNeedFree = FALSE;\r\n\t\t\tif(pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\tpData = pArgInf[i].m_pText;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tpData = SDataToStr(&pArgInf[i]);\r\n\t\t\t\tif(pData == NULL)\r\n\t\t\t\t{\r\n\t\t\t\t\tnPos = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r\n\t\t\t\t\tpszRN[0] = '\\r';\r\n\t\t\t\t\tpszRN[1] = '\\n';\r\n\t\t\t\t\tE_RC4_Calc(nPos, pszRN, 2, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\t\tWriteFile(hFile, pszRN, 2, &dwNumOfByteRead,NULL);\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tbNeedFree = TRUE;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tINT nLen = mystrlen(pData);\r\n\t\t\tif(nLen>0)\r\n\t\t\t{\r\n\t\t\t\tif (!bNeedFree)\r\n\t\t\t\t{\r\n\t\t\t\t\tLPSTR pTMP = (LPSTR)malloc(nLen);\r\n\t\t\t\t\tmemcpy(pTMP, pData, nLen);\r\n\t\t\t\t\tpData = pTMP;\r\n\t\t\t\t\tbNeedFree = TRUE;\r\n\t\t\t\t}\r\n\t\t\t\tnPos = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r\n\t\t\t\tE_RC4_Calc(nPos, (unsigned char*)pData, nLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\tif(WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL))\r\n\t\t\t\t{\r\n\t\t\t\t\tnPos = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r\n\t\t\t\t\tpszRN[0] = '\\r';\r\n\t\t\t\t\tpszRN[1] = '\\n';\r\n\t\t\t\t\tE_RC4_Calc(nPos, pszRN, 2, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\t\tWriteFile(hFile, pszRN, 2, &dwNumOfByteRead,NULL);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tbRet = FALSE;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(bNeedFree)\r\n\t\t\t\tfree(pData);\r\n\t\t\t\r\n\t\t\tif(bRet == FALSE)\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(bRet && pBkData)//Ϻ\r\n\t\t{\r\n\t\t\torgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);//µǰλ,Աָ\r\n\t\t\tE_RC4_Calc(orgLoc, (unsigned char*)pBkData, nBkLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\tif(WriteFile(hFile,pBkData, nBkLen,&dwNumOfByteRead,NULL))\r\n\t\t\t\tSetFilePointer(hFile,orgLoc,NULL,FILE_BEGIN);//ָԭλ\r\n\t\t\telse\r\n\t\t\t\tbRet = FALSE;\r\n\t\t}\r\n\t\tif(pBkData)\r\n\t\t\tdelete[] pBkData;\r\n\t}\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_InsText.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ļд - ı\r\n/*\r\n    øʽ ߼͡ ı  дıļţͨ дı...  - ϵͳֿ֧->ļд\r\n    ӢƣInsText\r\n    һλıݵļеǰдλôļʱ\"#д\"\"#Ķ\"Ȩޡɹ棬ʧܷؼ١ΪһԱظӡ\r\n    <1>ΪдıļšΪͣintļɡļء\r\n    <2>ΪдıΪͨͣallֵΪıݣԶת޷תΪֽڼӳָ롢ûԶͣдݡ\r\n*/\r\nLIBAPI(BOOL, krnln_InsText)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn NULL;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn NULL;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\tBOOL bRet = FALSE;\r\n\r\n\tif(pFile->nType ==1)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tINT orgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\tif(orgLoc == HFILE_ERROR)\r\n\t\t\treturn FALSE;\r\n\r\n\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nBkLen = GetFileSize(hFile,NULL) - orgLoc;\r\n\t\tLPBYTE pBkData = NULL;\r\n\t\tif(nBkLen >0)\r\n\t\t{\r\n\t\t\tpBkData = new BYTE[nBkLen];\r\n\t\t\tif(!ReadFile(hFile, pBkData, nBkLen, &dwNumOfByteRead, 0))\r\n\t\t\t{\r\n\t\t\t\tdelete[] pBkData;\r\n\t\t\t\treturn FALSE;\r\n\t\t\t}\r\n\t\t\tSetFilePointer(hFile,orgLoc,NULL,FILE_BEGIN);//ָԭλ\r\n\t\t}\r\n\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPSTR pData;\r\n\t\t\tBOOL bNeedFree = FALSE;\r\n\t\t\tif(pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\tpData = pArgInf[i].m_pText;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tpData = SDataToStr(&pArgInf[i]);\r\n\t\t\t\tif(pData == NULL)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tbNeedFree = TRUE;\r\n\t\t\t}\r\n\r\n\t\t\tINT nLen = mystrlen(pData);\r\n\t\t\tif(nLen>0)\r\n\t\t\t{\r\n\t\t\t\tif(WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL))\r\n\t\t\t\t{\r\n//\t\t\t\t\tif(FlushFileBuffers(hFile)==FALSE)\r\n//\t\t\t\t\t\tbRet = FALSE;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tbRet = FALSE;\r\n\t\t\t}\r\n\r\n\t\t\tif(bNeedFree)\r\n\t\t\t\tfree(pData);\r\n\r\n\t\t\tif(bRet == FALSE)\r\n\t\t\t\tbreak;\r\n\r\n\t\t}\r\n\t\tif(bRet && pBkData)\r\n\t\t{\r\n\t\t\torgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);//µǰλ,Աָ\r\n\t\t\tif(WriteFile(hFile,pBkData, nBkLen,&dwNumOfByteRead,NULL))\r\n\t\t\t{\r\n\t\t\t\tSetFilePointer(hFile,orgLoc,NULL,FILE_BEGIN);//ָԭλ\r\n//\t\t\t\tif(FlushFileBuffers(hFile)==FALSE)\r\n//\t\t\t\t\tbRet = FALSE;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tbRet = FALSE;\r\n\t\t\t\r\n\t\t}\r\n\t\tif(pBkData)\r\n\t\t\tdelete[] pBkData;\r\n\t\t\r\n\t\t\r\n\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\r\n\t\tINT orgLoc = pMemFile->GetPosition();\r\n\r\n\t\tLPBYTE pBufStart, pBufMax;\r\n\r\n\t\tINT nBkLen = pMemFile->GetBufferPtr (CMyMemFile::bufferRead,-1,(void **)&pBufStart,(void **)&pBufMax);\r\n\t\tLPBYTE pBkData = NULL;\r\n\t\tif(nBkLen >0)\r\n\t\t{\r\n\t\t\tpBkData = new BYTE[nBkLen];\r\n\t\t\tmemcpy(pBkData,pBufStart,nBkLen);\r\n\t\t}\r\n\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPSTR pData;\r\n\t\t\tBOOL bNeedFree = FALSE;\r\n\t\t\tif(pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\tpData = pArgInf[i].m_pText;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tpData = SDataToStr(&pArgInf[i]);\r\n\t\t\t\tif(pData == NULL)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tbNeedFree = TRUE;\r\n\t\t\t}\r\n\r\n\t\t\tINT nLen = mystrlen(pData);\r\n\t\t\tif(nLen>0)\r\n\t\t\t\tpMemFile->Write(pData,nLen);\r\n\r\n\t\t\tif(bNeedFree)\r\n\t\t\t\tfree(pData);\r\n\t\t}\r\n\t\tif(pBkData)\r\n\t\t{\r\n\t\t\torgLoc = pMemFile->GetPosition();\r\n\t\t\tpMemFile->Write(pBkData, nBkLen);\r\n\t\t\tdelete[] pBkData;\r\n\t\t\tpMemFile->Seek (orgLoc,CMyMemFile::begin);\r\n\t\t}\r\n\r\n\t}else if(pFile->nType ==3)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tINT orgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\tif(orgLoc == HFILE_ERROR)\r\n\t\t\treturn FALSE;\r\n\t\t\r\n\t\t\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nBkLen = GetFileSize(hFile,NULL) - orgLoc;\r\n\t\tLPBYTE pBkData = NULL;\r\n\t\tif(nBkLen >0)\r\n\t\t{\r\n\t\t\tpBkData = new BYTE[nBkLen];\r\n\t\t\tif(!ReadFile(hFile, pBkData, nBkLen, &dwNumOfByteRead, 0))\r\n\t\t\t{\r\n\t\t\t\tdelete[] pBkData;\r\n\t\t\t\treturn FALSE;\r\n\t\t\t}\r\n\t\t\tnBkLen = dwNumOfByteRead;\r\n\t\t\tE_RC4_Calc(orgLoc, (unsigned char*)pBkData, nBkLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\tSetFilePointer(hFile,orgLoc,NULL,FILE_BEGIN);//ָԭλ\r\n\t\t}\r\n\t\t\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPSTR pData;\r\n\t\t\tBOOL bNeedFree = FALSE;\r\n\t\t\tINT nPos = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\r\n\t\t\tif(pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\tpData = pArgInf[i].m_pText;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tpData = SDataToStr(&pArgInf[i]);\r\n\t\t\t\tif(pData == NULL)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tbNeedFree = TRUE;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tINT nLen = mystrlen(pData);\r\n\t\t\tif(nLen>0)\r\n\t\t\t{\r\n\t\t\t\tif (!bNeedFree)\r\n\t\t\t\t{\r\n\t\t\t\t\tLPSTR pTMP = (LPSTR)malloc(nLen);\r\n\t\t\t\t\tmemcpy(pTMP, pData, nLen);\r\n\t\t\t\t\tpData = pTMP;\r\n\t\t\t\t\tbNeedFree = TRUE;\r\n\t\t\t\t}\r\n\t\t\t\tE_RC4_Calc(nPos, (unsigned char*)pData, nLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\tif(!WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL))\r\n\t\t\t\t\tbRet = FALSE;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(bNeedFree)\r\n\t\t\t\tfree(pData);\r\n\t\t\t\r\n\t\t\tif(bRet == FALSE)\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tif(bRet && pBkData)\r\n\t\t{\r\n\t\t\torgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);//µǰλ,Աָ\r\n\t\t\tE_RC4_Calc(orgLoc, (unsigned char*)pBkData, nBkLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\tif(WriteFile(hFile,pBkData, nBkLen,&dwNumOfByteRead,NULL))\r\n\t\t\t{\r\n\t\t\t\tSetFilePointer(hFile,orgLoc,NULL,FILE_BEGIN);//ָԭλ\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tbRet = FALSE;\r\n\t\t}\r\n\t\tif(pBkData)\r\n\t\t\tdelete[] pBkData;\t\r\n\t}\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_IsCalcOK.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <float.h>\r\n// - Ƿȷ\r\n/*\r\n    øʽ ߼͡ Ƿȷ ˫С Уļ - ϵͳֿ֧->\r\n    ӢƣIsCalcOK\r\n    ԳˡηƽֵֵֵֵȻ󷴶ȵѧ˫ȽֵУ飬ֵȷЧ档ֵĽؼ١Ϊ\r\n    <1>ΪУļΪ˫Сͣdouble\r\n\r\n*/\r\nLIBAPI(BOOL, krnln_IsCalcOK)\r\n{\r\n\tif(_finite(ArgInf.m_double)!=0)\r\n\t\treturn TRUE;\r\n\treturn FALSE;\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_IsDebugVer.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n// - ǷΪ԰\r\n\r\nextern \"C\" void _cdecl krnln_IsDebugVer (INT nArgCount,MDATA_INF ArgInf,...)\r\n{\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_IsFileExist.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <SHLWAPI.h>\r\n#pragma comment(lib,\"SHLWAPI.lib\") \r\n//̲ - ļǷ\r\n/*\r\n    øʽ ߼͡ ļǷ ı Եļƣ - ϵͳֿ֧->̲\r\n    ӢƣIsFileExist\r\n    жָĴļǷʵڡڷ棬򷵻ؼ١Ϊ\r\n    <1>ΪԵļơΪıͣtext\r\n*/\r\nLIBAPI(BOOL, krnln_IsFileExist)\r\n{\r\n\treturn PathFileExists(ArgInf.m_pText);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_IsHaveTextInClip.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ϵͳ - пı\r\n/*\r\n    øʽ ߼͡ пı  - ϵͳֿ֧->ϵͳ\r\n    ӢƣIsHaveTextInClip\r\n    ǰ Windows ϵͳıݣ򷵻棬򷵻ؼ١Ϊ\r\n*/\r\nLIBAPI(BOOL, krnln_IsHaveTextInClip)\r\n{\r\n\tBOOL bRet = FALSE;\r\n\tif(OpenClipboard(NULL))\r\n\t{\r\n\t\tHANDLE hClip =  GetClipboardData(CF_TEXT);\r\n\t\tif(hClip)\r\n\t\t\tbRet = TRUE;\r\n\t\tCloseClipboard();\r\n\t}\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_IsRegItemExist.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n#pragma comment(lib,\"advapi32.lib\") \r\n//ϵͳ - עǷ\r\n/*\r\n    øʽ ߼͡ עǷ  Ŀ¼ı ȫ·ע - ϵͳֿ֧->ϵͳ\r\n    ӢƣIsRegItemExist\r\n    ָעڣ棬򷵻ؼ١עǷĬֵĿӡ\\ţ硰test\\Ϊм\r\n    <1>ΪĿ¼ΪͣintΪ³ֵ֮һ 1#ࣻ 2#ã 3#û 4#ػ 5#û\r\n    <2>Ϊȫ·עΪıͣtext\r\n*/\r\nLIBAPI(BOOL, krnln_IsRegItemExist)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tHKEY hRootkey = GetRegRootVal(pArgInf[0].m_int);\r\n\tBOOL bRet = FALSE;\r\n\tINT nLen = mystrlen(pArgInf[1].m_pText);\r\n\tif(hRootkey && nLen)\r\n\t{\r\n\t\tHKEY hkey;\r\n\t\tLPSTR pSubkey = new char [nLen +1];\r\n\t\tstrcpy(pSubkey,pArgInf[1].m_pText);\r\n\t\tLPSTR pKeyname = strrchr(pSubkey,'\\\\');\r\n\t\tif(pKeyname)\r\n\t\t{\r\n\t\t\t*pKeyname = 0;\r\n\t\t\tpKeyname++;\r\n\t\t}\r\n\t\tif(RegOpenKey(hRootkey,pSubkey,&hkey)==ERROR_SUCCESS)\r\n\t\t{\r\n\t\t\tDWORD nLen = MAX_PATH;\r\n\t\t\tDWORD dwType;\r\n\t\t\tchar sRetVal[MAX_PATH];\r\n\t\t\tINT nRet = RegQueryValueEx(hkey,pKeyname,NULL,&dwType,(LPBYTE)sRetVal,&nLen);\r\n\t\t\tif(ERROR_SUCCESS == nRet || nRet == ERROR_MORE_DATA)\r\n\t\t\t{\r\n\t\t\t\tbRet = TRUE;\r\n\t\t\t}\r\n\t\t\tRegCloseKey(hkey);\r\n\t\t}\r\n\t\tdelete [] pSubkey;\r\n\t}\r\n\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_LCase.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n//ı - Сд\r\n/*\r\n    øʽ ı͡ Сд ı 任ı - ϵͳֿ֧->ı\r\n    ӢƣLCase\r\n    ıеĴдӢĸ任ΪСдر任ĽıΪ\r\n    <1>Ϊ任ıΪıͣtext\r\n*/\r\nLIBAPI(char*, krnln_LCase)\r\n{// ߺŸ\r\n\tregister char* pSrc = ArgInf.m_pText;\r\n\tUINT nLen = mystrlen(pSrc);\r\n\tif (nLen==0) return NULL;\r\n\tchar *pText = (char*)E_MAlloc_Nzero(nLen+1);\r\n\tregister char* pDes = pText;\r\n\tregister unsigned char* ltb = lowtable;\r\n\tfor (UINT i=0; i<nLen; i++)\r\n\t{\r\n\t\tif (pSrc[i]<0)\r\n\t\t{\r\n\t\t\t*((short*)(pDes+i)) = *((short*)(pSrc+i));\r\n\t\t\ti++;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tpDes[i] = ltb[(unsigned char)(pSrc[i])];\r\n\t\t}\r\n\t}\r\n\tpText[nLen] = '\\0';\r\n\treturn pText;\r\n}\r\n// {// ԭ\r\n// \tUINT nLen = strlen(ArgInf.m_pText);\r\n// \tif(nLen==0)return NULL;\r\n// \tchar *pText = (char*)E_MAlloc(nLen+1);\r\n// \tstrcpy(pText,ArgInf.m_pText);\r\n// \tUINT i=0;\r\n// \twhile(i < nLen)\r\n// \t{\r\n// \t\tif(pText[i]<0)\r\n// \t\t\ti+=2;//\r\n// \t\telse\r\n// \t\t{\r\n// \t\t\tpText[i] = tolower(pText[i]);\r\n// \t\t\ti++;\r\n// \t\t}\r\n// \r\n// \t}\r\n// \treturn pText;\t\r\n// }\r\n"
  },
  {
    "path": "krnln/krnln_LTrim.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ı - ɾ׿\r\n/*\r\n    øʽ ı͡ ɾ׿ ı ɾոı - ϵͳֿ֧->ı\r\n    ӢƣLTrim\r\n    һıаɾײȫǻǿոָıΪ\r\n    <1>ΪɾոıΪıͣtext\r\n\r\n*/\r\nLIBAPI(char*, krnln_LTrim)\r\n{// ߺ \r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tregister unsigned char *str1 = (unsigned char*)pArgInf[0].m_pText;\r\n\r\n\twhile ( *str1 )\r\n\t{\r\n\t\tif (*str1 == ' ')\r\n\t\t\tstr1++;\r\n\t\telse if (*((unsigned short*)str1) == 0xA1A1)\r\n\t\t\tstr1+=2;\r\n\t\telse\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tif (!*str1) return NULL; //ıֱӷ\r\n\tINT nLen = mystrlen((char*)str1);\r\n\tchar *pText = (char*)E_MAlloc_Nzero(nLen+1);\r\n\tmemcpy(pText, str1, nLen+1);\r\n\t\r\n\treturn pText;\r\n}\r\n// {// ԭ\r\n// \tINT nLen = strlen(ArgInf.m_pText);\r\n// \tif(nLen==0)return NULL;\r\n// \tINT i = 0;\r\n// \tchar* pSrc = ArgInf.m_pText;\r\n// \twhile(i < nLen)\r\n// \t{\r\n// \t\tif(*pSrc == ' ' || strncmp(pSrc,\"\",2)==0)\r\n// \t\t{\r\n// \t\t\tif(*pSrc< 0)\r\n// \t\t\t{\r\n// \t\t\t\ti+=2;\r\n// \t\t\t\tpSrc+=2;\r\n// \t\t\t}\r\n// \t\t\telse\r\n// \t\t\t{\r\n// \t\t\t\tpSrc++;\r\n// \t\t\t\ti++;\r\n// \t\t\t}\r\n// \t\t}\r\n// \t\telse\r\n// \t\t\tbreak;\r\n// \r\n// \t}\r\n// \tnLen = strlen(pSrc);\r\n// \tif(nLen==0)return NULL;\r\n// \r\n// \tchar *pText = (char*)E_MAlloc(nLen+1);\r\n// \tstrcpy(pText,pSrc);\r\n// \r\n// \treturn pText;\r\n// \r\n// }\r\n"
  },
  {
    "path": "krnln/krnln_MakeLong.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//λ - ϲ\r\n/*\r\n    øʽ ͡ ϲ  ϲ1 ϲ2 - ϵͳֿ֧->λ\r\n    ӢƣMakeLong\r\n    һĵ16λõĵ16λڶĵ16λõĸ16λԴ˺ϲһغϲĽΪм\r\n    <1>Ϊϲ1Ϊͣint\r\n    <2>Ϊϲ2Ϊͣint\r\n*/\r\nLIBAPI(int, krnln_MakeLong)\r\n{\r\n\tPMDATA_INF pArg = &ArgInf;\r\n\tint n = MAKELONG (pArg[0].m_int, pArg[1].m_int);\r\n\treturn n;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_MakeWord.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//λ - ϲ\r\n/*\r\n    øʽ ͡ ϲ  ϲ1 ϲ2 - ϵͳֿ֧->λ\r\n    ӢƣMakeWord\r\n    һĵ8λõĵ8λڶĵ8λõĸ8λԴ˺ϲһغϲĽΪм\r\n    <1>Ϊϲ1Ϊͣint\r\n    <2>Ϊϲ2Ϊͣint\r\n*/\r\nLIBAPI(int, krnln_MakeWord)\r\n{\r\n\tPMDATA_INF pArg = &ArgInf;\r\n\tint n = MAKEWORD (pArg[0].m_int, pArg[1].m_int);\r\n\treturn n;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_MkDir.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//̲ - Ŀ¼\r\n/*\r\n    øʽ ߼͡ Ŀ¼ ı Ŀ¼ƣ - ϵͳֿ֧->̲\r\n    ӢƣMkDir\r\n    һµĿ¼ɹ棬ʧܷؼ١Ϊ\r\n    <1>ΪĿ¼ơΪıͣtext\r\n*/\r\nLIBAPI(BOOL, krnln_MkDir)\r\n{\r\n\tSECURITY_ATTRIBUTES SecAttrib;\r\n\tSecAttrib.nLength=sizeof(SECURITY_ATTRIBUTES);\r\n\tSecAttrib.lpSecurityDescriptor = NULL;\r\n\tSecAttrib.bInheritHandle = FALSE;\r\n\t\r\n\treturn CreateDirectory(ArgInf.m_pText,&SecAttrib);//Ŀ¼\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_MsgBox.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <stdio.h>\r\n#include \"LTrimZeroChr.h\"\r\n\r\n//#pragma comment(lib,\"oleaut32.lib\") \r\n\r\n//ϵͳ - Ϣ\r\n/*\r\n    øʽ ͡ Ϣ ͨ ʾϢ ťı ڱݣ - ϵͳֿ֧->ϵͳ\r\n    ӢƣMsgBox\r\n    ڶԻʾϢȴûťһûһťΪ³ֵ֮һ 0#ȷť 1#ȡť 2#ť 3#ť 4#ť 5#ť 6#ťԻСȡť ESC 뵥ȡťЧͬΪ\r\n    <1>ΪʾϢΪͨͣallʾϢֻΪıֵ߼ֵʱ䡣ʾϢΪıҰУڸ֮ûس (ַ (13))з (ַ (10)) سз (ַ (13) + ַ (10)) ָ\r\n    <2>ΪťΪͣintʼֵΪ0ֵ¼鳣ֵɣڽЩֵɲֵʱÿֵֻȡһ֣⣩ \r\n  һ飨ԻʾťĿ\r\n    0#ȷť 1#ȷȡť 2#Ժť 3#ȡǷť     4#Ƿť 5#ȡť\r\n  ڶ飨ͼʽ\r\n    16#ͼꣻ 32#ѯͼꣻ 48#ͼꣻ 64#Ϣͼ\r\n  飨˵һťȱʡĬֵ\r\n    0#Ĭϰťһ 256#Ĭϰť 512#Ĭϰť 768#Ĭϰť\r\n  飨εȴϢ\r\n    0#ȴ 4096#ϵͳȴ\r\n  飨\r\n    65536#λǰ̨ 524288#ıҶ\r\n\r\n    <3>Ϊڱ⡱ΪıͣtextԱʡԡֵָʾڶԻеıʡԣĬΪıϢ\r\n*/\r\n\r\nLIBAPI(int, krnln_MsgBox)\r\n{\r\n\tchar str [MAX_PATH];\r\n    HWND hWnd=NULL;\r\n\tLPCSTR lpText=NULL;\r\n\tLPCSTR lpCaption=\"Ϣ\";\r\n    UINT uType=MB_OK;\r\n\r\n\tif((ArgInf.m_dtDataType & DT_IS_ARY) == 0)//\r\n\t{\r\n\t\t\r\n\t\t\r\n\t\tswitch(ArgInf.m_dtDataType)\r\n\t\t{\r\n\t\tcase SDT_TEXT:\r\n\t\t\tlpText = ArgInf.m_pText;\r\n\t\t\tbreak;\r\n\t\tcase SDT_BYTE:\r\n\t\t\t{\r\n\t\t\t\tINT nVal = ArgInf.m_byte;\r\n\t\t\t\tsprintf(str,\"%d\",nVal);\r\n\t\t\t\tlpText = str;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase SDT_SHORT:\r\n\t\t\t{\r\n\t\t\t\tINT nVal = ArgInf.m_short;\r\n\t\t\t\tsprintf(str,\"%d\",nVal);\r\n\t\t\t\tlpText = str;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase SDT_INT:\r\n\t\tcase SDT_SUB_PTR:\r\n\t\t\tsprintf(str,\"%d\",ArgInf.m_int);\r\n\t\t\tlpText = str;\r\n\t\t\tbreak;\r\n\t\tcase SDT_INT64:\r\n\t\t\tsprintf(str,\"%I64d\",ArgInf.m_int64);\r\n\t\t\tlpText = str;\r\n\t\t\tbreak;\r\n\t\tcase SDT_FLOAT:\r\n\t\t\tsprintf(str,\"%f\",ArgInf.m_float);\r\n\t\t\tLTrimZeroChr(str);\r\n\t\t\tlpText = str;\r\n\t\t\tbreak;\r\n\t\tcase SDT_DOUBLE:\r\n\t\t\tsprintf(str,\"%.13g\",ArgInf.m_double);\r\n\t\t\tLTrimZeroChr(str);\r\n\t\t\tlpText = str;\r\n\t\t\tbreak;\r\n\t\tcase SDT_BOOL:\r\n\t\t\tif(ArgInf.m_bool)\r\n\t\t\t\tstrcpy(str,\"\");\r\n\t\t\telse\r\n\t\t\t\tstrcpy(str,\"\");\r\n\t\t\tlpText = str;\r\n\t\t\tbreak;\r\n\r\n\t\tcase SDT_DATE_TIME:\r\n\t\t\tDateTimeFormat(str,ArgInf.m_double);\r\n\t\t\tlpText = str;\r\n\t\t}\r\n\r\n\t}\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[1].m_dtDataType!=_SDT_NULL)\r\n\t{\r\n\t\tuType=pArgInf[1].m_int;\r\n\t}\r\n\tif(pArgInf[2].m_dtDataType!=_SDT_NULL)\r\n\t{\r\n\t\tlpCaption=pArgInf[2].m_pText;\r\n\t}\r\n\tif(nArgCount>3)//5.3\"\"\r\n\t{\r\n\t\tif(pArgInf[3].m_dtDataType==SDT_INT)\r\n\t\t{\r\n\t\t\thWnd=(HWND)pArgInf[3].m_int;\r\n\t\t}\r\n\t}\r\n\tINT nRet = MessageBox(hWnd,lpText,lpCaption,uType);\r\n\treturn (nRet-1);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_NumToRMB.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n#include \"Myfunctions.h\"\r\n\r\n//ֵת - ֵд \r\n/*\r\n    øʽ ı͡ ֵ ˫С תʽֵ߼ ǷתΪ壩 - ϵͳֿ֧->ֵת\r\n    ӢƣNumToRMB\r\n    ֵתΪļдʽתıΪ\r\n    <1>ΪתʽֵΪ˫Сͣdouble\r\n    <2>ΪǷתΪ塱Ϊ߼ͣboolʼֵΪ١ֵΪ٣תΪ塣\r\n*/\r\nLIBAPI(char*, krnln_NumToRMB)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[0].m_double<0)\r\n\t\treturn NULL;\r\n\tdouble dInt;\r\n\tdouble dFloat = modf(pArgInf[0].m_double,&dInt);\r\n\tLPSTR pInt = NULL;\r\n\tLPSTR pFloat = NULL;\r\n\tINT nLen = 64;\r\n\tINT nPre=1;\r\n\tif(dInt !=0)\r\n\t{\r\n\t\tpInt = IntNumToChn(dInt,pArgInf[1].m_bool,nPre);\r\n\t\tnLen += mystrlen(pInt);\r\n\t}\r\n\r\n\tif(dFloat !=0)\r\n\t{\r\n\t\tpFloat = FloatNumToRMB(dFloat,pArgInf[1].m_bool);\r\n\t\tif(pFloat)\r\n\t\t\tnLen += mystrlen(pFloat);\r\n\t}\r\n\t\r\n\tLPSTR pText = (LPSTR)E_MAlloc (nLen);\r\n\tif(pFloat==NULL && pInt==NULL)\r\n\t{\r\n\t\tstrcpy(pText,\"\");\r\n\t\treturn pText;\r\n\t}\r\n\t*pText=0;//MessageBox(NULL,pText,NULL,MB_OK);\r\n\tif(pInt)\r\n\t{\r\n\t\tstrcpy(pText,pInt);\r\n\t\tfree(pInt);\r\n\t\tstrcat(pText,\"Ԫ\");\r\n\t}\r\n\r\n\tif(pFloat && *pFloat)\r\n\t{\r\n\t\tif(pInt && nPre==0)\r\n\t\t\tstrcat(pText,\"\");\r\n\t\tstrcat(pText,pFloat);\r\n\t\tfree(pFloat);\r\n\t}\r\n\telse\r\n\t\tstrcat(pText,\"\");\r\n\r\n\treturn pText;\t\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_NumToText.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <stdio.h>\r\n#include \"LTrimZeroChr.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ֵת - ֵʽı \r\n/*\r\n    øʽ ı͡ ֵʽı ˫С תΪıֵ Сλݣ߼ Ƿǧλָ - ϵͳֿ֧->ֵת\r\n    ӢƣNumToText\r\n    һıֵָʽתĽΪ\r\n    <1>ΪתΪıֵΪ˫Сͣdouble\r\n    <2>ΪСλΪͣintԱʡԡ0ʾСұӦ뱣λ0ʾ뵽С0ʾС뵽λá磺ֵʽı (1056.65, 1, )  1056.7 ֵʽı (1056.65, 0, )  1057 ֵʽı (1056.65, -1, )  1060ʡԱĬΪʵʴڵСλ\r\n    <3>ΪǷǧλָΪ߼ͣboolʼֵΪ١ֵΪ棬ֵıÿǧλ϶ԶһŽзָ\r\n*/\r\nLIBAPI(char*, krnln_NumToText)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tchar str [MAX_PATH];\r\n\tchar strFomar [MAX_PATH];\r\n\tif(pArgInf[1].m_dtDataType == _SDT_NULL)\r\n\t{\r\n\t\tstrcpy(strFomar,\"%lf\");\r\n\t\t\r\n\t}\r\n\telse\r\n\t{\r\n\t\tINT nNum = pArgInf[1].m_int;\r\n\t\tif(nNum <0)\r\n\t\t\tnNum = 0;\r\n\t\tif(nNum>8)\r\n\t\t\tnNum = 8;\r\n\t\tsprintf(&strFomar[1],\".%dlf\",nNum);\r\n\t\tstrFomar[0]='%';\r\n\t}\r\n\r\n\tsprintf(str,strFomar,ArgInf.m_double);\r\n\tif(pArgInf[1].m_dtDataType == _SDT_NULL)\r\n\t\tLTrimZeroChr(str);\r\n\r\n\tif(pArgInf[2].m_bool)\r\n\t{\r\n\t\tstrcpy(strFomar,str);\r\n\t\tLPSTR pStr = strFomar;\r\n\t\twhile(*pStr!=0 && *pStr !='.')\r\n\t\t\tpStr++;\r\n\t\tINT nNum = pStr - strFomar;\r\n\t\tpStr = strFomar;\r\n\t\tif(strFomar[0]=='-')\r\n\t\t{\r\n\t\t\tnNum--;\r\n\t\t\tpStr++;\r\n\t\t}\r\n\t\tif(nNum>3)\r\n\t\t{\r\n\t\t\tINT nMax = nNum/3;\r\n\t\t\tINT nMod = nNum % 3;\r\n\t\t\tif(nMod)\r\n\t\t\t\tnMax++;\r\n\t\t\tINT i = 0;\r\n\t\t\tLPSTR pSrc = strFomar;\r\n\t\t\tLPSTR pDest = str;\r\n\t\t\t\r\n\t\t\twhile(i<nMax)\r\n\t\t\t{\r\n\t\t\t\tif(i==0 && nMod)\r\n\t\t\t\t\tpStr+=nMod;\r\n\t\t\t\telse\r\n\t\t\t\t\tpStr+=3;\r\n\t\t\t\tnNum = pStr - pSrc;\r\n\t\t\t\t\r\n\t\t\t\tif(i == nMax-1)\r\n\t\t\t\t{\r\n\t\t\t\t\tstrcat(pDest,pSrc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tstrncpy(pDest,pSrc,nNum);\r\n\t\t\t\tpDest+=nNum;\r\n\t\t\t\t*pDest=',';\r\n\t\t\t\tpDest++;\r\n\t\t\t\t*pDest=0;\r\n\t\t\t\t\r\n\t\t\t\tpSrc+=nNum;\r\n\t\t\t\tpStr=pSrc;\r\n\t\t\t\ti++;\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\r\n\t}\r\n\tINT nLen = mystrlen(str);\r\n\tchar *pText = (char*)E_MAlloc(nLen+1);\r\n\tstrcpy(pText,str);\r\n\treturn pText;\r\n}"
  },
  {
    "path": "krnln/krnln_OpenManyFileDialog.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <stdio.h>\r\n#include \"mem.h\"\r\n#include \"Myfunctions.h\"\r\n#pragma comment(lib,\"comdlg32.lib\") \r\n\r\n//ϵͳ - ļԻ\r\n/*\r\n    øʽ ı页 ļԻ ı ݣı ݣ ʼݣı ʼĿ¼ݣ߼ ıĿ¼ݣ - ϵͳֿ֧->ϵͳ\r\n    ӢƣOpenManyFileDialog\r\n    ʾһļ򿪶ԻûѡҪ򿪵ѴļûѡĽı顣ûδ򰴡ȡť˳򷵻һԱΪ0Ŀı顣Ϊ\r\n    <1>Ϊ⡱ΪıͣtextԱʡԡָļ򿪶Իı⣬ʡԣĬΪ򿪵ļ\r\n    <2>ΪΪıͣtextԱʡԡıɵɶԵıɣÿıĵһʾʽ磺ıļ*.txtڶָʵʵĹƥ磺*.txtиı֮á|ŸʡԣĬûй\r\n    <3>ΪʼΪͣintԱʡԡһṩЧĹı򱾲ָʼĹ0ΪһʡԣĬֵΪ0\r\n    <4>ΪʼĿ¼ΪıͣtextԱʡԡָ򿪶ԻʱԶתĿ¼ʡԣĬΪǰĿ¼\r\n    <5>ΪıĿ¼Ϊ߼ͣboolԱʡԡָڶԻرպǷԶصԻǰļĿ¼ʡԣĬֵΪ١\r\n    <6>ΪڡΪͨͣallԱʡԡָԻĸ,һ\"\"ݻһʹھ.ʡ,ĬΪ.\r\n\r\n*/\r\nLIBAPI(void*, krnln_OpenManyFileDialog)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tCMyDWordArray aryText;\r\n\r\n\tOPENFILENAME fileinfo;\r\n\tmemset(&fileinfo,0,sizeof(OPENFILENAME));\r\n\tfileinfo.lpstrTitle = pArgInf[0].m_pText;\r\n\tif(pArgInf[1].m_dtDataType != _SDT_NULL && pArgInf[1].m_pText)\r\n\t{\r\n\t\tINT nLen = mystrlen(pArgInf[1].m_pText);\r\n\t\tif(nLen)\r\n\t\t{\r\n\t\t\tLPSTR pTemp = new char[nLen+2];\r\n\t\t\tstrcpy(pTemp,pArgInf[1].m_pText);\r\n\t\t\tpTemp[nLen+1]=0;\r\n\t\t\tINT i=0;\r\n\t\t\tfileinfo.lpstrFilter=pTemp;\r\n\t\t\twhile(i < nLen)\r\n\t\t\t{\r\n\t\t\t\tif(*pTemp=='|')\r\n\t\t\t\t\t*pTemp = 0;\r\n\t\t\t\tpTemp++;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\r\n\r\n\t\t}\r\n\r\n\t}\r\n\tfileinfo.nFilterIndex = pArgInf[2].m_int + 1; //1ʼ״0ʼ\r\n\tif(pArgInf[3].m_dtDataType != _SDT_NULL && pArgInf[3].m_pText)\r\n\t{\r\n\t\tfileinfo.lpstrInitialDir = pArgInf[3].m_pText;\r\n\t}\r\n\t\r\n\r\n\r\n\tfileinfo.lStructSize = sizeof(OPENFILENAME);\r\n\tchar pszFileName[8192];\r\n\tpszFileName[0]=0;\r\n\tfileinfo.nMaxFile = 8192;\r\n\tfileinfo.lpstrFile = pszFileName;\r\n\tfileinfo.Flags = OFN_EXPLORER | OFN_ALLOWMULTISELECT |OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;\r\n\tchar preDir [MAX_PATH];\r\n\tpreDir[0]=0;\r\n\tif(pArgInf[4].m_dtDataType != _SDT_NULL && pArgInf[4].m_bool)\r\n\t{\r\n\t\tGetCurrentDirectory (MAX_PATH,preDir);\r\n\t}\r\n\tif(nArgCount>5) //5.3\"\"\r\n\t{\r\n\t\tif(pArgInf[5].m_dtDataType != _SDT_NULL)\r\n\t\t{\r\n\t\t\tfileinfo.hwndOwner = (HWND)pArgInf[5].m_int;\r\n\t\t}\r\n\t}\r\n\tif(GetOpenFileName(&fileinfo))\r\n\t{\r\n\t\tLPSTR pText = pszFileName+fileinfo.nFileOffset;\r\n\t\tLPSTR pPath = pszFileName;\r\n\r\n\t\tINT nLen = mystrlen(pPath);\r\n\t\tif(pPath[nLen-1]=='\\\\')\r\n\t\t\tpPath[nLen-1]=0;\r\n\t\tnLen = mystrlen(pText);\r\n\t\tif(pText[nLen+1]==0)//ѡļ\r\n\t\t{\r\n\t\t\tnLen = mystrlen(pPath);\r\n\t\t\taryText.Add ((DWORD)CloneTextData (pPath, nLen));\r\n\t\t}else{//ѡļ\r\n\t\t\tLPSTR pEnd = pText + 8192;\r\n\t\t\twhile(*pText !=0 && pText < pEnd)\r\n\t\t\t{\r\n\t\t\t\tchar szFileName [MAX_PATH];\r\n\t\t\t\tsprintf(szFileName,\"%s\\\\%s\",pPath,pText);\r\n\t\t\t\tnLen = mystrlen(szFileName);\r\n\t\t\t\taryText.Add ((DWORD)CloneTextData (szFileName, nLen));\r\n\t\t\t\tnLen = mystrlen(pText);\r\n\t\t\t\t\r\n\t\t\t\tpText+=(nLen+1);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\r\n\t\t\r\n\r\n\r\n\t\tif(preDir[0] !=0)\r\n\t\t\tSetCurrentDirectory (preDir);\r\n\r\n\r\n\r\n\t}\r\n\tif(fileinfo.lpstrFilter)\r\n\t\tdelete[] (LPSTR)fileinfo.lpstrFilter;\r\n\r\n\t\r\n\t// ±ݡ\r\n\tINT nSize = aryText.GetDWordCount () * sizeof (DWORD);\r\n\tLPSTR p = (LPSTR)E_MAlloc (sizeof (INT) * 2 + nSize);\r\n\t*(LPINT)p = 1;  // ά\r\n\t*(LPINT)(p + sizeof (INT)) = aryText.GetDWordCount ();\r\n\tmemcpy (p + sizeof (INT) * 2, aryText.GetPtr (), nSize);\r\n\treturn  p;  // дظ\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_OpenMemFile.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n//ļд - ڴļ\r\n/*\r\n    øʽ ͡ ڴļ  - ϵͳֿ֧->ļд\r\n    ӢƣOpenMemFile\r\n    һڴļԼڴΪ洢ʶݽļʽĿɹرļļţʧܷ 0Ϊ\r\n*/\r\nLIBAPI(void*, krnln_OpenMemFile)\r\n{\r\n\tCMyMemFile* pMemFile = new CMyMemFile();\r\n\tif(pMemFile)\r\n\t{\r\n\t\tPFILEELEMENT pFile = new FILEELEMENT;\r\n\t\tpFile->nType = 2;\r\n\t\tpFile->FileHandle = pMemFile;\r\n\t\tAddFileMangerList(pFile);\r\n\t\treturn pFile;\r\n\t}\r\n\treturn NULL;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_PlayMID.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"midi.h\"\r\n#include \"Myfunctions.h\"\r\n\r\nstruct MIDIFILEDATAINFO\r\n{\r\n\tLPBYTE pData;\r\n    DWORD\tdwSize;\t\t\t\r\n};\r\n\r\nextern \"C\" PDESTROY DestroyMidiPlayer;\r\n\r\nCMIDI* pMidiPlayer = NULL;\r\nMIDIFILEDATAINFO* pMidiFileData = NULL;\r\nINT nLoopNum;\r\nINT nPlayWaitTime;\r\nINT nMidiArrySize = 0;\r\nHANDLE\thLoopPlayEvent = NULL;\r\nHANDLE  hMidiPlayerThrd = NULL; \r\nvoid CloseMidiPlayer()\r\n{\r\n\tDestroyMidiPlayer = NULL;\r\n\tif(hMidiPlayerThrd)\r\n\t{\r\n\t\tTerminateThread(hMidiPlayerThrd,0);//ǿֹ߳\r\n\t\t::CloseHandle(hMidiPlayerThrd);\r\n\t\thMidiPlayerThrd = NULL;\r\n\t}\r\n\r\n\tif(hLoopPlayEvent)\r\n\t{\r\n\t\tSetEvent(hLoopPlayEvent);\r\n\t\t::CloseHandle(hLoopPlayEvent);\r\n\t\thLoopPlayEvent = NULL;\r\n\t}\r\n\t\r\n\r\n\tif(pMidiPlayer)\r\n\t{\r\n\t\tdelete pMidiPlayer;\r\n\t\tpMidiPlayer=NULL;\r\n\t}\r\n\tif(pMidiFileData)\r\n\t{\r\n\t\tfor(INT i=0;i<nMidiArrySize;i++)\r\n\t\t{\r\n\t\t\tif(pMidiFileData[i].pData)\r\n\t\t\t{\r\n\t\t\t\tdelete [] pMidiFileData[i].pData;\r\n\t\t\t\tpMidiFileData[i].pData=NULL;\r\n\t\t\t\tpMidiFileData[i].dwSize=0;\r\n\t\t\t}\r\n\t\t}\r\n\t\tdelete [] pMidiFileData;\r\n\t\tpMidiFileData=NULL;\r\n\t\tnMidiArrySize = 0;\r\n\t}\r\n\t\r\n\r\n}\r\nBOOL IsValidMidiDataPtr(LPBYTE pData)\r\n{\r\n\tif(pData==NULL)return FALSE;\r\n\tLPINT pInt = (LPINT)pData;\r\n\r\n\r\n\tif(pInt[1] > (3*sizeof(WORD)+2*sizeof(DWORD)))\r\n\t\treturn TRUE;\r\n\treturn FALSE;\r\n\r\n}\r\nBOOL IsValidMidiFileName(LPSTR pStr)\r\n{\r\n\tif(pStr==NULL)return FALSE;\r\n\tINT nLen = mystrlen(pStr);\r\n\tif(nLen >=4)\r\n\t\treturn TRUE;\r\n\treturn FALSE;\r\n\r\n}\r\n\r\nINT GetMidiDataCount(PMDATA_INF pArgInf,INT nArg)\r\n{\r\n\tINT nCount = 0;\r\n\tfor(INT i=0;i<nArg;i++)\r\n\t{\r\n\t\tif((pArgInf[i].m_dtDataType & DT_IS_ARY) == 0)//\r\n\t\t{\r\n\r\n\t\t\tif(pArgInf[i].m_dtDataType == SDT_BIN)\r\n\t\t\t{\r\n\r\n\t\t\t\tif(IsValidMidiDataPtr(pArgInf[i].m_pBin))\r\n\t\t\t\t\tnCount++;\r\n\t\t\t\t\r\n\t\t\t}else if(pArgInf[i].m_dtDataType == SDT_TEXT){\r\n\r\n\t\t\t\tif(IsValidMidiFileName(pArgInf[i].m_pText))\r\n\t\t\t\t\tnCount++;\r\n\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tINT nDataType = pArgInf[i].m_dtDataType & ~DT_IS_ARY;\r\n\r\n\t\t\tif(nDataType == SDT_BIN)\r\n\t\t\t{\r\n\t\t\t\tif(pArgInf[i].m_pAryData)\r\n\t\t\t\t{\r\n\t\t\t\t\tDWORD dwMax = 0;\r\n\t\t\t\t\tLPBYTE* pArry = (LPBYTE*)GetAryElementInf(pArgInf[i].m_pAryData,dwMax);\r\n\t\t\t\t\tfor(DWORD j=0;j<dwMax;j++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(IsValidMidiDataPtr(pArry[j]))\r\n\t\t\t\t\t\t\tnCount++;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\r\n\t\t\t}else if(nDataType == SDT_TEXT){\r\n\r\n\t\t\t\tif(pArgInf[i].m_pAryData)\r\n\t\t\t\t{\r\n\t\t\t\t\tDWORD dwMax = 0;\r\n\t\t\t\t\tLPSTR* pArry = (LPSTR*)GetAryElementInf(pArgInf[i].m_pAryData,dwMax);\r\n\t\t\t\t\tfor(DWORD j=0;j<dwMax;j++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(IsValidMidiFileName(pArry[j]))\r\n\t\t\t\t\t\t\tnCount++;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\treturn nCount;\r\n\r\n\r\n}\r\n\r\nBOOL GetMidiDataFromPtr(LPBYTE pData,INT nIDX)\r\n{\r\n\tLPINT pInt = (LPINT)pData;\r\n\tpMidiFileData[nIDX].dwSize = pInt[1];\r\n\tpMidiFileData[nIDX].pData = new BYTE[pInt[1]];\r\n\tif(pMidiFileData[nIDX].pData==NULL)return FALSE;\r\n\tpInt+=2;\r\n\tmemcpy(pMidiFileData[nIDX].pData,pInt,pMidiFileData[nIDX].dwSize);\r\n\treturn TRUE;\r\n\r\n}\r\nBOOL GetMidiDataFromFile(LPSTR pStr,INT nIDX)\r\n{\r\n\tHANDLE hFile = CreateFile(pStr,\r\n\t\tGENERIC_READ,\r\n\t\tFILE_SHARE_READ|FILE_SHARE_WRITE,\r\n\t\tNULL,\r\n\t\tOPEN_EXISTING,\r\n\t\tFILE_ATTRIBUTE_ARCHIVE,\r\n\t\t0);\r\n\t\r\n\r\n\tif(hFile != INVALID_HANDLE_VALUE)\r\n\t{\r\n\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nLen = GetFileSize(hFile, &dwNumOfByteRead);\r\n\t\tpMidiFileData[nIDX].dwSize = nLen;\r\n\t\tpMidiFileData[nIDX].pData =  new BYTE[nLen];\r\n\t\tif(pMidiFileData[nIDX].pData)\r\n\t\t{\r\n\t\t\tif(ReadFile(hFile, pMidiFileData[nIDX].pData, nLen, &dwNumOfByteRead, 0))\r\n\t\t\t{\r\n\t\t\t\tCloseHandle(hFile);\r\n\t\t\t\treturn TRUE;\r\n\t\t\t}\r\n\t\t}\r\n\t\tCloseHandle(hFile);\r\n\t\t\r\n\t}\r\n\tpMidiFileData[nIDX].dwSize = 0;\r\n\tpMidiFileData[nIDX].pData = NULL;\r\n\treturn FALSE;\r\n\r\n}\r\n\r\nINT GetMidiDataFromArg(PMDATA_INF pArgInf,INT nArg)\r\n{\r\n\tINT nCount = 0;\r\n\tINT nArry =0;\r\n\tfor(INT i=0;i<nArg;i++)\r\n\t{\r\n\t\tif((pArgInf[i].m_dtDataType & DT_IS_ARY) == 0)//\r\n\t\t{\r\n\r\n\t\t\tif(pArgInf[i].m_dtDataType == SDT_BIN)\r\n\t\t\t{\r\n\r\n\t\t\t\tif(IsValidMidiDataPtr(pArgInf[i].m_pBin))\r\n\t\t\t\t{\r\n\t\t\t\t\tif(GetMidiDataFromPtr(pArgInf[i].m_pBin,nArry))\r\n\t\t\t\t\t\tnArry++;\r\n\r\n\t\t\t\t\tnCount++;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t}else if(pArgInf[i].m_dtDataType == SDT_TEXT){\r\n\r\n\t\t\t\tif(IsValidMidiFileName(pArgInf[i].m_pText))\r\n\t\t\t\t{\r\n\t\t\t\t\tif(GetMidiDataFromFile(pArgInf[i].m_pText,nArry))\r\n\t\t\t\t\t\tnArry++;\r\n\t\t\t\t\tnCount++;\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tINT nDataType = pArgInf[i].m_dtDataType & ~DT_IS_ARY;\r\n\r\n\t\t\tif(nDataType == SDT_BIN)\r\n\t\t\t{\r\n\t\t\t\tif(pArgInf[i].m_pAryData)\r\n\t\t\t\t{\r\n\t\t\t\t\tDWORD dwMax = 0;\r\n\t\t\t\t\tLPBYTE* pArry = (LPBYTE*)GetAryElementInf(pArgInf[i].m_pAryData,dwMax);\r\n\t\t\t\t\tfor(DWORD j=0;j<dwMax;j++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(IsValidMidiDataPtr(pArry[j]))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(GetMidiDataFromPtr(pArry[j],nArry))\r\n\t\t\t\t\t\t\t\tnArry++;\r\n\t\t\t\t\t\t\tnCount++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\r\n\t\t\t}else if(nDataType == SDT_TEXT){\r\n\r\n\t\t\t\tif(pArgInf[i].m_pAryData)\r\n\t\t\t\t{\r\n\t\t\t\t\tDWORD dwMax = 0;\r\n\t\t\t\t\tLPSTR* pArry = (LPSTR*)GetAryElementInf(pArgInf[i].m_pAryData,dwMax);\r\n\t\t\t\t\tfor(DWORD j=0;j<dwMax;j++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(IsValidMidiFileName(pArry[j]))\r\n\t\t\t\t\t\t{\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(GetMidiDataFromFile(pArry[j],nArry))\r\n\t\t\t\t\t\t\t\tnArry++;\r\n\t\t\t\t\t\t\tnCount++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\treturn nArry;\r\n\r\n\r\n}\r\n\r\nDWORD WINAPI  PlayMidiManager(PVOID pParam)\r\n{\r\n\t/*\r\nINT nLoopNum;\r\nINT nPlayWaitTime;\r\nINT nMidiArrySize = 0;\r\nHANDLE\thLoopPlayEvent = NULL;\r\nHANDLE  hMidiPlayerThrd = NULL; \r\n*/\r\n\tfor(INT n=0;n<nLoopNum;n++)\r\n\t{\r\n\t\tfor(INT i=0;i<nMidiArrySize;i++)\r\n\t\t{\r\n\t\t\tif(pMidiFileData[i].pData)\r\n\t\t\t{\r\n\t\t\t\tif(pMidiPlayer)\r\n\t\t\t\t\tdelete  pMidiPlayer;\r\n\t\t\t\tpMidiPlayer = new CMIDI();\r\n\t\t\t\tpMidiPlayer->m_hhLoopPlayEvent = hLoopPlayEvent; \r\n\t\t\t\tBOOL bRet = pMidiPlayer->Create(pMidiFileData[i].pData,pMidiFileData[i].dwSize);\r\n\t\t\t\tif(bRet)\r\n\t\t\t\t{\r\n\t\t\t\t\t\r\n\t\t\t\t\tbRet = pMidiPlayer->Play();\r\n\t\t\t\t\tif(bRet)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tResetEvent(hLoopPlayEvent);\r\n\t\t\t\t\t\tWaitForSingleObject(hLoopPlayEvent,INFINITE);\r\n\t\t\t\t\t\tSleep(nPlayWaitTime);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdelete [] pMidiFileData[i].pData;\r\n\t\t\t\t\tpMidiFileData[i].pData=NULL;\r\n\t\t\t\t\tpMidiFileData[i].dwSize=0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\t::CloseHandle(hMidiPlayerThrd);\r\n\thMidiPlayerThrd = NULL;\r\n\tCloseMidiPlayer();\r\n\treturn 1;\r\n}\r\n\r\n//ý岥 - MID\r\n/*\r\n    øʽ ޷ֵ MID  Ŵݣ ʱݣͨ/ ŵMIDI֣...  - ϵͳֿ֧->ý岥\r\n    ӢƣPlayMID\r\n    ԶŶ MIDI ļעⲻ֧ WAV ӦʽֽڼݡԴΪһԱظӡ\r\n    <1>ΪŴΪͣintԱʡԡΪ -1 ʾָֽѭţָֻĴʡԣĬֵΪ 1 \r\n    <2>Ϊʱ䡱ΪͣintԱʡԡָ MIDI ֮Ĳżʱ䣬λΪ 0.1 롣ʡԣĬֵΪ 0 \r\n    <3>ΪŵMIDI֡ΪͨͣallṩʱͬʱṩݡֵΪ MIDI ļƻӦʽֽڼݡԴ\r\n*/\r\nLIBAPI(void, krnln_PlayMID)\r\n{\r\n\t//ֹ߳\r\n\tCloseMidiPlayer();\r\n\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[0].m_dtDataType==_SDT_NULL)\r\n\t\tnLoopNum = 1;\r\n\telse\r\n\t{\r\n\t\tnLoopNum = pArgInf[0].m_int;\r\n\r\n\t\tif(nLoopNum == -1)\r\n\t\t\tnLoopNum = 2147483647;\r\n\t\telse if(nLoopNum <=0)\r\n\t\t\treturn;\r\n\t}\r\n\tif(pArgInf[1].m_dtDataType==_SDT_NULL)\r\n\t\tnPlayWaitTime = 0;\r\n\telse\r\n\t{\r\n\t\tnPlayWaitTime = pArgInf[1].m_int;\r\n\r\n\t\tif(nPlayWaitTime <0)\r\n\t\t\tnPlayWaitTime = 0;\r\n\t}\r\n\tnPlayWaitTime = nPlayWaitTime *100;\r\n\tINT nArg = nArgCount-2;\r\n\r\n\tINT nCount = GetMidiDataCount(&pArgInf[2],nArg);\r\n\tif(nCount==0)\r\n\t\treturn;\r\n\tpMidiFileData = new MIDIFILEDATAINFO[nCount];\r\n\tnCount = GetMidiDataFromArg(&pArgInf[2],nArg);\r\n\tif(nCount==0)\r\n\t{\r\n\t\tdelete [] pMidiFileData;\r\n\t\tpMidiFileData = NULL;\r\n\t\treturn;\r\n\t}\r\n\tnMidiArrySize = nCount;\r\n\t\r\n\thLoopPlayEvent = ::CreateEvent(0, FALSE, FALSE, TEXT(\"Wait For Midi Play End\"));\r\n\r\n\tDWORD dwThreadId;\r\n\tHANDLE  hMidiPlayerThrd = CreateThread(NULL,\r\n                0,\r\n                PlayMidiManager,\r\n                0,\r\n                0,\r\n               &dwThreadId);\r\n\tif(hMidiPlayerThrd==NULL)\r\n\t{\r\n\t\tCloseMidiPlayer();\r\n\t\treturn;\r\n\t}\r\n\t//char tt[16];\r\n\t//itoa(nCount,tt,10);\r\n\t//MessageBox(NULL,tt,\"nMidiArrySize\",MB_OK);\r\n\tDestroyMidiPlayer=(PDESTROY)CloseMidiPlayer;\r\n\r\n\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_PlayMusic.cpp",
    "content": "#include \"stdafx.h\"\r\n#pragma comment(lib,\"winmm.lib\") \r\n\r\n//ý岥 - \r\n/*\r\n    øʽ ߼͡  ͨ ŵ֣߼ Ƿѭţݣ - ϵͳֿ֧->ý岥\r\n    ӢƣPlayMusic\r\n    Բ .WAV.MID ļӦʽֽڼݡԴɹ棬ʧܷؼ١Ϊ\r\n    <1>Ϊŵ֡ΪͨͣallֵΪ .WAV.MID ļƻӦʽֽڼݡԴ\r\n    <2>ΪǷѭšΪ߼ͣboolԱʡԡΪʾָֽѭţֻһΡʡԣĬΪһΡ\r\n*/\r\nextern HANDLE hBlackMoonInstanceHandle;\r\n\r\nLIBAPI(BOOL, krnln_PlayMusic)\r\n{\r\n\tDWORD dwSound = SND_ASYNC|SND_NODEFAULT;\r\n\tLPCSTR pszMusicData;\r\n\tHMODULE hmod = NULL;\r\n\tif(ArgInf.m_dtDataType == SDT_TEXT)\r\n\t{\r\n\t\tdwSound |= SND_FILENAME;\r\n\t\tpszMusicData = ArgInf.m_pText;\r\n\r\n\t}else if(ArgInf.m_dtDataType == SDT_BIN)\r\n\t{\r\n\t\tdwSound |= SND_MEMORY;\r\n\r\n\t\tpszMusicData = ArgInf.m_pText + 2*sizeof(INT);\r\n\r\n\t}else if(ArgInf.m_dtDataType == SDT_INT || ArgInf.m_dtDataType == SDT_BYTE || ArgInf.m_dtDataType == SDT_SHORT)\r\n\t{\r\n\t\tdwSound |=SND_RESOURCE;\r\n\t\tpszMusicData = MAKEINTRESOURCE(ArgInf.m_int);\r\n\t\tif(hBlackMoonInstanceHandle)\r\n\t\t\thmod = (HMODULE)hBlackMoonInstanceHandle;\r\n\t\telse\r\n\t\t\thmod = ::GetModuleHandle(NULL);\r\n\t\t\t\r\n\r\n\t}else\r\n\t\treturn FALSE;\r\n\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[1].m_dtDataType != _SDT_NULL && pArgInf[1].m_bool)\r\n\t\tdwSound |= SND_LOOP;\r\n\r\n\treturn PlaySound(pszMusicData,hmod,dwSound);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_PlayStop.cpp",
    "content": "#include \"stdafx.h\"\r\n#pragma comment(lib,\"winmm.lib\") \r\n//ý岥 - ֹͣ\r\n/*\r\n    øʽ ޷ֵ ֹͣ  - ϵͳֿ֧->ý岥\r\n    ӢƣPlayStop\r\n    ֹͣڲŵ֡Ϊ\r\n*/\r\nLIBAPI(void, krnln_PlayStop)\r\n{\r\n\tPlaySound(NULL,NULL,SND_PURGE);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_PutEnv.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ȡ - д\r\n/*\r\n    øʽ ߼͡ д ı ƣı дݣ - ϵͳֿ֧->ȡ\r\n    ӢƣPutEnv\r\n    ޸ĻָĲϵͳɹ棬ʧܷؼ١Ϊ\r\n    <1>ΪơΪıͣtext\r\n    <2>ΪдݡΪıͣtext\r\n*/\r\nLIBAPI(int, krnln_PutEnv)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\treturn SetEnvironmentVariable(pArgInf[0].m_pText,pArgInf[1].m_pText);\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_QJCase.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ı - ȫ\r\n/*\r\n    øʽ ı͡ ȫ ı 任ı - ϵͳֿ֧->ı\r\n    ӢƣQJCase\r\n    ıеİĸոֱ任Ϊȫǣر任ĽıΪ\r\n    <1>Ϊ任ıΪıͣtext\r\n\r\n' ַΧ163ͷ176--185\r\n' дĸ163ͷ193--218\r\n' Сдĸ163ͷ225--250\r\n' ///////////Ϊȫǵģǰǵ\r\n' ַΧ48--57\r\n' дĸ65--90\r\n' Сдĸ97-122\r\nֽڼ ()  ' 163,174,163,173\r\n*/\r\nLIBAPI(char*, krnln_QJCase)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tsize_t nLen = mystrlen(ArgInf.m_pText);\r\n\tif (nLen == 0) return NULL;\r\n\t\r\n\tchar* pszLast = ArgInf.m_pText + nLen;\r\n\tchar* pszFirst = ArgInf.m_pText;\r\n\tchar* pszSrc = (char*)malloc(nLen * 2 + 1);\r\n\tchar* pszTmp = pszSrc;\r\n\tsize_t sSublen;\r\n\tfor (;;)\r\n\t{\r\n\t\tchar* pPos = strstr(pszFirst, \"\\\\\");\r\n\t\tif (!pPos) break;\r\n\t\tsSublen = pPos - pszFirst;\r\n\t\tif (sSublen > 0)\r\n\t\t{\r\n\t\t\tmemcpy(pszTmp, pszFirst, sSublen);\r\n\t\t}\r\n\r\n\t\t*(short*)(pszTmp + sSublen) = *(short*)\"\";\r\n\t\tpszTmp += sSublen + 2;\r\n\t\tpszFirst = pPos\t+ 1;\r\n\t}\r\n\tsSublen = pszLast - pszFirst;\r\n\tif (sSublen > 0)\r\n\t{\r\n\t\tmemcpy(pszTmp, pszFirst, sSublen);\r\n\t\tpszTmp += sSublen;\r\n\t}\r\n\tpszTmp[0] = '\\0';\r\n\t\r\n\tINT nBufLen = nLen * 2 + 1;\r\n\tnLen = mystrlen(pszSrc);\r\n\r\n\tchar *pQJText = (char*)E_MAlloc(nBufLen);\r\n\tLCMapString (2052, LCMAP_FULLWIDTH, pszSrc, nLen, pQJText, nBufLen);\r\n\tfree(pszSrc);\r\n\treturn pQJText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_RTrim.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n//ı - ɾβ\r\n/*\r\n    øʽ ı͡ ɾβ ı ɾոı - ϵͳֿ֧->ı\r\n    ӢƣRTrim\r\n    һıаɾβȫǻǿոָıΪ\r\n    <1>ΪɾոıΪıͣtext\r\n*/\r\nLIBAPI(char*, krnln_RTrim)\r\n{// ߺ \r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tchar* pSrc = pArgInf[0].m_pText;\r\n\tregister char *str1 = pSrc;\r\n\t\r\n\tregister char* pLastNS = NULL;\r\n\twhile ( *str1 )\r\n\t{\r\n\t\tif (*((unsigned short*)str1) == 0xA1A1)\r\n\t\t\tstr1++;\r\n\t\telse\r\n\t\t{\r\n\t\t\tif (*str1 != ' ')\r\n\t\t\t{\r\n\t\t\t\t\r\n\t\t\t\tif (*str1 < 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tpLastNS = str1 + 1;\r\n\t\t\t\t\tstr1++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpLastNS = str1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tstr1++;\r\n\t}\r\n\t\r\n\tif (!pLastNS) return NULL; //ıֱӷ\r\n\tINT nLen = pLastNS - pSrc + 1;\r\n\tchar *pText = (char*)E_MAlloc_Nzero(nLen+1);\r\n\tmemcpy(pText, pSrc, nLen);\r\n\tpText[nLen] = '\\0';\r\n\t\r\n\treturn pText;\r\n}\r\n// {//ԭ\r\n// \tINT nLen = mystrlen(ArgInf.m_pText);\r\n// \tif(nLen==0)return NULL;\r\n// \tchar *pText = (char*)E_MAlloc_Nzero(nLen+1);\r\n// \tstrcpy(pText,ArgInf.m_pText);\r\n// \r\n// \tchar* pSrc = pText + nLen - 1;\r\n// \twhile(pSrc >= pText)\r\n// \t{\r\n// \t\tif(*pSrc == ' ' || (*pSrc == -95 && *(pSrc-1) == -95))\r\n// \t\t{\r\n// \t\t\tif(*pSrc< 0)\r\n// \t\t\t{\r\n// \t\t\t\tpSrc-=2;\r\n// \t\t\t}\r\n// \t\t\telse\r\n// \t\t\t{\r\n// \t\t\t\tpSrc--;\r\n// \t\t\t}\r\n// \t\t}\r\n// \t\telse\r\n// \t\t{\r\n// \t\t\tpSrc++;\r\n// \t\t\t*pSrc = 0;\r\n// \r\n// \t\t\tbreak;\r\n// \t\t}\r\n// \r\n// \t}\r\n// \tnLen = mystrlen(pText);\r\n// \tif(nLen == 0)\r\n// \t{\r\n// \t\tE_MFree(pText);\r\n// \t\tpText = NULL;\r\n// \t}\r\n// \treturn pText;\r\n// \r\n// }\r\n"
  },
  {
    "path": "krnln/krnln_ReadBin.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n#include \"Myfunctions.h\"\r\n//ļд - ֽڼ\r\n/*\r\n    øʽ ֽڼ ֽڼ  ݵļţ ݵĳȣ - ϵͳֿ֧->ļд\r\n    ӢƣReadBin\r\n    ļеǰдλöȡһֽڼݣʵʶ볤ȣصֽڼĳߴ磩ܻС볤ȡʧܣһֽڼԶǰļдλƵļβΪ\r\n    <1>ΪݵļšΪͣintļɡļء\r\n    <2>ΪݵĳȡΪͣint\r\n*/\r\nLIBAPI(void*, krnln_ReadBin)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn NULL;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn NULL;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[1].m_int <=0)\r\n\t\treturn NULL;\r\n\r\n\tLPBYTE pbRet = NULL;\r\n\r\n\tif(pFile->nType == 1)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nLen = pArgInf[1].m_int;\r\n\t\tLPBYTE pData = new BYTE[nLen];\r\n\t\tINT nRet = ReadFile(hFile, pData, nLen, &dwNumOfByteRead, 0);\r\n\t\tif(nRet == FALSE)\r\n\t\t{\r\n\t\t\tdelete[] pData;\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t\tnLen = dwNumOfByteRead;\r\n\t\tpbRet = CloneBinData(pData,nLen);\r\n\t\tdelete[] pData;\r\n\t\t\r\n\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\t\tINT nLen = pArgInf[1].m_int;\r\n\t\tLPBYTE pData =  (LPBYTE)E_MAlloc_Nzero(nLen+2*sizeof(INT));\r\n\t\t*(LPINT)pData = 1;\r\n\t\t*(LPINT)(pData + sizeof(INT)) = nLen;\r\n\t\tDWORD dwNumOfByteRead = pMemFile->Read (pData + 2*sizeof(INT),nLen);\r\n\t\tif(dwNumOfByteRead == 0)\r\n\t\t{\r\n\t\t\tE_MFree(pData);\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t\t*(LPINT)(pData + sizeof(INT)) = dwNumOfByteRead;\r\n\t\tpbRet = pData;\r\n\r\n\t}else if (pFile->nType == 3) //ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nLen = pArgInf[1].m_int;\r\n\t\tLPBYTE pData = new BYTE[nLen];\r\n\t\tINT nPos = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r\n\t\tINT nRet = ReadFile(hFile, pData, nLen, &dwNumOfByteRead, 0);\r\n\t\tif(nRet == FALSE)\r\n\t\t{\r\n\t\t\tdelete[] pData;\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t\tnLen = dwNumOfByteRead;\r\n\t\tE_RC4_Calc(nPos, pData, nLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\tpbRet = CloneBinData(pData,nLen);\r\n\t\tdelete[] pData;\r\n\t}\r\n\treturn pbRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ReadFile.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//̲ - ļ\r\n/*\r\n    øʽ ֽڼ ļ ı ļ - ϵͳֿ֧->̲\r\n    ӢƣReadFile\r\n    һֽڼаָļݡΪ\r\n    <1>ΪļΪıͣtext\r\n*/\r\nLIBAPI(void*, krnln_ReadFile)\r\n{\r\n\tHANDLE hFile = CreateFile(ArgInf.m_pText,\r\n\t\tGENERIC_READ,\r\n\t\tFILE_SHARE_READ|FILE_SHARE_WRITE,\r\n\t\tNULL,\r\n\t\tOPEN_EXISTING,\r\n\t\tFILE_ATTRIBUTE_ARCHIVE,\r\n\t\t0);\r\n\tLPBYTE pData = NULL;\r\n\r\n\tif(hFile != INVALID_HANDLE_VALUE)\r\n\t{\r\n\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nLen = GetFileSize(hFile, &dwNumOfByteRead);\r\n\t\tpData =  (LPBYTE)E_MAlloc_Nzero(nLen+2*sizeof(INT));\r\n\t\t*(LPINT)pData = 1;\r\n\t\t*(LPINT)(pData + sizeof(INT)) = nLen;\r\n\t\tINT nRet = ReadFile(hFile, pData + 2*sizeof(INT), nLen, &dwNumOfByteRead, 0);\r\n\t\tCloseHandle(hFile);\r\n\t}\r\n\treturn pData;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ReadLine.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n#include \"Myfunctions.h\"\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n//ļд - һ\r\n/*\r\n    øʽ ı͡ һ  ıݵļţ - ϵͳֿ֧->ļд\r\n    ӢƣReadLine\r\n    ļеǰдλöȡһıݣĩĻسзʧܣһıԶǰļдλƵļβΪ\r\n    <1>ΪıݵļšΪͣintļɡļء\r\n*/\r\nLIBAPI(char*, krnln_ReadLine)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn NULL;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn NULL;\r\n\r\n\tchar* pszRet = NULL;\r\n\r\n\tif(pFile->nType ==1)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tINT orgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\tif(orgLoc == HFILE_ERROR)\r\n\t\t{\r\n\t\t\tSetFilePointer(hFile,0,NULL,FILE_END);\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t\t\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nLen = GetFileSize(hFile,NULL) - orgLoc;\r\n\r\n\t\tvector<MEMSP> vecMEMSP;\r\n\t\tINT nTLen = 0;\r\n\t\tfor (INT i=0; i<nLen; i+=4096)\r\n\t\t{\r\n\t\t\tMEMSP tmpMEMSP;\r\n\t\t\ttmpMEMSP.pData = (char*)malloc(4096);\r\n\t\t\tINT nRet = ReadFile(hFile, tmpMEMSP.pData, min(nLen-i,4096), &dwNumOfByteRead, 0);\r\n\t\t\tif(nRet == FALSE)\r\n\t\t\t{\r\n\t\t\t\tSetFilePointer(hFile, 0, NULL, FILE_END);\r\n\t\t\t\tfree(tmpMEMSP.pData);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tBOOL bFind = FALSE;\r\n\t\t\tfor (DWORD j=0; j < dwNumOfByteRead; j++)\r\n\t\t\t{\r\n\t\t\t\tif (tmpMEMSP.pData[j] == '\\0')\r\n\t\t\t\t{\r\n\t\t\t\t\tbFind = TRUE;\r\n\t\t\t\t\tdwNumOfByteRead = j;\r\n\t\t\t\t\tSetFilePointer(hFile, orgLoc + nTLen + j, NULL, FILE_BEGIN);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\telse if (tmpMEMSP.pData[j] == '\\n')\r\n\t\t\t\t{\r\n\t\t\t\t\tbFind = TRUE;\r\n\t\t\t\t\tdwNumOfByteRead = j;\r\n\t\t\t\t\tSetFilePointer(hFile, orgLoc + nTLen + j + 1, NULL, FILE_BEGIN);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\telse if (tmpMEMSP.pData[j] == '\\r')\r\n\t\t\t\t{\r\n\t\t\t\t\tif (j + 1 == dwNumOfByteRead)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tchar szNewline = 0;\r\n\t\t\t\t\t\tnRet = ReadFile(hFile, &szNewline, 1, &dwNumOfByteRead, 0);//ٶһֽڣǲ\\r\\n\r\n\t\t\t\t\t\tif (szNewline != '\\n')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t//\\r\\nϣѶдλ÷ŵ\\r\r\n\t\t\t\t\t\t\tSetFilePointer(hFile, orgLoc + nTLen + j + 1, NULL, FILE_BEGIN);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//else\r\n\t\t\t\t\t\t//{\r\n\t\t\t\t\t\t\t//պ\\r\\nϣдλþͲҪˡ\r\n\t\t\t\t\t\t\t//SetFilePointer(hFile, orgLoc + nTLen + j + 2, NULL, FILE_BEGIN);\r\n\t\t\t\t\t\t//}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (tmpMEMSP.pData[j + 1] == '\\n')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tSetFilePointer(hFile, orgLoc + nTLen + j + 2, NULL, FILE_BEGIN);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tSetFilePointer(hFile, orgLoc + nTLen + j + 1, NULL, FILE_BEGIN);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbFind = TRUE;\r\n\t\t\t\t\tdwNumOfByteRead = j;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttmpMEMSP.nLen = dwNumOfByteRead;\r\n\t\t\tnTLen += dwNumOfByteRead;\r\n\t\t\tvecMEMSP.push_back(tmpMEMSP);\r\n\t\t\tif (bFind || dwNumOfByteRead != 4096)\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tif (nTLen > 0)\r\n\t\t{\r\n\t\t\tpszRet = (LPSTR)E_MAlloc_Nzero(nTLen + 1);\r\n\t\t\t\r\n\t\t\tLPSTR pszRetold = pszRet;\r\n\t\t\tvector<MEMSP>::iterator iterMEMSP;\r\n\t\t\tfor (iterMEMSP = vecMEMSP.begin(); iterMEMSP != vecMEMSP.end(); iterMEMSP++)\r\n\t\t\t{\r\n\t\t\t\tmemcpy(pszRetold, iterMEMSP->pData, iterMEMSP->nLen);\r\n\t\t\t\tpszRetold += iterMEMSP->nLen;\r\n\t\t\t\tfree(iterMEMSP->pData);\r\n\t\t\t}\r\n\t\t\tpszRet[nTLen] = 0;\r\n\t\t}\r\n\t\tvecMEMSP.clear();\r\n\t\treturn pszRet;\r\n\t}\r\n\telse if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\r\n\t\tINT orgLoc = pMemFile->GetPosition();\r\n\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nLen = -1;\r\n\t\tLPSTR pBufStart, pBufMax;\r\n\r\n\t\tdwNumOfByteRead = pMemFile->GetBufferPtr (CMyMemFile::bufferRead,nLen,(void **)&pBufStart,(void **)&pBufMax);\r\n\r\n\t\tLPSTR pStr = pBufStart;\r\n\t\tnLen = 0;\r\n\t\twhile(nLen < (INT)dwNumOfByteRead)\r\n\t\t{\r\n\t\t\tif(*pStr =='\\r' || *pStr =='\\n')\r\n\t\t\t\tbreak;\r\n\t\t\tnLen++;\r\n\t\t\tpStr++;\r\n\t\t}\r\n\t\tpszRet = (LPSTR)E_MAlloc_Nzero(nLen+1);\r\n\t\torgLoc += nLen;\r\n\t\tif(*pStr =='\\r' || *pStr =='\\n')\r\n\t\t{\r\n\t\t\torgLoc++;\r\n\t\t\tpStr++;\r\n\t\t\tif(*pStr =='\\n')\r\n\t\t\t\torgLoc++;\r\n\t\t}\r\n\t\tpMemFile->Seek(orgLoc,CMyMemFile::begin);\r\n\t\tstrncpy(pszRet,pBufStart,nLen);\r\n\t\tpszRet[nLen] = 0;\r\n\t}else if(pFile->nType ==3)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tINT orgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\tif(orgLoc == HFILE_ERROR)\r\n\t\t{\r\n\t\t\tSetFilePointer(hFile,0,NULL,FILE_END);\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t\t\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nLen = GetFileSize(hFile,NULL) - orgLoc;\r\n\t\t\r\n\t\tvector<MEMSP> vecMEMSP;\r\n\t\tINT nTLen = 0;\r\n\t\tfor (INT i=0; i<nLen; i+=4096)\r\n\t\t{\r\n\t\t\tMEMSP tmpMEMSP;\r\n\t\t\ttmpMEMSP.pData = (char*)malloc(4096);\r\n\t\t\tINT nPos = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\t\tINT nRet = ReadFile(hFile, tmpMEMSP.pData, min(nLen-i,4096), &dwNumOfByteRead, 0);\r\n\t\t\tif(nRet == FALSE)\r\n\t\t\t{\r\n\t\t\t\tSetFilePointer(hFile, 0, NULL, FILE_END);\r\n\t\t\t\tfree(tmpMEMSP.pData);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tBOOL bFind = FALSE;\r\n\t\t\tE_RC4_Calc(nPos, (unsigned char*)tmpMEMSP.pData, dwNumOfByteRead, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\tfor (DWORD j=0; j < dwNumOfByteRead; j++)\r\n\t\t\t{\r\n\t\t\t\tif (tmpMEMSP.pData[j] == '\\0')\r\n\t\t\t\t{\r\n\t\t\t\t\tbFind = TRUE;\r\n\t\t\t\t\tdwNumOfByteRead = j;\r\n\t\t\t\t\tSetFilePointer(hFile, orgLoc + nTLen + j, NULL, FILE_BEGIN);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\telse if (tmpMEMSP.pData[j] == '\\n')\r\n\t\t\t\t{\r\n\t\t\t\t\tbFind = TRUE;\r\n\t\t\t\t\tdwNumOfByteRead = j;\r\n\t\t\t\t\tSetFilePointer(hFile, orgLoc + nTLen + j + 1, NULL, FILE_BEGIN);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\telse if (tmpMEMSP.pData[j] == '\\r')\r\n\t\t\t\t{\r\n\t\t\t\t\tif (j + 1 == dwNumOfByteRead)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tchar szNewline = 0;\r\n\t\t\t\t\t\tnPos = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\t\t\t\t\tnRet = ReadFile(hFile, &szNewline, 1, &dwNumOfByteRead, 0);//ٶһֽڣǲ\\r\\n\r\n\t\t\t\t\t\tE_RC4_Calc(nPos, (unsigned char*)&szNewline, dwNumOfByteRead, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\t\t\tif (szNewline != '\\n')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t//\\r\\nϣѶдλ÷ŵ\\r\r\n\t\t\t\t\t\t\tSetFilePointer(hFile, orgLoc + nTLen + j + 1, NULL, FILE_BEGIN);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//else\r\n\t\t\t\t\t\t//{\r\n\t\t\t\t\t\t//պ\\r\\nϣдλþͲҪˡ\r\n\t\t\t\t\t\t//SetFilePointer(hFile, orgLoc + nTLen + j + 2, NULL, FILE_BEGIN);\r\n\t\t\t\t\t\t//}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (tmpMEMSP.pData[j + 1] == '\\n')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tSetFilePointer(hFile, orgLoc + nTLen + j + 2, NULL, FILE_BEGIN);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tSetFilePointer(hFile, orgLoc + nTLen + j + 1, NULL, FILE_BEGIN);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbFind = TRUE;\r\n\t\t\t\t\tdwNumOfByteRead = j;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttmpMEMSP.nLen = dwNumOfByteRead;\r\n\t\t\tnTLen += dwNumOfByteRead;\r\n\t\t\tvecMEMSP.push_back(tmpMEMSP);\r\n\t\t\tif (bFind || dwNumOfByteRead != 4096)\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tif (nTLen > 0)\r\n\t\t{\r\n\t\t\tpszRet = (LPSTR)E_MAlloc_Nzero(nTLen + 1);\r\n\t\t\t\r\n\t\t\tLPSTR pszRetold = pszRet;\r\n\t\t\tvector<MEMSP>::iterator iterMEMSP;\r\n\t\t\tfor (iterMEMSP = vecMEMSP.begin(); iterMEMSP != vecMEMSP.end(); iterMEMSP++)\r\n\t\t\t{\r\n\t\t\t\tmemcpy(pszRetold, iterMEMSP->pData, iterMEMSP->nLen);\r\n\t\t\t\tpszRetold += iterMEMSP->nLen;\r\n\t\t\t\tfree(iterMEMSP->pData);\r\n\t\t\t}\r\n\t\t\tpszRet[nTLen] = 0;\r\n\t\t}\r\n\t\tvecMEMSP.clear();\r\n\t\treturn pszRet;\r\n\t}\r\n\treturn pszRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ReadText.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n#include \"Myfunctions.h\"\r\n#include <vector>\r\n\r\nusing namespace std;\r\n//ļд - ı\r\n/*\r\n    øʽ ı͡ ı  ıݵļţ ıݵĳȣݣ - ϵͳֿ֧->ļд\r\n    ӢƣReadText\r\n    ļеǰдλöȡһıݣʵʶ볤ȣıĳߴ磩ܻС볤ȡдֽ 0  26ı־ظֽ֮ǰݡʧܣһıԶǰļдλƵļβΪ\r\n    <1>ΪıݵļšΪͣintļɡļء\r\n    <2>ΪıݵĳȡΪͣintԱʡԡʡԣĬ϶ļеıݡ\r\n*/\r\nLIBAPI(char*, krnln_ReadText)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn NULL;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn NULL;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[1].m_dtDataType != _SDT_NULL && pArgInf[1].m_int <=0)\r\n\t\treturn NULL;\r\n\r\n\tchar* pszRet = NULL;\r\n\r\n\tif(pFile->nType ==1)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tINT orgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\tif(orgLoc == HFILE_ERROR)\r\n\t\t{\r\n\t\t\tSetFilePointer(hFile,0,NULL,FILE_END);\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nLen;\r\n\t\tif(pArgInf[1].m_dtDataType == _SDT_NULL)\r\n\t\t\tnLen = GetFileSize(hFile,NULL) - orgLoc;\r\n\t\telse\r\n\t\t\tnLen = pArgInf[1].m_int;\r\n\t\t//Ĵ\r\n\t\tvector<MEMSP> vecMEMSP;\r\n\t\tINT nTLen = 0;\r\n\t\tfor (INT i=0; i<nLen; i+=4096)\r\n\t\t{\r\n\t\t\tMEMSP tmpMEMSP;\r\n\t\t\ttmpMEMSP.pData = (char*)malloc(4096);\r\n\t\t\tINT nRet = ReadFile(hFile, tmpMEMSP.pData, min(nLen-i,4096), &dwNumOfByteRead, 0);\r\n\t\t\tif(nRet == FALSE)\r\n\t\t\t{\r\n\t\t\t\tSetFilePointer(hFile, 0, NULL, FILE_END);\r\n\t\t\t\tfree(tmpMEMSP.pData);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tBOOL bFind = FALSE;\r\n\t\t\tfor (DWORD j=0; j < dwNumOfByteRead; j++)\r\n\t\t\t{\r\n\t\t\t\tif (tmpMEMSP.pData[j] == 0 || tmpMEMSP.pData[j] == 26)\r\n\t\t\t\t{\r\n\t\t\t\t\tdwNumOfByteRead = j;\r\n\t\t\t\t\torgLoc++;// ֽ\r\n\t\t\t\t\tbFind = TRUE;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttmpMEMSP.nLen = dwNumOfByteRead;\r\n\t\t\tnTLen += dwNumOfByteRead;\r\n\t\t\tvecMEMSP.push_back(tmpMEMSP);\r\n\t\t\tif (bFind || dwNumOfByteRead != 4096)\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tif (nTLen > 0)\r\n\t\t{\r\n\t\t\tpszRet = (LPSTR)E_MAlloc_Nzero(nTLen + 1);\r\n\t\t\torgLoc += nTLen;\r\n\t\t\tSetFilePointer(hFile, orgLoc, NULL, FILE_BEGIN);\r\n\t\t\t\r\n\t\t\tLPSTR pszRetold = pszRet;\r\n\t\t\tvector<MEMSP>::iterator iterMEMSP;\r\n\t\t\tfor (iterMEMSP = vecMEMSP.begin(); iterMEMSP != vecMEMSP.end(); iterMEMSP++)\r\n\t\t\t{\r\n\t\t\t\tmemcpy(pszRetold, iterMEMSP->pData, iterMEMSP->nLen);\r\n\t\t\t\tpszRetold += iterMEMSP->nLen;\r\n\t\t\t\tfree(iterMEMSP->pData);\r\n\t\t\t}\r\n\t\t\tpszRet[nTLen] = 0;\r\n\t\t}\r\n\t\tvecMEMSP.clear();\r\n\t\treturn pszRet;\r\n\t\t// ԭĴ\r\n// \t\tchar* pData = new char[nLen];\r\n// \t\tINT nRet = ReadFile(hFile, pData, nLen, &dwNumOfByteRead, 0);\r\n// \t\tif(nRet == FALSE)\r\n// \t\t{\r\n// \t\t\tSetFilePointer(hFile,0,NULL,FILE_END);\r\n// \t\t\tdelete[] pData;\r\n// \t\t\treturn NULL;\r\n// \t\t}\r\n// \t\tnLen = 0;\r\n// \t\tLPSTR pStr = pData;\r\n// \t\twhile(nLen < (INT)dwNumOfByteRead)\r\n// \t\t{\r\n// \t\t\tif(*pStr ==0 || *pStr ==26)\r\n// \t\t\t\tbreak;\r\n// \t\t\tnLen++;\r\n// \t\t\tpStr++;\r\n// \t\t}\r\n// \t\tpszRet = (LPSTR)E_MAlloc_Nzero(nLen+1);\r\n// \t\torgLoc += nLen;\r\n// \t\tSetFilePointer(hFile,orgLoc,NULL,FILE_BEGIN);\r\n// \t\tstrncpy(pszRet,pData,nLen);\r\n// \t\tpszRet[nLen] = 0;\r\n// \t\t\r\n// \t\tdelete[] pData;\t\t\r\n\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\r\n\t\tINT orgLoc = pMemFile->GetPosition();\r\n\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nLen;\r\n\t\tLPSTR pBufStart, pBufMax;\r\n\t\tif(pArgInf[1].m_dtDataType == _SDT_NULL)\r\n\t\t\tnLen = -1;\r\n\t\telse\r\n\t\t\tnLen = pArgInf[1].m_int;\r\n\r\n\t\tdwNumOfByteRead = pMemFile->GetBufferPtr (CMyMemFile::bufferRead,nLen,(void **)&pBufStart,(void **)&pBufMax);\r\n\r\n\t\tLPSTR pStr = pBufStart;\r\n\t\tnLen = 0;\r\n\t\twhile(nLen < (INT)dwNumOfByteRead)\r\n\t\t{\r\n\t\t\tif(*pStr ==0 || *pStr ==26)\r\n\t\t\t\tbreak;\r\n\t\t\tnLen++;\r\n\t\t\tpStr++;\r\n\t\t}\r\n\t\tpszRet = (LPSTR)E_MAlloc_Nzero(nLen+1);\r\n\t\torgLoc += nLen;\r\n\t\tpMemFile->Seek(orgLoc,CMyMemFile::begin);\r\n\t\tstrncpy(pszRet,pBufStart,nLen);\r\n\t\tpszRet[nLen] = 0;\r\n\t}if(pFile->nType ==3)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tINT orgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\tif(orgLoc == HFILE_ERROR)\r\n\t\t{\r\n\t\t\tSetFilePointer(hFile,0,NULL,FILE_END);\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t\t\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nLen;\r\n\t\tif(pArgInf[1].m_dtDataType == _SDT_NULL)\r\n\t\t\tnLen = GetFileSize(hFile,NULL) - orgLoc;\r\n\t\telse\r\n\t\t\tnLen = pArgInf[1].m_int;\r\n\t\t//Ĵ\r\n\t\tvector<MEMSP> vecMEMSP;\r\n\t\tINT nTLen = 0;\r\n\t\tfor (INT i=0; i<nLen; i+=4096)\r\n\t\t{\r\n\t\t\tMEMSP tmpMEMSP;\r\n\t\t\ttmpMEMSP.pData = (char*)malloc(4096);\r\n\t\t\tINT nPos = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\t\tINT nRet = ReadFile(hFile, tmpMEMSP.pData, min(nLen-i,4096), &dwNumOfByteRead, 0);\r\n\t\t\tif(nRet == FALSE)\r\n\t\t\t{\r\n\t\t\t\tSetFilePointer(hFile, 0, NULL, FILE_END);\r\n\t\t\t\tfree(tmpMEMSP.pData);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tBOOL bFind = FALSE;\r\n\t\t\tE_RC4_Calc(nPos, (unsigned char*)tmpMEMSP.pData, dwNumOfByteRead, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\tfor (DWORD j=0; j < dwNumOfByteRead; j++)\r\n\t\t\t{\r\n\t\t\t\tif (tmpMEMSP.pData[j] == 0 || tmpMEMSP.pData[j] == 26)\r\n\t\t\t\t{\r\n\t\t\t\t\tdwNumOfByteRead = j;\r\n\t\t\t\t\torgLoc++;// ֽ\r\n\t\t\t\t\tbFind = TRUE;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttmpMEMSP.nLen = dwNumOfByteRead;\r\n\t\t\tnTLen += dwNumOfByteRead;\r\n\t\t\tvecMEMSP.push_back(tmpMEMSP);\r\n\t\t\tif (bFind || dwNumOfByteRead != 4096)\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tif (nTLen > 0)\r\n\t\t{\r\n\t\t\tpszRet = (LPSTR)E_MAlloc_Nzero(nTLen + 1);\r\n\t\t\torgLoc += nTLen;\r\n\t\t\tSetFilePointer(hFile, orgLoc, NULL, FILE_BEGIN);\r\n\t\t\t\r\n\t\t\tLPSTR pszRetold = pszRet;\r\n\t\t\tvector<MEMSP>::iterator iterMEMSP;\r\n\t\t\tfor (iterMEMSP = vecMEMSP.begin(); iterMEMSP != vecMEMSP.end(); iterMEMSP++)\r\n\t\t\t{\r\n\t\t\t\tmemcpy(pszRetold, iterMEMSP->pData, iterMEMSP->nLen);\r\n\t\t\t\tpszRetold += iterMEMSP->nLen;\r\n\t\t\t\tfree(iterMEMSP->pData);\r\n\t\t\t}\r\n\t\t\tpszRet[nTLen] = 0;\r\n\t\t}\r\n\t\tvecMEMSP.clear();\r\n\t\treturn pszRet;\t\r\n\t}\r\n\treturn pszRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_RemoveData.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n#include \"Myfunctions.h\"\r\n//ļд - ɾ\r\n/*\r\n    øʽ ߼͡ ɾ  ļţ ɾݵֽ - ϵͳֿ֧->ļд\r\n    ӢƣRemoveData\r\n    ļеǰдλôɾһֽݣļ˳ǰơļʱ\"#д\"\"#Ķ\"Ȩޡɹ棬ʧܷؼ١Ϊ\r\n    <1>ΪļšΪͣintļɡļء\r\n    <2>ΪɾݵֽΪͣint\r\n*/\r\nLIBAPI(BOOL, krnln_RemoveData)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn NULL;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn NULL;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[1].m_int<=0)\r\n\t\treturn FALSE;\r\n\r\n\tBOOL bRet = FALSE;\r\n\r\n\tif(pFile->nType ==1)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tINT orgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\tif(orgLoc == HFILE_ERROR)\r\n\t\t\treturn FALSE;\r\n\r\n\r\n\t\tbRet = TRUE;\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nBkLen = GetFileSize(hFile,NULL) - orgLoc - pArgInf[1].m_int;\r\n\t\tLPBYTE pBkData = NULL;\r\n\t\tif(nBkLen >0)//в\r\n\t\t{\r\n\t\t\tpBkData = new BYTE[nBkLen];\r\n\t\t\tINT nLen = pArgInf[1].m_int;\r\n\t\t\tSetFilePointer(hFile,nLen,NULL,FILE_CURRENT);//Ƶ\r\n\t\t\tif( ReadFile(hFile, pBkData, nBkLen, &dwNumOfByteRead, 0)==FALSE)\r\n\t\t\t{\r\n\t\t\t\tdelete[] pBkData;\r\n\t\t\t\treturn FALSE;\r\n\t\t\t}\r\n\t\t\tSetFilePointer(hFile,orgLoc,NULL,FILE_BEGIN);//ָԭλ\r\n\t\t\tif(WriteFile(hFile,pBkData,nBkLen,&dwNumOfByteRead,NULL))\r\n\t\t\t{\r\n//\t\t\t\tif(FlushFileBuffers(hFile)==FALSE)\r\n//\t\t\t\t\tbRet = FALSE;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tbRet = FALSE;\r\n\t\t\tdelete[] pBkData;\r\n\t\t}\r\n\t\tif(bRet)\r\n\t\t\tSetEndOfFile(hFile);\r\n\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\r\n\t\tINT orgLoc = pMemFile->GetPosition();\r\n\r\n\t\tINT nBkLen = pMemFile->GetFileSize() - orgLoc - pArgInf[1].m_int;\r\n\t\tLPBYTE pBkData = NULL;\r\n\r\n\t\tbRet = TRUE;\r\n\t\tif(nBkLen >0)//в\r\n\t\t{\r\n\t\t\tpMemFile->Seek(pArgInf[1].m_int,CMyMemFile::current);\r\n\t\t\tpBkData = new BYTE[nBkLen];\r\n\t\t\tpMemFile->Read(pBkData,nBkLen);\r\n\t\t\tpMemFile->Seek(orgLoc,CMyMemFile::begin);//ָ\r\n\t\t\tpMemFile->Write(pBkData, nBkLen);\r\n\t\t\torgLoc = pMemFile->GetPosition();\r\n\t\t\tdelete[] pBkData;\r\n\t\t}\r\n\t\tpMemFile->SetLength(orgLoc);\r\n\t}else if(pFile->nType ==3)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tINT orgLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\tif(orgLoc == HFILE_ERROR)\r\n\t\t\treturn FALSE;\r\n\t\t\r\n\t\tbRet = TRUE;\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tINT nBkLen = GetFileSize(hFile,NULL) - orgLoc - pArgInf[1].m_int;\r\n\t\tINT nPos;\r\n\t\tLPBYTE pBkData = NULL;\r\n\t\tif(nBkLen >0)//в\r\n\t\t{\r\n\t\t\tpBkData = new BYTE[nBkLen];\r\n\t\t\tINT nLen = pArgInf[1].m_int;\r\n\t\t\tSetFilePointer(hFile,nLen,NULL,FILE_CURRENT);//Ƶ\r\n\t\t\tnPos = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\t\tif( ReadFile(hFile, pBkData, nBkLen, &dwNumOfByteRead, 0)==FALSE)\r\n\t\t\t{\r\n\t\t\t\tdelete[] pBkData;\r\n\t\t\t\treturn FALSE;\r\n\t\t\t}\r\n\t\t\tnBkLen = dwNumOfByteRead;\r\n\t\t\tE_RC4_Calc(nPos, (unsigned char*)pBkData, nBkLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\r\n\t\t\tSetFilePointer(hFile,orgLoc,NULL,FILE_BEGIN);//ָԭλ\r\n\t\t\tnPos = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\t\tE_RC4_Calc(nPos, (unsigned char*)pBkData, nBkLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\tif(!WriteFile(hFile,pBkData,nBkLen,&dwNumOfByteRead,NULL))\r\n\t\t\t\tbRet = FALSE;\r\n\r\n\t\t\tdelete[] pBkData;\r\n\t\t}\r\n\t\tif(bRet)\r\n\t\t\tSetEndOfFile(hFile);\r\n\t}\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ReplaceText.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n//ı - ı滻\r\n/*\r\n    øʽ ı͡ ı滻 ı 滻ı ʼ滻λã 滻ȣı 滻ıݣ - ϵͳֿ֧->ı\r\n    ӢƣReplaceText\r\n    ָıĳһı滻Ϊ\r\n    <1>Ϊ滻ıΪıͣtext\r\n    <2>Ϊʼ滻λáΪͣint滻ʼλã1Ϊλã2Ϊ2λãơ\r\n    <3>Ϊ滻ȡΪͣint\r\n    <4>Ϊ滻ıΪıͣtextԱʡԡʡԣɾıеָ֡\r\n*/\r\nLIBAPI(char*, krnln_ReplaceText)\r\n{// ߺŸ\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tchar* pStr = pArgInf[0].m_pText;\r\n\tchar* pSubstr = pArgInf[3].m_pText;\r\n\tINT nSubLen;\r\n\tINT nLen = mystrlen(pStr);\r\n\tif (pArgInf[3].m_dtDataType==_SDT_NULL)\r\n\t\tnSubLen = 0;\r\n\telse\r\n\t\tnSubLen = mystrlen(pSubstr);\r\n\t\r\n\tINT nRpLen = pArgInf[2].m_int;\r\n\tif (nRpLen < 0) nRpLen = 0;\r\n\r\n\tINT nStart = pArgInf[1].m_int - 1;\r\n\tif (nStart < 0) \r\n\t\tnStart = 0;\r\n\telse if (nStart > nLen)\r\n\t\tnStart = nLen - 1;\r\n\r\n\t// ³ = Դ - 滻 + Ӵ\r\n\t// ʼ + 滻 <= Դ\r\n\tif (nStart + nRpLen > nLen) nRpLen = nLen - nStart;\r\n\tINT nNewLen = nLen - nRpLen + nSubLen;\r\n\tif (nNewLen <= 0) return NULL;\r\n\r\n\tchar* pText;\r\n\tif (nStart == 0) // ǰƴ\r\n\t{\r\n\t\tif (nSubLen == 0) // ӴΪ\r\n\t\t\treturn CloneTextData(pStr + nRpLen, nNewLen);\r\n\r\n\t\tpText = (char*)E_MAlloc_Nzero ((DWORD)(nNewLen + 1));\r\n\t\tmemcpy(pText, pSubstr, nSubLen);\r\n\t\tmemcpy(pText + nSubLen, pStr + nRpLen, nLen - nRpLen + 1);//+1ǰ\\0Ҳƽȥ\r\n\t\treturn pText;\r\n\t}\r\n\telse if (nStart >= nLen) // ƴ\r\n\t{\r\n\t\tif (nSubLen == 0) // ӴΪ\r\n\t\t\treturn CloneTextData(pStr, nNewLen);\r\n\r\n\t\tpText = (char*)E_MAlloc_Nzero ((DWORD)(nNewLen + 1));\r\n\t\tmemcpy(pText, pStr, nLen);\r\n\t\tmemcpy(pText + nLen, pSubstr, nSubLen + 1);//+1ǰ\\0Ҳƽȥ\r\n\t\treturn pText;\r\n\t}\r\n\r\n\t// мƴ\r\n\tpText = (char*)E_MAlloc_Nzero ((DWORD)(nNewLen + 1));\r\n\tchar* pTemp = pText;\r\n\tmemcpy(pTemp, pStr, nStart);\r\n\tpTemp+=nStart;\r\n\tif (nSubLen > 0)\r\n\t{\r\n\t\tmemcpy(pTemp, pSubstr, nSubLen);\r\n\t\tpTemp+=nSubLen;\r\n\t}\r\n\tif (nStart + nSubLen < nNewLen)\r\n\t\tmemcpy(pTemp, pStr + nStart + nRpLen, nLen - nStart - nRpLen);\r\n\r\n\tpText[nNewLen] = '\\0';\r\n\treturn pText;\r\n}\r\n// {//ԭ\r\n// \tPMDATA_INF pArgInf = &ArgInf;\r\n// \tUINT nLen = mystrlen(ArgInf.m_pText);\r\n// \tif(nLen==0)\r\n// \t{\r\n// \t\tif(pArgInf[3].m_dtDataType == _SDT_NULL)\r\n// \t\t\treturn NULL;\r\n// \t\tnLen = mystrlen(pArgInf[3].m_pText);\r\n// \t\tif(nLen==0)\r\n// \t\t\treturn NULL;\r\n// \t\treturn CloneTextData(pArgInf[3].m_pText,nLen);\r\n// \r\n// \t}\r\n// \tif(pArgInf[1].m_int > nLen || pArgInf[2].m_int <= 0)\r\n// \t\treturn CloneTextData(ArgInf.m_pText,nLen);\r\n// \tINT nSubStr = 0;\r\n// \tchar* pSubStr = NULL;\r\n// \tif(pArgInf[3].m_dtDataType != _SDT_NULL)\r\n// \t{\r\n// \t\tpSubStr = pArgInf[3].m_pText;\r\n// \t\tnSubStr = mystrlen(pSubStr);\r\n// \t}\r\n// \tif(pArgInf[1].m_int <=0 )\r\n// \t\tpArgInf[1].m_int = 1;\r\n// \tINT nForce = pArgInf[1].m_int - 1;\r\n// \tINT nBack = nLen - nForce;\r\n// \tBOOL bStrcat;\r\n// \tINT nCount ;\r\n// \tif(nBack < pArgInf[2].m_int)\r\n// \t{\r\n// \t\tnCount = nForce + nSubStr;\r\n// \t\tbStrcat = TRUE;\r\n// \t}else{\r\n// \r\n// \t\tnCount = nLen - pArgInf[2].m_int + nSubStr;\r\n// \t\tbStrcat = FALSE;\r\n// \t}\r\n// \r\n// \tchar *pText = (char*)E_MAlloc(nCount+1);\r\n// \tif(bStrcat)\r\n// \t{\r\n// \t\tstrncpy(pText,ArgInf.m_pText,nForce);\r\n// \t\tpText[nForce]=0;\r\n// \t\tif(pSubStr)\r\n// \t\t\tstrcat(pText,pSubStr);\r\n// \t}\r\n// \telse\r\n// \t{\r\n// \t\tstrncpy(pText,ArgInf.m_pText,nForce);\r\n// \t\tpText[nForce]=0;\r\n// \t\tif(pSubStr)\r\n// \t\t\tstrcat(pText,pSubStr);\r\n// \t\tpSubStr = ArgInf.m_pText + nForce + pArgInf[2].m_int;\r\n// \t\tstrcat(pText,pSubStr);\r\n// \t}\r\n// \treturn pText;\r\n// \r\n// }"
  },
  {
    "path": "krnln/krnln_RestroeCursor.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ϵͳ - ָ\r\n/*\r\n    øʽ ޷ֵ ָ  - ϵͳֿ֧->ϵͳ\r\n    ӢƣRestroeCursor\r\n    ָԭ״롰õȴꡱʹáΪ\r\n*/\r\nHCURSOR hCurOld = NULL;\r\n\r\nLIBAPI(void, krnln_RestroeCursor)\r\n{\r\n\r\n\tif(hCurOld)\r\n\t{\r\n\t\tSetCursor(hCurOld);\r\n\t\thCurOld = NULL;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ReverseIntBytes.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n// øʽ ͡ תֽ  תֵ - ϵͳֿ֧->ֵת\r\n// ӢƣReverseIntBytes\r\n// ָֽת,طתĽֵ. Ʃʮ0x12345678,ת󽫷0x78563412. JavaԽݽʱô.Ϊ\r\n// <1>ΪתֵΪͣintṩתֵֽ\r\n// \r\n// ϵͳ WindowsLinux\r\nLIBAPI(int, krnln_ReverseIntBytes)\r\n{\r\n\tunsigned int nRes = ArgInf.m_uint >> 24;\r\n\tnRes |= ((ArgInf.m_uint & 0x00FF0000) >> 8);\r\n\tnRes |= ((ArgInf.m_uint & 0x0000FF00) << 8);\r\n\tnRes |= ((ArgInf.m_uint & 0x000000FF) << 24);\r\n\treturn nRes;\r\n}"
  },
  {
    "path": "krnln/krnln_RmDir.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\nBOOL BlackMoonDeleteDir(LPSTR strDirName)\r\n{\r\n\t\r\n\tchar szName [MAX_PATH];\r\n\tchar szFile [MAX_PATH];\r\n\tstrcpy(szName,strDirName);\r\n\tINT nLen = mystrlen(szName);\r\n\tif(szName[nLen-1] != '\\\\')\r\n\t\tstrcat(szName,\"\\\\\");\r\n\r\n\tstrcpy(szFile,szName);//\\ΪβĵǰĿ¼\r\n\tstrcat(szName,\"*\");//ͨĿ¼\r\n\r\n\tWIN32_FIND_DATA FindFileData;\r\n\tHANDLE hFile = FindFirstFile(szName,&FindFileData);\r\n\tif(hFile==NULL || hFile == INVALID_HANDLE_VALUE) \r\n\t\treturn FALSE;\r\n\tBOOL bOK = TRUE;\r\n\tdo{\r\n\t\tif(strcmp(FindFileData.cFileName,\".\")!=0 &&\r\n\t\t\tstrcmp(FindFileData.cFileName,\"..\")!=0)\r\n\t\t{\r\n\r\n\t\t\tstrcpy(szName,szFile);\r\n\t\t\tstrcat(szName,FindFileData.cFileName);//ĿļĿ¼\r\n\t\t\tif ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)//ΪĿ¼\r\n\t\t\t{\r\n\t\t\t\tbOK = BlackMoonDeleteDir(szName);//ݹѭ\r\n\t\t\t\tif(bOK)\r\n\t\t\t\t\tbOK = RemoveDirectory(szName);//ɾĿ¼\r\n\t\t\t\t\r\n\t\t\t}else\r\n\t\t\t\tbOK = DeleteFile(szName);//ɾļ\r\n\t\t}\r\n\t\tif(bOK == FALSE)\r\n\t\t\tbreak;\r\n\t}while(FindNextFile(hFile,&FindFileData));\r\n\r\n\tFindClose(hFile); //رվ \r\n\treturn bOK;\r\n\r\n}\r\n\r\n//̲ - ɾĿ¼\r\n/*\r\n    øʽ ߼͡ ɾĿ¼ ı ɾĿ¼ƣ - ϵͳֿ֧->̲\r\n    ӢƣRmDir\r\n    ɾһڵĿ¼еĿ¼ļؽʹñɹ棬ʧܷؼ١Ϊ\r\n    <1>ΪɾĿ¼ơΪıͣtextĿ¼ӦʵʴڣĿ¼дļĿ¼һɾʹñǧء\r\n*/\r\nLIBAPI(BOOL, krnln_RmDir)\r\n{\r\n\tif(ArgInf.m_pText == NULL)\r\n\t\treturn FALSE;\r\n\tint nLen = mystrlen(ArgInf.m_pText);\r\n\tif(nLen==0)//ֹɾǰĿ¼ĸĿ¼\"\\*\"\r\n\t\treturn FALSE;\r\n\tif(nLen ==1 && ArgInf.m_pText[0]=='\\\\')//ֹɾǰĿ¼ĸĿ¼\"\\*\"\r\n\t\treturn FALSE;\r\n\tBOOL bOK = BlackMoonDeleteDir(ArgInf.m_pText);\r\n\tif(bOK)\r\n\t\tbOK = RemoveDirectory(ArgInf.m_pText);//ɾĿ¼\r\n\treturn bOK;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_RpBin.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ֽڼ - ֽڼ滻\r\n/*\r\n    øʽ ֽڼ ֽڼ滻 ֽڼ 滻䲿ֵֽڼ ʼ滻λã 滻ȣֽڼ 滻ֽڼݣ - ϵͳֿ֧->ֽڼ\r\n    ӢƣRpBin\r\n    ָֽڼĳһֽڼ滻Ȼ󷵻滻ĽΪ\r\n    <1>Ϊ滻䲿ֵֽڼΪֽڼbin\r\n    <2>Ϊʼ滻λáΪͣint滻ʼλã1Ϊλã2Ϊ2λãơ\r\n    <3>Ϊ滻ȡΪͣint\r\n    <4>Ϊ滻ֽڼΪֽڼbinԱʡԡʡԣɾֽڼеָ֡\r\n*/\r\nLIBAPI(void*, krnln_RpBin)\r\n{// ߺŸ\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[0].m_pBin==NULL)\r\n\t\treturn NULL;\r\n\tLPBYTE pBin = pArgInf[0].m_pBin + 2*sizeof(INT);\r\n\tLPBYTE pSubBin = pArgInf[3].m_pBin + 2*sizeof(INT);\r\n\tINT nSubLen;\r\n\tINT nLen = pArgInf[0].m_pInt[1];\r\n\tif (pArgInf[3].m_dtDataType==_SDT_NULL)\r\n\t\tnSubLen = 0;\r\n\telse\r\n\t\tnSubLen = pArgInf[3].m_pInt[1];\r\n\t\r\n\tINT nRpLen = pArgInf[2].m_int;\r\n\tif (nRpLen < 0) nRpLen = 0;\r\n\t\r\n\tINT nStart = pArgInf[1].m_int - 1;\r\n\tif (nStart < 0) \r\n\t\tnStart = 0;\r\n\telse if (nStart > nLen)\r\n\t\tnStart = nLen - 1;\r\n\t\r\n\t// ³ = Դ - 滻 + Ӵ\r\n\t// ʼ + 滻 <= Դ\r\n\tif (nStart + nRpLen > nLen) nRpLen = nLen - nStart;\r\n\tINT nNewLen = nLen - nRpLen + nSubLen;\r\n\tif (nNewLen <= 0) return NULL;\r\n\t\r\n\tLPBYTE pRetn;\r\n\tLPBYTE pTemp;\r\n\tif (nStart == 0) // ǰƴ\r\n\t{\r\n\t\tif (nSubLen == 0) // ӴΪ\r\n\t\t\treturn CloneBinData(pBin + nRpLen, nNewLen);\r\n\t\t\r\n\t\tpRetn = (LPBYTE)E_MAlloc_Nzero ((DWORD)(nNewLen + 2*sizeof(INT)));\r\n\t\tpTemp = pRetn;\r\n\t\t*(LPINT)pTemp = 1; //һά\r\n\t\tpTemp+=sizeof(INT);\r\n\t\t*(LPINT)pTemp = nNewLen;\r\n\t\tpTemp+=sizeof(INT);\r\n\t\tmemcpy(pTemp, pSubBin, nSubLen);\r\n\t\tmemcpy(pTemp + nSubLen, pBin + nRpLen, nLen - nRpLen);\r\n\t\treturn pRetn;\r\n\t}\r\n\telse if (nStart >= nLen) // ƴ\r\n\t{\r\n\t\tif (nSubLen == 0) // ӴΪ\r\n\t\t\treturn CloneBinData(pBin, nNewLen);\r\n\t\t\r\n\t\tpRetn = (LPBYTE)E_MAlloc_Nzero ((DWORD)(nNewLen + 2*sizeof(INT)));\r\n\t\tpTemp = pRetn;\r\n\t\t*(LPINT)pTemp = 1; //һά\r\n\t\tpTemp+=sizeof(INT);\r\n\t\t*(LPINT)pTemp = nNewLen;\r\n\t\tpTemp+=sizeof(INT);\r\n\t\tmemcpy(pTemp, pBin, nLen);\r\n\t\tmemcpy(pTemp + nLen, pSubBin, nSubLen);\r\n\t\treturn pRetn;\r\n\t}\r\n\t\r\n\t// мƴ\r\n\tpRetn = (LPBYTE)E_MAlloc_Nzero ((DWORD)(nNewLen + 2*sizeof(INT)));\r\n\tpTemp = pRetn;\r\n\r\n\t*(LPINT)pTemp = 1; //һά\r\n\tpTemp+=sizeof(INT);\r\n\t*(LPINT)pTemp = nNewLen;\r\n\tpTemp+=sizeof(INT);\r\n\r\n\tmemcpy(pTemp, pBin, nStart);\r\n\tpTemp+=nStart;\r\n\tif (nSubLen > 0)\r\n\t{\r\n\t\tmemcpy(pTemp, pSubBin, nSubLen);\r\n\t\tpTemp+=nSubLen;\r\n\t}\r\n\tif (nStart + nSubLen < nNewLen)\r\n\t\tmemcpy(pTemp, pBin + nStart + nRpLen, nLen - nStart - nRpLen);\r\n\t\r\n\treturn pRetn;\r\n}\r\n// { ԭ\r\n// \tPMDATA_INF pArgInf = &ArgInf;\r\n// \tif(pArgInf[0].m_pBin==NULL)\r\n// \t\treturn NULL;\r\n// \tUINT nLen = pArgInf[0].m_pInt[1];\r\n// \t\r\n// \tif(nLen==0 )\r\n// \t{\r\n// \t\tif(pArgInf[3].m_pBin == _SDT_NULL)\r\n// \t\t\treturn NULL;\r\n// \t\tnLen = pArgInf[3].m_pInt[1];\r\n// \t\tif(nLen==0)\r\n// \t\t\treturn NULL;\r\n// \t\t\r\n// \t\treturn CloneBinData(pArgInf[3].m_pBin + 2*sizeof(INT),nLen);\r\n// \t}\r\n// \tLPBYTE pSrc = pArgInf[0].m_pBin + 2 *sizeof(INT);\r\n// \tif(pArgInf[1].m_int > nLen || pArgInf[2].m_int <= 0)\r\n// \t\treturn CloneBinData (pSrc, nLen);\r\n// \r\n// \tINT nSubStr = 0;\r\n// \tLPBYTE pSubStr = NULL;\r\n// \t\r\n// \tif(pArgInf[3].m_dtDataType != _SDT_NULL && pArgInf[3].m_pBin)\r\n// \t{\r\n// \t\tpSubStr = pArgInf[3].m_pBin + 2 *sizeof(INT);\r\n// \t\tnSubStr = pArgInf[3].m_pInt[1];\r\n// \t}\r\n// \tif(pArgInf[1].m_int <=0 )\r\n// \t\tpArgInf[1].m_int = 1;\r\n// \tINT nForce = pArgInf[1].m_int - 1;\r\n// \tINT nBack = nLen - nForce;\r\n// \tBOOL bStrcat;\r\n// \tINT nCount ;\r\n// \tif(nBack < pArgInf[2].m_int)\r\n// \t{\r\n// \t\tnCount = nForce + nSubStr;\r\n// \t\tbStrcat = TRUE;\r\n// \t}else{\r\n// \r\n// \t\tnCount = nLen - pArgInf[2].m_int + nSubStr;\r\n// \t\tbStrcat = FALSE;\r\n// \t}\r\n// \r\n// \tLPBYTE pText = (LPBYTE)E_MAlloc(nCount+2 *sizeof(INT));\r\n// \tLPBYTE pDest = (LPBYTE)pText;\r\n// \t*(LPINT)pDest=1;\r\n// \tpDest+=sizeof(INT);\r\n// \t*(LPINT)pDest=nCount;\r\n// \tpDest+=sizeof(INT);\r\n// \r\n// \tif(bStrcat)\r\n// \t{\r\n// \t\tmemcpy(pDest,pSrc,nForce);\r\n// \t\tif(pSubStr)\r\n// \t\t{\r\n// \t\t\tpDest+=nForce;\r\n// \t\t\tmemcpy(pDest,pSubStr,nSubStr);\r\n// \t\t}\r\n// \t}\r\n// \telse\r\n// \t{\r\n// \t\tmemcpy(pDest,pSrc,nForce);\r\n// \t\tpDest+=nForce;\r\n// \t\tif(pSubStr)\r\n// \t\t{\r\n// \t\t\tmemcpy(pDest,pSubStr,nSubStr);\r\n// \t\t\tpDest+=nSubStr;\r\n// \t\t}\r\n// \t\tnBack = nBack-pArgInf[2].m_int;\r\n// \t\tpSubStr = pSrc + nForce + pArgInf[2].m_int;\r\n// \t\tmemcpy(pDest,pSubStr,nBack);\r\n// \t}\r\n// \treturn pText;\r\n// }\r\n"
  },
  {
    "path": "krnln/krnln_RpSubBin.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"mem.h\"\r\n#include \"Myfunctions.h\"\r\n#include <stdio.h>\r\n\r\nLPBYTE __cdecl krnln_fnRpSubBin(int a2, int a3)\r\n{\r\n  int v3; // ecx@1\r\n  int v4; // ebx@1\r\n  int v5; // ebp@1\r\n  int v6; // edi@1\r\n  int v7; // esi@1\r\n  LPBYTE v8; // ebx@16\r\n  int v9; // ebp@16\r\n  int v10; // edi@16\r\n  int v11; // eax@19\r\n  int v12; // esi@19\r\n  char v13; // zf@21\r\n  int v14; // edx@21\r\n  int v15; // ecx@21\r\n  int v16; // edi@21\r\n  LPBYTE v17; // esi@21\r\n  int v18; // eax@26\r\n  LPBYTE v20; // eax@33\r\n  LPBYTE v21; // [sp+0h] [bp-40h]@31\r\n  int v22; // [sp+4h] [bp-3Ch]@31\r\n  int v23; // [sp+18h] [bp-28h]@1\r\n  int v24; // [sp+1Ch] [bp-24h]@1\r\n  int v25; // [sp+20h] [bp-20h]@5\r\n  int v26; // [sp+24h] [bp-1Ch]@2\r\n  BYTE v27; // [sp+28h] [bp-18h]@16\r\n  //void **v28; // [sp+2Ch] [bp-14h]@12\r\n  //int v29; // [sp+34h] [bp-Ch]@33\r\n  //int v30; // [sp+3Ch] [bp-4h]@33\r\n  int v31; // [sp+4Ch] [bp+Ch]@10\r\n\r\n  v5 = *(int*)(*(int*)a3 + 4);\r\n  v24 = *(int*)(a3 + 12) + 8;\r\n  v4 = *(int*)(*(int*)(a3 + 12) + 4);\r\n  v3 = *(int*)(a3 + 32);\r\n  v7 = *(int*)a3 + 8;\r\n  v6 = 0;\r\n  v23 = *(int*)(*(int*)(a3 + 12) + 4);\r\n  if ( v3 )\r\n    v26 = *(int*)(a3 + 24) + 8;\r\n  else\r\n    v26 = 0;\r\n  if ( v3 )\r\n    v25 = *(int*)(*(int*)(a3 + 24) + 4);\r\n  else\r\n    v25 = 0;\r\n  if ( *(int*)(a3 + 44) )\r\n    v6 = (*(int*)(a3 + 36) - 1) & ((*(int*)(a3 + 36) - 1 < 0) - 1);\r\n  if ( *(int*)(a3 + 56) )\r\n    v31 = *(int*)(a3 + 48) & ((*(int*)(a3 + 48) < 0) - 1);\r\n  else\r\n    v31 = -1;\r\n  CFreqMem v28;\r\n  if ( v5 && v4 && v6 < v5 && v31 )\r\n  {\r\n    v28.Append((LPBYTE) v7, v6);\r\n    v8 = (LPBYTE)(v6 + v7);\r\n    v9 = v5 - v6;\r\n    v10 = v23;\r\n    v27 = *(BYTE*)v24;\r\n    if ( v9 >= v23 )\r\n    {\r\n      while ( 1 )\r\n      {\r\n        v11 = FindByte(v8, v9, v27);\r\n        v12 = v11;\r\n        if ( v11 == -1 )\r\n          break;\r\n        v28.Append( v8, v11);\r\n        v9 -= v12;\r\n        v8 += v12;\r\n        if ( v9 < v10 )\r\n          break;\r\n        v15 = v10;\r\n        v16 = v24;\r\n        v17 = v8;\r\n        v14 = 0;\r\n        v13 = 1;\r\n        do\r\n        {\r\n          if ( !v15 )\r\n            break;\r\n          v13 = *v17++ == *(LPBYTE)(v16++);\r\n          --v15;\r\n        }\r\n        while ( v13 );\r\n        if ( v13 )\r\n        {\r\n          v28.Append((LPBYTE) v26, v25);\r\n          v18 = v23;\r\n          v8 += v23;\r\n          v9 -= v23;\r\n          if ( v31 != -1 )\r\n          {\r\n            --v31;\r\n            if ( !v31 )\r\n              break;\r\n          }\r\n        }\r\n        else\r\n        {\r\n          v14 =(BYTE) *v8;//(LOBYTE)\r\n          v28.AddByte( v14);\r\n          v18 = v23;\r\n          ++v8;\r\n          --v9;\r\n        }\r\n        if ( v9 < v18 )\r\n          break;\r\n        v10 = v23;\r\n      }\r\n    }\r\n    v22 = v9;\r\n    v21 = v8;\r\n  }\r\n  else\r\n  {\r\n    v22 = v5;\r\n    v21 = (LPBYTE)v7;\r\n  }\r\n  v28.Append( v21, v22);\r\n  v20 = CloneBinData(v28.GetPtr(), v28.GetSize());\r\n // v28 = &CFreqMem___vftable_;\r\n  v28.Free();\r\n  return v20;\r\n}\r\n\r\n//ֽڼ - ֽڼ滻\r\n/*\r\n    øʽ ֽڼ ֽڼ滻 ֽڼ 滻ֽڼֽڼ 滻ֽڼֽڼ 滻ֽڼݣ 滻ʼλãݣ 滻еĴݣ - ϵͳֿ֧->ֽڼ\r\n    ӢƣRpSubBin\r\n    һֽڼֽڼָֽڼѱ滻һֽڼ滻ĴҲǱָġΪ\r\n    <1>Ϊ滻ֽڼΪֽڼbin\r\n    <2>Ϊ滻ֽڼΪֽڼbin\r\n    <3>Ϊ滻ֽڼΪֽڼbinԱʡԡʡԱĬΪֽڼ\r\n    <4>Ϊ滻ʼλáΪͣintԱʡԡ滻ֽڼʼλáʡԣĬϴ1ʼ\r\n    <5>Ϊ滻еĴΪͣintԱʡԡֽڼ滻ĴʡԣĬϽпܵ滻\r\n*/\r\n\r\nLIBAPI(void*, krnln_RpSubBin)\r\n{// ߺ \r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\tLPBYTE pSrc = pArgInf[0].m_pBin;\r\n\tINT nSLen = pArgInf[0].m_pInt[1];\r\n\tif (nSLen <= 0 || !pSrc) return NULL;\r\n\r\n\tLPBYTE pDes = pArgInf[1].m_pBin;\r\n\tINT nDLen = pArgInf[1].m_pInt[1];\r\n\r\n\tpSrc += 2*sizeof(INT);\r\n\tINT nCount = pArgInf[4].m_int;\r\n\tif (pArgInf[4].m_dtDataType == _SDT_NULL) \r\n\t\tnCount = 0x7FFFFFFF; // 滻21\r\n\r\n\tINT nStart;\r\n\tif (pArgInf[3].m_dtDataType == _SDT_NULL || pArgInf[3].m_int <= 1)\r\n\t\tnStart = 0;\r\n\telse\r\n\t\tnStart = pArgInf[3].m_int - 1;\r\n\r\n\tif (nDLen <= 0 || !pDes || nCount <=0 || nStart >= nSLen || nDLen > nSLen) // ؼϷֱӷԭֽڼ\r\n\t\treturn CloneBinData(pSrc, nSLen);\r\n\t\r\n\tpDes += 2*sizeof(INT);\r\n\tLPBYTE pSub = NULL;\r\n\tINT nSubLen = 0;\r\n\tif (pArgInf[2].m_dtDataType != _SDT_NULL)\r\n\t{\r\n\t\tnSubLen = pArgInf[2].m_pInt[1];\r\n\t\tif (nSubLen < 0)\r\n\t\t\tnSubLen = 0;\r\n\t\telse\r\n\t\t\tpSub = pArgInf[2].m_pBin + 2*sizeof(INT);\r\n\t}\r\n\r\n\t// ʼ\r\n\tTBR tbr;\r\n\tINT nPos;\r\n\tLPBYTE pFirst = pSrc;\r\n\tLPBYTE pSearch = pSrc + nStart;\r\n\tINT nSYLen = nSLen;\r\n\tLPBYTE pLast = pSrc + nSLen;\r\n\r\n\tfor (; nCount > 0; nCount--)\r\n\t{\r\n\t\tnPos = myinstring(pSearch, nSYLen, pDes, nDLen);\r\n\t\tif (nPos == -1)\r\n\t\t\tbreak;\r\n\t\tif (pSearch + nPos - pFirst > 0)\r\n\t\t\ttbr.add(pFirst, pSearch + nPos - pFirst);\r\n\r\n\t\tif (nSubLen > 0)\r\n\t\t\ttbr.add(pSub, nSubLen);\r\n\r\n\t\tpSearch += nPos + nDLen;\r\n\t\tpFirst = pSearch;\r\n\t\tnSYLen -= nPos + nDLen;\r\n\t}\r\n\r\n\tif (pLast - pFirst > 0)\r\n\t\ttbr.add(pFirst, pLast - pFirst);\r\n\r\n\t// Ƽ\r\n\tLPBYTE pRetn = (LPBYTE)E_MAlloc_Nzero(tbr.m_nTLen + 2*sizeof(INT));\r\n\tLPBYTE pRetnTmp = pRetn;\r\n\t*(LPINT)pRetnTmp = 1;\r\n\tpRetnTmp += sizeof(INT);\r\n\t*(LPINT)pRetnTmp = tbr.m_nTLen;\r\n\tpRetnTmp += sizeof(INT);\r\n\r\n\tnCount = tbr.m_nCount;\r\n\tfor (int i = 0; i < nCount; i++)\r\n\t{\r\n\t\tmemcpy(pRetnTmp, tbr.m_data[i].addr, tbr.m_data[i].len);\r\n\t\tpRetnTmp += tbr.m_data[i].len;\r\n\t}\r\n\r\n\treturn pRetn;\r\n}\r\n// {\r\n// \r\n// \treturn krnln_fnRpSubBin(nArgCount,(INT)&ArgInf);\r\n// }\r\n/*\r\nextern \"C\" void* _cdecl krnln_RpSubBin (INT nArgCount,MDATA_INF ArgInf,...)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[0].m_pBin==NULL)\r\n\t\treturn NULL;\r\n\tINT nLen = pArgInf[0].m_pInt [1];\r\n\tLPBYTE pData = pArgInf[0].m_pBin + 2*sizeof(INT);\r\n\tif(nLen==0)return NULL;\r\n\tif(pArgInf[1].m_pBin==NULL)//Ҫ滻ֽڼ\r\n\t\treturn CloneBinData (pData, nLen);\r\n\r\n\tINT nSubLen = pArgInf[1].m_pInt [1];\r\n\tif(nSubLen > nLen)return NULL;\r\n\tif(nSubLen==0)\r\n\t\treturn CloneBinData (pData, nLen);\r\n\tLPBYTE pObj = pArgInf[1].m_pBin + 2*sizeof(INT);\r\n\t\r\n\tLPBYTE pStrRpl = NULL;\r\n\tINT nStrRpl = 0;\r\n\tif(pArgInf[2].m_dtDataType !=_SDT_NULL && pArgInf[2].m_pBin)\r\n\t{\r\n\t\tpStrRpl = pArgInf[2].m_pBin + 2*sizeof(INT);\r\n\t\tnStrRpl = pArgInf[2].m_pInt [1];\r\n\t}\r\n\r\n\tINT nStart;\r\n\tif(pArgInf[3].m_dtDataType ==_SDT_NULL)\r\n\t\tnStart = 1;\r\n\telse\r\n\t\tnStart = pArgInf[3].m_int;\r\n\r\n\tINT nRplCount;\r\n\tif(pArgInf[4].m_dtDataType ==_SDT_NULL)\r\n\t\tnRplCount = 0x7fffffff;\r\n\telse\r\n\t\tnRplCount = pArgInf[4].m_int;\r\n\r\n\tINT nEnd = nLen - nSubLen;\r\n\tif(nStart > nEnd || nRplCount <= 0  || nStart <= 0)//ѰҵıڿʼѰλ  û滻\r\n\t\treturn CloneBinData (pData, nLen);\r\n\r\n//ͳҵĴͻ峤\r\n\tLPBYTE pSrc = pData;\r\n\tLPBYTE pStart = pSrc + nStart -1;\r\n\tLPBYTE pEnd = pSrc + nEnd+1;\r\n\tINT nFind = 0;\r\n\r\n\twhile(pStart < pEnd)\r\n\t{\r\n\t\tif(memcmp(pStart,pObj,nSubLen)==0)\r\n\t\t{\r\n\t\t\tnFind++;\r\n\t\t\tif(nFind == nRplCount)\r\n\t\t\t\tbreak;\r\n\t\t\tpStart+=nSubLen;\r\n\t\t}\r\n\t\telse\r\n\t\t\tpStart++;\r\n\t}\r\n\r\n\r\n\tif(nFind==0)//һҲûҵ\r\n\t\treturn CloneBinData (pData, nLen);\r\n\r\n\tINT nBuf = nLen + (nStrRpl - nSubLen) * nFind;\r\n\tLPBYTE pText = (LPBYTE)E_MAlloc(nBuf+2*sizeof(INT));\r\n\tLPBYTE pDest = pText;\r\n\t*(LPINT)pDest=1;\r\n\tpDest+=sizeof(INT);\r\n\t*(LPINT)pDest=nBuf;\r\n\tpDest+=sizeof(INT);\r\n\r\n//ʼ滻\r\n\r\n\tpStart = pSrc + nStart -1;\r\n\tpEnd = pSrc + nEnd+1;\r\n\r\n\twhile(pStart < pEnd)\r\n\t{\r\n\t\tif(memcmp(pStart,pObj,nSubLen)==0)\r\n\t\t{\r\n\t\t\tINT nStr = pStart - pSrc;\r\n\t\t\tmemcpy(pDest,pSrc,nStr);//ϴζ\r\n\t\t\tpDest+=nStr;\r\n\t\t\tif(pStrRpl)\r\n\t\t\t{\r\n\t\t\t\tmemcpy(pDest,pStrRpl,nStrRpl);//滻ı\r\n\t\t\t\tpDest+=nStrRpl;\r\n\t\t\t}\r\n\t\t\tpStart+=nSubLen;\r\n\t\t\tpSrc = pStart; //һ;\r\n\t\t\tnFind--;\r\n\t\t\tif(nFind == 0)\r\n\t\t\t{\r\n\t\t\t\tif(pStart - pData <=nLen)\r\n\t\t\t\t{\r\n\t\t\t\t\tnStr = pEnd - pSrc+nSubLen-1;\r\n\t\t\t\t\tmemcpy(pDest,pSrc,nStr);//滻ı\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t\tpStart++;\r\n\r\n\t}\r\n\r\n\treturn pText;\r\n}\r\n*/"
  },
  {
    "path": "krnln/krnln_RpSubText.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"mem.h\"\r\n#include \"Myfunctions.h\"\r\n//ı - ı滻\r\n/*\r\n    øʽ ı͡ ı滻 ı 滻ıı 滻ıı 滻ıݣ 滻ʼλãݣ 滻еĴݣ߼ ǷִСд - ϵͳֿ֧->ı\r\n    ӢƣRpSubText\r\n    һııָıѱ滻һı滻ĴҲǱָġΪ\r\n    <1>Ϊ滻ıΪıͣtext\r\n    <2>Ϊ滻ıΪıͣtext\r\n    <3>Ϊ滻ıΪıͣtextԱʡԡʡԣĬΪı\r\n    <4>Ϊ滻ʼλáΪͣintԱʡԡֵָ滻ıʼλáʡԣĬϴ 1 ʼ\r\n    <5>Ϊ滻еĴΪͣintԱʡԡֵָı滻ĴʡԣĬϽпܵ滻\r\n    <6>ΪǷִСдΪ߼ͣboolʼֵΪ桱ΪִСдΪٲ֡\r\n\r\n\r\nchar* StrCpyForE(char* pSrc)\r\n{\r\n\tINT nLen = strlen(pSrc);\r\n\tchar *pText = (char*)E_MAlloc(nLen+1);\r\n\tstrcpy(pText,pSrc);\r\n\treturn pText;\r\n}*/\r\nLIBAPI(char*, krnln_RpSubText)\r\n{// ߺ \r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tchar* pSrc = pArgInf[0].m_pText;\r\n\tif (!pSrc || !*pSrc) return NULL;\r\n\t//ʼ滻λ\r\n\tINT nStart;\r\n\tif (pArgInf[3].m_dtDataType == _SDT_NULL || pArgInf[3].m_int <= 1)\r\n\t\tnStart = 0;\r\n\telse\r\n\t\tnStart = pArgInf[3].m_int - 1;\r\n\t//жϿʼλ\r\n\tchar* cp = pSrc;\r\n\tchar* pStart = pSrc + nStart;\r\n\tfor (; *cp && cp < pStart; cp++)\r\n\t\tif (*cp < 0) cp++; // \r\n\r\n\tif (!*cp)\r\n\t\treturn CloneTextData(pSrc, cp - pSrc);\r\n\r\n\tINT nSLen = (cp + mystrlen(cp)) - pSrc;\r\n\t//ı\r\n\tchar* pDes = pArgInf[1].m_pText;\r\n\tINT nDLen = 0;\r\n\tif (pDes)\r\n\t\tnDLen = mystrlen(pDes);\r\n\t//滻\r\n\tINT nCount = pArgInf[4].m_int;\r\n\tif (pArgInf[4].m_dtDataType == _SDT_NULL)\r\n\t\tnCount = 0x7FFFFFFF;// 滻21\r\n\r\n\tif (nDLen <=0 || nCount<=0) // ؼϷֱӷԭı\r\n\t\treturn CloneTextData(pSrc, nSLen);\r\n\r\n\tchar* pSub = NULL;\r\n\tINT nSubLen = 0;\r\n\tif (pArgInf[2].m_dtDataType != _SDT_NULL)\r\n\t{\r\n\t\tpSub = pArgInf[2].m_pText;\r\n\t\tif (pSub)\r\n\t\t\tnSubLen = mystrlen(pSub);\r\n\t}\r\n\r\n\t// ʼ\r\n\tTBR tbr;\r\n\tINT nPos;\r\n\tchar* pFirst = pSrc;\r\n\tchar* pLast = pSrc + nSLen;\r\n\tif (pArgInf[5].m_bool) // ִСд\r\n\t{\r\n\t\tfor (; nCount > 0; nCount--)\r\n\t\t{\r\n\t\t\tnPos = mystrstr((char*)cp, (char*)pDes);\r\n\t\t\tif (nPos == -1)\r\n\t\t\t\tbreak;\r\n\t\t\tif (cp + nPos - pFirst > 0)\r\n\t\t\t\ttbr.add(pFirst, cp + nPos - pFirst);\r\n\t\t\r\n\t\t\tif (nSubLen > 0)\r\n\t\t\t\ttbr.add(pSub, nSubLen);\r\n\t\t\r\n\t\t\tcp += nPos + nDLen;\r\n\t\t\tpFirst = cp;\r\n\t\t}\r\n\t}\r\n\telse\r\n\t{\r\n\t\tfor (; nCount > 0; nCount--)\r\n\t\t{\r\n\t\t\tnPos = mystristr((char*)cp, (char*)pDes);\r\n\t\t\tif (nPos == -1)\r\n\t\t\t\tbreak;\r\n\t\t\tif (cp + nPos - pFirst > 0)\r\n\t\t\t\ttbr.add(pFirst, cp + nPos - pFirst);\r\n\t\t\t\r\n\t\t\tif (nSubLen > 0)\r\n\t\t\t\ttbr.add(pSub, nSubLen);\r\n\t\t\t\r\n\t\t\tcp += nPos + nDLen;\r\n\t\t\tpFirst = cp;\r\n\t\t}\r\n\t}\r\n\r\n\tif (pLast - pFirst > 0)\r\n\t\ttbr.add(pFirst, pLast - pFirst);\r\n\t\r\n\t// Ƽ\r\n\treturn tbr.toString();\r\n}\r\n\r\n"
  },
  {
    "path": "krnln/krnln_RunConsoleApp.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n#include <stdio.h>\r\nBOOL __cdecl ReadPepi(HANDLE hFile, TBR* tbr)\r\n{\r\n\tDWORD nSize;\r\n\tchar* pBuffer = NULL;\r\n\tchar* pHH = (char*)\"\\r\\n\\0\";\r\n\twhile(1)\r\n\t{\r\n\t\tnSize = 0;\r\n\t\tif (!PeekNamedPipe(hFile, NULL, NULL, NULL, &nSize, NULL))\r\n\t\t\treturn FALSE;\r\n\t\tif (!nSize)\r\n\t\t\tbreak;\r\n\t\tpBuffer = (char*)malloc(0x400);\r\n\t\tif (!ReadFile(hFile, pBuffer, 0x400, &nSize, NULL))\r\n\t\t{\r\n\t\t\tif(pBuffer) free(pBuffer);\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\tif (!nSize)\r\n\t\t\tbreak;\r\n\t\ttbr->add(pBuffer, nSize);\r\n\t\ttbr->add(pHH, 2);\r\n\t\tpBuffer = NULL;\r\n\t}\r\n\tif(pBuffer) free(pBuffer);\r\n\treturn TRUE;\r\n}\r\n/*\r\n//  - п̨\r\nøʽ ߼͡ п̨ ı еУıͱ ׼ݴűݣıͱ ݴűݣͱ ֵűݣ - ϵͳֿ֧->\r\nӢƣRunConsoleApp\r\nָĿ̨(򿪿̨),Ƿгɹ.Ϊ\r\n<1>ΪеСΪıͣtextṩп̨ı\r\n<2>Ϊ׼ݴűΪıͣtextԱʡԣṩʱֻṩ̨ڼ׼豸ݽŵ˱СʡԣĬֵΪޡ\r\n<3>ΪݴűΪıͣtextԱʡԣṩʱֻṩ̨ڼ׼豸ݽŵ˱СʡԣĬֵΪޡ\r\n<4>ΪֵűΪͣintԱʡԣṩʱֻṩ̨˳ʱṩķֵŵ˱СʡԣĬֵΪޡ\r\n\r\n*/\r\nLIBAPI(BOOL, krnln_RunConsoleApp)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tchar* pCMD = pArgInf[0].m_pText;\r\n\r\n\tchar** pStdOut = NULL;\r\n\tchar** pStdError = NULL;\r\n\tPINT pRetn = NULL;\r\n\tif (pArgInf[1].m_dtDataType != _SDT_NULL)\r\n\t\tpStdOut = pArgInf[1].m_ppText;\r\n\tif (pArgInf[2].m_dtDataType != _SDT_NULL)\r\n\t\tpStdError = pArgInf[2].m_ppText;\r\n\tif (pArgInf[3].m_dtDataType != _SDT_NULL)\r\n\t\tpRetn = (PINT)pArgInf[3].m_int;\r\n\r\n\tif (!pCMD || !*pCMD)\r\n\t{\r\n\t\tif (pRetn)\r\n\t\t\t*pRetn = 0;\r\n\t\tif (pStdOut && *pStdOut)\r\n\t\t{\r\n\t\t\tE_MFree(((void*)(*pStdOut)));\r\n\t\t\t*pStdOut = NULL;\r\n\t\t}\r\n\t\tif (pStdError && *pStdError)\r\n\t\t{\r\n\t\t\tE_MFree(((void*)(*pStdError)));\r\n\t\t\t*pStdError = NULL;\r\n\t\t}\r\n\t\treturn FALSE;\r\n\t}\r\n\r\n\tSECURITY_ATTRIBUTES pa;\r\n\tPROCESS_INFORMATION pi;\r\n\tSTARTUPINFO si;\r\n\r\n\tmemset(&pi, 0, sizeof(pi));\r\n\tpi.hProcess = NULL;\r\n\tpi.hThread = NULL;\r\n\tpi.dwProcessId = NULL;\r\n\tpi.dwThreadId = NULL;\r\n\tmemset(&pa, 0, sizeof(pa));\r\n\tpa.lpSecurityDescriptor = NULL;\r\n\tpa.nLength = sizeof(pa);\r\n\tpa.bInheritHandle = 1;\r\n\r\n\tHANDLE hFile1 = NULL;\r\n\tHANDLE hFile2 = NULL;\r\n\tHANDLE hStdOut = NULL;\r\n\tHANDLE hStdError = NULL;\r\n\tBOOL bSucess = FALSE;\r\n\tif(CreatePipe(&hFile1, &hStdOut, &pa, NULL))\r\n\t{\r\n\t\tif(CreatePipe(&hFile2, &hStdError, &pa, NULL))\r\n\t\t{\r\n\t\t\tmemset(&si, 0, sizeof(si));\r\n\t\t\tsi.cb = 68;\r\n\t\t\tsi.dwFlags = 257;\r\n\t\t\tsi.wShowWindow = 0;\r\n\t\t\tsi.hStdOutput = hStdOut;\r\n\t\t\tsi.hStdError = hStdError;\r\n\r\n\t\t\tif (CreateProcess(NULL, pCMD, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))\r\n\t\t\t{\r\n\t\t\t\tBOOL bWait = TRUE;\r\n\t\t\t\tTBR tbrOut;\r\n\t\t\t\tTBR tbrError;\r\n\t\t\t\tdo \r\n\t\t\t\t{\r\n\t\t\t\t\tif (bWait)\r\n\t\t\t\t\t\tif (WaitForSingleObject(pi.hProcess, 0x64) != WAIT_TIMEOUT)\r\n\t\t\t\t\t\t\tbWait = FALSE;\r\n\t\t\t\t} while (bWait);\r\n\t\t\t\tif (pRetn)\r\n\t\t\t\t\tif (!GetExitCodeProcess(pi.hProcess, (LPDWORD)pRetn))\r\n\t\t\t\t\t\t*pRetn = 0;\r\n\t\t\t\tbSucess = TRUE;\r\n\t\t\t\tif (pStdOut)\r\n\t\t\t\t{\r\n\t\t\t\t\tReadPepi(hFile1, &tbrOut);\r\n\t\t\t\t\tif (*pStdOut) E_MFree(*pStdOut);\r\n\t\t\t\t\t*pStdOut = tbrOut.toString();\r\n\t\t\t\t}\r\n\t\t\t\tif (pStdError)\r\n\t\t\t\t{\r\n\t\t\t\t\tReadPepi(hFile2, &tbrError);\r\n\t\t\t\t\tif (*pStdError) E_MFree(*pStdError);\r\n\t\t\t\t\t*pStdError = tbrError.toString();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif (hFile1)\r\n\t\tCloseHandle(hFile1);\r\n\tif (hFile2)\r\n\t\tCloseHandle(hFile2);\r\n\tif (hStdOut)\r\n\t\tCloseHandle(hStdOut);\r\n\tif (hStdError)\r\n\t\tCloseHandle(hStdError);\r\n\treturn bSucess;\r\n}"
  },
  {
    "path": "krnln/krnln_SaveRegItem.cpp",
    "content": "#include \"stdafx.h\"\r\n#pragma comment(lib,\"advapi32.lib\") \r\n#include \"Myfunctions.h\"\r\n\r\n//ϵͳ - дע\r\n/*\r\n    øʽ ߼͡ дע  Ŀ¼ı ȫ·עͨ дֵ - ϵͳֿ֧->ϵͳ\r\n    ӢƣSaveRegItem\r\n     Windows עбָעдעĬֵĿӡ\\ţ硰test\\ɹ棬򷵻ؼ١롰дעͬǱдλôעΪм\r\n    <1>ΪĿ¼ΪͣintΪ³ֵ֮һ 1#ࣻ 2#ã 3#û 4#ػ 5#û\r\n    <2>Ϊȫ·עΪıͣtext\r\n    <3>ΪдֵΪͨͣallֵָд뵽ָעеֵֻΪֵıֽڼʧܡ\r\n*/\r\nLIBAPI(BOOL, krnln_SaveRegItem)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tDWORD dwLen=0;\r\n\tDWORD dwType;\r\n\tDWORD dwNewVal;\r\n\tLPBYTE pData=NULL;\r\n\r\n\tswitch(pArgInf[2].m_dtDataType)\r\n\t{\r\n\tcase SDT_TEXT:\r\n\t\tdwType = REG_SZ;\r\n\t\tdwLen = mystrlen(pArgInf[2].m_pText)+1;\r\n\t\tpData = (LPBYTE)pArgInf[2].m_pText;\r\n\t\tbreak;\r\n\tcase SDT_BIN:\r\n\t\tdwType = REG_BINARY;\r\n\t\tif(pArgInf[2].m_pBin)\r\n\t\t{\r\n\t\t\tdwLen = pArgInf[2].m_pInt[1];\r\n\t\t\tpData = pArgInf[2].m_pBin+2*sizeof(INT);\r\n\t\t}\r\n\t\tbreak;\r\n\tcase SDT_INT:\r\n\tcase SDT_BYTE:\r\n\tcase SDT_SHORT:\r\n\t\tdwType = REG_DWORD;\r\n\t\tdwLen = sizeof(INT);\r\n\t\tpData = (LPBYTE)&pArgInf[2].m_int;\r\n\t\tbreak;\r\n\tcase SDT_FLOAT:\r\n\t\t{\r\n\t\t\tdwType = REG_DWORD;\r\n\t\t\tdwLen = sizeof(INT);\r\n\t\t\tdwNewVal = (DWORD)pArgInf[2].m_float;\r\n\t\t\t//pArgInf[2].m_dwSubCodeAdr = dwVal;\r\n\t\t\tpData = (LPBYTE)&dwNewVal;\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase SDT_INT64:\r\n\t\t{\r\n\t\t\tdwType = REG_DWORD;\r\n\t\t\tdwLen = sizeof(INT);\r\n\t\t\tdwNewVal = (DWORD)pArgInf[2].m_int64;\r\n\t\t\t//pArgInf[2].m_dwSubCodeAdr = dwVal;\r\n\t\t\tpData = (LPBYTE)&dwNewVal;\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase SDT_DOUBLE:\r\n\t\t{\r\n\t\t\tdwType = REG_DWORD;\r\n\t\t\tdwLen = sizeof(INT);\r\n\t\t\tdwNewVal = (DWORD)pArgInf[2].m_double;\r\n\t\t\t//pArgInf[2].m_dwSubCodeAdr = dwVal;\r\n\t\t\tpData = (LPBYTE)&dwNewVal;\r\n\t\t\tbreak;\r\n\t\t}\r\n\tdefault:\r\n\t\treturn FALSE;\r\n\r\n\t}\r\n\r\n\tHKEY hRootkey = GetRegRootVal(pArgInf[0].m_int);\r\n\tBOOL bRet = FALSE;\r\n\tINT nLen = mystrlen(pArgInf[1].m_pText);\r\n\tif(hRootkey && nLen)\r\n\t{\r\n\t\tHKEY hkey;\r\n\t\tLPSTR pSubkey = new char [nLen +1];\r\n\t\tstrcpy(pSubkey,pArgInf[1].m_pText);\r\n\t\tLPSTR pKeyname = strrchr(pSubkey,'\\\\');\r\n\t\tif(pKeyname)\r\n\t\t{\r\n\t\t\t*pKeyname = 0;\r\n\t\t\tpKeyname++;\r\n\t\t}\r\n\t\tif(RegCreateKeyEx(hRootkey,pSubkey,0,NULL,0,KEY_WRITE,NULL,&hkey,NULL)==ERROR_SUCCESS)\r\n\t\t{\r\n\t\t\tif(RegSetValueEx(hkey,pKeyname,0,dwType,pData,dwLen)==ERROR_SUCCESS)\r\n\t\t\t{\r\n\t\t\t\tbRet = TRUE;\r\n\t\t\t}\r\n\t\t\r\n\r\n\t\t\tRegCloseKey(hkey);\r\n\r\n\r\n\t\t}\r\n\t\tdelete [] pSubkey;\r\n\t}\r\n\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_SeekToBegin.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n//ļд - Ƶļ\r\n/*\r\n    øʽ ߼͡ Ƶļ  вļţ - ϵͳֿ֧->ļд\r\n    ӢƣSeekToBegin\r\n    ڱ򿪵ļУһдλõļסɹ棬ʧܷؼ١Ϊ\r\n    <1>ΪвļšΪͣintļɡļء\r\n*/\r\nLIBAPI(BOOL, krnln_SeekToBegin)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn FALSE;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn FALSE;\r\n\r\n\tBOOL bRet = FALSE;\r\n\r\n\tif(pFile->nType ==1 || pFile->nType == 3)//ļ ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tbRet = SetFilePointer(hFile,0,NULL,FILE_BEGIN)!= HFILE_ERROR;\r\n\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\t\tbRet = (pMemFile->Seek(0,CMyMemFile::begin) != -1);\r\n\r\n\t}\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_SeekToEnd.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n//ļд - Ƶļβ\r\n/*\r\n    øʽ ߼͡ Ƶļβ  вļţ - ϵͳֿ֧->ļд\r\n    ӢƣSeekToEnd\r\n    ڱ򿪵ļУһдλõļβɹ棬ʧܷؼ١Ϊ\r\n    <1>ΪвļšΪͣintļɡļء\r\n*/\r\nLIBAPI(BOOL, krnln_SeekToEnd)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn FALSE;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn FALSE;\r\n\r\n\tBOOL bRet = FALSE;\r\n\r\n\tif(pFile->nType ==1 || pFile->nType == 3)//ļ ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tbRet = SetFilePointer(hFile,0,NULL,FILE_END);\r\n\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\t\tbRet = (pMemFile->Seek(0,CMyMemFile::end) != -1);\r\n\r\n\t}\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_SetAttr.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//̲ - ļ\r\n/*\r\n    øʽ ߼͡ ļ ı Եļƣ Ϊֵ - ϵͳֿ֧->̲\r\n    ӢƣSetAttr\r\n    ΪһļϢɹ棬ʧܷؼ١Ϊ\r\n    <1>ΪԵļơΪıͣtext\r\n    <2>ΪΪֵΪͣintֵΪ³ֵͣ 1#ֻļ 2#ļ 4#ϵͳļ 32#浵ļ ͨЩֵһöļԡ\r\n*/\r\nLIBAPI(BOOL, krnln_SetAttr)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\treturn SetFileAttributes (pArgInf[0].m_pText,pArgInf[1].m_int);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_SetClipBoardText.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ϵͳ - üı\r\n/*\r\n    øʽ ߼͡ üı ı ׼ı - ϵͳֿ֧->ϵͳ\r\n    ӢƣSetClipBoardText\r\n    ָıŵǰ Windows ϵͳȥеԭݱǡɹ棬ʧܷؼ١Ϊ\r\n    <1>Ϊ׼ıΪıͣtext\r\n\r\n*/\r\nLIBAPI(BOOL, krnln_SetClipBoardText)\r\n{\r\n\tBOOL bRet = FALSE;\r\n\tif(ArgInf.m_pText && OpenClipboard(NULL))\r\n\t{\r\n\t\tEmptyClipboard();\r\n\t\tINT nLen = mystrlen(ArgInf.m_pText)+1;\r\n\t\tHGLOBAL hClip = GlobalAlloc(0x42,nLen);\r\n\t\tif(hClip)\r\n\t\t{\r\n\t\t\tLPSTR pStr = (LPSTR)GlobalLock(hClip);\r\n\t\t\tstrcpy(pStr,ArgInf.m_pText);\r\n\t\t\tGlobalUnlock(hClip);\r\n\t\t\tSetClipboardData(CF_TEXT,hClip);\r\n\t\t\tbRet = TRUE;\r\n\t\t}\r\n\t\tCloseClipboard();\r\n\t}\r\n\treturn bRet;\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_SetDiskLabel.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//̲ - ô̾\r\n/*\r\n    øʽ ߼͡ ô̾ ı ַݣı ľı - ϵͳֿ֧->̲\r\n    ӢƣSetDiskLabel\r\n    ̵ָľıɹ棬ʧܷؼ١Ϊ\r\n    <1>ΪַΪıͣtextԱʡԡơABCȣֻȡøıĵһַʡԣĬʹõǰ\r\n    <2>ΪľıΪıͣtext\r\n*/\r\nLIBAPI(BOOL, krnln_SetDiskLabel)\r\n{\r\n\tchar DirName [MAX_PATH];\r\n\tif(ArgInf.m_dtDataType == _SDT_NULL)\r\n\t{\r\n\t\tif(GetCurrentDirectory(MAX_PATH,DirName)==0)\r\n\t\t\treturn FALSE;\r\n\t\tDirName[3]=0;\r\n\r\n\t}\r\n\telse\r\n\t{\r\n\t\tif(mystrlen(ArgInf.m_pText)==0)\r\n\t\t\treturn FALSE;\r\n\r\n\t\tDirName[0]=*ArgInf.m_pText;\r\n\t\tDirName[1]=':';\r\n\t\tDirName[2]='\\\\';\r\n\t\tDirName[3]=0;\r\n\r\n\t}\r\n\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\treturn SetVolumeLabel (DirName,pArgInf[1].m_pText);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_SetIntInsideBin.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n// øʽ ޷ֵ ֽڼ ֽڼ ֽڼ ƫƣ õֵ߼ Ƿתֽݣ - ϵͳֿ֧->ֽڼ\r\n// ӢƣSetIntInsideBin\r\n// ֽڼָλôֵΪ\r\n// <1>ΪֽڼΪֽڼbinṩֽڼ\r\n// <2>ΪƫơΪͣintṩõֵֽڼеƫλá\r\n// <3>ΪõֵΪͣintṩõľֵ\r\n// <4>ΪǷתֽ򡱣Ϊ߼ͣboolԱʡԡָǷֽзת,Ʃʮ0x12345678,תΪ0x78563412. JavaԽݽʱô. ʡԣĬֵΪ.\r\n// \r\n// ϵͳ WindowsLinux\r\nLIBAPI(void, krnln_SetIntInsideBin)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\tLPBYTE pSrc = pArgInf[0].m_pBin;\r\n\tif (!pSrc) return;\r\n\r\n\tint nLen = pArgInf[0].m_pInt[1];\r\n\tint off = pArgInf[1].m_int;\r\n\tif (nLen - off < 4) return;\r\n\r\n\tint nValue = pArgInf[2].m_int;\r\n\tif (pArgInf[3].m_dtDataType != _SDT_NULL && pArgInf[3].m_bool)\r\n\t{\r\n\t\tint nTmp = nValue;\r\n\t\tnValue = nTmp >> 24;\r\n\t\tnValue |= ((nTmp & 0x00FF0000) >> 8);\r\n\t\tnValue |= ((nTmp & 0x0000FF00) << 8);\r\n\t\tnValue |= ((nTmp & 0x000000FF) << 24);\r\n\t}\r\n\t*(LPINT)(pSrc + off + 2*sizeof(int)) = nValue;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_SetKeyText.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ϵͳ - д\r\n/*\r\n    øʽ ߼͡ д ı ļı ƣı ƣݣı дֵݣ - ϵͳֿ֧->ϵͳ\r\n    ӢƣSetKeyText\r\n    ָıдָлɾָڣָļڣԶɹ棬ʧܷؼ١Ϊ\r\n    <1>ΪļΪıͣtextָļƣͨ.iniΪļ׺\r\n    <2>ΪơΪıͣtextдڵơ\r\n    <3>ΪơΪıͣtextԱʡԡֵָдеơֵʡԣɾָڼµ\r\n    <4>ΪдֵΪıͣtextԱʡԡֵָд뵽ָеıֵʡԣɾָ\r\n*/\r\nLIBAPI(BOOL, krnln_SetKeyText)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\treturn WritePrivateProfileString(pArgInf[1].m_pText, pArgInf[2].m_pText, pArgInf[3].m_pText, pArgInf[0].m_pText);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_SetSysTime.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n#include <oleauto.h>\r\n#pragma comment(lib, \"OleAut32.lib\")\r\n\r\n//ʱ - ʱ\r\n/*\r\n    øʽ ߼͡ ʱ ʱ õʱ䣩 - ϵͳֿ֧->ʱ\r\n    ӢƣSetSysTime\r\n    õǰϵͳڼʱ䡣ɹ棬ʧܷؼ١Ϊ\r\n    <1>Ϊõʱ䡱Ϊʱͣdate\r\n*/\r\nLIBAPI(BOOL, krnln_SetSysTime)\r\n{\r\n\tSYSTEMTIME now = { 0 };\r\n\tVariantTimeToSystemTime(ArgInf.m_date, &now);\r\n\treturn SetLocalTime(&now);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_SetWaitCursor.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ϵͳ - õȴ\r\n/*\r\n    øʽ ޷ֵ õȴ  - ϵͳֿ֧->ϵͳ\r\n    ӢƣSetWaitCursor\r\n    ״Ϊɳ©ΣڼʱִгǰʾߡΪ\r\n*/\r\nextern HCURSOR hCurOld;\r\n\r\nLIBAPI(void, krnln_SetWaitCursor)\r\n{\r\n\tif(hCurOld==NULL)\r\n\t{\r\n\t\tHCURSOR hCur =  LoadCursor(NULL,IDC_WAIT);\r\n\t\thCurOld = SetCursor(hCur);\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_SortAry.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n// - \r\n/*\r\n    øʽ ޷ֵ  ͨͱ ֵ߼ ǷΪСݣ - ϵͳֿ֧->\r\n    ӢƣSortAry\r\n    ֵָڵԱп򣬲ӰάϢŻظΪ\r\n    <1>ΪֵΪͨͣallṩʱֻṩ顣\r\n    <2>ΪǷΪС󡱣Ϊ߼ͣboolԱʡԡֵΪ棬ΪС󣬷ΪӴСʡԣĬֵΪ档\r\n*/\r\nextern DWORD dwBlackMoonPESizeOfImage;\r\nextern DWORD dwBlackMoonPEAddrrStart;\r\nextern DWORD dwBlackMoonPEAddrrEnd;\r\nextern void GetBlackMoonPESizeOfImage();\r\n\r\nint __cdecl krnl_MACopyConstAry(int a1, void **a2)\r\n{\r\n  int result; // eax@1\r\n  void *v3; // esi@1\r\n  int v4; // eax@2\r\n  int v5; // edx@2\r\n  int v6; // ecx@2\r\n  int v7; // edi@3\r\n  unsigned int v8; // edi@4\r\n  int v9; // eax@4\r\n  char v10; // zf@4\r\n\t\r\n  if(dwBlackMoonPESizeOfImage==0)\r\n\t  GetBlackMoonPESizeOfImage();\r\n\r\n\r\n  v3 = *a2;\r\n  if(dwBlackMoonPEAddrrStart <= (DWORD)v3 && (DWORD)v3 <= dwBlackMoonPEAddrrEnd)\r\n  {\r\n    v5 = *(DWORD *)v3;\r\n    v6 = (int)((char *)v3 + 4);\r\n    v4 = 1;\r\n    if ( *(DWORD *)v3 > 0 )\r\n    {\r\n      do\r\n      {\r\n        v7 = *(DWORD *)v6;\r\n        v6 += 4;\r\n        v4 *= v7;\r\n        --v5;\r\n      }\r\n      while ( v5 );\r\n    }\r\n    v9 = a1 * v4 - (DWORD)v3;\r\n    v10 = v6 + v9 == 0;\r\n    result = v6 + v9;\r\n    v8 = result;\r\n    if ( !v10 )\r\n    {\r\n      result = (int)E_MAlloc_Nzero(result);\r\n      memcpy((void *)result, v3, v8);\r\n      *a2 = (void *)result;\r\n    }\r\n  }\r\n  return result;\r\n}\r\n/*\r\nint __cdecl GetDataTypeType(DWORD a1)\r\n{\r\n  DWORD result; // eax@1\r\n\r\n  result = a1;\r\n  if ( a1 )\r\n  {\r\n    if ( (a1 & 0xC0000000) == 0x80000000 )\r\n      result = 1;\r\n    else\r\n      result = DWORD(((a1 & 0xC0000000) != 0x40000000) + 2);\r\n  }\r\n  return result;\r\n}*/\r\n\r\nint __cdecl IsNumDataType(DWORD a1)\r\n{\r\n  int result; // eax@1\r\n\r\n  result = GetDataTypeType(a1);\r\n  if ( result != 1 || (BYTE)a1 != 1 )\r\n    result = 0;\r\n  return result;\r\n}\r\n\r\nint __cdecl GetSysDataTypeDataSize( int a1)\r\n{\r\n  if ( (DWORD)a1 <= 0x80000101 )\r\n  {\r\n    if ( a1 == -2147483391 )\r\n      return 1;\r\n    switch ( a1 )\r\n    {\r\n      case -2147483645:\r\n      case -2147483640:\r\n        return 8;\r\n      case -2147483646:\r\n      case -2147483644:\r\n      case -2147483643:\r\n      case -2147483642:\r\n        return 4;\r\n      default:\r\n        return 0;\r\n    }\r\n    return 0;\r\n  }\r\n  if ( (unsigned int)a1 <= 0x80000401 )\r\n  {\r\n    if ( a1 != -2147482623 )\r\n    {\r\n      if ( a1 == -2147483135 )\r\n        return 2;\r\n      if ( a1 == -2147482879 )\r\n        return 4;\r\n      return 0;\r\n    }\r\n    return 8;\r\n  }\r\n  if ( a1 == -2147482367 )\r\n    return 4;\r\n  if ( a1 == -2147482111 )\r\n    return 8;\r\n  return 0;\r\n}\r\nDWORD s_dtDataType=0;\r\nBOOL s_blIsInc =0;\r\nLPBYTE GetAryElementInf (void* pAryData, LPINT pnElementCount);\r\nint __cdecl SortCompare(float *a1, unsigned int *a2)\r\n{\r\n  signed int v2; // edi@1\r\n  char v3; // zf@6\r\n  signed int v4; // eax@12\r\n  unsigned int v5; // edx@12\r\n  unsigned int v6; // ecx@12\r\n  unsigned int v7; // esi@12\r\n  char v8; // zf@14\r\n  int result; // eax@31\r\n\r\n  v2 = 1;\r\n  if ( s_dtDataType > 0x80000401 )\r\n  {\r\n    if ( (int)s_dtDataType == -2147482367 )\r\n    {\r\n      if ( *a1 < (double)*(float *)a2 )\r\n      {\r\n        v2 = -1;\r\n        goto LABEL_31;\r\n      }\r\n      if ( *a1 == *(float *)a2 )\r\n        goto LABEL_30;\r\n    }\r\n    else\r\n    {\r\n      if ( (int)s_dtDataType != -2147482111 )\r\n        goto LABEL_30;\r\n      if ( *(double *)a1 < *(double *)a2 )\r\n      {\r\n        v2 = -1;\r\n        goto LABEL_31;\r\n      }\r\n      if ( *(double *)a1 == *(double *)a2 )\r\n        goto LABEL_30;\r\n    }\r\n  }\r\n  else\r\n  {\r\n    if ( (int)s_dtDataType != -2147482623 )\r\n    {\r\n      if ( (int)s_dtDataType == -2147483391 )\r\n      {\r\n        v3 = *(BYTE *)a1 == *(BYTE *)a2;\r\n        if ( *(BYTE *)a1 < *(BYTE *)a2 )\r\n        {\r\n          v2 = -1;\r\n          goto LABEL_31;\r\n        }\r\n      }\r\n      else\r\n      {\r\n        if ((int) s_dtDataType == -2147483135 )\r\n        {\r\n          v3 = *(WORD *)a1 == *(WORD *)a2;\r\n          if ( *(WORD *)a1 < *(WORD *)a2 )\r\n          {\r\n            v2 = -1;\r\n            goto LABEL_31;\r\n          }\r\n        }\r\n        else\r\n        {\r\n          if ((int) s_dtDataType != -2147482879 )\r\n          {\r\nLABEL_30:\r\n            v2 = 0;\r\n            goto LABEL_31;\r\n          }\r\n          v3 = *(DWORD *)a1 == *a2;\r\n          if ( *(DWORD *)a1 < (signed int)*a2 )\r\n          {\r\n            v2 = -1;\r\n            goto LABEL_31;\r\n          }\r\n        }\r\n      }\r\nLABEL_19:\r\n      if ( !v3 )\r\n        goto LABEL_31;\r\n      goto LABEL_30;\r\n    }\r\n    v5 = *(DWORD *)a1;\r\n    v7 = *a2;\r\n    v4 = *((DWORD *)a1 + 1);\r\n    v6 = a2[1];\r\n    if ( v4 > (int)v6 )\r\n    {\r\n      v8 = v5 == v7;\r\n    }\r\n    else\r\n    {\r\n      if ( v4 < (int)v6 || (v8 = v5 == v7, v5 < v7) )\r\n      {\r\n        v2 = -1;\r\n        goto LABEL_31;\r\n      }\r\n    }\r\n    if ( v8 )\r\n    {\r\n      v3 = v4 == (int)v6;\r\n      goto LABEL_19;\r\n    }\r\n  }\r\nLABEL_31:\r\n  result = v2;\r\n  if ( !s_blIsInc )\r\n    result = -v2;\r\n  return result;\r\n}\r\n\r\nLIBAPI(void, krnln_SortAry)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n  void** v3; // esi@1\r\n  int v4; // edi@5\r\n  LPBYTE v5; // eax@5\r\n\r\n  v3 = pArgInf->m_ppAryData;\r\n  s_dtDataType = pArgInf->m_dtDataType;//*(_DWORD *)(NumOfElements + 8);\r\n  if ( IsNumDataType(s_dtDataType) )\r\n  {\r\n    if (pArgInf[1].m_dtDataType !=_SDT_NULL )\r\n      s_blIsInc = pArgInf[1].m_bool;\r\n    else\r\n      s_blIsInc = 1;\r\n    v4 = GetSysDataTypeDataSize((int)s_dtDataType);\r\n    krnl_MACopyConstAry(v4, v3);\r\n\tINT NumOfElements =0;\r\n    v5 = GetAryElementInf(*v3, &NumOfElements);\r\n    qsort(v5, NumOfElements, v4, (int (__cdecl *)(const void *, const void *))SortCompare);\r\n  }\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_SpaceBin.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ֽڼ - ȡհֽڼ\r\n/*\r\n    øʽ ֽڼ ȡհֽڼ  ֽĿ - ϵͳֿ֧->ֽڼ\r\n    ӢƣSpaceBin\r\n    ؾضĿ 0 ֽڵֽڼΪ\r\n    <1>ΪֽĿΪͣint\r\n*/\r\nLIBAPI(void*, krnln_SpaceBin)\r\n{\r\n\tif(ArgInf.m_int <=0)return NULL;\r\n\tLPINT pData = (LPINT)E_MAlloc(ArgInf.m_int+2*sizeof(INT));\r\n\tpData[0]=1;\r\n\tpData[1]=ArgInf.m_int;\r\n\treturn pData;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_SplitBin.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"mem.h\"\r\n#include \"Myfunctions.h\"\r\n//ֽڼ - ָֽڼ\r\n/*\r\n    øʽ ֽڼ页 ָֽڼ ֽڼ ָֽڼֽڼ ָֽڼݣ ҪصֽڼĿݣ - ϵͳֿ֧->ֽڼ\r\n    ӢƣSplitBin\r\n    ָֽڼзָطָһάֽڼ顣Ϊ\r\n    <1>ΪָֽڼΪֽڼbinֵһΪֽڼ򷵻һ飬ûκγԱ顣\r\n    <2>ΪָֽڼΪֽڼbinԱʡԡڱʶֽڼ߽硣ʡԣĬʹֽ 0 Ϊָ\r\n    <3>ΪҪصֽڼĿΪͣintԱʡԡʡԣĬϷеֽڼ\r\n*/\r\nLIBAPI(void*, krnln_SplitBin)\r\n{// ߺ \r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tINT nCount = pArgInf [2].m_dtDataType == _SDT_NULL ? 0x7FFFFFFF : pArgInf [2].m_int;\r\n\tif (nCount <= 0) \r\n\t\treturn E_NULLARRAY();\r\n\t\r\n\tLPBYTE pSrc = pArgInf[0].m_pBin ;\r\n\tif (!pSrc)\r\n\t\treturn E_NULLARRAY();\r\n\tINT nSLen = pArgInf[0].m_pInt[1];\r\n\tif (nSLen <= 0)\r\n\t\treturn E_NULLARRAY();\r\n\tpSrc += 2*sizeof(INT);\r\n\r\n\tLPBYTE pSub = NULL;\r\n\tINT nSubLen = 0;\r\n\tBYTE bMark [] = {0,0};\r\n\tif(pArgInf [1].m_dtDataType == _SDT_NULL)\r\n\t{\r\n\t\tpSub = bMark;\r\n\t\tnSubLen = 1;\r\n\t}\r\n\telse\r\n\t{\r\n\t\tif (pArgInf [1].m_pBin)\r\n\t\t{\r\n\t\t\tpSub = pArgInf [1].m_pBin + 2*sizeof(INT);\r\n\t\t\tnSubLen =  pArgInf [1].m_pInt[1];\r\n\t\t}\r\n\t}\r\n\r\n\tif (nSubLen == 0)\r\n\t\tnCount = -1;//һԱ\r\n\r\n\t// ʼ\r\n\tTBR tbr;\r\n\tINT nPos;\r\n\tINT nSYLen = nSLen;\r\n\tLPBYTE pFirst = pSrc;\r\n\tLPBYTE cp = pSrc;\r\n\tfor (; nCount > 0; nCount--)\r\n\t{\r\n\t\tnPos = myinstring(cp, nSYLen, pSub, nSubLen);\r\n\t\tif (nPos == -1)\r\n\t\t\tbreak;\r\n\t\tcp += nPos;\r\n\t\ttbr.add(pFirst, cp - pFirst);\r\n\t\tcp += nSubLen;\r\n\t\tnSYLen -= nPos + nSubLen;\r\n\t\tpFirst = cp;\r\n\t}\r\n\tLPBYTE pLast = pSrc + nSLen;\r\n\tif (pLast - pFirst > 0 && nCount != 0)\r\n\t\ttbr.add(pFirst, pLast - pFirst);\r\n\t\r\n\t// ݡ\r\n\tnCount = tbr.m_nCount;\r\n\tINT nSize = nCount * sizeof (DWORD);\r\n\tLPBYTE p = (LPBYTE)E_MAlloc_Nzero (sizeof (INT) * 2 + nSize);\r\n\t*(LPINT)p = 1;  // ά\r\n\t*(LPINT)(p + sizeof (INT)) = nCount;\r\n\tLPINT pp = (LPINT)(p + 2*sizeof(INT));\r\n\tfor (int i=0; i < nCount; i++)\r\n\t{\r\n\t\t*pp = (INT)CloneBinData((LPBYTE)(tbr.m_data[i].addr), tbr.m_data[i].len);\r\n\t\tpp++;\r\n\t}\r\n\treturn p;  // 顣\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_StrComp.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ı - ıȽ\r\n/*\r\n    øʽ ͡ ıȽ ı Ƚıһı Ƚı߼ ǷִСд - ϵͳֿ֧->ı\r\n    ӢƣStrComp\r\n    ֵС0ʾıһСı0ʾıһı0ʾıһıȽʱִСдҲʹñȽͬĲΪ\r\n    <1>ΪȽıһΪıͣtext\r\n    <2>ΪȽıΪıͣtext\r\n    <3>ΪǷִСдΪ߼ͣboolʼֵΪ桱ΪִСдΪٲ֡\r\n*/\r\nLIBAPI(int, krnln_StrComp)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[2].m_bool)//ִСд\r\n\t\treturn strcmp(pArgInf[0].m_pText,pArgInf[1].m_pText);\r\n\r\n#if _MSC_VER == 1200\r\n\treturn stricmp(pArgInf[0].m_pText,pArgInf[1].m_pText);\r\n#else\r\n\treturn _stricmp(pArgInf[0].m_pText, pArgInf[1].m_pText);\r\n#endif\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_StrToUTF8.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n// øʽ ֽڼ ıUTF8 ı תı - ϵͳֿ֧->ı\r\n// ӢƣStrToUTF8\r\n// ָıתUTF8ʽ󷵻,עUTF8ıݰַ.Ϊ\r\n// <1>ΪתıΪıͣtextṩתUTF8ʽı\r\n// \r\n// ϵͳ WindowsLinux\r\nLIBAPI(void*, krnln_StrToUTF8)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tchar* pSrc = pArgInf[0].m_pText;\r\n\tif (!pSrc || !*pSrc) return NULL;\r\n\r\n\t//ȽASCIIתUNICODE\r\n\tint nNum = MultiByteToWideChar(CP_ACP, 0, pSrc, -1, NULL, 0);\r\n\tif (nNum <=0) return NULL;\r\n\r\n\tWCHAR* wcsUnicode = new WCHAR[nNum];\r\n\tnNum = MultiByteToWideChar(CP_ACP, 0, pSrc, -1, wcsUnicode, nNum);\r\n\tif (nNum <= 0)\r\n\t{\r\n\t\tdelete []wcsUnicode;\r\n\t\treturn NULL;\r\n\t}\r\n\twcsUnicode[nNum - 1] = 0;\r\n\r\n\t//UNICODEתUTF8\r\n\tnNum = WideCharToMultiByte(CP_UTF8, 0, wcsUnicode, -1, NULL, 0, NULL, NULL);\r\n\tpSrc = NULL;\r\n\tif (nNum > 0)\r\n\t{\r\n\t\tpSrc = (char*)E_MAlloc_Nzero(nNum + 2*sizeof(int));\r\n\t\tif (pSrc)\r\n\t\t{\r\n\t\t\t*(LPINT)pSrc = 1;\r\n\t\t\tchar* pDes = pSrc + 2*sizeof(int);\r\n\t\t\tnNum = WideCharToMultiByte(CP_UTF8, 0, wcsUnicode, -1, pDes, nNum, NULL, NULL);\r\n\t\t\t*(LPINT)(pSrc + sizeof(int)) = nNum - 1; // ȥβ'\\0' Աһ\r\n\t\t}\r\n\t}\r\n\tdelete []wcsUnicode;\r\n\treturn pSrc;\r\n}\r\n\r\n//    øʽ ֽڼ ıUTF16 ı תı - ϵͳֿ֧->ı\r\n//    ӢƣStrToUTF16\r\n//    ָıתUTF16ʽ󷵻,עUTF16ıݰַ.Ϊ\r\n//    <1>ΪתıΪıͣtextṩתUTF16ʽı\r\n//\r\n//    ϵͳ Windows\r\nLIBAPI(void*, krnln_fnStrToUTF16)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tchar* pSrc = pArgInf[0].m_pText;\r\n\tif (!pSrc || !*pSrc) return NULL;\r\n\t\r\n\t//ȽASCIIתUNICODE\r\n\tint nNum = MultiByteToWideChar(CP_ACP, 0, pSrc, -1, NULL, 0);\r\n\tif (nNum <=0) return NULL;\r\n\t\r\n\tWCHAR* wcsUnicode = new WCHAR[nNum];\r\n\tnNum = MultiByteToWideChar(CP_ACP, 0, pSrc, -1, wcsUnicode, nNum);\r\n\tif (nNum <= 0)\r\n\t{\r\n\t\tdelete []wcsUnicode;\r\n\t\treturn NULL;\r\n\t}\r\n\twcsUnicode[nNum - 1] = 0;\r\n\t\r\n\t//UNICODEתUTF8\r\n\tnNum = WideCharToMultiByte(CP_UTF8, 0, wcsUnicode, -1, NULL, 0, NULL, NULL);\r\n\tif (nNum <= 0)\r\n\t{\r\n\t\tdelete []wcsUnicode;\r\n\t\treturn NULL;\r\n\t}\r\n\r\n\tchar* pszUtf8 = new char[nNum];\r\n\tnNum = WideCharToMultiByte(CP_UTF8, 0, wcsUnicode, -1, pszUtf8, nNum, NULL, NULL);\r\n\r\n\t//UTF8תUTF16\r\n\tnNum = MultiByteToWideChar(CP_UTF8, 0, pszUtf8, -1, NULL, 0);\r\n\tif (nNum > 0)\r\n\t{\r\n\t\tpSrc = (char*)E_MAlloc_Nzero(nNum * 2 + 2*sizeof(int));\r\n\t\tif (pSrc)\r\n\t\t{\r\n\t\t\t*(LPINT)pSrc = 1;\r\n\t\t\tchar* pDes = pSrc + 2*sizeof(int);\r\n\t\t\tnNum = MultiByteToWideChar(CP_UTF8, 0, pszUtf8, -1, (LPWSTR)pDes, nNum);\r\n\t\t\t*(LPINT)(pSrc + sizeof(int)) = nNum * 2; // β'\\0' Աһ\r\n\t\t}\r\n\t}\r\n\tdelete []wcsUnicode;\r\n\tdelete []pszUtf8;\r\n\treturn pSrc;\r\n}"
  },
  {
    "path": "krnln/krnln_TimeChg.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n\r\n#include <oleauto.h>\r\n#pragma comment(lib, \"OleAut32.lib\")\r\n\r\n//ʱ - ʱ\r\n/*void GetDatePart(DATE dt,INT& nYear,INT& nMonth,INT& nDay)\r\n    øʽ ʱ͡ ʱ ʱ ʱ䣬 Ӳ֣ ֵ - ϵͳֿ֧->ʱ\r\n    ӢƣTimeChg\r\n    һʱ䣬һʱ䱻ϻȥһμıʱЧԶЧʱ䡣Ϊ\r\n    <1>Ϊʱ䡱Ϊʱͣdate\r\n    <2>ΪӲ֡Ϊͣintֵָӻʱһ֣Ϊ³\r\n\t1#ݣ 2#ȣ 3#·ݣ 4#ܣ 5#գ 6#Сʱ 7#ӣ 8#롣\r\n    <3>ΪֵΪͣintڱӲֵӻֵ\r\n*/\r\nLIBAPI(void, krnln_TimeChg)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\tSYSTEMTIME st = {0};\r\n\tVariantTimeToSystemTime(pArgInf[0].m_date, &st);\r\n\r\n\tswitch(pArgInf[1].m_int)\r\n\t{\r\n\tcase 1://#\r\n\t\t{\r\n\t\t\tst.wYear += pArgInf[2].m_int;\r\n\t\t\tif(st.wMonth == 2 && st.wDay == 29)\r\n\t\t\t\tst.wDay = GetDaysOfSpecMonth(st.wYear, 2);\r\n\r\n\t\t\tSystemTimeToVariantTime(&st, &pArgInf[0].m_date);\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 2://#\r\n\t\t{\r\n\t\t\tINT nMonth;\r\n\t\t\tnMonth = st.wMonth + (pArgInf[2].m_int * 3);\r\n\t\t\tif(nMonth>0)\r\n\t\t\t{\r\n\t\t\t\tst.wYear += (nMonth / 12);\r\n\t\t\t\tnMonth %= 12;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tINT decYear = nMonth / 12;\r\n\t\t\t\tif(nMonth % 12 != 0)\r\n\t\t\t\t\tdecYear--;\r\n\t\t\t\tst.wYear += decYear;\r\n\t\t\t\tnMonth = 12 + (nMonth % 12);\r\n\t\t\t}\r\n\t\t\tst.wMonth = nMonth;\r\n\r\n\t\t\tINT nMaxDay = GetDaysOfSpecMonth(st.wYear, nMonth);\r\n\t\t\tif(st.wDay > nMaxDay)\r\n\t\t\t\tst.wDay = nMaxDay;\r\n\r\n\t\t\tSystemTimeToVariantTime(&st, &pArgInf[0].m_date);\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 3://#·\r\n\t\t{\r\n\t\t\tINT nMonth;\r\n\r\n\t\t\tnMonth = st.wMonth + pArgInf[2].m_int;\r\n\t\t\tif(nMonth > 0)\r\n\t\t\t{\r\n\t\t\t\tif(nMonth > 12)\r\n\t\t\t\t\tst.wYear += (nMonth / 12);\r\n\t\t\t\tnMonth %= 12;\r\n\t\t\t\tif(nMonth == 0)\r\n\t\t\t\t\tnMonth = 12;\r\n\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tINT decYear = nMonth / 12;\r\n\t\t\t\tif(nMonth % 12 !=0 || nMonth ==0)\r\n\t\t\t\t\tdecYear--;\r\n\t\t\t\tst.wYear += decYear;\r\n\t\t\t\tnMonth = 12 + (nMonth % 12);\r\n\t\t\t}\r\n\t\t\tst.wMonth = nMonth;\r\n\r\n\t\t\tINT nMaxDay = GetDaysOfSpecMonth(st.wYear, nMonth);\r\n\t\t\tif(st.wDay > nMaxDay)\r\n\t\t\t\tst.wDay = nMaxDay;\r\n\t\t\t\r\n\t\t\tSystemTimeToVariantTime(&st, &pArgInf[0].m_date);\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 4://#\r\n\t\t{\r\n\t\t\tDATE objDate;\r\n\t\t\tDATE dt = modf(pArgInf[0].m_date, &objDate);\r\n\t\t\tobjDate += (7 * pArgInf[2].m_int);\r\n\t\t\tpArgInf[0].m_date = makedb(objDate, dt);\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 5://#\r\n\t\t{\r\n\t\t\tDATE objDate;\r\n\t\t\tDATE dt = modf(pArgInf[0].m_date, &objDate);\r\n\t\t\tobjDate += pArgInf[2].m_int;\r\n\t\t\tpArgInf[0].m_date = makedb(objDate, dt);\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 6://#Сʱ\r\n\t\t{\r\n\t\t\tSystemTimeToVariantTime(&st, &pArgInf[0].m_date); //ֹʱ侫ԽԽ\r\n\t\t\tpArgInf[0].m_date = toMyDate(pArgInf[0].m_date);\r\n\t\t\tpArgInf[0].m_date += double(pArgInf[2].m_int) / 24.0;\r\n\t\t\tpArgInf[0].m_date = toEDate(pArgInf[0].m_date);\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 7://#\r\n\t\t{\r\n\t\t\tSystemTimeToVariantTime(&st, &pArgInf[0].m_date); //ֹʱ侫ԽԽ\r\n\t\t\tpArgInf[0].m_date = toMyDate(pArgInf[0].m_date);\r\n\t\t\tpArgInf[0].m_date += double(pArgInf[2].m_int) / 1440.0;\r\n\t\t\tpArgInf[0].m_date = toEDate(pArgInf[0].m_date);\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 8://#롣\r\n\t\t{\r\n\t\t\tSystemTimeToVariantTime(&st, &pArgInf[0].m_date); //ֹʱ侫ԽԽ\r\n\t\t\tpArgInf[0].m_date = toMyDate(pArgInf[0].m_date);\r\n\t\t\tpArgInf[0].m_date += double(pArgInf[2].m_int) / 86400.0;\r\n\t\t\tpArgInf[0].m_date = toEDate(pArgInf[0].m_date);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\t__asm{\r\n\t\tmov eax, ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx, ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_TimeDiff.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n\r\n//ʱ - ȡʱ\r\n/*\r\n    øʽ ˫С͡ ȡʱ ʱ ʱ1ʱ ʱ2 ȡ֣ - ϵͳֿ֧->ʱ\r\n    ӢƣTimeDiff\r\n    һֵʾʱ1ȥʱ2֮ļĿע⣺ÿΪһ졣Ϊ\r\n    <1>Ϊʱ1Ϊʱͣdate\r\n    <2>Ϊʱ2Ϊʱͣdate\r\n    <3>Ϊȡ֡ΪͣintֵָȡʱĵλΪ³ 1#ݣ 2#ȣ 3#·ݣ 4#ܣ 5#գ 6#Сʱ 7#ӣ 8#롣\r\n*/\r\n\r\n//ʼڶ\r\n//ʼ 18991230 ֵΪ0, Ϊһ()\r\n//-13-7 ǵ-1\r\n//-60 ǵ0\r\n//17 ǵ1\r\ndouble GetWeekDayNum(DATE dt)\r\n{\r\n\tINT nRet;\r\n\tif ((INT)dt > 0) {\r\n\t\tnRet = ((INT)dt + 6) / 7;\r\n\t}\r\n\telse {\r\n\t\tnRet = (INT)dt / 7;\r\n\t}\r\n\treturn (double)nRet;\r\n}\r\n\r\nLIBAPI(void, krnln_TimeDiff)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\r\n\tswitch(pArgInf[2].m_int)\r\n\t{\r\n\tcase 1://#\r\n\t\t{\r\n\t\t\tINT nYear, nMonth, nDay;\r\n\t\t\tINT nYear1, nMonth1, nDay1;\r\n\t\t\tGetDatePart(pArgInf[0].m_date, nYear, nMonth, nDay);\r\n\t\t\tGetDatePart(pArgInf[1].m_date, nYear1, nMonth1, nDay1);\r\n\t\t\tpArgInf[0].m_date = nYear - nYear1;\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 2://#\r\n\t\t{\r\n\t\t\tINT nYear, nMonth, nDay;\r\n\t\t\tINT nYear1, nMonth1, nDay1;\r\n\t\t\tGetDatePart(pArgInf[0].m_date, nYear, nMonth, nDay);\r\n\t\t\tGetDatePart(pArgInf[1].m_date, nYear1, nMonth1, nDay1);\r\n\t\t\tpArgInf[0].m_date = (nYear - nYear1) * 4 + ((nMonth - 1) / 3) - ((nMonth1 - 1) / 3);\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 3://#·\r\n\t\t{\r\n\t\t\tINT nYear, nMonth, nDay;\r\n\t\t\tINT nYear1, nMonth1, nDay1;\r\n\t\t\tGetDatePart(pArgInf[0].m_date, nYear, nMonth, nDay);\r\n\t\t\tGetDatePart(pArgInf[1].m_date, nYear1, nMonth1, nDay1);\r\n\t\t\tpArgInf[0].m_date = (nYear - nYear1) * 12 - nMonth1 + nMonth;\r\n \t\t\tbreak;\r\n\t\t}\r\n\tcase 4://#\r\n\t\t{\r\n\t\t\tDATE objDate, objDate1;\r\n\t\t\tDATE dt = modf(pArgInf[0].m_date, &objDate);\r\n\t\t\tdt = modf(pArgInf[1].m_date, &objDate1);\r\n\r\n\t\t\tpArgInf[0].m_date = GetWeekDayNum(objDate) - GetWeekDayNum(objDate1);\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 5://#\r\n\t\t{\r\n\t\t\tDATE objDate = toMyDate(pArgInf[0].m_date) - toMyDate(pArgInf[1].m_date);\r\n\t\t\tpArgInf[0].m_date = objDate;\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 6://#Сʱ\r\n\t\t{\r\n\t\t\tDATE objDate = toMyDate(pArgInf[0].m_date) - toMyDate(pArgInf[1].m_date);\r\n\t\t\tmodf(objDate * 24.0 + 0.000005787037037037037, &pArgInf[0].m_date);\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 7://#\r\n\t\t{\r\n\t\t\tDATE objDate = toMyDate(pArgInf[0].m_date) - toMyDate(pArgInf[1].m_date);\r\n\t\t\tmodf(objDate * 1440.0 + 0.000005787037037037037, &pArgInf[0].m_date);\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 8://#롣\r\n\t\t{\r\n\t\t\tDATE objDate = toMyDate(pArgInf[0].m_date) - toMyDate(pArgInf[1].m_date);\r\n\t\t\tmodf(objDate * 86400.0 + 0.000005787037037037037, &pArgInf[0].m_date);\r\n\t\t\tbreak;\r\n\t\t}\r\n\tdefault:\r\n\t\tpArgInf[0].m_double = 0;\r\n\r\n\t}\r\n\t__asm{\r\n\t\tmov eax, ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx, ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_TimePart.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n//ʱ - ȡʱ䲿\r\n/*\r\n    øʽ ͡ ȡʱ䲿 ʱ ȡ䲿ֵʱ䣬 ȡʱ䲿֣ - ϵͳֿ֧->ʱ\r\n    ӢƣTimePart\r\n    һ֪ʱֵָΪ\r\n    <1>Ϊȡ䲿ֵʱ䡱Ϊʱͣdate\r\n    <2>Ϊȡʱ䲿֡ΪͣintֵΪ³\r\n\t1#ݣ 2#ȣ 3#·ݣ 4# 5#գ 6#Сʱ 7#ӣ 8#룻 9#ڼ 10#У 1 ʼ\r\n*/\r\nINT GetDaysFromYear(DATE date)\r\n{\r\n\tINT nYear, nMonth, nDay;\r\n\tGetDatePart(date, nYear, nMonth, nDay);\r\n\tINT nCountDay = nDay;\r\n\tfor(INT i = 1; i < nMonth; i++)\r\n\t\tnCountDay += GetDaysOfSpecMonth(nYear, i);\r\n\treturn nCountDay;\r\n}\r\n\r\nLIBAPI(int, krnln_TimePart)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tINT nRet = 0;\r\n\tswitch(pArgInf[1].m_int)\r\n\t{\r\n\tcase 1://#\r\n\t\t{\r\n\t\t\tINT nYear, nMonth, nDay;\r\n\t\t\tGetDatePart(pArgInf[0].m_date, nYear, nMonth, nDay);\r\n\t\t\tnRet = nYear;\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 2://#\r\n\t\t{\r\n\t\t\tINT nYear, nMonth, nDay;\r\n\t\t\tGetDatePart(pArgInf[0].m_date, nYear, nMonth, nDay);\r\n\t\t\tnRet = nMonth / 3;\r\n\t\t\tif(nMonth % 3) nRet++;\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 3://#·\r\n\t\t{\r\n\t\t\tINT nYear, nMonth, nDay;\r\n\t\t\tGetDatePart(pArgInf[0].m_date, nYear, nMonth, nDay);\r\n\t\t\tnRet = nMonth;\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 4://#\r\n\t\t{\r\n\t\t\tINT nCountDay = GetDaysFromYear(pArgInf[0].m_date);\r\n\t\t\tnRet = nCountDay / 7;\r\n\t\t\tif(nCountDay % 7) nRet++;\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 5://#\r\n\t\t{\r\n\t\t\tINT nYear, nMonth, nDay;\r\n\t\t\tGetDatePart(pArgInf[0].m_date, nYear, nMonth, nDay);\r\n\t\t\tnRet = nDay;\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 6://#Сʱ\r\n\t\t{\r\n\t\t\tINT nHour, nMinute, nSecond;\r\n\t\t\tGetTimePart(pArgInf[0].m_date, nHour, nMinute, nSecond);\r\n\t\t\tnRet = nHour;\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 7://#\r\n\t\t{\r\n\t\t\tINT nHour, nMinute, nSecond;\r\n\t\t\tGetTimePart(pArgInf[0].m_date, nHour, nMinute, nSecond);\r\n\t\t\tnRet = nMinute;\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 8://#롣\r\n\t\t{\r\n\t\t\tINT nHour, nMinute, nSecond;\r\n\t\t\tGetTimePart(pArgInf[0].m_date, nHour, nMinute, nSecond);\r\n\t\t\tnRet = nSecond;\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 9://#ڼ\r\n\t\t{\r\n\t\t\tnRet = GetWeekDay(pArgInf[0].m_date);\r\n\t\t\tbreak;\r\n\t\t}\r\n\tcase 10://#\r\n\t\t{\r\n\t\t\tnRet = GetDaysFromYear(pArgInf[0].m_date);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn nRet ;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_TimeToText.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <stdio.h>\r\n#include <math.h>\r\n#include \"Myfunctions.h\"\r\n\r\n//ʱ - ʱ䵽ı\r\n/*\r\n    øʽ ı͡ ʱ䵽ı ʱ תıʱ䣬 ת֣ݣ - ϵͳֿ֧->ʱ\r\n    ӢƣTimeToText\r\n    ָʱתΪıءΪ\r\n    <1>Ϊתıʱ䡱Ϊʱͣdate\r\n    <2>Ϊת֡ΪͣintԱʡԡֵΪ³\r\n\t1#ȫת 2#ڲ֣ 3#ʱ䲿֡ʡ˱ĬΪ#ȫת\r\n*/\r\nLIBAPI(char*, krnln_TimeToText)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tchar str[128];\r\n\tif(pArgInf[1].m_int==2)\r\n\t{\r\n\t\tDateTimeFormat(str,ArgInf.m_date,TRUE);\r\n\r\n\t}else if(pArgInf[1].m_int==3)\r\n\t{\r\n\t\tINT nHour, nMinute, nSecond;\r\n\t\tGetTimePart(ArgInf.m_date, nHour, nMinute, nSecond);\r\n\t\tsprintf(str,\"%dʱ%d%d\",nHour, nMinute, nSecond);\r\n\r\n\t}else{\r\n\t\tDateTimeFormat(str, ArgInf.m_date);\r\n\t}\r\n\tINT nLen = mystrlen(str);\r\n\tchar* pText = (char*)E_MAlloc_Nzero(nLen+1);\r\n\tstrcpy(pText,str);\r\n\treturn pText;\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ToBin.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n//ֽڼ - ֽڼ\r\n/*\r\n    øʽ ֽڼ ֽڼ ͨ/ תΪֽڼݣ - ϵͳֿ֧->ֽڼ\r\n    ӢƣToBin\r\n    ָתΪֽڼ󷵻תΪ\r\n    <1>ΪתΪֽڼݡΪͨͣallṩʱͬʱṩݡֵֻΪݻֵ顣\r\n*/\r\n        // \r\nLPBYTE GetMDataPtr (PMDATA_INF pInf, LPINT pnDataSize)\r\n{\r\n//\tASSERT (GetDataTypeType (pInf->m_dtDataType) == DTT_IS_SYS_DATA_TYPE);\r\n\t\r\n\tswitch (pInf->m_dtDataType)\r\n\t{\r\n\tcase SDT_BYTE:\r\n\t\t*pnDataSize = sizeof (BYTE);\r\n\t\treturn (LPBYTE)&pInf->m_byte;\r\n\tcase SDT_SHORT:\r\n\t\t*pnDataSize = sizeof (SHORT);\r\n\t\treturn (LPBYTE)&pInf->m_short;\r\n\tcase SDT_INT:\r\n\t\t*pnDataSize = sizeof (INT);\r\n\t\treturn (LPBYTE)&pInf->m_int;\r\n\tcase SDT_INT64:\r\n\t\t*pnDataSize = sizeof (INT64);\r\n\t\treturn (LPBYTE)&pInf->m_int64;\r\n\tcase SDT_FLOAT:\r\n\t\t*pnDataSize = sizeof (FLOAT);\r\n\t\treturn (LPBYTE)&pInf->m_float;\r\n\tcase SDT_DOUBLE:\r\n\t\t*pnDataSize = sizeof (DOUBLE);\r\n\t\treturn (LPBYTE)&pInf->m_double;\r\n\tcase SDT_BOOL:\r\n\t\t*pnDataSize = sizeof (BOOL);\r\n\t\treturn (LPBYTE)&pInf->m_bool;\r\n\tcase SDT_DATE_TIME:\r\n\t\t*pnDataSize = sizeof (DATE);\r\n\t\treturn (LPBYTE)&pInf->m_date;\r\n\tcase SDT_SUB_PTR:\r\n\t\t*pnDataSize = sizeof (DWORD);\r\n\t\treturn (LPBYTE)&pInf->m_dwSubCodeAdr;\r\n\tcase SDT_TEXT:\r\n\t\t*pnDataSize = mystrlen (pInf->m_pText) + 1;\r\n\t\treturn (LPBYTE)pInf->m_pText;\r\n\tcase SDT_BIN: {\r\n\t\tLPBYTE pBinData = pInf->m_pBin + sizeof (INT) * 2;\r\n\t\t*pnDataSize = *(LPINT)(pBinData - sizeof (INT));\r\n\t\treturn pBinData; }\r\n\tdefault:\r\n//\t\tASSERT (FALSE);\r\n\t\treturn NULL;\r\n\t}\r\n}\r\nint __cdecl IsNumDataType2(DWORD a1)\r\n{\r\n  int result; // eax@1\r\n\r\n  result = GetDataTypeType(a1);\r\n  if ( result != 1 || (BYTE)a1 != 1 )\r\n    result = 0;\r\n  return result;\r\n}\r\nint __cdecl GetSysDataTypeDataSize2( int a1)\r\n{\r\n  if ( (DWORD)a1 <= 0x80000101 )\r\n  {\r\n    if ( a1 == -2147483391 )\r\n      return 1;\r\n    switch ( a1 )\r\n    {\r\n      case -2147483645:\r\n      case -2147483640:\r\n        return 8;\r\n      case -2147483646:\r\n      case -2147483644:\r\n      case -2147483643:\r\n      case -2147483642:\r\n        return 4;\r\n      default:\r\n        return 0;\r\n    }\r\n    return 0;\r\n  }\r\n  if ( (unsigned int)a1 <= 0x80000401 )\r\n  {\r\n    if ( a1 != -2147482623 )\r\n    {\r\n      if ( a1 == -2147483135 )\r\n        return 2;\r\n      if ( a1 == -2147482879 )\r\n        return 4;\r\n      return 0;\r\n    }\r\n    return 8;\r\n  }\r\n  if ( a1 == -2147482367 )\r\n    return 4;\r\n  if ( a1 == -2147482111 )\r\n    return 8;\r\n  return 0;\r\n}\r\n\r\nLIBAPI(void*, krnln_ToBin)\r\n{\r\n            //!!! ھ AS_RECEIVE_VAR_OR_ARRAY  AS_RECEIVE_ALL_TYPE_DATA ־Ĳ\r\n            // пܴDT_IS_ARY־·ʽͺ־\r\n\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tDATA_TYPE dtDataType = pArgInf [0].m_dtDataType & ~DT_IS_ARY;\r\n\tBOOL blIsAry = (pArgInf [0].m_dtDataType & DT_IS_ARY) != 0;\r\n\t\r\n\tLPBYTE pData;\r\n\tINT nDataSize;\r\n\tif (IsNumDataType2(dtDataType) && blIsAry == TRUE)\r\n\t{\r\n\t\tDWORD dwSize;\r\n\t\tpData = (LPBYTE)GetAryElementInf(pArgInf [0].m_pAryData,dwSize);\r\n\t\tnDataSize = dwSize * GetSysDataTypeDataSize2(dtDataType);\r\n\t}\r\n\telse if (blIsAry == TRUE || GetDataTypeType (dtDataType) != DTT_IS_SYS_DATA_TYPE)\r\n\t{\r\n\t\treturn NULL;\r\n\t}\r\n\telse if (dtDataType == SDT_TEXT)\r\n\t{\r\n\t\tpData = (LPBYTE)pArgInf->m_pText;\r\n\t\tnDataSize = mystrlen (pArgInf->m_pText);\r\n\t}\r\n\telse\r\n\t\tpData = GetMDataPtr (pArgInf, &nDataSize);\r\n\t\r\n\treturn CloneBinData (pData, nDataSize);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ToByte.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ֵת - ֽ\r\n/*\r\n    øʽ ֽ͡ ֽ ͨ תıֵ - ϵͳֿ֧->ֵת\r\n    ӢƣToByte\r\n    ذıڵֵֽıһʵ͵ֵ֧ȫдʽҲ͵תΪֽڡΪ\r\n    <1>ΪתıֵΪͨͣall\r\n*/\r\nLIBAPI(BYTE, krnln_ToByte)\r\n{\r\n\tBYTE nRet=0;\r\n\tswitch(ArgInf.m_dtDataType)\r\n\t{\r\n\tcase SDT_TEXT:\r\n\t\t{\r\n\t\t\tchar* pStr = krnln_BJCase(1,ArgInf);\r\n\t\t\tif(pStr)\r\n\t\t\t{\r\n\t\t\t\tnRet = atoi(pStr);\r\n\t\t\t\tE_MFree(pStr);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tnRet = 0;\r\n\t\t}\r\n\t\tbreak;\r\n\tcase SDT_BYTE:\r\n\tcase SDT_BOOL:\r\n\t\tnRet = ArgInf.m_byte;\r\n\t\tbreak;\r\n\tcase SDT_SHORT:\r\n\t\tnRet = (BYTE)ArgInf.m_short;\r\n\t\tbreak;\r\n\tcase SDT_INT:\r\n\t\tnRet = ArgInf.m_int;\r\n\t\tbreak;\r\n\tcase SDT_FLOAT:\r\n\t\tnRet = (BYTE)ArgInf.m_float;\r\n\t\tbreak;\r\n\tcase SDT_DOUBLE:\r\n\t\tnRet = (BYTE)ArgInf.m_double;\r\n\t\tbreak;\r\n\tcase SDT_INT64:\r\n\t\tnRet = (BYTE)ArgInf.m_int64;\r\n\t\tbreak;\r\n\tdefault:\r\n\t\tnRet = ArgInf.m_byte;\r\n\t\tbreak;\r\n\r\n\t}\r\n\treturn nRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ToFloat.cpp",
    "content": "#include \"stdafx.h\"\r\n//ֵת - С\r\n/*\r\n    øʽ С͡ С ͨ תıֵ - ϵͳֿ֧->ֵת\r\n    ӢƣToFloat\r\n    ذıڵСֵıһʵ͵ֵ֧ȫдʽҲ͵תΪСΪ\r\n    <1>ΪתıֵΪͨͣall\r\n*/\r\nLIBAPI(void, krnln_ToFloat)\r\n{\r\n\tfloat nRet=0;\r\n\tswitch(ArgInf.m_dtDataType)\r\n\t{\r\n\tcase SDT_TEXT:\r\n\t\t{\r\n\t\t\tchar* pStr = krnln_BJCase(1,ArgInf);\r\n\t\t\tif(pStr)\r\n\t\t\t{\r\n\t\t\t\tnRet = (float)atof(pStr);\r\n\t\t\t\tE_MFree(pStr);\r\n\t\t\t}\r\n\t\t}\r\n\t\tbreak;\r\n\tcase SDT_BYTE:\r\n\t\tnRet = ArgInf.m_byte;\r\n\t\tbreak;\r\n\tcase SDT_SHORT:\r\n\t\tnRet = ArgInf.m_short;\r\n\t\tbreak;\r\n\tcase SDT_INT:\r\n\tcase SDT_SUB_PTR:\r\n\tcase SDT_BOOL:\r\n\t\tnRet = (float)ArgInf.m_int;\r\n\t\tbreak;\r\n\tcase SDT_FLOAT:\r\n\t\tnRet = ArgInf.m_float;\r\n\t\tbreak;\r\n\tcase SDT_DOUBLE:\r\n\t\tnRet = (float)ArgInf.m_double;\r\n\t\tbreak;\r\n\tcase SDT_INT64:\r\n\t\tnRet = (float)ArgInf.m_int64;\r\n\t\tbreak;\r\n\tdefault:\r\n\t\tbreak;\r\n\r\n\t}\r\n\t_asm mov eax, nRet;\r\n\t_asm xor edx, edx;\r\n\t//return nRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ToInt.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ֵת - \r\n/*\r\n    øʽ ͡  ͨ תıֵ - ϵͳֿ֧->ֵת\r\n    ӢƣToInt\r\n    ذıڵֵıһʵ͵ֵ֧ȫдʽҲ͵תΪΪ\r\n    <1>ΪתıֵΪͨͣall\r\n*/\r\nLIBAPI(INT, krnln_ToInt)\r\n{\r\n\tINT nRet=0;\r\n\tswitch(ArgInf.m_dtDataType)\r\n\t{\r\n\tcase SDT_TEXT:\r\n\t\t{\r\n\t\t\tchar* pStr = krnln_BJCase(1,ArgInf);\r\n\t\t\tif(pStr)\r\n\t\t\t{\r\n\t\t\t\tnRet = atoi(pStr);\r\n\t\t\t\tE_MFree(pStr);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tnRet = 0;\r\n\t\t}\r\n\t\tbreak;\r\n\tcase SDT_BYTE:\r\n\t\tnRet = ArgInf.m_byte;\r\n\t\tbreak;\r\n\tcase SDT_SHORT:\r\n\t\tnRet = ArgInf.m_short;\r\n\t\tbreak;\r\n\tcase SDT_INT:\r\n\tcase SDT_SUB_PTR:\r\n\tcase SDT_BOOL:\r\n\t\tnRet = ArgInf.m_int;\r\n\t\tbreak;\r\n\tcase SDT_FLOAT:\r\n\t\tnRet = (INT)ArgInf.m_float;\r\n\t\tbreak;\r\n\tcase SDT_DOUBLE:\r\n\t\tnRet = (INT)ArgInf.m_double;\r\n\t\tbreak;\r\n\tcase SDT_INT64:\r\n\t\tnRet = (INT)ArgInf.m_int64;\r\n\t\tbreak;\r\n\tdefault:\r\n\t\tbreak;\r\n\r\n\t}\r\n\treturn nRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ToLong.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ֵת - \r\n/*\r\n    øʽ ͡  ͨ תıֵ - ϵͳֿ֧->ֵת\r\n    ӢƣToLong\r\n    ذıڵĳֵıһʵ͵ֵ֧ȫдʽҲ͵תΪΪ\r\n    <1>ΪתıֵΪͨͣall\r\n*/\r\nLIBAPI(void, krnln_ToLong)\r\n{\r\n\tINT64 nRet=0;\r\n\tswitch(ArgInf.m_dtDataType)\r\n\t{\r\n\tcase SDT_BYTE:\r\n\tcase SDT_BOOL:\r\n\t\tnRet = ArgInf.m_byte;\r\n\t\tbreak;\r\n\tcase SDT_SHORT:\r\n\t\tnRet = ArgInf.m_short;\r\n\t\tbreak;\r\n\tcase SDT_TEXT:\r\n\t\t{\r\n\t\t\tchar* pStr = krnln_BJCase(1,ArgInf);\r\n\t\t\tif(pStr)\r\n\t\t\t{\r\n\t\t\t\tnRet = _atoi64(pStr);\r\n\t\t\t\tArgInf.m_int64 = nRet;\r\n\t\t\t\tE_MFree(pStr);\r\n\t\t\t}\r\n\t\t}\r\n\t\tbreak;\r\n\tcase SDT_FLOAT:\r\n\t\tnRet = (INT64)ArgInf.m_float;\r\n\t\tbreak;\r\n\tcase SDT_DOUBLE:\r\n\t\tnRet = (INT64)ArgInf.m_double;\r\n\t\tbreak;\r\n\tcase SDT_SUB_PTR:\r\n\tcase SDT_INT:\r\n\t\tnRet = ArgInf.m_int;\r\n\t\tbreak;\r\n\tcase SDT_INT64:\r\n\t\tnRet = ArgInf.m_int64;\r\n\t\tbreak;\r\n\tdefault:\r\n\t\tbreak;\r\n\t}\r\n\tArgInf.m_int64 = nRet;\r\n\t__asm{\r\n\t\tmov eax, ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx, ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ToShort.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ֵת - \r\n/*\r\n    øʽ ͡  ͨ תıֵ - ϵͳֿ֧->ֵת\r\n    ӢƣToShort\r\n    ذıڵĶֵıһʵ͵ֵ֧ȫдʽҲ͵תΪΪ\r\n    <1>ΪתıֵΪͨͣall\r\n*/\r\nLIBAPI(SHORT, krnln_ToShort)\r\n{\r\n\tSHORT nRet=0;\r\n\tswitch(ArgInf.m_dtDataType)\r\n\t{\r\n\tcase SDT_TEXT:\r\n\t\t{\r\n\t\t\tchar* pStr = krnln_BJCase(1,ArgInf);\r\n\t\t\tif(pStr)\r\n\t\t\t{\r\n\t\t\t\tnRet = atoi(pStr);\r\n\t\t\t\tE_MFree(pStr);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tnRet = 0;\r\n\t\t}\r\n\t\tbreak;\r\n\tcase SDT_BYTE:\r\n\t\tnRet = ArgInf.m_byte;\r\n\t\tbreak;\r\n\tcase SDT_SHORT:\r\n\t\tnRet = ArgInf.m_short;\r\n\t\tbreak;\r\n\tcase SDT_INT:\r\n\t\tnRet = ArgInf.m_int;\r\n\t\tbreak;\r\n\tcase SDT_FLOAT:\r\n\t\tnRet = (SHORT)ArgInf.m_float;\r\n\t\tbreak;\r\n\tcase SDT_DOUBLE:\r\n\t\tnRet = (SHORT)ArgInf.m_double;\r\n\t\tbreak;\r\n\tcase SDT_INT64:\r\n\t\tnRet = (SHORT)ArgInf.m_int64;\r\n\t\tbreak;\r\n\tdefault:\r\n\t\tbreak;\r\n\r\n\t}\r\n\treturn nRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ToTime.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n//ʱ - ʱ\r\n/*\r\n    øʽ ʱ͡ ʱ ͨ תı - ϵͳֿ֧->ʱ\r\n    ӢƣToTime\r\n    ָıתΪʱ䲢ءıдʽҪʱֵ²ܽת10011աʱݣֱӷظʱ䡣Ϊ\r\n    <1>ΪתıΪͨͣallıӦ¸ʽ֮һṩݺʱ䲿ֿʡԣ\r\n  11973111512ʱ3025\r\n  21973/11/15 12:30:25\r\n  31973/11/15/12/30/25\r\n  41973/11/15/12:30:25\r\n  51973-11-15-12-30-25\r\n  61973-11-15-12:30:25\r\n  71973.11.15 12:30:25\r\n  819731115123025\r\n*/\r\n//189912300ʱ0000 Ϊ0׼,λΪСֵ\r\nBOOL StrToTime (double& dbDateTime,LPCSTR pStr)\r\n{\r\n\tINT nLen = mystrlen(pStr);\r\n\tif(nLen < 8) return FALSE;\r\n\r\n\tchar* pStrSrc = new char[nLen + 1];\r\n\tstrcpy(pStrSrc,pStr);\r\n\tLPSTR sDtArry[6]={0};\r\n\tLPSTR pStart = pStrSrc;\r\n\tLPSTR pEnd = pStrSrc + nLen;\r\n\tINT nIDX = 0;\r\n\tLPSTR pTemp = pStart;\r\n\tBOOL spliteChn = FALSE;\r\n\tBOOL spliteEng = FALSE;\r\n\tINT spliteChr = 0;\r\n\twhile(pStart < pEnd)\r\n\t{\r\n\t\tif(*pStart < 0)//\r\n\t\t{\r\n\t\t\tif(spliteEng==FALSE && pStart > pStrSrc)//ѾҵһЩ\r\n\t\t\t{\r\n\t\t\t\tif(strncmp(pStart,\"\",2)==0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(nIDX !=0)//겻ǰ˳\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t*pStart = 0;\r\n\t\t\t\t\tpStart+=2;\r\n\t\t\t\t\tsDtArry[0] = pTemp;\r\n\t\t\t\t\tpTemp = pStart;\r\n\t\t\t\t\tnIDX++;//\r\n\t\t\t\t\tspliteChn = TRUE;\r\n\t\t\t\t}else if(strncmp(pStart,\"\",2)==0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(nIDX !=1)//²ǰ˳\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t*pStart = 0;\r\n\t\t\t\t\tpStart+=2;\r\n\t\t\t\t\tsDtArry[1] = pTemp;\r\n\t\t\t\t\tpTemp = pStart;\r\n\t\t\t\t\tnIDX++;//\r\n\t\t\t\t}else if(strncmp(pStart,\"\",2)==0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(nIDX !=2)//ղǰ˳\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t*pStart = 0;\r\n\t\t\t\t\tpStart+=2;\r\n\t\t\t\t\tsDtArry[2] = pTemp;\r\n\t\t\t\t\tpTemp = pStart;\r\n\t\t\t\t\tnIDX++;\r\n\t\t\t\t}else if(strncmp(pStart,\"ʱ\",2)==0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(nIDX !=3)//ղǰ˳\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t*pStart = 0;\r\n\t\t\t\t\tpStart+=2;\r\n\t\t\t\t\tsDtArry[3] = pTemp;\r\n\t\t\t\t\tpTemp = pStart;\r\n\t\t\t\t\tnIDX++;\r\n\t\t\t\t}else if(strncmp(pStart,\"\",2)==0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(nIDX !=4)//ղǰ˳\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t*pStart = 0;\r\n\t\t\t\t\tpStart+=2;\r\n\t\t\t\t\tsDtArry[4] = pTemp;\r\n\t\t\t\t\tpTemp = pStart;\r\n\t\t\t\t\tnIDX++;\r\n\t\t\t\t}else if(strncmp(pStart,\"\",2)==0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(nIDX !=5)//ղǰ˳\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t*pStart = 0;\r\n\t\t\t\t\tpStart+=2;\r\n\t\t\t\t\tsDtArry[5] = pTemp;\r\n\t\t\t\t\tnIDX++;\r\n\t\t\t\t}else\r\n\t\t\t\t\tbreak;\r\n\r\n\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tbreak;//Ƿ\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(48 <= *pStart && *pStart <= 57)//' ַΧ48--57\r\n\t\t\t{\r\n\t\t\t\tpStart++;\r\n\t\t\t\tif(0 == *pStart)//\r\n\t\t\t\t{\r\n\t\t\t\t\tsDtArry[nIDX] = pTemp;\r\n\t\t\t\t\tnIDX++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if(nIDX ==0 && spliteChr == 0)//ȷӢķָ\r\n\t\t\t{\r\n\t\t\t\tif(spliteChn)//ѾǺָʽ\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tif(*pStart =='/' || *pStart =='-' || *pStart =='.')\r\n\t\t\t\t{\r\n\t\t\t\t\tspliteChr = *pStart;\r\n\t\t\t\t\tspliteEng = TRUE;\r\n\t\t\t\t\t*pStart = 0;\r\n\t\t\t\t\tpStart++;\r\n\t\t\t\t\tsDtArry[0] = pTemp;\r\n\t\t\t\t\tpTemp = pStart;\r\n\t\t\t\t\tnIDX++;\r\n\r\n\r\n\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tbreak; //ǺϷָ\r\n\r\n\t\t\t}\r\n\t\t\telse if(nIDX ==3 && spliteChr == 0)//ȷʱָ\r\n\t\t\t{\r\n\t\t\t\tif(spliteChn)//ѾǺָʽ\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tif(*pStart =='/' || *pStart =='-' || *pStart ==':')\r\n\t\t\t\t{\r\n\t\t\t\t\tspliteChr = *pStart;\r\n\t\t\t\t\t*pStart = 0;\r\n\t\t\t\t\tpStart++;\r\n\t\t\t\t\tsDtArry[3] = pTemp;\r\n\t\t\t\t\tpTemp = pStart;\r\n\t\t\t\t\tnIDX++;\r\n\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tbreak; //ǺϷָ\r\n\t\t\t}\r\n\t\t\telse if(nIDX ==2 && (*pStart==' ' || *pStart =='/' || *pStart =='-' || *pStart==0))//ָ\r\n\t\t\t{\r\n\t\t\t\t*pStart = 0;\r\n\t\t\t\tpStart++;\r\n\t\t\t\tsDtArry[2] = pTemp;\r\n\t\t\t\tpTemp = pStart;\r\n\t\t\t\tnIDX++;\r\n\t\t\t\tspliteChr = 0;\r\n\t\t\t}\r\n\t\t\telse if(spliteChr == *pStart)//Ϸָ\r\n\t\t\t{\r\n\t\t\t\t*pStart = 0;\r\n\t\t\t\tpStart++;\r\n\t\t\t\tsDtArry[nIDX] = pTemp;\r\n\t\t\t\tpTemp = pStart;\r\n\t\t\t\tnIDX++;\r\n\t\t\t}else\r\n\t\t\t\tbreak; //ǺϷַ\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tif(pStart >= pEnd)//ȫɨϲŽ,ʽȷ\r\n\t{\r\n\t\tif(nIDX==1)//ȫִʽ\r\n\t\t{\r\n\t\t\tdelete [] pStrSrc;\r\n\t\t\tpStrSrc = new char[256];\r\n\t\t\tmemset(pStrSrc,0,20);\r\n\t\t\tpStart = pStrSrc;\r\n\t\t\tINT nMax = 0;\r\n\t\t\tnIDX = 0;\r\n\r\n\t\t\twhile(nMax < nLen)\r\n\t\t\t{\r\n\t\t\t\tif(nIDX==0)\r\n\t\t\t\t{\r\n\t\t\t\t\tstrncpy(pStart,pStr,4);\r\n\t\t\t\t\tsDtArry[0] = pStart;\r\n\t\t\t\t\tpStart+=5;\r\n\t\t\t\t\tnIDX++;\r\n\t\t\t\t\tnMax +=4;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tstrncpy(pStart,pStr+nMax,2);\r\n\t\t\t\t\tsDtArry[nIDX] = pStart;\r\n\t\t\t\t\tpStart+=3;\r\n\t\t\t\t\tnIDX++;\r\n\t\t\t\t\tnMax +=2;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\r\n\t\t}\r\n\t\telse if(nIDX < 2) //ڲֲȫ\r\n\t\t{\r\n\t\t\tdelete [] pStrSrc;\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\tINT nYear, nMonth, nDay, nHour, nMinute, nSecond;//ʱǷȷ\r\n\t\tnHour = nMinute = nSecond = 0;\r\n\t\tBOOL bError = FALSE;\r\n\t\tfor(INT i=0; i < nIDX;i++)\r\n\t\t{\r\n\t\t\tINT nValue = atoi(sDtArry[i]);\r\n\t\t\tswitch(i)\r\n\t\t\t{\r\n\t\t\tcase 0://\r\n\t\t\t\t\r\n\t\t\t\tif(nValue==0)\r\n\t\t\t\t{\r\n\t\t\t\t\tbError = TRUE;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tnYear = nValue;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 1://\r\n\t\t\t\t\r\n\t\t\t\tif(nValue < 1 || nValue > 12)\r\n\t\t\t\t{\r\n\t\t\t\t\tbError = TRUE;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tnMonth = nValue;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 2://\r\n\t\t\t\t{\r\n\t\t\t\t\tDWORD nMonDay [12] = {31,28,31,30,31,30,31,31,30,31,30,31};\r\n\t\t\t\t\tif((nYear % 400==0) || (nYear % 100 != 0) && (nYear %4 ==0))//\r\n\t\t\t\t\t\tnMonDay [1] = 29; //\t\t\t\t\r\n\t\t\t\t\tif(nValue < 1 || nValue > (INT)(nMonDay [nMonth-1]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbError = TRUE;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnDay = nValue;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\tcase 3://ʱ\r\n\t\t\t\t\r\n\t\t\t\tif(nValue > 23)\r\n\t\t\t\t{\r\n\t\t\t\t\tbError = TRUE;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tnHour = nValue;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 4://\r\n\t\t\t\t\r\n\t\t\t\tif(nValue > 59)\r\n\t\t\t\t{\r\n\t\t\t\t\tbError = TRUE;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tnMinute = nValue;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 5://\r\n\t\t\t\t\r\n\t\t\t\tif(nValue > 59)\r\n\t\t\t\t{\r\n\t\t\t\t\tbError = TRUE;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tnSecond = nValue;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tdelete [] pStrSrc;\r\n\t\tif(bError)\r\n\t\t\treturn FALSE;\r\n\r\n\t\tdbDateTime = GetSpecDateTime(nYear, nMonth, nDay, nHour, nMinute, nSecond);//ʱ\r\n\t\treturn TRUE;\r\n\t}\r\n\r\n\tdelete [] pStrSrc;\r\n\treturn FALSE;\r\n\r\n}\r\n\r\nLIBAPI(void, krnln_ToTime)\r\n{\r\n\r\n\tswitch(ArgInf.m_dtDataType)\r\n\t{\r\n\tcase SDT_TEXT:\r\n\t\t{\r\n\t\t\tdouble dbDateTime;\r\n\t\t\tif(StrToTime(dbDateTime,ArgInf.m_pText)==FALSE)\r\n\t\t\t\tdbDateTime = -657434;//10011\r\n\t\t\tArgInf.m_double = dbDateTime;\r\n\t\t}\r\n\t\tbreak;\r\n\tcase SDT_DATE_TIME:\r\n\t\tbreak;\r\n\tdefault:\r\n\t\tArgInf.m_double = -657434;//10011\r\n\t}\r\n\t__asm{\r\n\t\tmov eax, ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx, ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_TrimAll.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n//ı - ɾȫ\r\n/*\r\n    øʽ ı͡ ɾȫ ı ɾոı - ϵͳֿ֧->ı\r\n    ӢƣTrimAll\r\n    һıаɾȫǻǿոָıΪ\r\n    <1>ΪɾոıΪıͣtext\r\n*/\r\nLIBAPI(char*, krnln_TrimAll)\r\n{// ߺ \r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tchar* pSrc = pArgInf[0].m_pText;\r\n\tregister char *str1 = pSrc;\r\n\tif (!*str1) return NULL;\r\n\r\n\t// ʼ\r\n\tTBR tbr;\r\n\tchar* pFirst = pSrc;\r\n\twhile (1)\r\n\t{\r\n\t\t//׿\r\n\t\twhile ( *str1 )\r\n\t\t{\r\n\t\t\tif (*str1 == ' ')\r\n\t\t\t\tstr1++;\r\n\t\t\telse if (*((unsigned short*)str1) == 0xA1A1)\r\n\t\t\t\tstr1+=2;\r\n\t\t\telse\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tif (!*str1) break;\r\n\t\tpFirst = str1;\r\n\t\tif (*str1 < 0) {\r\n\t\t\tstr1+=2;\r\n\t\t} else {\r\n\t\t\tstr1++;\r\n\t\t}\r\n\t\t//β\r\n\t\twhile ( *str1 )\r\n\t\t{\r\n\t\t\tif (*str1 == ' ')\r\n\t\t\t\tbreak;\r\n\t\t\telse if (*((unsigned short*)str1) == 0xA1A1)\r\n\t\t\t\tbreak;\r\n\t\t\tif (*str1 < 0)\r\n\t\t\t\tstr1+=2;\r\n\t\t\telse\r\n\t\t\t\tstr1++;\r\n\t\t}\r\n\t\tif (str1 - pFirst > 0)\r\n\t\t\ttbr.add(pFirst, str1 - pFirst);\r\n\t}\r\n\treturn tbr.toString();\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_UCase.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ı - д\r\n/*\r\n    øʽ ı͡ д ı 任ı - ϵͳֿ֧->ı\r\n    ӢƣUCase\r\n    ıеСдӢĸ任Ϊдر任ĽıΪ\r\n    <1>Ϊ任ıΪıͣtext\r\n*/\r\nLIBAPI(char*, krnln_UCase)\r\n{// ߺŸ\r\n\tregister char* pSrc = ArgInf.m_pText;\r\n\tUINT nLen = mystrlen(pSrc);\r\n\tif (nLen==0) return NULL;\r\n\tchar *pText = (char*)E_MAlloc_Nzero(nLen+1);\r\n\tregister char* pDes = pText;\r\n\tregister unsigned char* ut = uptable;\r\n\tfor (UINT i=0; i<nLen; i++)\r\n\t{\r\n\t\tif (pSrc[i]<0)\r\n\t\t{\r\n\t\t\t*((short*)(pDes+i)) = *((short*)(pSrc+i));\r\n\t\t\ti++;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tpDes[i] = ut[(unsigned char)(pSrc[i])];\r\n\t\t}\r\n\t}\r\n\tpText[nLen] = '\\0';\r\n\treturn pText;\r\n}\r\n// {// ԭ\r\n// \tUINT nLen = strlen(ArgInf.m_pText);\r\n// \tif(nLen==0)return NULL;\r\n// \tchar *pText = (char*)E_MAlloc(nLen+1);\r\n// \tstrcpy(pText,ArgInf.m_pText);\r\n// \tUINT i=0;\r\n// \twhile(i < nLen)\r\n// \t{\r\n// \t\tif(pText[i]<0)\r\n// \t\t\ti+=2;//\r\n// \t\telse\r\n// \t\t{\r\n// \t\t\tpText[i] = toupper(pText[i]);\r\n// \t\t\ti++;\r\n// \t\t}\r\n// \r\n// \t}\r\n// \treturn pText;\t\r\n// }\r\n"
  },
  {
    "path": "krnln/krnln_UNum.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n#include \"Myfunctions.h\"\r\n\r\n//ֵת - ֵд \r\n/*\r\n    øʽ ı͡ ֵд ˫С תʽֵ߼ ǷתΪ壩 - ϵͳֿ֧->ֵת\r\n    ӢƣUNum\r\n    ֵתΪĴдʽתıΪ\r\n    <1>ΪתʽֵΪ˫Сͣdouble\r\n    <2>ΪǷתΪ塱Ϊ߼ͣboolʼֵΪ١ֵΪ٣תΪ塣\r\n*/\r\nLIBAPI(char*, krnln_UNum)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tdouble dInt;\r\n\tdouble dFloat = modf(pArgInf[0].m_double,&dInt);\r\n\tLPSTR pInt = NULL;\r\n\tLPSTR pFloat = NULL;\r\n\tINT nLen = 3;\r\n\tif(dInt !=0)\r\n\t{\r\n\t\tINT nPre=1;\r\n\t\tpInt = IntNumToChn(dInt,pArgInf[1].m_bool,nPre);\r\n\t\tnLen += mystrlen(pInt);\r\n\t}\r\n\r\n\tif(dFloat !=0)\r\n\t{\r\n\t\tpFloat = FloatNumToChn(dFloat,pArgInf[1].m_bool);\r\n\t\tif(pFloat)\r\n\t\t\tnLen += mystrlen(pFloat);\r\n\t}\r\n\tLPSTR pText = (LPSTR)E_MAlloc (nLen);\r\n//\t*pText=0;MessageBox(NULL,pText,NULL,MB_OK);\r\n\tif(pInt)\r\n\t{\r\n\t\tstrcpy(pText,pInt);\r\n\t\tfree(pInt);\r\n\t}else\r\n\t\tstrcpy(pText,\"\");\r\n\r\n\tif(pFloat)\r\n\t{\r\n\t\tstrcat(pText,pFloat);\r\n\t\tfree(pFloat);\r\n\t}\r\n\r\n\treturn pText;\t\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_UTF8ToStr.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n// øʽ ı͡ UTF8ı ֽڼ תUTF8ıݣ - ϵͳֿ֧->ı\r\n// ӢƣUTF8ToStr\r\n// ָUTF8ıתͨı󷵻ءΪ\r\n// <1>ΪתUTF8ıݡΪֽڼbinṩתͨıUTF8ıݡ\r\n// \r\n// ϵͳ WindowsLinux\r\nLIBAPI(char*, krnln_UTF8ToStr)\r\n{\r\n\tchar* pSrc;\r\n\tchar* pRet = NULL;\r\n\tint nUnicodeLen, nAnsiLen;\r\n\tWCHAR *unicodetext;\r\n\r\n\tif (ArgInf.m_pBin == NULL || ArgInf.m_pInt[1] <= 0) \r\n\t\treturn NULL;\r\n\r\n\tpSrc = (char*)ArgInf.m_pBin;\r\n\tpSrc += 2*sizeof(INT);\r\n\r\n\t//ȴUTF-8תUNICODE\r\n\tnUnicodeLen = MultiByteToWideChar(CP_UTF8, 0, pSrc, ArgInf.m_pInt[1], NULL, 0);\r\n\tif (nUnicodeLen <= 0) \r\n\t\treturn NULL;\r\n\r\n\tunicodetext = new WCHAR[nUnicodeLen + 1];\r\n\tMultiByteToWideChar(CP_UTF8, 0, pSrc, ArgInf.m_pInt[1], unicodetext, nUnicodeLen);\r\n\tunicodetext[nUnicodeLen] = '\\0';\r\n\r\n\t//UNICDOEתANSI\r\n\tnAnsiLen = WideCharToMultiByte(936, 0, unicodetext, -1, NULL, 0, NULL, NULL);\r\n\tif (nAnsiLen > 0)\r\n\t{\r\n\t\tpRet = (char*)E_MAlloc_Nzero(nAnsiLen); //nAnsiLenֹ\r\n\t\tif (pRet)\r\n\t\t\tWideCharToMultiByte(936, 0, unicodetext, -1, pRet, nAnsiLen, NULL, NULL);\r\n\t}\r\n\tdelete []unicodetext;\r\n\treturn pRet;\r\n}\r\n\r\n//    øʽ ı͡ UTF16ı ֽڼ תUTF16ıݣ - ϵͳֿ֧->ı\r\n//    ӢƣUTF16ToStr\r\n//    ָUTF16ıתͨı󷵻ءΪ\r\n//    <1>ΪתUTF16ıݡΪֽڼbinṩתͨıUTF16ıݡ\r\n//\r\n//    ϵͳ Windows\r\nLIBAPI(char*, krnln_fnUTF16ToStr)\r\n{\r\n\tchar* pSrc;\r\n\tint nl, al;\r\n\tWCHAR *unicodetext;\r\n\t\r\n\tif(ArgInf.m_pBin == NULL || ArgInf.m_pInt[1] <= 0)\r\n\t\treturn NULL;\r\n\t\r\n\tpSrc = (char*)ArgInf.m_pBin;\r\n\tpSrc += 2*sizeof(INT);\r\n\t\r\n\t//ȴUTF-16תUTF-8\r\n\tnl = WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)pSrc, ArgInf.m_pInt[1], NULL, 0, NULL, NULL);\r\n\tif (nl <= 0) return NULL;\r\n\r\n\tchar* pszUtf8 = new char[nl + 1];\r\n\tnl = WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)pSrc, ArgInf.m_pInt[1], pszUtf8, nl, NULL, NULL);\r\n\tpszUtf8[nl] = '\\0';\r\n\r\n\tpSrc = pszUtf8;\r\n\r\n\t//UTF-8תUNICODE\r\n\tnl = MultiByteToWideChar(CP_UTF8, 0, pSrc, -1, NULL, 0);\r\n\tif (nl <= 0) {\r\n\t\tdelete []pszUtf8;\r\n\t\treturn NULL;\r\n\t}\r\n\t\r\n\tunicodetext = new WCHAR[nl];\r\n\tnl = MultiByteToWideChar(CP_UTF8, 0, pSrc, -1, unicodetext, nl);\r\n\tif (0 >= nl)\r\n\t{\r\n\t\tdelete []pszUtf8;\r\n\t\tdelete []unicodetext;\r\n\t\treturn NULL;\r\n\t}\r\n\t\r\n\t//UNICDOEתANSI\r\n\tal = WideCharToMultiByte(936, 0, unicodetext, -1, NULL, 0, NULL, NULL);\r\n\tpSrc = NULL;\r\n\tif (al > 0)\r\n\t{\r\n\t\tpSrc = (char*)E_MAlloc_Nzero(al);\r\n\t\tif (pSrc)\r\n\t\t\tWideCharToMultiByte(936, 0, unicodetext, -1, pSrc, al, NULL, NULL);\r\n\t}\r\n\tdelete []pszUtf8;\r\n\tdelete []unicodetext;\r\n\treturn pSrc;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_Unlock.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ļд - ļ\r\n/*\r\n    øʽ ߼͡ ļ  ļţ λã ĳȣ - ϵͳֿ֧->ļд\r\n    ӢƣUnlock\r\n    ɡסļļеɹ棬ʧܷؼ١ע⣺ʱṩĲֵáסļʱṩĲֵȫһ¡Ϊ\r\n    <1>ΪļšΪͣintļɡļء\r\n    <2>ΪλáΪͣintλֵ 0 ʼ\r\n    <3>ΪĳȡΪͣint\r\n*/\r\nLIBAPI(BOOL, krnln_Unlock)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn FALSE;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn FALSE;\r\n\tif(pFile->nType !=1)//ڴļ\r\n\t\treturn TRUE;\r\n\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\treturn UnlockFile(hFile,\r\n\t\tpArgInf[1].m_int,\r\n\t\t0,\r\n\t\tpArgInf[2].m_int,\r\n\t\t0);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_Variant.cpp",
    "content": "#include \"stdafx.h\"\r\n#pragma comment(lib,\"ole32.lib\")\r\n#pragma comment(lib,\"oleaut32.lib\")\r\n\r\n#define\t\tDTC_COM_OBJECT  \t\t48\r\n#define     DTC_VARIANT             49\r\n#define\t\tDTP_COM_OBJECT      MAKELONG (DTC_COM_OBJECT, 1)\r\n#define     DTP_VARIANT         MAKELONG (DTC_VARIANT, 1)\r\n\r\nBOOL E_GetVariantElement(PMDATA_INF pArgInf,VARIANTARG * pvargDest)\r\n{\r\n\tmemcpy(pvargDest,pArgInf[0].m_pCompoundData,sizeof(VARIANTARG));\r\n\tif(V_ISARRAY(pvargDest))\r\n\t{\r\n\t\tSAFEARRAY* psa = NULL;\r\n\t\tif(V_ISBYREF(pvargDest))\r\n\t\t\tpsa = *pvargDest->pparray;\r\n\t\telse\r\n\t\t\tpsa = pvargDest->parray;\r\n\r\n\t\tLONG lLb,lUb;\r\n\t\tUINT nDim = SafeArrayGetDim(psa);\r\n\t\tINT nCount=1;\r\n\t\tfor(UINT i=1;i<=nDim;i++)\r\n\t\t{\r\n\t\t\tSafeArrayGetLBound(psa,i,&lLb);\r\n\t\t\tSafeArrayGetUBound(psa,i,&lUb);\r\n\t\t\tnCount*=(lUb - lLb +1);\r\n\t\t\t\r\n\t\t}\r\n\t\tif(pArgInf[1].m_int > nCount)\r\n\t\t\treturn FALSE;\r\n\r\n\t//long lLbound = psa->rgsabound[0].lLbound;\r\n\t\t\r\n\t\tlong nIdx;//ܰ忪ʼֵ\r\n\t\tif(pArgInf[1].m_dtDataType == _SDT_NULL)\r\n\t\t{\r\n\t\t\tnIdx = 0;\r\n\r\n\t\t}else{\r\n\t\t\tnIdx = pArgInf[1].m_int-1;\r\n\t\t\tif(nIdx < 0)\r\n\t\t\t\tnIdx = 0;\t\t\r\n\t\t}\r\n\r\n\t\tif((VT_VARIANT & pvargDest->vt)==VT_VARIANT){\r\n\t\t/*char ErrorString [255];\r\n  \t\twsprintf(ErrorString, \"pvargDest->vt%d.  %d\", pvargDest->vt,SafeArrayGetDim(psa));\r\n\t\t\tHRESULT hr = SafeArrayGetElement(psa,&nIdx,pvargDest);\r\n\r\n  \t\tMessageBox(0, ErrorString, \"pvargDest->vt\", MB_ICONERROR);*/\r\n\r\n\t\t\tVARIANTARG *pBuf = NULL; \r\n\t\t\tHRESULT hr = SafeArrayAccessData(psa,(void **)&pBuf);\r\n\t\t\tif(FAILED(hr))\r\n\t\t\t\treturn FALSE;\r\n\t\t\tpBuf+=nIdx;\r\n\t\t\t*pvargDest = *pBuf;\r\n\t\t\t\r\n\t\t\tSafeArrayUnaccessData (psa);\r\n\t\t\r\n//\t\t\tif(FAILED(hr))\r\n//\t\t\t\treturn FALSE;\r\n\t\t\t\r\n\t\t\tif((VT_VARIANT|VT_BYREF) == pvargDest->vt){\r\n\t\t/*\t\t\t\tchar ErrorString [255];\r\n  \t\twsprintf(ErrorString, \"pvargDest->vt%d.\", pvargDest->vt);\r\n  \t\tMessageBox(0, ErrorString, \"pvargDest->vt\", MB_ICONERROR);\t*/\r\n\r\n\t\t\t\tVARIANT* pvt=pvargDest->pvarVal;\r\n\t\t\t\tmemcpy(pvargDest,pvt,sizeof(VARIANTARG));\r\n\r\n\t\t\t}\r\n\r\n\r\n\r\n\r\n\t\t}else{\r\n\t\t\t/*HRESULT hr = SafeArrayGetElement(psa,&nIdx,&pvargDest->intVal);\r\n\r\n\t\t\tif(FAILED(hr))\r\n\t\t\t\treturn FALSE;*/\r\n\t\t\tLPBYTE pBuf = NULL; \r\n\t\t\tHRESULT hr = SafeArrayAccessData(psa,(void **)&pBuf);\r\n\t\t\tif(FAILED(hr))\r\n\t\t\t\treturn FALSE;\r\n\t\t\tDWORD dwSize = SafeArrayGetElemsize(psa);\r\n\t\t\tpBuf+=(nIdx*dwSize);\r\n\t\t\tmemcpy(&pvargDest->intVal,pBuf,dwSize);\r\n\t\t\t//pvargDest->intVal = *pBuf;\r\n\r\n\t\t\tSafeArrayUnaccessData (psa);\r\n\t\t\tpvargDest->vt = (~VT_ARRAY & pvargDest->vt);\r\n\t\t}\r\n\t}\r\n\treturn TRUE;\r\n\r\n}\r\nLPOLESTR E_ASCII2Unicode(LPSTR pAsciiText)\r\n{\r\n\tif(pAsciiText==NULL)// || IsBadReadPtr(pBStrText,8)\r\n\t\treturn NULL;\r\n\r\n\tDWORD dwMinSize;\r\n    dwMinSize = MultiByteToWideChar (CP_ACP, 0, pAsciiText, -1, NULL, 0);\r\n\t\r\n    if(dwMinSize==0)\r\n\t\treturn NULL;\r\n    LPOLESTR lpwszStr = (LPOLESTR)new USHORT [dwMinSize];\r\n    // Convert headers from ASCII to Unicode.\r\n    MultiByteToWideChar (CP_ACP, 0, pAsciiText, -1, lpwszStr, dwMinSize);  \r\n\treturn lpwszStr;\r\n}\r\n\r\nLPSTR E_Unicode2ASCII(LPOLESTR pBStrText)\r\n{\r\n\tif(pBStrText==NULL)// || IsBadReadPtr(pBStrText,8)\r\n\t\treturn NULL;\r\n\t//Ҫתַ \r\n\tDWORD dwLen=WideCharToMultiByte (CP_ACP, 0, pBStrText, -1, NULL,0, NULL, NULL) ; \r\n\t//תַ\r\n    if(dwLen==0)\r\n\t\treturn NULL;\r\n\tLPSTR pText =(char*)E_MAlloc (dwLen);\r\n\tWideCharToMultiByte (CP_ACP, 0, pBStrText, -1, pText,dwLen, NULL, NULL);\r\n\treturn pText;\r\n}\r\n\r\nBOOL EDataLetToVariant(VARIANTARG * pvargDest,PMDATA_INF pArgInf)\r\n{\r\n\tVARIANTARG pArg;\r\n\tmemset(&pArg,0,sizeof(VARIANTARG));\r\n\tswitch(pArgInf->m_dtDataType)\r\n\t{\r\n\tcase SDT_BYTE:\r\n\t\tpArg.vt = VT_UI1;\r\n\t\tpArg.intVal = pArgInf->m_int;\r\n\t\tbreak;\r\n\tcase SDT_SHORT:\r\n\t\tpArg.vt = VT_I2;\r\n\t\tpArg.intVal = pArgInf->m_int;\r\n\t\tbreak;\r\n\tcase SDT_INT:\r\n\t\tpArg.vt = VT_I4;\r\n\t\tpArg.intVal = pArgInf->m_int;\r\n\t\tbreak;\r\n\tcase SDT_SUB_PTR:\r\n\t\tpArg.vt = VT_UI4;\r\n\t\tpArg.intVal = pArgInf->m_int;\r\n\t\tbreak;\r\n\tcase SDT_INT64:\r\n\t\tpArg.vt = VT_I8;\r\n\t\tpArg.date = pArgInf->m_date;\r\n\t\tbreak;\r\n\tcase SDT_FLOAT:\r\n\t\tpArg.vt = VT_R4;\r\n\t\tpArg.fltVal= pArgInf->m_float;\r\n\t\tbreak;\r\n\tcase SDT_DOUBLE:\r\n\t\tpArg.vt = VT_R8;\r\n\t\tpArg.date = pArgInf->m_date;\r\n\t\tbreak;\r\n\tcase SDT_BOOL:\r\n\t\tpArg.vt = VT_BOOL;\r\n\t\tpArg.boolVal = pArgInf->m_bool?-1:0;\r\n\t\tbreak;\r\n\tcase SDT_DATE_TIME:\r\n\t\tpArg.vt = VT_DATE;\r\n\t\tpArg.date = pArgInf->m_date;\r\n\t\tbreak;\r\n\tcase SDT_TEXT:\r\n\t\t{\r\n\t\t\tpArg.vt = VT_BSTR;\r\n\t\t\tLPOLESTR lpsz = E_ASCII2Unicode(pArgInf->m_pText);\r\n\t\t\tpArg.bstrVal = ::SysAllocString(lpsz);\r\n\t\t\tdelete [] lpsz;\r\n\t\t}\r\n\t\tbreak;\r\n\t\r\n\tcase DTP_VARIANT:\r\n\t\tif(FAILED(VariantCopy(&pArg,(VARIANTARG *)pArgInf->m_pCompoundData)))\r\n\t\t\treturn FALSE;\r\n\t\tbreak;\r\n\tcase DTP_COM_OBJECT:\r\n\t\t{\r\n\t\t\tpArg.vt = VT_UNKNOWN;//VT_DISPATCH\r\n\t\t\tPEYDISPATCH pDest = (PEYDISPATCH)pArgInf->m_pCompoundData;\r\n\t\t\tpArg.pdispVal = pDest->pDisp;\r\n\t\t\tif(pArg.pdispVal)\r\n\t\t\t\tpArg.pdispVal->AddRef();\r\n\t\t}\r\n\t\tbreak;\r\n\tdefault:\r\n\t\treturn FALSE;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tVariantClear(pvargDest);\r\n\tmemcpy(pvargDest,&pArg,sizeof(VARIANTARG));\r\n\r\n\treturn TRUE;\r\n\r\n}\r\n\r\nBOOL EAryDataToVariant(VARIANTARG * pvargDest,PMDATA_INF pArgInf)\r\n{\r\n\tINT nDataType = pArgInf->m_dtDataType;\r\n\tINT nVtype,nDataSize;\r\n\r\n\tDWORD dwSize=0;\r\n\tvoid* pData = GetAryElementInf(pArgInf->m_pAryData,dwSize);\r\n\tif(pData==NULL || dwSize==0)\r\n\t\treturn FALSE;\r\n\r\n\tif(nDataType == SDT_BIN)\r\n\t{\r\n\t\tnVtype =  VT_UI1;\r\n\t\tnDataSize = sizeof (BYTE);\r\n\r\n\t}else{\r\n\r\n\t\tnDataType = ~DT_IS_ARY & nDataType;\r\n\t\tswitch(nDataType)\r\n\t\t{\r\n\t\tcase SDT_BYTE:\r\n\t\t\tnVtype = VT_UI1;\r\n\t\t\tnDataSize = sizeof (BYTE);\r\n\t\t\tbreak;\r\n\t\tcase SDT_SHORT:\r\n\t\t\tnVtype = VT_I2;\r\n\t\t\tnDataSize = sizeof (SHORT);\r\n\t\t\tbreak;\r\n\t\tcase SDT_INT:\r\n\t\t\tnVtype = VT_I4;\r\n\t\t\tnDataSize = sizeof (INT);\r\n\t\t\tbreak;\r\n\t\tcase SDT_SUB_PTR:\r\n\t\t\tnVtype = VT_UI4;\r\n\t\t\tnDataSize = sizeof (DWORD);\r\n\t\t\tbreak;\r\n\t\tcase SDT_INT64:\r\n\t\t\tnVtype = VT_I8;\r\n\t\t\tnDataSize = sizeof (INT64);\r\n\t\t\tbreak;\r\n\t\tcase SDT_FLOAT:\r\n\t\t\tnVtype = VT_R4;\r\n\t\t\tnDataSize = sizeof (FLOAT);\r\n\t\t\tbreak;\r\n\t\tcase SDT_DOUBLE:\r\n\t\t\tnVtype = VT_R8;\r\n\t\t\tnDataSize = sizeof (DOUBLE);\r\n\t\t\tbreak;\r\n\t\tcase SDT_BOOL:\r\n\t\t\tnVtype = VT_BOOL;\r\n\t\t\tnDataSize = sizeof (BOOL);\r\n\t\t\tbreak;\r\n\t\tcase SDT_DATE_TIME:\r\n\t\t\tnVtype = VT_DATE;\r\n\t\t\tnDataSize = sizeof (DATE);\r\n\t\t\tbreak;\r\n\t\tcase SDT_TEXT:\r\n\t\t\tnVtype = VT_BSTR;\r\n\t\t\tnDataSize = sizeof (DWORD);\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\treturn FALSE;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tSAFEARRAY* pArray=NULL;\r\n\tHRESULT hr=SafeArrayAllocDescriptor(1,&pArray);//SAFEARRAYṹĶ\r\n\tif(FAILED(hr))\r\n\t\treturn FALSE;\r\n\tpArray->cbElements=nDataSize;\r\n\tpArray->rgsabound[0].cElements=dwSize;\r\n\tpArray->rgsabound[0].lLbound=0;\r\n\tSafeArrayAllocData(pArray);\r\n\tvoid * pDest =NULL;\r\n\thr = SafeArrayAccessData(pArray,(void**)&pDest);\r\n\tif(FAILED(hr))\r\n\t{\r\n\t\tSafeArrayDestroy(pArray);\r\n\t\treturn FALSE;\r\n\t}\r\n\r\n\tif(nVtype == VT_BSTR)\r\n\t{\r\n\t\tLPSTR* pArySrc = (LPSTR*)pData;\r\n\t\tLPOLESTR* pAryDest = (LPOLESTR*)pDest;\r\n\t\t\t\r\n\t\t\t\t\t\r\n\t\tfor(INT i=0;i<(INT)dwSize;i++)\r\n\t\t{\r\n\t\t\tLPOLESTR lpsz = E_ASCII2Unicode(pArySrc[i]);\r\n\t\t\tpAryDest[i] = ::SysAllocString(lpsz);\r\n\t\t\tdelete [] lpsz;\r\n\t\t}\r\n\r\n\t}else if(nVtype == VT_BOOL){\r\n\t\tLPINT pArySrc = (LPINT)pData;\r\n\t\tLPINT pAryDest = (LPINT)pDest;\r\n\t\tfor(INT i=0;i<(INT)dwSize;i++)\r\n\t\t{\r\n\t\t\tif(pArySrc[i])\r\n\t\t\t\tpAryDest[i] = -1;\r\n\t\t\telse\r\n\t\t\t\tpAryDest[i] = 0;\r\n\t\t}\r\n\r\n\t}else{\r\n\t\tmemcpy(pDest,pData,dwSize*nDataSize);\r\n\t}\r\n\tSafeArrayUnaccessData(pArray);\r\n\tVariantClear(pvargDest);\r\n\tpvargDest->vt = nVtype | VT_ARRAY;\r\n\tpvargDest->parray = pArray;\r\n\treturn TRUE;\r\n\r\n}\r\nextern \"C\" \r\n{\r\n\t/*\r\n\tƱ\r\n\t\r\n\t*/\r\n\tvoid _cdecl krnln_VariantCopy (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tVARIANTARG * pvargDest = (VARIANTARG *)pArgInf[0].m_pCompoundData;\r\n\t\tif(pvargDest==NULL)return;\r\n\t\tVariantClear(pvargDest);\r\n\t\tVARIANTARG * pvargSrc = (VARIANTARG *)pArgInf[1].m_pCompoundData;\r\n\t\tif(pvargSrc)\r\n\t\t\tVariantCopy(pvargDest,pvargSrc);\r\n\t}\r\n\r\n\t/*\r\n    øʽ ޷ֵ   - ϵͳֿ֧->\r\n    ӢƣClear\r\n    ͷŲաñ˳ʱԶͷš磺ӳֲУӳ˳ʱöᱻԶͷšΪԱ\r\n\t\r\n\t*/\r\n\tvoid _cdecl krnln_VariantClear (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tVARIANTARG * pvargDest = (VARIANTARG *)ArgInf.m_pCompoundData;\r\n\t\tVariantClear(pvargDest);\r\n\t\tVariantInit(pvargDest);\r\n\r\n\t}\r\n\r\n\t/*\r\n    øʽ ͡ ȡ  - ϵͳֿ֧->\r\n    ӢƣGetType\r\n    ȡصǰͶ͡ΪԱ\r\n    ƣ    ӢƣVariantType\r\n    Ϊöٳͣ 15 öٳֵ\r\n    ϵͳ Windows\r\n    ṩܹ͵öֵ\r\n    öٳֵ<1>Ϊδ֪ӢΪUnknownֵΪ-1\r\n    öٳֵ<2>ΪաӢΪEmptyֵΪ0\r\n    öٳֵ<3>Ϊֵ͡ӢΪNumberֵΪ1\r\n    öٳֵ<4>Ϊı͡ӢΪTextֵΪ2\r\n    öٳֵ<5>Ϊ߼͡ӢΪBoolֵΪ3\r\n    öٳֵ<6>Ϊ͡ӢΪDateֵΪ4\r\n    öٳֵ<7>Ϊ͡ӢΪObjectֵΪ5\r\n    öٳֵ<8>Ϊֵ͡ӢΪErrorֵΪ6\r\n    öٳֵ<9>Ϊֵ顱ӢΪNumberArrayֵΪ7\r\n    öٳֵ<10>Ϊı顱ӢΪTextArrayֵΪ8\r\n    öٳֵ<11>Ϊ߼顱ӢΪBoolArrayֵΪ9\r\n    öٳֵ<12>Ϊ顱ӢΪDateArrayֵΪ10\r\n    öٳֵ<13>Ϊ顱ӢΪObjectArrayֵΪ11\r\n    öٳֵ<14>Ϊֵ顱ӢΪErrorArrayֵΪ12\r\n    öٳֵ<15>Ϊ顱ӢΪVariantArrayֵΪ13\t\r\n\t*/\r\n\tint _cdecl krnln_VariantGetType (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tVARIANTARG * pvargDest = (VARIANTARG *)ArgInf.m_pCompoundData;\r\n\t\tVARTYPE vt = pvargDest->vt;\r\n\t\tBOOL bIsArray = FALSE;\r\n\t\tif(vt & VT_ARRAY)\r\n\t\t{\r\n\t\t\tvt &=(~VT_ARRAY);//ȥ־\r\n\t\t\tbIsArray = TRUE;\r\n\t\t}\r\n\t\tint nType = -1;\r\n\t\tswitch(vt)\r\n\t\t{\r\n\t\tcase VT_UI1:\r\n\t\tcase VT_UI2:\r\n\t\tcase VT_UI4:\r\n\t\tcase VT_UI8:\r\n\t\tcase VT_I1:\r\n\t\tcase VT_I2:\r\n\t\tcase VT_I4:\r\n\t\tcase VT_I8:\r\n\t\tcase VT_R4:\r\n\t\tcase VT_R8:\r\n\t\tcase VT_INT:\r\n\t\tcase VT_UINT:\r\n\t\tcase VT_CY:\r\n\t\tcase VT_DECIMAL:\r\n\t\t\tnType = 1;\r\n\t\t\tbreak;\r\n\t\tcase VT_BSTR:\r\n\t\t\tnType = 2;\r\n\t\t\tbreak;\r\n\t\tcase VT_BOOL:\r\n\t\t\tnType = 3;\r\n\t\t\tbreak;\r\n\t\tcase VT_DATE:\r\n\t\t\tnType = 4;\r\n\t\t\tbreak;\r\n\t\tcase VT_DISPATCH://Ƿдַ־?\r\n\t\t\tnType = 5;\r\n\t\t\tbreak;\r\n\t\tcase VT_ERROR:\r\n\t\t\tnType = 6;\r\n\t\t\tbreak;\r\n\t\tcase VT_EMPTY:\r\n\t\tcase VT_NULL:\r\n\t\t\tnType = 0;\r\n\t\t\tbreak;\t\t\t\r\n\t\t}\r\n\t\tif(bIsArray)\r\n\t\t{\r\n\t\t\tif(nType==-1 && vt==VT_VARIANT)\r\n\t\t\t\tnType = 13;\r\n\t\t\telse if(1 <= nType && nType <=6)\r\n\t\t\t\tnType +=6;\r\n\t\t}\r\n\r\n\t\treturn nType;\r\n\t}\r\n\r\n\t/*\r\n    øʽ ͡ ȡԱ  - ϵͳֿ֧->\r\n    ӢƣGetElementCount\r\n    дŵݣִбԱĿݣִб -1 ΪԱ\r\n\r\n\t\r\n\t*/\r\n\tint _cdecl krnln_VariantGetElementCount (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tVARIANTARG * pvargDest = (VARIANTARG *)ArgInf.m_pCompoundData;\r\n\t\tif(V_ISARRAY(pvargDest))\r\n\t\t{\r\n\t\t\tSAFEARRAY* psa = NULL;\r\n\t\t\tif(V_ISBYREF(pvargDest))\r\n\t\t\t\tpsa = *pvargDest->pparray;\r\n\t\t\telse\r\n\t\t\t\tpsa = pvargDest->parray;\r\n\t\t\tLONG lLb,lUb;\r\n\t\t\tUINT nDim = SafeArrayGetDim(psa);\r\n\t\t\tINT nCount=1;\r\n\t\t\tfor(UINT i=1;i<=nDim;i++)\r\n\t\t\t{\r\n\t\t\t\tSafeArrayGetLBound(psa,i,&lLb);\r\n\t\t\t\tSafeArrayGetUBound(psa,i,&lUb);\r\n\t\t\t\tnCount*=(lUb - lLb +1);\r\n\r\n\t\t\t}\r\n\t\t\treturn nCount;\r\n\t\t}\r\n\t\treturn -1;\r\n\t}\r\n\r\n\t/*\r\n    øʽ ı͡ ȡı  Աݣ - ϵͳֿ֧->\r\n    ӢƣGetText\r\n    رл򱾶ԱеıݣǰݵͲΪıͣԶתתʧܽؿıΪԱ\r\n    <1>ΪԱΪͣintԱʡԡǰΪݣڵĳԱвڴ˲ֵֵָ 1 ʼ⣬ʡԱ\r\n\r\n\t\r\n\t*/\r\n\tchar* _cdecl krnln_VariantGetText (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tVARIANTARG vargSrc;\r\n\t\tif(E_GetVariantElement(&ArgInf,&vargSrc)==FALSE)\r\n\t\t\treturn NULL;\r\n\r\n\t\tLPSTR pText = NULL;\r\n\t\tif(vargSrc.vt == VT_BOOL)\r\n\t\t{\r\n\t\t\tif(vargSrc.boolVal != 0)\r\n\t\t\t\tpText = CloneTextData((LPSTR)\"\",2);\r\n\t\t\telse\r\n\t\t\t\tpText = CloneTextData((LPSTR)\"\",2);\r\n\t\t\treturn pText;\r\n\t\t}\r\n\t\tBOOL bIsFromChg = FALSE;\r\n\t\tif(vargSrc.vt != VT_BSTR)\r\n\t\t{\r\n\t\t\tVARIANTARG vargDest;\r\n\t\t\tmemcpy(&vargDest,&vargSrc,sizeof(VARIANTARG));\r\n\t\t\tmemset(&vargSrc,0,sizeof(VARIANTARG));\r\n\t\t\tHRESULT hr = VariantChangeType(&vargSrc,&vargDest,0,VT_BSTR);\r\n\t\t\tif(FAILED(hr))\r\n\t\t\t\treturn NULL;\r\n\t\t\tbIsFromChg = TRUE;\r\n\t\t}\r\n\t\tpText = E_Unicode2ASCII(vargSrc.bstrVal);\r\n\t\tif(bIsFromChg)\r\n\t\t\tVariantClear(&vargSrc);\r\n\t\treturn pText;\r\n\t}\r\n\r\n\t/*\r\n    øʽ ˫С͡ ȡֵ  Աݣ - ϵͳֿ֧->\r\n    ӢƣGetNum\r\n    رл򱾶ԱеֵݣǰݵͲΪֵֵͣԶתתʧܽ 0 ΪԱ\r\n    <1>ΪԱΪͣintԱʡԡǰΪݣڵĳԱвڴ˲ֵֵָ 1 ʼ⣬ʡԱ\t\r\n\t*/\r\n\tvoid _cdecl krnln_VariantGetNum (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tVARIANTARG vargSrc;\r\n\t\tMDATA_INF RetVal;\r\n\t\tif(E_GetVariantElement(&ArgInf,&vargSrc))\r\n\t\t{\r\n\t\t\tif(vargSrc.vt != VT_R8)\r\n\t\t\t{\r\n\t\t\t\tVARIANTARG vargDest;\r\n\t\t\t\tmemcpy(&vargDest,&vargSrc,sizeof(VARIANTARG));\r\n\t\t\t\tmemset(&vargSrc,0,sizeof(VARIANTARG));\r\n\t\t\t\tVariantChangeType(&vargSrc,&vargDest,0,VT_R8);\r\n\t\t\t}\r\n\t\t\tRetVal.m_double = vargSrc.dblVal;\r\n\t\t}\r\n\t\telse\r\n\t\t\tRetVal.m_double = 0;\r\n\t\t__asm\r\n\t\t{\r\n\t\t\tmov eax,RetVal.m_unit.m_dwFormID;\r\n\t\t\tmov edx,RetVal.m_unit.m_dwUnitID;\r\n\t\t}\r\n\t}\r\n\r\n\t/*\r\n    øʽ ߼͡ ȡ߼ֵ  Աݣ - ϵͳֿ֧->\r\n    ӢƣGetBool\r\n    رл򱾶Աе߼ֵݣǰݵͲΪ߼ͣԶתתʧܽؼ١ΪԱ\r\n    <1>ΪԱΪͣintԱʡԡǰΪݣڵĳԱвڴ˲ֵֵָ 1 ʼ⣬ʡԱ\r\n\t*/\r\n\tBOOL _cdecl krnln_VariantGetBool (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tVARIANTARG vargSrc;\r\n\t\tBOOL bRet = FALSE;\r\n\r\n\t\tif(E_GetVariantElement(&ArgInf,&vargSrc))\r\n\t\t{\r\n\t\t\tif(vargSrc.vt != VT_BOOL)\r\n\t\t\t{\r\n\t\t\t\tVARIANTARG vargDest;\r\n\t\t\t\tmemcpy(&vargDest,&vargSrc,sizeof(VARIANTARG));\r\n\t\t\t\tmemset(&vargSrc,0,sizeof(VARIANTARG));\r\n\t\t\t\tHRESULT hr = VariantChangeType(&vargSrc,&vargDest,0,VT_BSTR);\r\n\t\t\t\tif(FAILED(hr))\r\n\t\t\t\t\treturn bRet;\r\n\t\t\t}\r\n\t\t\tbRet = (vargSrc.boolVal !=0 ?1:0);\r\n\t\t}\r\n\t\treturn bRet;\r\n\r\n\t}\r\n\t/*\r\n    øʽ ʱ͡ ȡ  Աݣ - ϵͳֿ֧->\r\n    ӢƣGetDateTime\r\n    رл򱾶ԱеʱֵݣǰݵͲΪʱͣԶתתʧܽ10011աΪԱ\r\n    <1>ΪԱΪͣintԱʡԡǰΪݣڵĳԱвڴ˲ֵֵָ 1 ʼ⣬ʡԱ\r\n\t*/\r\n\tvoid _cdecl krnln_VariantGetDateTime (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tVARIANTARG vargSrc;\r\n\t\tMDATA_INF RetVal;\r\n\t\tif(E_GetVariantElement(&ArgInf,&vargSrc))\r\n\t\t{\r\n\t\t\tif(vargSrc.vt != VT_DATE)\r\n\t\t\t{\r\n\t\t\t\tVARIANTARG vargDest;\r\n\t\t\t\tmemcpy(&vargDest,&vargSrc,sizeof(VARIANTARG));\r\n\t\t\t\tmemset(&vargSrc,0,sizeof(VARIANTARG));\r\n\t\t\t\tHRESULT hr = VariantChangeType(&vargSrc,&vargDest,0,VT_DATE);\r\n\t\t\t\tif(FAILED(hr))\r\n\t\t\t\t\tvargSrc.date = -657434;//10011;\r\n\t\t\t}\r\n\t\t\tRetVal.m_date = vargSrc.date;\r\n\t\t}\r\n\t\telse\r\n\t\t\tRetVal.m_date = -657434;//10011;\r\n\t\t__asm\r\n\t\t{\r\n\t\t\tmov eax,RetVal.m_unit.m_dwFormID;\r\n\t\t\tmov edx,RetVal.m_unit.m_dwUnitID;\r\n\t\t}\r\n\t}\r\n\t/*\r\n    øʽ  ȡ  Աݣ - ϵͳֿ֧->\r\n    ӢƣGetObject\r\n    رл򱾶ԱеCOMݣǰݵͲΪCOMͣؿCOM󡣱ΪԱ\r\n    <1>ΪԱΪͣintԱʡԡǰΪݣڵĳԱвڴ˲ֵֵָ 1 ʼ⣬ʡԱ\r\n\t*/\r\n\tvoid* _cdecl krnln_VariantGetObject (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tVARIANTARG vargSrc;\r\n\t\tPEYDISPATCH pdispRet = (PEYDISPATCH)E_MAlloc(sizeof(EYDISPATCH));\r\n\r\n\t\tif(E_GetVariantElement(&ArgInf,&vargSrc))\r\n\t\t{\r\n\t\t\tswitch (vargSrc.vt)\r\n\t\t\t{\r\n\t\t\tcase VT_DISPATCH:\r\n\t\t\t\tpdispRet->pDisp = vargSrc.pdispVal;\r\n\t\t\t\tif(pdispRet->pDisp)\r\n\t\t\t\t\tpdispRet->pDisp->AddRef();\r\n\t\t\t\tbreak;\r\n\t\t\tcase VT_UNKNOWN:\r\n\t\t\t\tpdispRet->pDisp = (LPDISPATCH)vargSrc.punkVal;\r\n\t\t\t\tif(pdispRet->pDisp)\r\n\t\t\t\t\tpdispRet->pDisp->AddRef();\r\n\t\t\t\tbreak;\r\n\t\t\tcase VT_DISPATCH|VT_BYREF:\r\n\t\t\t\tpdispRet->pDisp = *vargSrc.ppdispVal;\r\n\t\t\t\tif(pdispRet->pDisp)\r\n\t\t\t\t\tpdispRet->pDisp->AddRef();\r\n\t\t\t\tbreak;\r\n\t\t\tcase VT_UNKNOWN|VT_BYREF:\r\n\t\t\t\tpdispRet->pDisp = *(LPDISPATCH*)vargSrc.ppunkVal;\r\n\t\t\t\tif(pdispRet->pDisp)\r\n\t\t\t\t\tpdispRet->pDisp->AddRef();\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn pdispRet;\r\n\r\n\t}\r\n\r\n\t/*\r\n    øʽ ͡ ȡ  Աݣ - ϵͳֿ֧->\r\n    ӢƣGetVariant\r\n    رл򱾶ԱеıݣǰݵͲΪͣԶתΪԱ\r\n    <1>ΪԱΪͣintԱʡԡǰΪݣڵĳԱвڴ˲ֵֵָ 1 ʼ⣬ʡԱ\r\n\t*/\r\n\tvoid* _cdecl krnln_VariantGetVariant (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tVARIANTARG vargSrc;\r\n\t\tVARIANT* pVarRet = (VARIANT*)E_MAlloc(sizeof(VARIANT));\r\n\r\n\t\tif(E_GetVariantElement(&ArgInf,&vargSrc))\r\n\t\t\tVariantCopy(pVarRet,&vargSrc);\r\n\t\treturn pVarRet;\r\n\r\n\t}\r\n\t/*\r\n    øʽ ߼͡ 󣮸ֵ ͨ/ дݣݣ Աݣ - ϵͳֿ֧->\r\n    Ӣƣset\r\n    ñݣɹ棬ʧܷؼ١ΪԱ\r\n    <1>ΪдݡΪͨͣallԱʡԣṩʱͬʱṩݡֵΪıֵ߼ֵʱֵCOMͻЩͼ͡ͱʽʡԣ򽫶ա\r\n    <2>ΪԱΪͣintԱʡԡǰΪݣڵĳԱвڴ˲ֵֵָ 1 ʼ⣬ʡԱ\r\n\t*/\r\n\tBOOL _cdecl krnln_Variantset (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tVARIANTARG * pvargDest = (VARIANTARG *)pArgInf[0].m_pCompoundData;\r\n\t\tif(pArgInf[1].m_dtDataType == _SDT_NULL)\r\n\t\t{\r\n\t\t\tVariantClear(pvargDest);\r\n\t\t\tVariantInit(pvargDest);\r\n\t\t\treturn TRUE;\r\n\t\t}\r\n\r\n\r\n\t\tBOOL bRet;\r\n\r\n\t\tif((pArgInf[1].m_dtDataType & DT_IS_ARY) == DT_IS_ARY || pArgInf[1].m_dtDataType == SDT_BIN)\r\n\t\t\tbRet = EAryDataToVariant(pvargDest,&pArgInf[1]);\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(V_ISARRAY(pvargDest))\r\n\t\t\t{\r\n\t\t\t\tSAFEARRAY* psa = pvargDest->parray;\r\n\t\t\t\tLONG lLb,lUb;\r\n\t\t\t\tUINT nDim = SafeArrayGetDim(psa);\r\n\t\t\t\tINT nCount=1;\r\n\t\t\t\tfor(UINT i=1;i<=nDim;i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tSafeArrayGetLBound(psa,i,&lLb);\r\n\t\t\t\t\tSafeArrayGetUBound(psa,i,&lUb);\r\n\t\t\t\t\tnCount*=(lUb - lLb +1);\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\tif(pArgInf[2].m_int > nCount)\r\n\t\t\t\t\treturn FALSE;\r\n\r\n\t\t\t\tVARIANTARG vargSrc;\r\n\t\t\t\tVariantInit(&vargSrc);\r\n\t\t\t\t\r\n\t\t\t\tif(EDataLetToVariant(&vargSrc,&pArgInf[1])==FALSE)\r\n\t\t\t\t\treturn FALSE;\r\n\t\t\t\t\r\n\r\n\r\n\t\t\t\t//long lLbound = //psa->rgsabound[0].lLbound;\r\n\t\t\t\tlong nIdx;//ܰ忪ʼֵ\r\n\t\t\t\tif(pArgInf[2].m_dtDataType == _SDT_NULL)\r\n\t\t\t\t{\r\n\t\t\t\t\tnIdx = 0;//lLbound;\r\n\t\t\t\t\t\r\n\t\t\t\t}else{\r\n\t\t\t\t\tnIdx = pArgInf[2].m_int-1;//+lLbound;\r\n\t\t\t\t\tif(nIdx < 0)\r\n\t\t\t\t\t\tnIdx = 0;//lLbound;\r\n\t\t\t\t}\r\n\t\t\t\tINT nVarType = ~VT_ARRAY & pvargDest->vt;\r\n\t\t\r\n\t\t\t\tHRESULT hr;\r\n\r\n\r\n\t\t\t\tif((VT_VARIANT & nVarType)==VT_VARIANT){\r\n\t\t\t\t\t//hr = SafeArrayPutElement(psa,&nIdx,&vargSrc);\r\n\t\t\t\t\tVARIANTARG *pBuf = NULL; \r\n\t\t\t\t\tHRESULT hr = SafeArrayAccessData(psa,(void **)&pBuf);\r\n\t\t\t\t\tif(!FAILED(hr)){\r\n\t\t\t\t\t\tpBuf+=nIdx;\r\n\t\t\t\t\t\tVariantClear(pBuf);\r\n\t\t\t\t\t\t*pBuf=vargSrc;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tSafeArrayUnaccessData (psa);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(nVarType != vargSrc.vt)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tVARIANTARG vargDest;\r\n\t\t\t\t\t\tmemcpy(&vargDest,&vargSrc,sizeof(VARIANTARG));\r\n\t\t\t\t\t\tmemset(&vargSrc,0,sizeof(VARIANTARG));\r\n\t\t\t\t\t\thr = VariantChangeType(&vargSrc,&vargDest,0,nVarType);\r\n\t\t\t\t\t\tif(FAILED(hr))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tVariantClear(&vargDest);\r\n\t\t\t\t\t\t\treturn FALSE;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//hr = SafeArrayPutElement(psa,&nIdx,&vargSrc.intVal);\r\n\t\t\t\t\tLPBYTE pBuf = NULL;\r\n\t\t\t\t\tHRESULT hr = SafeArrayAccessData(psa,(void **)&pBuf);\r\n\t\t\t\t\tif(!FAILED(hr)){\r\n\t\t\t\t\t\tDWORD dwSize = SafeArrayGetElemsize(psa);\r\n\t\t\t\t\t\tpBuf+=(nIdx*dwSize);\r\n\t\t\t\t\t\tif(nVarType==VT_BSTR)\r\n\t\t\t\t\t\t\t::SysFreeString (*(BSTR*)pBuf);\r\n\t\t\t\t\t\tmemcpy(pBuf,&vargSrc.intVal,dwSize);\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tSafeArrayUnaccessData (psa);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(FAILED(hr))\r\n\t\t\t\t{\r\n\t\t\t\t\tVariantClear(&vargSrc);\r\n\t\t\t\t\treturn FALSE;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn TRUE;\r\n\t\t\t\t\r\n\t\t\t}else\r\n\t\t\t\tbRet = EDataLetToVariant(pvargDest,&pArgInf[1]);\r\n\t\t}\r\n\r\n\t\treturn bRet;\r\n\t}\r\n\t/*\r\n    øʽ ߼͡ 󣮴  Աͣ ԱĿ - ϵͳֿ֧->\r\n    ӢƣCreateArray\r\n    ָͺָԱĿհ飬еԭݽգɹ棬ʧܷؼ١ΪԱ\r\n    <1>ΪԱ͡ΪͣintָԱͣΪֵ֮һ\r\n\t1: ֽͣ 2: ͣ 3: ͣ 4: Сͣ 5: ˫Сͣ 6: ıͣ 7: ߼ͣ 8: ͣ 9: ͣ 10: ͡\r\n    <2>ΪԱĿΪͣintָԱĿ\r\n\t*/\r\n\tBOOL _cdecl krnln_VariantCreateArray (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tVARIANTARG * pvargDest = (VARIANTARG *)pArgInf[0].m_pCompoundData;\r\n\t\tVariantClear(pvargDest);\r\n\t\tVariantInit(pvargDest);\r\n\r\n\t\tINT nDataType = pArgInf[1].m_int;\r\n\t\tINT nDataSize,nVtype;\r\n\t\tswitch(nDataType)\r\n\t\t{\r\n\t\tcase 1://ֽ\r\n\t\t\tnVtype = VT_UI1;\r\n\t\t\tnDataSize = sizeof (BYTE);\r\n\t\t\tbreak;\r\n\t\tcase 2://\r\n\t\t\tnVtype = VT_I2;\r\n\t\t\tnDataSize = sizeof (SHORT);\r\n\t\t\tbreak;\r\n\t\tcase 3://\r\n\t\t\tnVtype = VT_I4;\r\n\t\t\tnDataSize = sizeof (INT);\r\n\t\t\tbreak;\r\n\t\tcase 4://С\r\n\t\t\tnVtype = VT_R4;\r\n\t\t\tnDataSize = sizeof (FLOAT);\r\n\t\t\tbreak;\r\n\t\tcase 5://˫С\r\n\t\t\tnVtype = VT_R8;\r\n\t\t\tnDataSize = sizeof (DOUBLE);\r\n\t\t\tbreak;\r\n\t\tcase 7://߼\r\n\t\t\tnVtype = VT_BOOL;\r\n\t\t\tnDataSize = sizeof (BOOL);\r\n\t\t\tbreak;\r\n\t\tcase 8://\r\n\t\t\tnVtype = VT_DATE;\r\n\t\t\tnDataSize = sizeof (DATE);\r\n\t\t\tbreak;\r\n\t\tcase 6://ı\r\n\t\t\tnVtype = VT_BSTR;\r\n\t\t\tnDataSize = sizeof (DWORD);\r\n\t\t\tbreak;\r\n\t\tcase 9://\r\n\t\t\tnVtype = VT_DISPATCH;\r\n\t\t\tnDataSize = sizeof (DWORD);\r\n\t\t\tbreak;\r\n\t\tcase 10://\r\n\t\t\tnVtype = VT_VARIANT;\r\n\t\t\tnDataSize = sizeof (VARIANT);\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\treturn FALSE;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\t\r\n\r\n\t\tSAFEARRAY* pArray=NULL;\r\n\t\tHRESULT hr=SafeArrayAllocDescriptor(1,&pArray);//SAFEARRAYṹĶ\r\n\t\tif(FAILED(hr))\r\n\t\t\treturn FALSE;\r\n\t\tpArray->cbElements=nDataSize;\r\n\t\tpArray->rgsabound[0].cElements=pArgInf[2].m_int;\r\n\t\tpArray->rgsabound[0].lLbound=0;\r\n\t\thr = SafeArrayAllocData(pArray);\r\n\t\tif(FAILED(hr))\r\n\t\t{\r\n\t\t\tSafeArrayDestroyDescriptor(pArray);\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\t\r\n\t\tpvargDest->vt = nVtype | VT_ARRAY;\r\n\t\tpvargDest->parray = pArray;\r\n\t\treturn TRUE;\r\n\r\n\t}\r\n\t/*\r\n    øʽ ߼͡   õͣ - ϵͳֿ֧->\r\n    ӢƣSetType\r\n    ǰͶеԭݣıͣɹ棬ʧܷؼ١ΪԱ\r\n    <1>Ϊõ͡ΪͣVariantTypeֵṩõı͡\r\n    öٳֵ<2>ΪաӢΪEmptyֵΪ0\r\n    öٳֵ<3>Ϊֵ͡ӢΪNumberֵΪ1\r\n    öٳֵ<4>Ϊı͡ӢΪTextֵΪ2\r\n    öٳֵ<5>Ϊ߼͡ӢΪBoolֵΪ3\r\n    öٳֵ<6>Ϊ͡ӢΪDateֵΪ4\r\n    öٳֵ<7>Ϊ͡ӢΪObjectֵΪ5\r\n    öٳֵ<8>Ϊֵ͡ӢΪErrorֵΪ6\r\n    öٳֵ<9>Ϊֵ顱ӢΪNumberArrayֵΪ7\r\n    öٳֵ<10>Ϊı顱ӢΪTextArrayֵΪ8\r\n    öٳֵ<11>Ϊ߼顱ӢΪBoolArrayֵΪ9\r\n    öٳֵ<12>Ϊ顱ӢΪDateArrayֵΪ10\r\n    öٳֵ<13>Ϊ顱ӢΪObjectArrayֵΪ11\r\n    öٳֵ<14>Ϊֵ顱ӢΪErrorArrayֵΪ12\r\n    öٳֵ<15>Ϊ顱ӢΪVariantArrayֵΪ13\t\r\n\t*/\r\n\tBOOL _cdecl krnln_VariantSetType (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tVARIANTARG * pvargDest = (VARIANTARG *)pArgInf[0].m_pCompoundData;\r\n\t\r\n\r\n\t\tINT nVtype;\r\n\t\tswitch(pArgInf[1].m_int)\r\n\t\t{\r\n\t\tcase 0:\r\n\t\t\tnVtype = VT_EMPTY;\r\n\t\t\tbreak;\r\n\t\tcase 1:\r\n\t\t\tnVtype = VT_R8;\r\n\t\t\tbreak;\r\n\t\tcase 2:\r\n\t\t\tnVtype = VT_BSTR;\r\n\t\t\tbreak;\r\n\t\tcase 3:\r\n\t\t\tnVtype = VT_BOOL;\r\n\t\t\tbreak;\r\n\t\tcase 4:\r\n\t\t\tnVtype = VT_DATE;\r\n\t\t\tbreak;\r\n\t\tcase 5:\r\n\t\t\tnVtype = VT_DISPATCH;\r\n\t\t\tbreak;\r\n\t\tcase 6:\r\n\t\t\tnVtype = VT_ERROR;\r\n\t\t\tbreak;\r\n\t\tcase 7:\r\n\t\t\tnVtype = VT_R8|VT_ARRAY;\r\n\t\t\tbreak;\r\n\t\tcase 8:\r\n\t\t\tnVtype = VT_BSTR|VT_ARRAY;\r\n\t\t\tbreak;\r\n\t\tcase 9:\r\n\t\t\tnVtype = VT_BOOL|VT_ARRAY;\r\n\t\t\tbreak;\r\n\t\tcase 10:\r\n\t\t\tnVtype = VT_DATE|VT_ARRAY;\r\n\t\t\tbreak;\r\n\t\tcase 11:\r\n\t\t\tnVtype = VT_DISPATCH|VT_ARRAY;\r\n\t\t\tbreak;\r\n\t\tcase 12:\r\n\t\t\tnVtype = VT_ERROR|VT_ARRAY;\r\n\t\t\tbreak;\r\n\t\tcase 13:\r\n\t\t\tnVtype = VT_VARIANT|VT_ARRAY;\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tVariantClear(pvargDest);\r\n\t\t\tVariantInit(pvargDest);\r\n\t\t\treturn FALSE;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tif(nVtype == VT_EMPTY)\r\n\t\t{\r\n\t\t\tVariantClear(pvargDest);\r\n\t\t\tVariantInit(pvargDest);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tVARIANTARG vargDest;\r\n\t\t\tmemset(&vargDest,0,sizeof(VARIANTARG));\r\n\t\t\tHRESULT hr = VariantChangeType(&vargDest,pvargDest,0,nVtype);\r\n\t\t\tVariantClear(pvargDest);\r\n\t\t\tif(FAILED(hr))\r\n\t\t\t{\r\n\t\t\t\tVariantInit(pvargDest);\r\n\t\t\t\treturn FALSE;\r\n\t\t\t}\r\n\t\t\tmemcpy(pvargDest,&vargDest,sizeof(VARIANTARG));\r\n\r\n\r\n\t\t}\r\n\t\treturn TRUE;\r\n\t\r\n\t}\r\n\t/*\r\n    øʽ ֽڼ ȡֽڼ  Աݣ - ϵͳֿ֧->\r\n    ӢƣGetBin\r\n    رл򱾶ԱеֽڼݣǰݵͲΪֽڼͣԶתתʧܽؿֽڼΪԱ\r\n    <1>ΪԱΪͣintԱʡԡǰΪݣڵĳԱвڴ˲ֵֵָ 1 ʼ⣬ʡԱ\r\n\t*/\r\n\tvoid* _cdecl krnln_VariantGetBin (INT nArgCount,MDATA_INF ArgInf,...)\r\n\t{\r\n\t\t\r\n\t\tLPBYTE pData = NULL;\r\n\t\tVARIANTARG vargSrc;\r\n\t\tBOOL bIsFromChg = FALSE;\r\n\t\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\tSAFEARRAY* psa;\r\n\t\tVARIANTARG * pvargDest = (VARIANTARG *)pArgInf[0].m_pCompoundData;\r\n\t\tif(pvargDest->vt != (VT_ARRAY | VT_UI1) && pvargDest->vt != (VT_ARRAY | VT_I1))\r\n\t\t{\r\n\t\t\t\r\n\t\t\tif(E_GetVariantElement(&ArgInf,&vargSrc)==FALSE)\r\n\t\t\t\treturn pData;\r\n\t\t\tVARIANTARG vargDest;\r\n\t\t\tmemcpy(&vargDest,&vargSrc,sizeof(VARIANTARG));\r\n\t\t\tmemset(&vargSrc,0,sizeof(VARIANTARG));\r\n\t\t\tHRESULT hr = VariantChangeType(&vargSrc,&vargDest,0,VT_ARRAY | VT_UI1);\r\n\t\t\tif(FAILED(hr))\r\n\t\t\t\treturn pData;\r\n\t\t\tpsa = vargSrc.parray;\r\n\t\t\tbIsFromChg = TRUE;\r\n\r\n\t\t}else\r\n\t\t\tpsa = pvargDest->parray;\r\n\r\n\t\tLONG lLb,lUb;\r\n\t\tUINT nDim = SafeArrayGetDim(psa);\r\n\t\tINT nCount=1;\r\n\t\tfor(UINT i=1;i<=nDim;i++)\r\n\t\t{\r\n\t\t\tSafeArrayGetLBound(psa,i,&lLb);\r\n\t\t\tSafeArrayGetUBound(psa,i,&lUb);\r\n\t\t\tnCount*=(lUb - lLb +1);\r\n\t\t\t\r\n\t\t}\r\n\t\tBYTE *pBuf = NULL; \r\n\t\tSafeArrayAccessData(psa,(void **)&pBuf);\r\n\t\tpData = CloneBinData (pBuf, nCount);\r\n\t\tSafeArrayUnaccessData (psa);\r\n\t\tif(bIsFromChg)\r\n\t\t\tVariantClear(&vargSrc);\r\n\t\treturn pData;\r\n\r\n\t}\r\n}"
  },
  {
    "path": "krnln/krnln_WeekDay.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ʱ - ȡڼ\r\n/*\r\n    øʽ ͡ ȡڼ ʱ ʱ䣩 - ϵͳֿ֧->ʱ\r\n    ӢƣWeekDay\r\n    һֵΪ 1  7 ֮ʾһеĳһաΪ 1һΪ 2ơΪ\r\n    <1>Ϊʱ䡱Ϊʱͣdate\r\n*/\r\nLIBAPI(int, krnln_WeekDay)\r\n{\r\n\treturn GetWeekDay(ArgInf.m_date);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_WriteBin.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n#include \"Myfunctions.h\"\r\n//ļд - дֽڼ\r\n/*\r\n    øʽ ߼͡ дֽڼ  дݵļţֽڼ дֽڼݣ...  - ϵͳֿ֧->ļд\r\n    ӢƣWriteBin\r\n    дһλֽڼݵļеǰдλôɹ棬ʧܷؼ١ΪһԱظӡ\r\n    <1>ΪдݵļšΪͣintļɡļء\r\n    <2>ΪдֽڼݡΪֽڼbin\r\n*/\r\nLIBAPI(BOOL, krnln_WriteBin)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn NULL;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn NULL;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\tBOOL bRet = FALSE;\r\n\r\n\tif(pFile->nType ==1)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPBYTE pData = pArgInf[i].m_pBin + 2*sizeof(INT);\r\n\t\t\tINT nLen = pArgInf[i].m_pInt[1];\r\n\r\n\t\t\tif(WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL)==FALSE)\r\n\t\t\t{\r\n\t\t\t\tbRet = FALSE;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n/*\t\t\tif(FlushFileBuffers(hFile)==FALSE)\r\n\t\t\t{\r\n\t\t\t\tbRet = FALSE;\r\n\t\t\t\tbreak;\r\n\t\t\t}*/\r\n\t\t}\r\n\t\t\r\n\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPBYTE pData = pArgInf[i].m_pBin + 2*sizeof(INT);\r\n\t\t\tINT nLen = pArgInf[i].m_pInt[1];\r\n\t\t\tpMemFile->Write(pData,nLen);\r\n\t\t}\r\n\r\n\t}else if (pFile->nType == 3) //ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tLPBYTE pData = NULL;\r\n\t\tINT nMaxLen = 0;\r\n\t\tINT nLen, i, nPos;\r\n\t\tbRet = TRUE;\r\n\t\tfor(i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tnLen = pArgInf[i].m_pInt[1];\r\n\t\t\tif (nLen > 0)\r\n\t\t\t\tnMaxLen = max(nMaxLen, nLen);\r\n\t\t}\r\n\t\tif (nMaxLen > 0)\r\n\t\t\tpData = new unsigned char[nMaxLen];\r\n\t\tfor(i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tnLen = pArgInf[i].m_pInt[1];\r\n\t\t\tif (nLen > 0)\r\n\t\t\t{\r\n\t\t\t\tmemcpy(pData, pArgInf[i].m_pBin + 2*sizeof(INT), nLen);\r\n\r\n\t\t\t\tnPos = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r\n\t\t\t\tE_RC4_Calc(nPos, pData, nLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\tif(WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL)==FALSE)\r\n\t\t\t\t{\r\n\t\t\t\t\tdelete []pData;\r\n\t\t\t\t\tbRet = FALSE;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tdelete []pData;\r\n\t}\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_WriteFile.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//̲ - дļ\r\n/*\r\n    øʽ ߼͡ дļ ı ļֽڼ дļݣ...  - ϵͳֿ֧->̲\r\n    ӢƣWriteFile\r\n    һֽڼ˳дָļУļԭݱǡɹ棬ʧܷؼ١ΪһԱظӡ\r\n    <1>ΪļΪıͣtext\r\n    <2>ΪдļݡΪֽڼbin\r\n*/\r\nLIBAPI(BOOL, krnln_WriteFile)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tHANDLE hFile = CreateFile(ArgInf.m_pText,\r\n\t\tGENERIC_WRITE,\r\n\t\t0,\r\n\t\tNULL,\r\n\t\tCREATE_ALWAYS,\r\n\t\tFILE_ATTRIBUTE_ARCHIVE,\r\n\t\t0);\r\n\t\r\n\tBOOL bRet = FALSE;\r\n\tif(hFile != INVALID_HANDLE_VALUE)\r\n\t{\r\n\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPBYTE pData = pArgInf[i].m_pBin + 2*sizeof(INT);\r\n\t\t\tINT nLen = pArgInf[i].m_pInt[1];\r\n\r\n\t\t\tif(WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL)==FALSE)\r\n\t\t\t{\r\n\t\t\t\tbRet = FALSE;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n/*\t\t\tif(FlushFileBuffers(hFile)==FALSE)\r\n\t\t\t{\r\n\t\t\t\tbRet = FALSE;\r\n\t\t\t\tbreak;\r\n\t\t\t}*/\r\n\t\t}\r\n\t\tCloseHandle(hFile);\r\n\t}\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_WriteLine.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ļд - дı\r\n/*\r\n    øʽ ߼͡ дı  дıļţͨ дı...  - ϵͳֿ֧->ļд\r\n    ӢƣWriteLine\r\n    дһлıݵļеǰдλôÿеβԶϻسзɹ棬ʧܷؼ١ΪһԱظӡ\r\n    <1>ΪдıļšΪͣintļɡļء\r\n    <2>ΪдıΪͨͣallֵΪıݣԶת޷תΪֽڼӳָ롢ûԶͣдݡ\r\n*/\r\n\r\n\r\nLIBAPI(BOOL, krnln_WriteLine)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn NULL;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn NULL;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\tBOOL bRet = FALSE;\r\n\r\n\tif(pFile->nType ==1)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPSTR pData;\r\n\t\t\tBOOL bNeedFree = FALSE;\r\n\t\t\tif(pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\tpData = pArgInf[i].m_pText;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tpData = SDataToStr(&pArgInf[i]);\r\n\t\t\t\tif(pData == NULL)\r\n\t\t\t\t{\r\n\t\t\t\t\tWriteFile(hFile,\"\\r\\n\",2,&dwNumOfByteRead,NULL);\r\n//\t\t\t\t\tFlushFileBuffers(hFile);\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tbNeedFree = TRUE;\r\n\t\t\t}\r\n\r\n\t\t\tINT nLen = mystrlen(pData);\r\n\t\t\tif(nLen>0)\r\n\t\t\t{\r\n\t\t\t\tif(WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL))\r\n\t\t\t\t{\r\n\t\t\t\t\tWriteFile(hFile,\"\\r\\n\",2,&dwNumOfByteRead,NULL);\r\n\t\t\t\t\t//if(FlushFileBuffers(hFile)==FALSE)\r\n\t\t\t\t\t\t//bRet = FALSE;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tbRet = FALSE;\r\n\t\t\t}\r\n\r\n\t\t\tif(bNeedFree)\r\n\t\t\t\tfree(pData);\r\n\r\n\t\t\tif(bRet == FALSE)\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPSTR pData;\r\n\t\t\tBOOL bNeedFree = FALSE;\r\n\t\t\tif(pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\tpData = pArgInf[i].m_pText;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tpData = SDataToStr(&pArgInf[i]);\r\n\t\t\t\tif(pData == NULL)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tbNeedFree = TRUE;\r\n\t\t\t}\r\n\r\n\t\t\tINT nLen = mystrlen(pData);\r\n\t\t\tif(nLen>0)\r\n\t\t\t\tpMemFile->Write(pData,nLen);\r\n\t\t\tpMemFile->Write(\"\\r\\n\",2);\r\n\r\n\t\t\tif(bNeedFree)\r\n\t\t\t\tfree(pData);\r\n\t\t}\r\n\t}else if(pFile->nType ==3) //ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tunsigned char pszRN[2] = {2};\r\n\t\tint nPos = 0;\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPSTR pData;\r\n\t\t\tBOOL bNeedFree = FALSE;\r\n\t\t\tif(pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\tpData = pArgInf[i].m_pText;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tpData = SDataToStr(&pArgInf[i]);\r\n\t\t\t\tif(pData == NULL)\r\n\t\t\t\t{\r\n\t\t\t\t\tnPos = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r\n\t\t\t\t\tpszRN[0] = '\\r';\r\n\t\t\t\t\tpszRN[1] = '\\n';\r\n\t\t\t\t\tE_RC4_Calc(nPos, pszRN, 2, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\t\tWriteFile(hFile, pszRN, 2, &dwNumOfByteRead, NULL);\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tbNeedFree = TRUE;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tINT nLen = mystrlen(pData);\r\n\t\t\tif(nLen>0)\r\n\t\t\t{\r\n\t\t\t\tnPos = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\t\t\tE_RC4_Calc(nPos, (unsigned char*)pData, nLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\tif(WriteFile(hFile, (unsigned char*)pData, nLen, &dwNumOfByteRead, NULL))\r\n\t\t\t\t{\r\n\t\t\t\t\tnPos = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r\n\t\t\t\t\tpszRN[0] = '\\r';\r\n\t\t\t\t\tpszRN[1] = '\\n';\r\n\t\t\t\t\tE_RC4_Calc(nPos, pszRN, 2, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\t\tWriteFile(hFile, pszRN, 2, &dwNumOfByteRead, NULL);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tbRet = FALSE;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(bNeedFree)\r\n\t\t\t\tfree(pData);\r\n\t\t\t\r\n\t\t\tif(bRet == FALSE)\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_WriteMem.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n// - дڴ\r\n/*\r\n   øʽ ޷ֵ дڴ ͨ/ дڴݣ ڴָ룬 ڴߴݣ - ϵͳֿ֧->\r\n    ӢƣWriteMem\r\n    дָڴעñǰһҪȷṩڴʵЧʹóϾԻصӳDLLӳݡΪ߼\r\n    <1>ΪдڴݡΪͨͣallṩʱͬʱṩݡֵֻΪݻֽ顣\r\n    <2>Ϊڴָ롱Ϊͣintṩдڴ׵ֵַָ\r\n    <3>Ϊڴߴ硱ΪͣintԱʡԡṩڴЧߴ磬дݳ˳ߴֵԶгֵΪ -1 ʾڴߴ粻ơʡԣĬֵΪ -1\r\n*/\r\nLIBAPI(void, krnln_WriteMem)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tLPBYTE pData;\r\n\tDWORD dwLen;\r\n\tif((pArgInf[0].m_dtDataType & DT_IS_ARY) == DT_IS_ARY)//\r\n\t{\r\n\t\tpArgInf[0].m_dtDataType &=~DT_IS_ARY; //ȥ־\r\n\t\tif(pArgInf[0].m_dtDataType == SDT_BYTE)//ֽ\r\n\t\t{\r\n\t\t\tpData = (LPBYTE)GetAryElementInf(pArgInf[0].m_pAryData,dwLen);\r\n\t\t\tif(dwLen==0)\r\n\t\t\t\treturn;\r\n\t\t}else\r\n\t\t\treturn;\r\n\t}\r\n\telse \r\n\t{\r\n\t\tif(pArgInf[0].m_dtDataType==SDT_TEXT)\r\n\t\t{\r\n\t\t\tif(pArgInf[0].m_pText==NULL)\r\n\t\t\t\treturn;\r\n\t\t\t\r\n\t\t\tdwLen = mystrlen(pArgInf[0].m_pText);\r\n\t\t\tif(dwLen==0)\r\n\t\t\t\treturn;\r\n\t\t\tdwLen++;\r\n\t\t\tpData = (LPBYTE)pArgInf[0].m_pText;\r\n\t\t\t\r\n\t\t}else if(pArgInf[0].m_dtDataType==SDT_BIN)\r\n\t\t{\r\n\t\t\tif(pArgInf[0].m_pBin==NULL)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tLPINT p = (LPINT)pArgInf[0].m_pBin;\r\n\t\t\tdwLen = p[1];\r\n\t\t\tp+=2;\r\n\t\t\tpData = (LPBYTE)p;\r\n\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\t\r\n\t\t\tdwLen = GetSysDataTypeDataSize(pArgInf[0].m_dtDataType);\r\n\t\t\tif(dwLen==0)//ֵ֧\r\n\t\t\t\treturn;\r\n\t\t\tpData = (LPBYTE)&pArgInf[0].m_int;\r\n\t\t}\r\n\r\n\t}\r\n\tif(pArgInf[2].m_dtDataType != _SDT_NULL && pArgInf[2].m_int>0)\r\n\t{\r\n\t\tif(pArgInf[2].m_int<(INT)dwLen)\r\n\t\t\tdwLen = pArgInf[2].m_int;\r\n\t}\r\n\tmemcpy(pArgInf[1].m_pCompoundData,pData,dwLen);\r\n\t\r\n\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_WriteText.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ļд - дı\r\n/*\r\n    øʽ ߼͡ дı  дıļţͨ дı...  - ϵͳֿ֧->ļд\r\n    ӢƣWriteText\r\n    дһλıݵļеǰдλôɹ棬ʧܷؼ١ΪһԱظӡ\r\n    <1>ΪдıļšΪͣintļɡļء\r\n    <2>ΪдıΪͨͣallֵΪıݣԶת޷תΪֽڼӳָ롢ûԶͣдݡ\r\n*/\r\n\r\nLIBAPI(BOOL, krnln_WriteText)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn NULL;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn NULL;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\tBOOL bRet = FALSE;\r\n\r\n\tif(pFile->nType ==1)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPSTR pData;\r\n\t\t\tBOOL bNeedFree = FALSE;\r\n\t\t\tif(pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\tpData = pArgInf[i].m_pText;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tpData = SDataToStr(&pArgInf[i]);\r\n\t\t\t\tif(pData == NULL)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tbNeedFree = TRUE;\r\n\t\t\t}\r\n\r\n\t\t\tINT nLen = mystrlen(pData);\r\n\t\t\tif(nLen>0)\r\n\t\t\t{\r\n\t\t\t\tif(WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL))\r\n\t\t\t\t{\r\n//\t\t\t\t\tif(FlushFileBuffers(hFile)==FALSE)\r\n//\t\t\t\t\t\tbRet = FALSE;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tbRet = FALSE;\r\n\t\t\t}\r\n\r\n\t\t\tif(bNeedFree)\r\n\t\t\t\tfree(pData);\r\n\r\n\t\t\tif(bRet == FALSE)\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPSTR pData;\r\n\t\t\tBOOL bNeedFree = FALSE;\r\n\t\t\tif(pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\tpData = pArgInf[i].m_pText;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tpData = SDataToStr(&pArgInf[i]);\r\n\t\t\t\tif(pData == NULL)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tbNeedFree = TRUE;\r\n\t\t\t}\r\n\r\n\t\t\tINT nLen = mystrlen(pData);\r\n\t\t\tif(nLen>0)\r\n\t\t\t\tpMemFile->Write(pData,nLen);\r\n\r\n\t\t\tif(bNeedFree)\r\n\t\t\t\tfree(pData);\r\n\t\t\t\r\n\t\t}\r\n\r\n\t}else if(pFile->nType == 3)//ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tLPSTR pData;\r\n\t\t\tBOOL bNeedFree = FALSE;\r\n\t\t\tif(pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\tpData = pArgInf[i].m_pText;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tpData = SDataToStr(&pArgInf[i]);\r\n\t\t\t\tif(pData == NULL)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tbNeedFree = TRUE;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tINT nLen = mystrlen(pData);\r\n\t\t\tif(nLen>0)\r\n\t\t\t{\r\n\t\t\t\tINT nPos = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r\n\t\t\t\tE_RC4_Calc(nPos, (unsigned char*)pData, nLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\tif(!WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL))\r\n\t\t\t\t\tbRet = FALSE;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(bNeedFree)\r\n\t\t\t\tfree(pData);\r\n\t\t\t\r\n\t\t\tif(bRet == FALSE)\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ZeroAry.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n/*\r\n    øʽ ޷ֵ  ͨͱ ֵ - ϵͳֿ֧->\r\n    ӢƣZeroAry\r\n    ֵָڵгԱֵȫΪ㣬ӰάϢΪ\r\n    <1>ΪֵΪͨͣallṩʱֻṩ顣\r\n*/\r\n\r\nLIBAPI(void, krnln_ZeroAry)\r\n{\r\n\t// no data\r\n\tif(!ArgInf.m_ppAryData)\r\n\t\treturn;\r\n\r\n\t// not supported data type\r\n\tif(ArgInf.m_dtDataType==SDT_TEXT || ArgInf.m_dtDataType==SDT_BIN)\r\n\t\treturn;\r\n\t\r\n\t// get single element size\r\n\t// user defined struct is NOT supported, nLen will be zero\r\n\tDWORD dwElementSize = (DWORD)GetSysDataTypeDataSize(ArgInf.m_dtDataType);\r\n\tif(!dwElementSize)\r\n\t\treturn;\r\n\r\n\t// get first element and array length\r\n\tDWORD dwArrayLen = 0;\r\n\tvoid* pFirstElement = GetAryElementInf(*ArgInf.m_ppAryData, dwArrayLen);\r\n\tif(!pFirstElement || !dwArrayLen)\r\n\t\treturn;\r\n\r\n\t// zero all element\r\n\tmemset(pFirstElement, 0, dwElementSize * dwArrayLen);\t\r\n}"
  },
  {
    "path": "krnln/krnln_abs.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n// - ȡֵ\r\n/*\r\n    øʽ ˫С͡ ȡֵ ˫С ȡֵֵ - ϵͳֿ֧->\r\n    Ӣƣabs\r\n    ṩֵΪֱֽͣӷظֵΪ\r\n    <1>ΪȡֵֵΪ˫Сͣdouble\r\n*/\r\nLIBAPI(void, krnln_abs)\r\n{\r\n\tArgInf.m_double = fabs(ArgInf.m_double);\r\n\t__asm\r\n\t{\r\n\t\tmov eax,ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx,ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_asc.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ı - ȡ\r\n/*\r\n    øʽ ͡ ȡ ı ȡַı ȡַλãݣ - ϵͳֿ֧->ı\r\n    Ӣƣasc\r\n    ıָλôַĴ롣ָλóıȣ0Ϊ\r\n    <1>ΪȡַıΪıͣtext\r\n    <2>ΪȡַλáΪͣintԱʡԡ1Ϊλã2Ϊ2λãơʡԣĬΪλá\r\n*/\r\nLIBAPI(int, krnln_asc)\r\n{// ߺ \r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tINT nIdx;\r\n\tif(pArgInf[1].m_dtDataType == _SDT_NULL)\r\n\t\tnIdx = 0;\r\n\telse\r\n\t\tnIdx = pArgInf[1].m_int - 1;\r\n\r\n\tif (nIdx < 0) return 0;\r\n\r\n\tchar* cp = pArgInf[0].m_pText;\r\n\tif (!cp) return 0;\r\n\r\n\tchar* pStart = pArgInf[0].m_pText + nIdx;\r\n\r\n\t//ǷԽ磬Ҳñڴ档\r\n\twhile (*cp && cp < pStart)\r\n\t\tcp++;\r\n\r\n\treturn (int)*cp;\r\n}\r\n// { // ԭ\r\n// \tPMDATA_INF pArgInf = &ArgInf;\r\n// \tINT nLen = strlen(ArgInf.m_pText);\r\n// \tif(nLen==0)return 0;\r\n// \tINT nIdx;\r\n// \tif(pArgInf[1].m_dtDataType == _SDT_NULL)\r\n// \t\tnIdx = 1;\r\n// \telse\r\n// \t\tnIdx = pArgInf[1].m_int;\r\n// \tif(nIdx <= 0 || nIdx > nLen)return 0;\r\n// \r\n// \treturn ArgInf.m_pText[nIdx-1];\t\r\n// }\r\n"
  },
  {
    "path": "krnln/krnln_atn.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n// - \r\n/*\r\n    øʽ ˫С͡  ˫С ䷴ֵֵ - ϵͳֿ֧->\r\n    Ӣƣatn\r\n    ָķֵΪ\r\n    <1>Ϊ䷴ֵֵΪ˫Сͣdouble\r\n*/\r\nLIBAPI(void, krnln_atn)\r\n{\r\n\tArgInf.m_double = atan(ArgInf.m_double);\r\n\t__asm\r\n\t{\r\n\t\tmov eax,ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx,ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_band.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//λ - λ\r\n/*\r\n    øʽ ͡ λ  λֵһ λֵ...  - ϵͳֿ֧->λ\r\n    Ӣƣband\r\n    ֵĳͬλΪ1򷵻ֵĶӦλҲΪ1Ϊ0ؼĽΪмһԱظӡ\r\n    <1>ΪλֵһΪͣint\r\n    <2>ΪλֵΪͣint\r\n*/\r\nLIBAPI(int, krnln_band)\r\n{\r\n\tPMDATA_INF pArg = &ArgInf;\r\n\tint n = pArg->m_int;\r\n\tfor(int i=1;i< nArgCount;i++)\r\n\t{\r\n\t\tn &= pArg[i].m_int;\r\n\t}\r\n\r\n\treturn n;\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_beep.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ϵͳ - \r\n/*\r\n    øʽ ޷ֵ   - ϵͳֿ֧->ϵͳ\r\n    Ӣƣbeep\r\n    ͨý豸ȷһΪ\r\n*/\r\nLIBAPI(void, krnln_beep)\r\n{\r\n\t::MessageBeep(0xffffffff);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_bin.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ֽڼ - ȡظֽڼ\r\n/*\r\n    øʽ ֽڼ ȡظֽڼ  ظֽڼ ظֽڼ - ϵͳֿ֧->ֽڼ\r\n    Ӣƣbin\r\n    һֽڼаָֽڼظΪ\r\n    <1>ΪظΪͣint\r\n    <2>ΪظֽڼΪֽڼbinֽڼڽصֽڼΪգһֽڼ\r\n*/\r\nLIBAPI(void*, krnln_bin)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[0].m_int <=0 || pArgInf[1].m_pBin==NULL)\r\n\t\treturn NULL;\r\n\tINT nLen = pArgInf[1].m_pInt[1];\r\n\tif(nLen==0)return NULL;\r\n\r\n\tLPBYTE pSrc = pArgInf[1].m_pBin + 2*sizeof(INT);\r\n\tINT nBuf = nLen * pArgInf[0].m_int;\r\n\tLPBYTE pData = (LPBYTE)E_MAlloc_Nzero(nBuf+2*sizeof(INT));\r\n\tLPBYTE pDest = pData;\r\n\t*(LPINT)pDest=1;\r\n\tpDest+=sizeof(INT);\r\n\t*(LPINT)pDest=nBuf;\r\n\tpDest+=sizeof(INT);\r\n\tfor(INT i=0;i<pArgInf[0].m_int;i++)\r\n\t{\r\n\t\tmemcpy(pDest,pSrc,nLen);\r\n\t\tpDest+=nLen;\r\n\t}\r\n\treturn pData;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_bnot.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//λ - λȡ\r\n/*\r\n    øʽ ͡ λȡ  ȡֵ - ϵͳֿ֧->λ\r\n    Ӣƣbnot\r\n    ֵָÿһλֵȡ󷵻ءΪм\r\n    <1>ΪȡֵΪͣint\r\n*/\r\nLIBAPI(int, krnln_bnot)\r\n{\r\n\tint n = ~ArgInf.m_int;\r\n\treturn n;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_bor.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//λ - λ\r\n/*\r\n    øʽ ͡ λ  λֵһ λֵ...  - ϵͳֿ֧->λ\r\n    Ӣƣbor\r\n    ֵһֵĳһλΪ㣬򷵻ֵĶӦλΪ1Ϊ0ؼĽΪмһԱظӡ\r\n    <1>ΪλֵһΪͣint\r\n    <2>ΪλֵΪͣint\r\n*/\r\nLIBAPI(int, krnln_bor)\r\n{\r\n\tPMDATA_INF pArg = &ArgInf;\r\n\tint n = pArg->m_int;\r\n\tfor(int i=1;i< nArgCount;i++)\r\n\t{\r\n\t\tn |= pArg[i].m_int;\r\n\t}\r\n\r\n\treturn n;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_bxor.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//λ - λ\r\n/*\r\n    øʽ ͡ λ  λֵһ λֵ...  - ϵͳֿ֧->λ\r\n    Ӣƣbxor\r\n    ֵӦλֵȣ򷵻ֵĶӦλΪ1Ϊ0ؼĽΪмһԱظӡ\r\n    <1>ΪλֵһΪͣint\r\n    <2>ΪλֵΪͣint\r\n*/\r\nLIBAPI(int, krnln_bxor)\r\n{\r\n\tPMDATA_INF pArg = &ArgInf;\r\n\tint n = pArg->m_int;\r\n\tfor(int i=1;i< nArgCount;i++)\r\n\t{\r\n\t\tn ^= pArg[i].m_int;\r\n\t}\r\n\r\n\treturn n;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_chr.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ı - ַ\r\n/*\r\n    øʽ ı͡ ַ ֽ ȡַַ룩 - ϵͳֿ֧->ı\r\n    Ӣƣchr\r\n    һıаַָصַΪ\r\n    <1>Ϊȡַַ롱Ϊֽͣbyte\r\n*/\r\nLIBAPI(char*, krnln_chr)\r\n{\r\n\tif(ArgInf.m_byte==0)return NULL;\r\n\r\n\tchar *pText = (char*)E_MAlloc_Nzero(2);\r\n\tpText[0]=ArgInf.m_byte;\r\n\tpText[1]=0;\r\n\treturn pText;\t\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_close.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ļд - رļ\r\n/*\r\n    øʽ ޷ֵ رļ  رյļţ - ϵͳֿ֧->ļд\r\n    Ӣƣclose\r\n    رձ򿪵ĸļΪ\r\n    <1>ΪرյļšΪͣintֵָرյļţļɡļء\r\n*/\r\nLIBAPI(void, krnln_close)\r\n{\r\n\tif(ArgInf.m_pCompoundData)\r\n\t\tCloseEfile((PFILEELEMENT)ArgInf.m_pCompoundData);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_cos.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n// - \r\n/*\r\n    øʽ ˫С͡  ˫С мĽǣ - ϵͳֿ֧->\r\n    Ӣƣcos\r\n    ָǵֵΪ\r\n    <1>ΪмĽǡΪ˫СͣdoubleʹõλΪȡΪ˽Ƕתɻȣ뽫Ƕȳ #pi / 180Ϊ˽תɽǶȣ뽫ȳ 180 / #piֵڵ 2  63 ηСڵ -2  63 η¼\r\n*/\r\nLIBAPI(void, krnln_cos)\r\n{\r\n\tArgInf.m_double = cos(ArgInf.m_double);\r\n\t__asm\r\n\t{\r\n\t\tmov eax,ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx,ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_create.cpp",
    "content": "#include \"stdafx.h\"\n#include\"shlwapi.h\"\n#pragma comment(lib,\"shlwapi.lib\") \n\n#if (_MSC_VER <= 1600)\nWINOLEAUTAPI VarDateFromUdateEx(UDATE* pudateIn, LCID lcid, ULONG dwFlags, DATE* pdateOut);\n#endif\n\n#pragma pack(push, 1)\n\n/*©ӿ*/\ntypedef struct _ColumnInfo//ֶϢ\n{\n\tconst char* Name;\n\tint Type;\n\tint StrDataLenth;\n}ColumnInfo, * lpColumInfo;\n\nint  CreateEdb(const char* Filename, ColumnInfo* ColumnArry, int ColumnNum);\nBOOL IsValidName(const char* text);\nchar* refilename(const char* Filename, const char* extensionname);\n\nstruct EDTDATA//EDT\n{\n\tEDTDATA() {\n\t\tTypename = 'TDEW'; //ʶWEDT\n\t\tdelimiter1 = 0x00010000;//ָ\n\t\tcheck = 0;//COleDateTime::GetTickCount()ÿδ򿪻ˢ£ԭEDB;;\n\t\tdelimiter2 = 1;//ָ\n\t\tmemset(data, 0, 492);\n\t}\n\tint Typename;//ʶWEDT\n\tint delimiter1;//ָ0010 65536 Ҳshortôд;\n\tdouble  check;//COleDateTime::GetTickCount()ÿδ򿪻ˢ£ԭEDB;;\n\tint delimiter2;//ָ0000 0;//ָ1000 1;\n\tBYTE data[492];\n};\nstruct EDBDATA//EDB\n{\n\tEDBDATA() {\n\t\tTypename = 'BDEW'; //ʶWEDB\n\t\tdelimiter1 = 0x00010000;//ָ0010 65536 Ҳshortôд;\n\t\tcheck = 0;//COleDateTime::GetTickCount()ÿδ򿪻ˢ£ԭEDB;;\n\t\tdelimiter2[0] = 0;//ָ0000 0;\n\t\tdelimiter2[1] = 1;//ָ1000 1;\n\t\tTotalLength = 0;//ЧֶStorageLength4+ͳ* 4;;\n\t\tmemset(blankBYTE, 0, 84);\n\t\tValidColumnNum = 0;//112λ󴢴intЧֶ;\n\t}\n\tint Typename;//ʶWEDB\n\tint delimiter1;//ָ0010 65536 Ҳshortôд;\n\tdouble  check;//COleDateTime::GetTickCount()ÿδ򿪻ˢ£ԭEDB;;\n\tint delimiter2[2];//ָ0000 0;//ָ1000 1;\n\tint  TotalLength;//ЧֶStorageLength4+ͳ* 4;;\n\tBYTE  blankBYTE[84];//Ŀǰδ֪84հ׳ȣӦ;\n\tint ValidColumnNum;//112λ󴢴intЧֶ;\n};\n\nstruct COLIMNDATA//ֶϢ\n{\n\tCOLIMNDATA() {\n\t\tmemset(this, 0, sizeof(COLIMNDATA));\n\t\tDataLenth = 20;\n\t}\n\tchar ColumnName[16];//16,߽\n\tBYTE delimiter[4];//ָ\n\tint ColumnType;\n\tint DataLenth;//ݳ;\n\tint strlenth;//ΪıҪ;\n\tBYTE Table[40];\n};\n#pragma pack(pop)\n\ndouble  GetCOLeDateTime()//Ϊ¼ԭEDB,Уʱ䣬Ϊ˰EDT\n{\n    SYSTEMTIME time;\n    GetLocalTime(&time);\n    double pdateOut;\n    UDATE pudateIn;\n    pudateIn.st.wDayOfWeek = time.wDayOfWeek;\n    pudateIn.st.wYear = time.wYear;\n    pudateIn.st.wHour = time.wHour;\n    pudateIn.st.wMinute = time.wMinute;\n    pudateIn.st.wDay = time.wDay;\n    pudateIn.st.wMonth = time.wMonth;\n    pudateIn.st.wSecond = time.wSecond;\n    VarDateFromUdateEx(&pudateIn, 0x409u, 0x80000000, &pdateOut);\n    return pdateOut;\n\n}//\n\nint  CreateEdb(const char* Filename, ColumnInfo* ColumnArry, int ColumnNum)\n{\n\tBYTE* Data = NULL;\n\t// int DataLenth = 0;\n\tint Index;//жֶظ\n\tint i;//ȫּƴ\n\tint ValidColumnNum = 0;//Чֶ\n\tint StorageLength;//洢;\n\tint  NowColumnType = 0;//ǰֶ\n\tbool HaveByteorRemark = false;//Ƿֽͻע;\n\t/**/\n\tint  TotalLength = 4;//οռ¼ֶ󳤶;\n\tint DataLenth = 4;//ʼֶݳ\n\tint strlenth = 0;//ıݳ\n\tint Nowstrlenth = 0;//ıݳ\n\tconst char* NowColumnName = NULL;//ǰֶ;\n\tEDBDATA EdbData;//ṹ;\n\tdouble checktime = 0;//ļУ;\n\tHANDLE hFile = NULL;\n\tHANDLE hDataFile = NULL;\n\n\t//BYTE ColumnNameByte[16] = {  };//ҹ̶Ϊ16;\n\t//BYTE NowData[72];\n\t//lpReOpenBuff;//ԭʹ;\n\n\tif (!Filename) {\n\t\treturn -3;\n\t}\n\tif (ColumnNum <= 0) {\n\t\treturn -16;\n\t}\n\tfor (i = 0; i < ColumnNum; i++) {\n\t\t//cout << ColumnArry[i].Name;\n\t\tif (!ColumnArry[i].Name)// ɨֶͣԺֶβɨ{\n\t\t{\n\t\t\tColumnNum = ValidColumnNum;\n\t\t\tif (ValidColumnNum <= 0) {\n\t\t\t\treturn -16;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (!IsValidName(ColumnArry[i].Name) || strlen(ColumnArry[i].Name) > 16) {\n\t\t\t\treturn -18;\n\t\t\t}\n\t\t\tNowColumnType = ColumnArry[i].Type;\n\t\t\tStorageLength = 4;\n\t\t\tif (NowColumnType > 12) { // ʹ12\n\t\t\t\treturn -17;\n\t\t\t}\n\t\t\tswitch (NowColumnType)\n\t\t\t{\n\t\t\tcase 1:\n\t\t\t\tStorageLength = 1;\n\t\t\t\tbreak;\n\t\t\tcase 7:\n\t\t\t\tStorageLength = 1;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tStorageLength = 2;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tStorageLength = 8;\n\t\t\t\tbreak;\n\t\t\tcase 6:\n\t\t\t\tStorageLength = 8;\n\t\t\t\tbreak;\n\t\t\tcase 8:\n\t\t\t\tStorageLength = 8;\n\t\t\t\tbreak;\n\t\t\tcase 10:\n\t\t\t\tStorageLength = 0;\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tStorageLength = 4;\n\t\t\t\tbreak;\n\t\t\tcase 5:\n\t\t\t\tStorageLength = 4;\n\t\t\t\tbreak;\n\t\t\tcase 9:\n\t\t\t\tStorageLength = 4;\n\t\t\t\tbreak;\n\t\t\tcase 11:\n\t\t\t\tStorageLength = 4;\n\t\t\t\tbreak;\n\t\t\tcase 12:\n\t\t\t\tStorageLength = 4;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn -17;//Чֶ\n\t\t\t}\n\n\t\t\tif (NowColumnType == 10) { // Ϊı\n\t\t\t\tStorageLength = ColumnArry[i].StrDataLenth;\n\t\t\t\tif (StorageLength < 1 || StorageLength>1024) {\n\t\t\t\t\treturn -19;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (HaveByteorRemark == false && (NowColumnType == 12 || NowColumnType == 11)) {\n\t\t\t\tHaveByteorRemark = true;\n\t\t\t}\n\t\t\tTotalLength = TotalLength + StorageLength; // ܳȣԺÿչһ¿ռ¼Ϊһܳ;\n\t\t\tValidColumnNum = ValidColumnNum + 1; // ȫԺЧֶԼ1Чֶνͣ;\n\t\t}\n\t}\n\n\t//жǷظֶ\n\tfor (i = 0; i < ColumnNum; i++) {\n\t\tNowColumnName = ColumnArry[i].Name;\n\t\tfor (Index = 0; Index < ColumnNum; ++Index) {\n\t\t\tif (Index != i) {\n\t\t\t\tif (0 == strcmp(NowColumnName, ColumnArry[Index].Name)) {\n\t\t\t\t\treturn -20;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t; // ΪŴ汾Ӧôдģû⣬Ͼ벻˴Gڴ;\n\t; // hFile=OpenFile (refilename (Filename, \".edb\"), lpReOpenBuff, λ (E_OF_SHARE_EXCLUSIVE, E_OF_CREATE, E_OF_WRITE));\n\t; // ִá;\n\t; // HANDLE hFile = CreateFileA(refilename(Filename, \".edb\").c_str(), GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, 0);;\n\tchar* infilename = refilename(Filename, \".edb\");\n\thFile = CreateFileA(infilename, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, 0);//CREATE_ALWAYSΪ\"ʹļǿ\"\n\tdelete[]infilename;\n\t; //  (refilename (Filename, \".edb\"));\n\t; // (hFile == INVALID_HANDLE_VALUE);\n\t; // (hFile == HFILE_ERROR);\n\tif (hFile == INVALID_HANDLE_VALUE) {\n\t\tCloseHandle(hFile);\n\t\treturn -1;\n\t}\n\t; // memset (ȡݵַ (EdbData), 0, 160)  ; // EdbData={};\n\tchecktime = GetCOLeDateTime();\n\tEdbData.check = checktime;\n\tEdbData.ValidColumnNum = ValidColumnNum;\n\tEdbData.TotalLength = TotalLength;\n\t// ṹ壬οﵽΪֹʹ;\n\t// Уʱ䣬ڼݺͰEDTļ;\n\t// ȫͬģֽڼ᷽һ㣬C++ýṹ;\n\n\n\tCOLIMNDATA* AllColumnData = new COLIMNDATA[ColumnNum];\n\n\tfor (i = 0; i < ColumnNum; i++) {\n\t\t//COLIMNDATA NowData;\n\n\t\tNowColumnType = ColumnArry[i].Type;\n\t\tmemcpy(AllColumnData[i].ColumnName, ColumnArry[i].Name, strlen(ColumnArry[i].Name));\n\t\tAllColumnData[i].ColumnType = NowColumnType;\n\t\tif (NowColumnType == 10) { // Ϊıͳ{\n\t\t\tstrlenth = ColumnArry[i].StrDataLenth;\n\t\t}\n\t\telse {\n\t\t\tstrlenth = 0;\n\t\t}\n\t\tif (NowColumnType == 10) {\n\t\t\tNowstrlenth = ColumnArry[i].StrDataLenth;\n\t\t}\n\t\telse {\n\t\t\tif (13 > NowColumnType && NowColumnType > 0) {\n\t\t\t\tswitch (NowColumnType)\n\t\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tNowstrlenth = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 7:\n\t\t\t\t\tNowstrlenth = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tNowstrlenth = 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tNowstrlenth = 8;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 6:\n\t\t\t\t\tNowstrlenth = 8;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\tNowstrlenth = 8;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 10:\n\t\t\t\t\tNowstrlenth = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tNowstrlenth = 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\t\tNowstrlenth = 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9:\n\t\t\t\t\tNowstrlenth = 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 11:\n\t\t\t\t\tNowstrlenth = 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 12:\n\t\t\t\t\tNowstrlenth = 4;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tNowstrlenth = -1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tNowstrlenth = -1;\n\t\t\t}\n\t\t}\n\t\tAllColumnData[i].DataLenth = DataLenth;\n\t\tDataLenth = DataLenth + Nowstrlenth; // ֶ󳤶;\n\t\tAllColumnData[i].strlenth = strlenth; // ıͳ;\n\t}\n\n\tDataLenth = sizeof(EdbData) + sizeof(COLIMNDATA) * ColumnNum;\n\tData = new BYTE[DataLenth];\n\tmemcpy(Data, &EdbData, sizeof(EdbData));\n\tmemcpy(Data + sizeof(EdbData), AllColumnData, sizeof(COLIMNDATA) * ColumnNum);\n\n\tWriteFile(hFile, Data, DataLenth, 0, 0);\n\n\tdelete[]AllColumnData;\n\tdelete[]Data;\n\tCloseHandle(hFile);\n\n\tif (HaveByteorRemark == true) { // Ϊֽڼעͣ򴴽EDTļ{\n\t\tchar* inedtname = refilename(Filename, \".EDT\");\n\t\thDataFile = CreateFileA(inedtname, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, 0);\n\t\tdelete[]inedtname;\n\t\t; // hDataFile=OpenFile (refilename (Filename, \".edt\"), lpReOpenBuff, 4113);\n\t\tif (hDataFile == INVALID_HANDLE_VALUE) {\n\t\t\treturn -50;\n\t\t}\n\t\tEDTDATA EdTData;\n\t\tEdTData.check = checktime;\n\t\tif (WriteFile(hDataFile, &EdTData, sizeof(EDTDATA), 0, 0) == 0) {\n\t\t\tCloseHandle(hDataFile);\n\t\t\treturn -50;\n\t\t}\n\t\tCloseHandle(hDataFile);\n\t}\n\treturn 0;\n}\n\nchar* refilename(const char* Filename, const char* extensionname) {\n    char* NewPath = new char[MAX_PATH];\n    char* suffix;\n    strcpy(NewPath, Filename);\n    suffix = PathFindExtensionA(extensionname);\n    if (strlen(suffix) > 1)\n    {\n        if (PathRenameExtensionA(NewPath, suffix)) {\n            return NewPath;\n        };\n        return NewPath;\n    }\n    return NewPath;\n}\n\n//ǷΪȫ\nbool Isfullwidthnum(const char str, const char str2) {\n    char str_[2] = { str2, str };\n    short num = *(short*)((char*)str_);\n    return num >= (short)0xA3C1u && num <= (short)0xA3DAu || num >= (short)0xA3E1u && num <= (short)0xA3FAu;;\n};\n\n//ǷΪȫĸ\nbool Isfullwidthletter(const char str, const char str2) {\n    char str_[2] = { str2, str };\n    short letter = *(short*)((char*)str_);\n    return letter >= (short)0xA3C1u && letter <= (short)0xA3DAu || letter >= (short)0xA3E1u && letter <= (short)0xA3FAu;;\n};\n\nBOOL Isvalidchar(const char* str) {\n    char first = *str;\n    BOOL result;\n    if (first & 0x80)//ıΪ\n    {\n        char second = *(str + 1);\n        if (((BYTE)first != 163 || (BYTE)second != 223) && !Isfullwidthnum(first, second) && !Isfullwidthletter(first, second) && ((BYTE)first < 0x81u || (BYTE)first > 0xA0u) && (BYTE)first < 0xAAu) {\n            if (first == -87)//char[0]==-87ŶΣchar[1]==96Ϊ`Ϊ\n            {\n                if (second != 96) {\n                    return -1;\n                }\n                return 1;\n            }\n            if (first == -92)//char[0]==-87ĶΣchar[1]>96Ϊ`Ϊ\n            {\n                if ((BYTE)second >= 0xA1u)\n                {\n                    if ((BYTE)second > 0xF3u) {\n                        return -1;\n                    }\n                    return 1;\n                }\n                return -1;\n            }\n            if (first != -91 || (BYTE)second < 0xA1u || (BYTE)second > 0xF6u) {//Ƿַ{}\n                return -1;\n            }\n        }\n        return 1;\n    };\n    if (first == 95 || first >= 48 && first <= 57 || first >= 65 && first <= 90 || first >= 97 && first <= 122) {//Сдַ\n        result = 0;\n    }\n    else {\n        result = -1;\n    }\n    return result;\n}\n\nBOOL IsValidName(const char* text) {\n    if (!text) {\n        return 0;\n    }\n    BYTE NowChar = 0;\n    int textlenth = strlen(text);\n\n    if (*text >= 48 && *text <= 57 || *text == 46) {\n        return false;\n    }\n    if (*text & 0x80 && Isfullwidthnum(text[0], text[1])) {\n        return false;\n    }\n\n    for (int i = 0; i < textlenth; i++) {\n        NowChar = text[i];\n\n        if (!IsDBCSLeadByteEx(CP_ACP, NowChar)) {\n            continue;\n        };\n        i++;\n        BOOL isvalidchar = Isvalidchar(text);\n        if (isvalidchar == -1)\n        {\n            return false;\n        }\n    }\n    return 1;\n}\n\n\nLIBAPI(BOOL, krnln_create)\n{\n    PMDATA_INF pArgInf = &ArgInf;\n\n\n    if (pArgInf[0].m_dtDataType != SDT_TEXT)\n    {\n        return FALSE;\n    }\n\n    const char* filename = pArgInf[0].m_pText;\n\n\n    if (nArgCount != 2)\n    {\n        return FALSE;\n    }\n\n    DWORD nElementCount;\n    lpColumInfo* pAryDataBegin = (lpColumInfo*)GetAryElementInf(pArgInf[1].m_pAryData, nElementCount);\n\n    if (nElementCount < 1) {//涨Ϊ\n        return FALSE;\n    }\n    ColumnInfo* InAryData = new ColumnInfo[nElementCount];\n    if (!pAryDataBegin || !InAryData)\n    {\n        delete[]InAryData;\n        return FALSE;\n    }\n\n    if (nElementCount > 0)\n    {\n        for (DWORD i = 0; i < nElementCount; i++) {\n            InAryData[i].Name = pAryDataBegin[i]->Name;\n            InAryData[i].StrDataLenth = pAryDataBegin[i]->StrDataLenth;\n            InAryData[i].Type = pAryDataBegin[i]->Type;\n\n        }\n\n    }//memcppy\n    BOOL ret = CreateEdb(filename, InAryData, nElementCount) == 0;\n    delete[]InAryData;\n    return ret;\n}\n\n"
  },
  {
    "path": "krnln/krnln_day.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n//ʱ - ȡ\r\n/*\r\n    øʽ ͡ ȡ ʱ ʱ䣩 - ϵͳֿ֧->ʱ\r\n    Ӣƣday\r\n    һֵΪ 1  31 ֮ʾһеĳһաΪ\r\n    <1>Ϊʱ䡱Ϊʱͣdate\r\n*/\r\nLIBAPI(int, krnln_day)\r\n{\r\n\tINT nYear, nMonth, nDay;\r\n\tGetDatePart(ArgInf.m_date, nYear, nMonth, nDay);\r\n\treturn nDay;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_exp.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n// - 󷴶\r\n/*\r\n    øʽ ˫С͡ 󷴶 ˫С ䷴ֵ - ϵͳֿ֧->\r\n    Ӣƣexp\r\n     eȻĵףĳηΪ\r\n    <1>Ϊ䷴ֵΪ˫Сͣdoubleֵ 709.782712893¼\r\n*/\r\nLIBAPI(void, krnln_exp) // ֱ޸eaxedxֵֵָ͡\r\n{\r\n\tArgInf.m_double = exp(ArgInf.m_double);\r\n\t__asm\r\n\t{\r\n\t\tmov eax,ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx,ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_feof.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n#include \"Myfunctions.h\"\r\n//ļд - Ƿļβ\r\n/*\r\n    øʽ ߼͡ Ƿļβ  ļţ߼ ǷΪжıѶݣ - ϵͳֿ֧->ļд\r\n    Ӣƣfeof\r\n    ָļĶдλѾڸļݵβ򷵻棬򷵻ؼ١Ϊ\r\n    <1>ΪļšΪͣintֵָļţļűɡļء\r\n    <2>ΪǷΪжıѶꡱΪ߼ͣboolԱʡԡֵΪһֽΪֵֽ 0  26 ıֹǷߵǰдλѴڸļݵβ档ʡԻΪ٣д˼顣\r\n\r\n*/\r\nLIBAPI(BOOL, krnln_feof)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn TRUE;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn TRUE;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tINT nRet = TRUE;\r\n\r\n\tif(pFile->nType ==1 || pFile->nType == 3)//ļ ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tDWORD dwHi;\r\n\t\tUINT nLen = ::GetFileSize(hFile,&dwHi);\r\n\t\tUINT nLoc = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\tif(nLoc != HFILE_ERROR)\r\n\t\t{\r\n\t\t\tif(nLoc < nLen)\r\n\t\t\t{\r\n\t\t\t\tnRet = FALSE;\r\n\t\t\t\t\r\n\t\t\t\tif(pArgInf[1].m_dtDataType != _SDT_NULL && pArgInf[1].m_bool)\r\n\t\t\t\t{\r\n\t\t\t\t\tINT nData;\r\n\t\t\t\t\tLPSTR pStr = (LPSTR)&nData;\r\n\t\t\t\t\tDWORD dwByteTop;\r\n\t\t\t\t\tBOOL bRet = ReadFile(hFile, pStr, sizeof(BYTE), &dwByteTop, 0);\r\n\t\t\t\t\tSetFilePointer(hFile,nLoc,NULL,FILE_BEGIN);\r\n\t\t\t\t\tif (pFile->nType==3) //ļ\r\n\t\t\t\t\t\tE_RC4_Calc(nLoc, (unsigned char*)pStr, sizeof(BYTE), pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\r\n\t\t\t\t\tif(bRet && (*pStr==0 || *pStr == 26))\r\n\t\t\t\t\t\tnRet = TRUE;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\t\tUINT nLen = pMemFile->GetFileSize();\r\n\t\tUINT nLoc = pMemFile->GetPosition();\r\n\t\tif(nLoc < nLen)\r\n\t\t{\r\n\t\t\tnRet = FALSE;\r\n\t\t\t\r\n\t\t\tif(pArgInf[1].m_dtDataType != _SDT_NULL && pArgInf[1].m_bool)\r\n\t\t\t{\r\n\t\t\t\tINT nData;\r\n\t\t\t\tLPSTR pStr = (LPSTR)&nData;\r\n\t\t\t\tBOOL bRet = pMemFile->Read (pStr, sizeof(BYTE));\r\n\t\t\t\tpMemFile->Seek(nLoc,CMyMemFile::begin);\r\n\t\t\t\tif(bRet && (*pStr==0 || *pStr == 26))\r\n\t\t\t\t\tnRet = TRUE;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn nRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_fgets.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <conio.h>\r\n//̨ - ׼\r\n/*\r\n    øʽ ı͡ ׼ ߼ Ƿԣݣ - ϵͳֿ֧->̨\r\n    Ӣƣfgets\r\n    ڱ׼豸2048ַһıûݡעⱾֻڿ̨ʹáΪ\r\n    <1>ΪǷԡΪ߼ͣboolԱʡԡʱǷʾַΪٲʾΪʾʡԣĬֵΪ棬ԡͨΪϢ\r\n*/\r\nLIBAPI(char*, krnln_fgets)\r\n{\r\n\tif(ArgInf.m_dtDataType == _SDT_NULL || ArgInf.m_bool){\r\n\r\n\t\tHANDLE hCon = GetStdHandle(STD_INPUT_HANDLE);\r\n\t\tif(hCon==NULL)\r\n\t\t\treturn NULL;\r\n\t\tchar Buff[2048];\r\n\t\tDWORD dwSize;\r\n\t\tLPSTR pText = NULL;\r\n\t\tif(ReadConsole(hCon,Buff,2048,&dwSize,NULL))\r\n\t\t//if(ReadFile(hCon,Buff,2048,&dwSize,NULL))\r\n\t\t{\r\n\t\t\t\r\n\t\t\t\r\n\t\t\tif(dwSize>2)\r\n\t\t\t{\r\n\t\t\t\tfor(INT i=0;i<(INT)dwSize;i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(Buff[i]==0)\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\telse if(Buff[i]=='\\r')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tBuff[i]=0;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t} else if(Buff[i]=='\\n')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tBuff[i]=0;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tpText = CloneTextData(Buff,dwSize);\r\n\t\t\t\r\n\t\t}\r\n\t\treturn pText ;\r\n\t}else{\r\n\t\tchar Buff[2049];\r\n\t\tINT nIdx = 0;\r\n\t\tBuff[2048]=0;\r\n\t\tdo\r\n\t\t{\r\n#if _MSC_VER > 1200\r\n\t\t\tINT nChr = _getch();\r\n#else\r\n\t\t\tINT nChr = getch();\r\n#endif\r\n\t\t\tBuff[nIdx] = (char)nChr;\r\n\t\t\tif ( nChr == 13 )\r\n\t\t\t\tbreak;\r\n\t\t\t++nIdx;\r\n\t\t}\r\n\t\twhile ( nIdx < 2048 );\r\n\t\treturn CloneTextData(Buff,nIdx);\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_fix.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n// - ȡ\r\n/*\r\n    øʽ ͡ ȡ ˫С ȡС - ϵͳֿ֧->\r\n    Ӣƣfix\r\n    һС֡롰ȡ֮ͬΪ\r\nСΪشڻڸСĵһȡ᷵СڻڸСĵһ磬 -7.8 ת -7ȡ -7.8 ת -8Ϊ\r\n    <1>ΪȡСΪ˫Сͣdouble\r\n*/\r\ndouble __cdecl ProcessDouble2(double a1)\r\n{\r\n  double v1; // st7@1\r\n  double result; // st7@6\r\n  double v3; // [sp+0h] [bp-8h]@1\r\n  signed int v4; // [sp+Ch] [bp+4h]@4\r\n\r\n  v1 = modf(a1, &v3);\r\n  if ( v1 < 0.0 )\r\n    v1 = -v1;\r\n  if ( v1 <= 0.999999999999 )\r\n  {\r\n    result = a1;\r\n  }\r\n  else\r\n  {\r\n    v4 = -1;\r\n    if ( v3 >= 0.0 )\r\n      v4 = 1;\r\n    result = (double)v4 + v3;\r\n  }\r\n  return result;\r\n}\r\n\r\nLIBAPI(int, krnln_fix)\r\n{\r\n\tINT nRet;\r\n/*\tif(0<ArgInf.m_double)\r\n\t\tnRet = floor(ArgInf.m_double);\r\n\telse\r\n\t\tnRet = ceil(ArgInf.m_double);*/\r\n\tdouble v5;\r\n\tmodf(ProcessDouble2(ArgInf.m_double), &v5);\r\n\tnRet = (INT)v5;\r\n\treturn nRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_fputs.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <stdio.h>\r\n#include \"Myfunctions.h\"\r\n//̨ - ׼\r\n/*\r\n    øʽ ޷ֵ ׼  ݣͨ ݣ...  - ϵͳֿ֧->̨\r\n    Ӣƣfputs\r\n    ڱ׼豸׼豸ָݣעⱾֻڿ̨ʹáΪһԱظӡ\r\n    <1>Ϊ򡱣ΪͣintԱʡԡṩ豸Ϊ³ֵ֮һ 1#׼豸 2#׼豸ʡԱĬΪ#׼豸\r\n    <2>ΪݡΪͨͣallֻΪıֵ߼ֵʱ䡣ΪıҰУڸ֮ûس (ַ (13))з (ַ (10)) سз (ַ (13) + ַ (10)) ָ\r\n*/\r\nLIBAPI(void, krnln_fputs)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\t\r\n\tDWORD dwSdt = STD_OUTPUT_HANDLE;\r\n\tif(pArgInf[0].m_dtDataType != _SDT_NULL && pArgInf[0].m_int==2)\r\n\t\tdwSdt = STD_ERROR_HANDLE;\r\n\tHANDLE hCon = GetStdHandle(dwSdt);\r\n\tif(hCon==NULL)\r\n\t\t\treturn;\r\n/*\t _iobuf* hCon = stdout;\r\n\tif(pArgInf[0].m_dtDataType != _SDT_NULL && pArgInf[0].m_int==2)\r\n\t\thCon = stderr;*/\r\n\r\n\tfor(INT i=1;i < nArgCount;i++)\r\n\t{\r\n\t\tLPSTR pData;\r\n\t\tBOOL bNeedFree = FALSE;\r\n\t\tif(pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\tpData = pArgInf[i].m_pText;\r\n\t\telse\r\n\t\t{\r\n\t\t\tpData = SDataToStr(&pArgInf[i]);\r\n\t\t\tif(pData == NULL)\r\n\t\t\t\tcontinue;\r\n\t\t\tbNeedFree = TRUE;\r\n\t\t}\r\n\t\t\r\n\t\tUINT nLen = mystrlen(pData);\r\n\t\t//char text[50];\r\n\t\t//itoa(nLen,text,10);\r\n\t\t//MessageBox(NULL,text,NULL,MB_OK);\r\n\t\tif(nLen>0)\r\n\t\t{\r\n\t\t\tLPSTR pStr = pData;\r\n\t\t\twhile(nLen>0){\r\n\t\t\t\tDWORD dwSize=0;\r\n\t\t\t\tUINT nSize = 1024;\r\n\t\t\t\tif(nLen<1024)\r\n\t\t\t\t\tnSize = nLen;\r\n\t\t\t\tWriteFile(hCon,pStr,nSize,&dwSize,NULL);\r\n\t\t\t\tnLen-=dwSize;\r\n\t\t\t\tpStr+=dwSize;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t//WriteConsole(hCon,pData,nLen,&dwSize,NULL);\r\n\t\t\t\r\n\r\n\t\t\t//fprintf(hCon, \"%s\",pData); \r\n\t\t}\r\n\t\t\r\n\t\tif(bNeedFree)\r\n\t\t\tfree(pData);\r\n\r\n\t}\r\n\t\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_hex.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <stdio.h>\r\n//ֵת - ȡʮı\r\n/*\r\n    øʽ ı͡ ȡʮı  ȡıֵ - ϵͳֿ֧->ֵת\r\n    Ӣƣhex\r\n    һıֵָʮʽΪ\r\n    <1>ΪȡıֵΪͣint\r\n*/\r\nLIBAPI(char*, krnln_hex)\r\n{\r\n\tchar *pText = (char*)E_MAlloc_Nzero(16);\r\n\tsprintf(pText,\"%X\",ArgInf.m_int);\r\n\treturn pText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_hour.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n//ʱ - ȡСʱ\r\n/*\r\n    øʽ ͡ ȡСʱ ʱ ʱ䣩 - ϵͳֿ֧->ʱ\r\n    Ӣƣhour\r\n    һֵΪ 0  23 ֮ʾһеĳһСʱΪ\r\n    <1>Ϊʱ䡱Ϊʱͣdate\r\n*/\r\nLIBAPI(int, krnln_hour)\r\n{\r\n\tINT nHour, nMinute, nSecond;\r\n\tGetTimePart(ArgInf.m_date, nHour, nMinute, nSecond);\r\n\treturn nHour;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_int.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n// - ȡ\r\n/*\r\n    øʽ ͡ ȡ ˫С ȡС - ϵͳֿ֧->\r\n    Ӣƣint\r\n    һС֡롰ȡ֮ͬΪ\r\nСΪСڻڸСĵһȡ᷵شڻڸСĵһ磬 -7.8 ת -8ȡ -7.8 ת -7Ϊ\r\n    <1>ΪȡСΪ˫Сͣdouble\r\n*/\r\ndouble __cdecl ProcessDouble(double a1)\r\n{\r\n  double v1; // st7@1\r\n  double result; // st7@6\r\n  double v3; // [sp+0h] [bp-8h]@1\r\n  signed int v4; // [sp+Ch] [bp+4h]@4\r\n\r\n  v1 = modf(a1, &v3);\r\n  if ( v1 < 0.0 )\r\n    v1 = -v1;\r\n  if ( v1 <= 0.999999999999 )\r\n  {\r\n    result = a1;\r\n  }\r\n  else\r\n  {\r\n    v4 = -1;\r\n    if ( v3 >= 0.0 )\r\n      v4 = 1;\r\n    result = (double)v4 + v3;\r\n  }\r\n  return result;\r\n}\r\n\r\nLIBAPI(int, krnln_int)\r\n{\r\n\treturn (int)floor(ProcessDouble(ArgInf.m_double));\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_kill.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//̲ - ɾļ\r\n/*\r\n    øʽ ߼͡ ɾļ ı ɾļ - ϵͳֿ֧->̲\r\n    Ӣƣkill\r\n    ɹ棬ʧܷؼ١Ϊ\r\n    <1>ΪɾļΪıͣtext\r\n*/\r\nLIBAPI(BOOL, krnln_kill)\r\n{\r\n\treturn DeleteFile(ArgInf.m_pText);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_left.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n//ı - ȡı\r\n/*\r\n    øʽ ı͡ ȡı ı ȡ䲿ֵı ȡַĿ - ϵͳֿ֧->ı\r\n    Ӣƣleft\r\n    һıаָıдַָΪ\r\n    <1>Ϊȡ䲿ֵıΪıͣtext\r\n    <2>ΪȡַĿΪͣint\r\n*/\r\nLIBAPI(char*, krnln_left)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tINT nLen = mystrlen(ArgInf.m_pText);\r\n\tif(nLen==0 || pArgInf[1].m_int <=0)return NULL;\r\n\r\n\tif(pArgInf[1].m_int < nLen)\r\n\t\tnLen = pArgInf[1].m_int;\r\n\r\n\tchar *pText = (char*)E_MAlloc_Nzero(nLen+1);\r\n\tmemcpy(pText,ArgInf.m_pText,nLen);\r\n\tpText[nLen]=0;\r\n\treturn pText;\t\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_len.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ı - ȡı\r\n/*\r\n    øʽ ͡ ȡı ı ıݣ - ϵͳֿ֧->ı\r\n    Ӣƣlen\r\n    ȡıݵĳȣ0Ϊ\r\n    <1>ΪıݡΪıͣtextֵָ䳤ȵıݡ\r\n*/\r\nLIBAPI(int, krnln_len)\r\n{\r\n\treturn mystrlen(ArgInf.m_pText);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_like.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//߼Ƚ - Ƶ\r\n/*\r\n    øʽ ߼͡ Ƶ ı Ƚıı Ƚı - ϵͳֿ֧->߼Ƚ\r\n    Ӣƣlike\r\n    ȽıڱȽıײʱ棬򷵻ؼ٣Ϊ?=򡰡֡Ϊ\r\n    <1>ΪȽıΪıͣtext\r\n    <2>ΪȽıΪıͣtext\r\n*/\r\nLIBAPI(BOOL, krnln_like)\r\n{// ߺ \r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tregister char *str1 = pArgInf[0].m_pText;\r\n\tregister char *str2 = pArgInf[1].m_pText;\r\n\tif (!str1 || !str2 || !*str1 || !*str2) return FALSE; //ıֱӷ\r\n\r\n\twhile ( *str1 && *str2 && *str1==*str2 )\r\n\t\tstr1++, str2++;\r\n\r\n\treturn *str2==0;\r\n}\r\n// {// ԭ\r\n// /*\tPMDATA_INF pArgInf =&ArgInf;\r\n// \tINT nLen = strlen(pArgInf[1].m_pText);\r\n// \tif(strlen(pArgInf[0].m_pText) < nLen)\r\n// \t\treturn FALSE;\r\n// \tif(memcmp(pArgInf[0].m_pText,pArgInf[1].m_pText,nLen)==0)\r\n// \t\treturn TRUE;\r\n// \treturn FALSE;*/\r\n//   BOOL result; // eax@1\r\n//   char *v4; // edx@1\r\n//   size_t v5; // ebx@1\r\n//   char *v6; // esi@1\r\n//   char *v7; // edi@1\r\n//   PMDATA_INF pArgInf =&ArgInf;\r\n// \r\n//   v4 = pArgInf->m_pText;\r\n//   v6 = pArgInf[1].m_pText;\r\n//   v7 = pArgInf[1].m_pText;\r\n//   result = FALSE;\r\n//   v5 = strlen(v7);\r\n//   if ( v5 <= strlen(v4) )\r\n//   {\r\n//     result = strncmp(v6, v4, v5) == 0;\r\n//   }\r\n//   return result;\r\n// }\r\n"
  },
  {
    "path": "krnln/krnln_loc.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n//ļд - ȡдλ\r\n/*\r\n    øʽ ͡ ȡдλ  ļţ - ϵͳֿ֧->ļд\r\n    Ӣƣloc\r\n    ָļĵǰ/дλãλֵ 0 ʼļЧʧܣ -1 Ϊ\r\n    <1>ΪļšΪͣintֵָļţļűɡļء\r\n*/\r\nLIBAPI(int, krnln_loc)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn -1;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn -1;\r\n\tINT nRet = HFILE_ERROR;\r\n\r\n\tif(pFile->nType == 1 || pFile->nType == 3)//ļ ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tnRet = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\t\tnRet = pMemFile->GetPosition();\r\n\t}\r\n\treturn nRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_lock.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ļд - סļ\r\n/*\r\n    øʽ ߼͡ סļ  ļţ λã ĳȣ ʱݣ - ϵͳֿ֧->ļд\r\n    Ӣƣlock\r\n    ɸ̷ͬһļĻУʹñܾûԱļеĳждʡɹ棬ʧܷؼ١Ϊ\r\n    <1>ΪļšΪͣintļɡļء\r\n    <2>ΪλáΪͣintλֵ 0 ʼ\r\n    <3>ΪĳȡΪͣint\r\n    <4>Ϊʱ䡱ΪͣintԱʡԡָʧܺ󷴸ԵĺʡԣĬΪ 0 һʧءֵṩΪ -1 򷴸ԣֱɹΪֹ\r\n\r\n*/\r\nLIBAPI(BOOL, krnln_lock)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn FALSE;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn FALSE;\r\n\tif(pFile->nType !=1)//ڴļ\r\n\t\treturn TRUE;\r\n\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tOVERLAPPED Overlapped;\r\n\tmemset(&Overlapped,0,sizeof(OVERLAPPED));\r\n\tOverlapped.Offset = pArgInf[1].m_int;\r\n\tDWORD dwFlags = LOCKFILE_FAIL_IMMEDIATELY;\r\n\tif(pArgInf[3].m_dtDataType != _SDT_NULL)\r\n\t{\r\n\t\tif(pArgInf[3].m_int== -1)\r\n\t\t\tdwFlags = 0;\r\n\t\telse if(pArgInf[3].m_int > 0)\r\n\t\t{\t\r\n\t\t\tDWORD dwStart = ::GetTickCount();\r\n\t\t\tBOOL bRet;\r\n\t\t\tINT nVal;\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tbRet = LockFileEx(hFile,LOCKFILE_FAIL_IMMEDIATELY,0,pArgInf[2].m_int,0,&Overlapped);\r\n\t\t\t\tnVal = GetTickCount() - dwStart;\r\n\t\t\t}while(bRet == FALSE && nVal <= pArgInf[3].m_int);\r\n\r\n\t\t\treturn bRet;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn LockFileEx(hFile,\r\n\t\tdwFlags,\r\n\t\t0,\r\n\t\tpArgInf[2].m_int,\r\n\t\t0,\r\n\t\t&Overlapped);\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_lof.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n//ļд - ȡļ\r\n/*\r\n    øʽ ͡ ȡļ  ļţ - ϵͳֿ֧->ļд\r\n    Ӣƣlof\r\n    ָļĳߴ磬óߴֽΪλļЧʧܣ -1 Ϊ\r\n    <1>ΪļšΪͣintֵָļţļűɡļء\r\n*/\r\nLIBAPI(int, krnln_lof)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn -1;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn -1;\r\n\tINT nRet = -1;\r\n\r\n\tif(pFile->nType ==1 || pFile->nType == 3)//ļ ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tDWORD dwHi;\r\n\t\tnRet = ::GetFileSize(hFile,&dwHi);\r\n\r\n\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\t\tnRet = pMemFile->GetFileSize();\r\n\t}\r\n\treturn nRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_log.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n// - Ȼ\r\n/*\r\n    øʽ ˫С͡ Ȼ ˫С Ȼֵ - ϵͳֿ֧->\r\n    Ӣƣlog\r\n    ָȻֵȻ e Ϊ׵Ķ #e ֵԼ 2.718282Ϊ\r\n    <1>ΪȻֵΪ˫Сͣdouble\r\n*/\r\nLIBAPI(void, krnln_log)\r\n{\r\n\tArgInf.m_double = log(ArgInf.m_double);\r\n\t__asm\r\n\t{\r\n\t\tmov eax,ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx,ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_mid.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n//ı - ȡıм\r\n/*\r\n    øʽ ı͡ ȡıм ı ȡ䲿ֵı ʼȡλã ȡַĿ - ϵͳֿ֧->ı\r\n    Ӣƣmid\r\n    һıаָıдָλַָΪ\r\n    <1>Ϊȡ䲿ֵıΪıͣtext\r\n    <2>ΪʼȡλáΪͣint1Ϊλã2Ϊ2λãơ\r\n    <3>ΪȡַĿΪͣint\r\n*/\r\nLIBAPI(char*, krnln_mid)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif (pArgInf[1].m_int <=0 || pArgInf[2].m_int <= 0 ) return NULL;\r\n\tINT nLen = mystrlen(ArgInf.m_pText);\r\n\tif(nLen == 0) return NULL;\r\n\t//if(pArgInf[1].m_int <=0)\r\n\t//\tpArgInf[1].m_int = 1;\r\n\tif(pArgInf[1].m_int > nLen)//ʼλòı\r\n\t\treturn NULL;\r\n\r\n\tINT nSubLen = pArgInf[1].m_int+pArgInf[2].m_int;\r\n\tif(nSubLen > nLen)\r\n\t\tnSubLen = nLen - pArgInf[1].m_int+1;\r\n\telse\r\n\t\tnSubLen = pArgInf[2].m_int;\r\n\r\n\tchar* pSrc = ArgInf.m_pText + pArgInf[1].m_int - 1;\r\n\r\n\tchar *pText = (char*)E_MAlloc_Nzero(nSubLen+1);\r\n\tmemcpy(pText,pSrc,nSubLen);\r\n\tpText[nSubLen]=0;\r\n\treturn pText;\t\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_minute.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n//ʱ - ȡ\r\n/*\r\n    øʽ ͡ ȡ ʱ ʱ䣩 - ϵͳֿ֧->ʱ\r\n    Ӣƣminute\r\n    һֵΪ 0  59 ֮ʾһСʱеĳһӡΪ\r\n    <1>Ϊʱ䡱Ϊʱͣdate\r\n*/\r\nLIBAPI(int, krnln_minute)\r\n{\r\n\tINT nHour, nMinute, nSecond;\r\n\tGetTimePart(ArgInf.m_date, nHour, nMinute, nSecond);\r\n\treturn nMinute;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_mod.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n// - \r\n/*\r\n    øʽ ˫С͡  ˫С ˫С ...  - ϵͳֿ֧->\r\n    Ӣƣmod\r\n    ֵ̣֣Ϊ%ModΪһԱظӡ\r\n    <1>ΪΪ˫Сͣdouble\r\n    <2>ΪΪ˫Сͣdouble\r\n*/\r\nLIBAPI(void, krnln_mod)\r\n{\r\n\r\n\tPMDATA_INF pArg = &ArgInf;\r\n\r\n\tfor(int i=1;i< nArgCount;i++)\r\n\t{\r\n\t\tArgInf.m_double = fmod(ArgInf.m_double, pArg[i].m_double);\r\n\t}\r\n\r\n\t__asm\r\n\t{\r\n\t\tmov eax,ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx,ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_month.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n//ʱ - ȡ·\r\n/*\r\n    øʽ ͡ ȡ· ʱ ʱ䣩 - ϵͳֿ֧->ʱ\r\n    Ӣƣmonth\r\n    һֵΪ 1  12 ֮ʾָʱе·ݡΪ\r\n    <1>Ϊʱ䡱Ϊʱͣdate\r\n\r\n*/\r\nLIBAPI(int, krnln_month)\r\n{\r\n\tINT nYear, nMonth, nDay;\r\n\tGetDatePart(ArgInf.m_date, nYear, nMonth, nDay);\r\n\treturn nMonth;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_name.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//̲ - ļ\r\n/*\r\n    øʽ ߼͡ ļ ı ԭļĿ¼ı ΪļĿ¼ - ϵͳֿ֧->̲\r\n    Ӣƣname\r\n    һļĿ¼ɹ棬ʧܷؼ١Ϊ\r\n    <1>ΪԭļĿ¼Ϊıͣtext\r\n    <2>ΪΪļĿ¼Ϊıͣtext\r\n*/\r\nLIBAPI(BOOL, krnln_name)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\treturn MoveFile(pArgInf[0].m_pText,pArgInf[1].m_pText);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_now.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ʱ - ȡʱ\r\n/*\r\n    øʽ ʱ͡ ȡʱ  - ϵͳֿ֧->ʱ\r\n    Ӣƣnow\r\n    صǰϵͳڼʱ䡣Ϊ\r\n*/\r\nLIBAPI(void, krnln_now)\r\n{\r\n\tSYSTEMTIME now;\r\n\tMDATA_INF ArgInf2;\r\n\tGetLocalTime(&now);\r\n\tArgInf2.m_double = GetSpecDateTime(now.wYear, now.wMonth, now.wDay, now.wHour, now.wMinute, now.wSecond);\r\n\t__asm{\r\n\t\tmov eax, ArgInf2.m_unit.m_dwFormID;\r\n\t\tmov edx, ArgInf2.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_oct.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <stdio.h>\r\n//ֵת - ȡ˽ı\r\n/*\r\n    øʽ ı͡ ȡ˽ı  ȡıֵ - ϵͳֿ֧->ֵת\r\n    Ӣƣoct\r\n    һıֵָİ˽ʽΪ\r\n    <1>ΪȡıֵΪͣint\r\n*/\r\nLIBAPI(char*, krnln_oct)\r\n{\r\n\tchar *pText = (char*)E_MAlloc_Nzero(256);\r\n\tsprintf(pText,\"%o\",ArgInf.m_int);\r\n\treturn pText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_open.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ļд - ļ\r\n/*\r\n    øʽ ͡ ļ ı 򿪵ļƣ 򿪷ʽݣ ʽݣ - ϵͳֿ֧->ļд\r\n    Ӣƣopen\r\n    һͨļԶļɹرļļţʧܷ 0Ϊ\r\n    <1>Ϊ򿪵ļơΪıͣtext\r\n    <2>Ϊ򿪷ʽΪͣintԱʡԡֵ˵ļĲʽʡԱĬΪ#дʽֵΪ³֮һ\r\n  1#룺ָļݣļʧܣ\r\n  2#ддݵָļļʧܣ\r\n  3#дļжݻдݵļļʧܣ\r\n  4#ддݵָļļȴһļѾھеݣ\r\n  5#ддݵָļļ򴴽һļѾھֱӴ򿪣\r\n  6#Ķļжݻдݵļļ򴴽һļѾھֱӴ򿪡\r\n    <3>ΪʽΪͣintԱʡԡֵָ̲ļķʽʡԱĬΪ#ơʽֵΪ³֮һ\r\n  1#ƣдļ\r\n  2#̶ֹֹļ\r\n  3#ֹдֹдļ\r\n  4#ֹд̶ֹдļ\r\n*/\r\nLIBAPI(void*, krnln_open)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tDWORD dwDesiredAccess,dwShareMode,dwCreationDisposition;\r\n\r\n\tif(pArgInf[1].m_dtDataType == _SDT_NULL)\r\n\t{//#д\r\n\t\tdwDesiredAccess = GENERIC_READ | GENERIC_WRITE;\r\n\t\tdwCreationDisposition = OPEN_EXISTING;\r\n\t}\r\n\telse\r\n\t{\r\n\t\tswitch (pArgInf[1].m_int)\r\n\t\t{\r\n\t\tcase 1://#\r\n\t\t\tdwDesiredAccess = GENERIC_READ;\r\n\t\t\tdwCreationDisposition = OPEN_EXISTING;\r\n\t\t\tbreak;\r\n\t\tcase 2://#д\r\n\t\t\tdwDesiredAccess = GENERIC_WRITE;\r\n\t\t\tdwCreationDisposition = OPEN_EXISTING;\r\n\t\t\tbreak;\r\n\t\tcase 4://#д\r\n\t\t\tdwDesiredAccess = GENERIC_WRITE;\r\n\t\t\tdwCreationDisposition = CREATE_ALWAYS;\r\n\t\t\tbreak;\r\n\t\tcase 5://#д\r\n\t\t\tdwDesiredAccess = GENERIC_WRITE;\r\n\t\t\tdwCreationDisposition = OPEN_ALWAYS;\r\n\t\t\tbreak;\r\n\t\tcase 6://#Ķ\r\n\t\t\tdwDesiredAccess = GENERIC_READ | GENERIC_WRITE;\r\n\t\t\tdwCreationDisposition = OPEN_ALWAYS;\r\n\t\t\tbreak;\r\n\t\tdefault://#д\r\n\t\t\tdwDesiredAccess = GENERIC_READ | GENERIC_WRITE;\r\n\t\t\tdwCreationDisposition = OPEN_EXISTING;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif(pArgInf[2].m_dtDataType == _SDT_NULL)\r\n\t\tdwShareMode = (FILE_SHARE_READ | FILE_SHARE_WRITE );\r\n\telse\r\n\t{\r\n\t\tif(pArgInf[2].m_int ==2)\r\n\t\t\tdwShareMode = FILE_SHARE_WRITE ;\r\n\t\telse if(pArgInf[2].m_int ==3)\r\n\t\t\tdwShareMode = FILE_SHARE_READ ;\r\n\t\telse if(pArgInf[2].m_int ==4)\r\n\t\t\tdwShareMode = 0;\r\n\t\telse\r\n\t\t\tdwShareMode = (FILE_SHARE_READ | FILE_SHARE_WRITE );\r\n\t}\r\n\r\n\tHANDLE hFile = CreateFile(ArgInf.m_pText,\r\n\t\tdwDesiredAccess,\r\n\t\tdwShareMode,\r\n\t\tNULL,\r\n\t\tdwCreationDisposition,\r\n\t\tFILE_ATTRIBUTE_ARCHIVE,\r\n\t\t0);\r\n\t\r\n\r\n\tif(hFile != INVALID_HANDLE_VALUE)\r\n\t{\r\n\t\tPFILEELEMENT pFile = new FILEELEMENT;\r\n\t\tpFile->nType = 1;\r\n\t\tpFile->FileHandle = hFile;\r\n\t\tAddFileMangerList(pFile);\r\n\t\treturn pFile;\r\n\t}\r\n\treturn NULL;\r\n}\r\n\r\n"
  },
  {
    "path": "krnln/krnln_p2double.cpp",
    "content": "#include \"stdafx.h\"\r\n/*\r\n\tøʽ ˫Сָ͡뵽˫С ( ڴָ)\r\n\tӢƣp2double\r\n\tָڴַָָһ˫С(DOUBLE)עñǰһҪȷṩڴַʵЧ\r\n\t<1>Ϊڴָ롱Ϊ͡ṩָһڴֵַָ\r\n*/\r\nLIBAPI(void, krnln_p2double)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[0].m_int!=0)\r\n\t{\r\n\t\tArgInf.m_double = *(DOUBLE*)pArgInf [0].m_int;\r\n\t}else{\r\n\t\tArgInf.m_double =0.0;\r\n\t}\r\n\t__asm\r\n\t{\r\n\t\tmov eax,ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx,ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_p2float.cpp",
    "content": "#include \"stdafx.h\"\r\n/*\r\n\tøʽ Сָ͡뵽С ( ڴָ)\r\n\tӢƣp2float\r\n\tָڴַָָһС(FLOAT)עñǰһҪȷṩڴַʵЧ\r\n\t<1>Ϊڴָ롱Ϊ͡ṩָһڴֵַָ\r\n*/\r\nLIBAPI(void, krnln_p2float)\r\n{\r\n\tfloat fRet=0.0f;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif(pArgInf[0].m_int!=0)\r\n\t{\r\n\t\tfRet=*((float*)pArgInf [0].m_int);\r\n\t}\r\n\t_asm mov eax, fRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_p2int.cpp",
    "content": "#include \"stdafx.h\"\r\n/*\r\n\tøʽ ָ͡뵽 ( ڴָ)\r\n\tӢƣp2int\r\n\tָڴַָָһ(INT)עñǰһҪȷṩڴַʵЧ\r\n\t<1>Ϊڴָ롱Ϊ͡ṩָһڴֵַָ\r\n*/\t\r\nLIBAPI(int, krnln_p2int)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\t//if(!IsBadReadPtr((LPVOID)pArgInf[0].m_int,sizeof(int)))\r\n\tif(pArgInf[0].m_int!=0)\r\n\t{\r\n\t\treturn *((int*)pArgInf [0].m_int);\r\n\t}\r\n\treturn 0;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_pbin.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ֽڼ - ָ뵽ֽڼ\r\n/*\r\n    øʽ ֽڼ ָ뵽ֽڼ  ڴָ룬 ڴݳȣ - ϵͳֿ֧->ֽڼ\r\n    Ӣƣpbin\r\n    ָڴַָָһݣעñǰһҪȷṩڴַʵЧʹóϾԻصӳDLLӳȡⲿݡΪ߼\r\n    <1>Ϊڴָ롱Ϊͣintṩָһڴֵַָ\r\n    <2>ΪڴݳȡΪͣintṩڴַȡݳȡ\r\n*/\r\nLIBAPI(void*, krnln_pbin)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tif (!pArgInf[0].m_pCompoundData) return NULL;\r\n\tINT nLen = pArgInf[1].m_int;\r\n\tif(nLen<=0) return NULL; // || IsBadReadPtr(pArgInf[0].m_pCompoundData,nLen)\r\n\r\n\tLPINT pText = (LPINT)E_MAlloc_Nzero(nLen+2*sizeof(INT));\r\n\tpText[0]=1;\r\n\tpText[1]=nLen;\r\n\tmemcpy(pText+2,pArgInf[0].m_pCompoundData,nLen);\r\n\r\n\treturn pText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_ping.cpp",
    "content": "#include \"stdafx.h\"\r\n#pragma comment(lib,\"WS2_32.LIB\")\r\n#pragma comment(lib,\"icmp.lib\")\r\n\r\n//ͨ - ͨŲ\r\n/*\r\n    øʽ ͡ ͨŲ ı ַ ȴʱݣ - ϵͳֿ֧->ͨ\r\n    Ӣƣping\r\n    ָǷܹͨѶرͨѶӦʱ䡣޷ͨѶ߲ʧܣ -1Ϊ\r\n    <1>ΪַΪıͣtextΪIPַȡ\r\n    <2>Ϊȴʱ䡱ΪͣintԱʡԡָȴӦʱ䣬λΪ롣ʱ伴Ϊ޷뱻ͨѶʡԱĬΪ 10 * 1000 룬 10 롣\r\n*/\r\n#pragma pack (push, old_value)   // VC++ṹֽ\r\n#pragma pack (1)    // Ϊһֽڶ롣\r\n\r\ntypedef struct tagIPINFO \r\n{ \r\nu_char Ttl; // TTL \r\nu_char Tos; //  \r\nu_char IPFlags; // IP־ \r\nu_char OptSize; // ѡݴС \r\nu_char *Options; // ѡbuffer \r\n} IPINFO, *PIPINFO; \r\n\r\ntypedef struct tagICMPECHO \r\n{ \r\nu_long Source; // Դַ \r\nu_long Status; // IP״̬ \r\nu_long RTTime; // RTT \r\nu_short DataSize; // ظݴС \r\nu_short Reserved; //  \r\nvoid *pData; // ظbuffer \r\nIPINFO ipInfo; // ظIPѡ \r\nchar Data [250];\r\n} ICMPECHO, *PICMPECHO; \r\n\r\n#pragma pack (pop, old_value)    // ָVC++ṹֽ\r\n\r\nextern \"C\"\r\n{\r\nHANDLE _cdecl IcmpCreateFile(void);//򿪸ICMP Echoʹõľ \r\nBOOL _cdecl IcmpCloseHandle(HANDLE IcmpHandle);//رողŴ򿪵ľ \r\nDWORD _cdecl IcmpSendEcho(HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD);//Echo󲢵\r\n}\r\n\r\nDWORD BMGetIPbyname(char *HostName)\r\n{\r\n\thostent* heDestHost;\r\n\tDWORD retIP = inet_addr(HostName);\r\n\tif(retIP==0xFFFFFFFF)\r\n\t{\r\n\t\theDestHost=gethostbyname (HostName);\r\n\t\tif(heDestHost)\r\n\t\t\tretIP=*(DWORD *)*heDestHost->h_addr_list;\r\n\t}\r\n\r\n\treturn retIP;\r\n}\r\n\r\nLIBAPI(int, krnln_ping)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tWSAData wsaData;\r\n\tINT nRet = -1;\r\n\tif(WSAStartup(MAKEWORD(2,2),&wsaData)==0)\r\n\t{\r\n\t\tDWORD dwAddress = BMGetIPbyname(pArgInf[0].m_pText);\r\n\t\tif(dwAddress != 0xFFFFFFFF)\r\n\t\t{\r\n\t\t\tDWORD dwPingTimeOut = 10000;\r\n\t\t\tif(pArgInf[1].m_dtDataType != _SDT_NULL)\r\n\t\t\t\tdwPingTimeOut = pArgInf[1].m_int;\r\n\r\n\t\t\tFARPROC (__stdcall *IcmpCreateFilefun)(void);\r\n\t\t\t*(FARPROC *)&IcmpCreateFilefun = (FARPROC)IcmpCreateFile;\r\n\r\n\t\t\tHANDLE hICmp = IcmpCreateFilefun();\r\n\t\t\tif(hICmp)\r\n\t\t\t{\r\n\t\t\t\tICMPECHO icmp;\r\n\t\t\t\tFARPROC (__stdcall *IcmpSendEchofun)(HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD);\r\n\t\t\t\t*(FARPROC *)&IcmpSendEchofun = (FARPROC)IcmpSendEcho;\r\n\r\n\t\t\t\tif(IcmpSendEchofun (hICmp,\r\n\t\t\t\t\tdwAddress,\r\n\t\t\t\t\t(LPSTR)\"BlackMoonPing\",\r\n\t\t\t\t\t13,\r\n\t\t\t\t\t0,\r\n\t\t\t\t\t&icmp,\r\n\t\t\t\t\tsizeof(icmp),\r\n\t\t\t\t\tdwPingTimeOut))\r\n\t\t\t\t{\r\n\t\t\t\t\tnRet = icmp.RTTime;\r\n\t\t\t\t}\r\n\t\t\t\tFARPROC (__stdcall *IcmpCloseHandlefun)(HANDLE);\r\n\t\t\t\t*(FARPROC *)&IcmpCloseHandlefun = (FARPROC)IcmpCloseHandle;\r\n\t\t\t\tIcmpCloseHandlefun(hICmp);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tWSACleanup ();\r\n\t}\r\n\treturn nRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_pow.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n// - η\r\n/*\r\n    øʽ ˫С͡ η ˫С ηֵ˫С η - ϵͳֿ֧->\r\n    Ӣƣpow\r\n    ֵָָηΪ\r\n    <1>ΪηֵΪ˫Сͣdoubleֵָĳηֵ\r\n    <2>ΪηΪ˫Сͣdoubleֵָηֵָ\r\n*/\r\nLIBAPI(void, krnln_pow)\r\n{\r\n\tPMDATA_INF pArg = &ArgInf;\r\n\r\n\tArgInf.m_double = pow(ArgInf.m_double,pArg[1].m_double);\r\n\r\n\t__asm\r\n\t{\r\n\t\tmov eax,ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx,ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_pstr.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n//ı - ָ뵽ı\r\n/*\r\n    øʽ ı͡ ָ뵽ı  ڴıָ룩 - ϵͳֿ֧->ı\r\n    Ӣƣpstr\r\n    ָڴַָָıעñǰһҪȷṩڴָʵЧָһַıʹóϾԻصӳDLLӳȡⲿݡΪ߼\r\n    <1>Ϊڴıָ롱Ϊͣintṩָһַıڴֵָ\r\n*/\r\nLIBAPI(char*, krnln_pstr)\r\n{\r\n\tif (!ArgInf.m_pText || !*(ArgInf.m_pText)) return NULL;\r\n\tint nLen = mystrlen(ArgInf.m_pText);\r\n\tif(nLen==0)\treturn NULL;\r\n\r\n\tchar *pText = (char*)E_MAlloc_Nzero(nLen+1);\r\n\t\r\n\tmemcpy(pText, ArgInf.m_pText, nLen);\r\n\tpText[nLen] = '\\0';\r\n\treturn pText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_randomize.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n// - \r\n/*\r\n    øʽ ޷ֵ   ֵݣ - ϵͳֿ֧->\r\n    Ӣƣrandomize\r\n    Ϊʼһֵֵͬ¡ȡزͬϵСΪ\r\n    <1>ΪֵΪͣintԱʡԡʡԱĬʹõǰϵͳʱֵ\r\n*/\r\nLIBAPI(void, krnln_randomize)\r\n{\r\n\tUINT unSeed;\r\n\tif(ArgInf.m_dtDataType==_SDT_NULL)\r\n\t\tunSeed = ::GetTickCount();\r\n\telse\r\n\t\tunSeed  = ArgInf.m_dwSubCodeAdr;\r\n\tsrand(unSeed);\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_read.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n#include \"Myfunctions.h\"\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n//ļд - \r\n/*\r\n\tøʽ ߼͡   ݵļţͨͱ/ ݵı...  - ϵͳֿ֧->ļд\r\n\tӢƣread\r\n\tӦ롰дʹãļеǰдλöȡʽݵָһϵбСɹ棬ʧܷؼ١ΪмһԱظӡ\r\n\t<1>ΪݵļšΪͣintļɡļء\r\n\t<2>ΪݵıΪͨͣallṩʱֻṩ顣ΪûԶⶨͣʧܡ\r\n*/\r\nBOOL ReadFileTextData(HANDLE hFile, LPSTR& pStr, BOOL& bRet)\r\n{\r\n\tchar szBuff[4096];\r\n\tDWORD dwNumTop = 0;\r\n\tpStr = NULL;\r\n\r\n\tdo\r\n\t{\r\n\t\tINT orgLoc = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r\n\t\tif (orgLoc == HFILE_ERROR)\r\n\t\t{\r\n\t\t\tbRet = FALSE;\r\n\t\t\treturn TRUE;\r\n\t\t}\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tif (ReadFile(hFile, szBuff, 4096, &dwNumOfByteRead, NULL) == FALSE)\r\n\t\t{\r\n\t\t\tbRet = FALSE;\r\n\t\t\treturn TRUE;\r\n\t\t}\r\n\t\tINT nPos = 0;\r\n\t\tLPSTR pTemp = szBuff;\r\n\t\tBOOL bFind = FALSE;\r\n\t\twhile (nPos < (INT)dwNumOfByteRead)\r\n\t\t{\r\n\t\t\tif (*pTemp == 0)\r\n\t\t\t{\r\n\t\t\t\tnPos++;\r\n\t\t\t\tbFind = TRUE;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tpTemp++;\r\n\t\t\tnPos++;\r\n\t\t}\r\n\t\tINT nLoc = dwNumTop;\r\n\t\tdwNumTop += nPos;\r\n\t\tif (pStr)\r\n\t\t\tpStr = (LPSTR)E_MRealloc(pStr, dwNumTop + 1);\r\n\t\telse\r\n\t\t\tpStr = (LPSTR)E_MAlloc(dwNumTop + 1);\r\n\t\tpTemp = pStr + nLoc;\r\n\t\tstrncpy(pTemp, szBuff, nPos);\r\n\t\tpTemp[nPos] = 0;\r\n\r\n\t\tif (bFind)//β\r\n\t\t{\r\n\t\t\torgLoc += nPos;\r\n\t\t\tSetFilePointer(hFile, orgLoc, NULL, FILE_BEGIN);\r\n\t\t\tbRet = TRUE;\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\r\n\t\tif (dwNumOfByteRead < 4096)\r\n\t\t{\r\n\t\t\tbRet = TRUE;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t} while (1);\r\n\r\n\treturn TRUE;\r\n\r\n}\r\n\r\nBOOL ReadFileBinData(HANDLE hFile, LPBYTE& pByte, BOOL& bRet)\r\n{\r\n\tpByte = NULL;\r\n\tDWORD dwSize;\r\n\tDWORD dwNumOfByteRead;\r\n\tif (ReadFile(hFile, &dwSize, sizeof(INT), &dwNumOfByteRead, NULL))\r\n\t{\r\n\t\tif (dwNumOfByteRead < sizeof(INT))return TRUE;\r\n\t\tpByte = (LPBYTE)E_MAlloc(dwSize + 2 * sizeof(INT));\r\n\r\n\t\tif (ReadFile(hFile, pByte + 2 * sizeof(INT), dwSize, &dwNumOfByteRead, NULL))\r\n\t\t{\r\n\t\t\tLPINT p = (LPINT)pByte;\r\n\t\t\tp[0] = 1;\r\n\t\t\tp[1] = dwNumOfByteRead;\r\n\t\t\tif (dwNumOfByteRead == dwSize)\r\n\t\t\t\treturn FALSE;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tE_MFree(pByte);\r\n\t\t\tpByte = NULL;\r\n\t\t}\r\n\t}\r\n\treturn TRUE;\r\n}\r\n\r\nBOOL ReadMemFileTextData(CMyMemFile* pMemFile, LPSTR& pStr)\r\n{\r\n\tINT orgLoc = pMemFile->GetPosition();\r\n\r\n\tDWORD dwNumOfByteRead;\r\n\tINT nLen = -1;\r\n\tLPSTR pBufStart, pBufMax;\r\n\r\n\tdwNumOfByteRead = pMemFile->GetBufferPtr(CMyMemFile::bufferRead, nLen, (void**)&pBufStart, (void**)&pBufMax);\r\n\r\n\tpStr = pBufStart;\r\n\tnLen = 0;\r\n\twhile (nLen < (INT)dwNumOfByteRead)\r\n\t{\r\n\t\tif (*pStr == 0)\r\n\t\t{\r\n\t\t\torgLoc++;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tnLen++;\r\n\t\tpStr++;\r\n\t}\r\n\tpStr = (LPSTR)E_MAlloc(nLen + 1);\r\n\torgLoc += nLen;\r\n\tpMemFile->Seek(orgLoc, CMyMemFile::begin);\r\n\tstrncpy(pStr, pBufStart, nLen);\r\n\tpStr[nLen] = 0;\r\n\tif (nLen == (INT)dwNumOfByteRead)\r\n\t\treturn TRUE;\r\n\treturn FALSE;\r\n}\r\n\r\nBOOL ReadMemFileBinData(CMyMemFile* pMemFile, LPBYTE& pByte)\r\n{\r\n\r\n\tpByte = NULL;\r\n\tDWORD dwSize;\r\n\tDWORD dwNumOfByteRead = pMemFile->Read(&dwSize, sizeof(INT));\r\n\tif (dwNumOfByteRead < sizeof(INT))\r\n\t\treturn TRUE;\r\n\tpByte = (LPBYTE)E_MAlloc(dwSize + 2 * sizeof(INT));\r\n\tdwNumOfByteRead = pMemFile->Read(pByte + 2 * sizeof(INT), dwSize);\r\n\tif (dwNumOfByteRead == 0)\r\n\t{\r\n\t\tE_MFree(pByte);\r\n\t\tpByte = NULL;\r\n\t}\r\n\telse\r\n\t{\r\n\t\tLPINT p = (LPINT)pByte;\r\n\t\tp[0] = 1;\r\n\t\tp[1] = dwNumOfByteRead;\r\n\t\tif (dwNumOfByteRead == dwSize)\r\n\t\t\treturn FALSE;\r\n\t}\r\n\r\n\treturn TRUE;\r\n\r\n}\r\nBOOL ReadFileTextData_Crypt(PFILEELEMENT pFile, LPSTR& pStr, BOOL& bRet)\r\n{\r\n\tpStr = NULL;\r\n\tvoid* hFile = pFile->FileHandle;\r\n\tINT orgLoc = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r\n\tif (orgLoc == HFILE_ERROR)\r\n\t{\r\n\t\tbRet = FALSE;\r\n\t\treturn TRUE;\r\n\t}\r\n\tDWORD dwNumOfByteRead;\r\n\tINT nLen = GetFileSize(hFile, NULL) - orgLoc;\r\n\tvector<MEMSP> vecMEMSP;\r\n\tINT nTLen = 0;\r\n\tfor (INT i = 0; i < nLen; i += 4096)\r\n\t{\r\n\t\tMEMSP tmpMEMSP;\r\n\t\ttmpMEMSP.pData = (char*)malloc(4096);\r\n\t\tINT nPos = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r\n\t\tINT nRet = ReadFile(hFile, tmpMEMSP.pData, min(nLen - i, 4096), &dwNumOfByteRead, 0);\r\n\t\tif (nRet == FALSE)\r\n\t\t{\r\n\t\t\tSetFilePointer(hFile, 0, NULL, FILE_END);\r\n\t\t\tfree(tmpMEMSP.pData);\r\n\t\t\tbRet = FALSE;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tBOOL bFind = FALSE;\r\n\t\tE_RC4_Calc(nPos, (unsigned char*)tmpMEMSP.pData, dwNumOfByteRead, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\tfor (DWORD j = 0; j < dwNumOfByteRead; j++)\r\n\t\t{\r\n\t\t\tif (tmpMEMSP.pData[j] == 0)\r\n\t\t\t{\r\n\t\t\t\tdwNumOfByteRead = j;\r\n\t\t\t\torgLoc++;// ֽ\r\n\t\t\t\tbFind = TRUE;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\ttmpMEMSP.nLen = dwNumOfByteRead;\r\n\t\tnTLen += dwNumOfByteRead;\r\n\t\tvecMEMSP.push_back(tmpMEMSP);\r\n\t\tif (bFind || dwNumOfByteRead != 4096)\r\n\t\t\tbreak;\r\n\t}\r\n\tif (nTLen > 0)\r\n\t{\r\n\t\tbRet = TRUE;\r\n\t\tpStr = (LPSTR)E_MAlloc_Nzero(nTLen + 1);\r\n\t\torgLoc += nTLen;\r\n\t\tSetFilePointer(hFile, orgLoc, NULL, FILE_BEGIN);\r\n\r\n\t\tLPSTR pszRetold = pStr;\r\n\t\tvector<MEMSP>::iterator iterMEMSP;\r\n\t\tfor (iterMEMSP = vecMEMSP.begin(); iterMEMSP != vecMEMSP.end(); iterMEMSP++)\r\n\t\t{\r\n\t\t\tmemcpy(pszRetold, iterMEMSP->pData, iterMEMSP->nLen);\r\n\t\t\tpszRetold += iterMEMSP->nLen;\r\n\t\t\tfree(iterMEMSP->pData);\r\n\t\t}\r\n\t\tpStr[nTLen] = 0;\r\n\t}\r\n\telse\r\n\t\tbRet = FALSE;\r\n\r\n\tvecMEMSP.clear();\r\n\treturn !bRet;\r\n}\r\n\r\nBOOL ReadFileBinData_Crypt(PFILEELEMENT pFile, LPBYTE& pByte, BOOL& bRet)\r\n{\r\n\tpByte = NULL;\r\n\tDWORD dwSize;\r\n\tDWORD dwNumOfByteRead;\r\n\tvoid* hFile = pFile->FileHandle;\r\n\tINT nPos = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r\n\tif (ReadFile(hFile, &dwSize, sizeof(INT), &dwNumOfByteRead, NULL))\r\n\t{\r\n\t\tE_RC4_Calc(nPos, (unsigned char*)&dwSize, sizeof(INT), pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\tif (dwNumOfByteRead < sizeof(INT))\r\n\t\t\treturn TRUE;\r\n\r\n\t\tpByte = (LPBYTE)E_MAlloc(dwSize + 2 * sizeof(INT));\r\n\t\tnPos = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r\n\r\n\t\tif (ReadFile(hFile, pByte + 2 * sizeof(INT), dwSize, &dwNumOfByteRead, NULL))\r\n\t\t{\r\n\t\t\tLPINT p = (LPINT)pByte;\r\n\t\t\tp[0] = 1;\r\n\t\t\tp[1] = dwNumOfByteRead;\r\n\t\t\tE_RC4_Calc(nPos, (unsigned char*)(pByte + 2 * sizeof(INT)), dwNumOfByteRead, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\tif (dwNumOfByteRead == dwSize)\r\n\t\t\t\treturn FALSE;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tE_MFree(pByte);\r\n\t\t\tpByte = NULL;\r\n\t\t}\r\n\t}\r\n\treturn TRUE;\r\n}\r\n\r\nLIBAPI(BOOL, krnln_read)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif (pFile == NULL)\r\n\t\treturn NULL;\r\n\tif (IsInFileMangerList(pFile) == FALSE)//Ϸ\r\n\t\treturn NULL;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\tBOOL bRet = FALSE;\r\n\tBOOL bEof = FALSE;\r\n\r\n\tif (pFile->nType == 1 || pFile->nType == 3)//ļ ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tbRet = TRUE;\r\n\t\tINT nPos;\r\n\t\tfor (INT i = 1; i < nArgCount; i++)\r\n\t\t{\r\n\t\t\tif (bRet == FALSE)\r\n\t\t\t\tbreak;\r\n\t\t\tif ((pArgInf[i].m_dtDataType & DT_IS_ARY) == DT_IS_ARY)//\r\n\t\t\t{\r\n\t\t\t\tpArgInf[i].m_dtDataType &= ~DT_IS_ARY; //ȥ־\r\n\r\n\t\t\t\tif (pArgInf[i].m_ppAryData == NULL)//\r\n\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\tif (pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\t{\r\n\t\t\t\t\tDWORD dwSize;\r\n\t\t\t\t\tLPSTR* pAryData = (LPSTR*)GetAryElementInf(*pArgInf[i].m_ppAryData, dwSize);\r\n\r\n\t\t\t\t\tfor (UINT n = 0; n < dwSize; n++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (pAryData[n])\r\n\t\t\t\t\t\t\tE_MFree(pAryData[n]);\r\n\r\n\t\t\t\t\t\tLPSTR pStr = NULL;\r\n\t\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (pFile->nType == 3) //ļ\r\n\t\t\t\t\t\t\t\tbEof = ReadFileTextData_Crypt(pFile, pStr, bRet);\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tbEof = ReadFileTextData(hFile, pStr, bRet);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpAryData[n] = pStr;\r\n\t\t\t\t\t\tif (bRet == FALSE)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if (pArgInf[i].m_dtDataType == SDT_BIN)\r\n\t\t\t\t{\r\n\t\t\t\t\tDWORD dwSize;\r\n\t\t\t\t\tLPBYTE* pAryData = (LPBYTE*)GetAryElementInf(*pArgInf[i].m_ppAryData, dwSize);\r\n\t\t\t\t\tINT nData = 0;\r\n\t\t\t\t\tfor (UINT n = 0; n < dwSize; n++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (pAryData[n])\r\n\t\t\t\t\t\t\tE_MFree(pAryData[n]);\r\n\t\t\t\t\t\tLPBYTE pByte = NULL;\r\n\t\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (pFile->nType == 3) //ļ\r\n\t\t\t\t\t\t\t\tbEof = ReadFileBinData_Crypt(pFile, pByte, bRet);\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tbEof = ReadFileBinData(hFile, pByte, bRet);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpAryData[n] = pByte;\r\n\r\n\t\t\t\t\t\tif (bRet == FALSE)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tINT nLen = GetSysDataTypeDataSize(pArgInf[i].m_dtDataType);\r\n\t\t\t\t\tif (nLen == 0)//ֵ֧\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tDWORD dwSize;\r\n\t\t\t\t\tvoid* pData = GetAryElementInf(*pArgInf[i].m_ppAryData, dwSize);\r\n\t\t\t\t\tnLen *= dwSize;\r\n\t\t\t\t\tmemset(pData, 0, nLen);\r\n\r\n\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnPos = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r\n\t\t\t\t\t\tif (ReadFile(hFile, pData, nLen, &dwNumOfByteRead, NULL))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (pFile->nType == 3) //ļ\r\n\t\t\t\t\t\t\t\tE_RC4_Calc(nPos, (unsigned char*)pData, dwNumOfByteRead, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\t\t\t\tif ((INT)dwNumOfByteRead < nLen)//β\r\n\t\t\t\t\t\t\t\tbEof = TRUE;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbRet = FALSE;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{//\r\n\t\t\t\tINT nLen;\r\n\t\t\t\tvoid* pData;\r\n\t\t\t\tINT nData = 0;\r\n\t\t\t\tif (pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (pArgInf[i].m_ppText)\r\n\t\t\t\t\t\tE_MFree(*pArgInf[i].m_ppText);\r\n\t\t\t\t\tLPSTR pStr = NULL;\r\n\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (pFile->nType == 3) // ļ\r\n\t\t\t\t\t\t\tbEof = ReadFileTextData_Crypt(pFile, pStr, bRet);\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tbEof = ReadFileTextData(hFile, pStr, bRet);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t*pArgInf[i].m_ppText = pStr;\r\n\r\n\t\t\t\t}\r\n\t\t\t\telse if (pArgInf[i].m_dtDataType == SDT_BIN)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (pArgInf[i].m_ppBin)\r\n\t\t\t\t\t\tE_MFree(*pArgInf[i].m_ppBin);\r\n\t\t\t\t\tLPBYTE pByte = NULL;\r\n\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (pFile->nType == 3) // ļ\r\n\t\t\t\t\t\t\tbEof = ReadFileBinData_Crypt(pFile, pByte, bRet);\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tbEof = ReadFileBinData(hFile, pByte, bRet);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t*pArgInf[i].m_ppBin = pByte;\r\n\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tnLen = GetSysDataTypeDataSize(pArgInf[i].m_dtDataType);\r\n\t\t\t\t\tif (nLen == 0)//ֵ֧\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tpData = pArgInf[i].m_pCompoundData;\r\n\t\t\t\t\tmemset(pData, 0, nLen);\r\n\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tDWORD dwByteTop;\r\n\t\t\t\t\t\tnPos = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);\r\n\t\t\t\t\t\tif (ReadFile(hFile, pData, nLen, &dwByteTop, NULL))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (pFile->nType == 3) //ļ\r\n\t\t\t\t\t\t\t\tE_RC4_Calc(nPos, (unsigned char*)pData, dwByteTop, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\t\t\t\tif (nLen > (INT)dwByteTop)//Ѿβ\r\n\t\t\t\t\t\t\t\tbEof = TRUE;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbRet = FALSE;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\telse if (pFile->nType == 2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*)pFile->FileHandle;\r\n\t\tbRet = TRUE;\r\n\t\tfor (INT i = 1; i < nArgCount; i++)\r\n\t\t{\r\n\r\n\t\t\tif ((pArgInf[i].m_dtDataType & DT_IS_ARY) == DT_IS_ARY)//\r\n\t\t\t{\r\n\t\t\t\tpArgInf[i].m_dtDataType &= ~DT_IS_ARY; //ȥ־\r\n\r\n\t\t\t\tif (pArgInf[i].m_ppAryData == NULL)//\r\n\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\tif (pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\t{\r\n\t\t\t\t\tDWORD dwSize;\r\n\t\t\t\t\tLPSTR* pAryData = (LPSTR*)GetAryElementInf(*pArgInf[i].m_ppAryData, dwSize);\r\n\r\n\t\t\t\t\tfor (UINT n = 0; n < dwSize; n++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (pAryData[n])\r\n\t\t\t\t\t\t\tE_MFree(pAryData[n]);\r\n\r\n\t\t\t\t\t\tLPSTR pStr = NULL;\r\n\t\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t\t\tbEof = ReadMemFileTextData(pMemFile, pStr);\r\n\t\t\t\t\t\tpAryData[n] = pStr;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if (pArgInf[i].m_dtDataType == SDT_BIN)\r\n\t\t\t\t{\r\n\t\t\t\t\tDWORD dwSize;\r\n\t\t\t\t\tLPBYTE* pAryData = (LPBYTE*)GetAryElementInf(*pArgInf[i].m_ppAryData, dwSize);\r\n\t\t\t\t\tINT nData = 0;\r\n\t\t\t\t\tfor (UINT n = 0; n < dwSize; n++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (pAryData[n])\r\n\t\t\t\t\t\t\tE_MFree(pAryData[n]);\r\n\t\t\t\t\t\tLPBYTE pByte = NULL;\r\n\t\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t\t\tbEof = ReadMemFileBinData(pMemFile, pByte);\r\n\t\t\t\t\t\tpAryData[n] = pByte;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tINT nLen = GetSysDataTypeDataSize(pArgInf[i].m_dtDataType);\r\n\t\t\t\t\tif (nLen == 0)//ֵ֧\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tDWORD dwSize;\r\n\t\t\t\t\tvoid* pData = GetAryElementInf(*pArgInf[i].m_ppAryData, dwSize);\r\n\t\t\t\t\tnLen *= dwSize;\r\n\t\t\t\t\tmemset(pData, 0, nLen);\r\n\r\n\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tDWORD dwByteTop = pMemFile->Read(pData, nLen);\r\n\t\t\t\t\t\tif (nLen > (INT)dwByteTop)//Ѿβ\r\n\t\t\t\t\t\t\tbEof = TRUE;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{//\r\n\t\t\t\tINT nLen;\r\n\t\t\t\tvoid* pData;\r\n\t\t\t\tINT nData = 0;\r\n\t\t\t\tif (pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (pArgInf[i].m_ppText)\r\n\t\t\t\t\t\tE_MFree(*pArgInf[i].m_ppText);\r\n\t\t\t\t\tLPSTR pStr = NULL;\r\n\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t\tbEof = ReadMemFileTextData(pMemFile, pStr);\r\n\t\t\t\t\t*pArgInf[i].m_ppText = pStr;\r\n\r\n\t\t\t\t}\r\n\t\t\t\telse if (pArgInf[i].m_dtDataType == SDT_BIN)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (pArgInf[i].m_ppBin)\r\n\t\t\t\t\t\tE_MFree(*pArgInf[i].m_ppBin);\r\n\t\t\t\t\tLPBYTE pByte = NULL;\r\n\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t\tbEof = ReadMemFileBinData(pMemFile, pByte);\r\n\t\t\t\t\t*pArgInf[i].m_ppBin = pByte;\r\n\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\r\n\t\t\t\t\tnLen = GetSysDataTypeDataSize(pArgInf[i].m_dtDataType);\r\n\t\t\t\t\tif (nLen == 0)//ֵ֧\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tpData = pArgInf[i].m_pCompoundData;\r\n\t\t\t\t\tmemset(pData, 0, nLen);\r\n\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tDWORD dwByteTop = pMemFile->Read(pData, nLen);\r\n\t\t\t\t\t\tif (nLen > (INT)dwByteTop)//Ѿβ\r\n\t\t\t\t\t\t\tbEof = TRUE;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\telse if (pFile->nType == 3) //ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tbRet = TRUE;\r\n\t\tfor (INT i = 1; i < nArgCount; i++)\r\n\t\t{\r\n\t\t\tif (bRet == FALSE)\r\n\t\t\t\tbreak;\r\n\t\t\tif ((pArgInf[i].m_dtDataType & DT_IS_ARY) == DT_IS_ARY)//\r\n\t\t\t{\r\n\t\t\t\tpArgInf[i].m_dtDataType &= ~DT_IS_ARY; //ȥ־\r\n\r\n\t\t\t\tif (pArgInf[i].m_ppAryData == NULL)//\r\n\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\tif (pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\t{\r\n\t\t\t\t\tDWORD dwSize;\r\n\t\t\t\t\tLPSTR* pAryData = (LPSTR*)GetAryElementInf(*pArgInf[i].m_ppAryData, dwSize);\r\n\r\n\t\t\t\t\tfor (UINT n = 0; n < dwSize; n++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (pAryData[n])\r\n\t\t\t\t\t\t\tE_MFree(pAryData[n]);\r\n\r\n\t\t\t\t\t\tLPSTR pStr = NULL;\r\n\t\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t\t\tbEof = ReadFileTextData(hFile, pStr, bRet);\r\n\t\t\t\t\t\tpAryData[n] = pStr;\r\n\t\t\t\t\t\tif (bRet == FALSE)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if (pArgInf[i].m_dtDataType == SDT_BIN)\r\n\t\t\t\t{\r\n\t\t\t\t\tDWORD dwSize;\r\n\t\t\t\t\tLPBYTE* pAryData = (LPBYTE*)GetAryElementInf(pArgInf[i].m_pAryData, dwSize);\r\n\t\t\t\t\tINT nData = 0;\r\n\t\t\t\t\tfor (UINT n = 0; n < dwSize; n++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (pAryData[n])\r\n\t\t\t\t\t\t\tE_MFree(pAryData[n]);\r\n\t\t\t\t\t\tLPBYTE pByte = NULL;\r\n\t\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t\t\tbEof = ReadFileBinData(hFile, pByte, bRet);\r\n\t\t\t\t\t\tpAryData[n] = pByte;\r\n\r\n\t\t\t\t\t\tif (bRet == FALSE)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tINT nLen = GetSysDataTypeDataSize(pArgInf[i].m_dtDataType);\r\n\t\t\t\t\tif (nLen == 0)//ֵ֧\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tDWORD dwSize;\r\n\t\t\t\t\tvoid* pData = GetAryElementInf(*pArgInf[i].m_ppAryData, dwSize);\r\n\t\t\t\t\tnLen *= dwSize;\r\n\t\t\t\t\tmemset(pData, 0, nLen);\r\n\r\n\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (ReadFile(hFile, pData, nLen, &dwNumOfByteRead, NULL))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif ((INT)dwNumOfByteRead < nLen)//β\r\n\t\t\t\t\t\t\t\tbEof = TRUE;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbRet = FALSE;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{//\r\n\t\t\t\tINT nLen;\r\n\t\t\t\tvoid* pData;\r\n\t\t\t\tINT nData = 0;\r\n\t\t\t\tif (pArgInf[i].m_dtDataType == SDT_TEXT)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (pArgInf[i].m_ppText)\r\n\t\t\t\t\t\tE_MFree(*pArgInf[i].m_ppText);\r\n\t\t\t\t\tLPSTR pStr = NULL;\r\n\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t\tbEof = ReadFileTextData(hFile, pStr, bRet);\r\n\t\t\t\t\t*pArgInf[i].m_ppText = pStr;\r\n\r\n\t\t\t\t}\r\n\t\t\t\telse if (pArgInf[i].m_dtDataType == SDT_BIN)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (pArgInf[i].m_ppBin)\r\n\t\t\t\t\t\tE_MFree(*pArgInf[i].m_ppBin);\r\n\t\t\t\t\tLPBYTE pByte = NULL;\r\n\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t\tbEof = ReadFileBinData(hFile, pByte, bRet);\r\n\t\t\t\t\t*pArgInf[i].m_ppBin = pByte;\r\n\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tnLen = GetSysDataTypeDataSize(pArgInf[i].m_dtDataType);\r\n\t\t\t\t\tif (nLen == 0)//ֵ֧\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tpData = pArgInf[i].m_pCompoundData;\r\n\t\t\t\t\tmemset(pData, 0, nLen);\r\n\t\t\t\t\tif (bEof == FALSE)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tDWORD dwByteTop;\r\n\t\t\t\t\t\tif (ReadFile(hFile, pData, nLen, &dwByteTop, NULL))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (nLen > (INT)dwByteTop)//Ѿβ\r\n\t\t\t\t\t\t\t\tbEof = TRUE;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbRet = FALSE;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_reset.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ļд - رļ\r\n/*\r\n    øʽ ޷ֵ رļ  - ϵͳֿ֧->ļд\r\n    Ӣƣreset\r\n    رб򿪵ļΪ\r\n*/\r\nextern PFILEELEMENT pFileList;\r\n\r\nLIBAPI(void, krnln_reset)\r\n{\r\n\tif(pFileList)\r\n\t\tResetFileIO();\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_rgb.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n// - ȡɫֵ\r\n/*\r\n    øʽ ͡ ȡɫֵ  ɫ ɫ ɫ - ϵͳֿ֧->\r\n    Ӣƣrgb\r\n    һʾһɫֵΪ\r\n    <1>ΪɫΪͣintֵΧ 0  255ʾɫеĺɫɷݡ\r\n    <2>ΪɫΪͣintֵΧ 0  255ʾɫеɫɷݡ\r\n    <3>ΪɫΪͣintֵΧ 0  255ʾɫеɫɷݡ\r\n*/\r\nLIBAPI(int, krnln_rgb)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\treturn RGB(pArgInf[0].m_int,pArgInf[1].m_int,pArgInf[2].m_int);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_right.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n//ı - ȡıұ\r\n/*\r\n    øʽ ı͡ ȡıұ ı ȡ䲿ֵı ȡַĿ - ϵͳֿ֧->ı\r\n    Ӣƣright\r\n    һıаָıдұַָΪ\r\n    <1>Ϊȡ䲿ֵıΪıͣtext\r\n    <2>ΪȡַĿΪͣint\r\n*/\r\nLIBAPI(char*, krnln_right)\r\n{// ߺ \r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tINT nSubLen = pArgInf[1].m_int;\r\n\tif (nSubLen <= 0) \r\n\t\treturn NULL;\r\n\tINT nLen = mystrlen(ArgInf.m_pText);\r\n\tif (nLen == 0) \r\n\t\treturn NULL;\r\n\tif (nSubLen > nLen)\r\n\t\tnSubLen = nLen;\r\n\tchar* pText = (char*)E_MAlloc_Nzero(nSubLen + 1);\r\n\tmemcpy(pText, ArgInf.m_pText + (nLen - nSubLen), nSubLen + 1);\r\n\treturn pText;\r\n}\r\n// {ԭ\r\n// \tPMDATA_INF pArgInf = &ArgInf;\r\n// \tUINT nLen = strlen(ArgInf.m_pText);\r\n// \tif(nLen==0 || pArgInf[1].m_int <=0)return NULL;\r\n// \r\n// \tINT nOffset = nLen - pArgInf[1].m_int;\r\n// \tif(nOffset < 0)\r\n// \t\tnOffset = 0;\r\n// \tchar* pSrc = ArgInf.m_pText + nOffset;\r\n// \tnLen = strlen(pSrc);\r\n// \r\n// \tchar *pText = (char*)E_MAlloc(nLen+1);\r\n// \tstrcpy(pText,pSrc);\r\n// \treturn pText;\t\r\n// }\r\n"
  },
  {
    "path": "krnln/krnln_rnd.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"limits.h\"\r\n#define XCHG(x, y) {x = x^y; y = x^y; x = x^y;}\r\n\r\n// - ȡ\r\n/*\r\n    øʽ ͡ ȡ  ȡСֵݣ ȡֵݣ - ϵͳֿ֧->\r\n    Ӣƣrnd\r\n    һָΧڵֵʹñȡһϵе֮ǰӦʹáӡΪʼһֵΪ\r\n    <1>ΪȡСֵΪͣintԱʡԡڻ㡣ʡԣĬΪ 0 \r\n    <2>ΪȡֵΪͣintԱʡԡڻ㡣ʡԣĬΪޡ\r\n*/\r\nLIBAPI(int, krnln_rnd)\r\n{\r\n\tPMDATA_INF pArg = &ArgInf;\r\n\r\n\tregister int nMin;\r\n\tregister int nMax;\r\n\r\n\t// check for min value\r\n\tif (pArg[0].m_dtDataType != _SDT_NULL)\r\n\t\tnMin = pArg[0].m_int < 0 ? 0 : pArg[0].m_int;\r\n\telse nMin = 0;\r\n\r\n\t// check for max value\r\n\tif (pArg[1].m_dtDataType != _SDT_NULL)\r\n\t\tnMax = pArg[1].m_int < 0 ? 0 : pArg[1].m_int;\r\n\telse nMax = INT_MAX;\r\n\r\n\t// if min bigger than max\r\n\t// xchg them\r\n\tif(nMin > nMax)\r\n\t\tXCHG(nMin, nMax);\r\n\t\r\n\treturn nMin + (rand() % (nMax - nMin + 1));\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_round.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n//#include <stdio.h>\r\n// - \r\n/*\r\n    øʽ ˫С͡  ˫С ֵ λãݣ - ϵͳֿ֧->\r\n    Ӣƣround\r\n    ذָķʽĽֵΪ\r\n    <1>ΪֵΪ˫Сͣdouble\r\n    <2>ΪλáΪͣintԱʡԡ0ʾСұӦλ0ʾ뵽С0ʾС뵽λá磺 (1056.65, 1)  1056.7  (1056.65, 0)  1057  (1056.65, -1)  1060ʡԱĬΪ0\r\n*/\r\n\r\ndouble round(double x)\r\n{\r\n\treturn floor(x+0.5);\r\n}\r\n\r\nLIBAPI(void, krnln_round)\r\n{\r\n\tPMDATA_INF pArg = &ArgInf;\r\n\r\n\tINT n;\r\n\tif(pArg[1].m_dtDataType == _SDT_NULL)\r\n\t\tn = 0;\r\n\telse\r\n\t\tn = pArg[1].m_int;\r\n\tif(n==0)\r\n\t\tArgInf.m_double = round(ArgInf.m_double);\r\n\telse if(n>0)\r\n\t{\r\n\t\tdouble dbNum = pow((double)10.0, n);\r\n\t\tArgInf.m_double = ArgInf.m_double * dbNum;\r\n\r\n\t\tArgInf.m_double = round(ArgInf.m_double)/dbNum;\r\n\r\n\t}else\r\n\t{\r\n\t\tn = abs(n);\r\n\t\tdouble dbNum = pow((double)10.0, n);\r\n\t\tArgInf.m_double = ArgInf.m_double / dbNum;\r\n\t\tArgInf.m_double = round(ArgInf.m_double)* dbNum;\r\n\t}\r\n\t/*\r\n\t\tchar str [100];\r\n\r\n\t\t\tsprintf(str,\"%lf\",(ArgInf.m_double));\r\nMessageBox(NULL,str,NULL,MB_OK);\r\n*/\r\n\r\n\t__asm\r\n\t{\r\n\t\tmov eax,ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx,ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_run.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ϵͳ - \r\n/*\r\n    øʽ ߼͡  ı еУ߼ Ƿȴϣ г򴰿ʾʽݣ - ϵͳֿ֧->ϵͳ\r\n    Ӣƣrun\r\n    ָĿִļⲿɹ棬򷵻ؼ١Ϊ\r\n    <1>ΪеСΪıͣtext\r\n    <2>ΪǷȴϡΪ߼ͣboolʼֵΪ١\r\n    <3>Ϊг򴰿ʾʽΪͣintԱʡԡֵΪ³֮һ\r\n\t1#شڣ 2#ͨ 3#С 4#󻯼 5#ͨ 6#СʡԱĬΪͨʽ\r\n*/\r\nLIBAPI(BOOL, krnln_run)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\tSTARTUPINFO startupinfo;\r\n\tPROCESS_INFORMATION pinfo;\r\n\r\n\tstartupinfo.cb=sizeof(STARTUPINFO);\r\n\tGetStartupInfo(&startupinfo);\r\n\tstartupinfo.hStdOutput=NULL;\r\n\tstartupinfo.hStdError=NULL;\r\n\tstartupinfo.dwFlags=STARTF_USESHOWWINDOW;\r\n\r\n\tif(pArgInf[2].m_dtDataType != _SDT_NULL)\r\n\t{\r\n\r\n\t\tswitch(pArgInf[2].m_int)\r\n\t\t{\r\n\t\tcase 1:\r\n\t\t\tstartupinfo.wShowWindow=SW_HIDE;\r\n\t\t\tbreak;\r\n\t\tcase 3:\r\n\t\t\tstartupinfo.wShowWindow = SW_SHOWMINIMIZED;\r\n\t\t\tbreak;\r\n\t\tcase 4:\r\n\t\t\tstartupinfo.wShowWindow = SW_SHOWMAXIMIZED;\r\n\t\t\tbreak;\t\r\n\t\tcase 5:\r\n\t\t\tstartupinfo.wShowWindow = SW_SHOWNOACTIVATE;\r\n\t\t\tbreak;\t\r\n\t\tcase 6:\r\n\t\t\tstartupinfo.wShowWindow = SW_SHOWMINNOACTIVE;\r\n\t\t\tbreak;\t\t\r\n\t\tdefault:\r\n\t\t\tstartupinfo.wShowWindow = SW_SHOW;\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\telse\r\n\t\tstartupinfo.wShowWindow = SW_SHOW;\r\n\r\n\t\r\n\t// Create process\r\n\tBOOL bRet = CreateProcess(NULL,pArgInf->m_pText,NULL,NULL,TRUE,NULL,NULL,NULL,&startupinfo,&pinfo);\r\n\tif(bRet)\r\n\t{\r\n\t\tif(pArgInf[1].m_bool)\r\n\t\t\tWaitForSingleObject(pinfo.hProcess, INFINITE);\r\n\t\tCloseHandle(pinfo.hProcess);\r\n\t\tCloseHandle(pinfo.hThread);\r\n\t}\r\n\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_second.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n//ʱ - ȡ\r\n/*\r\n    øʽ ͡ ȡ ʱ ʱ䣩 - ϵͳֿ֧->ʱ\r\n    Ӣƣsecond\r\n    һֵΪ 0  59 ֮ʾһеĳһ롣Ϊ\r\n    <1>Ϊʱ䡱Ϊʱͣdate\r\n*/\r\nLIBAPI(int, krnln_second)\r\n{\r\n\tINT nHour, nMinute, nSecond;\r\n\tGetTimePart(ArgInf.m_date ,nHour, nMinute, nSecond);\r\n\treturn nSecond;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_sgn.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n// - ȡ\r\n/*\r\n    øʽ ͡ ȡ ˫С ȡŵֵ - ϵͳֿ֧->\r\n    Ӣƣsgn\r\n    һС㣬ֵΪ㣬ֵΪ㣻㣬ֵΪΪ\r\n    <1>ΪȡŵֵΪ˫Сͣdouble\r\n*/\r\nLIBAPI(int, krnln_sgn)\r\n{\r\n\tint n = 0;\r\n\tif(ArgInf.m_double>0)\r\n\t\tn = 1;\r\n\telse if(ArgInf.m_double<0)\r\n\t\tn = -1;\r\n\treturn n;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_shl.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//λ - \r\n/*\r\n    øʽ ͡   ƶ ƶλ - ϵͳֿ֧->λ\r\n    Ӣƣshl\r\n    ĳλָλƶĽΪм\r\n    <1>ΪƶΪͣint\r\n    <2>ΪƶλΪͣint\r\n*/\r\nLIBAPI(int, krnln_shl)\r\n{\r\n\tPMDATA_INF pArg = &ArgInf;\r\n\tint n = pArg->m_int << pArg[1].m_int;\r\n\r\n\treturn n;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_shr.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//λ - \r\n/*\r\n    øʽ ͡   ƶ ƶλ - ϵͳֿ֧->λ\r\n    Ӣƣshr\r\n    ĳλָλƶĽΪм\r\n    <1>ΪƶΪͣint\r\n    <2>ΪƶλΪͣint\r\n*/\r\nLIBAPI(int, krnln_shr)\r\n{\r\n\tPMDATA_INF pArg = &ArgInf;\r\n\tint n = pArg->m_int >> pArg[1].m_int;\r\n\r\n\treturn n;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_sin.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n\r\n// - \r\n/*\r\n    øʽ ˫С͡  ˫С мĽǣ - ϵͳֿ֧->\r\n    Ӣƣsin\r\n    ָǵֵΪ\r\n    <1>ΪмĽǡΪ˫СͣdoubleʹõλΪȡΪ˽Ƕתɻȣ뽫Ƕȳ #pi / 180Ϊ˽תɽǶȣ뽫ȳ 180 / #piֵڵ 2  63 ηСڵ -2  63 η¼\r\n*/\r\nLIBAPI(void, krnln_sin)\r\n{\r\n\r\n\tArgInf.m_double = sin(ArgInf.m_double);\r\n\t__asm\r\n\t{\r\n\t\tmov eax,ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx,ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_sleep.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ϵͳ - ʱ\r\n/*\r\n    øʽ ޷ֵ ʱ  ȴʱ䣩 - ϵͳֿ֧->ϵͳ\r\n    Ӣƣsleep\r\n    ͣǰвȴָʱ䡣Ϊ\r\n    <1>Ϊȴʱ䡱Ϊͣintִָͣеʱ䣬λΪ롣\r\n*/\r\nLIBAPI(void, krnln_sleep)\r\n{\r\n\tif (ArgInf.m_int <= 0)\r\n\t\treturn;\r\n\t\r\n\tSleep(ArgInf.m_int);\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_space.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ı - ȡհı\r\n/*\r\n    øʽ ı͡ ȡհı  ظ - ϵͳֿ֧->ı\r\n    Ӣƣspace\r\n    ؾָĿǿոıΪ\r\n    <1>ΪظΪͣint\r\n*/\r\nLIBAPI(char*, krnln_space)\r\n{\r\n\tif(ArgInf.m_int<= 0) return NULL;\r\n\tchar *pText = (char*)E_MAlloc_Nzero(ArgInf.m_int+1);\r\n\tmemset(pText,32,ArgInf.m_int);\r\n\tpText[ArgInf.m_int]=0;\r\n\treturn pText;\t\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_split.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"mem.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n\r\n//ı - ָı\r\n/*\r\n    øʽ ı页 ָı ı ָıı ָıݣ ҪصıĿݣ - ϵͳֿ֧->ı\r\n    Ӣƣsplit\r\n    ָıзָطָһάı顣Ϊ\r\n    <1>ΪָıΪıͣtextֵһΪı򷵻һ飬ûκγԱ顣\r\n    <2>ΪָıΪıͣtextԱʡԡֵڱʶı߽硣ʡԣĬʹðǶַΪָһΪı򷵻صһԱġָı\r\n    <3>ΪҪصıĿΪͣintԱʡԡʡԣĬϷеı\r\n\r\n*/\r\n#define IS_CC(p) p<0\r\n\r\nLIBAPI(void*, krnln_split)\r\n{// ߺ \r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tINT nCount = pArgInf [2].m_dtDataType == _SDT_NULL ? 0x7FFFFFFF : pArgInf [2].m_int;\r\n\tLPBYTE p;\r\n\tif (nCount <= 0) \r\n\t\treturn E_NULLARRAY();\r\n\r\n\tchar* pSub = pArgInf [1].m_dtDataType == _SDT_NULL ? (LPSTR)\",\" : pArgInf [1].m_pText;\r\n\tINT nSubLen = mystrlen(pSub);\r\n\r\n\tchar* pSrc = pArgInf[0].m_pText;\r\n\tif (!pSrc || !*pSrc)\r\n\t\treturn E_NULLARRAY();\r\n\r\n\tif (nSubLen==0)\r\n\t\tnCount = -1;//һԱ\r\n\r\n\t// ʼ\r\n\tTBR tbr;\r\n\tINT nPos;\r\n\tchar* pFirst = pSrc;\r\n\tchar* cp = pSrc;\r\n\tfor (; nCount > 0; nCount--)\r\n\t{\r\n\t\tnPos = mystrstr((char*)cp, (char*)pSub);\r\n\t\tif (nPos == -1)\r\n\t\t\tbreak;\r\n\t\tcp += nPos;\r\n\t\ttbr.add(pFirst, cp - pFirst);\r\n\t\tcp += nSubLen;\r\n\t\tpFirst = cp;\r\n\t}\r\n\t\r\n\tINT nSlen = mystrlen(cp) + cp - pSrc;\r\n\tchar* pLast = pSrc + nSlen;\r\n\tif (pLast - pFirst > 0 && nCount != 0)\r\n\t\ttbr.add(pFirst, pLast - pFirst);\r\n\r\n\t// ݡ\r\n\tnCount = tbr.m_nCount;\r\n\tINT nSize = nCount * sizeof (DWORD);\r\n\tp = (LPBYTE)E_MAlloc_Nzero (sizeof (INT) * 2 + nSize);\r\n\t*(LPINT)p = 1;  // ά\r\n\t*(LPINT)(p + sizeof (INT)) = nCount;\r\n\tLPINT pp = (LPINT)(p + 2*sizeof(INT));\r\n\tfor (int i=0; i < nCount; i++)\r\n\t{\r\n\t\t*pp = (INT)CloneTextData((char*)(tbr.m_data[i].addr), tbr.m_data[i].len);\r\n\t\tpp++;\r\n\t}\r\n\treturn p;  // 顣\r\n}\r\n\r\n"
  },
  {
    "path": "krnln/krnln_sqr.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n// - ƽ\r\n/*\r\n    øʽ ˫С͡ ƽ ˫С ƽֵ - ϵͳֿ֧->\r\n    Ӣƣsqr\r\n    ָƽΪ\r\n    <1>ΪƽֵΪ˫СͣdoubleֵС㽫¼\r\n*/\r\nLIBAPI(void, krnln_sqr)\r\n{\r\n\tPMDATA_INF pArg = &ArgInf;\r\n\r\n\tArgInf.m_double = sqrt(ArgInf.m_double);\r\n\r\n\t__asm\r\n\t{\r\n\t\tmov eax,ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx,ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_str.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <stdio.h>\r\n#include \"LTrimZeroChr.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//#pragma comment(lib,\"oleaut32.lib\") \r\n\r\n//ı - ı\r\n/*\r\n    øʽ ı͡ ı ͨ/ תݣ - ϵͳֿ֧->ı\r\n    Ӣƣstr\r\n    һıֵָ߼ֵʱ䱻תĽΪıݣֱӷءΪ\r\n    <1>ΪתݡΪͨͣallṩʱͬʱṩݡֵֻΪֵ߼ֵֽڼʱֵ顣\r\n*/\r\nchar * ArryToString(void* pArry,DWORD szData)\r\n{\r\n\tDWORD dwSize;\r\n\tchar* pText = (char*)GetAryElementInf(pArry,dwSize);\r\n\tif(dwSize==0)\r\n\t\treturn NULL;\r\n\tINT nMax = dwSize * szData;\r\n\tINT i;\r\n\tfor(i=0;i<nMax;i++)\r\n\t{\r\n\t\tif(pText[i]==0)\r\n\t\t\tbreak;\r\n\t}\r\n\tUINT nLen = i;\r\n\r\n\tif(nLen==0)return NULL;\r\n\tchar* pNewText = (char*)E_MAlloc_Nzero(nLen+1);\r\n\tmemcpy(pNewText,pText,nLen);\r\n\tpNewText[nLen] = 0;\r\n\treturn pNewText;\r\n\r\n}\r\n\r\nLIBAPI(char*, krnln_str)\r\n{\r\n\r\n\tchar * pText = NULL;\r\n\tif((ArgInf.m_dtDataType & DT_IS_ARY) == DT_IS_ARY)//\r\n\t{\r\n\t\tArgInf.m_dtDataType &=~DT_IS_ARY; //ȥ־\r\n\t\tDWORD szData = 0;\r\n\t\tswitch(ArgInf.m_dtDataType)\r\n\t\t{\r\n\t\tcase SDT_BYTE:\r\n\t\t\tszData = sizeof(BYTE);\r\n\t\t\tbreak;\r\n\t\tcase SDT_SHORT:\r\n\t\t\tszData = sizeof(SHORT);\r\n\t\t\tbreak;\r\n\t\tcase SDT_INT64:\r\n\t\t\tszData = sizeof(INT64);\r\n\t\t\tbreak;\r\n\t\tcase SDT_INT:\r\n\t\tcase SDT_SUB_PTR:\r\n\t\t\tszData = sizeof(DWORD);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tif(szData)\r\n\t\t\tpText = ArryToString(ArgInf.m_pAryData,szData);\r\n\t}\r\n\telse\r\n\t{\r\n\t\tchar str [MAX_PATH];\r\n\t\tint nLen = 0;\r\n\t\tchar* pSrc = NULL;\r\n\r\n\t\tswitch(ArgInf.m_dtDataType)\r\n\t\t{\r\n\t\tcase SDT_TEXT:\r\n\t\t\tnLen = mystrlen(ArgInf.m_pText);\r\n\t\t\tif(nLen)\r\n\t\t\t\tpSrc = ArgInf.m_pText;\r\n\t\t\tbreak;\r\n\t\tcase SDT_BYTE:\r\n\t\t\t{\r\n\t\t\t\tINT nVal = ArgInf.m_byte;\r\n\t\t\t\tsprintf(str,\"%d\",nVal);\r\n\t\t\t\tnLen = mystrlen(str);\r\n\t\t\t\tpSrc = str;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase SDT_SHORT:\r\n\t\t\t{\r\n\t\t\t\tINT nVal = ArgInf.m_short;\r\n\t\t\t\tsprintf(str,\"%d\",nVal);\r\n\t\t\t\tnLen = mystrlen(str);\r\n\t\t\t\tpSrc = str;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase SDT_INT:\r\n\t\tcase SDT_SUB_PTR:\r\n\t\t\tsprintf(str,\"%d\",ArgInf.m_int);\r\n\t\t\tnLen = mystrlen(str);\r\n\t\t\tpSrc = str;\r\n\t\t\tbreak;\r\n\t\tcase SDT_INT64:\r\n\t\t\tsprintf(str,\"%I64d\",ArgInf.m_int64);\r\n\t\t\tnLen = mystrlen(str);\r\n\t\t\tpSrc = str;\r\n\t\t\tbreak;\r\n\t\tcase SDT_FLOAT:\r\n\t\t\tsprintf(str,\"%f\",ArgInf.m_float);\r\n\t\t\tLTrimZeroChr(str);\r\n\t\t\tnLen = mystrlen(str);\r\n\t\t\tpSrc = str;\r\n\t\t\tbreak;\r\n\t\tcase SDT_DOUBLE:\r\n\t\t\tsprintf(str,\"%.13g\",ArgInf.m_double);\r\n\t\t\tLTrimZeroChr(str);\r\n\t\t\tnLen = mystrlen(str);\r\n\t\t\tpSrc = str;\r\n\t\t\tbreak;\r\n\t\tcase SDT_BOOL:\r\n\t\t\tif(ArgInf.m_bool)\r\n\t\t\t\tstrcpy(str,\"\");\r\n\t\t\telse\r\n\t\t\t\tstrcpy(str,\"\");\r\n\t\t\tnLen = mystrlen(str);\r\n\t\t\tpSrc = str;\r\n\t\t\tbreak;\r\n\t\tcase SDT_BIN:\r\n\t\t\tpText = ArryToString(ArgInf.m_pBin,sizeof(BYTE));\r\n\t\t\tbreak;\r\n\t\tcase SDT_DATE_TIME:\r\n\t\t\tDateTimeFormat(str,ArgInf.m_double);\r\n\t\t\tnLen = mystrlen(str);\r\n\t\t\tif(nLen)\r\n\t\t\t\tpSrc = str;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tif(pSrc && nLen)\r\n\t\t{\r\n\t\t\tpText = (char*)E_MAlloc_Nzero(nLen+1);\r\n\t\t\tstrcpy(pText,pSrc);\r\n\t\t}\r\n\r\n\t}\r\n\treturn pText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_string.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Myfunctions.h\"\r\n//ı - ȡظı\r\n/*\r\n    øʽ ı͡ ȡظı  ظı ظı - ϵͳֿ֧->ı\r\n    Ӣƣstring\r\n    һıаָıظΪ\r\n    <1>ΪظΪͣint\r\n    <2>ΪظıΪıͣtextıڽصıΪգһı\r\n*/\r\nLIBAPI(char*, krnln_string)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tINT nLen = mystrlen(pArgInf[1].m_pText);\r\n\tif(nLen == 0 || ArgInf.m_int <=0 ) return NULL;\r\n\r\n\tINT nBuf = nLen * ArgInf.m_int;\r\n\tchar *pText = (char*)E_MAlloc_Nzero(nBuf+1);\r\n\tchar* pDest = pText;\r\n\tfor(INT i=0;i< ArgInf.m_int;i++)\r\n\t{\r\n\t\tstrncpy(pDest,pArgInf[1].m_pText,nLen);\r\n\t\tpDest+=nLen;\r\n\t}\r\n\t*pDest = 0;\r\n\treturn pText;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_tan.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n// - \r\n/*\r\n    øʽ ˫С͡  ˫С мĽǣ - ϵͳֿ֧->\r\n    Ӣƣtan\r\n    ָǵֵΪ\r\n    <1>ΪмĽǡΪ˫СͣdoubleʹõλΪȡΪ˽Ƕתɻȣ뽫Ƕȳ #pi / 180Ϊ˽תɽǶȣ뽫ȳ 180 / #piֵڵ 2  63 ηСڵ -2  63 η¼\r\n*/\r\nLIBAPI(void, krnln_tan)\r\n{\r\n\tArgInf.m_double = tan(ArgInf.m_double);\r\n\t__asm\r\n\t{\r\n\t\tmov eax,ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx,ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_trim.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ı - ɾβ\r\n/*\r\n    øʽ ı͡ ɾβ ı ɾոı - ϵͳֿ֧->ı\r\n    Ӣƣtrim\r\n    һıаɾײβȫǻǿոָıΪ\r\n    <1>ΪɾոıΪıͣtext\r\n*/\r\nLIBAPI(char*, krnln_trim)\r\n{\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\tchar* pSrc = pArgInf[0].m_pText;\r\n\tregister char *str1 = pSrc;\r\n\r\n\t//׿\r\n\twhile ( *str1 )\r\n\t{\r\n\t\tif (*str1 == ' ')\r\n\t\t\tstr1++;\r\n\t\telse if (*((unsigned short*)str1) == 0xA1A1)\r\n\t\t\tstr1+=2;\r\n\t\telse\r\n\t\t\tbreak;\r\n\t}\r\n\tif (!*str1) return NULL; //ıֱӷ\r\n\tpSrc = str1;\r\n\t//β\r\n\tregister char* pLastNS = NULL;\r\n\twhile ( *str1 )\r\n\t{\r\n\t\tif (*((unsigned short*)str1) == 0xA1A1)\r\n\t\t\tstr1++;\r\n\t\telse\r\n\t\t{\r\n\t\t\tif (*str1 != ' ')\r\n\t\t\t{\r\n\t\t\t\tif (*str1 < 0)\r\n\t\t\t\t{\t\r\n\t\t\t\t\tpLastNS = str1 + 1;\r\n\t\t\t\t\tstr1++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpLastNS = str1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tstr1++;\r\n\t}\r\n\tif (!pLastNS) return NULL; //ıֱӷ\r\n\r\n\tINT nLen = pLastNS - pSrc + 1;\r\n\tchar *pText = (char*)E_MAlloc_Nzero(nLen+1);\r\n\tmemcpy(pText, pSrc, nLen);\r\n\tpText[nLen] = '\\0';\r\n\treturn pText;\r\n}\r\n// {\r\n// \tchar *pText = krnln_LTrim(1,ArgInf);\r\n// \tif(pText==NULL)return NULL;\r\n// \r\n// \tINT nLen = strlen(pText);\r\n// \r\n// \tchar* pSrc = pText + nLen - 1;\r\n// \twhile(pSrc >= pText)\r\n// \t{\r\n// \t\tif(*pSrc == ' ' || (*pSrc == -95 && *(pSrc-1) == -95))\r\n// \t\t{\r\n// \t\t\tif(*pSrc< 0)\r\n// \t\t\t{\r\n// \t\t\t\tpSrc-=2;\r\n// \t\t\t}\r\n// \t\t\telse\r\n// \t\t\t{\r\n// \t\t\t\tpSrc--;\r\n// \t\t\t}\r\n// \t\t}\r\n// \t\telse\r\n// \t\t{\r\n// \t\t\tpSrc++;\r\n// \t\t\t*pSrc = 0;\r\n// \r\n// \t\t\tbreak;\r\n// \t\t}\r\n// \r\n// \t}\r\n// \tnLen = strlen(pText);\r\n// \tif(nLen == 0)\r\n// \t{\r\n// \t\tE_MFree(pText);\r\n// \t\tpText = NULL;\r\n// \t}\r\n// \treturn pText;\r\n// }\r\n"
  },
  {
    "path": "krnln/krnln_val.cpp",
    "content": "#include \"stdafx.h\"\r\n\r\n//ֵת - ֵ\r\n/*\r\n    øʽ ˫С͡ ֵ ͨ תıֵ - ϵͳֿ֧->ֵת\r\n    Ӣƣval\r\n    ذıڵֵıһʵ͵ֵ֧ȫдʽҲ͵תΪ˫СΪ\r\n    <1>ΪתıֵΪͨͣall\r\n*/\r\nLIBAPI(void, krnln_val)\r\n{\r\n\tswitch(ArgInf.m_dtDataType)\r\n\t{\r\n\tcase SDT_BYTE:\r\n\t\t{\r\n\t\t\tINT nVal = ArgInf.m_byte;\r\n\t\t\tArgInf.m_double = nVal;\r\n\t\t}\r\n\t\tbreak;\r\n\tcase SDT_SHORT:\r\n\t\t{\r\n\t\t\tINT nVal = ArgInf.m_short;\r\n\t\t\tArgInf.m_double = nVal;\r\n\t\t}\r\n\t\tbreak;\r\n\tcase SDT_TEXT:\r\n\t\t{\r\n\t\t\tchar* pStr = krnln_BJCase(1,ArgInf);\r\n\t\t\tif(pStr)\r\n\t\t\t{\r\n\t\t\t\tArgInf.m_double = strtod(pStr,NULL);\r\n\t\t\t\tE_MFree(pStr);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tArgInf.m_double = 0;\r\n\t\t\t//ArgInf.m_double = strtod(ArgInf.m_pText,NULL);\r\n\t\t}\r\n\t\tbreak;\r\n\tcase SDT_DATE_TIME:\r\n\tcase SDT_DOUBLE:\r\n\t\tbreak;\r\n\tcase SDT_FLOAT:\r\n\t\t{\r\n\t\t\tFLOAT floatval = ArgInf.m_float;\r\n\t\t\tArgInf.m_double = floatval;\r\n\t\t}\r\n\t\tbreak;\r\n\tcase SDT_INT64:\r\n\t\t{\r\n\t\t\tINT64 int64 = ArgInf.m_int64;\r\n\t\t\tArgInf.m_double = (DOUBLE)int64;\r\n\t\t}\r\n\t\tbreak;\r\n\tdefault:\r\n\t\t{\r\n\t\t\tINT nVal = ArgInf.m_int;\r\n\t\t\tArgInf.m_double = nVal;//10011\r\n\t\t}\r\n\t}\r\n\t__asm{\r\n\t\tmov eax, ArgInf.m_unit.m_dwFormID;\r\n\t\tmov edx, ArgInf.m_unit.m_dwUnitID;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_write.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MyMemFile.h\"\r\n#include \"Myfunctions.h\"\r\n\r\n//ļд - д\r\n/*\r\n    øʽ ߼͡ д  дݵļţͨ/ дݣ...  - ϵͳֿ֧->ļд\r\n    Ӣƣwrite\r\n    Ӧ롰롱ʹãдһϵбĸʽݵļеǰдλôɹ棬ʧܷؼ١\r\nݵдʽΪ\r\n  1ֵ͡߼͡ʱ͡ӳָͣ ΪӦʵݣ\r\n  2ıͣ   Ϊı + ֽ 0 \r\n  3ֽڼͣ Ϊֽڼݳȣ + ֽڼʵݣ\r\n  4ϸ͵ݣ Ϊݸʽ˳СΪмһԱظӡ\r\n    <1>ΪдݵļšΪͣintļɡļء\r\n    <2>ΪдݡΪͨͣallṩʱͬʱṩݡдݵΪûԶⶨͣʧܡ\r\n*/\r\nLIBAPI(BOOL, krnln_write)\r\n{\r\n\tPFILEELEMENT pFile = (PFILEELEMENT)ArgInf.m_pCompoundData;\r\n\tif(pFile==NULL)\r\n\t\treturn NULL;\r\n\tif(IsInFileMangerList(pFile)==FALSE)//Ϸ\r\n\t\treturn NULL;\r\n\tPMDATA_INF pArgInf = &ArgInf;\r\n\r\n\tBOOL bRet = FALSE;\r\n\r\n\tif(pFile->nType ==1 || pFile->nType == 3)//ļ ļ\r\n\t{\r\n\t\tHANDLE hFile = (HANDLE)pFile->FileHandle;\r\n\t\tDWORD dwNumOfByteRead;\r\n\t\tbRet = TRUE;\r\n\t\tINT nPos;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\t\t\tif(bRet == FALSE)\r\n\t\t\t\tbreak;\r\n\t\t\tif((pArgInf[i].m_dtDataType & DT_IS_ARY) == DT_IS_ARY)//\r\n\t\t\t{\r\n\t\t\t\tpArgInf[i].m_dtDataType &=~DT_IS_ARY; //ȥ־\r\n\t\t\t\tif(pArgInf[i].m_dtDataType==SDT_TEXT)\r\n\t\t\t\t{\r\n\t\t\t\t\tDWORD dwSize;\r\n\t\t\t\t\tLPSTR* pAryData = (LPSTR*)GetAryElementInf(pArgInf[i].m_pAryData,dwSize);\r\n\t\t\t\t\tINT nData = 0;\r\n\t\t\t\t\tfor(UINT n=0;n<dwSize;n++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINT nLen;\r\n\t\t\t\t\t\tvoid* pData;\r\n\t\t\t\t\t\tif(pAryData[n]==NULL)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tnLen = 1;\r\n\t\t\t\t\t\t\tpData = &nData;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tnLen = mystrlen(pAryData[n])+1;\r\n\t\t\t\t\t\t\tpData = pAryData[n];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvoid *pTMP = NULL;\r\n\t\t\t\t\t\tif (pFile->nType == 3) //ļ\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tpTMP = malloc(nLen);\r\n\t\t\t\t\t\t\tmemcpy(pTMP, pData, nLen);\r\n\t\t\t\t\t\t\tnPos = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\t\t\t\t\t\tE_RC4_Calc(nPos, (unsigned char*)pTMP, nLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\t\t\t\tpData = pTMP;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL))\r\n\t\t\t\t\t\t{\r\n//\t\t\t\t\t\t\tif(FlushFileBuffers(hFile)==FALSE)\r\n//\t\t\t\t\t\t\t\tbRet = FALSE;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tbRet = FALSE;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (pTMP)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tfree(pTMP);\r\n\t\t\t\t\t\t\tpTMP = NULL;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(bRet == FALSE)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t}else if(pArgInf[i].m_dtDataType==SDT_BIN)\r\n\t\t\t\t{\r\n\t\t\t\t\tDWORD dwSize;\r\n\t\t\t\t\tLPINT* pAryData = (LPINT*)GetAryElementInf(pArgInf[i].m_pAryData,dwSize);\r\n\t\t\t\t\tINT nData = 0;\r\n\t\t\t\t\tfor(UINT n=0;n<dwSize;n++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvoid* pData;\r\n\t\t\t\t\t\tINT nLen;\r\n\t\t\t\t\t\tif(pAryData[n]==NULL)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tpData = &nData;\r\n\t\t\t\t\t\t\tnLen = sizeof(INT);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tLPINT p = pAryData[n];\r\n\t\t\t\t\t\t\tnLen = p[1]+sizeof(INT);\r\n\t\t\t\t\t\t\tp++;\r\n\t\t\t\t\t\t\tpData = p;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvoid *pTMP = NULL;\r\n\t\t\t\t\t\tif (pFile->nType == 3) //ļ\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tpTMP = malloc(nLen);\r\n\t\t\t\t\t\t\tmemcpy(pTMP, pData, nLen);\r\n\t\t\t\t\t\t\tnPos = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\t\t\t\t\t\tE_RC4_Calc(nPos, (unsigned char*)pTMP, nLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\t\t\t\tpData = pTMP;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL))\r\n\t\t\t\t\t\t{\r\n//\t\t\t\t\t\t\tif(FlushFileBuffers(hFile)==FALSE)\r\n//\t\t\t\t\t\t\t\tbRet = FALSE;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tbRet = FALSE;\r\n\r\n\t\t\t\t\t\tif (pTMP)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tfree(pTMP);\r\n\t\t\t\t\t\t\tpTMP = NULL;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(bRet == FALSE)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tINT nLen = GetSysDataTypeDataSize(pArgInf[i].m_dtDataType);\r\n\t\t\t\t\tif(nLen==0)//ֵ֧\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tDWORD dwSize;\r\n\t\t\t\t\tvoid* pData = GetAryElementInf(pArgInf[i].m_pAryData,dwSize);\r\n\t\t\t\t\tnLen *= dwSize;\r\n\r\n\t\t\t\t\tvoid *pTMP = NULL;\r\n\t\t\t\t\tif (pFile->nType == 3) //ļ\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpTMP = malloc(nLen);\r\n\t\t\t\t\t\tmemcpy(pTMP, pData, nLen);\r\n\t\t\t\t\t\tnPos = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\t\t\t\t\tE_RC4_Calc(nPos, (unsigned char*)pTMP, nLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\t\t\tpData = pTMP;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL))\r\n\t\t\t\t\t{\r\n//\t\t\t\t\t\tif(FlushFileBuffers(hFile)==FALSE)\r\n//\t\t\t\t\t\t\tbRet = FALSE;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tbRet = FALSE;\r\n\r\n\t\t\t\t\tif (pTMP)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfree(pTMP);\r\n\t\t\t\t\t\tpTMP = NULL;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(bRet == FALSE)\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{//\r\n\t\t\t\tINT nLen;\r\n\t\t\t\tvoid* pData;\r\n\t\t\t\tINT nData = 0;\r\n\t\t\t\tif(pArgInf[i].m_dtDataType==SDT_TEXT)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(pArgInf[i].m_pText==NULL)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnLen = 1;\r\n\t\t\t\t\t\tpData = &nData;\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnLen = mystrlen(pArgInf[i].m_pText)+1;\r\n\t\t\t\t\t\tpData = pArgInf[i].m_pText;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else if(pArgInf[i].m_dtDataType==SDT_BIN)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(pArgInf[i].m_pBin==NULL)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnLen = sizeof(INT);\r\n\t\t\t\t\t\tpData = &nData;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tLPINT p = (LPINT)pArgInf[i].m_pBin;\r\n\t\t\t\t\t\tnLen = p[1]+sizeof(INT);\r\n\t\t\t\t\t\tp++;\r\n\t\t\t\t\t\tpData = p;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tnLen = GetSysDataTypeDataSize(pArgInf[i].m_dtDataType);\r\n\t\t\t\t\tif(nLen==0)//ֵ֧\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tpData = &pArgInf[i].m_int;\r\n\t\t\t\t}\r\n\t\t\t\tvoid *pTMP = NULL;\r\n\t\t\t\tif (pFile->nType == 3) //ļ\r\n\t\t\t\t{\r\n\t\t\t\t\tpTMP = malloc(nLen);\r\n\t\t\t\t\tmemcpy(pTMP, pData, nLen);\r\n\t\t\t\t\tnPos = SetFilePointer(hFile,0,NULL,FILE_CURRENT);\r\n\t\t\t\t\tE_RC4_Calc(nPos, (unsigned char*)pTMP, nLen, pFile->strTable, pFile->nCryptStart, pFile->strMD5);\r\n\t\t\t\t\tpData = pTMP;\r\n\t\t\t\t}\r\n\t\t\t\tif(WriteFile(hFile,pData,nLen,&dwNumOfByteRead,NULL))\r\n\t\t\t\t{\r\n//\t\t\t\t\tif(FlushFileBuffers(hFile)==FALSE)\r\n//\t\t\t\t\t\tbRet = FALSE;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tbRet = FALSE;\r\n\r\n\t\t\t\tif (pTMP)\r\n\t\t\t\t{\r\n\t\t\t\t\tfree(pTMP);\r\n\t\t\t\t\tpTMP = NULL;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(bRet == FALSE)\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\r\n\t}else if(pFile->nType ==2)//ڴļ\r\n\t{\r\n\t\tCMyMemFile* pMemFile = (CMyMemFile*) pFile->FileHandle;\r\n\t\tbRet = TRUE;\r\n\t\tfor(INT i=1;i < nArgCount;i++)\r\n\t\t{\r\n\r\n\t\t\tif((pArgInf[i].m_dtDataType & DT_IS_ARY) == DT_IS_ARY)//\r\n\t\t\t{\r\n\t\t\t\tpArgInf[i].m_dtDataType &=~DT_IS_ARY; //ȥ־\r\n\t\t\t\tif(pArgInf[i].m_dtDataType==SDT_TEXT)\r\n\t\t\t\t{\r\n\t\t\t\t\tDWORD dwSize;\r\n\t\t\t\t\tLPSTR* pAryData = (LPSTR*)GetAryElementInf(pArgInf[i].m_pAryData,dwSize);\r\n\t\t\t\t\tINT nData = 0;\r\n\t\t\t\t\tfor(UINT n=0;n<dwSize;n++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINT nLen;\r\n\t\t\t\t\t\tvoid* pData;\r\n\t\t\t\t\t\tif(pAryData[n]==NULL)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tnLen = 1;\r\n\t\t\t\t\t\t\tpData = &nData;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tnLen = mystrlen(pAryData[n])+1;\r\n\t\t\t\t\t\t\tpData = pAryData[n];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpMemFile->Write(pData,nLen);\r\n\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t}else if(pArgInf[i].m_dtDataType==SDT_BIN)\r\n\t\t\t\t{\r\n\t\t\t\t\tDWORD dwSize;\r\n\t\t\t\t\tLPINT* pAryData = (LPINT*)GetAryElementInf(pArgInf[i].m_pAryData,dwSize);\r\n\t\t\t\t\tINT nData = 0;\r\n\t\t\t\t\tfor(UINT n=0;n<dwSize;n++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvoid* pData;\r\n\t\t\t\t\t\tINT nLen;\r\n\t\t\t\t\t\tif(pAryData[n]==NULL)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tpData = &nData;\r\n\t\t\t\t\t\t\tnLen = sizeof(INT);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tLPINT p = pAryData[n];\r\n\t\t\t\t\t\t\tnLen = p[1]+sizeof(INT);\r\n\t\t\t\t\t\t\tp++;\r\n\t\t\t\t\t\t\tpData = p;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpMemFile->Write(pData,nLen);\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tINT nLen = GetSysDataTypeDataSize(pArgInf[i].m_dtDataType);\r\n\t\t\t\t\tif(nLen==0)//ֵ֧\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tDWORD dwSize;\r\n\t\t\t\t\tvoid* pData = GetAryElementInf(pArgInf[i].m_pAryData,dwSize);\r\n\t\t\t\t\tnLen *= dwSize;\r\n\t\t\t\t\tpMemFile->Write(pData,nLen);\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{//\r\n\t\t\t\tINT nLen;\r\n\t\t\t\tvoid* pData;\r\n\t\t\t\tINT nData = 0;\r\n\t\t\t\tif(pArgInf[i].m_dtDataType==SDT_TEXT)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(pArgInf[i].m_pText==NULL)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnLen = 1;\r\n\t\t\t\t\t\tpData = &nData;\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnLen = mystrlen(pArgInf[i].m_pText)+1;\r\n\t\t\t\t\t\tpData = pArgInf[i].m_pText;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else if(pArgInf[i].m_dtDataType==SDT_BIN)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(pArgInf[i].m_pBin==NULL)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnLen = sizeof(INT);\r\n\t\t\t\t\t\tpData = &nData;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tLPINT p = (LPINT)pArgInf[i].m_pBin;\r\n\t\t\t\t\t\tnLen = p[1]+sizeof(INT);\r\n\t\t\t\t\t\tp++;\r\n\t\t\t\t\t\tpData = p;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tnLen = GetSysDataTypeDataSize(pArgInf[i].m_dtDataType);\r\n\t\t\t\t\tif(nLen==0)//ֵ֧\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tpData = &pArgInf[i].m_int;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tpMemFile->Write(pData,nLen);\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t}\r\n\treturn bRet;\r\n}\r\n"
  },
  {
    "path": "krnln/krnln_year.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <math.h>\r\n//ʱ - ȡ\r\n/*\r\n    øʽ ͡ ȡ ʱ ʱ䣩 - ϵͳֿ֧->ʱ\r\n    Ӣƣyear\r\n    һֵΪ 100  9999 ֮ʾָʱеݡΪ\r\n    <1>Ϊʱ䡱Ϊʱͣdate\r\n*/\r\nLIBAPI(int, krnln_year)\r\n{\r\n\tINT nYear, nMonth, nDay;\r\n\tGetDatePart(ArgInf.m_date, nYear, nMonth, nDay);\r\n\treturn nYear;\r\n}\r\n"
  },
  {
    "path": "krnln/lib.h",
    "content": "\r\n#ifndef __LIB_H\r\n#define __LIB_H\r\n\r\n/*\r\n    Ȩ\r\n    ļȨΪУȨֿ֧⣬ֹκγϡ\r\n*/\r\n\r\n// ϵͳĻͣٸġ\r\n\r\n#define\t\t_SDT_NULL\t\t0           // հ\r\n#define\t\t_SDT_ALL\t\tMAKELONG (MAKEWORD (0, 0), 0x8000)\t\t// ͨ\r\n\t/*  ֿ֧򷵻ֵͣڶʱ\r\n\t_SDT_ALLƥͣͱҪ󣩡*/\r\n#define\t\tSDT_BYTE\t\tMAKELONG (MAKEWORD (1, 1), 0x8000)\t\t// ֽ\r\n#define\t\tSDT_SHORT\t\tMAKELONG (MAKEWORD (1, 2), 0x8000)\t\t// \r\n#define\t\tSDT_INT\t\t\tMAKELONG (MAKEWORD (1, 3), 0x8000)\t\t// \r\n#define\t\tSDT_INT64\t\tMAKELONG (MAKEWORD (1, 4), 0x8000)\t\t// \r\n#define\t\tSDT_FLOAT\t\tMAKELONG (MAKEWORD (1, 5), 0x8000)\t\t// С\r\n#define\t\tSDT_DOUBLE\t\tMAKELONG (MAKEWORD (1, 6), 0x8000)\t\t// ˫С\r\n#define\t\tSDT_BOOL\t\tMAKELONG (MAKEWORD (2, 0), 0x8000)\t\t// ߼\r\n#define\t\tSDT_DATE_TIME\tMAKELONG (MAKEWORD (3, 0), 0x8000)\t\t// ʱ\r\n#define\t\tSDT_TEXT\t\tMAKELONG (MAKEWORD (4, 0), 0x8000)\t\t// ı\r\n#define\t\tSDT_BIN\t\t\tMAKELONG (MAKEWORD (5, 0), 0x8000)\t\t// ֽڼ\r\n#define\t\tSDT_SUB_PTR\t\tMAKELONG (MAKEWORD (6, 0), 0x8000)\t\t// ¼ûӳĴַ\r\n\r\n// ͵\r\n#define\tDTM_SYS_DATA_TYPE_MASK\t\t0x80000000\r\n#define\tDTM_USER_DATA_TYPE_MASK\t\t0x40000000\r\n#define\tDTM_LIB_DATA_TYPE_MASK\t\t0x00000000\r\n\r\n// е־ĳֵλ1ʾΪ͵顣\r\n// ־ʱΪAS_RECEIVE_VAR_OR_ARRAYAS_RECEIVE_ALL_TYPE_DATA\r\n// ־Ŀ˵ΪǷΪݣϾδʹáط\r\n// ԺԱ־\r\n#define\tDT_IS_ARY\t\t\t\t\t0x20000000\r\n\r\ntypedef DWORD DATA_TYPE;\r\ntypedef DATA_TYPE* PDATA_TYPE;\r\n\r\ntypedef struct\r\n{\r\n\tLPTSTR\t\tm_szName;\t\t\t\t// \r\n\tLPTSTR\t\tm_szExplain;\t\t\t// ϸ\r\n\tSHORT\t\tm_shtBitmapIndex;\t\t// μ CMD_INFO еͬԱ\r\n\tSHORT\t\tm_shtBitmapCount;\t\t// μ CMD_INFO еͬԱ\r\n\r\n\tDATA_TYPE\tm_dtDataType;           // \r\n\r\n\tINT\t\t\tm_nDefault;\r\n\t\t// ϵͳͲĬֵָڱʱԶ\r\n\t\t//     1ֱֵͣΪֵΪСָֻ֣\r\n\t\t//\t\t  ΪָֻINTֵĲ֣\r\n\t\t//     2߼ͣ1棬0ڼ٣\r\n\t\t//     3ıͣԱʱΪLPTSTRָ룬ָĬı\r\n\t\t//     4ͲһĬֵָ\r\n\r\n\t#define\t\tAS_HAS_DEFAULT_VALUE\t\t\t\t(1 << 0)\r\n\t\t\t// ĬֵĬֵm_nDefault˵±־⡣\r\n\t#define\t\tAS_DEFAULT_VALUE_IS_EMPTY\t\t\t(1 << 1)\r\n\t\t\t// ĬֵĬֵΪգϱ־⡣\r\n    // ־ͬʱֻһλ\r\n\t#define\t\tAS_RECEIVE_VAR\t\t\t\t\t    (1 << 2)\r\n\t\t\t// Ϊṩʱṩ\r\n\t#define\t\tAS_RECEIVE_VAR_ARRAY\t\t\t\t(1 << 3)\r\n\t\t\t// Ϊṩʱṩ\r\n\t#define\t\tAS_RECEIVE_VAR_OR_ARRAY\t\t\t    (1 << 4)\r\n\t\t\t// Ϊṩʱṩ\r\n\t#define\t\tAS_RECEIVE_ARRAY_DATA\t\t\t    (1 << 5)\r\n\t\t\t// Ϊṩʱṩݡ\r\n\t#define\t\tAS_RECEIVE_ALL_TYPE_DATA            (1 << 6)\r\n\t\t\t// Ϊṩʱṩݡ\r\n\tDWORD\t\tm_dwState;\r\n}\r\nARG_INFO, *PARG_INFO;\r\n\r\nstruct CMD_INFO\r\n{\r\n\tLPTSTR\t\tm_szName;\t\t\t// \r\n\tLPTSTR\t\tm_szEGName;\t\t\t// ӢƣΪջNULL\r\n\r\n\tLPTSTR\t\tm_szExplain;\t\t// ϸ\r\n\tSHORT\t\tm_shtCategory;\t\t// ȫ𣬴1ʼһֵΪָLIB_INFO\r\n                                    // m_szzCategoryԱṩĳַ\r\n                                    // ԱĴֵΪ-1\r\n\r\n\t#define\t\tCT_IS_HIDED\t\t\t\t\t(1 << 2)\r\n\t\t//   ǷΪҪûֱѭ򱻷\r\n\t    // Ϊ˱ּҪڵ\r\n\t#define\t\tCT_IS_ERROR\t\t\t\t\t(1 << 3)\r\n\t\t// ڱвʹãд˱־һҪڲͬ԰汾ͬʹã\r\n\t\t// AA԰汾пҪʵֲʹãB԰汾пܾͲҪ\r\n\t\t// ʹ˾д˱־ָֻ֧óͱ룬֧С\r\n\t\t// д˱־Բʵֱִв֡\r\n\t#define\t\tCT_DISABLED_IN_RELEASE_VER\t(1 << 4)\r\n\t\t// б־ϵͳRELEASE׳ʱ޷ֵ\r\n\t#define\t\tCT_ALLOW_APPEND_NEW_ARG\t\t(1 << 5)\r\n\t\t//   ڱĲĩβǷµĲ²ͬڲеһ\r\n\t#define\t\tCT_RETURN_ARRAY_DATA\t\t(1 << 6)\r\n\t\t// ˵m_dtRetType˵ǷΪݡ\r\n\tWORD\t\tm_wState;\r\n\r\n\t/*  !!!!! ǧע⣺ֵͶΪ _SDT_ALL Բܷ(CT_RETURN_ARRAY_DATA\r\n\t\tλ)򸴺͵(ûԶ͵ڻ˵Ԫ)\r\n\t\tΪû޷ԶɾĶռ(ıͻֽڼͳԱ) */\r\n\tDATA_TYPE\tm_dtRetType;    // ֵ͡\r\n\r\n\tWORD\t\tm_wReserved;    // Ϊ0\r\n\r\n    // ꣬ΪûṩѧϰѶ˵\r\n    #define\tLVL_SIMPLE\t\t\t1\t\t// \r\n    #define\tLVL_SECONDARY\t\t2\t\t// м\r\n    #define\tLVL_HIGH\t\t\t3\t\t// ߼\r\n\tSHORT\t\tm_shtUserLevel;\t// û𣬱ԱֵΪļꡣ\r\n\r\n\tSHORT\t\tm_shtBitmapIndex;\t// ָͼ1ʼ0ʾޡһֵΪָֿ֧Ϊ\r\n                                    // \"LIB_BITMAP\"BITMAPԴĳһ16X13λͼ\r\n\tSHORT\t\tm_shtBitmapCount;\t// ͼĿ(ΪIDEṩͼƬ).\r\n\r\n\tINT\t\t\tm_nArgCount;\t\t// ĲĿ\r\n\tPARG_INFO\tm_pBeginArgInfo;    // ָĲϢ\r\n};\r\ntypedef CMD_INFO* PCMD_INFO;\r\n\r\nstruct LIB_DATA_TYPE_ELEMENT\r\n{\r\n\tDATA_TYPE m_dtDataType; // ݳԱ͡\r\n\r\n\tLPBYTE m_pArySpec;  // ԱΪ飬򱾳ԱṩֵָΪNULL\r\n        // ָĸʽΪΪһBYTE¼άΪ0ʾΪ飬ֵΪ0x7f\r\n        // ȻΪӦĿINTֵ˳¼ӦάԪĿ\r\n\r\n\tLPTSTR m_szName;    // ݳԱƣݳԱֻһݳԱֵӦΪNULL\r\n\tLPTSTR m_szEGName;  // ݳԱӢƣΪջNULL\r\n\tLPTSTR m_szExplain; // ݳԱϸ˵\r\n\r\n\t#define LES_HAS_DEFAULT_VALUE  (1 << 0)    // ݳԱĬֵĬֵm_nDefault˵\r\n\tDWORD m_dwState;\r\n\r\n    //  m_dwState  LES_HAS_DEFAULT_VALUE ־ҷʱЧ\r\n\tINT m_nDefault;\r\n\t\t// ݳԱĬֵָ\r\n\t\t//     1ֱֵͣΪֵΪСָֻ֣\r\n\t\t//\t\t  ΪָֻINTֵĲ֣\r\n\t\t//     2߼ͣ1棬0ڼ٣\r\n\t\t//     3ıͣʱΪLPTSTRָ룬ָĬı\r\n\t\t//     4ͲһĬֵָ\r\n};\r\ntypedef LIB_DATA_TYPE_ELEMENT* PLIB_DATA_TYPE_ELEMENT;\r\n\r\n// ̶ԵĿ\r\n#define\tFIXED_WIN_UNIT_PROPERTY_COUNT\t8\r\n\r\n// ÿ̶Զ\r\n#define\tFIXED_WIN_UNIT_PROPERTY\t\\\r\n\t{\t_WT(\"\"), _WT(\"left\"),\tNULL,\tUD_INT,\tNULL,\tNULL\t},\t\\\r\n\t{\t_WT(\"\"), _WT(\"top\"),\tNULL,\tUD_INT,\tNULL,\tNULL\t},\t\\\r\n\t{\t_WT(\"\"), _WT(\"width\"),\tNULL,\tUD_INT,\tNULL,\tNULL\t},\t\\\r\n\t{\t_WT(\"߶\"), _WT(\"height\"),\tNULL,\tUD_INT,\tNULL,\tNULL\t},\t\\\r\n\t{\t_WT(\"\"), _WT(\"tag\"),\tNULL,\tUD_TEXT,\tNULL,\tNULL\t},\t\\\r\n\t{\t_WT(\"\"), _WT(\"visible\"),\tNULL,\tUD_BOOL,\tNULL,\tNULL\t},\t\\\r\n\t{\t_WT(\"ֹ\"), _WT(\"disable\"),\tNULL,\tUD_BOOL,\tNULL,\tNULL\t},\t\\\r\n\t{\t_WT(\"ָ\"), _WT(\"MousePointer\"),\tNULL,\tUD_CURSOR,\tNULL,\tNULL\t}\r\n\r\n// 崰ڵԪԡ\r\nstruct UNIT_PROPERTY\r\n{\r\n\tLPTSTR m_szName;    // ƣעΪԱͬʱöԣͬԵһ¡\r\n\tLPTSTR m_szEGName;  // Ӣơ\r\n\tLPTSTR m_szExplain; // Խ͡\r\n\r\n\t#define\t\tUD_INT\t\t\t    1001\t// ΪINTֵ\r\n\t#define\t\tUD_DOUBLE\t\t    1002\t// ΪDOUBLEֵ\r\n\t#define\t\tUD_BOOL\t\t\t    1003\t// ΪBOOLֵ\r\n\t#define\t\tUD_DATE_TIME\t    1004\t// ΪDATEֵ\r\n\t#define\t\tUD_TEXT\t\t\t    1005\t// Ϊַ\r\n\t#define\t\tUD_PICK_INT\t\t\t1006\t// ΪINTֵûֻѡ񣬲ܱ༭\r\n\t#define\t\tUD_PICK_TEXT\t\t1007\t// Ϊѡַûֻѡ񣬲ܱ༭\r\n\t#define\t\tUD_EDIT_PICK_TEXT\t1008\t// ΪѡַûԱ༭\r\n\t#define\t\tUD_PIC\t\t\t    1009\t// ΪͼƬļ\r\n\t#define\t\tUD_ICON\t\t\t    1010\t// Ϊͼļ\r\n\t#define\t\tUD_CURSOR\t\t    1011\r\n\t\t//   һINT¼ֵָͣ Windows API  LoadCursor \r\n        // Ϊ-1ΪԶָ룬ʱӦȵָļݡ\r\n\t#define\t\tUD_MUSIC\t\t    1012\t// Ϊļ\r\n\t#define\t\tUD_FONT\t\t\t    1013    // ΪһLOGFONTݽṹٸġ\r\n\t#define\t\tUD_COLOR\t\t    1014    // ΪCOLORREFֵ\r\n\t#define\t\tUD_COLOR_TRANS\t    1015\r\n\t\t//   ΪCOLORREFֵ͸ɫ(CLR_DEFAULTCLR_DEFAULT\r\n        // VC++COMMCTRL.Hͷļж)\r\n\t#define\t\tUD_FILE_NAME\t    1016\r\n\t\t//   Ϊļַʱm_szzPickStrеΪ\r\n\t\t// Ի + \"\\0\" + ļ + \"\\0\" + ĬϺ׺ + \"\\0\" +\r\n\t\t// \"1\"ȡļ\"0\"ȡļ + \"\\0\"\r\n\t#define\t\tUD_COLOR_BACK\t    1017\r\n\t\t// ΪCOLORREFֵϵͳĬϱɫ(CLR_DEFAULT)\r\n\t#define\t\tUD_ODBC_CONNECT_STR\t1021\r\n\t\t// ODBCı\r\n\t#define\t\tUD_ODBC_SELECT_STR\t1022\r\n\t\t// ODBCݲѯSQLı\r\n\t#define\t\tUD_IMAGE_LIST\t\t1023\r\n\t\t// ͼƬ飬ݽṹΪ\r\n\t\t#define\tIMAGE_LIST_DATA_MARK\t(MAKELONG ('IM', 'LT'))\r\n\t\t/*\r\n\t\tDWORD: ־ݣΪ IMAGE_LIST_DATA_MARK\r\n\t\tCOLORREF: ͸ɫΪCLR_DEFAULT\r\n\t\tΪͼƬݣCImageList::ReadCImageList::Writeд\r\n\t\t*/\r\n\t#define\t\tUD_CUSTOMIZE\t\t1024    // Զ\r\n\r\n\tSHORT m_shtType;\t// ԵͣΪĺֵ\r\n\r\n\t#define\tUW_HAS_INDENT\t\t(1 << 0)\t// ԱʾʱһΣһԡ\r\n\t#define\tUW_GROUP_LINE\t\t(1 << 1)\t// Աбʾ׷ߡ\r\n\t#define\tUW_ONLY_READ\t\t(1 << 2)    // ֻԣʱãʱд\r\n\t#define\tUW_CANNOT_INIT\t\t(1 << 3)    // ʱãʱдϱ־⡣\r\n\tWORD m_wState;\r\n\r\n\tLPTSTR m_szzPickStr;\r\n\t\t// m_nTypeΪUP_PICK_INTUP_PICK_TEXTUD_EDIT_PICK_TEXTUD_FILE_NAMEʱΪNULL\r\n\t\t// ˳¼\"\\0\"ָбѡıUD_FILE_NAMEΪ˵ʽһ\"\\0\"\r\n};\r\ntypedef UNIT_PROPERTY* PUNIT_PROPERTY;\r\n\r\ntypedef struct\r\n{\r\n\tLPTSTR\t\tm_szName;       // \r\n\tLPTSTR\t\tm_szExplain;    // ϸ\r\n\r\n\t#define EAS_IS_BOOL_ARG     (1 << 0)\t// Ϊ߼Ͳ޴˱־ΪͲ\r\n\tDWORD\t\tm_dwState;\r\n}\r\nEVENT_ARG_INFO, *PEVENT_ARG_INFO;\r\n\r\nstruct EVENT_INFO\r\n{\r\n\tLPTSTR\t\tm_szName;\t\t\t// ¼\r\n\tLPTSTR\t\tm_szExplain;\t\t// ¼ϸ\r\n\r\n\t#define\t\tEV_IS_HIDED\t\t\t(1 << 0)\r\n    \t// ¼ǷΪ¼ܱһûʹû򱻷Ϊ˱ּҪڵ¼\r\n\t#define\t\tEV_RETURN_INT\t\t(1 << 3)\r\n        // ¼ĴӳҪһ\r\n\t#define\t\tEV_RETURN_BOOL\t\t(1 << 4)\r\n        // ¼ĴӳҪһ߼ֵϱ־⡣\r\n\tDWORD\t\tm_dwState;\r\n\r\n\tINT\t\t\t\tm_nArgCount;\t\t// ¼ĲĿ\r\n\tPEVENT_ARG_INFO\tm_pEventArgInfo;\t// ¼\r\n};\r\ntypedef EVENT_INFO* PEVENT_INFO;\r\n\r\n////////////////////////////////////\r\n\r\ntypedef DWORD  HUNIT;\r\n\r\n// ͨýӿָ롣\r\ntypedef void (WINAPI *PFN_INTERFACE) ();\r\n\r\n// ڵԪӿID\r\n#define\tITF_CREATE_UNIT\t\t\t\t\t1\t// Ԫ\r\n// ӿڽڿӻƴڽʱʹá\r\n#define\tITF_PROPERTY_UPDATE_UI\t\t\t2\t// ˵Ŀǰɷ޸\r\n#define\tITF_DLG_INIT_CUSTOMIZE_DATA\t\t3\t// ʹöԻԶ\r\n#define\tITF_NOTIFY_PROPERTY_CHANGED\t\t4\t// ֪ͨĳݱ޸\r\n#define\tITF_GET_ALL_PROPERTY_DATA\t\t5\t// ȡȫ\r\n#define\tITF_GET_PROPERTY_DATA\t\t\t6\t// ȡĳ\r\n#define\tITF_IS_NEED_THIS_KEY\t\t\t8\t//   ѯʵԪǷҪָİϢڵԪ\r\n                                        \t// ػĬΪʱİTAB\r\n                                            // SHIFT+TABUPDOWNȡ\r\n\r\ntypedef PFN_INTERFACE (WINAPI *PFN_GET_INTERFACE) (INT nInterfaceNO);\r\n\r\n//////////////////////////////////// ӿڣ\r\n\r\n// ԪɹʱHUNITʧܷNULL\r\ntypedef HUNIT (WINAPI *PFN_CREATE_UNIT) (\r\n        LPBYTE pAllPropertyData,            //   ָ򱾴ڵԪݣɱڵԪ\r\n                                            // ITF_GET_PROPERTY_DATAӿڲûΪNULL\r\n        INT nAllPropertyDataSize,           //   ṩpAllPropertyDataָݵĳߴ磬ûΪ0\r\n\t\tDWORD dwStyle,                      //   ԤõĴڷ\r\n        HWND hParentWnd,                    //   ھ\r\n        UINT uID,                           //   ڸеID\r\n        HMENU hMenu,                        //   δʹá\r\n        INT x, INT y, INT cx, INT cy,       //   ָλüߴ硣\r\n\t\tDWORD dwWinFormID, DWORD dwUnitID,  //   ڵԪڴڼID֪ͨϵͳ\r\n\t\tHWND hDesignWnd = 0,                //   blInDesignModeΪ棬hDesignWndṩƴڵĴھ\r\n        BOOL blInDesignMode = FALSE);       //   ˵ǷIDEԽпӻƣʱΪ١\r\n\r\n// ָĿǰԱ棬򷵻ؼ١\r\ntypedef BOOL (WINAPI *PFN_PROPERTY_UPDATE_UI) (\r\n        HUNIT hUnit,            // PFN_CREATE_UNITصѴڵԪľͬ\r\n        INT nPropertyIndex);    // ҪѯԵֵͬ\r\n\r\n// ΪUD_CUSTOMIZEĵԪԡ\r\n// Ҫ´õԪ޸ĵԪΣ뷵档\r\ntypedef BOOL (WINAPI *PFN_DLG_INIT_CUSTOMIZE_DATA) (\r\n        HUNIT hUnit,\r\n        INT nPropertyIndex,\r\n\t\tBOOL* pblModified = NULL,   //   pblModifiedΪNULLзǷ\r\n                                    // û޸ģIDEUNDO¼\r\n        LPVOID pReserved = NULL);   // δá\r\n\r\n// ¼ĳԵľֵ\r\nunion UNIT_PROPERTY_VALUE\r\n{\r\n\tINT\t\t\tm_int;\t\t\t// ӦUD_INTUD_PICK_INTͬ\r\n\tDOUBLE\t\tm_double;\t\t// UD_DOUBLE\r\n\tBOOL\t\tm_bool;\t\t\t// UD_BOOL\r\n\tDATE\t\tm_dtDateTime;\t// UD_DATE_TIME\r\n\tCOLORREF\tm_clr;\t\t\t// UD_COLORUD_COLOR_TRANSUD_COLOR_BACK\r\n\r\n\tLPTSTR\t\tm_szText;\t\t//   UD_TEXTUD_PICK_TEXTUD_EDIT_PICK_TEXT\r\n\t\t\t                    // UD_ODBC_CONNECT_STRUD_ODBC_SELECT_STR\r\n\r\n\tLPTSTR\t\tm_szFileName;\t// UD_FILE_NAME\r\n\r\n    // UD_PICUD_ICONUD_CURSORUD_MUSICUD_FONTUD_CUSTOMIZEUD_IMAGE_LIST\r\n\tstruct\r\n\t{\r\n\t\tLPBYTE  m_pData;\r\n\t\tINT     m_nDataSize;\r\n\t} m_data;\r\n\r\n\tUNIT_PROPERTY_VALUE ()\r\n\t{\r\n\t\tmemset ((LPBYTE)this, 0, sizeof (UNIT_PROPERTY_VALUE));\r\n\t}\r\n};\r\ntypedef UNIT_PROPERTY_VALUE* PUNIT_PROPERTY_VALUE;\r\n\r\n//   ֪ͨĳԣUD_CUSTOMIZEԣݱû޸ģҪݸ޸Ӧ\r\n// ڲݼΣȷʵҪ´޸ĵԪΣ뷵档\r\n//   ע⣺ֵĺϷУ顣\r\ntypedef BOOL (WINAPI *PFN_NOTIFY_PROPERTY_CHANGED) (\r\n        HUNIT hUnit,\r\n        INT nPropertyIndex,\r\n\t\tPUNIT_PROPERTY_VALUE pPropertyValue,    // ޸ĵӦݡ\r\n        LPTSTR* ppszTipText = NULL);    // Ŀǰδʹá\r\n\r\n// ȡĳݵpPropertyValueУɹ棬򷵻ؼ١\r\n/*  ע⣺ʱɵPFN_CREATE_UNITʱblInDesignMode\r\npPropertyValue뷵洢ֵʱblInDesignModeΪ٣\r\nʵʵĵǰʵʱֵ\r\n    ˵༭򴰿ڵԪġݡԣʱ뷵ڲֵ\r\nʱͱ GetWindowText ȥʵʱȡ */\r\ntypedef BOOL (WINAPI *PFN_GET_PROPERTY_DATA) (\r\n        HUNIT hUnit,\r\n        INT nPropertyIndex,\r\n\t\tPUNIT_PROPERTY_VALUE pPropertyValue);   // ȡԵݡ\r\n\r\n//   رڵԪȫݣɸôڵԪʵִƸʽ\r\n// ϵһ𡣴˴ڵԪPFN_CREATE_UNITӿڱܹȷ\r\n// ݡ\r\ntypedef HGLOBAL (WINAPI *PFN_GET_ALL_PROPERTY_DATA) (HUNIT hUnit);\r\n\r\n// ѯʵԪǷҪָİϢҪ棬򷵻ؼ١\r\ntypedef BOOL (WINAPI *PFN_IS_NEED_THIS_KEY) (\r\n        HUNIT hUnit,\r\n        WORD wKey);\r\n\r\n////////////////////////////////////\r\n\r\n#define\tUNIT_BMP_SIZE\t\t\t24\t\t// Ԫ־λͼĿȺ͸߶ȡ\r\n#define\tUNIT_BMP_BACK_COLOR\t\t(RGB (192, 192, 192))\t// Ԫ־λͼıɫ\r\n\r\nstruct LIB_DATA_TYPE_INFO  // ⶨͽṹ\r\n{\r\n\tLPTSTR m_szName;    // \r\n\tLPTSTR m_szEGName;  // ӢƣΪջNULL\r\n\tLPTSTR m_szExplain; // ϸͣΪNULL\r\n\r\n\tINT m_nCmdCount;        // ͳԱĿΪ0\r\n\tLPINT m_pnCmdsIndex;\t// ˳¼гԱֿ֧еֵΪNULL\r\n\r\n    //   ǷΪͣûֱͣ类\r\n    // Ϊ˱ּҪڵͣ\r\n\t#define\t\tLDT_IS_HIDED\t\t\t\t(1 << 0)\r\n    // ڱвʹãд˱־һ\r\n    // ʹд˱־͵Ҳ塣\r\n\t#define\t\tLDT_IS_ERROR\t\t\t\t(1 << 1)\r\n    // ǷΪڵԪ˱־λm_nElementCountΪ0\r\n\t#define\t\tLDT_WIN_UNIT\t\t\t\t(1 << 6)\r\n    // ǷΪʹڵԪд˱־LDT_WIN_UNITλ\r\n\t#define\t\tLDT_IS_CONTAINER\t\t\t(1 << 7)\r\n    // ǷΪṩܵĴڵԪʱӣ˱־λLDT_WIN_UNITλ\r\n    // д˱־ĵԪʱ޿Ρ\r\n\t#define\t\tLDT_IS_FUNCTION_PROVIDER\t(1 << 15)\r\n    // ڵԪ˱־λʾ˵Ԫܽ뽹㣬TABͣ\r\n\t#define\t\tLDT_CANNOT_GET_FOCUS\t\t(1 << 16)\r\n    // ڵԪ˱־λʾ˵ԪԽ뽹㣬ĬϲͣTAB\r\n    // ־ϱ־⡣\r\n\t#define\t\tLDT_DEFAULT_NO_TABSTOP\t\t(1 << 17)\r\n    // ǷΪҪԵλûߴ״ڵԪ繤״̬ȣھд˱־ĵԪ\r\n    // ڴڳߴıʱԶ͸WU_SIZE_CHANGEDϢ\r\n    // ע⣺״ڵԪҪԶ CCS_TOP ڷҪԶײ\r\n    //  CCS_BOTTOM ڷ\r\n\t#define\t\tLDT_BAR_SHAPE\t\t\t\t(1 << 20)\r\n\tDWORD   m_dwState;\r\n\r\n    ////////////////////////////////////////////\r\n    // ³ԱֻΪڵԪ˵ʱЧ\r\n\r\n\tDWORD m_dwUnitBmpID;\t\t// ָֿ֧еĵԪͼԴIDעⲻͬͼ0Ϊޡ\r\n                                // ߴΪ 24 X 24 ɫΪ RGB (192, 192, 192) \r\n\r\n\tINT m_nEventCount;  // Ԫ¼Ŀ\r\n\tPEVENT_INFO m_pEventBegin;\t// 屾Ԫ¼\r\n\r\n\tINT m_nPropertyCount;\r\n\tPUNIT_PROPERTY m_pPropertyBegin;\r\n\r\n    // ṩڵԪнӿڡ\r\n\tPFN_GET_INTERFACE m_pfnGetInterface;\r\n\r\n    ////////////////////////////////////////////\r\n    // ³ԱֻڲΪڵԪ˵ʱЧ\r\n\r\n\t// ӳԱĿΪ0Ϊڡ˵Ԫ˱ֵΪ0\r\n\tINT\tm_nElementCount;\r\n\tPLIB_DATA_TYPE_ELEMENT m_pElementBegin;  // ָӳԱ׵ַ\r\n};\r\ntypedef LIB_DATA_TYPE_INFO* PLIB_DATA_TYPE_INFO;\r\n\r\n/*////////////////////////////////////////////*/\r\n\r\nstruct LIB_CONST_INFO  // ⳣݽṹ\r\n{\r\n\tLPTSTR\tm_szName;\r\n\tLPTSTR\tm_szEGName;\r\n\tLPTSTR\tm_szExplain;\r\n\r\n\tSHORT\tm_shtReserved;  // Ϊ 1 \r\n\r\n\t#define\tCT_NULL\t\t\t0\r\n\t#define\tCT_NUM\t\t\t1\t// sample: 3.1415926\r\n\t#define\tCT_BOOL\t\t\t2\t// sample: 1\r\n\t#define\tCT_TEXT\t\t\t3\t// sample: \"abc\"\r\n\tSHORT\tm_shtType;\r\n\r\n\tLPTSTR\tm_szText;\t\t// CT_TEXT\r\n\tDOUBLE\tm_dbValue;\t\t// CT_NUMCT_BOOL\r\n};\r\ntypedef LIB_CONST_INFO* PLIB_CONST_INFO;\r\n\r\n//////////////////////////////////////////// ݽṹ\r\n\r\ntypedef struct\r\n{\r\n    DWORD m_dwFormID;\r\n    DWORD m_dwUnitID;\r\n}\r\nMUNIT, *PMUNIT;\r\n\r\n#pragma pack (push, old_value)   // VC++ṹֽ\r\n#pragma pack (1)    // Ϊһֽڶ롣\r\n\r\nstruct MDATA_INF\r\n{\r\n    union\r\n    {\r\n        // ע⵱ӦAS_RECEIVE_VARAS_RECEIVE_VAR_ARRAYAS_RECEIVE_VAR_OR_ARRAY\r\n        // ־ʱʹĵڶ֡\r\n\r\n        // һ֡\r\n\t    BYTE\t      m_byte;         // SDT_BYTE ͵ݣͬ\r\n\t    SHORT\t      m_short;        // SDT_SHORT\r\n\t    INT\t\t      m_int;          // SDT_INT\r\n\t    INT64\t      m_int64;        // SDT_INT64\r\n\t    FLOAT\t      m_float;        // SDT_FLOAT\r\n\t    DOUBLE\t      m_double;       // SDT_DOUBLE\r\n        DATE          m_date;         // SDT_DATE_TIME\r\n        BOOL          m_bool;         // SDT_BOOL\r\n\r\n        char*         m_pText;        // SDT_TEXTϵͳԤʹǿıֵָҲΪNULLԱڴ\r\n                                      // ָָݵĸʽǰ\r\n                                      // !!!Ϊ˱޸ĵ(m_pTextпָܻ׳)\r\n                                      // ݣֻɶȡɸеݣͬ\r\n\r\n        LPBYTE        m_pBin;         // SDT_BINϵͳԤʹǿֽڼֵָҲΪNULLԱڴ\r\n                                      // ָָݵĸʽǰ\r\n                                      // !!!ֻɶȡɸеݡ\r\n\r\n        DWORD         m_dwSubCodeAdr; // SDT_SUB_PTRΪӳַָ롣\r\n        MUNIT         m_unit;         // ڵԪ˵͵ݡ\r\n\r\n        void*         m_pCompoundData;// ָ룬ָָݵĸʽǰ\r\n                                      // !!! ֻɶȡɸеݡ\r\n\r\n        void*         m_pAryData;     // ָ룬ָָݵĸʽǰ\r\n                                      // עΪıֽڼ飬ԱָΪNULL\r\n                                      // !!! ֻɶȡɸеݡ\r\n\r\n        // ڶ֡\r\n        // Ϊַָָ룬AS_RECEIVE_VARAS_RECEIVE_VAR_ARRAY\r\n        // AS_RECEIVE_VAR_OR_ARRAY־ʱűʹá\r\n        BYTE*\tm_pByte;            // SDT_BYTE ͱĵַͬ\r\n\t    SHORT*\tm_pShort;           // SDT_SHORT\r\n\t    INT*\tm_pInt;             // SDT_INT\r\n\t    INT64*\tm_pInt64;           // SDT_INT64\r\n\t    FLOAT*\tm_pFloat;           // SDT_FLOAT\r\n\t    DOUBLE*\tm_pDouble;          // SDT_DOUBLE\r\n        DATE*   m_pDate;            // SDT_DATE_TIME\r\n        BOOL*   m_pBool;            // SDT_BOOL\r\n\r\n        char**  m_ppText;           // SDT_TEXTע*m_ppTextΪNULLı\r\n                                    // дֵ֮ǰͷǰֵ䣺NotifySys (NRS_MFREE, (DWORD)*m_ppText)\r\n                                    // !!!ֱӸ*m_ppTextָݣֻͷԭָNULLı\r\n                                    // ʹNRS_MALLOC֪ͨڴַָ루ͬ\r\n\r\n        LPBYTE* m_ppBin;            // SDT_BINע*m_ppBinΪNULLֽڼ\r\n                                    // дֵ֮ǰͷǰֵ䣺NotifySys (NRS_MFREE, (DWORD)*m_ppBin)\r\n                                    // !!!ֱӸ*m_ppBinָݣֻͷԭָNULLֽڼ\r\n                                    // ָ롣\r\n\r\n        DWORD*  m_pdwSubCodeAdr;    // SDT_SUB_PTRӳַַ\r\n        PMUNIT  m_pUnit;            // ڵԪ˵ͱַ\r\n\r\n        void**  m_ppCompoundData;   // ͱַ\r\n                                    // !!!עдֵ֮ǰʹNRS_MFREE֪ͨһͷгԱSDT_TEXT\r\n                                    // SDT_BINͳԱԭַָ롣\r\n                                    // !!!ֱӸ*m_ppCompoundDataָݣֻͷԭָָ롣\r\n\r\n        void**  m_ppAryData;        // ݱַע⣺\r\n                                    // 1дֵ֮ǰͷԭֵ䣺NotifySys (NRS_FREE_ARY,\r\n                                    //    m_dtDataType, (DWORD)*m_ppAryData)ע⣺ֻ\r\n                                    //    m_dtDataTypeΪϵͳʱΪͣ\r\n                                    //    䶨Ϣһͷš\r\n                                    // 2Ϊıֽڼ飬гԱָΪNULL\r\n                                    // !!!ֱӸ*m_ppAryDataָݣֻͷԭָָ롣\r\n    };\r\n\r\n    // 1ݲʱò AS_RECEIVE_VAR_OR_ARRAY \r\n    //    AS_RECEIVE_ALL_TYPE_DATA ־Ϊݣ־ DT_IS_ARY \r\n    //    Ҳ DT_IS_ARY ־Ψһʹóϡ\r\n    //    DT_IS_ARY ĶΪ\r\n    //      #define\tDT_IS_ARY   0x20000000\r\n    // 2ݲʱΪհݣΪ _SDT_NULL \r\n    DATA_TYPE m_dtDataType;\r\n};\r\ntypedef MDATA_INF* PMDATA_INF;\r\n// !!! ASSERT (sizeof (MDATA_INF) == sizeof (DWORD) * 3);\r\n// ߴ sizeof (DWORD) * 3 \r\n\r\n#pragma pack (pop, old_value)    // ָVC++ṹֽ\r\n\r\n//////////////////////////////////////////// ֪ͨݽṹ\r\n\r\n/*/////////////*/\r\n// ֿ֧֪ͨױ༭(IDE)л(RUNTIME)ֵ\r\n\r\nstruct MDATA\r\n{\r\n\tMDATA ()\r\n\t{\r\n\t\tm_pData = NULL;\r\n\t\tm_nDataSize = 0;\r\n\t}\r\n\r\n\tLPBYTE\tm_pData;\r\n\tINT\t\tm_nDataSize;\r\n};\r\ntypedef MDATA* PMDATA;\r\n\r\nstruct EVENT_NOTIFY\r\n{\r\n\t// ¼¼Դ\r\n\tDWORD\tm_dwFormID;\t\t// ITF_CREATE_UNITӿݹIDdwWinFormID\r\n\tDWORD\tm_dwUnitID;\t\t// ITF_CREATE_UNITӿݹĴڵԪIDdwUnitID\r\n\tINT\t\tm_nEventIndex;\t//   ¼ڴڵԪϢLIB_DATA_TYPE_INFOm_pPropertyBegin\r\n                            // Աеλã\r\n\r\n\tINT\t\tm_nArgCount;\t\t// ¼ݵĲĿ 5 \r\n\tINT\t\tm_nArgValue [5];\t// ¼ֵSDT_BOOL ͲֵΪ 1  0\r\n\r\n    //!!! עԱûж巵ֵ¼ЧֵΪֵ\r\n\tBOOL\tm_blHasReturnValue; // û¼ӳ¼Ƿṩ˷ֵ\r\n\tINT\t\tm_nReturnValue; // û¼ӳ¼ķֵ߼ֵֵ 0٣  1棩 ء\r\n\r\n    /////////////////////////////////////\r\n\r\n\tEVENT_NOTIFY (DWORD dwFormID, DWORD dwUnitID, INT nEventIndex)\r\n\t{\r\n\t\tm_dwFormID = dwFormID;\r\n\t\tm_dwUnitID = dwUnitID;\r\n\t\tm_nEventIndex = nEventIndex;\r\n\r\n\t\tm_nArgCount = 0;\r\n\t\tm_blHasReturnValue = FALSE;\r\n\t\tm_nReturnValue = 0;\r\n\t}\r\n};\r\ntypedef EVENT_NOTIFY* PEVENT_NOTIFY;\r\n\r\n/*///////////////////////*/\r\n\r\n// NES_ Ϊױ༭(IDE)֪ͨ\r\n#define NES_GET_MAIN_HWND\t\t\t        1\r\n\t// ȡױ༭ڵľֿ֧AddInʹá\r\n#define\tNES_RUN_FUNC\t\t\t\t        2\r\n\t// ֪ͨױ༭ָĹܣһBOOLֵ\r\n\t// dwParam1Ϊܺš\r\n\t// dwParam2Ϊһ˫DWORDָ,ֱṩܲ12\r\n\r\n// NAS_ Ϊȱױ༭ֱл֪ͨ\r\n#define NAS_GET_LIB_DATA_TYPE_INFO          1002\r\n    // ָⶨ͵PLIB_DATA_TYPE_INFOϢָ롣\r\n    // dwParam1ΪȡϢDATA_TYPE\r\n    // Ч߲Ϊⶨͣ򷵻NULL򷵻PLIB_DATA_TYPE_INFOָ롣\r\n\r\n// NRS_ Ϊܱл֪ͨ\r\n#define NRS_UNIT_DESTROIED\t\t\t        2000\r\n\t// ֪ͨϵͳָĵԪѾ١\r\n\t// dwParam1ΪdwFormID\r\n\t// dwParam2ΪdwUnitID\r\n#define NRS_CONVERT_NUM_TO_INT              2001\r\n\t// תֵʽ\r\n\t// dwParam1Ϊ PMDATA_INF ָ룬 m_dtDataType Ϊֵ͡\r\n    // תֵ\r\n#define NRS_GET_CMD_LINE_STR\t\t\t    2002\r\n\t// ȡǰı\r\n\t// ıָ룬пΪմ\r\n#define NRS_GET_EXE_PATH_STR                2003\r\n\t// ȡǰִļĿ¼\r\n\t// صǰִļĿ¼ıָ롣\r\n#define NRS_GET_EXE_NAME\t\t\t\t    2004\r\n\t// ȡǰִļ\r\n\t// صǰִļıָ롣\r\n#define NRS_GET_UNIT_PTR\t\t\t\t    2006\r\n\t// ȡԪָ\r\n\t// dwParam1ΪWinFormID\r\n\t// dwParam2ΪWinUnitID\r\n\t// ɹЧĵԪCWnd*ָ룬ʧܷNULL\r\n#define NRS_GET_AND_CHECK_UNIT_PTR\t\t\t2007\r\n\t// ȡԪָ\r\n\t// dwParam1ΪWinFormID\r\n\t// dwParam2ΪWinUnitID\r\n\t// ɹЧĵԪCWnd*ָ룬ʧԶʱ˳\r\n#define NRS_EVENT_NOTIFY\t\t\t\t    2008\r\n\t// ֪ͨϵͳ¼\r\n\t// dwParam1ΪPEVENT_NOTIFYָ롣\r\n\t//    0 ʾ¼ѱϵͳʾϵͳѾɹݴ¼û\r\n\t// ¼ӳ\r\n#define NRS_STOP_PROCESS_EVENT_NOTIFY\t    2009\r\n\t// ֪ͨϵͳͣ¼֪ͨ\r\n#define NRS_CONTINUE_PROCESS_EVENT_NOTIFY\t2010\r\n\t// ֪ͨϵͳ¼֪ͨ\r\n#define\tNRS_DO_EVENTS\t\t\t            2018\r\n\t// ֪ͨWindowsϵͳ¼\r\n#define NRS_GET_UNIT_DATA_TYPE              2022\r\n\t// dwParam1ΪWinFormID\r\n\t// dwParam2ΪWinUnitID\r\n\t// ɹЧ DATA_TYPE ʧܷ 0 \r\n#define NRS_FREE_ARY                        2023\r\n    // ͷָݡ\r\n    // dwParam1ΪݵDATA_TYPEֻΪϵͳ͡\r\n    // dwParam2Ϊָݵָ롣\r\n#define NRS_MALLOC                          2024\r\n    // ָռڴ棬׳򽻻ڴ涼ʹñ֪ͨ䡣\r\n    //   dwParam1Ϊڴֽ\r\n    //   dwParam2Ϊ0ʧܾԶʱ˳\r\n    // 粻Ϊ0ʧܾͷNULL\r\n    //   ڴ׵ַ\r\n#define NRS_MFREE                           2025\r\n    // ͷѷָڴ档\r\n    // dwParam1Ϊͷڴ׵ַ\r\n#define NRS_MREALLOC                        2026\r\n    // ·ڴ档\r\n    //   dwParam1Ϊ·ڴߴ׵ַ\r\n    //   dwParam2Ϊ·ڴֽ\r\n    // ·ڴ׵ַʧԶʱ˳\r\n#define\tNRS_RUNTIME_ERR\t\t\t            2027\r\n\t// ֪ͨϵͳѾʱ\r\n\t// dwParam1Ϊchar*ָ룬˵ı\r\n#define\tNRS_EXIT_PROGRAM                    2028\r\n\t// ֪ͨϵͳ˳û\r\n\t// dwParam1Ϊ˳룬ô뽫صϵͳ\r\n#define NRS_GET_PRG_TYPE                    2030\r\n    // صǰûͣΪ2԰棩3棩\r\n\r\n/*///////////////////////////////////////////////////////////////////*/\r\n// ױ༭(IDE)л(RUNTIME)ֵֿ֪֧ͨ\r\n#define\tNL_SYS_NOTIFY_FUNCTION\t\t1\r\n\t//   ֿ֪֧֪ͨϵͳõĺָ룬װֿ֧ǰ֪ͨжΣ\r\n\t// ֵ֪ͨӦøǰֵ֪ͨԷֵ\r\n\t//   ɽ˺ָ¼ԱҪʱʹ֪ͨϢϵͳ\r\n\t//   dwParam1: (PFN_NOTIFY_SYS)\r\n#define NL_FREE_LIB_DATA                6\r\n    // ֿ֪֧ͨͷԴ׼˳ͷָĸݡ\r\n\r\n/*///////////////////////////////////////////////////////////////////*/\r\n\r\n#define NR_OK\t\t0\r\n#define NR_ERR\t\t-1\r\ntypedef INT (WINAPI *PFN_NOTIFY_LIB) (INT nMsg, DWORD dwParam1 = 0, DWORD dwParam2 = 0);\r\n\t// ˺ױ༭(IDE)л(RUNTIME)ֿ֪֧ͨй¼\r\ntypedef INT (WINAPI *PFN_NOTIFY_SYS) (INT nMsg, DWORD dwParam1 = 0, DWORD dwParam2 = 0);\r\n\t// ˺֪ͨױ༭(IDE)л(RUNTIME)й¼\r\n\r\n/* ͷʵֺԭ͡\r\n   1 CDECL ÷ʽ\r\n   2pRetData ݣ\r\n   3!!!ָͲΪ _SDT_ALL \r\n       pRetData->m_dtDataTypeΪ _SDT_ALL д\r\n   4pArgInf ṩݱָ MDATA_INF ¼ÿĿͬ nArgCount */\r\ntypedef void (*PFN_EXECUTE_CMD) (PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf);\r\n// ֿ֧ADDINܵĺ\r\ntypedef INT (WINAPI *PFN_RUN_ADDIN_FN) (INT nAddInFnIndex);\r\n// ṩĳģĺ\r\ntypedef INT (WINAPI *PFN_SUPER_TEMPLATE) (INT nTemplateIndex);\r\n\r\n////////////////////////////////////////////////////\r\n\r\n#define\t\tLIB_FORMAT_VER\t\t20000101\t// ʽ\r\n\r\n/*\t!!! ע⣺ֿ֧ļĺ׺̶Ϊ.FNxxΪһĸĿǰĺ׺У\r\n\t1.fne\t༭Ϣִֿ֧֧⣻\r\n\t2.fnl\t༭Ϣִֿ֧֧⣻\r\n\t3.fnr\t༭Ϣִֿ֧֧⣻\r\n*/\r\n\r\ntypedef struct\r\n{\r\n\tDWORD\t\t\t\tm_dwLibFormatVer;\r\n\t\t// ʽţӦõLIB_FORMAT_VER\r\n\r\n\tLPTSTR\t\t\t\tm_szGuid;\r\n\t\t// ӦڱΨһGUIDΪNULLգͬк汾˴Ӧͬ\r\n        // ע GUID ıʹרù(汾ĵguidgen.exe)ɣԷֹظ\r\n\r\n\tINT\t\t\t\t\tm_nMajorVersion;\t// 汾ţ0\r\n\tINT\t\t\t\t\tm_nMinorVersion;\t// Ĵΰ汾š\r\n\r\n\tINT\t\t\t\t\tm_nBuildNumber;\r\n\t\t// 汾š\r\n\t\t//   汾Žͬʽ汾ŵϵͳƩ޸˼ BUG\r\n\t\t// ֵʽ汾ϵͳκιûʹõİ汾乹汾\r\n\t\t// ŶӦòһ\r\n\t\t//   ֵʱӦ˳\r\n\r\n\tINT\t\t\t\t\tm_nRqSysMajorVer;\t\t// Ҫϵͳ汾ţĿǰӦΪ 3 \r\n\tINT\t\t\t\t\tm_nRqSysMinorVer;\t\t// ҪϵͳĴΰ汾ţĿǰӦΪ 0 \r\n\tINT\t\t\t\t\tm_nRqSysKrnlLibMajorVer;\t// Ҫϵͳֿ֧汾ţĿǰӦΪ 3 \r\n\tINT\t\t\t\t\tm_nRqSysKrnlLibMinorVer;\t// Ҫϵͳֿ֧Ĵΰ汾ţĿǰӦΪ 0 \r\n\r\n\tLPTSTR\t\t\t\tm_szName;\t\t// ΪNULLա\r\n    // \r\n    #define LT_CHINESE  1\r\n    #define LT_ENGLISH  2\r\n\tINT\t\t\t\t\tm_nLanguage;\t// ֵ֧ԣĿǰӦΪ LT_CHINESE \r\n\tLPTSTR\t\t\t\tm_szExplain;\t// йرϸ\r\n\r\n\t#define\t\tLBS_FUNC_NO_RUN_CODE\t\t(1 << 2)\r\n\t\t// Ϊ⣬ûжӦִ֧ܵ룬˲С\r\n\t#define\t\tLBS_NO_EDIT_INFO\t\t\t(1 << 3)\r\n\t\t// ޹༭õϢ༭ϢҪΪơַȣ޷IDEء\r\n\tDWORD\t\t\t\tm_dwState;\r\n\r\n//////////////////  йرߵϢ\r\n\tLPTSTR\t\t\t\tm_szAuthor;\r\n\tLPTSTR\t\t\t\tm_szZipCode;\r\n\tLPTSTR\t\t\t\tm_szAddress;\r\n\tLPTSTR\t\t\t\tm_szPhoto;\r\n\tLPTSTR\t\t\t\tm_szFax;\r\n\tLPTSTR\t\t\t\tm_szEmail;\r\n\tLPTSTR\t\t\t\tm_szHomePage;\r\n\tLPTSTR\t\t\t\tm_szOther;\r\n\r\n//////////////////\r\n\tINT                 m_nDataTypeCount;\t// Զ͵Ŀm_pDataTypeָԱĿ\r\n\tPLIB_DATA_TYPE_INFO m_pDataType;\t\t// Զ͵ĶϢ\r\n\r\n\tINT\t\t\t\t\tm_nCategoryCount;\t// ȫĿͬm_szzCategoryԱʵṩĿ\r\n\tLPTSTR\t\t\t\tm_szzCategory;\t\t// ȫ˵ÿΪһַǰλֱʾͼţ1ʼ0ʾޣ\r\n                                            // һֵΪָֿ֧Ϊ\"LIB_BITMAP\"BITMAPԴĳһ16X13λͼ\r\n\r\n\tINT\t\t\t\t\tm_nCmdCount;        // ṩ(ȫ󷽷)Ŀ(Ϊ0)\r\n\tPCMD_INFO\t\t\tm_pBeginCmdInfo;\t// ָĶϢ(m_nCmdCountΪ0,ΪNULL)\r\n\tPFN_EXECUTE_CMD*    m_pCmdsFunc;\t\t// ָÿʵִ׵ַ(m_nCmdCountΪ0,ΪNULL)\r\n\r\n\tPFN_RUN_ADDIN_FN\tm_pfnRunAddInFn;\t// ΪNULLΪIDEṩӹܡ\r\n\t//     йAddInܵ˵ַ˵һܡһΪ\r\n\t// 20ַڶΪϸܣ60ַմ\r\n\tLPTSTR\t\t\t\tm_szzAddInFnInfo;\r\n\r\n\tPFN_NOTIFY_LIB\t\tm_pfnNotify;\t\t// ΪNULLṩIDEл֪ͨϢĺ\r\n\r\n    // ģʱá\r\n\tPFN_SUPER_TEMPLATE\tm_pfnSuperTemplate;\t// ΪNULL\r\n\tLPTSTR m_szzSuperTemplateInfo;\t// ΪNULL\r\n\r\n\t// ⶨг\r\n\tINT\tm_nLibConstCount;   // Ŀ\r\n\tPLIB_CONST_INFO m_pLibConst;    // ָ顣\r\n\r\n\tLPTSTR m_szzDependFiles;\t// ΪNULL\r\n\t    // ҪļװʱԶЩļ\r\n}\r\nLIB_INFO, *PLIB_INFO;\r\n\r\n/*////////////////////////////////////////////*/\r\n\r\n#define\tFUNCNAME_GET_LIB_INFO\t\t\"GetNewInf\"     // ȡֿ֧PLIB_INFOָ\r\ntypedef PLIB_INFO (WINAPI *PFN_GET_LIB_INFO) ();\t// GetNewInfĺԭ\r\ntypedef INT (*PFN_ADD_IN_FUNC) ();  // m_pfnRunAddInFnĺԭ\r\n\r\n/*////////////////////////////////////////////*/\r\n\r\n#define LIB_BMP_RESOURCE\t\"LIB_BITMAP\"\t    // ֿ֧ṩͼԴ\r\n#define LIB_BMP_CX\t\t\t16\t\t\t\t\t// ÿһͼԴĿ\r\n#define LIB_BMP_CY\t\t\t13\t\t\t\t\t// ÿһͼԴĸ߶\r\n#define LIB_BMP_BKCOLOR\t\tRGB(255, 255, 255)\t// ͼԴĵɫ\r\n\r\n//////////////////////////// ʱʹõĺ\r\n\r\n#define\tWU_GET_WND_PTR\t\t\t(WM_APP + 2)\t// ִ֧ڵԪ¼\r\n#define\tWU_SIZE_CHANGED\t\t\t(WM_APP + 3)\t// ڴڳߴı֪ͨ״ڵԪ\r\n#define\tWU_PARENT_RELAYOUT_BAR\t(WM_APP + 4)\t//   ֪ͨ㴰²е bar Ԫ\r\n                                                // ͨ bar Ԫıߴʹá\r\n\r\n#endif\r\n"
  },
  {
    "path": "krnln/lib2.h",
    "content": "\r\n#ifndef __LIB_INF_H\r\n#define __LIB_INF_H\r\n\r\n///////////////////////////////////\r\n\r\n// ϵͳ\r\n\r\n#define __OS_WIN        0x80000000\r\n#define __OS_LINUX      0x40000000\r\n#define __OS_UNIX       0x20000000\r\n\r\n#define OS_ALL     (__OS_WIN | __OS_LINUX | __OS_UNIX)\r\n\r\n/*\r\n\r\nڿϵͳּ֧˵\r\n\r\n  1ֿ֧Ҫ˵Щϵͳ汾ֿ֧͡\r\n     ͷ¼ֵ֧ĲϵͳЩϢ\r\n     ڸֿ֧евϵͳ汾бһ¡\r\n\r\n  2Ϊ˺ǰֿ֧ݣm_nRqSysMajorVer.m_nRqSysMinorVer汾\r\n     С3.6ĶĬΪ֧Windowsϵͳڲ͡\r\n     ͷ¼ԡ\r\n\r\n  3̶Ժ͹̶¼֧вϵͳ\r\n\r\n  4ڴ߿ⲻвϵͳּ֧顣\r\n\r\n*/\r\n\r\n///////////////////////////////////\r\n\r\n\r\n#ifdef _DEBUG\r\n\t#define CHKV_RET(epr)\t\t\\\r\n\t\t\tASSERT (epr);\t\\\r\n\t\t\tif (!(epr))  return;\r\n\t#define CHKV_RET_VAL(epr,val)\t\t\\\r\n\t\t\tASSERT (epr);\t\\\r\n\t\t\tif (!(epr))  return val;\r\n\t#define CHKV_BREAK(epr)\t\t\\\r\n\t\t\tASSERT (epr);\t\\\r\n\t\t\tif (!(epr))  break;\r\n\t#define CHKV_CONTINUE(epr)\t\t\\\r\n\t\t\tASSERT (epr);\t\\\r\n\t\t\tif (!(epr))  continue;\r\n\t#define DEFAULT_FAILD  default: ASSERT (FALSE); break\r\n#else\r\n\t#define CHKV_RET(epr)\t\t\\\r\n\t\t\tif (!(epr))  return;\r\n\t#define CHKV_RET_VAL(epr,val)\t\t\\\r\n\t\t\tif (!(epr))  return val;\r\n\t#define CHKV_BREAK(epr)\t\t\\\r\n\t\t\tif (!(epr))  break;\r\n\t#define CHKV_CONTINUE(epr)\t\t\\\r\n\t\t\tif (!(epr))  continue;\r\n\t#define DEFAULT_FAILD\r\n#endif\r\n\r\n\r\ntypedef\tSHORT\t\tDTBOOL;\t\t// SDT_BOOL͵ֵ\r\ntypedef\tDTBOOL*\t\tPDTBOOL;\r\n#define\tBL_TRUE\t\t-1\t\t\t// SDT_BOOL͵ֵ\r\n#define\tBL_FALSE\t0\t\t\t// SDT_BOOL͵ļֵ\r\n\r\ntypedef DATE*\tPDATE;\r\n\r\n///////////////////////////////////\r\n\r\n// ϵͳĻ\r\n\r\n#define\t\t_SDT_NULL\t\t0           // ݣڲʹãΪ㣩\r\n/*  ڿ򷵻ֵ͡\r\n    1ڶʱ_SDT_ALLƥͣͱҪ󣩡\r\n    2ڶΪ_SDT_ALL͵Ŀ򸴺͵\r\n    (ûԶ͵ڻ˵)_SDT_ALL͵ֻ\r\n    Ϊϵͳͻ򴰿˵͡*/\r\n#define\t\t_SDT_ALL\t\tMAKELONG (MAKEWORD (0, 0), 0x8000)\t// ڲʹã\r\n// ֵƥ֣ڿֵ͡\r\n//#define\t\t_SDT_NUM\t\tMAKELONG (MAKEWORD (1, 0), 0x8000)\t// ڲʹã3.0汾Ѿ\r\n\t#define\t\tSDT_BYTE\t\tMAKELONG (MAKEWORD (1, 1), 0x8000)\t\t// ֽ\r\n\t#define\t\tSDT_SHORT\t\tMAKELONG (MAKEWORD (1, 2), 0x8000)\t\t// \r\n\t#define\t\tSDT_INT\t\t\tMAKELONG (MAKEWORD (1, 3), 0x8000)\t\t// \r\n\t#define\t\tSDT_INT64\t\tMAKELONG (MAKEWORD (1, 4), 0x8000)\t\t// \r\n\t#define\t\tSDT_FLOAT\t\tMAKELONG (MAKEWORD (1, 5), 0x8000)\t\t// С\r\n\t#define\t\tSDT_DOUBLE\t\tMAKELONG (MAKEWORD (1, 6), 0x8000)\t\t// ˫С\r\n#define\t\tSDT_BOOL\t\tMAKELONG (MAKEWORD (2, 0),\t0x8000)\t\t// ߼\r\n#define\t\tSDT_DATE_TIME\tMAKELONG (MAKEWORD (3, 0),\t0x8000)\t\t// ʱ\r\n#define\t\tSDT_TEXT\t\tMAKELONG (MAKEWORD (4, 0),\t0x8000)\t\t// ı\r\n#define\t\tSDT_BIN\t\t\tMAKELONG (MAKEWORD (5, 0),\t0x8000)\t\t// ֽڼ\r\n#define\t\tSDT_SUB_PTR\t\tMAKELONG (MAKEWORD (6, 0),\t0x8000)\t\t// ӳָ\r\n//#define\t\t_SDT_VAR_REF\tMAKELONG (MAKEWORD (7, 0),\t0x8000)\t\t// ο3.0汾Ѿ\r\n#define\t\tSDT_STATMENT\tMAKELONG (MAKEWORD (8, 0),\t0x8000)\r\n\t// ͣڿ͡ݳΪINT\r\n\t// һ¼ӳַڶ¼ӳıջס\r\n    // !!! עʱԽлͣԱжϴ\r\n    /* ӣ\r\n        if (pArgInf->m_dtDataType == SDT_BOOL)\r\n            return pArgInf->m_bool;\r\n\r\n        if (pArgInf->m_dtDataType == SDT_STATMENT)\r\n        {\r\n            DWORD dwEBP = pArgInf->m_statment.m_dwSubEBP;\r\n            DWORD dwSubAdr = pArgInf->m_statment.m_dwStatmentSubCodeAdr;\r\n            DWORD dwECX, dwEAX;\r\n\r\n            _asm\r\n            {\r\n                mov eax, dwEBP\r\n                call dwSubAdr\r\n                mov dwECX, ecx\r\n                mov dwEAX, eax\r\n            }\r\n\r\n            if (dwECX == SDT_BOOL)\r\n                return dwEAX != 0;\r\n\r\n            // ͷıֽڼڴ档\r\n            if (dwECX == SDT_TEXT || dwECX == SDT_BIN)\r\n                MFree ((void*)dwEAX);\r\n        }\r\n\r\n        GReportError (\"жϵֻܽ߼\");\r\n    */\r\n\r\n// ϵͳ͡ûԶ͡ⶨ\r\n#define\tDTM_SYS_DATA_TYPE_MASK\t\t0x80000000\r\n#define\tDTM_USER_DATA_TYPE_MASK\t\t0x40000000\r\n#define\tDTM_LIB_DATA_TYPE_MASK\t\t0x00000000\r\n\r\n// ϸûԶ\r\n#define\tUDTM_USER_DECLARE_MASK\t\t0x00000000\t// ûԶ帴\r\n#define\tUDTM_WIN_DECLARE_MASK\t\t0x10000000\t// ûԶ崰\r\n\r\n// е־ĳֵλ1ʾΪ͵顣\r\n// ־ʱΪAS_RECEIVE_VAR_OR_ARRAYAS_RECEIVE_ALL_TYPE_DATA\r\n// ־Ŀ˵ΪǷΪݣϾδʹáط\r\n// ԺԱ־\r\n#define\tDT_IS_ARY\t\t\t\t\t0x20000000\r\n// еĴַ־ĳֵλ1ʾΪ͵ıַ\r\n// ־ʱΪAS_RECEIVE_VAR_OR_OTHER־Ŀ˵ΪǷΪ\r\n// ַϾδʹáطԺԱ־\r\n// ־ϱ־ܹ档\r\n#define\tDT_IS_VAR\t\t\t\t\t0x20000000\r\n\r\ntypedef DWORD DATA_TYPE;\r\ntypedef DATA_TYPE* PDATA_TYPE;\r\n\r\n////////////////////////////////////////////////////////////////\r\n\r\n// İ汾ͺ\r\n#define\tPT_EDIT_VER\t\t\t\t1\t// Ϊ༭İ汾\r\n#define\tPT_DEBUG_RUN_VER\t\t2\t// ΪDEBUGа汾\r\n#define\tPT_RELEASE_RUN_VER\t\t3\t// ΪRELEASEа汾\r\n\r\n// ѧϰѶȼ\r\n#define\tLVL_SIMPLE\t\t\t1\t\t// \r\n#define\tLVL_SECONDARY\t\t2\t\t// м\r\n#define\tLVL_HIGH\t\t\t3\t\t// ߼\r\n\r\n/*////////////////////////////////////////////*/\r\n\r\n//    ṩʽ֣\r\n//      1ṩʽڿûԶͣ\r\n//      2һṩʽṩԶͱԪء\r\n//\t\t   ԶĳԱȣ\r\n//      3ṩʽṩԪأ\r\n//      4ṩʽķֵṩݣ\r\ntypedef struct\r\n{\r\n\tLPTSTR\t\tm_szName;\t\t\t\t// \r\n\tLPTSTR\t\tm_szExplain;\t\t\t// ϸ\r\n\tSHORT\t\tm_shtBitmapIndex;\t\t// ָͼ,1ʼ,0ʾ.\r\n\tSHORT\t\tm_shtBitmapCount;\t\t// ͼĿ().\r\n\r\n\tDATA_TYPE\tm_dtType;\r\n\r\n\tINT\t\t\tm_nDefault;\r\n\t\t// ϵͳͲĬֵָڱ༭ʱѱʱٴ\r\n\t\t//     1ֱͣΪֵΪСָֻ֣\r\n\t\t//\t\t  ΪָֻINTֵĲ֣\r\n\t\t//     2߼ͣ1棬0ڼ٣\r\n\t\t//     3ıͣʱΪLPTSTRָ룬ָĬı\r\n\t\t//     4ͲԶͣһĬֵָ\r\n\r\n\tDWORD\t\tm_dwState;\t\t\t\t// MASK\r\n\t#define\t\tAS_HAS_DEFAULT_VALUE\t\t\t\t(1 << 0)\r\n\t\t\t// ĬֵĬֵm_nDefault˵ڱ༭ʱѱʱٴ\r\n\t#define\t\tAS_DEFAULT_VALUE_IS_EMPTY\t\t\t(1 << 1)\r\n\t\t\t//   ĬֵĬֵΪգAS_HAS_DEFAULT_VALUE־⣬\r\n\t\t\t// ʱݹĲͿΪ_SDT_NULL\r\n\t#define\t\tAS_RECEIVE_VAR      \t\t\t\t(1 << 2)\r\n\t\t\t//   Ϊṩʱֻṩһṩ顢\r\n\t\t\t// ֵʱݹĲݿ϶ݲΪıַ\r\n\t#define\t\tAS_RECEIVE_VAR_ARRAY\t\t\t\t(1 << 3)\r\n\t\t\t//   Ϊṩʱֻṩ飬ṩһ\r\n\t\t\t// ֵ\r\n\t#define\t\tAS_RECEIVE_VAR_OR_ARRAY     \t\t(1 << 4)\r\n\t\t\t//   Ϊṩʱֻṩһ飬ṩ\r\n\t\t\t// ֵд˱־򴫵ݸͽͨDT_IS_ARY\r\n            // ־ǷΪ顣\r\n\t#define\t\tAS_RECEIVE_ARRAY_DATA   \t\t\t(1 << 5)\r\n\t\t\t//   Ϊṩʱֻṩݣ粻ָ־ĬΪֻṩݡ\r\n\t\t\t// ָ˱־ʱݹĲݿ϶Ϊ顣\r\n\t#define\t\tAS_RECEIVE_ALL_TYPE_DATA            (1 << 6)\r\n\t\t\t// Ϊṩʱͬʱṩݣϱ־⡣\r\n            // д˱־򴫵ݸͽͨDT_IS_ARY־ǷΪ顣\r\n\t#define\t\tAS_RECEIVE_VAR_OR_OTHER      \t\t(1 << 9)\r\n\t\t\t// Ϊṩʱṩһֵṩ顣\r\n            // д˱־򴫵ݸͽͨDT_IS_VAR־ǷΪַ\r\n}\r\nARG_INFO, *PARG_INFO;\r\n\r\n#ifndef __GCC_\r\nstruct CMD_INFO\r\n#else\r\ntypedef struct\r\n#endif\r\n{\r\n\tLPTSTR\t\tm_szName;\t\t\t// \r\n\tLPTSTR\t\tm_szEgName;\t\t\t// ӢƣΪջNULL\r\n\t\r\n\tLPTSTR\t\tm_szExplain;\t\t// ϸ\r\n\tSHORT\t\tm_shtCategory;\t\t// ȫ𣬴1ʼԱĴֵΪ-1\r\n\r\n\t#define\t\tCT_IS_HIDED\t\t\t(1 << 2)\r\n\t\t//   ǷΪҪûֱӲѭ\r\n\t    // Ϊ˱ּҪڵ\r\n\t#define\t\tCT_IS_ERROR\t\t\t(1 << 3)\r\n\t\t// ڱвʹãд˱־һҪڲͬ԰汾ͬʹã\r\n\t\t// AA԰汾пҪʵֲʹãB԰汾пܾͲҪ\r\n\t\t// ʹ˾д˱־ָֻ֧óͱ룬֧С\r\n\t\t// д˱־Բʵִв֡\r\n\t#define\t\tCT_DISABLED_IN_RELEASE\t\t(1 << 4)\r\n\t\t// RELEASE汾вʹã൱ڿ޷ֵ\r\n\t#define\t\tCT_ALLOW_APPEND_NEW_ARG\t\t(1 << 5)\r\n\t\t//   ڱĲĩβǷµĲ²ͬڲеһ\r\n\t\t// Ĳһ\r\n\t#define\t\tCT_RETRUN_ARY_TYPE_DATA\t\t(1 << 6)\r\n\t\t// ˵m_dtRetValType˵ǷΪݡ\r\n\t#define\t\tCT_IS_OBJ_COPY_CMD              (1 << 7)   // !!! עÿֻһд˱ǡ\r\n\t\t//   ˵Ϊĳ͵ĸƺ(ִнһͬݸƵʱҪ\r\n        // ڱͶĸֵʱͷŸöԭݣȻɵô\r\n        // Ĵ룬κγ渳ֵƴ)\r\n        // !!! 1һͬͲҲκݡ\r\n        //     2ִбʱΪδʼ״̬ڱ븺ʼȫԱݡ\r\n        //     3ṩĴͲݿΪȫ״̬ɱԶɵĶʼã\r\n        //     ʱҪԴ\r\n\t#define\t\tCT_IS_OBJ_FREE_CMD              (1 << 8)   // !!! עÿֻһд˱ǡ\r\n\t\t//   ˵Ϊĳ͵(ִеʱҪȫ\r\n        // 󳬳ʱɵôĴ룬κγٴ)\r\n        //   !!! 1ûκβҲκݡ\r\n        //       2ִʱݿΪȫ״̬ɱԶɵĶʼã\r\n        //   ͷʱҪԴ\r\n\t#define\t\tCT_IS_OBJ_CONSTURCT_CMD         (1 << 9)   // !!! עÿֻһд˱ǡ\r\n\t\t//   ˵Ϊĳ͵Ĺ캯(ִеݳʼʱҪȫ\r\n        //   !!! 1ûκβҲκݡ\r\n        //       2ִʱΪȫ״̬\r\n        //       3ָͳԱͳԱԱ밴նӦʽһʼ\r\n    #define _CMD_OS(os)     ((os) >> 16)  // תosԱ뵽m_wState\r\n    #define _TEST_CMD_OS(m_wState,os)    ((_CMD_OS (os) & m_wState) != 0) // ָǷָ֧ϵͳ\r\n\tWORD\t\tm_wState;\r\n\r\n\t/*  !!!!! ǧע⣺ֵΪ _SDT_ALL , Բܷ(CT_RETRUN_ARY_TYPE_DATA\r\n\t\tλ)򸴺͵(ûԶ͵ڻ˵),\r\n\t\tΪ޷ԶɾĶռ(ıͻֽڼͳԱ).\r\n        ֻͨͨأ_SDT_ALL͵ֻΪ\r\n        ϵͳͻ򴰿˵͡\r\n\t*/\r\n\t// ֵͣʹǰעתHIWORDΪ0ڲֵʹõֵ\r\n\tDATA_TYPE\tm_dtRetValType;\r\n\r\n\tWORD\t\tm_wReserved;\r\n\r\n\tSHORT\t\tm_shtUserLevel;\t// ûѧϰѶȼ𣬱ֵΪꡣ\r\n\r\n#ifndef __GCC_\r\n\tBOOL IsInObj ()\r\n\t{\r\n\t\treturn m_shtCategory == -1;\r\n\t}\r\n#endif\r\n\r\n\tSHORT\t\tm_shtBitmapIndex;\t// ָͼ,1ʼ,0ʾ.\r\n\tSHORT\t\tm_shtBitmapCount;\t// ͼĿ().\r\n\r\n\tINT\t\t\tm_nArgCount;\t\t// ĲĿ\r\n\tPARG_INFO\tm_pBeginArgInfo;\r\n#ifndef __GCC_\r\n};\r\n#else\r\n} CMD_INFO;\r\n#endif\r\ntypedef CMD_INFO* PCMD_INFO;\r\n\r\n// ʹõĽṹ\r\ntypedef struct\r\n{\r\n    // !!! λöУ򱾳ԱΪSDT_INT\r\n\tDATA_TYPE m_dtType;\r\n\t\t//   \r\n    // !!! λöУ򱾳ԱΪNULL\r\n\tLPBYTE m_pArySpec;\r\n\t\t// ָΪ飬ֵΪNULLעԲָĳάΪ0顣\r\n\tLPTSTR m_szName;\r\n\t\t//     ıƣֻһ\r\n\t\t// ֵӦΪNULL\r\n\tLPTSTR m_szEgName;\r\n\t\t// ӢıƣΪջNULL\r\n\tLPTSTR m_szExplain;\r\n\r\n    // !!! λöУ򱾳ԱĬϾLES_HAS_DEFAULT_VALUEǡ\r\n\t// ݳԱĬֵĬֵm_nDefault˵\r\n\t#define\t\tLES_HAS_DEFAULT_VALUE\t\t(1 << 0)\r\n\t// ݳԱء\r\n\t#define\t\tLES_HIDED\t\t\t\t    (1 << 1)\r\n\tDWORD m_dwState;\r\n\r\n    // !!! λöУ򱾳ԱΪöֵ\r\n\tINT m_nDefault;\r\n\t\t// ϵͳ飩Ĭֵָ\r\n\t\t//     1ֱͣΪֵΪСָֻ֣\r\n\t\t//\t\t  ΪָֻINTֵĲ֣\r\n\t\t//     2߼ͣ1棬0ڼ٣\r\n\t\t//     3ıͣʱΪLPTSTRָ룬ָĬı\r\n\t\t//     4ͲԶͣһĬֵָ\r\n} LIB_DATA_TYPE_ELEMENT;\r\ntypedef LIB_DATA_TYPE_ELEMENT* PLIB_DATA_TYPE_ELEMENT;\r\n\r\n// ̶ԵĿ\r\n#define\tFIXED_WIN_UNIT_PROPERTY_COUNT\t8\r\n\r\n// ÿ̶Զ\r\n#define\tFIXED_WIN_UNIT_PROPERTY\t\\\r\n\t{\t_WT(\"\"),    _WT(\"left\"),        NULL,\tUD_INT,     _PROP_OS (OS_ALL),\tNULL },\t\\\r\n\t{\t_WT(\"\"),    _WT(\"top\"),         NULL,\tUD_INT,     _PROP_OS (OS_ALL),\tNULL },\t\\\r\n\t{\t_WT(\"\"),    _WT(\"width\"),       NULL,\tUD_INT,     _PROP_OS (OS_ALL),\tNULL },\t\\\r\n\t{\t_WT(\"߶\"),    _WT(\"height\"),      NULL,\tUD_INT,     _PROP_OS (OS_ALL),\tNULL },\t\\\r\n\t{\t_WT(\"\"),    _WT(\"tag\"),         NULL,\tUD_TEXT,\t_PROP_OS (OS_ALL),\tNULL },\t\\\r\n\t{\t_WT(\"\"),    _WT(\"visible\"),     NULL,\tUD_BOOL,\t_PROP_OS (OS_ALL),\tNULL },\t\\\r\n\t{\t_WT(\"ֹ\"),    _WT(\"disable\"),     NULL,\tUD_BOOL,\t_PROP_OS (OS_ALL),\tNULL },\t\\\r\n\t{\t_WT(\"ָ\"),_WT(\"MousePointer\"),NULL,\tUD_CURSOR,\t_PROP_OS (OS_ALL),\tNULL }\r\n\r\n// ԣעⲻҪ֧֡\r\ntypedef struct\r\n{\r\n\tLPTSTR m_szName;\r\n\t\t// ƣעΪԱͬʱöԣƱ߶һ¡\r\n\tLPTSTR m_szEgName;\r\n\tLPTSTR m_szExplain;\t\t// Խ͡\r\n\r\n// ע⣺ݸʽPFN_NOTIFY_PROPERTY_CHANGED֪ͨ\r\n\t#define\t\tUD_PICK_SPEC_INT    1000\t// ΪINTֵûֻѡ񣬲ܱ༭\r\n\r\n\t#define\t\tUD_INT\t\t\t1001\t// ΪINTֵ\r\n\t#define\t\tUD_DOUBLE\t\t1002\t// ΪDOUBLEֵ\r\n\t#define\t\tUD_BOOL\t\t\t1003\t// ΪBOOLֵ\r\n\t#define\t\tUD_DATE_TIME\t1004\t// ΪDATEֵ\r\n\t#define\t\tUD_TEXT\t\t\t1005\t// Ϊַ\r\n\r\n\t#define\t\tUD_PICK_INT\t\t\t1006\t// ΪINTֵûֻѡ񣬲ܱ༭\r\n\t#define\t\tUD_PICK_TEXT\t\t1007\t// Ϊַûֻѡ񣬲ܱ༭\r\n\t#define\t\tUD_EDIT_PICK_TEXT\t1008\t// ΪַûԱ༭\r\n\r\n\t#define\t\tUD_PIC\t\t\t1009\t// ΪͼƬļ\r\n\t#define\t\tUD_ICON\t\t\t1010\t// Ϊͼļ\r\n\t#define\t\tUD_CURSOR\t\t1011\r\n\t\t//   һINT¼ֵָͣLoadCursorΪ-1\r\n\t\t// ΪԶָ룬ʱӦȵָļݡ\r\n\t#define\t\tUD_MUSIC\t\t1012\t// Ϊļ\r\n\r\n\t#define\t\tUD_FONT\t\t\t1013\r\n\t\t//   ΪһLOGFONTݽṹٸġ\r\n\t#define\t\tUD_COLOR\t\t1014\r\n\t\t// ΪCOLORREFֵ\r\n\t#define\t\tUD_COLOR_TRANS\t1015\r\n\t\t// ΪCOLORREFֵ͸ɫ(CLR_DEFAULT)\r\n\t#define\t\tUD_FILE_NAME\t1016\r\n\t\t// Ϊļַʱm_szzPickStrеΪ\r\n\t\t//   Ի\\0 + ļ\\0 + ĬϺ׺\\0 +\r\n\t\t//   \"1\"ȡļ\"0\"ȡļ\\0\r\n\t#define\t\tUD_COLOR_BACK\t1017\r\n\t\t// ΪCOLORREFֵϵͳĬϱɫ(CLR_DEFAULT)\r\n\t#define\t\tUD_IMAGE_LIST\t\t1023\r\n\t\t// ͼƬ飬ݽṹΪ\r\n\t\t#define\tIMAGE_LIST_DATA_MARK\t(MAKELONG ('IM', 'LT'))\r\n\t\t/*\r\n\t\tDWORD: ־ݣΪ IMAGE_LIST_DATA_MARK\r\n\t\tCOLORREF: ͸ɫΪCLR_DEFAULT\r\n\t\tΪͼƬ.CImageList::ReadCImageList::Writeд\r\n\t\t*/\r\n\t#define\t\tUD_CUSTOMIZE\t\t1024\r\n\r\n#define\tUD_BEGIN\tUD_PICK_SPEC_INT\r\n#define\tUD_END\t\tUD_CUSTOMIZE\r\n\r\n\tSHORT m_shtType;\t// Ե͡\r\n\r\n\t#define\tUW_HAS_INDENT\t\t(1 << 0)\t// ԱʾʱһΣһԡ\r\n\t#define\tUW_GROUP_LINE\t\t(1 << 1)\t// Աбʾ׷ߡ\r\n\t#define\tUW_ONLY_READ\t\t(1 << 2)\r\n\t\t// ֻԣʱãʱд\r\n\t#define\tUW_CANNOT_INIT\t\t(1 << 3)\r\n\t\t// ʱãʱдϱ־⡣\r\n    #define UW_IS_HIDED         (1 << 4)    // 3.2 \r\n        // صá\r\n    //!!! עλ __OS_xxxx ֵָ֧Ĳϵͳ\r\n    #define _PROP_OS(os)     ((os) >> 16)  // תosԱ뵽m_wState\r\n    #define _TEST_PROP_OS(m_wState,os)    ((_PROP_OS (os) & m_wState) != 0) // ָǷָ֧ϵͳ\r\n\tWORD m_wState;\r\n\r\n\tLPTSTR m_szzPickStr;\r\n\t\t// ˳¼еıѡıUD_FILE_NAMEһմ\r\n\t\t// m_nTypeΪUP_PICK_INTUP_PICK_TEXTUD_EDIT_PICK_TEXTUD_FILE_NAMEʱΪNULL\r\n        // m_nTypeΪUD_PICK_SPEC_INTʱÿһѡıĸʽΪ ֵı + \"\\0\" + ˵ı + \"\\0\" \r\n} UNIT_PROPERTY;\r\ntypedef UNIT_PROPERTY* PUNIT_PROPERTY;\r\n\r\n///////////////////////////////// 3.2 ǰʹõ¼Ϣһ汾\r\n\r\ntypedef struct\r\n{\r\n\tLPTSTR\t\tm_szName;\t\t\t\t// \r\n\tLPTSTR\t\tm_szExplain;\t\t\t// ϸ\r\n\r\n\t#define EAS_IS_BOOL_ARG     (1 << 0)\t// Ϊ߼Ͳ޴˱־ĬΪͲ\r\n\tDWORD\t\tm_dwState;\t\t// MASK\r\n}\r\nEVENT_ARG_INFO, *PEVENT_ARG_INFO;\r\n\r\ntypedef struct\r\n{\r\n\tLPTSTR\t\tm_szName;\t\t\t// ¼\r\n\tLPTSTR\t\tm_szExplain;\t\t// ¼ϸ\r\n\r\n\t// ¼ǷΪ¼ܱһûʹû򱻷Ϊ˱ּҪڵ¼\r\n\t#define\t\tEV_IS_HIDED\t\t\t(1 << 0)\r\n\r\n\t// #define\t\tEV_IS_MOUSE_EVENT\t(1 << 1)    // 3.2\r\n\t#define\t\tEV_IS_KEY_EVENT\t\t(1 << 2)\r\n\r\n\t#define\t\tEV_RETURN_INT\t\t(1 << 3)\t// һ\r\n\t#define\t\tEV_RETURN_BOOL\t\t(1 << 4)\t// һ߼ֵϱ־⡣\r\n    //!!! עλ __OS_xxxx ָ¼ֵ֧Ĳϵͳ\r\n    #define _EVENT_OS(os)     ((os) >> 1)  // תosԱ뵽m_dwState\r\n    #define _TEST_EVENT_OS(m_dwState,os)    ((_EVENT_OS (os) & m_dwState) != 0) // ָ¼Ƿָ֧ϵͳ\r\n\tDWORD\t\tm_dwState;  // Բܶɷıֽڼ͵ҪռͷŴ͡\r\n\r\n\tINT             m_nArgCount;\t\t// ¼ĲĿ\r\n\tPEVENT_ARG_INFO m_pEventArgInfo;\t// ¼\r\n}\r\nEVENT_INFO, *PEVENT_INFO;\r\n\r\n///////////////////////////////// 3.2 Ժʹõ¼Ϣڶ汾\r\n\r\n// עײȫ EVENT_ARG_INFO \r\ntypedef struct\r\n{\r\n\tLPTSTR\t\tm_szName;       // \r\n\tLPTSTR\t\tm_szExplain;    // ϸ\r\n\r\n    // ǷҪԲοʽֵλֿ֧׳¼Ĵȷܹϵͳ\r\n    // ڴķݵĸʽҪ󣩡\r\n\t#define     EAS_BY_REF      (1 << 1)    // ʹ (1 << 0)\r\n\tDWORD\t\tm_dwState;\t\t// MASK\r\n\r\n\tDATA_TYPE\tm_dtDataType;\r\n}\r\nEVENT_ARG_INFO2, *PEVENT_ARG_INFO2;\r\n\r\n// עײȫ EVENT_INFO \r\ntypedef struct\r\n{\r\n\tLPTSTR\t\tm_szName;\t\t\t// ¼\r\n\tLPTSTR\t\tm_szExplain;\t\t// ¼ϸ\r\n\r\n    // »״ֵ̬ EVENT_INFO еĶͬ\r\n\t// #define\t\tEV_IS_HIDED\t\t\t(1 << 0)    // ¼ǷΪ¼ܱһûʹû򱻷Ϊ˱ּҪڵ¼\r\n    // #define\t\tEV_IS_KEY_EVENT\t\t(1 << 2)\r\n    #define     EV_IS_VER2  (1 << 31)   // ʾṹΪEVENT_INFO2!!!ʹñṹʱϴ״ֵ̬\r\n    //!!! עλ __OS_xxxx ָ¼ֵ֧Ĳϵͳ\r\n    // #define _EVENT_OS(os)     ((os) >> 1)  // תosԱ뵽m_dwState\r\n    // #define _TEST_EVENT_OS(m_dwState,os)    ((_EVENT_OS (os) & m_dwState) != 0) // ָ¼Ƿָ֧ϵͳ\r\n\tDWORD\t\tm_dwState;\r\n\r\n\tINT\t\t\t\t    m_nArgCount;\t\t// ¼ĲĿ\r\n\tPEVENT_ARG_INFO2    m_pEventArgInfo;\t// ¼\r\n\r\n    //!!! жҪͷţҪֿ֧׳¼Ĵ븺ͷš\r\n    DATA_TYPE m_dtRetDataType;\r\n}\r\nEVENT_INFO2, *PEVENT_INFO2;\r\n\r\n////////////////////////////////////\r\n\r\ntypedef DWORD  HUNIT;\r\n\r\n// ͨýӿָ롣\r\ntypedef void (WINAPI *PFN_INTERFACE) ();\r\n\r\n// ȡָĽӿڡ\r\n#define\tITF_CREATE_UNIT\t\t\t\t\t1\t\t// \r\n#define\tITF_PROPERTY_UPDATE_UI\t\t\t2\t\t// ָĿǰɷ޸\r\n#define\tITF_DLG_INIT_CUSTOMIZE_DATA\t\t3\t\t// ʹöԻøӶ\r\n#define\tITF_NOTIFY_PROPERTY_CHANGED\t\t4\t\t// ֪ͨĳݱû޸\r\n#define\tITF_GET_ALL_PROPERTY_DATA\t\t5\t\t// ȡȫ\r\n#define\tITF_GET_PROPERTY_DATA\t\t\t6\t\t// ȡĳ\r\n#define\tITF_GET_ICON_PROPERTY_DATA\t\t7\t\t// ȡڵͼݣڴڣ\r\n#define\tITF_IS_NEED_THIS_KEY\t\t\t8\t\t// ѯǷҪָİϢ\r\n\t\t// ػĬΪϵͳİTABSHIFT+TABUPDOWNȡ\r\n#define ITF_LANG_CNV                    9       // ת\r\n#define ITF_MSG_FILTER                  11      // Ϣ\r\n#define ITF_GET_NOTIFY_RECEIVER         12      // ȡĸ֪ͨ(PFN_ON_NOTIFY_UNIT)\r\n#if _MSC_VER == 1200\r\n\ttypedef INT (WINAPI *PFN_ON_NOTIFY_UNIT) (INT nMsg, DWORD dwParam1 = 0, DWORD dwParam2 = 0);\r\n#else\r\n\ttypedef INT(WINAPI* PFN_ON_NOTIFY_UNIT) (INT nMsg, DWORD dwParam1, DWORD dwParam2);\r\n#endif\r\n\t#define NU_GET_CREATE_SIZE_IN_DESIGNER\t\t0\r\n\t// ȡʱõʱĬϴߴ.\r\n\t// dwParam1: : INT*, ؿ(λ)\r\n\t// dwParam2: : INT*, ظ߶(λ)\r\n\t// ɹ1,ʧܷ0.\r\n\r\ntypedef PFN_INTERFACE (WINAPI *PFN_GET_INTERFACE) (INT nInterfaceNO);\r\n\r\n//////////////////////////////////// ӿڣ\r\n\r\n// ɹʱشھphUnitзʧܷNULL\r\n// hDesignWndblInDesignModeΪʱЧΪƴĴھ\r\ntypedef HUNIT (WINAPI *PFN_CREATE_UNIT) (LPBYTE pAllData, INT nAllDataSize,\r\n\t\tDWORD dwStyle, HWND hParentWnd, UINT uID, HMENU hMenu, INT x, INT y, INT cx, INT cy,\r\n\t\tDWORD dwWinFormID, DWORD dwUnitID,\t\t\t// ֪ͨϵͳ\r\n    #if __GCC_ || _MSC_VER == 1200\r\n\t\tHWND hDesignWnd = 0, BOOL blInDesignMode = FALSE);\r\n    #else\r\n\t\tHWND hDesignWnd, BOOL blInDesignMode);\r\n    #endif\r\n\r\n// dwStateΪºֵϡ\r\n#define CNV_NULL        0\r\n#define CNV_FONTNAME    (1 << 0)    // Ϊת(ڿܱ䳤\r\n                                    // psб뱣֤㹻Ŀռת)\r\ntypedef void (WINAPI* PFN_CNV)(char* ps, DWORD dwState, int nParam);\r\n// תذתݵHGLOBALʧܷNULL\r\ntypedef HGLOBAL (WINAPI *PFN_LANG_CNV) (LPBYTE pAllData, LPINT pnAllDataSize,\r\n\t\tPFN_CNV fnCnv, int nParam);  // nParamԭֵݸfnCnvĶӦ\r\n\r\n// ºʱʹá\r\n\r\n//   ָĿǰԱ棬򷵻ؼ١\r\ntypedef BOOL (WINAPI *PFN_PROPERTY_UPDATE_UI) (HUNIT hUnit, INT nPropertyIndex);\r\n\r\n//   иӶݣʹöԻЩݣ޸ڲݼΣ\r\n// Ҫ´޸Σ档pblModifiedΪNULLз\r\n// ޸״̬\r\ntypedef BOOL (WINAPI *PFN_DLG_INIT_CUSTOMIZE_DATA) (HUNIT hUnit, INT nPropertyIndex,\r\n    #if __GCC_ || _MSC_VER == 1200\r\n\t\tBOOL* pblModified = NULL, LPVOID pResultExtraData = NULL);\r\n    #else\r\n\t\tBOOL* pblModified, LPVOID pResultExtraData);\r\n    #endif\r\n\r\n// ¼ĳԵֵ\r\nunion UNIT_PROPERTY_VALUE\r\n{\r\n\tINT\t\t\tm_int;\t\t\t// UD_INTUD_PICK_INTUD_PICK_SPEC_INT\r\n\tDOUBLE\t\tm_double;\t\t// UD_DOUBLE\r\n\tBOOL\t\tm_bool;\t\t\t// UD_BOOL\r\n\tDATE\t\tm_dtDateTime;\t// UD_DATE_TIME\r\n\tCOLORREF\tm_clr;\t\t\t// UD_COLORUD_COLOR_TRANSUD_COLOR_BACK\r\n\tLPTSTR\t\tm_szText;\t\t// UD_TEXTUD_PICK_TEXTUD_EDIT_PICK_TEXT\r\n\t\t\t// UD_DATA_SOURCE_NAMEUD_DATA_PROVIDER_NAMEUD_DSCOL_NAME\r\n\t\t\t// UD_ODBC_CONNECT_STRUD_ODBC_SELECT_STR\r\n\tLPTSTR\t\tm_szFileName;\t// UD_FILE_NAME\r\n\r\n\tstruct\r\n\t{\r\n\t\tLPBYTE\t\tm_pData;\r\n\t\tINT\t\t\tm_nDataSize;\r\n\t} m_data;\r\n\t/*\r\n\t\tUD_PICUD_ICONUD_CURSORUD_MUSICUD_FONTUD_CUSTOMIZEUD_IMAGE_LIST\r\n\t*/\r\n\r\n#ifndef __GCC_\r\n\tUNIT_PROPERTY_VALUE ()\r\n\t{\r\n\t\tmemset ((LPBYTE)this, 0, sizeof (UNIT_PROPERTY_VALUE));\r\n\t}\r\n\r\n\tBOOL IsSame (INT nDataType, UNIT_PROPERTY_VALUE& val)\r\n\t{\r\n\t\tswitch (nDataType)\r\n\t\t{\r\n\t\tcase UD_INT:\r\n\t\tcase UD_PICK_INT:\r\n        case UD_PICK_SPEC_INT:\r\n\t\t\treturn m_int == val.m_int;\r\n\t\tcase UD_DOUBLE:\r\n\t\t\treturn m_double == val.m_double;\r\n\t\tcase UD_BOOL:\r\n\t\t\treturn m_bool == val.m_bool;\r\n\t\tcase UD_DATE_TIME:\r\n\t\t\treturn m_dtDateTime == val.m_dtDateTime;\r\n\t\tcase UD_COLOR:\r\n\t\tcase UD_COLOR_TRANS:\r\n\t\tcase UD_COLOR_BACK:\r\n\t\t\treturn m_clr == val.m_clr;\r\n\t\tcase UD_TEXT:\r\n\t\tcase UD_PICK_TEXT:\r\n\t\tcase UD_EDIT_PICK_TEXT:\r\n\t\t/*case UD_DATA_SOURCE_NAME:\r\n\t\tcase UD_DATA_PROVIDER_NAME:\r\n\t\tcase UD_DSCOL_NAME:\r\n\t\tcase UD_ODBC_CONNECT_STR:\r\n\t\tcase UD_ODBC_SELECT_STR:*/\r\n\t\t\treturn m_szText == NULL && val.m_szText == NULL ||\r\n\t\t\t\t\tm_szText != NULL && val.m_szText != NULL &&\r\n\t\t\t\t\tstrcmp (m_szText, val.m_szText) == 0;\r\n\t\tcase UD_FILE_NAME:\r\n\t\t\treturn m_szFileName == NULL && val.m_szFileName == NULL ||\r\n\t\t\t\t\tm_szFileName != NULL && val.m_szFileName != NULL &&\r\n\t\t\t\t\tstrcmp (m_szFileName, val.m_szFileName) == 0;\r\n\t\tcase UD_PIC:\r\n\t\tcase UD_ICON:\r\n\t\tcase UD_CURSOR:\r\n\t\tcase UD_MUSIC:\r\n\t\tcase UD_FONT:\r\n\t\tcase UD_CUSTOMIZE:\r\n\t\tcase UD_IMAGE_LIST:\r\n\t\t\tif (m_data.m_nDataSize == val.m_data.m_nDataSize)\r\n\t\t\t{\r\n\t\t\t\tif (m_data.m_nDataSize == 0)\r\n\t\t\t\t\treturn TRUE;\r\n\t\t\t\telse\r\n\t\t\t\t\treturn memcmp (m_data.m_pData, val.m_data.m_pData, m_data.m_nDataSize) == 0;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\t//ASSERT (FALSE);\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn FALSE;\r\n\t}\r\n#endif\r\n};\r\ntypedef union UNIT_PROPERTY_VALUE* PUNIT_PROPERTY_VALUE;\r\n\r\n//   ֪ͨĳһԣǶԣݱû޸ģ޸ڲݼΣȷʵҪ\r\n// ´޸Σ档κӦʾϢصppszTipTextС\r\n//   ע⣺ֵĺϷУ顣\r\ntypedef BOOL (WINAPI *PFN_NOTIFY_PROPERTY_CHANGED) (HUNIT hUnit, INT nPropertyIndex,\r\n    #if __GCC_ || _MSC_VER == 1200\r\n\t\tPUNIT_PROPERTY_VALUE pPropertyVaule, LPTSTR* ppszTipText = NULL);\r\n    #else\r\n\t\tPUNIT_PROPERTY_VALUE pPropertyVaule, LPTSTR* ppszTipText);\r\n    #endif\r\n\r\n// ȡĳݵpPropertyVauleУɹ棬򷵻ؼ١\r\n// !! 1ʱܱûı䣨ֱӵAPIԣʱȡʵֵ\r\n// !! 2ȡصıֽڼȷжڴָ룬ͷţ׳򲢲Ὣͷš\r\ntypedef BOOL (WINAPI *PFN_GET_PROPERTY_DATA) (HUNIT hUnit, INT nPropertyIndex,\r\n\t\tPUNIT_PROPERTY_VALUE pPropertyVaule);\r\n\r\n// ȡȫ\r\ntypedef HGLOBAL (WINAPI *PFN_GET_ALL_PROPERTY_DATA) (HUNIT hUnit);\r\n\r\n// ȡڵͼݣڴڣ\r\ntypedef HGLOBAL (WINAPI *PFN_GET_ICON_PROPERTY_DATA) (LPBYTE pAllData, INT nAllDataSize);\r\n\r\n// ѯǷҪָİϢҪ棬򷵻ؼ١\r\ntypedef BOOL (WINAPI *PFN_IS_NEED_THIS_KEY) (HUNIT hUnit, WORD wKey);\r\n\r\n// Ϣ(Ϣ˴Ч,LDT_MSG_FILTER_CONTROL)˵棬򷵻ؼ١\r\ntypedef BOOL (WINAPI *PFN_MESSAGE_FILTER) (void* pMsg); // WindowsϵͳpMsgΪMSG*ָ롣\r\n\r\n////////////////////////////////////\r\n\r\n#define\tUNIT_BMP_SIZE\t\t\t24\t\t// ־λͼĿȺ͸߶ȡ\r\n#define\tUNIT_BMP_BACK_COLOR\t\t(RGB (192, 192, 192))\t// ־λͼıɫ\r\n\r\n//!!!   עm_pElementBeginm_pPropertyBeginֻһΪNULLm_nElementCount\r\n//!!! m_nPropertyCountֻһΪ0\r\n\r\ntypedef struct  // ⶨͽṹ\r\n{\r\n\tLPTSTR m_szName;  // ͵ƣ磺߾ȵȣ\r\n\tLPTSTR m_szEgName;\r\n\t\t// ͵Ӣƣ磺intdoubleȵȣΪջNULL\r\n\tLPTSTR m_szExplain;   // ͵ϸͣΪNULL\r\n\r\n\tINT m_nCmdCount;\r\n\t\t// ṩĳԱĿΪ0\r\n\tLPINT m_pnCmdsIndex;\t// ˳¼гԱڿеֵΪNULL\r\n\r\n//   ǷΪͣûֱͣ类\r\n// Ϊ˱ּҪڵͣ\r\n\t#define\t\tLDT_IS_HIDED\t\t\t\t(1 << 0)\r\n// ڱвʹãд˱־һ\r\n// ʹд˱־͵Ҳ塣\r\n\t#define\t\tLDT_IS_ERROR\t\t\t\t(1 << 1)\r\n//   ǷΪڻڴʹõ˱־λm_nElementCountΪ0\r\n\t#define\t\tLDT_WIN_UNIT\t\t\t\t(1 << 6)\r\n// ǷΪд˱־LDT_WIN_UNITλ\r\n\t#define\t\tLDT_IS_CONTAINER\t\t\t(1 << 7)\r\n//ǷΪTABؼ(ѡ) 4.0\r\n\t#define\t\tLDT_IS_TAB_UNIT\t\t\t\t(1 << 8)\r\n// ṩܵĴʱӣ˱־λLDT_WIN_UNITλ\r\n// д˱־ߴ̶Ϊ32*32ʱ޿Ρ\r\n\t#define\t\tLDT_IS_FUNCTION_PROVIDER\t(1 << 15)\r\n// ˱־λʾܽ뽹㣬TABͣ\r\n\t#define\t\tLDT_CANNOT_GET_FOCUS\t\t(1 << 16)\r\n// ˱־λʾĬϲͣTABʹñ־ϱ־λ\r\n\t#define\t\tLDT_DEFAULT_NO_TABSTOP\t\t(1 << 17)\r\n// ǷΪö͡\r\n\t#define\t\tLDT_ENUM\t\t\t\t    (1 << 22)   // 3.7\r\n// ǷΪϢ\r\n\t#define\t\tLDT_MSG_FILTER_CONTROL\t\t(1 << 5)\r\n    //!!! עλ __OS_xxxx ֵָ֧Ĳϵͳ\r\n    #define _DT_OS(os)     (os)  // תosԱ뵽m_dwState\r\n    #define _TEST_DT_OS(m_dwState,os)    ((_DT_OS (os) & m_dwState) != 0) // ָǷָ֧ϵͳ\r\n\tDWORD m_dwState;\r\n\r\n////////////////////////////////////////////\r\n// ±ֻΪڡ˵ҲΪöʱЧ\r\n\r\n\tDWORD m_dwUnitBmpID;\t\t// ָڿеͼԴID0Ϊޡ\r\n                                // OCXװУm_dwUnitBmpIDָͼԴID\r\n\r\n\tINT m_nEventCount;\r\n\tPEVENT_INFO2 m_pEventBegin;\t// 屾¼\r\n\r\n\tINT m_nPropertyCount;\r\n\tPUNIT_PROPERTY m_pPropertyBegin;\r\n\r\n\tPFN_GET_INTERFACE m_pfnGetInterface;\r\n\r\n////////////////////////////////////////////\r\n// ±ֻڲΪڡ˵ΪöʱЧ\r\n\r\n\t// ĿΪڡ˵˱ֵΪ0\r\n\tINT\tm_nElementCount;\r\n\tPLIB_DATA_TYPE_ELEMENT m_pElementBegin;  // ָݳԱ顣\r\n} LIB_DATA_TYPE_INFO;\r\ntypedef LIB_DATA_TYPE_INFO* PLIB_DATA_TYPE_INFO;\r\n\r\n/*////////////////////////////////////////////*/\r\n\r\ntypedef struct  // ⳣݽṹ\r\n{\r\n\tLPTSTR\tm_szName;\r\n\tLPTSTR\tm_szEgName;\r\n\tLPTSTR\tm_szExplain;\r\n\r\n\tSHORT\tm_shtLayout;\r\n\r\n\t#define\tCT_NULL\t\t\t0\r\n\t#define\tCT_NUM\t\t\t1\t// value sample: 3.1415926\r\n\t#define\tCT_BOOL\t\t\t2\t// value sample: 1\r\n\t#define\tCT_TEXT\t\t\t3\t// value sample: \"abc\"\r\n\tSHORT\tm_shtType;\r\n\r\n\tLPTSTR\tm_szText;\t\t// CT_TEXT\r\n\tDOUBLE\tm_dbValue;\t\t// CT_NUMCT_BOOL\r\n} LIB_CONST_INFO;\r\ntypedef LIB_CONST_INFO* PLIB_CONST_INFO;\r\n\r\n//////////////////////////////////////////// ݽṹ\r\n\r\ntypedef union\r\n{\r\n\tBYTE\tm_byte;\r\n\tSHORT\tm_short;\r\n\tINT\t\tm_int;\r\n\tINT64\tm_int64;\r\n\tFLOAT\tm_float;\r\n\tDOUBLE\tm_double;\r\n}\r\nSYS_NUM_VALUE, *PSYS_NUM_VALUE;\r\n\r\ntypedef struct\r\n{\r\n    DWORD m_dwFormID;\r\n    DWORD m_dwUnitID;\r\n}\r\nMUNIT, *PMUNIT;\r\n\r\ntypedef struct\r\n{\r\n    DWORD m_dwStatmentSubCodeAdr;   // ¼صӳĽַ\r\n    DWORD m_dwSubEBP;       // ¼ӳEBPָ룬Աʸӳеľֲ\r\n}\r\nSTATMENT_CALL_DATA, *PSTATMENT_CALL_DATA;\r\n\r\n#ifndef __GCC_\r\n    #pragma pack (push, old_value)   // VC++ṹֽ\r\n    #pragma pack (1)    // Ϊһֽڶ롣\r\n#endif\r\n\r\ntypedef struct\r\n{\r\n    union\r\n    {\r\n\t    BYTE\t      m_byte;         // SDT_BYTE\r\n\t    SHORT\t      m_short;        // SDT_SHORT\r\n\t    INT\t\t      m_int;          // SDT_INT\r\n\t    DWORD\t      m_uint;         // (DWORD)SDT_INT\r\n\t    INT64\t      m_int64;        // SDT_INT64\r\n\t    FLOAT\t      m_float;        // SDT_FLOAT\r\n\t    DOUBLE\t      m_double;       // SDT_DOUBLE\r\n        DATE          m_date;         // SDT_DATE_TIME\r\n        BOOL          m_bool;         // SDT_BOOL\r\n        char*         m_pText;        // SDT_TEXTΪNULL\r\n                                      // !!!Ϊ˱޸ĵ(m_pTextпָ)еݣ\r\n                                      // ֻɶȡɸеݣͬ\r\n        LPBYTE        m_pBin;         // SDT_BINΪNULL!!!ֻɶȡɸеݡ\r\n        DWORD         m_dwSubCodeAdr; // SDT_SUB_PTR¼ӳַ\r\n        STATMENT_CALL_DATA  m_statment;     // SDT_STATMENT͡\r\n        MUNIT         m_unit;         // ˵͡\r\n        void*         m_pCompoundData;// ָ룬ָָݵĸʽ run.h \r\n                                      // ֱӸеݳԱҪͷŸóԱ\r\n        void*         m_pAryData;     // ָ룬ָָݵĸʽ run.h \r\n                                      // עΪıֽڼ飬ԱָΪNULL\r\n                                      // !!! ֻɶȡɸеݡ\r\n\r\n        // Ϊַָָ룬ʵֺʱá\r\n\t    BYTE*\tm_pByte;         // SDT_BYTE*\r\n\t    SHORT*\tm_pShort;        // SDT_SHORT*\r\n\t    INT*\tm_pInt;          // SDT_INT*\r\n\t    DWORD*\tm_pUInt;         // ((DWORD)SDT_INT)*\r\n\t    INT64*\tm_pInt64;        // SDT_INT64*\r\n\t    FLOAT*\tm_pFloat;        // SDT_FLOAT*\r\n\t    DOUBLE*\tm_pDouble;       // SDT_DOUBLE*\r\n        DATE*   m_pDate;         // SDT_DATE_TIME*\r\n        BOOL*   m_pBool;         // SDT_BOOL*\r\n        char**  m_ppText;        // SDT_TEXT*m_ppTextΪNULL\r\n                                 // עдֵ֮ǰͷǰֵMFree (*m_ppText)\r\n                                 // !!!ֱӸ*m_ppTextָݣֻͷԭָָ롣\r\n        LPBYTE* m_ppBin;         // SDT_BIN*m_ppBinΪNULL\r\n                                 // עдֵ֮ǰͷǰֵMFree (*m_ppBin)\r\n                                 // !!!ֱӸ*m_ppBinָݣֻͷԭָָ롣\r\n        DWORD*  m_pdwSubCodeAdr; // SDT_SUB_PTRӳַ\r\n        PSTATMENT_CALL_DATA m_pStatment;   // SDT_STATMENTͱ\r\n        PMUNIT   m_pUnit;           // ˵ͱ\r\n        void**  m_ppCompoundData;   // ͱ\r\n                                    // ֱӸеݳԱҪͷŸóԱ\r\n        void**  m_ppAryData;        // ݱע⣺\r\n                                    // 1дֵ֮ǰͷԭֵʹNRS_FREE_VAR֪ͨ\r\n                                    // 2Ϊıֽڼ飬ԱָΪNULL\r\n                                    // !!!ֱӸ*m_ppAryDataָݣֻͷԭָָ롣\r\n    };\r\n\r\n    // 1ʱò AS_RECEIVE_VAR_OR_ARRAY \r\n    //    AS_RECEIVE_ALL_TYPE_DATA ־Ϊݣ־ DT_IS_ARY \r\n    //    Ҳ DT_IS_ARY ־Ψһʹóϡ\r\n    // 2ݲʱΪհݣΪ _SDT_NULL \r\n    DATA_TYPE m_dtDataType;\r\n} MDATA_INF;\r\ntypedef MDATA_INF* PMDATA_INF;\r\n\r\n#ifndef __GCC_\r\n    #pragma pack (pop, old_value)    // ָVC++ṹֽ\r\n#endif\r\n\r\n//////////////////////////////////////////// ֪ͨݽṹ\r\n\r\n/*/////////////*/\r\n// ֪ͨϵͳֵ\r\n\r\n#ifndef __GCC_\r\nstruct MDATA\r\n{\r\n\tMDATA ()\r\n\t{\r\n\t\tm_pData = NULL;\r\n\t\tm_nDataSize = 0;\r\n\t}\r\n#else\r\ntypedef struct\r\n{\r\n#endif\r\n\r\n\tLPBYTE\tm_pData;\r\n\tINT\t\tm_nDataSize;\r\n\r\n#ifndef __GCC_\r\n};\r\n#else\r\n} MDATA;\r\n#endif\r\ntypedef MDATA* PMDATA;\r\n\r\n// һ¼֪ͨ\r\n#ifndef __GCC_\r\nstruct EVENT_NOTIFY\r\n#else\r\ntypedef struct\r\n#endif\r\n{\r\n\t// ¼¼Դ\r\n\tDWORD\tm_dwFormID;\t\t//  ID\r\n\tDWORD\tm_dwUnitID;\t\t//  ID\r\n\tINT\t\tm_nEventIndex;\t// ¼\r\n\r\n\tINT\t\tm_nArgCount;\t\t// ¼ݵĲĿ 5 \r\n\tINT\t\tm_nArgValue [5];\t// ¼ֵSDT_BOOL ͲֵΪ 1  0\r\n\r\n    //!!! עԱûж巵ֵ¼Ч\r\n\t// û¼ӳ¼Ƿзֵ\r\n\tBOOL\tm_blHasRetVal;\r\n\t// û¼ӳ¼ķֵ߼ֵֵ 0٣  1棩 ء\r\n\tINT\t\tm_nRetVal;\r\n\r\n    /////////////////////////////////////\r\n\r\n#ifndef __GCC_\r\n\tEVENT_NOTIFY (DWORD dwFormID, DWORD dwUnitID, INT nEventIndex)\r\n\t{\r\n\t\tm_dwFormID = dwFormID;\r\n\t\tm_dwUnitID = dwUnitID;\r\n\t\tm_nEventIndex = nEventIndex;\r\n\r\n\t\tm_nArgCount = 0;\r\n\t\tm_blHasRetVal = FALSE;\r\n\t\tm_nRetVal = 0;\r\n\t}\r\n};\r\n#else\r\n} EVENT_NOTIFY;\r\n#endif\r\ntypedef EVENT_NOTIFY* PEVENT_NOTIFY;\r\n\r\ntypedef struct\r\n{\r\n    MDATA_INF m_inf;\r\n\r\n    // m_infǷΪָݡ\r\n    //!!! ע m_inf.m_dtDataType Ϊıֽ͡ڼ͡ⶨͣڵԪ˵ͣ\r\n    // 봫ָ룬Ǳλ\r\n    #define EAV_IS_POINTER  (1 << 0)\r\n    #define EAV_IS_WINUNIT  (1 << 1)    // ˵m_inf.m_dtDataTypeǷΪڵԪ\r\n                                        // !!!עm_inf.m_dtDataTypeΪڵԪ˱Ǳλ\r\n    DWORD m_dwState;\r\n}\r\nEVENT_ARG_VALUE, *PEVENT_ARG_VALUE;\r\n\r\n// ڶ¼֪ͨ\r\n#ifndef __GCC_\r\nstruct EVENT_NOTIFY2\r\n#else\r\ntypedef struct\r\n#endif\r\n{\r\n\t// ¼¼Դ\r\n\tDWORD m_dwFormID;  //  ID\r\n\tDWORD m_dwUnitID;  //  ID\r\n\tINT m_nEventIndex;  // ¼\r\n\r\n    #define MAX_EVENT2_ARG_COUNT    12\r\n\tINT m_nArgCount;  // ¼ݵĲĿ MAX_EVENT2_ARG_COUNT \r\n\tEVENT_ARG_VALUE m_arg [MAX_EVENT2_ARG_COUNT];  // ¼ֵ\r\n\r\n    //!!! עԱûж巵ֵ¼Ч\r\n\t// û¼ӳ¼Ƿзֵ\r\n\tBOOL m_blHasRetVal;\r\n    // ¼û¼ӳ¼ķֵעеm_infRetData.m_dtDataTypeԱδʹá\r\n    MDATA_INF m_infRetData;\r\n\r\n    /////////////////////////////////////\r\n\r\n#ifndef __GCC_\r\n\tEVENT_NOTIFY2 (DWORD dwFormID, DWORD dwUnitID, INT nEventIndex)\r\n\t{\r\n\t\tm_dwFormID = dwFormID;\r\n\t\tm_dwUnitID = dwUnitID;\r\n\t\tm_nEventIndex = nEventIndex;\r\n\t\tm_nArgCount = 0;\r\n\t\tm_blHasRetVal = FALSE;\r\n        m_infRetData.m_dtDataType = _SDT_NULL;\r\n\t}\r\n};\r\n#else\r\n} EVENT_NOTIFY2;\r\n#endif\r\ntypedef EVENT_NOTIFY2* PEVENT_NOTIFY2;\r\n\r\ntypedef struct\r\n{\r\n\tHICON\tm_hBigIcon;\r\n\tHICON\tm_hSmallIcon;\r\n} APP_ICON;\r\ntypedef APP_ICON* PAPP_ICON;\r\n\r\n/*///////////////////////*/\r\n\r\n// NES_ Ϊױ༭֪ͨ\r\n#define NES_GET_MAIN_HWND\t\t\t        1\r\n\t// ȡױ༭ڵľֿ֧֧AddIn\r\n#define\tNES_RUN_FUNC\t\t\t\t        2\r\n\t// ֪ͨױ༭ָĹܣһBOOLֵ\r\n\t// dwParam1Ϊܺš\r\n\t// dwParam2Ϊһ˫DWORDָ,ֱṩܲ12\r\n#define NES_PICK_IMAGE_INDEX_DLG            7\r\n    // ֪ͨױ༭ʾһԻгָͼƬڵͼƬûѡͼƬš\r\n    // dwParam1ΪЧͼƬ\r\n    //   dwParam2ΪNULLϵͳΪΪһ༭HWNDھûЧѡ\r\n    // ϵͳԶĴ˱༭ݲתȥ\r\n    // ûѡͼƬ(-1ʾûѡͼƬ)ûδѡ򷵻-2\r\n\r\n// NAS_ Ϊȱױ༭ֱл֪ͨ\r\n#define\tNAS_GET_APP_ICON\t\t\t        1000\r\n\t// ֪ͨϵͳسͼꡣ\r\n\t// dwParam1ΪPAPP_ICONָ롣\r\n#define NAS_GET_LIB_DATA_TYPE_INFO          1002\r\n    // ָⶨ͵PLIB_DATA_TYPE_INFOϢָ롣\r\n    // dwParam1Ϊ͡\r\n    // Ч߲Ϊⶨͣ򷵻NULL򷵻PLIB_DATA_TYPE_INFOָ롣\r\n#define NAS_GET_HBITMAP                     1003\r\n    // dwParam1ΪͼƬָ룬dwParam2ΪͼƬݳߴ硣\r\n    // ɹطNULLHBITMAPעʹϺͷţ򷵻NULL\r\n#define NAS_GET_LANG_ID                     1004\r\n    // صǰϵͳлֵ֧IDIDֵlang.h\r\n#define NAS_GET_VER                         1005\r\n    // صǰϵͳлİ汾ţLOWORDΪ汾ţHIWORDΪΰ汾š\r\n#define NAS_GET_PATH                        1006\r\n    /* صǰлĳһĿ¼ļĿ¼ԡ\\\r\n       dwParam1: ָҪĿ¼Ϊֵ\r\n         Aл¾ЧĿ¼:\r\n            1: лϵͳĿ¼\r\n         BЧĿ¼(Ч):\r\n            1001: ϵͳֿ̺֧Ŀ¼\r\n            1002: ϵͳĿ¼\r\n            1003: ϵͳϢĿ¼\r\n            1004: еǼǵϵͳģĿ¼\r\n            1005: ֿ֧ڵĿ¼\r\n            1006: װĿ¼\r\n         CлЧĿ¼(лЧ):\r\n            2001: ûEXEļĿ¼\r\n            2002: ûEXEļ\r\n       dwParam2: ջַߴΪMAX_PATH\r\n    */\r\n#define NAS_CREATE_CWND_OBJECT_FROM_HWND    1007\r\n    // ָͨHWNDһCWND󣬷ָ룬סָͨNRS_DELETE_CWND_OBJECTͷ\r\n    // dwParam1ΪHWND\r\n    // ɹCWnd*ָ룬ʧܷNULL\r\n#define NAS_DELETE_CWND_OBJECT              1008\r\n    // ɾͨNRS_CREATE_CWND_OBJECT_FROM_HWNDCWND\r\n    // dwParam1ΪɾCWndָ\r\n#define NAS_DETACH_CWND_OBJECT              1009\r\n    // ȡͨNRS_CREATE_CWND_OBJECT_FROM_HWNDCWNDHWNDİ\r\n    // dwParam1ΪCWndָ\r\n    // ɹHWND,ʧܷ0\r\n#define NAS_GET_HWND_OF_CWND_OBJECT         1010\r\n    // ȡͨNRS_CREATE_CWND_OBJECT_FROM_HWNDCWNDеHWND\r\n    // dwParam1ΪCWndָ\r\n    // ɹHWND,ʧܷ0\r\n#define NAS_ATTACH_CWND_OBJECT              1011\r\n    // ָHWNDͨNRS_CREATE_CWND_OBJECT_FROM_HWNDCWND\r\n    // dwParam1ΪHWND\r\n    // dwParam2ΪCWndָ\r\n    // ɹ1,ʧܷ0\r\n#define\tNAS_IS_EWIN\t\t\t\t\t\t\t1014\r\n    // ָΪԴڻ棬򷵻ؼ١\r\n    // dwParam1ΪԵHWND.\r\n\r\n// NRS_ Ϊܱл֪ͨ\r\n#define NRS_UNIT_DESTROIED\t\t\t        2000\r\n\t// ֪ͨϵͳָѾ١\r\n\t// dwParam1ΪdwFormID\r\n\t// dwParam2ΪdwUnitID\r\n#define NRS_CONVERT_NUM_TO_INT              2001\r\n\t// תֵʽ\r\n\t// dwParam1Ϊ PMDATA_INF ָ룬 m_dtDataType Ϊֵ͡\r\n    // תֵ\r\n#define NRS_GET_CMD_LINE_STR\t\t\t    2002\r\n\t// ȡǰı\r\n\t// ıָ룬пΪմ\r\n#define NRS_GET_EXE_PATH_STR                2003\r\n\t// ȡǰִļĿ¼\r\n\t// صǰִļĿ¼ıָ롣\r\n#define NRS_GET_EXE_NAME\t\t\t\t    2004\r\n\t// ȡǰִļ\r\n\t// صǰִļıָ롣\r\n#define NRS_GET_UNIT_PTR\t\t\t\t    2006\r\n\t// ȡָ\r\n\t// dwParam1ΪWinFormID\r\n\t// dwParam2ΪWinUnitID\r\n\t// ɹЧCWnd*ָ룬ʧܷ0\r\n#define NRS_GET_AND_CHECK_UNIT_PTR\t\t\t2007\r\n\t// ȡָ\r\n\t// dwParam1ΪWinFormID\r\n\t// dwParam2ΪWinUnitID\r\n\t// ɹЧCWnd*ָ룬ʧܱʱ˳\r\n#define NRS_EVENT_NOTIFY\t\t\t\t    2008\r\n\t// Եһ෽ʽ֪ͨϵͳ¼\r\n\t// dwParam1ΪPEVENT_NOTIFYָ롣\r\n\t//    0 ʾ¼ѱϵͳʾϵͳѾɹݴ¼û\r\n\t// ¼ӳ\r\n#define\tNRS_DO_EVENTS\t\t\t            2018\r\n\t// ֪ͨϵͳд¼\r\n#define NRS_GET_UNIT_DATA_TYPE              2022\r\n\t// dwParam1ΪWinFormID\r\n\t// dwParam2ΪWinUnitID\r\n\t// ɹЧ DATA_TYPE ʧܷ 0 \r\n#define NRS_FREE_ARY                        2023\r\n    // ͷָݡ\r\n    // dwParam1ΪݵDATA_TYPEֻΪϵͳ͡\r\n    // dwParam2Ϊָݵָ롣\r\n#define NRS_MALLOC                          2024\r\n    // ָռڴ棬׳򽻻ڴ涼ʹñ֪ͨ䡣\r\n    //   dwParam1Ϊڴֽ\r\n    //   dwParam2Ϊ0ʧܾԶʱ˳\r\n    // 粻Ϊ0ʧܾͷNULL\r\n    //   ڴ׵ַ\r\n#define NRS_MFREE                           2025\r\n    // ͷѷָڴ档\r\n    // dwParam1Ϊͷڴ׵ַ\r\n#define NRS_MREALLOC                        2026\r\n    // ·ڴ档\r\n    //   dwParam1Ϊ·ڴߴ׵ַ\r\n    //   dwParam2Ϊ·ڴֽ\r\n    // ·ڴ׵ַʧԶʱ˳\r\n#define\tNRS_RUNTIME_ERR\t\t\t            2027\r\n\t// ֪ͨϵͳѾʱ\r\n\t// dwParam1Ϊchar*ָ룬˵ı\r\n#define\tNRS_EXIT_PROGRAM                    2028\r\n\t// ֪ͨϵͳ˳û\r\n\t// dwParam1Ϊ˳룬ô뽫صϵͳ\r\n#define NRS_GET_PRG_TYPE                    2030\r\n    // صǰûͣΪPT_DEBUG_RUN_VER԰棩PT_RELEASE_RUN_VER棩\r\n#define NRS_EVENT_NOTIFY2\t\t\t\t    2031\r\n\t// Եڶ෽ʽ֪ͨϵͳ¼\r\n\t// dwParam1ΪPEVENT_NOTIFY2ָ롣\r\n\t//    0 ʾ¼ѱϵͳʾϵͳѾɹݴ¼û\r\n\t// ¼ӳ\r\n#define NRS_GET_WINFORM_COUNT               2032\r\n    // صǰĴĿ\r\n#define NRS_GET_WINFORM_HWND                2033\r\n    // ָĴھôδ룬NULL\r\n\t// dwParam1Ϊ\r\n#define NRS_GET_BITMAP_DATA                 2034\r\n    // ָHBITMAPͼƬݣɹذBMPͼƬݵHGLOBALʧܷNULL\r\n\t// dwParam1ΪȡͼƬݵHBITMAP\r\n#define NRS_FREE_COMOBJECT                  2035\r\n    // ֪ͨϵͳͷָDTP_COM_OBJECTCOM\r\n    // dwParam1ΪCOMĵַָ롣\r\n#define NRS_CHK_TAB_VISIBLE                 2039\r\n\t// ѡӼбл, ʹñϢ֪ͨϵͳ\r\n\r\n\r\n/*///////////////////////////////////////////////////////////////////*/\r\n// ϵͳֵ֪ͨ\r\n#define\tNL_SYS_NOTIFY_FUNCTION\t\t    1\r\n\t//   ֪֪ͨϵͳõĺָ룬װֿ֧ǰ֪ͨжΣ\r\n\t// ֵ֪ͨӦøǰֵ֪ͨԷֵ\r\n\t//   ɽ˺ָ¼ԱҪʱʹ֪ͨϢϵͳ\r\n\t//   dwParam1: (PFN_NOTIFY_SYS)\r\n#define NL_FREE_LIB_DATA                6\r\n    // ֿ֪֧ͨͷԴ׼˳ͷָĸݡ\r\n\r\n#define NL_GET_CMD_FUNC_NAMES            14\r\n    // ʵֺĵĺ(char*[]), ֧־̬Ķ̬봦\r\n#define NL_GET_NOTIFY_LIB_FUNC_NAME      15\r\n    // شϵͳ֪ͨĺ(PFN_NOTIFY_LIB), ֧־̬Ķ̬봦\r\n#define NL_GET_DEPENDENT_LIBS            16\r\n    // ؾ̬̬ļб(ʽΪ\\0ָı,β\\0), ֧־̬Ķ̬봦\r\n    // kernel32.lib user32.lib gdi32.lib ȳõϵͳⲻҪڴб\r\n    // NULLNR_ERRʾָļ\r\n\r\n\r\n/*///////////////////////////////////////////////////////////////////*/\r\n\r\n#define NR_OK\t\t0\r\n#define NR_ERR\t\t-1\r\n\r\n#if __GCC_ || _MSC_VER == 1200\r\n    typedef INT (WINAPI *PFN_NOTIFY_LIB) (INT nMsg, DWORD dwParam1 = 0, DWORD dwParam2 = 0);\r\n\t    // ˺ϵͳ֪ͨй¼\r\n    typedef INT (WINAPI *PFN_NOTIFY_SYS) (INT nMsg, DWORD dwParam1 = 0, DWORD dwParam2 = 0);\r\n\t    // ˺֪ͨϵͳй¼\r\n#else\r\n    typedef INT (WINAPI *PFN_NOTIFY_LIB) (INT nMsg, DWORD dwParam1, DWORD dwParam2);\r\n\t    // ˺ϵͳ֪ͨй¼\r\n    typedef INT (WINAPI *PFN_NOTIFY_SYS) (INT nMsg, DWORD dwParam1, DWORD dwParam2);\r\n\t    // ˺֪ͨϵͳй¼\r\n#endif\r\n\r\n/* ͷʵֺԭ͡\r\n   1 CDECL ÷ʽ\r\n   2pRetData ݣ\r\n   3!!!ָͲΪ _SDT_ALL \r\n       pRetData->m_dtDataTypeΪ _SDT_ALL д\r\n   4pArgInf ṩݱָ MDATA_INF ÿĿͬ nArgCount */\r\ntypedef void (*PFN_EXECUTE_CMD) (PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf);\r\n// ֿ֧ADDINܵĺ\r\ntypedef INT (WINAPI *PFN_RUN_ADDIN_FN) (INT nAddInFnIndex);\r\n// ṩĳģĺ\r\ntypedef INT (WINAPI *PFN_SUPER_TEMPLATE) (INT nTemplateIndex);\r\n\r\n////////////////////////////////////////////////////\r\n\r\n#define\t\tLIB_FORMAT_VER\t\t20000101\t// ʽ\r\n\r\ntypedef struct\r\n{\r\n\tDWORD\t\t\t\tm_dwLibFormatVer;\r\n\t\t// ʽţӦõLIB_FORMAT_VERҪ;£\r\n\t\t//   Ʃ krnln.fnX ⣬ͬȫһµĿʱӦı˸ʽţ\r\n\t\t// Էֹװء\r\n\r\n\tLPTSTR\t\t\t\tm_szGuid;\r\n\t\t// ӦڱΨһGUIDΪNULLգа汾˴Ӧͬ\r\n\t\t// ΪActiveXؼ˴¼CLSID\r\n\tINT\t\t\t\t\tm_nMajorVersion;\t// 汾ţ0\r\n\tINT\t\t\t\t\tm_nMinorVersion;\t// Ĵΰ汾š\r\n\r\n\tINT\t\t\t\t\tm_nBuildNumber;\r\n\t\t// 汾ţԴ˰汾κδ\r\n\t\t//   汾Žͬʽ汾ŵϵͳƩ޸˼ BUG\r\n\t\t// ֵʽ汾ϵͳκιûʹõİ汾乹汾\r\n\t\t// ŶӦòһ\r\n\t\t//   ֵʱӦ˳\r\n\r\n\tINT\t\t\t\t\tm_nRqSysMajorVer;\t\t// Ҫϵͳ汾š\r\n\tINT\t\t\t\t\tm_nRqSysMinorVer;\t\t// ҪϵͳĴΰ汾š\r\n\tINT\t\t\t\t\tm_nRqSysKrnlLibMajorVer;\t// Ҫϵͳֿ֧汾š\r\n\tINT\t\t\t\t\tm_nRqSysKrnlLibMinorVer;\t// Ҫϵͳֿ֧Ĵΰ汾š\r\n\r\n\tLPTSTR\t\t\t\tm_szName;\r\n\t\t// ΪNULLա\r\n\tINT\t\t\t\t\tm_nLanguage;\t// ֵ֧ԡ\r\n\tLPTSTR\t\t\t\tm_szExplain;\t// ϸ\r\n\r\n\t#define\t\tLBS_FUNC_NO_RUN_CODE\t\t(1 << 2)\r\n\t\t// Ϊ⣬ûжӦִ֧ܵ룬˲С\r\n\t#define\t\tLBS_NO_EDIT_INFO\t\t\t(1 << 3)\r\n\t\t// ޹༭õϢ༭ϢҪΪơַȣ\r\n\t#define\t\tLBS_IS_DB_LIB\t\t\t\t(1 << 5)\r\n\t\t// ǷΪݿֿ֧⡣\r\n    //!!! עλ __OS_xxxx ڱֿ֧евϵͳ汾\r\n    #define _LIB_OS(os)     (os)  // תosԱ뵽m_dwState\r\n    #define _TEST_LIB_OS(m_dwState,os)    ((_LIB_OS (os) & m_dwState) != 0) // ֿ֧Ƿָϵͳİ汾\r\n\tDWORD\t\t\t\tm_dwState;\r\n\r\n//////////////////\r\n\tLPTSTR\t\t\t\tm_szAuthor;\r\n\tLPTSTR\t\t\t\tm_szZipCode;\r\n\tLPTSTR\t\t\t\tm_szAddress;\r\n\tLPTSTR\t\t\t\tm_szPhoto;\r\n\tLPTSTR\t\t\t\tm_szFax;\r\n\tLPTSTR\t\t\t\tm_szEmail;\r\n\tLPTSTR\t\t\t\tm_szHomePage;\r\n\tLPTSTR\t\t\t\tm_szOther;\r\n\r\n//////////////////\r\n\tINT                 m_nDataTypeCount;\t// Զ͵Ŀ\r\n\tPLIB_DATA_TYPE_INFO m_pDataType;\t\t// еԶ͡\r\n\t\t//   Բοʹϵͳֿ֧еԶͣϵͳֿ֧ڳ\r\n\t\t// ĿǼеֵ1ֵΪ1\r\n\r\n\tINT\t\t\t\t\tm_nCategoryCount;\t// ȫĿΪ0\r\n\tLPTSTR\t\t\t\tm_szzCategory;\t\t// ȫ˵\r\n\r\n\t// ṩȫĿΪ0\r\n\tINT\t\t\t\t\tm_nCmdCount;\r\n\tPCMD_INFO\t\t\tm_pBeginCmdInfo;\t// ΪNULL\r\n\tPFN_EXECUTE_CMD*    m_pCmdsFunc;\t\t// ָÿʵִ׵ַΪNULL\r\n\r\n\tPFN_RUN_ADDIN_FN\tm_pfnRunAddInFn;\t// ΪNULL\r\n\t//     йAddInܵ˵ַ˵һܡһΪ\r\n\t// һ20ַϣгʼλöԶ뵽߲˵\r\n    // Ӧ@ʼʱյֵΪ -(nAddInFnIndex + 1) ĵ֪ͨ\r\n    // ڶΪϸܣһ60ַմ\r\n\tLPTSTR\t\t\t\tm_szzAddInFnInfo;\r\n\r\n\tPFN_NOTIFY_LIB\t\tm_pfnNotify;\t\t// ΪNULL\r\n\r\n    // ģʱá\r\n\tPFN_SUPER_TEMPLATE\tm_pfnSuperTemplate;\t// ΪNULL\r\n\t//     йSuperTemplate˵ַ˵һSuperTemplate\r\n\t// һΪSuperTemplateƣһ30ַڶΪϸܣޣ\r\n\t// մ\r\n\tLPTSTR m_szzSuperTemplateInfo;\r\n\r\n\t// Ԥȶг\r\n\tINT\tm_nLibConstCount;\r\n\tPLIB_CONST_INFO m_pLibConst;\r\n\r\n\tLPTSTR m_szzDependFiles;\t// ΪNULL\r\n\t// Ҫ֧ļ\r\n}\r\nLIB_INFO, *PLIB_INFO;\r\n\r\n#define\tFUNCNAME_GET_LIB_INFO\t\t\"GetNewInf\"     // Ʊ̶(3.0ǰΪ\"GetLibInf\")\r\ntypedef PLIB_INFO (WINAPI *PFN_GET_LIB_INFO) ();\t// ȡֿ֧Ϣ\r\ntypedef INT (*PFN_ADD_IN_FUNC) ();\r\n\r\n/*////////////////////////////////////////////*/\r\n\r\n#define LIB_BMP_RESOURCE\t\"LIB_BITMAP\"\t// ֿ֧ṩͼԴ\r\n#define LIB_BMP_CX\t\t\t16\t\t\t\t\t// ÿһͼԴĿ\r\n#define LIB_BMP_CY\t\t\t13\t\t\t\t\t// ÿһͼԴĸ߶\r\n#define LIB_BMP_BKCOLOR\t\tRGB(255, 255, 255)\t// ͼԴĵɫ\r\n\r\n////////////////////////////\r\n\r\n#define\tWU_GET_WND_PTR\t\t\t(WM_APP + 2)\t// ڷǺֿ֧еĴ֧¼\r\n\r\n#endif\r\n\r\n"
  },
  {
    "path": "krnln/md5t.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <stdio.h>\r\n\r\n#pragma warning(disable:4996)\r\n\r\ntypedef struct {\r\n\tDWORD state[4];\t\t\t//encypted message\r\n\tDWORD count[2];\t\t\t//bits of plaintext\r\n\tunsigned char buffer[64];\r\n}MD5_CTX;\r\n\r\nvoid MD5Init(MD5_CTX *);\r\nvoid MD5Update(MD5_CTX *, unsigned char *, unsigned int);//ܵмǸ\r\nvoid MD5Final(MD5_CTX *);\r\n\r\n#define S11 7\r\n#define S12 12\r\n#define S13 17\r\n#define S14 22\r\n#define S21 5\r\n#define S22 9\r\n#define S23 14\r\n#define S24 20\r\n#define S31 4\r\n#define S32 11\r\n#define S33 16\r\n#define S34 23\r\n#define S41 6\r\n#define S42 10\r\n#define S43 15\r\n#define S44 21\r\n\r\n#define a esi\r\n#define b edi\r\n#define c edx\r\n#define d ebx\r\n#define tmp1 eax\r\n#define tmp2 ecx\r\n\r\n#define x(i) [x+4*i]\r\n\r\nstatic void MD5Transform (DWORD [4], unsigned char [64]);\r\n\r\nstatic unsigned char PADDING[64] = {\r\n\t0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r\n\t0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r\n\t0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\r\n};\r\n\r\n#define FF(a, b, c, d, x, s, ac) \\\r\n\t__asm mov tmp1,b \\\r\n\t__asm and tmp1,c \\\r\n\t__asm mov tmp2,b \\\r\n\t__asm not tmp2 \\\r\n\t__asm and tmp2,d \\\r\n\t__asm or tmp2,tmp1 \\\r\n\t__asm lea a,[tmp2+a+ac] \\\r\n\t__asm add a,x \\\r\n\t__asm rol a,s \\\r\n\t__asm add a,b \\\r\n\r\n#define GG(a, b, c, d, x, s, ac) \\\r\n\t__asm mov tmp1,b \\\r\n\t__asm and tmp1,d \\\r\n\t__asm mov tmp2,d \\\r\n\t__asm not tmp2 \\\r\n\t__asm and tmp2,c \\\r\n\t__asm or tmp2,tmp1 \\\r\n\t__asm lea a,[tmp2+a+ac] \\\r\n\t__asm add a,x \\\r\n\t__asm rol a,s \\\r\n\t__asm add a,b \r\n\r\n#define HH(a,b,c, d, x, s, ac) \\\r\n\t__asm mov tmp2,b \\\r\n\t__asm xor tmp2,c \\\r\n\t__asm xor tmp2,d \\\r\n\t__asm lea a,[tmp2+a+ac] \\\r\n\t__asm add a,x \\\r\n\t__asm rol a,s \\\r\n\t__asm add a,b\r\n\r\n#define II(a, b, c, d, x, s, ac) \\\r\n\t__asm mov tmp2,d \\\r\n\t__asm not tmp2 \\\r\n\t__asm or tmp2,b \\\r\n\t__asm xor tmp2,c \\\r\n\t__asm lea a,[tmp2+a+ac] \\\r\n\t__asm add a,x \\\r\n\t__asm rol a,s \\\r\n\t__asm add a,b\r\n\r\nvoid MD5Init (MD5_CTX *context)\r\n{\r\n\tcontext->count[0] = context->count[1] = 0;\r\n\tcontext->state[0] = 0x67452301;\r\n\tcontext->state[1] = 0xefcdab89;\r\n\tcontext->state[2] = 0x98badcfe;\r\n\tcontext->state[3] = 0x10325476;\r\n}\r\n\r\nvoid MD5Update (MD5_CTX *context, unsigned char *input, unsigned int inputLen)\r\n{\r\n\tunsigned int i, index, partLen;\r\n\r\n\tindex = (unsigned int)((context->count[0] >> 3) & 0x3F);\r\n\r\n\tif ((context->count[0] += ((DWORD)inputLen << 3)) < ((DWORD)inputLen << 3))\r\n\t\tcontext->count[1]++;\r\n\tcontext->count[1] += ((DWORD)inputLen >> 29);\r\n\r\n\tpartLen = 64 - index;\r\n\r\n\tif (inputLen >= partLen) {\r\n\t\tCopyMemory(&context->buffer[index],input, partLen);\r\n\t\tMD5Transform (context->state, context->buffer);\r\n\r\n\t\tfor (i = partLen; i + 63 < inputLen; i += 64){}\r\n\t\tindex = 0;\r\n\t}\r\n\telse\r\n\t\ti = 0;\r\n\r\n\t/* Buffer remaining input */\r\n\tCopyMemory(&context->buffer[index],&input[i],inputLen-i);\r\n}\r\n\r\nvoid MD5Final (MD5_CTX *context)\r\n{\r\n\tunsigned char bits[8];\r\n\tunsigned int index, padLen;\r\n\r\n\tCopyMemory(bits,context->count,8);\r\n\r\n\tindex = (unsigned int)((context->count[0] >> 3) & 0x3f);\r\n\tpadLen = (index < 56) ? (56 - index) : (120 - index);\r\n\tMD5Update (context, PADDING, padLen);\r\n\tMD5Update (context, bits, 8);\r\n}\r\n\r\nstatic void MD5Transform (DWORD state[4], unsigned char block[64])\r\n{\r\n\tDWORD x[16];\r\n\t__asm {\r\n\t\t//initial\r\n\t\t/*\t\tmov a,0x67452301\r\n\t\tmov b,0xefcdab89\r\n\t\tmov c,0x98badcfe\r\n\t\tmov d,0x10325476\r\n\t\t*/\r\n\t\tmov tmp1,DWORD PTR [state]\r\n\t\tmov a,DWORD PTR [tmp1]\r\n\t\tmov b,DWORD PTR [tmp1+4]\r\n\t\tmov c,DWORD PTR [tmp1+8]\r\n\t\tmov d,DWORD PTR [tmp1+12]\r\n\t\t//copy string from block to state\r\n\t\t//ǵAPIӰĴԼʵһڴ濽\r\n\t\tpush esi\r\n\t\t\tpush edi\r\n\r\n\t\t\txor ecx,ecx\r\n\t\t\tmov esi,dword ptr [block]\r\n\t\tlea edi,[x]\r\nROLL:\r\n\t\tmov eax,dword ptr [esi+ecx]\r\n\t\tmov dword ptr [edi+ecx],eax\r\n\t\t\tadd ecx,4\r\n\t\t\tcmp ecx,64\r\n\t\t\tjb  ROLL\r\n\r\n\t\t\tpop edi\r\n\t\t\tpop esi\r\n\t}\r\n\r\n\t/* Round 1 */\r\n\tFF(a, b, c, d, x( 0), S11, 0xd76aa478); /* 1 */\r\n\tFF(d, a, b, c, x( 1), S12, 0xe8c7b756); /* 2 */\r\n\tFF(c, d, a, b, x( 2), S13, 0x242070db); /* 3 */\r\n\tFF(b, c, d, a, x( 3), S14, 0xc1bdceee); /* 4 */\r\n\tFF(a, b, c, d, x( 4), S11, 0xf57c0faf); /* 5 */\r\n\tFF(d, a, b, c, x( 5), S12, 0x4787c62a); /* 6 */\r\n\tFF(c, d, a, b, x( 6), S13, 0xa8304613); /* 7 */\r\n\tFF(b, c, d, a, x( 7), S14, 0xfd469501); /* 8 */\r\n\tFF(a, b, c, d, x( 8), S11, 0x698098d8); /* 9 */\r\n\tFF(d, a, b, c, x( 9), S12, 0x8b44f7af); /* 10 */\r\n\tFF(c, d, a, b, x(10), S13, 0xffff5bb1); /* 11 */\r\n\tFF(b, c, d, a, x(11), S14, 0x895cd7be); /* 12 */\r\n\tFF(a, b, c, d, x(12), S11, 0x6b901122); /* 13 */\r\n\tFF(d, a, b, c, x(13), S12, 0xfd987193); /* 14 */\r\n\tFF(c, d, a, b, x(14), S13, 0xa679438e); /* 15 */\r\n\tFF(b, c, d, a, x(15), S14, 0x49b40821); /* 16 */\r\n\r\n\t/* Round 2 */\r\n\tGG (a, b, c, d, x( 1), S21, 0xf61e2562); /* 17 */\r\n\tGG (d, a, b, c, x( 6), S22, 0xc040b340); /* 18 */\r\n\tGG (c, d, a, b, x(11), S23, 0x265e5a51); /* 19 */\r\n\tGG (b, c, d, a, x( 0), S24, 0xe9b6c7aa); /* 20 */\r\n\tGG (a, b, c, d, x( 5), S21, 0xd62f105d); /* 21 */\r\n\tGG (d, a, b, c, x(10), S22,  0x2441453); /* 22 */\r\n\tGG (c, d, a, b, x(15), S23, 0xd8a1e681); /* 23 */\r\n\tGG (b, c, d, a, x( 4), S24, 0xe7d3fbc8); /* 24 */\r\n\tGG (a, b, c, d, x( 9), S21, 0x21e1cde6); /* 25 */\r\n\tGG (d, a, b, c, x(14), S22, 0xc33707d6); /* 26 */\r\n\tGG (c, d, a, b, x( 3), S23, 0xf4d50d87); /* 27 */\r\n\tGG (b, c, d, a, x( 8), S24, 0x455a14ed); /* 28 */\r\n\tGG (a, b, c, d, x(13), S21, 0xa9e3e905); /* 29 */\r\n\tGG (d, a, b, c, x( 2), S22, 0xfcefa3f8); /* 30 */\r\n\tGG (c, d, a, b, x( 7), S23, 0x676f02d9); /* 31 */\r\n\tGG (b, c, d, a, x(12), S24, 0x8d2a4c8a); /* 32 */\r\n\r\n\t/* Round 3 */\r\n\tHH (a, b, c, d, x( 5), S31, 0xfffa3942); /* 33 */\r\n\tHH (d, a, b, c, x( 8), S32, 0x8771f681); /* 34 */\r\n\tHH (c, d, a, b, x(11), S33, 0x6d9d6122); /* 35 */\r\n\tHH (b, c, d, a, x(14), S34, 0xfde5380c); /* 36 */\r\n\tHH (a, b, c, d, x( 1), S31, 0xa4beea44); /* 37 */\r\n\tHH (d, a, b, c, x( 4), S32, 0x4bdecfa9); /* 38 */\r\n\tHH (c, d, a, b, x( 7), S33, 0xf6bb4b60); /* 39 */\r\n\tHH (b, c, d, a, x(10), S34, 0xbebfbc70); /* 40 */\r\n\tHH (a, b, c, d, x(13), S31, 0x289b7ec6); /* 41 */\r\n\tHH (d, a, b, c, x( 0), S32, 0xeaa127fa); /* 42 */\r\n\tHH (c, d, a, b, x( 3), S33, 0xd4ef3085); /* 43 */\r\n\tHH (b, c, d, a, x( 6), S34,  0x4881d05); /* 44 */\r\n\tHH (a, b, c, d, x( 9), S31, 0xd9d4d039); /* 45 */\r\n\tHH (d, a, b, c, x(12), S32, 0xe6db99e5); /* 46 */\r\n\tHH (c, d, a, b, x(15), S33, 0x1fa27cf8); /* 47 */\r\n\tHH (b, c, d, a, x( 2), S34, 0xc4ac5665); /* 48 */\r\n\r\n\t/* Round 4 */\r\n\tII (a, b, c, d, x( 0), S41, 0xf4292244); /* 49 */\r\n\tII (d, a, b, c, x( 7), S42, 0x432aff97); /* 50 */\r\n\tII (c, d, a, b, x(14), S43, 0xab9423a7); /* 51 */\r\n\tII (b, c, d, a, x( 5), S44, 0xfc93a039); /* 52 */\r\n\tII (a, b, c, d, x(12), S41, 0x655b59c3); /* 53 */\r\n\tII (d, a, b, c, x( 3), S42, 0x8f0ccc92); /* 54 */\r\n\tII (c, d, a, b, x(10), S43, 0xffeff47d); /* 55 */\r\n\tII (b, c, d, a, x( 1), S44, 0x85845dd1); /* 56 */\r\n\tII (a, b, c, d, x( 8), S41, 0x6fa87e4f); /* 57 */\r\n\tII (d, a, b, c, x(15), S42, 0xfe2ce6e0); /* 58 */\r\n\tII (c, d, a, b, x( 6), S43, 0xa3014314); /* 59 */\r\n\tII (b, c, d, a, x(13), S44, 0x4e0811a1); /* 60 */\r\n\tII (a, b, c, d, x( 4), S41, 0xf7537e82); /* 61 */\r\n\tII (d, a, b, c, x(11), S42, 0xbd3af235); /* 62 */\r\n\tII (c, d, a, b, x( 2), S43, 0x2ad7d2bb); /* 63 */\r\n\tII (b, c, d, a, x( 9), S44, 0xeb86d391); /* 64 */\r\n\r\n\t__asm {\r\n\t\tmov tmp1,DWORD PTR [state]\r\n\t\tadd DWORD PTR [tmp1],a\r\n\t\t\tadd DWORD PTR [tmp1+4],b\r\n\t\t\tadd DWORD PTR [tmp1+8],c\r\n\t\t\tadd DWORD PTR [tmp1+12],d\r\n\t}\r\n}\r\n\r\n\r\n/********************************************************\r\n жļMD5Уֵ\r\n m_filename\tļ\r\nOrgin\t\tMD5Уֵ\r\n TRUE or FALSE\r\n********************************************************/\r\n\r\nBOOL CalcMD5(LPCTSTR m_filename,unsigned char Orgin[16])\r\n{\r\n\tMD5_CTX context;\r\n\tFILE* ff;\r\n\tunsigned char *rbuff = NULL;\r\n\tDWORD dwSize;\r\n\tDWORD rCount;\r\n\r\n\tdwSize=64;\r\n\trCount=0;\r\n\tif(!(ff=fopen(m_filename,\"rb\")))return false;\r\n\r\n\tMD5Init(&context);\r\n\twhile( !feof( ff ) )\r\n\t{\r\n\t\trbuff=new unsigned char[dwSize];\r\n\t\trCount = fread(rbuff,sizeof(char),dwSize,ff);\r\n\t\tMD5Update(&context, rbuff,rCount);\r\n\t}\r\n\tMD5Final(&context);\r\n\tif (rbuff)\r\n\t\tdelete[] rbuff;\r\n\tfclose(ff);\r\n\tmemcpy(Orgin,(unsigned char*)context.state,16);//ؼܽڵ\r\n\treturn TRUE;\r\n}\r\n\r\n\r\nBOOL GetMD5(char* pMd5String,char* strPath)\r\n{\r\n\tunsigned char O[16];\r\n\tif(!CalcMD5(strPath,O))\r\n\t\treturn FALSE;\r\n\r\n\twsprintf(pMd5String,\"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\",\r\n\t\tO[0],O[1],O[2],O[3],O[4],O[5],O[6],O[7],O[8],O[9],O[10],O[11],O[12],O[13],O[14],O[15]);\r\n\treturn TRUE;\r\n}\r\n\r\n\r\nBOOL GetBufMD5(unsigned char* pMd5String,unsigned char* rbuff,DWORD BufSize)\r\n{\r\n\tMD5_CTX context;\r\n\tunsigned char O[16];\r\n\r\n\tMD5Init(&context);\r\n\tMD5Update(&context, rbuff, BufSize);\r\n\tMD5Final(&context);\r\n\r\n\tmemcpy(O, (unsigned char*)context.state, 16);\r\n\twsprintf((char*)pMd5String,\"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\",\r\n\t\tO[0],O[1],O[2],O[3],O[4],O[5],O[6],O[7],O[8],O[9],O[10],O[11],O[12],O[13],O[14],O[15]);\r\n\treturn TRUE;\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "krnln/md5t.h",
    "content": "BOOL GetMD5(char* pMd5String,char* strPath);\r\n\r\nBOOL GetBufMD5(unsigned char* pMd5String,unsigned char* rbuff,DWORD BufSize);"
  },
  {
    "path": "krnln/mem.cpp",
    "content": "// Mem.cpp: implementation of the CFreqMem class.\r\n//\r\n//////////////////////////////////////////////////////////////////////\r\n\r\n#include \"StdAfx.h\"\r\n#include <TCHAR.H>\r\n#include \"mem.h\"\r\n\r\nstatic HANDLE s_hHeap = NULL;\r\n\r\n//////////////////////////////////////////////////////////////////////\r\n// Construction/Destruction\r\n//////////////////////////////////////////////////////////////////////\r\n\r\nstatic BOOL s_blAllowUseBuf = FALSE;\r\n\t// Ϊ٣򻺳ֹܱ CVarManger бԶá\r\n\r\nBOOL CFreqMem::IsAllowUseBuf ()\r\n{\r\n\treturn s_blAllowUseBuf;\r\n}\r\n\r\nvoid CFreqMem::AllowUseBuf (BOOL blAllow)\r\n{\r\n\ts_blAllowUseBuf = blAllow;\r\n}\r\n\r\n//////////////////////////////////////////////////////////////////////\r\n\r\nMEM_BUF _m_membuf;\t// !!! ֱô˱\r\n\r\nCFreqMem::CFreqMem ()\r\n{\r\n\tm_pMemBuf = &_m_membuf;\r\n\tm_pData = NULL;\r\n\tm_nAllocedSize = m_nSize = 0;\r\n}\r\n\r\n// IMPLEMENT_SERIAL (CFreqMem, CObject, 1)\r\n\r\nLPBYTE CFreqMem::Alloc (INT nSize)\r\n{\r\n//\tASSERT (nSize > 0);\r\n\r\n\tif (m_pData != NULL)\r\n\t{\r\n//\t\tASSERT (m_nAllocedSize > 0);\r\n\t\treturn Realloc (nSize);\r\n\t}\r\n\r\n\tif (nSize == 0)  return NULL;\r\n\r\n\tif (s_blAllowUseBuf == TRUE && nSize <= PAGE_SIZE &&\r\n\t\t\tm_pMemBuf->m_nPageUsedCount < PAGE_COUNT)\r\n\t{\r\n\t\tINT n = FindByte (m_pMemBuf->m_btaryUsed, PAGE_COUNT, 0);\r\n//\t\tASSERT (n != -1);\r\n\r\n\t\tm_pMemBuf->m_btaryUsed [n] = 1;\r\n\t\tm_pMemBuf->m_nPageUsedCount++;\r\n\r\n\t\tm_nAllocedSize = PAGE_SIZE;\r\n\t\tm_pData = m_pMemBuf->m_buf + n * PAGE_SIZE;\r\n\t\tm_nSize = nSize;\r\n\t\treturn m_pData;\r\n\t}\r\n\r\n\tif (s_hHeap == NULL)\r\n\t\ts_hHeap = ::GetProcessHeap ();\r\n\r\n\tm_pData = (LPBYTE)::HeapAlloc (s_hHeap, 0, nSize + FM_GROW_SIZE);\r\n\tif (m_pData == NULL)\r\n\t{\r\n\t\tm_nAllocedSize = 0;\r\n\t\tm_nSize = 0;\r\n\t}\r\n\telse\r\n\t{\r\n\t\tm_nAllocedSize = nSize + FM_GROW_SIZE;\r\n\t\tm_nSize = nSize;\r\n\t}\r\n\treturn m_pData;\r\n}\r\n\r\nLPBYTE CFreqMem::Realloc (INT nSize)\r\n{\r\n//\tASSERT (nSize >= 0);\r\n\tif (nSize == 0)\r\n\t{\r\n\t\tFree ();\r\n\t\treturn NULL;\r\n\t}\r\n\tif (m_pData == NULL)\r\n\t{\r\n//\t\tASSERT (m_nAllocedSize == 0);\r\n\t\treturn Alloc (nSize);\r\n\t}\r\n\r\n\tBOOL blIsAllocBuf = m_pData >= m_pMemBuf->m_buf &&\r\n\t\t\tm_pData < m_pMemBuf->m_buf + PAGE_BUF_SIZE;\r\n\r\n\tif (m_nAllocedSize >= nSize && (blIsAllocBuf == TRUE ||\r\n\t\t\tm_nAllocedSize - nSize <= FM_MAX_FREE_BUF_SIZE + FM_GROW_SIZE))\r\n\t{\r\n\t\tm_nSize = nSize;\r\n\t\treturn m_pData;\r\n\t}\r\n\r\n\tif (s_hHeap == NULL)\r\n\t\ts_hHeap = ::GetProcessHeap ();\r\n\r\n\tLPBYTE pNew;\r\n\tif (blIsAllocBuf == TRUE)\r\n\t{\r\n\t\tpNew = (LPBYTE)::HeapAlloc (s_hHeap, 0, nSize + FM_GROW_SIZE);\r\n\t\tif (pNew != NULL)\r\n\t\t{\r\n\t\t\tCopyMemory (pNew, m_pData, min (nSize, m_nSize));\r\n\t\t\t_Free (m_pData);\r\n\t\t\tm_pData = pNew;\r\n\t\t\tm_nAllocedSize = nSize + FM_GROW_SIZE;\r\n\t\t\tm_nSize = nSize;\r\n\t\t\treturn m_pData;\r\n\t\t}\r\n\t\telse\r\n\t\t\treturn NULL;\r\n\t}\r\n\r\n\tpNew = (LPBYTE)::HeapReAlloc (s_hHeap, 0, m_pData, nSize + FM_GROW_SIZE);\r\n\tif (pNew != NULL)\r\n\t{\r\n\t\tm_pData = pNew;\r\n\t\tm_nAllocedSize = nSize + FM_GROW_SIZE;\r\n\t\tm_nSize = nSize;\r\n\t\treturn m_pData;\r\n\t}\r\n\telse\r\n\t\treturn NULL;\r\n}\r\n\r\nvoid CFreqMem::Free ()\r\n{\r\n\t_Free (m_pData);\r\n\r\n\tm_pData = NULL;\r\n\tm_nAllocedSize = m_nSize = 0;\r\n}\r\n\r\nvoid CFreqMem::_Free (LPBYTE pData)\r\n{\r\n\tif (pData == NULL)  return;\r\n\r\n\tif (pData < m_pMemBuf->m_buf || pData >= m_pMemBuf->m_buf + PAGE_BUF_SIZE)\r\n\t{\r\n\t\tif (s_hHeap == NULL)\r\n\t\t\ts_hHeap = ::GetProcessHeap ();\r\n//\t\tVERIFY (::HeapFree (s_hHeap, NULL, pData));\r\n\t\t::HeapFree (s_hHeap, NULL, pData);\r\n\t}\r\n\telse\r\n\t{\r\n//\t\tASSERT ((pData - m_pMemBuf->m_buf) % PAGE_SIZE == 0 &&\r\n//\t\t\t\tm_pMemBuf->m_btaryUsed [(pData - m_pMemBuf->m_buf) / PAGE_SIZE] == 1 &&\r\n//\t\t\t\tm_pMemBuf->m_nPageUsedCount > 0);\r\n\t\tm_pMemBuf->m_btaryUsed [(pData - m_pMemBuf->m_buf) / PAGE_SIZE] = 0;\r\n\t\tm_pMemBuf->m_nPageUsedCount--;\r\n\t}\r\n}\r\n\r\n///////////////////////////////////////////\r\n\r\nvoid CFreqMem::AddFloat\t(FLOAT flt)\r\n{\r\n\tif (m_nAllocedSize - m_nSize >= sizeof (FLOAT))\r\n\t{\r\n\t\t*(FLOAT*)(m_pData + m_nSize) = flt;\r\n\t\tm_nSize += sizeof (FLOAT);\r\n\t}\r\n\telse\r\n\t\tAppend ((LPBYTE)&flt, sizeof (flt));\r\n}\r\n\r\nvoid CFreqMem::AddDouble (DOUBLE db)\r\n{\r\n\tif (m_nAllocedSize - m_nSize >= sizeof (DOUBLE))\r\n\t{\r\n\t\t*(DOUBLE*)(m_pData + m_nSize) = db;\r\n\t\tm_nSize += sizeof (DOUBLE);\r\n\t}\r\n\telse\r\n\t\tAppend ((LPBYTE)&db, sizeof (DOUBLE));\r\n}\r\n\r\nvoid CFreqMem::AddDWord (DWORD dw)\r\n{\r\n\tif (m_nAllocedSize - m_nSize >= sizeof (DWORD))\r\n\t{\r\n\t\t*(DWORD*)(m_pData + m_nSize) = dw;\r\n\t\tm_nSize += sizeof (DWORD);\r\n\t}\r\n\telse\r\n\t\tAppend ((LPBYTE)&dw, sizeof (DWORD));\r\n}\r\n\r\nvoid CFreqMem::AddInt64 (INT64 n64)\r\n{\r\n\tif (m_nAllocedSize - m_nSize >= sizeof (INT64))\r\n\t{\r\n\t\t*(INT64*)(m_pData + m_nSize) = n64;\r\n\t\tm_nSize += sizeof (INT64);\r\n\t}\r\n\telse\r\n\t\tAppend ((LPBYTE)&n64, sizeof (INT64));\r\n}\r\n\r\nvoid CFreqMem::AddInt (INT n)\r\n{\r\n\tif (m_nAllocedSize - m_nSize >= sizeof (INT))\r\n\t{\r\n\t\t*(INT*)(m_pData + m_nSize) = n;\r\n\t\tm_nSize += sizeof (INT);\r\n\t}\r\n\telse\r\n\t\tAppend ((LPBYTE)&n, sizeof (INT));\r\n}\r\n\r\nvoid CFreqMem::AddWord (WORD w)\r\n{\r\n\tif (m_nAllocedSize - m_nSize >= sizeof (WORD))\r\n\t{\r\n\t\t*(WORD*)(m_pData + m_nSize) = w;\r\n\t\tm_nSize += sizeof (WORD);\r\n\t}\r\n\telse\r\n\t\tAppend ((LPBYTE)&w, sizeof (WORD));\r\n}\r\n\r\nvoid CFreqMem::AddShort (SHORT sht)\r\n{\r\n\tif (m_nAllocedSize - m_nSize >= sizeof (SHORT))\r\n\t{\r\n\t\t*(SHORT*)(m_pData + m_nSize) = sht;\r\n\t\tm_nSize += sizeof (SHORT);\r\n\t}\r\n\telse\r\n\t\tAppend ((LPBYTE)&sht, sizeof (SHORT));\r\n}\r\n\r\nvoid CFreqMem::AddByte (BYTE bt)\r\n{\r\n\tif (m_nAllocedSize > m_nSize)\r\n\t\tm_pData [m_nSize++] = bt;\r\n\telse\r\n\t\tAppend ((LPBYTE)&bt, sizeof (BYTE));\r\n}\r\n\r\nvoid CFreqMem::AddBool (BOOL bl)\r\n{\r\n\tif (m_nAllocedSize - m_nSize >= sizeof (BOOL))\r\n\t{\r\n\t\t*(BOOL*)(m_pData + m_nSize) = bl;\r\n\t\tm_nSize += sizeof (BOOL);\r\n\t}\r\n\telse\r\n\t\tAppend ((LPBYTE)&bl, sizeof (BOOL));\r\n}\r\n\r\nvoid CFreqMem::AddStr (LPTSTR pstr)\r\n{\r\n\tif (IsEmptyStr (pstr) == TRUE)\r\n\t\tAddByte (0);\r\n\telse\r\n\t\tAppend ((LPBYTE)pstr, tcsallbytes (pstr));\r\n}\r\n\r\nvoid CFreqMem::AddText (LPTSTR pstr)\r\n{\r\n\tif (IsEmptyStr (pstr) == FALSE)\r\n\t\tAppend ((LPBYTE)pstr, tcsbytes (pstr));\r\n}\r\n\r\n///////////////////////////////////////////\r\n\r\nBOOL CFreqMem::EmptyAndRqSpace (INT nSize)\r\n{\r\n//\tASSERT (nSize >= 0);\r\n\tif (nSize <= 0)\r\n\t\tnSize = 0;\r\n\r\n\tif (Realloc (nSize) != NULL)\r\n\t{\r\n\t\tm_nSize = 0;\r\n\t\treturn TRUE;\r\n\t}\r\n\telse\r\n\t\treturn FALSE;\r\n}\r\n\r\n// !! 뱣֤ı MEM ׵ַָ롣\r\nvoid CFreqMem::XchgMem (CFreqMem& mem)\r\n{\r\n\tPMEM_BUF pMemBuf = m_pMemBuf;\r\n\tm_pMemBuf = mem.m_pMemBuf;\r\n\tmem.m_pMemBuf = pMemBuf;\r\n\r\n\tLPBYTE p = m_pData;\r\n\tm_pData = mem.m_pData;\r\n\tmem.m_pData = p;\r\n\r\n\tINT n = m_nAllocedSize;\r\n\tm_nAllocedSize = mem.m_nAllocedSize;\r\n\tmem.m_nAllocedSize = n;\r\n\r\n\tn = m_nSize;\r\n\tm_nSize = mem.m_nSize;\r\n\tmem.m_nSize = n;\r\n}\r\n/*\r\nvoid CFreqMem::SaveEmpty (CArchive& ar)\r\n{\r\n\tASSERT (ar.IsStoring ());\r\n\tar << (INT)0;\r\n}\r\n\r\nvoid CFreqMem::Serialize (CArchive& ar)\r\n{\r\n\tif (ar.IsStoring())\r\n\t{\r\n\t\tar << m_nSize;\r\n\t\tif (m_nSize > 0)\r\n\t\t\tar.Write (m_pData, m_nSize);\r\n\t}\r\n\telse\r\n\t{\r\n\t\tFree ();\r\n\r\n\t\tINT nSize;\r\n\t\tar >> nSize;\r\n\t\tif (nSize > 0)\r\n\t\t{\r\n\t\t\tif (Alloc (nSize) != NULL)\r\n\t\t\t\tar.Read (m_pData, nSize);\r\n\t\t\telse\r\n\t\t\t\tAfxThrowArchiveException (CArchiveException::generic);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nINT CFreqMem::ReadFile (CString& strFileName, INT nReadLength)\r\n{\r\n\tTRY\r\n\t{\r\n\t\tCFile file;\r\n\t\tif (file.Open (strFileName, CFile::modeRead | CFile::shareDenyWrite) == TRUE)\r\n\t\t{\r\n\t\t\tif (nReadLength == -1)\r\n\t\t\t\tnReadLength = file.GetLength ();\r\n\r\n\t\t\tif (nReadLength > 0)\r\n\t\t\t{\r\n\t\t\t\tLPBYTE p = Alloc (nReadLength);\r\n\t\t\t\tif (p != NULL)\r\n\t\t\t\t{\r\n\t\t\t\t\tINT n = file.Read (p, nReadLength);\r\n\t\t\t\t\tif (n != nReadLength)\r\n\t\t\t\t\t\tRealloc (n);\r\n\t\t\t\t\treturn n;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tFree ();\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tEND_TRY\r\n\r\n\tFree ();\r\n\treturn -1;\r\n}\r\n\r\nBOOL CFreqMem::WriteFile (CString& strFileName, INT nWriteLength)\r\n{\r\n\tASSERT (strFileName.IsEmpty () == FALSE);\r\n\r\n\tTRY\r\n\t{\r\n\t\tINT nSize = GetSize ();\r\n\t\tif (nWriteLength == -1)\r\n\t\t\tnWriteLength = nSize;\r\n\t\telse\r\n\t\t\tnWriteLength = min (nWriteLength, nSize);\r\n\r\n\t\tCFile file;\r\n\t\tif (file.Open (strFileName, CFile::modeCreate | CFile::modeWrite |\r\n\t\t\t\tCFile::shareExclusive) == TRUE)\r\n\t\t{\r\n\t\t\tif (nWriteLength > 0)\r\n\t\t\t\tfile.Write (GetPtr (), nWriteLength);\r\n\r\n\t\t\tfile.Close ();\r\n\t\t\treturn TRUE;\r\n\t\t}\r\n\t}\r\n\tEND_TRY\r\n\r\n\treturn FALSE;\r\n}\r\n*/\r\n////////////////////////////\r\n\r\n// if pData == NULL, insert blank data.\r\nBOOL CFreqMem::Insert (INT nOffset, LPBYTE pData, INT nSize)\r\n{\r\n//\tASSERT (nOffset >= 0 && nSize >= 0);\r\n\tif (nSize == 0)  return TRUE;\r\n\tif (nOffset == m_nSize)  return Append (pData, nSize);\r\n\r\n\tINT nOldSize = m_nSize;\r\n\tLPBYTE pMem = Realloc (max (nOffset, nOldSize) + nSize);\r\n\tif (pMem == NULL)  return FALSE;\r\n\r\n\tLPBYTE pInsert = pMem + nOffset;\r\n\tif (nOffset < nOldSize)\r\n\t\tMoveMem (pInsert + nSize, pInsert, nOldSize - nOffset);\r\n\t\r\n\tif (pData != NULL)\r\n\t{\r\n//\t\tASSERT (AfxIsValidAddress (pData, nSize));\r\n\t\tMoveMem (pInsert, pData, nSize);\r\n\t}\r\n\telse\r\n\t\tZeroMem (pInsert, nSize);\r\n\r\n\treturn TRUE;\r\n}\r\n\r\nBOOL CFreqMem::AppendSpace (INT nSpaceCount)\r\n{\r\n//\tASSERT (nSpaceCount >= 0);\r\n\r\n\tif (Append (NULL, nSpaceCount) == TRUE)\r\n\t{\r\n\t\tif (nSpaceCount > 0)\r\n\t\t\tmemset (GetPtr () + GetSize () - nSpaceCount, ' ', nSpaceCount);\r\n\t\treturn TRUE;\r\n\t}\r\n\r\n\treturn FALSE;\r\n}\r\n\r\n// if pData == NULL, append blank data.\r\nBOOL CFreqMem::Append (LPBYTE pData, INT nSize)\r\n{\r\n//\tASSERT (nSize >= 0);\r\n\tif (nSize <= 0)  return TRUE;\r\n\r\n\tINT nOldSize = m_nSize;\r\n\tLPBYTE pMem = Realloc (nOldSize + nSize);\r\n\tif (pMem == NULL)  return FALSE;\r\n\r\n\tLPBYTE pAppend = pMem + nOldSize;\r\n\tif (pData != NULL)\r\n\t\tMoveMem (pAppend, pData, nSize);\r\n\telse\r\n\t\tZeroMem (pAppend, nSize);\r\n\r\n\treturn TRUE;\r\n}\r\n\r\n// if pReplaceData == NULL, replace blank data.\r\nBOOL CFreqMem::Replace (INT nOffset, INT nSize, LPBYTE pReplaceData, INT nReplaceSize)\r\n{\r\n//\tASSERT (nOffset >= 0 && nSize >= 0 && nReplaceSize >= 0);\r\n\r\n\tINT nOldSize = m_nSize;\r\n\tif (nSize == 0 || nOffset >= nOldSize)\r\n\t\treturn Insert (nOffset, pReplaceData, nReplaceSize);\r\n\tif (nReplaceSize == 0)  \r\n\t\treturn Remove (nOffset, nSize);\r\n\r\n\tif (nSize > nOldSize - nOffset)  nSize = nOldSize - nOffset;\r\n\r\n\tLPBYTE pReplaceAt;\r\n\tINT nMoveSize = nOldSize - nOffset - nSize;\r\n\tif (nReplaceSize > nSize)\r\n\t{\r\n\t\tpReplaceAt = Realloc (nOldSize + nReplaceSize - nSize);\r\n\t\tif (pReplaceAt == NULL)  return FALSE;\r\n\t\tpReplaceAt += nOffset;\r\n\r\n\t\tif (nMoveSize > 0)\r\n\t\t\tMoveMem (pReplaceAt + nReplaceSize, pReplaceAt + nSize, nMoveSize);\r\n\t}\r\n\telse\r\n\t{\r\n\t\tpReplaceAt = m_pData;\r\n//\t\tASSERT (pReplaceAt != NULL);\r\n\t\tpReplaceAt += nOffset;\r\n\r\n\t\tif (nReplaceSize < nSize)\r\n\t\t{\r\n\t\t\tif (nMoveSize > 0)\r\n\t\t\t\tMoveMem (pReplaceAt + nReplaceSize, pReplaceAt + nSize, nMoveSize);\r\n\r\n\t\t\tpReplaceAt = Realloc (nOldSize - (nSize - nReplaceSize));\r\n\t\t//\tASSERT (pReplaceAt != NULL);\r\n\t\t\tif (pReplaceAt == NULL)  return FALSE;  // data already be changed!\r\n\t\t\tpReplaceAt += nOffset;\r\n\t\t}\r\n\t}\r\n\r\n\tif (pReplaceData != NULL)\r\n\t{\r\n//\t\tASSERT (AfxIsValidAddress (pReplaceData, nReplaceSize, FALSE));\r\n\t\tMoveMem (pReplaceAt, pReplaceData, nReplaceSize);\r\n\t}\r\n\telse\r\n\t\tZeroMem (pReplaceAt, nReplaceSize);\r\n\treturn TRUE;\r\n}\r\n\r\n// if nOffset == -1, delete data from tail.\r\nBOOL CFreqMem::Remove (INT nOffset, INT nSize)\r\n{\r\n\tif (nOffset == -1)\r\n\t{\r\n\t\tINT nNewSize = max (0, m_nSize - nSize);\r\n\t\tif (nNewSize == 0)\r\n\t\t{\r\n\t\t\tFree ();\r\n\t\t\treturn TRUE;\r\n\t\t}\r\n\t\telse\r\n\t\t\treturn Realloc (nNewSize) != NULL;\r\n\t}\r\n\r\n\tif (nSize == 0)  return TRUE;\r\n\tif (m_pData == NULL || nOffset >= m_nSize)  return FALSE;\r\n\t\r\n\tLPBYTE pRemoveAt = m_pData + nOffset;\r\n\t\r\n\tINT nRemoveSize;\r\n\tif (nSize < m_nSize - nOffset)\r\n\t{\r\n\t\tnRemoveSize = nSize;\r\n\t\tMoveMem (pRemoveAt, pRemoveAt + nRemoveSize, m_nSize - nOffset - nRemoveSize);\r\n\t}\r\n\telse\r\n\t\tnRemoveSize = m_nSize - nOffset;\r\n\r\n\tif (m_nSize == nRemoveSize)\r\n\t{\r\n\t\tFree ();\r\n\t\treturn TRUE;\r\n\t}\r\n\telse\r\n\t\treturn Realloc (m_nSize - nRemoveSize) != NULL;\r\n}\r\n\r\n//////////////////////////////////////////\r\n\r\nBOOL CMyDWordArray::SetSize (INT nNewSize)\r\n{\r\n\tif (nNewSize == 0)\r\n\t{\r\n\t\tFree ();\r\n\t}\r\n\telse\r\n\t{\r\n\t\tnNewSize *= sizeof (DWORD);\r\n\t\tLPBYTE p = Alloc (nNewSize);\r\n\t\tif (p != NULL)\r\n\t\t\tZeroMem (p, nNewSize);\r\n\t\telse\r\n\t\t\treturn FALSE;\r\n\t}\r\n\r\n\treturn TRUE;\r\n}\r\n\r\n///////////////////////////////////////////////////////////////////////////////\r\n\r\nINT FindInt (LPINT pnTable, INT nCount, INT nFind)\r\n{\r\n\treturn FindDWord ((LPDWORD)pnTable, nCount, (DWORD)nFind);\r\n}\r\n\r\nBOOL IsEmptyStr (LPTSTR szStr)\r\n{\r\n\treturn szStr == NULL || *szStr == 0;\r\n}\r\n\r\nvoid MoveMem (LPBYTE pDest, LPBYTE pSrc, DWORD dwLength)\r\n{\r\n\tif (dwLength == 0)\r\n\t\treturn;\r\n\telse if (dwLength == 1)\r\n\t\t*pDest = *pSrc;\r\n\telse if (dwLength == sizeof (WORD))\r\n\t\t*(LPWORD)pDest = *(LPWORD)pSrc;\r\n\telse if (dwLength == sizeof (DWORD))\r\n\t\t*(LPDWORD)pDest = *(LPDWORD)pSrc;\r\n\telse\r\n\t\t::MoveMemory (pDest, pSrc, dwLength);\r\n}\r\n\r\nvoid CopyMem (LPBYTE pDest, LPBYTE pSrc, DWORD dwLength)\r\n{\r\n\tif (dwLength == 0)\r\n\t\treturn;\r\n\telse if (dwLength == 1)\r\n\t\t*pDest = *pSrc;\r\n\telse if (dwLength == sizeof (WORD))\r\n\t\t*(LPWORD)pDest = *(LPWORD)pSrc;\r\n\telse if (dwLength == sizeof (DWORD))\r\n\t\t*(LPDWORD)pDest = *(LPDWORD)pSrc;\r\n\telse\r\n\t\t::CopyMemory (pDest, pSrc, dwLength);\r\n}\r\n\r\nvoid ZeroMem (LPBYTE pDest, DWORD dwLength)\r\n{\r\n\tif (dwLength == 0)\r\n\t\treturn;\r\n\telse if (dwLength == 1)\r\n\t\t*pDest = 0;\r\n\telse if (dwLength == sizeof (WORD))\r\n\t\t*(LPWORD)pDest = 0;\r\n\telse if (dwLength == sizeof (DWORD))\r\n\t\t*(LPDWORD)pDest = 0;\r\n\telse\r\n\t\t::ZeroMemory (pDest, dwLength);\r\n}\r\n\r\nINT tcsallbytes (LPTSTR pstr)\r\n{\r\n\treturn (_tcslen (pstr) + 1) * sizeof (TCHAR);\r\n/*\r\n\tif (*pstr == '\\0')  return 1;\r\n\r\n\tDWORD dw;\r\n\r\n\t_asm\r\n\t{\r\n\t\tpush\teax\r\n\t\tpush\tebx\r\n\t\tpush\tesi\r\n\r\n\t\tmov\t\tesi, dword ptr [pstr]\r\n\t\tmov\t\tebx, esi\r\n\r\n\t\tcld\r\n\tl0:\r\n\t\tlodsb\r\n\t\tor\t\tal, al\r\n\t\tjne\t\tl0\r\n\r\n\t\tsub\t\tesi, ebx\r\n\t\tmov\t\tdw, esi\r\n\r\n\t\tpop\t\tesi\r\n\t\tpop\t\tebx\r\n\t\tpop\t\teax\r\n\t}\r\n\r\n\treturn (INT)dw; */\r\n}\r\n\r\nINT tcsbytes (LPTSTR pstr)\r\n{\r\n\treturn _tcslen (pstr) * sizeof (TCHAR);\r\n/*\r\n\tif (pstr == NULL || *pstr == '\\0')  return 0;\r\n\r\n\tDWORD dw;\r\n\r\n\t_asm\r\n\t{\r\n\t\tpush\teax\r\n\t\tpush\tebx\r\n\t\tpush\tesi\r\n\r\n\t\tmov\t\tesi, dword ptr [pstr]\r\n\t\tmov\t\tebx, esi\r\n\r\n\t\tcld\r\n\tl0:\r\n\t\tlodsb\r\n\t\tor\t\tal, al\r\n\t\tjne\t\tl0\r\n\r\n\t\tdec\t\tesi\r\n\t\tsub\t\tesi, ebx\r\n\t\tmov\t\tdw, esi\r\n\r\n\t\tpop\t\tesi\r\n\t\tpop\t\tebx\r\n\t\tpop\t\teax\r\n\t}\r\n\r\n\treturn (INT)dw; */\r\n}\r\n\r\n// صֽƫ\r\nINT FindByte (LPBYTE pTable, INT count, BYTE btFind)\r\n{ \r\n\tINT nRetOffset = -1;\r\n\r\n\tif (count > 0)\r\n\t{\r\n//\t\tASSERT (pTable != NULL);\r\n\t\tif (*pTable == btFind)  return 0;\r\n\r\n\t\t__asm\r\n\t\t{\r\n\t\t\tpush edi\r\n\t\t\tpush eax\r\n\t\t\tpush ecx\r\n\r\n\t\t\tmov al, btFind\r\n\t\t\tmov ecx, count\r\n\t\t\tpush ecx\r\n\t\t\tmov edi, dword ptr [pTable]\r\n\r\n\t        cld\r\n\t\t\trepne scasb\r\n\t\t\tpop eax\r\n\t\t\tjnz quit\r\n\r\n\t\t\tinc ecx\r\n\t\t\tsub eax, ecx\r\n\t\t\tmov dword ptr [nRetOffset], eax\r\nquit:\r\n\t\t\tpop ecx\r\n\t\t\tpop eax\r\n\t\t\tpop edi\r\n\t\t}\r\n\t}\r\n\r\n\treturn nRetOffset;\r\n}\r\n\r\n// صĲֽDWORDƫ\r\nINT FindDWord (LPDWORD pdwTable, INT count, DWORD dwFind)\r\n{ \r\n\tINT nRetOffset = -1;\r\n\r\n\tif (count > 0)\r\n\t{\r\n\t\tif (*pdwTable == dwFind)  return 0;\r\n\r\n\t//\tASSERT (pdwTable != NULL);\r\n\t\t__asm\r\n\t\t{\r\n\t\t\tpush edi\r\n\t\t\tpush eax\r\n\t\t\tpush ecx\r\n\r\n\t\t\tmov eax, dwFind\r\n\t\t\tmov ecx, count\r\n\t\t\tpush ecx\r\n\t\t\tmov edi, dword ptr [pdwTable]\r\n\r\n\t        cld\r\n\t\t\trepne scasd\r\n\t\t\tpop eax\r\n\t\t\tjnz quit\r\n\r\n\t\t\tinc ecx\r\n\t\t\tsub eax, ecx\r\n\t\t\tmov dword ptr [nRetOffset], eax\r\nquit:\r\n\t\t\tpop ecx\r\n\t\t\tpop eax\r\n\t\t\tpop edi\r\n\t\t}\r\n\t}\r\n\r\n\treturn nRetOffset;\r\n}\r\n\r\n// صĲֽWORDƫ\r\nINT FindWord (LPWORD pwTable, INT count, WORD wFind)\r\n{ \r\n\tINT nRetOffset = -1;\r\n\r\n\tif (count > 0)\r\n\t{\r\n\t//\tASSERT (pwTable != NULL);\r\n\t\t__asm\r\n\t\t{\r\n\t\t\tpush edi\r\n\t\t\tpush eax\r\n\t\t\tpush ecx\r\n\r\n\t\t\tmov ax, wFind\r\n\t\t\tmov ecx, count\r\n\t\t\tpush ecx\r\n\t\t\tmov edi, dword ptr [pwTable]\r\n\r\n\t        cld\r\n\t\t\trepne scasw\r\n\t\t\tpop eax\r\n\t\t\tjnz quit\r\n\r\n\t\t\tinc ecx\r\n\t\t\tsub eax, ecx\r\n\t\t\tmov dword ptr [nRetOffset], eax\r\nquit:\r\n\t\t\tpop ecx\r\n\t\t\tpop eax\r\n\t\t\tpop edi\r\n\t\t}\r\n\t}\r\n\r\n\treturn nRetOffset;\r\n}\r\n\r\n"
  },
  {
    "path": "krnln/mem.h",
    "content": "// Mem.h: interface for the CFreqMem class.\r\n//\r\n//////////////////////////////////////////////////////////////////////\r\n\r\n#if !defined(AFX_MEM_H__AD73B7A1_418A_11D2_AAE7_000021612B48__INCLUDED_)\r\n#define AFX_MEM_H__AD73B7A1_418A_11D2_AAE7_000021612B48__INCLUDED_\r\n\r\n#if _MSC_VER >= 1000\r\n#pragma once\r\n#endif // _MSC_VER >= 1000\r\n\r\nBOOL IsEmptyStr (LPTSTR szStr);\r\nINT tcsallbytes (LPTSTR pstr, LPDWORD pdwStrIndex);\r\nINT tcsallbytes (LPTSTR pstr);\r\nINT tcsbytes (LPTSTR pstr);\r\nINT FindWord (LPWORD pwTable, INT count, WORD wFind);\r\nINT FindDWord (LPDWORD pdwTable, INT count, DWORD dwFind);\r\nINT FindInt (LPINT pnTable, INT nCount, INT nFind);\r\nINT FindByte (LPBYTE pTable, INT count, BYTE btFind);\r\nvoid ZeroMem (LPBYTE pDest, DWORD dwLength);\r\nvoid CopyMem (LPBYTE pDest, LPBYTE pSrc, DWORD dwLength);\r\nvoid MoveMem (LPBYTE pDest, LPBYTE pSrc, DWORD dwLength);\r\n\r\n\r\n#define\tPAGE_SIZE\t\t\t512\t\t// ҳߴ\r\n#define\tPAGE_COUNT\t\t\t96\t\t// ҳĿ\r\n#define\tPAGE_BUF_SIZE\t\tPAGE_COUNT * PAGE_SIZE\r\n\r\nstruct MEM_BUF\r\n{\r\n\tINT m_nPageUsedCount;\t\t\t// ҳǰѾʹõĿ\r\n\tBYTE m_btaryUsed [PAGE_COUNT];\t// ¼ÿһҳǷѱʹá\r\n\tBYTE m_buf [PAGE_BUF_SIZE];\r\n};\r\ntypedef MEM_BUF* PMEM_BUF;\r\n\r\n//////////////////////\r\n\r\n#define\tFM_MAX_FREE_BUF_SIZE\t128\r\n#define\tFM_GROW_SIZE\t\t\t128\r\n\r\nclass CFreqMem\r\n{\r\nprotected:\r\n\tPMEM_BUF m_pMemBuf;\r\n\r\nprotected:\r\n\tLPBYTE m_pData;\r\n\tINT m_nAllocedSize;\r\n\tINT m_nSize;\r\n\r\npublic:\r\n\tCFreqMem ();\r\n\tvirtual ~CFreqMem ()\r\n\t{\r\n\t\tFree ();\r\n\t}\r\n\r\npublic:\r\n\tstatic void BeginUseBuf ();\r\n\tstatic BOOL IsAllowUseBuf ();\r\n\tstatic void AllowUseBuf (BOOL blAllow);\r\n\r\n\tLPBYTE GetPtr () const\r\n\t{\r\n\t\treturn m_nSize == 0 ? NULL : m_pData;\r\n\t}\r\n\toperator LPBYTE () const\r\n\t{\r\n\t\treturn m_nSize == 0 ? NULL : m_pData;\r\n\t}\r\n\tINT GetSize () const\r\n\t{\r\n\t\treturn m_nSize;\r\n\t}\r\n\toperator INT () const\r\n\t{\r\n\t\treturn m_nSize;\r\n\t}\r\n\tINT FindInt (INT nFind)\r\n\t{\r\n\t\tLPINT pn = (LPINT)GetPtr ();\r\n\t\tif (pn == NULL)\r\n\t\t\treturn -1;\r\n\t\telse\r\n\t\t\treturn ::FindDWord ((LPDWORD)pn, GetSize () / sizeof (DWORD), (DWORD)nFind);\r\n\t}\r\n\tINT FindDWord (DWORD dwFind)\r\n\t{\r\n\t\tLPDWORD pdw = (LPDWORD)GetPtr ();\r\n\t\tif (pdw == NULL)\r\n\t\t\treturn -1;\r\n\t\telse\r\n\t\t\treturn ::FindDWord (pdw, GetSize () / sizeof (DWORD), dwFind);\r\n\t}\r\n\tINT FindWord (WORD wFind)\r\n\t{\r\n\t\tLPWORD pw = (LPWORD)GetPtr ();\r\n\t\tif (pw == NULL)\r\n\t\t\treturn -1;\r\n\t\telse\r\n\t\t\treturn ::FindWord (pw, GetSize () / sizeof (WORD), wFind);\r\n\t}\r\n\tBOOL IsEmpty ()\r\n\t{\r\n\t\treturn m_nSize == 0;\r\n\t}\r\n\r\npublic:\r\n\tBOOL EmptyAndRqSpace (INT nSize);\r\n//\tvoid Serialize (CArchive& ar);\r\n//\tvoid SaveEmpty (CArchive& ar);\r\n\r\n\tvoid AddFloat\t\t(FLOAT flt);\r\n\tvoid AddDouble\t\t(DOUBLE db);\r\n\tvoid AddDWord\t\t(DWORD dw);\r\n\tvoid AddInt64\t\t(INT64 n64);\r\n\tvoid AddInt\t\t\t(INT n);\r\n\tvoid AddWord\t\t(WORD w);\r\n\tvoid AddShort\t\t(SHORT sht);\r\n\tvoid AddByte\t\t(BYTE bt);\r\n\tvoid AddBool\t\t(BOOL bl);\r\n\tvoid AddStr\t\t\t(LPTSTR pstr);\r\n\tvoid AddText        (LPTSTR pstr);\r\n\r\n\tINT GetDoubleCount ()\t{\treturn m_nSize / sizeof (DOUBLE);\t}\r\n\tINT GetDWordCount ()\t{\treturn m_nSize / sizeof (DWORD);\t}\r\n\tINT GetIntCount ()\t\t{\treturn m_nSize / sizeof (INT);\t\t}\r\n\tINT GetWordCount ()\t\t{\treturn m_nSize / sizeof (WORD);\t\t}\r\n\tINT GetShortCount ()\t{\treturn m_nSize / sizeof (SHORT);\t}\r\n\tDOUBLE*\tGetDoublePtr ()\t{\treturn m_nSize == 0 ? NULL : (DOUBLE*)m_pData;\t\t}\r\n\tLPDWORD\tGetDWordPtr ()\t{\treturn m_nSize == 0 ? NULL : (LPDWORD)m_pData;\t\t}\r\n\tLPINT\tGetIntPtr ()\t{\treturn m_nSize == 0 ? NULL : (LPINT)m_pData;\t\t}\r\n\tLPWORD\tGetWordPtr ()\t{\treturn m_nSize == 0 ? NULL : (LPWORD)m_pData;\t\t}\r\n\tSHORT*\tGetShortPtr ()\t{\treturn m_nSize == 0 ? NULL : (SHORT*)m_pData;\t\t}\r\n\r\npublic:\r\n\tLPBYTE Alloc (INT nSize);\r\n\tLPBYTE Realloc (INT nSize);\r\n\tvoid Free ();\r\n\r\n\tvoid XchgMem (CFreqMem& mem);\r\n\tvoid Empty ()  { m_nSize = 0; }\r\n\tBOOL CopyFrom (CFreqMem& mem)\r\n\t{\r\n\t\tEmpty ();\r\n\t\treturn Append (mem, mem);\r\n\t}\r\n\tBOOL CopyFrom (LPBYTE pData, INT nSize)\r\n\t{\r\n\t\tEmpty ();\r\n\t\treturn Append (pData, nSize);\r\n\t}\r\n\r\n\tBOOL Insert (INT nOffset, LPBYTE pData, INT nSize);\r\n\tBOOL Append (LPBYTE pData, INT nSize);\r\n\tBOOL Replace (INT nOffset, INT nSize, LPBYTE pReplaceData, INT nReplaceSize);\r\n\tBOOL Remove (INT nOffset, INT nSize);\r\n\tBOOL AppendSpace (INT nSpaceCount);\r\n\r\n//\tINT ReadFile (CString& strFileName, INT nReadLength = -1);\r\n//\tBOOL WriteFile (CString& strFileName, INT nWriteLength = -1);\r\n\r\n/////////////////\r\n\r\nprotected:\r\n\tvoid _Free (LPBYTE pData);\r\n};\r\n\r\nclass CMyDWordArray : public CFreqMem\r\n{\r\npublic:\r\n\tCMyDWordArray ()  { }\r\n\r\n\tINT GetSize ()\r\n\t{\r\n\t\treturn GetDWordCount ();\r\n\t}\r\n\tINT GetUpperBound ()\r\n\t{\r\n\t\treturn GetDWordCount () - 1;\r\n\t}\r\n\tBOOL SetSize (INT nNewSize);\r\n\tvoid RemoveAll ()\r\n\t{\r\n\t\tFree ();\r\n\t}\r\n\tLPDWORD GetData ()\r\n\t{\r\n\t\treturn GetDWordPtr ();\r\n\t}\r\n\r\n\tDWORD GetAt (INT nIndex) const\r\n\t{\r\n//\t\tASSERT (nIndex >= 0 && nIndex < (INT)(m_nSize / sizeof (DWORD)));\r\n\t\treturn ((LPDWORD)m_pData) [nIndex];\r\n\t}\r\n\tDWORD& ElementAt (INT nIndex)\r\n\t{\r\n//\t\tASSERT (nIndex >= 0 && nIndex < (INT)(m_nSize / sizeof (DWORD)));\r\n\t\treturn ((LPDWORD)m_pData) [nIndex];\r\n\t}\r\n\r\n\tvoid SetAt (INT nIndex, DWORD dwElement)\r\n\t{\r\n//\t\tASSERT (nIndex >= 0 && nIndex < GetDWordCount ());\r\n\t\tif (nIndex >= 0 && nIndex < GetDWordCount ())\r\n\t\t\t((LPDWORD)m_pData) [nIndex] = dwElement;\r\n\t}\r\n\r\n\tINT Append (const CMyDWordArray& src)\r\n\t{\r\n\t\tINT n = GetSize ();\r\n\t\tCFreqMem::Append (src, src);\r\n\t\treturn n;\r\n\t}\r\n\tvoid Copy (CMyDWordArray& src)\r\n\t{\r\n\t\tCopyFrom (src);\r\n\t}\r\n\r\n\tDWORD operator[] (INT nIndex) const\r\n\t{\r\n\t\treturn GetAt (nIndex);\r\n\t}\r\n\tDWORD& operator[] (INT nIndex)\r\n\t{\r\n\t\treturn ElementAt (nIndex);\r\n\t}\r\n\r\n\tINT Add (DWORD dwElement)\r\n\t{\r\n\t\tAddDWord (dwElement);\r\n\t\treturn GetUpperBound ();\r\n\t}\r\n\tvoid InsertAt (INT nIndex, DWORD dwElement)\r\n\t{\r\n\t\tInsert (nIndex * sizeof (DWORD), (LPBYTE)&dwElement, sizeof (DWORD));\r\n\t}\r\n\tvoid RemoveAt (INT nIndex, INT nCount = 1)\r\n\t{\r\n\t\tRemove (nIndex * sizeof (DWORD), sizeof (DWORD) * nCount);\r\n\t}\r\n};\r\n\r\n\r\n#endif // !defined(AFX_MEM_H__AD73B7A1_418A_11D2_AAE7_000021612B48__INCLUDED_)\r\n\r\n"
  },
  {
    "path": "krnln/midi.cpp",
    "content": "/////////////////////////////////////////////////////////////////////////////\r\n// Copyright (C) 1998 by Jrg Knig\r\n// All rights reserved\r\n//\r\n// This file is part of the completely free tetris clone \"CGTetris\".\r\n//\r\n// This is free software.\r\n// You may redistribute it by any means providing it is not sold for profit\r\n// without the authors written consent.\r\n//\r\n// No warrantee of any kind, expressed or implied, is included with this\r\n// software; use at your own risk, responsibility for damages (if any) to\r\n// anyone resulting from the use of this software rests entirely with the\r\n// user.\r\n//\r\n// Send bug reports, bug fixes, enhancements, requests, flames, etc., and\r\n// I'll try to keep a version up to date.  I can be reached as follows:\r\n//    J.Koenig@adg.de                 (company site)\r\n//    Joerg.Koenig@rhein-neckar.de    (private site)\r\n/////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n// Midi.cpp\r\n//\r\n\r\n\r\n// The CMIDI class is based on a sample in the DirectX SDK (mstream)\r\n\r\n#include \"stdafx.h\"\r\n#include \"Midi.h\"\r\n\r\n#ifdef _DEBUG\r\n#define DEBUG_NEW\r\n#undef THIS_FILE\r\nstatic char THIS_FILE[] = __FILE__;\r\n#endif\r\n\r\n\r\n#define MThd\t\t0x6468544D\t\t// Start of file\r\n#define MTrk\t\t0x6B72544D\t\t// Start of track\r\n\r\n\r\n#define BUFFER_TIME_LENGTH\t\t60   // Amount to fill in milliseconds\r\n\r\n#define TRACE0   \r\n#define TRACE1   \r\n// These structures are stored in MIDI files; they need to be byte aligned.\r\n//\r\n#pragma pack(1)\r\n\r\n// Contents of MThd chunk.\r\nstruct MIDIFILEHDR\r\n{\r\n    WORD\twFormat;\t\t\t// Format (hi-lo)\r\n    WORD\twTrackCount;\t\t// # tracks (hi-lo)\r\n    WORD\twTimeDivision;\t\t// Time division (hi-lo)\r\n};\r\n\r\n#pragma pack() // End of need for byte-aligned structures\r\n\r\n\r\n// Macros for swapping hi/lo-endian data\r\n//\r\n#define WORDSWAP(w)\t\t(((w) >> 8) | \\\r\n\t\t\t\t\t\t(((w) << 8) & 0xFF00))\r\n\r\n#define DWORDSWAP(dw)\t(((dw) >> 24) | \\\r\n\t\t\t\t\t\t(((dw) >> 8) & 0x0000FF00) | \\\r\n\t\t\t\t\t\t(((dw) << 8) & 0x00FF0000) | \\\r\n\t\t\t\t\t\t(((dw) << 24) & 0xFF000000))\r\n\r\n\r\nstatic char gteBadRunStat[] \t= \"Reference to missing running status.\";\r\nstatic char gteRunStatMsgTrunc[]= \"Running status message truncated\";\r\nstatic char gteChanMsgTrunc[]\t= \"Channel message truncated\";\r\nstatic char gteSysExLenTrunc[]\t= \"SysEx event truncated (length)\";\r\nstatic char gteSysExTrunc[]\t= \"SysEx event truncated\";\r\nstatic char gteMetaNoClass[]\t= \"Meta event truncated (no class byte)\";\r\nstatic char gteMetaLenTrunc[]\t= \"Meta event truncated (length)\";\r\nstatic char gteMetaTrunc[]\t= \"Meta event truncated\";\r\nstatic char gteNoMem[]\t\t= \"Out of memory during malloc call\";\r\n\r\n\r\n//////////////////////////////////////////////////////////////////////\r\n// CMIDI -- Construction/Destruction\r\n//////////////////////////////////////////////////////////////////////\r\n\r\nCMIDI::CMIDI()\r\n\t: m_dwSoundSize(0)\r\n\t, m_pSoundData(0)\r\n\t, m_dwFormat(0)\r\n\t, m_dwTrackCount(0)\r\n\t, m_dwTimeDivision(0)\r\n\t, m_bPlaying(FALSE)\r\n\t, m_hStream(0)\r\n\t, m_dwProgressBytes(0)\r\n\t, m_bLooped(FALSE)\r\n\t, m_tkCurrentTime(0)\r\n\t, m_dwBufferTickLength(0)\r\n\t, m_dwCurrentTempo(0)\r\n\t, m_dwTempoMultiplier(100)\r\n\t, m_bInsertTempo(FALSE)\r\n\t, m_bBuffersPrepared(FALSE)\r\n\t, m_nCurrentBuffer(0)\r\n\t, m_uMIDIDeviceID(MIDI_MAPPER)\r\n\t, m_nEmptyBuffers(0)\r\n\t, m_bPaused(FALSE)\r\n\t, m_uCallbackStatus(0)\r\n\t, m_hBufferReturnEvent(0)\r\n\r\n\t, m_ptsTrack(0)\r\n\t, m_ptsFound(0)\r\n\t, m_dwStatus(0)\r\n\t, m_tkNext(0)\r\n\t, m_dwMallocBlocks(0)\r\n{\r\n\tm_hBufferReturnEvent = ::CreateEvent(0, FALSE, FALSE, TEXT(\"Wait For Buffer Return\"));\r\n\tASSERT(m_hBufferReturnEvent != 0);\r\n}\r\n\r\nCMIDI::~CMIDI()\r\n{\r\n\tStop(FALSE);\r\n\r\n\tif(m_hBufferReturnEvent)\r\n\t\t::CloseHandle(m_hBufferReturnEvent);\r\n}\r\n\r\n\r\n//DEL BOOL CMIDI::Create(UINT uResID)\r\n//DEL {\r\n//DEL \treturn\tCreate(MAKEINTRESOURCE(uResID));\r\n//DEL }\r\n\r\n\r\n//DEL BOOL CMIDI::Create(LPCTSTR pszResID)\r\n//DEL {\r\n//DEL \t//////////////////////////////////////////////////////////////////\r\n//DEL \t// load resource\r\n//DEL \tHINSTANCE hApp = ::GetModuleHandle(0);\r\n//DEL \tASSERT(hApp);\r\n//DEL \r\n//DEL \tHRSRC hResInfo = ::FindResource(hApp, pszResID, TEXT(\"MIDI\"));\r\n//DEL \tif(hResInfo == 0)\r\n//DEL \t\treturn FALSE;\r\n//DEL \r\n//DEL \tHGLOBAL hRes = ::LoadResource(hApp, hResInfo);\r\n//DEL \tif(hRes == 0)\r\n//DEL \t\treturn FALSE;\r\n//DEL \r\n//DEL \tLPVOID pTheSound = ::LockResource(hRes);\r\n//DEL \tif(pTheSound == 0)\r\n//DEL \t\treturn FALSE;\r\n//DEL \r\n//DEL \tDWORD dwTheSound = ::SizeofResource(hApp, hResInfo);\r\n//DEL \r\n//DEL \treturn Create(pTheSound, dwTheSound);\r\n//DEL }\r\n\r\n\r\nBOOL CMIDI::Create(LPVOID pSoundData, DWORD dwSize)\r\n{\r\n\tif( m_pSoundData ) {\r\n\t\t// already created\r\n\t\tASSERT(FALSE);\r\n\t\treturn FALSE;\r\n\t}\r\n\r\n\tASSERT(pSoundData != 0);\r\n\tASSERT(dwSize > 0);\r\n\r\n\tregister LPBYTE p = LPBYTE(pSoundData);\r\n\r\n\t// check header of MIDI\r\n\tif(*(DWORD*)p != MThd) {\r\n\t\tASSERT(FALSE);\r\n\t\treturn FALSE;\r\n\t}\r\n\tp += sizeof(DWORD);\r\n\r\n\t// check header size\r\n\tDWORD dwHeaderSize = DWORDSWAP(*(DWORD*)p);\r\n\tif( dwHeaderSize != sizeof(MIDIFILEHDR) ) {\r\n\t\tASSERT(FALSE);\r\n\t\treturn FALSE;\r\n\t}\r\n\tp += sizeof(DWORD);\r\n\r\n\t// get header\r\n\tMIDIFILEHDR hdr;\r\n\t::CopyMemory(&hdr, p, dwHeaderSize);\r\n\tm_dwFormat = DWORD(WORDSWAP(hdr.wFormat));\r\n\tm_dwTrackCount = DWORD(WORDSWAP(hdr.wTrackCount));\r\n\tm_dwTimeDivision = DWORD(WORDSWAP(hdr.wTimeDivision));\r\n\tp += dwHeaderSize;\r\n\r\n\t// create the array of tracks\r\n\tm_Tracks.resize(m_dwTrackCount);\r\n\tfor(register DWORD i = 0; i < m_dwTrackCount; ++i) {\r\n\t\t// check header of track\r\n\t\tif(*(DWORD*)p != MTrk) {\r\n\t\t\tASSERT(FALSE);\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\tp += sizeof(DWORD);\r\n\r\n\t\tm_Tracks[i].dwTrackLength = DWORDSWAP(*(DWORD*)p);\r\n\t\tp += sizeof(DWORD);\r\n\r\n\t\tm_Tracks[i].pTrackStart = m_Tracks[i].pTrackCurrent = p;\r\n\t\t\tp += m_Tracks[i].dwTrackLength;\r\n\r\n        // Handle bozo MIDI files which contain empty track chunks\r\n\t\tif( !m_Tracks[i].dwTrackLength ) {\r\n\t\t\tm_Tracks[i].fdwTrack |= ITS_F_ENDOFTRK;\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\t// We always preread the time from each track so the mixer code can\r\n\t\t// determine which track has the next event with a minimum of work\r\n\t\tif( !GetTrackVDWord( &m_Tracks[i], &m_Tracks[i].tkNextEventDue )) {\r\n\t\t\tTRACE0(\"Error in MIDI data\\n\");\r\n\t\t\tASSERT(FALSE);\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tm_pSoundData = pSoundData;\r\n\tm_dwSoundSize = dwSize;\r\n\r\n\r\n\t// allocate volume channels and initialise them\r\n\tm_Volumes.resize(NUM_CHANNELS, VOLUME_INIT);\r\n\r\n\tif( ! StreamBufferSetup() ) {\r\n\t\tASSERT(FALSE);\r\n\t\treturn FALSE;\r\n\t}\r\n\r\n\treturn TRUE;\r\n}\r\n\r\n\r\nBOOL CMIDI :: Play(BOOL bInfinite /* = FALSE */) {\r\n\tif( IsPaused() ) {\r\n\t\tContinue();\r\n\t\treturn TRUE;\r\n\t}\r\n\r\n\t// calling Play() while it is already playing will restart from scratch\r\n\tif( IsPlaying() )\r\n\t\tStop();\r\n\r\n\t// Clear the status of our callback so it will handle\r\n\t// MOM_DONE callbacks once more\r\n\tm_uCallbackStatus = 0;\r\n\r\n\tif( !m_bLooped )\r\n\t\tm_bInsertTempo = TRUE;\r\n\r\n\tMMRESULT mmResult;\r\n\tif( (mmResult = midiStreamRestart(m_hStream)) != MMSYSERR_NOERROR ) {\r\n\t\tMidiError(mmResult);\r\n\t\treturn FALSE;\r\n\t}\r\n\r\n\tm_bPlaying = TRUE;\r\n\tm_bLooped = bInfinite;\r\n\r\n\treturn m_bPlaying;\r\n}\r\n\r\n\r\nBOOL CMIDI :: Stop(BOOL bReOpen /*=TRUE*/) {\r\n\tMMRESULT mmrRetVal;\r\n\r\n\tif( IsPlaying()\t|| (m_uCallbackStatus != STATUS_CALLBACKDEAD) ) {\r\n\t\tm_bPlaying = m_bPaused = FALSE;\r\n\t\tif( m_uCallbackStatus != STATUS_CALLBACKDEAD && m_uCallbackStatus != STATUS_WAITINGFOREND )\r\n\t\t\tm_uCallbackStatus = STATUS_KILLCALLBACK;\r\n\r\n\t\tif( (mmrRetVal = midiStreamStop(m_hStream) ) != MMSYSERR_NOERROR ) {\r\n\t\t\tMidiError(mmrRetVal);\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\tif( (mmrRetVal = midiOutReset((HMIDIOUT)m_hStream)) != MMSYSERR_NOERROR ) {\r\n\t\t\tMidiError(mmrRetVal);\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\t// Wait for the callback thread to release this thread, which it will do by\r\n\t\t// calling SetEvent() once all buffers are returned to it\r\n\t\tif( WaitForSingleObject( m_hBufferReturnEvent, DEBUG_CALLBACK_TIMEOUT ) == WAIT_TIMEOUT ) {\r\n\t\t\t// Note, this is a risky move because the callback may be genuinely busy, but\r\n\t\t\t// when we're debugging, it's safer and faster than freezing the application,\r\n\t\t\t// which leaves the MIDI device locked up and forces a system reset...\r\n\t\t\tTRACE0(\"Timed out waiting for MIDI callback\\n\");\r\n\t\t\tm_uCallbackStatus = STATUS_CALLBACKDEAD;\r\n\t\t}\r\n\t}\r\n\r\n\t//m_pSoundData = NULL;//´\r\n\tif( m_uCallbackStatus == STATUS_CALLBACKDEAD ) {\r\n\t\tm_uCallbackStatus = 0;\r\n\t\tFreeBuffers();\r\n\t\tif( m_hStream ) {\r\n\t\t\tif( (mmrRetVal = midiStreamClose(m_hStream) ) != MMSYSERR_NOERROR ) {\r\n\t\t\t\tMidiError(mmrRetVal);\r\n\t\t\t}\r\n\t\t\tm_hStream = 0;\r\n\t\t}\r\n\r\n\t\tif( bReOpen ) {\r\n\t\t\tif( !StreamBufferSetup() ) {\r\n\t\t\t\t// Error setting up for MIDI file\r\n\t\t\t\t// Notification is already taken care of...\r\n\t\t\t\treturn FALSE;\r\n\t\t\t}\r\n\t\t\tif( ! m_bLooped ) {\r\n\t\t\t\tRewind();\r\n\t\t\t\tm_dwProgressBytes = 0;\r\n\t\t\t\tm_dwStatus = 0;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn TRUE;\r\n}\r\n\r\n\r\nBOOL CMIDI :: Pause() {\r\n\tif( ! m_bPaused && m_bPlaying && m_pSoundData && m_hStream ) {\r\n\t\tmidiStreamPause(m_hStream);\r\n\t\tm_bPaused = TRUE;\r\n\t}\r\n\treturn FALSE;\r\n}\r\n\r\n\r\nBOOL CMIDI :: Continue() {\r\n\tif( m_bPaused && m_bPlaying && m_pSoundData && m_hStream ) {\r\n\t\tmidiStreamRestart(m_hStream);\r\n\t\tm_bPaused = FALSE;\r\n\t}\r\n\treturn FALSE;\r\n}\r\n\r\n\r\nBOOL CMIDI :: Rewind() {\r\n\tif( ! m_pSoundData )\r\n\t\treturn FALSE;\r\n\r\n\tfor(register DWORD i = 0; i < m_dwTrackCount; ++i) {\r\n\t\tm_Tracks[i].pTrackCurrent = m_Tracks[i].pTrackStart;\r\n\t\tm_Tracks[i].byRunningStatus = 0;\r\n\t\tm_Tracks[i].tkNextEventDue = 0;\r\n\t\tm_Tracks[i].fdwTrack = 0;\r\n\r\n        // Handle bozo MIDI files which contain empty track chunks\r\n\t\tif( !m_Tracks[i].dwTrackLength ) {\r\n\t\t\tm_Tracks[i].fdwTrack |= ITS_F_ENDOFTRK;\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\t// We always preread the time from each track so the mixer code can\r\n\t\t// determine which track has the next event with a minimum of work\r\n\t\tif( !GetTrackVDWord( &m_Tracks[i], &m_Tracks[i].tkNextEventDue )) {\r\n\t\t\tTRACE0(\"Error in MIDI data\\n\");\r\n\t\t\tASSERT(FALSE);\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t}\r\n\r\n\treturn TRUE;\r\n}\r\n\r\n\r\nDWORD CMIDI :: GetChannelCount() const {\r\n\treturn m_Volumes.size();\r\n}\r\n\r\n\r\nvoid CMIDI :: SetVolume(DWORD dwPercent) {\r\n\tconst DWORD dwSize = m_Volumes.size();\r\n\tfor( register DWORD i = 0; i < dwSize; ++i )\r\n\t\tSetChannelVolume(i, dwPercent);\r\n}\r\n\r\n\r\nDWORD CMIDI :: GetVolume() const {\r\n\tDWORD dwVolume = 0;\r\n\tconst DWORD dwSize = m_Volumes.size();\r\n\tfor( register DWORD i = 0; i < dwSize; ++i )\r\n\t\tdwVolume += GetChannelVolume(i);\r\n\r\n\treturn dwVolume / GetChannelCount();\r\n}\r\n\r\n\r\nvoid CMIDI :: SetChannelVolume(DWORD dwChannel, DWORD dwPercent) {\r\n\tASSERT(dwChannel < m_Volumes.size());\r\n\r\n\tif( !m_bPlaying )\r\n\t\treturn;\r\n\r\n\tm_Volumes[dwChannel] = (dwPercent > 100) ? 100 : dwPercent;\r\n\tDWORD dwEvent = MIDI_CTRLCHANGE | dwChannel | ((DWORD)MIDICTRL_VOLUME << 8) | ((DWORD)(m_Volumes[dwChannel]*VOLUME_MAX/100) << 16);\r\n\tMMRESULT mmrRetVal;\r\n\tif(( mmrRetVal = midiOutShortMsg((HMIDIOUT)m_hStream, dwEvent)) != MMSYSERR_NOERROR ) {\r\n\t\tMidiError(mmrRetVal);\r\n\t\treturn;\r\n\t}\r\n}\r\n\r\n\r\nDWORD CMIDI :: GetChannelVolume(DWORD dwChannel) const {\r\n\tASSERT(dwChannel < GetChannelCount());\r\n\treturn m_Volumes[dwChannel];\r\n}\r\n\r\n\r\nvoid CMIDI :: SetTempo(DWORD dwPercent) {\r\n\tm_dwTempoMultiplier = dwPercent ? dwPercent : 1;\r\n\tm_bInsertTempo = TRUE;\r\n}\r\n\r\n\r\nDWORD CMIDI :: GetTempo() const {\r\n\treturn m_dwTempoMultiplier;\r\n}\r\n\r\n\r\nvoid CMIDI :: SetInfinitePlay(BOOL bSet) {\r\n\tm_bLooped = bSet;\r\n}\r\n\r\n//////////////////////////////////////////////////////////////////////\r\n// CMIDI -- implementation\r\n//////////////////////////////////////////////////////////////////////\r\n\r\n// This function converts MIDI data from the track buffers setup by a\r\n// previous call to ConverterInit().  It will convert data until an error is\r\n// encountered or the output buffer has been filled with as much event data\r\n// as possible, not to exceed dwMaxLength. This function can take a couple\r\n// bit flags, passed through dwFlags. Information about the success/failure\r\n// of this operation and the number of output bytes actually converted will\r\n// be returned in the CONVERTINFO structure pointed at by lpciInfo.\r\nint CMIDI :: ConvertToBuffer(DWORD dwFlags, CONVERTINFO * lpciInfo) {\r\n\tint\t    nChkErr;\r\n\r\n\tlpciInfo->dwBytesRecorded = 0;\r\n\r\n\tif( dwFlags & CONVERTF_RESET ) {\r\n\t\tm_dwProgressBytes = 0;\r\n\t\tm_dwStatus = 0;\r\n\t\tmemset( &m_teTemp, 0, sizeof(TEMPEVENT));\r\n\t\tm_ptsTrack = m_ptsFound = 0;\r\n\t}\r\n\r\n\t// If we were already done, then return with a warning...\r\n\tif( m_dwStatus & CONVERTF_STATUS_DONE ) {\r\n\t\tif( m_bLooped ) {\r\n\t\t\tRewind();\r\n\t\t\tm_dwProgressBytes = 0;\r\n\t\t\tm_dwStatus = 0;\r\n\t\t} else\r\n\t\t\treturn CONVERTERR_DONE;\r\n\t} else if( m_dwStatus & CONVERTF_STATUS_STUCK ) {\r\n\t\t// The caller is asking us to continue, but we're already hosed because we\r\n\t\t// previously identified something as corrupt, so complain louder this time.\r\n\t\treturn( CONVERTERR_STUCK );\r\n\t} else if( m_dwStatus & CONVERTF_STATUS_GOTEVENT ) {\r\n\t\t// Turn off this bit flag\r\n\t\tm_dwStatus ^= CONVERTF_STATUS_GOTEVENT;\r\n\r\n\t\t// The following code for this case is duplicated from below, and is\r\n\t\t// designed to handle a \"straggler\" event, should we have one left over\r\n\t\t// from previous processing the last time this function was called.\r\n\r\n\t\t// Don't add end of track event 'til we're done\r\n\t\tif( m_teTemp.byShortData[0] == MIDI_META && m_teTemp.byShortData[1] == MIDI_META_EOT ) {\r\n\t\t\tif( m_dwMallocBlocks ) {\r\n\t\t\t\tdelete [] m_teTemp.pLongData;\r\n\t\t\t\t--m_dwMallocBlocks;\r\n\t\t\t}\r\n\t\t} else if(( nChkErr = AddEventToStreamBuffer( &m_teTemp, lpciInfo )) != CONVERTERR_NOERROR ) {\r\n\t\t\tif( nChkErr == CONVERTERR_BUFFERFULL ) {\r\n\t\t\t\t// Do some processing and tell caller that this buffer's full\r\n\t\t\t\tm_dwStatus |= CONVERTF_STATUS_GOTEVENT;\r\n\t\t\t\treturn CONVERTERR_NOERROR;\r\n\t\t\t} else if( nChkErr == CONVERTERR_METASKIP ) {\r\n\t\t\t\t// We skip by all meta events that aren't tempo changes...\r\n\t\t\t} else {\r\n\t\t\t\tTRACE0(\"Unable to add event to stream buffer.\\n\");\r\n\t\t\t\tif( m_dwMallocBlocks ) {\r\n\t\t\t\t\tdelete [] m_teTemp.pLongData;\r\n\t\t\t\t\tm_dwMallocBlocks--;\r\n\t\t\t\t}\r\n\t\t\t\treturn( TRUE );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfor(;;) {\r\n\t\tm_ptsFound = 0;\r\n\t\tm_tkNext = 0xFFFFFFFFL;\r\n\t\t// Find nearest event due\r\n\t\tfor( register DWORD idx = 0; idx < m_Tracks.size(); ++idx ) {\r\n\t\t\tm_ptsTrack = &m_Tracks[idx];\r\n\t\t\tif( !(m_ptsTrack->fdwTrack & ITS_F_ENDOFTRK) && (m_ptsTrack->tkNextEventDue < m_tkNext) ) {\r\n\t\t\t\tm_tkNext = m_ptsTrack->tkNextEventDue;\r\n\t\t\t\tm_ptsFound = m_ptsTrack;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// None found?  We must be done, so return to the caller with a smile.\r\n\t\tif( !m_ptsFound ) {\r\n\t\t\tm_dwStatus |= CONVERTF_STATUS_DONE;\r\n\t\t\t// Need to set return buffer members properly\r\n\t\t\treturn CONVERTERR_NOERROR;\r\n\t\t}\r\n\r\n\t\t// Ok, get the event header from that track\r\n\t\tif( !GetTrackEvent( m_ptsFound, &m_teTemp )) {\r\n\t\t\t// Warn future calls that this converter is stuck at a corrupt spot\r\n\t\t\t// and can't continue\r\n\t\t\tm_dwStatus |= CONVERTF_STATUS_STUCK;\r\n\t\t\treturn CONVERTERR_CORRUPT;\r\n\t\t}\r\n\r\n\t\t// Don't add end of track event 'til we're done\r\n\t\tif( m_teTemp.byShortData[0] == MIDI_META && m_teTemp.byShortData[1] == MIDI_META_EOT ) {\r\n\t\t\tif( m_dwMallocBlocks ) {\r\n\t\t\t\tdelete [] m_teTemp.pLongData;\r\n\t\t\t\t--m_dwMallocBlocks;\r\n\t\t\t}\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tif(( nChkErr = AddEventToStreamBuffer( &m_teTemp, lpciInfo )) != CONVERTERR_NOERROR ) {\r\n\t\t\tif( nChkErr == CONVERTERR_BUFFERFULL ) {\r\n\t\t\t\t// Do some processing and tell somebody this buffer is full...\r\n\t\t\t\tm_dwStatus |= CONVERTF_STATUS_GOTEVENT;\r\n\t\t\t\treturn CONVERTERR_NOERROR;\r\n\t\t\t} else if( nChkErr == CONVERTERR_METASKIP ) {\r\n\t\t\t\t// We skip by all meta events that aren't tempo changes...\r\n\t\t\t} else {\r\n\t\t\t\tTRACE0(\"Unable to add event to stream buffer.\\n\");\r\n\t\t\t\tif( m_dwMallocBlocks ) {\r\n\t\t\t\t\tdelete [] m_teTemp.pLongData;\r\n\t\t\t\t\tm_dwMallocBlocks--;\r\n\t\t\t\t}\r\n\t\t\t\treturn TRUE;\r\n\t\t\t}\r\n\t\t}\r\n\t}\t\r\n\r\n\treturn CONVERTERR_NOERROR;\r\n}\r\n\r\n// GetTrackEvent\r\n//\r\n// Fills in the event struct with the next event from the track\r\n//\r\n// pteTemp->tkEvent will contain the absolute tick time of the event\r\n// pteTemp->byShortData[0] will contain\r\n//  MIDI_META if the event is a meta event;\r\n//   in this case pteTemp->byShortData[1] will contain the meta class\r\n//  MIDI_SYSEX or MIDI_SYSEXEND if the event is a SysEx event\r\n//  Otherwise, the event is a channel message and pteTemp->byShortData[1]\r\n//   and pteTemp->byShortData[2] will contain the rest of the event.\r\n//\r\n// pteTemp->dwEventLength will contain\r\n//  The total length of the channel message in pteTemp->byShortData if\r\n//   the event is a channel message\r\n//  The total length of the paramter data pointed to by\r\n//   pteTemp->pLongData otherwise\r\n//\r\n// pteTemp->pLongData will point at any additional paramters if the \r\n//  event is a SysEx or meta event with non-zero length; else\r\n//  it will contain NULL\r\n//\r\n// Returns TRUE on success or FALSE on any kind of parse error\r\n// Prints its own error message ONLY in the debug version\r\n//\r\n// Maintains the state of the input track (i.e. \r\n// ptsTrack->pTrackPointers, and ptsTrack->byRunningStatus).\r\n//\r\nBOOL CMIDI :: GetTrackEvent(TRACK * ptsTrack, TEMPEVENT * pteTemp) {\r\n\tDWORD   idx;\r\n\tUINT    dwEventLength;\r\n\r\n\t// Clear out the temporary event structure to get rid of old data...\r\n\tmemset( pteTemp, 0, sizeof(TEMPEVENT));\r\n\r\n\t// Already at end of track? There's nothing to read.\r\n    if( ptsTrack->fdwTrack & ITS_F_ENDOFTRK )\r\n\t\treturn FALSE;\r\n\r\n\t// Get the first byte, which determines the type of event.\r\n\tBYTE byByte;\r\n\tif( !GetTrackByte(ptsTrack, &byByte) )\r\n\t\treturn FALSE;\r\n\r\n\t// If the high bit is not set, then this is a channel message\r\n\t// which uses the status byte from the last channel message\r\n\t// we saw. NOTE: We do not clear running status across SysEx or\r\n\t// meta events even though the spec says to because there are\r\n\t// actually files out there which contain that sequence of data.\r\n\tif( !(byByte & 0x80) ) {\r\n\t\t// No previous status byte? We're hosed.\r\n\t\tif( !ptsTrack->byRunningStatus ) {\r\n\t\t\tTrackError(ptsTrack, gteBadRunStat);\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\r\n\t\tpteTemp->byShortData[0] = ptsTrack->byRunningStatus;\r\n\t\tpteTemp->byShortData[1] = byByte;\r\n\r\n\t\tbyByte = pteTemp->byShortData[0] & 0xF0;\r\n\t\tpteTemp->dwEventLength = 2;\r\n\r\n\t\t// Only program change and channel pressure events are 2 bytes long;\r\n\t\t// the rest are 3 and need another byte\r\n\t\tif(( byByte != MIDI_PRGMCHANGE ) && ( byByte != MIDI_CHANPRESS )) {\r\n\t\t\tif( !GetTrackByte( ptsTrack, &pteTemp->byShortData[2] ))\r\n\t\t\t\treturn FALSE;\r\n\t\t\t++pteTemp->dwEventLength;\r\n\t\t}\r\n\t} else if(( byByte & 0xF0 ) != MIDI_SYSEX ) {\r\n\t\t// Not running status, not in SysEx range - must be\r\n\t\t// normal channel message (0x80-0xEF)\r\n\t\tpteTemp->byShortData[0] = byByte;\r\n\t\tptsTrack->byRunningStatus = byByte;\r\n\r\n\t\t// Strip off channel and just keep message type\r\n\t\tbyByte &= 0xF0;\r\n\r\n\t\tdwEventLength = ( byByte == MIDI_PRGMCHANGE || byByte == MIDI_CHANPRESS ) ? 1 : 2;\r\n\t\tpteTemp->dwEventLength = dwEventLength + 1;\r\n\r\n\t\tif( !GetTrackByte( ptsTrack, &pteTemp->byShortData[1] ))\r\n\t\t\treturn FALSE;\r\n\t\tif( dwEventLength == 2 )\r\n\t\t\tif( !GetTrackByte( ptsTrack, &pteTemp->byShortData[2] ))\r\n\t\t\t\treturn FALSE;\r\n\t} else if(( byByte == MIDI_SYSEX ) || ( byByte == MIDI_SYSEXEND )) {\r\n\t\t// One of the SysEx types. (They are the same as far as we're concerned;\r\n\t\t// there is only a semantic difference in how the data would actually\r\n\t\t// get sent when the file is played. We must take care to put the proper\r\n\t\t// event type back on the output track, however.)\r\n\t\t//\r\n\t\t// Parse the general format of:\r\n\t\t//  BYTE \tbEvent (MIDI_SYSEX or MIDI_SYSEXEND)\r\n\t\t//  VDWORD \tcbParms\r\n\t\t//  BYTE   \tabParms[cbParms]\r\n\t\tpteTemp->byShortData[0] = byByte;\r\n\t\tif( !GetTrackVDWord( ptsTrack, &pteTemp->dwEventLength )) {\r\n\t\t\tTrackError( ptsTrack, gteSysExLenTrunc );\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\r\n\t\t// Malloc a temporary memory block to hold the parameter data\r\n\t\tpteTemp->pLongData = new BYTE [pteTemp->dwEventLength];\r\n\t\tif( pteTemp->pLongData == 0 ) {\r\n\t\t\tTrackError( ptsTrack, gteNoMem );\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\t// Increment our counter, which tells the program to look around for\r\n\t\t// a malloc block to free, should it need to exit or reset before the\r\n\t\t// block would normally be freed\r\n\t\t++m_dwMallocBlocks;\r\n\r\n\t\t// Copy from the input buffer to the parameter data buffer\r\n\t\tfor( idx = 0; idx < pteTemp->dwEventLength; idx++ )\r\n\t\t\tif( !GetTrackByte( ptsTrack, pteTemp->pLongData + idx )) {\r\n\t\t\t\tTrackError( ptsTrack, gteSysExTrunc );\r\n\t\t\t\treturn FALSE;\r\n\t\t\t}\r\n\t} else if( byByte == MIDI_META ) {\r\n\t\t// It's a meta event. Parse the general form:\r\n\t\t//  BYTE\tbEvent\t(MIDI_META)\r\n\t\t//  BYTE\tbClass\r\n\t\t//  VDWORD\tcbParms\r\n\t\t//  BYTE\tabParms[cbParms]\r\n\t\tpteTemp->byShortData[0] = byByte;\r\n\r\n\t\tif( !GetTrackByte( ptsTrack, &pteTemp->byShortData[1] ))\r\n\t\t\treturn FALSE;\r\n\r\n\t\tif( !GetTrackVDWord( ptsTrack, &pteTemp->dwEventLength )) {\t\r\n\t\t\tTrackError( ptsTrack, gteMetaLenTrunc );\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\r\n\t\t// NOTE: It's perfectly valid to have a meta with no data\r\n\t\t// In this case, dwEventLength == 0 and pLongData == NULL\r\n\t\tif( pteTemp->dwEventLength ) {\t\t\r\n\t\t\t// Malloc a temporary memory block to hold the parameter data\r\n\t\t\tpteTemp->pLongData = new BYTE [pteTemp->dwEventLength];\r\n\t\t\tif( pteTemp->pLongData == 0 ) {\r\n\t\t\t\tTrackError( ptsTrack, gteNoMem );\r\n\t\t\t\treturn FALSE;\r\n\t\t\t}\r\n\t\t\t// Increment our counter, which tells the program to look around for\r\n\t\t\t// a malloc block to free, should it need to exit or reset before the\r\n\t\t\t// block would normally be freed\r\n\t\t\t++m_dwMallocBlocks;\r\n\r\n\t\t\t// Copy from the input buffer to the parameter data buffer\r\n\t\t\tfor( idx = 0; idx < pteTemp->dwEventLength; idx++ )\r\n\t\t\t\tif( !GetTrackByte( ptsTrack, pteTemp->pLongData + idx )) {\r\n\t\t\t\t\tTrackError( ptsTrack, gteMetaTrunc );\r\n\t\t\t\t\treturn FALSE;\r\n\t\t\t\t}\r\n\t\t}\r\n\r\n\t\tif( pteTemp->byShortData[1] == MIDI_META_EOT )\r\n\t\t\tptsTrack->fdwTrack |= ITS_F_ENDOFTRK;\r\n\t} else {\r\n\t\t// Messages in this range are system messages and aren't supposed to\r\n\t\t// be in a normal MIDI file. If they are, we've either misparsed or the\r\n\t\t// authoring software is stupid.\r\n\t\treturn FALSE;\r\n\t}\r\n\r\n\t// Event time was already stored as the current track time\r\n\tpteTemp->tkEvent = ptsTrack->tkNextEventDue;\r\n\r\n\t// Now update to the next event time. The code above MUST properly\r\n\t// maintain the end of track flag in case the end of track meta is\r\n\t// missing.  NOTE: This code is a continuation of the track event\r\n\t// time pre-read which is done at the end of track initialization.\r\n\tif( !( ptsTrack->fdwTrack & ITS_F_ENDOFTRK )) {\r\n\t\tDWORD\ttkDelta;\r\n\r\n\t\tif( !GetTrackVDWord( ptsTrack, &tkDelta ))\r\n\t\t\treturn FALSE;\r\n\r\n\t\tptsTrack->tkNextEventDue += tkDelta;\r\n\t}\r\n\r\n\treturn TRUE;\r\n}\r\n\r\n\r\n// GetTrackVDWord\r\n//\r\n// Attempts to parse a variable length DWORD from the given track. A VDWord\r\n// in a MIDI file\r\n//  (a) is in lo-hi format \r\n//  (b) has the high bit set on every byte except the last\r\n//\r\n// Returns the DWORD in *lpdw and TRUE on success; else\r\n// FALSE if we hit end of track first.\r\nBOOL CMIDI :: GetTrackVDWord(TRACK * ptsTrack, LPDWORD lpdw) {\r\n\tASSERT(ptsTrack != 0);\r\n\tASSERT(lpdw != 0);\r\n\r\n\tif( ptsTrack->fdwTrack & ITS_F_ENDOFTRK )\r\n\t\treturn FALSE;\r\n\r\n\tBYTE\tbyByte;\r\n\tDWORD\tdw = 0;\r\n\r\n\tdo {\r\n\t\tif( !GetTrackByte( ptsTrack, &byByte ))\r\n\t\t\treturn FALSE;\r\n\r\n\t\tdw = ( dw << 7 ) | ( byByte & 0x7F );\r\n\t} while( byByte & 0x80 );\r\n\r\n\t*lpdw = dw;\r\n\r\n\treturn TRUE;\r\n}\r\n\r\n\r\n// AddEventToStreamBuffer\r\n//\r\n// Put the given event into the given stream buffer at the given location\r\n// pteTemp must point to an event filled out in accordance with the\r\n// description given in GetTrackEvent\r\n//\r\n// Handles its own error notification by displaying to the appropriate\r\n// output device (either our debugging window, or the screen).\r\nint CMIDI :: AddEventToStreamBuffer( TEMPEVENT * pteTemp, CONVERTINFO *lpciInfo ) {\r\n\tMIDIEVENT * pmeEvent = (MIDIEVENT *)( lpciInfo->mhBuffer.lpData\r\n\t\t\t\t\t\t\t+ lpciInfo->dwStartOffset\r\n\t\t\t\t\t\t\t+ lpciInfo->dwBytesRecorded );\r\n\r\n\t// When we see a new, empty buffer, set the start time on it...\r\n\tif( !lpciInfo->dwBytesRecorded )\r\n\t\tlpciInfo->tkStart = m_tkCurrentTime;\r\n\r\n\t// Use the above set start time to figure out how much longer we should fill\r\n\t// this buffer before officially declaring it as \"full\"\r\n\tif( m_tkCurrentTime - lpciInfo->tkStart > m_dwBufferTickLength )\r\n\t\tif( lpciInfo->bTimesUp ) {\r\n\t\t\tlpciInfo->bTimesUp = FALSE;\r\n\t\t\treturn CONVERTERR_BUFFERFULL;\r\n\t\t} else\r\n\t\t\tlpciInfo->bTimesUp = TRUE;\r\n\r\n\tDWORD tkNow = m_tkCurrentTime;\r\n\r\n\t// Delta time is absolute event time minus absolute time\r\n\t// already gone by on this track\r\n\tDWORD tkDelta = pteTemp->tkEvent - m_tkCurrentTime;\r\n\r\n\t// Event time is now current time on this track\r\n\tm_tkCurrentTime = pteTemp->tkEvent;\r\n\r\n\tif( m_bInsertTempo ) {\r\n\t\tm_bInsertTempo = FALSE;\r\n\r\n\t\tif( lpciInfo->dwMaxLength-lpciInfo->dwBytesRecorded < 3*sizeof(DWORD)) {\r\n\t\t\t// Cleanup from our write operation\r\n\t\t\treturn CONVERTERR_BUFFERFULL;\r\n\t\t}\r\n\t\tif( m_dwCurrentTempo ) {\r\n\t\t\tpmeEvent->dwDeltaTime = 0;\r\n\t\t\tpmeEvent->dwStreamID = 0;\r\n\t\t\tpmeEvent->dwEvent = ( m_dwCurrentTempo * 100 ) / m_dwTempoMultiplier;\r\n\t\t\tpmeEvent->dwEvent |= (((DWORD)MEVT_TEMPO ) << 24 ) | MEVT_F_SHORT;\r\n\r\n\t\t\tlpciInfo->dwBytesRecorded += 3 * sizeof(DWORD);\r\n\t\t\tpmeEvent += 3 * sizeof(DWORD);\r\n\t\t}\r\n\t}\r\n\r\n\tif( pteTemp->byShortData[0] < MIDI_SYSEX ) {\r\n\t\t// Channel message. We know how long it is, just copy it.\r\n\t\t// Need 3 DWORD's: delta-t, stream-ID, event\r\n\t\tif( lpciInfo->dwMaxLength-lpciInfo->dwBytesRecorded < 3*sizeof(DWORD)) {\r\n\t\t\t// Cleanup from our write operation\r\n\t\t\treturn CONVERTERR_BUFFERFULL;\r\n\t\t}\r\n\r\n\t\tpmeEvent->dwDeltaTime = tkDelta;\r\n\t\tpmeEvent->dwStreamID = 0;\r\n\t\tpmeEvent->dwEvent = ( pteTemp->byShortData[0] )\r\n\t\t\t\t\t| (((DWORD)pteTemp->byShortData[1] ) << 8 )\r\n\t\t\t\t\t| (((DWORD)pteTemp->byShortData[2] ) << 16 )\r\n\t\t\t\t\t| MEVT_F_SHORT;\r\n\r\n\t\tif((( pteTemp->byShortData[0] & 0xF0) == MIDI_CTRLCHANGE ) && ( pteTemp->byShortData[1] == MIDICTRL_VOLUME )) {\r\n\t\t\t// If this is a volume change, generate a callback so we can grab\r\n\t\t\t// the new volume for our cache\r\n\t\t\tpmeEvent->dwEvent |= MEVT_F_CALLBACK;\r\n\t\t}\r\n\t\tlpciInfo->dwBytesRecorded += 3 *sizeof(DWORD);\r\n\t} else if(( pteTemp->byShortData[0] == MIDI_SYSEX ) || ( pteTemp->byShortData[0] == MIDI_SYSEXEND )) {\r\n\t\tTRACE0(\"AddEventToStreamBuffer: Ignoring SysEx event.\\n\");\r\n\t\tif( m_dwMallocBlocks ) {\r\n\t\t\tdelete [] pteTemp->pLongData;\r\n\t\t\t--m_dwMallocBlocks;\r\n\t\t}\r\n\t} else {\r\n\t\t// Better be a meta event.\r\n\t\t//  BYTE\tbyEvent\r\n\t\t//  BYTE\tbyEventType\r\n\t\t//  VDWORD\tdwEventLength\r\n\t\t//  BYTE\tpLongEventData[dwEventLength]\r\n\t\tASSERT( pteTemp->byShortData[0] == MIDI_META );\r\n\r\n\t\t// The only meta-event we care about is change tempo\r\n\t\tif( pteTemp->byShortData[1] != MIDI_META_TEMPO ) {\r\n\t\t\tif( m_dwMallocBlocks ) {\r\n\t\t\t\tdelete [] pteTemp->pLongData;\r\n\t\t\t\t--m_dwMallocBlocks;\r\n\t\t\t}\r\n\t\t\treturn CONVERTERR_METASKIP;\r\n\t\t}\r\n\r\n\t\t// We should have three bytes of parameter data...\r\n\t\tASSERT(pteTemp->dwEventLength == 3);\r\n\r\n\t\t// Need 3 DWORD's: delta-t, stream-ID, event data\r\n\t\tif( lpciInfo->dwMaxLength - lpciInfo->dwBytesRecorded < 3 *sizeof(DWORD)) {\r\n\t\t\t// Cleanup the temporary event if necessary and return\r\n\t\t\tif( m_dwMallocBlocks ) {\r\n\t\t\t\tdelete [] pteTemp->pLongData;\r\n\t\t\t\t--m_dwMallocBlocks;\r\n\t\t\t}\r\n\t\t\treturn CONVERTERR_BUFFERFULL;\r\n\t\t}\r\n\r\n\t\tpmeEvent->dwDeltaTime = tkDelta;\r\n\t\tpmeEvent->dwStreamID = 0;\r\n\t// Note: this is backwards from above because we're converting a single\r\n\t//\t\t data value from hi-lo to lo-hi format...\r\n\t\tpmeEvent->dwEvent = ( pteTemp->pLongData[2] )\r\n\t\t\t\t| (((DWORD)pteTemp->pLongData[1] ) << 8 )\r\n\t\t\t\t| (((DWORD)pteTemp->pLongData[0] ) << 16 );\r\n\r\n\t\t// This next step has absolutely nothing to do with the conversion of a\r\n\t\t// MIDI file to a stream, it's simply put here to add the functionality\r\n\t\t// of the tempo slider. If you don't need this, be sure to remove the\r\n\t\t// next two lines.\r\n\t\tm_dwCurrentTempo = pmeEvent->dwEvent;\r\n\t\tpmeEvent->dwEvent = (pmeEvent->dwEvent * 100 ) / m_dwTempoMultiplier;\r\n\r\n\t\tpmeEvent->dwEvent |= (((DWORD)MEVT_TEMPO ) << 24 ) | MEVT_F_SHORT;\r\n\r\n\t\tm_dwBufferTickLength = (m_dwTimeDivision * 1000 * BUFFER_TIME_LENGTH) / m_dwCurrentTempo;\r\n\t\tTRACE1(\"m_dwBufferTickLength = %lu\\n\", m_dwBufferTickLength);\r\n\r\n\t\tif( m_dwMallocBlocks ) {\r\n\t\t\tdelete [] pteTemp->pLongData;\r\n\t\t\t--m_dwMallocBlocks;\r\n\t\t}\r\n\t\tlpciInfo->dwBytesRecorded += 3 *sizeof(DWORD);\r\n\t}\r\n\r\n\treturn CONVERTERR_NOERROR;\r\n}\r\n\r\n\r\n// StreamBufferSetup()\r\n//\r\n// Opens a MIDI stream. Then it goes about converting the data into a midiStream buffer for playback.\r\nBOOL CMIDI :: StreamBufferSetup() {\r\n\tint\t\tnChkErr;\r\n\tBOOL\tbFoundEnd = FALSE;\r\n\r\n\tMMRESULT\t\tmmrRetVal;\r\n\r\n\tif( !m_hStream )\r\n\t\tif(( mmrRetVal = midiStreamOpen( &m_hStream,\r\n\t\t\t\t\t&m_uMIDIDeviceID,\r\n\t\t\t\t\tDWORD(1), DWORD(MidiProc),\r\n\t\t\t\t\tDWORD(this),\r\n\t\t\t\t\tCALLBACK_FUNCTION )) != MMSYSERR_NOERROR ) {\r\n\t\tMidiError(mmrRetVal);\r\n\t\treturn FALSE;\r\n\t}\r\n\r\n\t// allocate stream buffers and initialise them\r\n\tm_StreamBuffers.resize(NUM_STREAM_BUFFERS);\r\n\r\n\tMIDIPROPTIMEDIV mptd;\r\n\tmptd.cbStruct = sizeof(mptd);\r\n\tmptd.dwTimeDiv = m_dwTimeDivision;\r\n\tif(( mmrRetVal = midiStreamProperty( m_hStream, (LPBYTE)&mptd,\r\n\t\t\t\t\t    MIDIPROP_SET | MIDIPROP_TIMEDIV )) != MMSYSERR_NOERROR ) {\r\n\t\tMidiError( mmrRetVal );\r\n\t\treturn FALSE;\r\n\t}\r\n\r\n\tm_nEmptyBuffers = 0;\r\n\tDWORD dwConvertFlag = CONVERTF_RESET;\r\n\r\n\tfor( m_nCurrentBuffer = 0; m_nCurrentBuffer < NUM_STREAM_BUFFERS; m_nCurrentBuffer++ ) {\r\n\t\tm_StreamBuffers[m_nCurrentBuffer].mhBuffer.dwBufferLength = OUT_BUFFER_SIZE;\r\n\t\tm_StreamBuffers[m_nCurrentBuffer].mhBuffer.lpData = new char [OUT_BUFFER_SIZE];\r\n\t\tif( m_StreamBuffers[m_nCurrentBuffer].mhBuffer.lpData == 0 )\r\n\t\t\treturn FALSE;\r\n\r\n\t\t// Tell the converter to convert up to one entire buffer's length of output\r\n\t\t// data. Also, set a flag so it knows to reset any saved state variables it\r\n\t\t// may keep from call to call.\r\n\t\tm_StreamBuffers[m_nCurrentBuffer].dwStartOffset = 0;\r\n\t\tm_StreamBuffers[m_nCurrentBuffer].dwMaxLength = OUT_BUFFER_SIZE;\r\n\t\tm_StreamBuffers[m_nCurrentBuffer].tkStart = 0;\r\n\t\tm_StreamBuffers[m_nCurrentBuffer].bTimesUp = FALSE;\r\n\r\n\t\tif(( nChkErr = ConvertToBuffer( dwConvertFlag, &m_StreamBuffers[m_nCurrentBuffer] )) != CONVERTERR_NOERROR ) {\r\n\t\t\tif( nChkErr == CONVERTERR_DONE ) {\r\n\t\t\t\tbFoundEnd = TRUE;\r\n\t\t\t} else {\r\n\t\t\t\tTRACE0(\"Initial conversion pass failed\\n\");\r\n\t\t\t\treturn FALSE;\r\n\t\t\t}\r\n\t\t}\r\n\t\tm_StreamBuffers[m_nCurrentBuffer].mhBuffer.dwBytesRecorded = m_StreamBuffers[m_nCurrentBuffer].dwBytesRecorded;\r\n\r\n\t\tif( !m_bBuffersPrepared )\r\n\t\t\tif(( mmrRetVal = midiOutPrepareHeader( (HMIDIOUT)m_hStream,\r\n\t\t\t\t\t\t&m_StreamBuffers[m_nCurrentBuffer].mhBuffer,\r\n\t\t\t\t\t\tsizeof(MIDIHDR))) != MMSYSERR_NOERROR ) {\r\n\t\t\t\tMidiError( mmrRetVal );\r\n\t\t\t\treturn FALSE;\r\n\t\t\t}\r\n\r\n\t\tif(( mmrRetVal = midiStreamOut( m_hStream,\r\n\t\t\t\t\t\t&m_StreamBuffers[m_nCurrentBuffer].mhBuffer,\r\n\t\t\t\t\t\tsizeof(MIDIHDR))) != MMSYSERR_NOERROR ) {\r\n\t\t\tMidiError(mmrRetVal);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tdwConvertFlag = 0;\r\n\r\n\t\tif( bFoundEnd )\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tm_bBuffersPrepared = TRUE;\r\n\tm_nCurrentBuffer = 0;\r\n\treturn TRUE;\r\n}\r\n\r\n// This function unprepares and frees all our buffers -- something we must\r\n// do to work around a bug in MMYSYSTEM that prevents a device from playing\r\n// back properly unless it is closed and reopened after each stop.\r\nvoid CMIDI :: FreeBuffers() {\r\n\tDWORD\tidx;\r\n\tMMRESULT\tmmrRetVal;\r\n\r\n\tif( m_bBuffersPrepared ) {\r\n\t\tfor( idx = 0; idx < NUM_STREAM_BUFFERS; idx++ )\r\n\t\t\tif(( mmrRetVal = midiOutUnprepareHeader( (HMIDIOUT)m_hStream,\r\n\t\t\t\t\t\t\t\t&m_StreamBuffers[idx].mhBuffer,\r\n\t\t\t\t\t\t\t\tsizeof(MIDIHDR))) != MMSYSERR_NOERROR ) {\r\n\t\t\t\tMidiError(mmrRetVal);\r\n\t\t\t}\r\n\t\tm_bBuffersPrepared = FALSE;\r\n\t}\r\n\t// Free our stream buffers...\r\n\tfor( idx = 0; idx < NUM_STREAM_BUFFERS; idx++ )\r\n\tif( m_StreamBuffers[idx].mhBuffer.lpData ) {\r\n\t\tdelete [] m_StreamBuffers[idx].mhBuffer.lpData;\r\n\t\tm_StreamBuffers[idx].mhBuffer.lpData = 0;\r\n\t}\r\n}\r\n\r\n//////////////////////////////////////////////////////////////////////\r\n// CMIDI -- error handling\r\n//////////////////////////////////////////////////////////////////////\r\n\r\nvoid CMIDI :: MidiError(MMRESULT mmResult) {\r\n\t#ifdef _DEBUG\r\n\t\tchar chText[512];\r\n\t\tmidiOutGetErrorText(mmResult, chText, sizeof(chText));\r\n\t\tTRACE1(\"Midi error: %hs\\n\", chText);\r\n\t#endif\r\n}\r\n\r\n\r\nvoid CMIDI :: TrackError(TRACK * ptsTrack, LPSTR lpszErr ) {\r\n\tTRACE1(\"Track buffer offset %lu\\n\", (DWORD)(ptsTrack->pTrackCurrent - ptsTrack->pTrackStart));\r\n    TRACE1(\"Track total length %lu\\n\", ptsTrack->dwTrackLength);\r\n\tTRACE1(\"%hs\\n\", lpszErr);\r\n}\r\n\r\n//////////////////////////////////////////////////////////////////////\r\n// CMIDI -- overridables\r\n//////////////////////////////////////////////////////////////////////\r\n\r\nvoid CMIDI :: OnMidiOutOpen() {\r\n}\r\n\r\n\r\nvoid CMIDI :: OnMidiOutDone(MIDIHDR & rHdr) {\r\n\tif( m_uCallbackStatus == STATUS_CALLBACKDEAD )\r\n\t\treturn;\r\n\r\n\t++m_nEmptyBuffers;\r\n\r\n\tif( m_uCallbackStatus == STATUS_WAITINGFOREND ) {\r\n\t\tif( m_nEmptyBuffers < NUM_STREAM_BUFFERS )\r\n\t\t\treturn;\r\n\t\telse {\r\n\t\t\tm_uCallbackStatus = STATUS_CALLBACKDEAD;\r\n\t\t\tStop();\r\n\t\t\tSetEvent(m_hBufferReturnEvent);\r\n\t\t\tSetEvent(m_hhLoopPlayEvent);//һ,\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\t// This flag is set whenever the callback is waiting for all buffers to\r\n\t// come back.\r\n\tif( m_uCallbackStatus == STATUS_KILLCALLBACK ) {\r\n\t\t// Count NUM_STREAM_BUFFERS-1 being returned for the last time\r\n\t\tif( m_nEmptyBuffers < NUM_STREAM_BUFFERS )\r\n\t\t\treturn;\r\n\t\telse {\r\n\t\t\t// Change the status to callback dead\r\n\t\t\tm_uCallbackStatus = STATUS_CALLBACKDEAD;\r\n\t\t\tSetEvent(m_hBufferReturnEvent);\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\tm_dwProgressBytes += m_StreamBuffers[m_nCurrentBuffer].mhBuffer.dwBytesRecorded;\r\n\r\n\t///////////////////////////////////////////////////////////////////////////////\r\n\t// Fill an available buffer with audio data again...\r\n\r\n\tif( m_bPlaying && m_nEmptyBuffers ) {\r\n\t\tm_StreamBuffers[m_nCurrentBuffer].dwStartOffset = 0;\r\n\t\tm_StreamBuffers[m_nCurrentBuffer].dwMaxLength = OUT_BUFFER_SIZE;\r\n\t\tm_StreamBuffers[m_nCurrentBuffer].tkStart = 0;\r\n\t\tm_StreamBuffers[m_nCurrentBuffer].dwBytesRecorded = 0;\r\n\t\tm_StreamBuffers[m_nCurrentBuffer].bTimesUp = FALSE;\r\n\r\n\t\tint nChkErr;\r\n\r\n\t\tif(( nChkErr = ConvertToBuffer( 0, &m_StreamBuffers[m_nCurrentBuffer] )) != CONVERTERR_NOERROR ) {\r\n\t\t\tif( nChkErr == CONVERTERR_DONE ) {\r\n\t\t\t\tm_uCallbackStatus = STATUS_WAITINGFOREND;\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\tTRACE0(\"MidiProc() conversion pass failed!\\n\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tm_StreamBuffers[m_nCurrentBuffer].mhBuffer.dwBytesRecorded = m_StreamBuffers[m_nCurrentBuffer].dwBytesRecorded;\r\n\r\n\t\tMMRESULT mmrRetVal;\r\n\t\tif( (mmrRetVal = midiStreamOut(m_hStream, &m_StreamBuffers[m_nCurrentBuffer].mhBuffer, sizeof(MIDIHDR))) != MMSYSERR_NOERROR ) {\r\n\t\t\tMidiError(mmrRetVal);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tm_nCurrentBuffer = ( m_nCurrentBuffer + 1 ) % NUM_STREAM_BUFFERS;\r\n\t\tm_nEmptyBuffers--;\r\n\t}\r\n}\r\n\r\n\r\nvoid CMIDI :: OnMidiOutPositionCB(MIDIHDR & rHdr, MIDIEVENT & rEvent) {\r\n\tif( MIDIEVENT_TYPE(rEvent.dwEvent) == MIDI_CTRLCHANGE )\r\n\t{\r\n\t\tif( MIDIEVENT_DATA1(rEvent.dwEvent) == MIDICTRL_VOLUME ) {\r\n\t\t\t// Mask off the channel number and cache the volume data byte\r\n\t\t\tm_Volumes[MIDIEVENT_CHANNEL(rEvent.dwEvent)] = DWORD(MIDIEVENT_VOLUME(rEvent.dwEvent)*100/VOLUME_MAX);\r\n\t\t\t/*\r\n\t\t\tif( m_pWndParent && ::IsWindow(m_pWndParent->GetSafeHwnd()) )\r\n\t\t\t\t// Do not use SendMessage(), because a change of the midi stream has no effect\r\n\t\t\t\t// during callback handling, so if the owner wants to adjust the volume, as a\r\n\t\t\t\t// result of the windows message, (s)he will not hear that change.\r\n\t\t\t\tm_pWndParent->PostMessage(\r\n\t\t\t\t\tWM_MIDI_VOLUMECHANGED,\r\n\t\t\t\t\tWPARAM(this),\r\n\t\t\t\t\tLPARAM(\r\n\t\t\t\t\t\tMAKELONG(\r\n\t\t\t\t\t\t\tWORD(MIDIEVENT_CHANNEL(rEvent.dwEvent)),\r\n\t\t\t\t\t\t\tWORD(MIDIEVENT_VOLUME(rEvent.dwEvent)*100/VOLUME_MAX)\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t)\r\n\t\t\t\t);\r\n\t\t\t\t*/\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\nvoid CMIDI :: OnMidiOutClose() {\r\n}\r\n\r\n//////////////////////////////////////////////////////////////////////\r\n// CMIDI -- static members\r\n//////////////////////////////////////////////////////////////////////\r\n\r\nvoid CMIDI :: MidiProc(HMIDIOUT hMidi, UINT uMsg, DWORD dwInstanceData, DWORD dwParam1, DWORD dwParam2) {\r\n\tCMIDI * pMidi = (CMIDI *) dwInstanceData;\r\n\tASSERT(pMidi != 0);\r\n\tMIDIHDR * pHdr = (MIDIHDR*) dwParam1;\r\n\r\n\tswitch(uMsg) {\r\n\t\tcase MOM_OPEN:\r\n\t\t\tpMidi->OnMidiOutOpen();\r\n\t\t\tbreak;\r\n\r\n\t\tcase MOM_CLOSE:\r\n\t\t\tpMidi->OnMidiOutClose();\r\n\t\t\tbreak;\r\n\r\n\t\tcase MOM_DONE:\r\n\t\t\tASSERT(pHdr != 0);\r\n\t\t\tpMidi->OnMidiOutDone(*pHdr);\r\n\t\t\tbreak;\r\n\r\n\t\tcase MOM_POSITIONCB:\r\n\t\t\tASSERT(pHdr != 0);\r\n\t\t\tpMidi->OnMidiOutPositionCB(*pHdr, *((MIDIEVENT*)(pHdr->lpData + pHdr->dwOffset)));\r\n\t\t\tbreak;\r\n\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "krnln/midi.h",
    "content": "/////////////////////////////////////////////////////////////////////////////\r\n// Copyright (C) 1998 by Jrg Knig\r\n// All rights reserved\r\n//\r\n// This file is part of the completely free tetris clone \"CGTetris\".\r\n//\r\n// This is free software.\r\n// You may redistribute it by any means providing it is not sold for profit\r\n// without the authors written consent.\r\n//\r\n// No warrantee of any kind, expressed or implied, is included with this\r\n// software; use at your own risk, responsibility for damages (if any) to\r\n// anyone resulting from the use of this software rests entirely with the\r\n// user.\r\n//\r\n// Send bug reports, bug fixes, enhancements, requests, flames, etc., and\r\n// I'll try to keep a version up to date.  I can be reached as follows:\r\n//    J.Koenig@adg.de                 (company site)\r\n//    Joerg.Koenig@rhein-neckar.de    (private site)\r\n/////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n// Midi.h : main header file for the MIDI application\r\n//\r\n\r\n// This class is based on the DirectX sample \"mstream\".\r\n\r\n#ifndef MIDI_h\r\n#define MIDI_h\r\n\r\n#if _MSC_VER >= 1000\r\n#pragma once\r\n#endif // _MSC_VER >= 1000\r\n\r\n#include <mmsystem.h>\r\n#pragma message(\"linking with multimedia library\")\r\n#pragma comment(lib, \"winmm.lib\")\r\n\r\n#include <vector>\r\nusing namespace std;\r\n\r\n\r\n// This message is sent to the controlling window, if the volume changes in\r\n// another way than explicitly set by the owner of the CMIDI object.\r\n// WPARAM\tthe pointer to the MIDI object\r\n// LPARAM\tlo-word: the number of the channel that changed volume\r\n//\t\t\thi-word: the new volume in percent\r\n#define\tWM_MIDI_VOLUMECHANGED\tWM_USER+23\r\n\r\n\r\n#define MIDI_CTRLCHANGE\t\t\t((BYTE)0xB0)\t\t// + ctrlr + value\r\n#define MIDI_PRGMCHANGE\t\t\t((BYTE)0xC0)\t\t// + new patch\r\n#define MIDI_CHANPRESS\t\t\t((BYTE)0xD0)\t\t// + pressure (1 byte)\r\n\r\n#define MIDICTRL_VOLUME\t\t\t((BYTE)0x07)\r\n\r\n#define MIDIEVENT_CHANNEL(dw)\t(dw & 0x0000000F)\r\n#define MIDIEVENT_TYPE(dw)\t\t(dw & 0x000000F0)\r\n#define MIDIEVENT_DATA1(dw)\t\t((dw & 0x0000FF00) >> 8)\r\n#define MIDIEVENT_VOLUME(dw)\t((dw & 0x007F0000) >> 16)\r\n\r\n#define MIDI_SYSEX\t\t\t\t((BYTE)0xF0)\t\t// SysEx begin\r\n#define MIDI_SYSEXEND\t\t\t((BYTE)0xF7)\t\t// SysEx end\r\n#define MIDI_META\t\t\t\t((BYTE)0xFF)\t\t// Meta event begin\r\n#define MIDI_META_TEMPO\t\t\t((BYTE)0x51)\t\t// Tempo change\r\n#define MIDI_META_EOT\t\t\t((BYTE)0x2F)\t\t// End-of-track\r\n\r\n\r\n// flags for the ConvertToBuffer() method\r\n#define CONVERTF_RESET\t\t\t\t0x00000001\r\n#define CONVERTF_STATUS_DONE\t\t0x00000001\r\n#define CONVERTF_STATUS_STUCK\t\t0x00000002\r\n#define CONVERTF_STATUS_GOTEVENT\t0x00000004\r\n\r\n// Return values from the ConvertToBuffer() method\r\n#define CONVERTERR_NOERROR\t\t0\t\t// No error occured\r\n#define CONVERTERR_CORRUPT\t\t-101\t// The input file is corrupt\r\n// The converter has already encountered a corrupt file and cannot convert any\r\n// more of this file -- must reset the converter\r\n#define CONVERTERR_STUCK\t\t-102\r\n#define CONVERTERR_DONE\t\t\t-103\t// Converter is done\r\n#define CONVERTERR_BUFFERFULL\t-104\t// The buffer is full\r\n#define CONVERTERR_METASKIP\t\t-105\t// Skipping unknown meta event\r\n\r\n#define STATUS_KILLCALLBACK\t\t100\t\t// Signals that the callback should die\r\n#define STATUS_CALLBACKDEAD\t\t200\t\t// Signals callback is done processing\r\n#define STATUS_WAITINGFOREND\t300\t\t// Callback's waiting for buffers to play\r\n\r\n// Description of a track\r\n//\r\nstruct TRACK\r\n{\r\n\tDWORD\tfdwTrack;\t\t// Track's flags\r\n\tDWORD\tdwTrackLength;\t// Total bytes in track\r\n\tLPBYTE\tpTrackStart;\t// -> start of track data buffer\r\n\tLPBYTE\tpTrackCurrent;\t// -> next byte to read in buffer\r\n\tDWORD\ttkNextEventDue;\t// Absolute time of next event in track\r\n\tBYTE\tbyRunningStatus;// Running status from last channel msg\r\n\r\n\tTRACK()\r\n\t\t: fdwTrack(0)\r\n\t\t, dwTrackLength(0)\r\n\t\t, pTrackStart(0)\r\n\t\t, pTrackCurrent(0)\r\n\t\t, tkNextEventDue(0)\r\n\t\t, byRunningStatus(0)\r\n\t{\r\n\t}\r\n};\r\n\r\n#define ITS_F_ENDOFTRK\t\t0x00000001\r\n\r\n\r\n// This structure is used to pass information to the ConvertToBuffer()\r\n// system and then internally by that function to send information about the\r\n// target stream buffer and current state of the conversion process to internal\r\n// lower level conversion routines.\r\nstruct CONVERTINFO\r\n{\r\n    MIDIHDR\tmhBuffer;\t\t\t// Standard Windows stream buffer header\r\n    DWORD\tdwStartOffset;\t\t// Start offset from mhStreamBuffer.lpStart\r\n    DWORD\tdwMaxLength;\t\t// Max length to convert on this pass\r\n    DWORD\tdwBytesRecorded;\r\n    DWORD\ttkStart;\r\n    BOOL\tbTimesUp;\r\n\r\n\tCONVERTINFO()\r\n\t\t: dwStartOffset(0)\r\n\t\t, dwMaxLength(0)\r\n\t\t, dwBytesRecorded(0)\r\n\t\t, tkStart(0)\r\n\t\t, bTimesUp(FALSE)\r\n\t{\r\n\t\tmemset(&mhBuffer, 0, sizeof(MIDIHDR));\r\n\t}\r\n};\r\n\r\n// Temporary event structure which stores event data until we're ready to\r\n// dump it into a stream buffer\r\nstruct TEMPEVENT\r\n{\r\n\tDWORD\ttkEvent;\t\t// Absolute time of event\r\n\tBYTE\tbyShortData[4];\t// Event type and parameters if channel msg\r\n\tDWORD\tdwEventLength;\t// Length of data which follows if meta or sysex\r\n\tLPBYTE\tpLongData;\t\t// -> Event data if applicable\r\n};\r\n\r\nclass CMIDI  \r\n{\r\nprotected:\r\n\ttypedef vector<TRACK>\t\tTrackArray_t;\r\n\ttypedef vector<DWORD>\t\tVolumeArray_t;\r\n\ttypedef vector<CONVERTINFO>\tConvertArray_t;\r\n\r\n\tenum {\r\n\t\tNUM_CHANNELS = 16,\t\t// 16 volume channels\r\n\t\tVOLUME_INIT = 100,\t\t// 100% volume by default\r\n\t\tNUM_STREAM_BUFFERS = 2,\r\n\t\tOUT_BUFFER_SIZE = 1024,\t// Max stream buffer size in bytes\r\n\t\tDEBUG_CALLBACK_TIMEOUT = 2000,\r\n\t\tVOLUME_MIN = 0,\r\n\t\tVOLUME_MAX = 127\t\t// == 100%\r\n\t};\r\n\r\npublic:\r\n\tCMIDI();\r\n\tvirtual ~CMIDI();\r\n\tHANDLE\t\t\tm_hhLoopPlayEvent;\r\n\tBOOL\tCreate(LPVOID pSoundData, DWORD dwSize);\r\n\r\n\tBOOL\tPlay(BOOL bInfinite = FALSE);\r\n\tBOOL\tStop(BOOL bReOpen = TRUE);\r\n\tBOOL\tIsPlaying() const { return m_bPlaying; }\r\n\r\n\tBOOL\tPause();\r\n\tBOOL\tContinue();\r\n\tBOOL\tIsPaused() const { return m_bPaused; }\r\n\r\n\t\t// Set playback position back to the start\r\n\tBOOL\tRewind();\r\n\r\n\t\t// Get the number of volume channels\r\n\tDWORD\tGetChannelCount() const;\r\n\r\n\t\t// Set the volume of a channel in percent. Channels are from 0 to (GetChannelCount()-1)\r\n\tvoid\tSetChannelVolume(DWORD channel, DWORD percent);\r\n\r\n\t\t// Get the volume of a channel in percent\r\n\tDWORD\tGetChannelVolume(DWORD channel) const;\r\n\t\r\n\t\t// Set the volume for all channels in percent\r\n\tvoid\tSetVolume(DWORD percent);\r\n\r\n\t\t// Get the average volume for all channels\r\n\tDWORD\tGetVolume() const;\r\n\r\n\t\t// Set the tempo of the playback. Default: 100%\r\n\tvoid\tSetTempo(DWORD percent);\r\n\r\n\t\t// Get the current tempo in percent (usually 100)\r\n\tDWORD\tGetTempo() const;\r\n\r\n\t\t// You can (un)set an infinite loop during playback.\r\n\t\t// Note that \"Play()\" resets this setting!\r\n\tvoid\tSetInfinitePlay(BOOL bSet = TRUE);\r\n\r\nprotected:\t// implementation\r\n\t\t// This function converts MIDI data from the track buffers.\r\n\tint\t\tConvertToBuffer(DWORD dwFlags, CONVERTINFO * lpciInfo);\r\n\r\n\t\t// Fills in the event struct with the next event from the track\r\n\tBOOL\tGetTrackEvent(TRACK * ptsTrack, TEMPEVENT * pteTemp);\r\n\r\n\t\t// Retrieve the next byte from the track buffer, refilling the buffer from\r\n\t\t// disk if necessary.\r\n\tBOOL\tGetTrackByte(TRACK * ptsTrack, LPBYTE lpbyByte) {\r\n\t\t\t\tif( DWORD(ptsTrack->pTrackCurrent - ptsTrack->pTrackStart) == ptsTrack->dwTrackLength )\r\n\t\t\t\t\treturn FALSE;\r\n\t\t\t\t*lpbyByte = *ptsTrack->pTrackCurrent++;\r\n\t\t\t\treturn TRUE;\r\n\t\t\t}\r\n\r\n\t\t// Attempts to parse a variable length DWORD from the given track.\r\n\tBOOL\tGetTrackVDWord(TRACK * ptsTrack, LPDWORD lpdw);\r\n\r\n\t\t// Put the given event into the given stream buffer at the given location.\r\n\tint\t\tAddEventToStreamBuffer( TEMPEVENT * pteTemp, CONVERTINFO * lpciInfo );\r\n\r\n\t\t// Opens a MIDI stream. Then it goes about converting the data into a midiStream buffer for playback.\r\n\tBOOL\tStreamBufferSetup();\r\n\r\n\tvoid\tFreeBuffers();\r\n\r\n\r\nprotected:\t// error handling\r\n\t\t// The default implementation writes the error message in the\r\n\t\t// debuggers output window. Override if you want a different\r\n\t\t// behavior.\r\n\tvirtual void\tMidiError(MMRESULT Result);\r\n\r\n\t\t// Failure in converting track into stream.\r\n\t\t// The default implementation displays the offset and the total\r\n\t\t// number of bytes of the failed track and the error message in\r\n\t\t// the debuggers output window. \r\n\tvirtual void\tTrackError(TRACK *, LPSTR ErrMsg);\r\n\r\n\r\nprotected:\t// overridables\r\n\t\t// NOTE THAT, IF YOU OVERRIDE ONE OF THESE METHODS, YOU MUST CALL\r\n\t\t// THE BASE CLASS IMPLEMENTATION TOO!\r\n\r\n\t\t// called when a MIDI output device is opened\r\n\tvirtual void\tOnMidiOutOpen();\r\n\t\r\n\t\t// called when the MIDI output device is closed\r\n\tvirtual void\tOnMidiOutClose();\r\n\r\n\t\t// called when the specified system-exclusive or stream buffer\r\n\t\t// has been played and is being returned to the application\r\n\tvirtual void\tOnMidiOutDone(MIDIHDR &);\r\n\r\n\t\t// called when a MEVT_F_CALLBACK event is reached in the MIDI output stream\r\n\tvirtual void\tOnMidiOutPositionCB(MIDIHDR &, MIDIEVENT &);\r\n\r\n\r\nprivate:\t// callback procedure\r\n\t\t// This procedure calls the overridables above.\r\n\tstatic void\tCALLBACK\tMidiProc(HMIDIOUT, UINT, DWORD, DWORD, DWORD);\r\n\r\n\r\nprotected:\t// data members\r\n\tDWORD\t\t\tm_dwSoundSize;\r\n\tLPVOID\t\t\tm_pSoundData;\r\n\tDWORD\t\t\tm_dwFormat;\r\n\tDWORD\t\t\tm_dwTrackCount;\r\n\tDWORD\t\t\tm_dwTimeDivision;\r\n\tBOOL\t\t\tm_bPlaying;\r\n\tHMIDISTRM\t\tm_hStream;\r\n\tDWORD\t\t\tm_dwProgressBytes;\r\n\tBOOL\t\t\tm_bLooped;\r\n\tDWORD\t\t\tm_tkCurrentTime;\r\n\tDWORD\t\t\tm_dwBufferTickLength;\r\n\tDWORD\t\t\tm_dwCurrentTempo;\r\n\tDWORD\t\t\tm_dwTempoMultiplier;\r\n\tBOOL\t\t\tm_bInsertTempo;\r\n\tBOOL\t\t\tm_bBuffersPrepared;\r\n\tint\t\t\t\tm_nCurrentBuffer;\r\n\tUINT\t\t\tm_uMIDIDeviceID;\r\n\tint\t\t\t\tm_nEmptyBuffers;\r\n\tBOOL\t\t\tm_bPaused;\r\n\tUINT\t\t\tm_uCallbackStatus;\r\n\tHANDLE\t\t\tm_hBufferReturnEvent;\r\n\tTrackArray_t\tm_Tracks;\r\n\tVolumeArray_t\tm_Volumes;\r\n\tConvertArray_t\tm_StreamBuffers;\r\n\r\n\t// data members especially for ConvertToBuffer()\r\n    TRACK *\t\t\tm_ptsTrack;\r\n\tTRACK *\t\t\tm_ptsFound;\r\n    DWORD\t\t\tm_dwStatus;\r\n    DWORD\t\t\tm_tkNext;\r\n\tDWORD\t\t\tm_dwMallocBlocks;\r\n    TEMPEVENT\t\tm_teTemp;\r\n};\r\n\r\n//{{AFX_INSERT_LOCATION}}\r\n// Microsoft Developer Studio will insert additional declarations immediately before the previous line.\r\n\r\n#endif // MIDI_h\r\n"
  },
  {
    "path": "krnln/replaceText.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"mem.h\"\r\n#include \"Myfunctions.h\"\r\n/*\r\nBOOL replaceText(LPSTR& pDest,LPSTR pSub,LPSTR pRplStr,BOOL bNeedFree)\r\n{\r\n//ͳҵĴͻ峤\r\n\tINT nSubLen =strlen(pSub);\r\n\tINT nLen = strlen(pDest);\r\n\tchar* pStart = pDest;\r\n\tchar* pEnd = pDest+nLen-nSubLen;\r\n\r\n\tINT nFind = 0;\r\n\twhile(pStart <= pEnd)\r\n\t{\r\n\t\tif(strncmp(pStart,pSub,nSubLen)==0)\r\n\t\t{\r\n\t\t\tnFind++;\r\n\t\t\tpStart+=nSubLen;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(*pStart<0)\r\n\t\t\t\tpStart+=2;\r\n\t\t\telse\r\n\t\t\t\tpStart++;\r\n\t\t}\r\n\t}\r\n\tif(nFind==0)\r\n\t{\r\n\t\treturn FALSE;\r\n\t}\r\n\tINT nStrRpl = strlen(pRplStr);\r\n\r\n\tINT nBuf = nLen + (nStrRpl - nSubLen) * nFind;\r\n\tchar *pText = (char*)malloc(nBuf+1);\r\n\tchar* pszDest = pText;\r\n\t\r\n\r\n\r\n//ʼ滻\r\n\tpStart = pDest;\r\n\tpEnd = pDest+nLen-nSubLen;\r\n\tchar* pSrc = pDest;\r\n\twhile(pStart <= pEnd)\r\n\t{\r\n\t\tif(strncmp(pStart,pSub,nSubLen)==0)\r\n\t\t{\r\n\t\t\tINT nStr = pStart - pSrc;\r\n\t\t\tif(nStr)\r\n\t\t\t{\r\n\t\t\t\tstrncpy(pszDest,pSrc,nStr);//ϴζ\r\n\t\t\t\tpszDest+=nStr;\r\n\t\t\t\t*pszDest =0;\r\n\t\t\t}\r\n\t\t\t\t\r\n\t\t\tstrncpy(pszDest,pRplStr,nStrRpl);//滻ı\r\n\t\t\tpszDest+=nStrRpl;\r\n\t\t\t*pszDest =0;\r\n\t\t\t\r\n\r\n\t\r\n\t\t\tpStart+=nSubLen;//һ;\r\n\t\t\tpSrc = pStart; //һ;\r\n\t\t\tnFind--;\r\n\t\t\tif(nFind == 0)\r\n\t\t\t{\r\n\t\t\t\tif(pStart <= pEnd)\r\n\t\t\t\t\tstrcat(pText,pStart);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(*pStart<0)\r\n\t\t\t\tpStart+=2;\r\n\t\t\telse\r\n\t\t\t\tpStart++;\r\n\t\t}\r\n\t}\r\n\r\n\tpText [nBuf]=0;\r\n\tif(bNeedFree)\r\n\t\tfree(pDest);\r\n\tpDest = pText;\r\n\t\r\n\treturn TRUE;\r\n\r\n\r\n}*/\r\nBOOL replaceText(LPSTR& pDest,LPSTR pSub,LPSTR pRplStr,BOOL bNeedFree){\r\n//ʼ滻\r\n\tCFreqMem cDest;\r\n\r\n\tchar* pStart = pDest;\r\n\tchar* pEnd = pDest + mystrlen(pDest);\r\n\tINT nFind = 0;\r\n\tchar* pSrc = pDest;\r\n\tINT nLen = mystrlen(pDest);\r\n\tINT nStrRpl = mystrlen(pRplStr);\r\n\tINT nSubLen = mystrlen(pSub);\r\n\twhile(pStart < pEnd)\r\n\t{\r\n\t\tif(strncmp(pStart,pSub,nSubLen)==0)\r\n\t\t{\r\n\t\t\tINT nStr = pStart - pSrc;\r\n\t\t\tcDest.Append((LPBYTE)pSrc,nStr);//ϴζ\r\n\t\t\tif(pRplStr)\r\n\t\t\t\tcDest.Append((LPBYTE)pRplStr,nStrRpl);//滻ı\r\n\t\t\t\r\n\t\t\tpStart+=nSubLen;\r\n\t\t\tpSrc = pStart; //һ;\r\n\t\t\tnFind++;\r\n\t\t\t\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(*pStart<0)\r\n\t\t\t\tpStart+=2;\r\n\t\t\telse\r\n\t\t\t\tpStart++;\r\n\t\t}\r\n\t}\r\n\tif(nFind==0){\r\n\t\tcDest.Free();\r\n\t\treturn FALSE;\r\n\t}\r\n\tif(pStart - pDest<= nLen){\r\n\t\tINT nLen = tcsallbytes(pSrc);\r\n\t\tcDest.Append((LPBYTE)pSrc, nLen);\r\n\t}\r\n\r\n\r\n\tINT nBufLen = nLen+1;\r\n\tchar* m_pText = (char*)malloc(nBufLen);\r\n\tmemset(m_pText,0,nBufLen);\r\n\tmemcpy(m_pText,cDest.GetPtr(),cDest.GetSize());\r\n\tcDest.Free();\r\n\r\n\tif(bNeedFree)\r\n\t\tfree(pDest);\r\n\tpDest=m_pText;\r\n\tbNeedFree = TRUE;\r\n\r\n\treturn TRUE;\r\n}"
  },
  {
    "path": "krnln_VC6.dsw",
    "content": "Microsoft Developer Studio Workspace File, Format Version 6.00\r\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\r\n\r\n###############################################################################\r\n\r\nProject: \"krnln\"=.\\Project\\krnln_VC6.dsp - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n}}}\r\n\r\n###############################################################################\r\n\r\nProject: \"krnln_Obj\"=.\\Project\\krnln_VC6_Obj.dsp - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n}}}\r\n\r\n###############################################################################\r\n\r\nProject: \"MFC_Obj\"=.\\Project\\MFCBlackMoon_VC6.dsp - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n}}}\r\n\r\n###############################################################################\r\n\r\nGlobal:\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<3>\r\n{{{\r\n}}}\r\n\r\n###############################################################################\r\n\r\n"
  },
  {
    "path": "krnln_VS2019.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.29519.87\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"krnln\", \"Project\\krnln_VS2019.vcxproj\", \"{90C7C825-74BF-4F91-BF9C-4A1E762F24B9}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"krnln_Obj\", \"Project\\krnln_VS2019_Obj.vcxproj\", \"{9EF1C5E2-3C57-47CE-9F68-DACA1CD298D4}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"MFCBlackMoon\", \"Project\\MFCBlackMoon_VS2019.vcxproj\", \"{302FE4C1-503E-476A-AD7B-D6768D2E0158}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tDebug|x86 = Debug|x86\r\n\t\tRelease|x64 = Release|x64\r\n\t\tRelease|x86 = Release|x86\r\n\t\tReleaseDll|x64 = ReleaseDll|x64\r\n\t\tReleaseDll|x86 = ReleaseDll|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{90C7C825-74BF-4F91-BF9C-4A1E762F24B9}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{90C7C825-74BF-4F91-BF9C-4A1E762F24B9}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{90C7C825-74BF-4F91-BF9C-4A1E762F24B9}.Debug|x86.ActiveCfg = Debug|Win32\r\n\t\t{90C7C825-74BF-4F91-BF9C-4A1E762F24B9}.Debug|x86.Build.0 = Debug|Win32\r\n\t\t{90C7C825-74BF-4F91-BF9C-4A1E762F24B9}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{90C7C825-74BF-4F91-BF9C-4A1E762F24B9}.Release|x64.Build.0 = Release|x64\r\n\t\t{90C7C825-74BF-4F91-BF9C-4A1E762F24B9}.Release|x86.ActiveCfg = Release|Win32\r\n\t\t{90C7C825-74BF-4F91-BF9C-4A1E762F24B9}.Release|x86.Build.0 = Release|Win32\r\n\t\t{90C7C825-74BF-4F91-BF9C-4A1E762F24B9}.ReleaseDll|x64.ActiveCfg = Release|x64\r\n\t\t{90C7C825-74BF-4F91-BF9C-4A1E762F24B9}.ReleaseDll|x64.Build.0 = Release|x64\r\n\t\t{90C7C825-74BF-4F91-BF9C-4A1E762F24B9}.ReleaseDll|x86.ActiveCfg = Release|Win32\r\n\t\t{90C7C825-74BF-4F91-BF9C-4A1E762F24B9}.ReleaseDll|x86.Build.0 = Release|Win32\r\n\t\t{9EF1C5E2-3C57-47CE-9F68-DACA1CD298D4}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{9EF1C5E2-3C57-47CE-9F68-DACA1CD298D4}.Debug|x86.ActiveCfg = Debug|Win32\r\n\t\t{9EF1C5E2-3C57-47CE-9F68-DACA1CD298D4}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{9EF1C5E2-3C57-47CE-9F68-DACA1CD298D4}.Release|x86.ActiveCfg = Release|Win32\r\n\t\t{9EF1C5E2-3C57-47CE-9F68-DACA1CD298D4}.ReleaseDll|x64.ActiveCfg = Release|x64\r\n\t\t{9EF1C5E2-3C57-47CE-9F68-DACA1CD298D4}.ReleaseDll|x64.Build.0 = Release|x64\r\n\t\t{9EF1C5E2-3C57-47CE-9F68-DACA1CD298D4}.ReleaseDll|x86.ActiveCfg = Release|Win32\r\n\t\t{302FE4C1-503E-476A-AD7B-D6768D2E0158}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{302FE4C1-503E-476A-AD7B-D6768D2E0158}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{302FE4C1-503E-476A-AD7B-D6768D2E0158}.Debug|x86.ActiveCfg = Debug|Win32\r\n\t\t{302FE4C1-503E-476A-AD7B-D6768D2E0158}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{302FE4C1-503E-476A-AD7B-D6768D2E0158}.Release|x64.Build.0 = Release|x64\r\n\t\t{302FE4C1-503E-476A-AD7B-D6768D2E0158}.Release|x86.ActiveCfg = Release|Win32\r\n\t\t{302FE4C1-503E-476A-AD7B-D6768D2E0158}.ReleaseDll|x64.ActiveCfg = ReleaseDll|x64\r\n\t\t{302FE4C1-503E-476A-AD7B-D6768D2E0158}.ReleaseDll|x64.Build.0 = ReleaseDll|x64\r\n\t\t{302FE4C1-503E-476A-AD7B-D6768D2E0158}.ReleaseDll|x86.ActiveCfg = ReleaseDll|Win32\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {86CE5FFF-CA06-48E5-9A32-FDA961C5F884}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  }
]