123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375 |
- #ifndef WIN32
- # define WIN32
- #endif
- #define API
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <time.h>
- #include <string.h>
- #ifdef __BORLANDC__
- #include <dir.h>
- #else
- #include <direct.h>
- #endif
- #include "example.h"
- #include "zipver.h"
- #ifdef WIN32
- #include <commctrl.h>
- #include <winver.h>
- #else
- #include <ver.h>
- #endif
- #ifdef WIN32
- #define ZIP_DLL_NAME "ZIP32.DLL\0"
- #else
- #define ZIP_DLL_NAME "ZIP16.DLL\0"
- #endif
- #define DLL_WARNING "Cannot find %s."\
- " The Dll must be in the application directory, the path, "\
- "the Windows directory or the Windows System directory."
- #define DLL_VERSION_WARNING "%s has the wrong version number."\
- " Insure that you have the correct dll's installed, and that "\
- "an older dll is not in your path or Windows System directory."
- int hFile;
- ZCL ZpZCL;
- LPZIPUSERFUNCTIONS lpZipUserFunctions;
- HANDLE hZUF = (HANDLE)NULL;
- HINSTANCE hUnzipDll;
- HANDLE hFileList;
- ZPOPT ZpOpt;
- #ifdef WIN32
- DWORD dwPlatformId = 0xFFFFFFFF;
- #endif
- HINSTANCE hZipDll;
- _DLL_ZIP ZipArchive;
- _ZIP_USER_FUNCTIONS ZipInit;
- ZIPSETOPTIONS ZipSetOptions;
- void FreeUpMemory(void);
- int WINAPI DummyPassword(LPSTR, int, LPCSTR, LPCSTR);
- int WINAPI DummyPrint(char far *, unsigned long);
- int WINAPI WINAPI DummyComment(char far *);
- #ifdef WIN32
- BOOL IsNT(VOID);
- #endif
- #ifdef __BORLANDC__
- # ifdef WIN32
- #pragma argsused
- # endif
- #endif
- int main(int argc, char **argv)
- {
- LPSTR szFileList;
- char **index, *sz;
- int retcode, i, cc;
- DWORD dwVerInfoSize;
- DWORD dwVerHnd;
- char szFullPath[PATH_MAX];
- #ifdef WIN32
- char *ptr;
- #else
- HFILE hfile;
- OFSTRUCT ofs;
- #endif
- HANDLE hMem;
- if (argc < 3)
- return 0;
- hZUF = GlobalAlloc( GPTR, (DWORD)sizeof(ZIPUSERFUNCTIONS));
- if (!hZUF)
- {
- return 0;
- }
- lpZipUserFunctions = (LPZIPUSERFUNCTIONS)GlobalLock(hZUF);
- if (!lpZipUserFunctions)
- {
- GlobalFree(hZUF);
- return 0;
- }
- lpZipUserFunctions->print = DummyPrint;
- lpZipUserFunctions->password = DummyPassword;
- lpZipUserFunctions->comment = DummyComment;
- #ifdef WIN32
- if (SearchPath(
- NULL,
- ZIP_DLL_NAME,
- NULL,
- PATH_MAX,
- szFullPath,
- &ptr
- ) == 0)
- #else
- hfile = OpenFile(ZIP_DLL_NAME, &ofs, OF_SEARCH);
- if (hfile == HFILE_ERROR)
- #endif
- {
- char str[256];
- wsprintf (str, DLL_WARNING, ZIP_DLL_NAME);
- printf("%s\n", str);
- FreeUpMemory();
- return 0;
- }
- #ifndef WIN32
- else
- lstrcpy(szFullPath, ofs.szPathName);
- _lclose(hfile);
- #endif
- dwVerInfoSize =
- GetFileVersionInfoSize(szFullPath, &dwVerHnd);
- if (dwVerInfoSize)
- {
- BOOL fRet, fRetName;
- char str[256];
- LPSTR lpstrVffInfo;
- LPSTR lszVer = NULL;
- LPSTR lszVerName = NULL;
- UINT cchVer = 0;
-
- hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);
- lpstrVffInfo = GlobalLock(hMem);
-
- GetFileVersionInfo(szFullPath, 0L, dwVerInfoSize, lpstrVffInfo);
- fRet = VerQueryValue(lpstrVffInfo,
- TEXT("\\StringFileInfo\\040904E4\\FileVersion"),
- (LPVOID)&lszVer,
- &cchVer);
- fRetName = VerQueryValue(lpstrVffInfo,
- TEXT("\\StringFileInfo\\040904E4\\CompanyName"),
- (LPVOID)&lszVerName,
- &cchVer);
- if (!fRet || !fRetName ||
- (lstrcmpi(lszVer, ZIP_DLL_VERSION) != 0) ||
- (lstrcmpi(lszVerName, COMPANY_NAME) != 0))
- {
- wsprintf (str, DLL_VERSION_WARNING, ZIP_DLL_NAME);
- printf("%s\n", str);
- FreeUpMemory();
- return 0;
- }
-
- GlobalUnlock(hMem);
- GlobalFree(hMem);
- }
- else
- {
- char str[256];
- wsprintf (str, DLL_VERSION_WARNING, ZIP_DLL_NAME);
- printf("%s\n", str);
- FreeUpMemory();
- return 0;
- }
- hZipDll = LoadLibrary(ZIP_DLL_NAME);
- #ifndef WIN32
- if (hZipDll > HINSTANCE_ERROR)
- #else
- if (hZipDll != NULL)
- #endif
- {
- (_DLL_ZIP)ZipArchive = (_DLL_ZIP)GetProcAddress(hZipDll, "ZpArchive");
- (ZIPSETOPTIONS)ZipSetOptions = (ZIPSETOPTIONS)GetProcAddress(hZipDll, "ZpSetOptions");
- if (!ZipArchive || !ZipSetOptions)
- {
- char str[256];
- wsprintf (str, "Could not get entry point to %s", ZIP_DLL_NAME);
- MessageBox((HWND)NULL, str, "Info-ZIP Example", MB_ICONSTOP | MB_OK);
- FreeUpMemory();
- return 0;
- }
- }
- else
- {
- char str[256];
- wsprintf (str, "Could not load %s", ZIP_DLL_NAME);
- printf("%s\n", str);
- FreeUpMemory();
- return 0;
- }
- (_ZIP_USER_FUNCTIONS)ZipInit = (_ZIP_USER_FUNCTIONS)GetProcAddress(hZipDll, "ZpInit");
- if (!ZipInit)
- {
- printf("Cannot get address of ZpInit in Zip dll. Terminating...");
- FreeLibrary(hZipDll);
- FreeUpMemory();
- return 0;
- }
- if (!(*ZipInit)(lpZipUserFunctions))
- {
- printf("Application functions not set up properly. Terminating...");
- FreeLibrary(hZipDll);
- FreeUpMemory();
- return 0;
- }
- ZpOpt.fSuffix = FALSE;
- ZpOpt.fEncrypt = FALSE;
- ZpOpt.fSystem = FALSE;
- ZpOpt.fVolume = FALSE;
- ZpOpt.fExtra = FALSE;
- ZpOpt.fNoDirEntries = FALSE;
- ZpOpt.fVerbose = FALSE;
- ZpOpt.fQuiet = FALSE;
- ZpOpt.fCRLF_LF = FALSE;
- ZpOpt.fLF_CRLF = FALSE;
- ZpOpt.fJunkDir = FALSE;
- ZpOpt.fGrow = FALSE;
- ZpOpt.fForce = FALSE;
- ZpOpt.fMove = FALSE;
- ZpOpt.fUpdate = FALSE;
- ZpOpt.fFreshen = FALSE;
- ZpOpt.fJunkSFX = FALSE;
- ZpOpt.fLatestTime = FALSE;
- ZpOpt.fComment = FALSE;
- ZpOpt.fOffsets = FALSE;
- ZpOpt.fDeleteEntries = FALSE;
- ZpOpt.fRecurse = 0;
- ZpOpt.fRepair = 0;
- ZpOpt.Date = NULL;
- getcwd(szFullPath, PATH_MAX);
- ZpOpt.szRootDir = szFullPath;
- ZpZCL.argc = argc - 2;
- ZpZCL.lpszZipFN = argv[1];
- hFileList = GlobalAlloc( GPTR, 0x10000L);
- if ( hFileList )
- {
- szFileList = (char far *)GlobalLock(hFileList);
- }
- index = (char **)szFileList;
- cc = (sizeof(char *) * ZpZCL.argc);
- sz = szFileList + cc;
- for (i = 0; i < ZpZCL.argc; i++)
- {
- cc = lstrlen(argv[i+2]);
- lstrcpy(sz, argv[i+2]);
- index[i] = sz;
- sz += (cc + 1);
- }
- ZpZCL.FNV = (char **)szFileList;
- ZipSetOptions(&ZpOpt);
- retcode = ZipArchive(ZpZCL);
- if (retcode != 0)
- printf("Error in archiving\n");
- GlobalUnlock(hFileList);
- GlobalFree(hFileList);
- FreeUpMemory();
- FreeLibrary(hZipDll);
- return 1;
- }
- void FreeUpMemory(void)
- {
- if (hZUF)
- {
- GlobalUnlock(hZUF);
- GlobalFree(hZUF);
- }
- }
- #ifdef WIN32
- BOOL IsNT(VOID)
- {
- if(dwPlatformId != 0xFFFFFFFF)
- return dwPlatformId;
- else
- {
- if(GetVersion() < 0x80000000)
- {
- (BOOL)dwPlatformId = TRUE;
- }
- else
- {
- (BOOL)dwPlatformId = FALSE;
- }
- }
- return dwPlatformId;
- }
- #endif
- int WINAPI DummyPassword(LPSTR p, int n, LPCSTR m, LPCSTR name)
- {
- return 1;
- }
- int WINAPI DummyPrint(char far *buf, unsigned long size)
- {
- printf("%s", buf);
- return (unsigned int) size;
- }
- int WINAPI DummyComment(char far *szBuf)
- {
- szBuf[0] = '\0';
- return TRUE;
- }
|