123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- /*
- windll/windll.c - Zip 3
- Copyright (c) 1990-2004 Info-ZIP. All rights reserved.
- See the accompanying file LICENSE, version 2003-May-08 or later
- (the contents of which are also included in zip.h) for terms of use.
- If, for some reason, all these files are missing, the Info-ZIP license
- also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html
- */
- /*
- * windll.c by Mike White loosly based on Mark Adler's zip.c
- */
- #include <windows.h>
- #include <process.h>
- #include <signal.h>
- #include <stdarg.h>
- #include <ctype.h>
- #include "../zip.h"
- #include "windll.h"
- HINSTANCE hCurrentInst;
- #ifdef ZIPLIB
- /* DLL Entry Point */
- #ifdef __BORLANDC__
- #pragma argsused
- /* Borland seems to want DllEntryPoint instead of DllMain like MSVC */
- #define DllMain DllEntryPoint
- #endif
- #ifdef WIN32
- BOOL WINAPI DllMain( HINSTANCE hInstance,
- DWORD dwReason,
- LPVOID plvReserved)
- #else
- int WINAPI LibMain( HINSTANCE hInstance,
- WORD wDataSegment,
- WORD wHeapSize,
- LPSTR lpszCmdLine )
- #endif
- {
- #ifndef WIN32
- /* The startup code for the DLL initializes the local heap(if there is one)
- with a call to LocalInit which locks the data segment. */
- if ( wHeapSize != 0 )
- {
- UnlockData( 0 );
- }
- hCurrentInst = hInstance;
- return 1; /* Indicate that the DLL was initialized successfully. */
- #else
- BOOL rc = TRUE;
- switch( dwReason )
- {
- case DLL_PROCESS_ATTACH:
- // DLL is loaded. Do your initialization here.
- // If cannot init, set rc to FALSE.
- hCurrentInst = hInstance;
- break;
- case DLL_PROCESS_DETACH:
- // DLL is unloaded. Do your cleanup here.
- break;
- default:
- break;
- }
- return rc;
- #endif
- }
- #ifdef __BORLANDC__
- #pragma argsused
- #endif
- int FAR PASCAL WEP ( int bSystemExit )
- {
- return 1;
- }
- #endif /* ZIPLIB */
- LPSTR szCommentBuf;
- HANDLE hStr;
- void comment(unsigned int comlen)
- {
- unsigned int i;
- if (comlen > 65534L)
- comlen = (unsigned int) 65534L;
- hStr = GlobalAlloc( GPTR, (DWORD)65535L);
- if ( !hStr )
- {
- hStr = GlobalAlloc( GPTR, (DWORD) 2);
- szCommentBuf = GlobalLock(hStr);
- szCommentBuf[0] = '\0';
- return;
- }
- szCommentBuf = GlobalLock(hStr);
- if (comlen)
- {
- for (i = 0; i < comlen; i++)
- szCommentBuf[i] = zcomment[i];
- szCommentBuf[comlen] = '\0';
- }
- else
- szCommentBuf[0] = '\0';
- free(zcomment);
- zcomment = malloc(1);
- *zcomment = 0;
- lpZipUserFunctions->comment(szCommentBuf);
- return;
- }
- #define STDIO_BUF_SIZE 16384
- int __far __cdecl printf(const char *format, ...)
- {
- va_list argptr;
- HANDLE hMemory;
- LPSTR pszBuffer;
- int len;
- va_start(argptr, format);
- hMemory = GlobalAlloc(GMEM_MOVEABLE, STDIO_BUF_SIZE);
- WinAssert(hMemory);
- if (!hMemory)
- {
- return 0;
- }
- pszBuffer = (LPSTR)GlobalLock(hMemory);
- WinAssert(pszBuffer);
- len = wvsprintf(pszBuffer, format, argptr);
- va_end(argptr);
- WinAssert(strlen(pszBuffer) < STDIO_BUF_SIZE);
- len = lpZipUserFunctions->print(pszBuffer, len);
- GlobalUnlock(hMemory);
- GlobalFree(hMemory);
- return len;
- }
- /* fprintf clone for code in zip.c, etc. */
- int __far __cdecl fprintf(FILE *file, const char *format, ...)
- {
- va_list argptr;
- HANDLE hMemory;
- LPSTR pszBuffer;
- int len;
- va_start(argptr, format);
- hMemory = GlobalAlloc(GMEM_MOVEABLE, STDIO_BUF_SIZE);
- WinAssert(hMemory);
- if (!hMemory)
- {
- return 0;
- }
- pszBuffer = GlobalLock(hMemory);
- WinAssert(pszBuffer);
- len = wvsprintf(pszBuffer, format, argptr);
- va_end(argptr);
- WinAssert(strlen(pszBuffer) < STDIO_BUF_SIZE);
- if ((file == stderr) || (file == stdout))
- {
- len = lpZipUserFunctions->print(pszBuffer, len);
- }
- else
- len = write(fileno(file),(char far *)(pszBuffer), len);
- GlobalUnlock(hMemory);
- GlobalFree(hMemory);
- return len;
- }
- void __far __cdecl perror(const char *parm1)
- {
- printf("%s", parm1);
- }
|