home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 June / Chip_2002-06_cd1.bin / zkuste / wincom / download / mltwcx.1.0.0.8-src.cab / mltwcx-src / multiarc.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-12-16  |  2.6 KB  |  112 lines

  1. // multiarc.cpp : Defines the entry point for the DLL application.
  2. //
  3.  
  4. #include "stdafx.h"
  5.  
  6. #include "ArchiverManager.h"
  7.  
  8. #define E_EGENERALERROR 27
  9.  
  10. HINSTANCE g_hInstance;
  11. CArchiverManager aman;
  12.  
  13. char g_szMultiarcPath[MAX_PATH];
  14. char g_szMultiarcTempPath[MAX_PATH];
  15.  
  16. BOOL InitializeArcMan()
  17. {
  18.     char szFullPath[MAX_PATH],szDrive[_MAX_DRIVE],szPath[MAX_PATH],
  19.             szName[_MAX_FNAME],szExt[_MAX_EXT];
  20.     GetModuleFileName(g_hInstance,szFullPath,MAX_PATH);
  21.     _splitpath(szFullPath,szDrive,szPath,szName,szExt);
  22.     strcpy(szExt,"ini");
  23.     _makepath(szFullPath,szDrive,szPath,szName,szExt);
  24.     _makepath(g_szMultiarcPath,szDrive,szPath,0,0);
  25.     aman.LoadArchiveDescriptions(szFullPath);
  26.  
  27.     GetTempPath(MAX_PATH,g_szMultiarcTempPath);
  28.     lstrcat(g_szMultiarcTempPath,"$mltwcx");
  29.     CreateDirectory(g_szMultiarcTempPath,0);
  30.  
  31.     return TRUE;
  32. }
  33.  
  34. BOOL APIENTRY DllMain( HANDLE hModule, 
  35.                        DWORD  ul_reason_for_call, 
  36.                        LPVOID lpReserved
  37.                      )
  38. {
  39.     switch(ul_reason_for_call)
  40.     {
  41.     case DLL_PROCESS_ATTACH:
  42.         g_hInstance=(HINSTANCE)hModule;
  43.         return InitializeArcMan();
  44.     }
  45.     return TRUE;
  46. }
  47.  
  48. int __stdcall OpenArchive(tOpenArchiveData* ArchiveData)
  49. {
  50.     return (int) aman.OpenArchive(ArchiveData);
  51. }
  52.  
  53. int __stdcall CloseArchive(int hArcData)
  54. {
  55.     return aman.CloseArchive((CArchiverEngine *)hArcData);
  56. }
  57.  
  58. int __stdcall ReadHeader(int hArcData,tHeaderData* HeaderData)
  59.     CArchiverEngine *engine=(CArchiverEngine *)hArcData;
  60.     return engine->ReadHeader(HeaderData);
  61. }
  62.  
  63. int __stdcall ProcessFile(int hArcData,int Operation,char* DestPath,char* DestName)
  64. {
  65.     CArchiverEngine *engine=(CArchiverEngine *)hArcData;
  66.  
  67.     if(Operation == PK_SKIP)
  68.         return 0;
  69.  
  70.     int iRet=E_EREAD;
  71.     switch(Operation)
  72.     {
  73.     case PK_EXTRACT:
  74.         iRet=(engine->ExtractFile(DestPath,DestName))?0:E_EGENERALERROR;
  75.         break;
  76.     case PK_TEST:
  77.         iRet=(engine->TestArchive())?0:E_EGENERALERROR;
  78.         break;
  79.     }
  80.     return iRet;
  81. }
  82.  
  83. int __stdcall PackFiles(char *PackedFile,char *SubPath,char *SrcPath,
  84.       char *AddList,int Flags)
  85. {
  86.     tOpenArchiveData data;
  87.     data.ArcName=PackedFile;
  88.     CArchiverEngine *engine=aman.OpenArchive(&data,TRUE);
  89.     if(!data.OpenResult)
  90.     {
  91.         bool bRet=engine->PackFiles(SubPath,SrcPath,AddList,Flags);
  92.         aman.CloseArchive(engine);
  93.         return bRet?0:E_EGENERALERROR;
  94.     }
  95.     return E_EGENERALERROR;
  96. }
  97.  
  98. int __stdcall DeleteFiles(char *PackedFile,char *DeleteList)
  99. {
  100.     tOpenArchiveData data;
  101.     data.ArcName=PackedFile;
  102.     CArchiverEngine *engine=aman.OpenArchive(&data);
  103.     if(!data.OpenResult)
  104.     {
  105.         bool bRet=engine->DeleteFiles(DeleteList);
  106.         aman.CloseArchive(engine);
  107.         return bRet?0:E_EGENERALERROR;
  108.     }
  109.     return E_EGENERALERROR;
  110. }
  111.