mirror of https://github.com/madler/zlib.git
parent
ebd3c2c0e7
commit
7850e4e406
58 changed files with 4613 additions and 524 deletions
@ -0,0 +1,21 @@ |
|||||||
|
All files under this contrib directory are UNSUPPORTED. There were |
||||||
|
provided by users of zlib and were not tested by the authors of zlib. |
||||||
|
Use at your own risk. Please contact the authors of the contributions |
||||||
|
for help about these, not the zlib authors. Thanks. |
||||||
|
|
||||||
|
|
||||||
|
asm386/ by Gilles Vollant <info@winimage.com> |
||||||
|
386 asm code replacing longest_match(). This code may be slower |
||||||
|
than the C code if you have a good compiler. |
||||||
|
|
||||||
|
iostream/ by Kevin Ruland <kevin@rodin.wustl.edu> |
||||||
|
A C++ I/O streams interface to the zlib gz* functions |
||||||
|
|
||||||
|
iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no> |
||||||
|
Another C++ I/O streams interface |
||||||
|
|
||||||
|
untgz/ by "Pedro A. Aranda Guti\irrez" <paag@tid.es> |
||||||
|
A very simple tar.gz file extractor using zlib |
||||||
|
|
||||||
|
visual-basic.txt by Carlos Rios <c_rios@sonda.cl> |
||||||
|
How to use compress(), uncompress() and the gz* functions from VB. |
@ -0,0 +1,464 @@ |
|||||||
|
; |
||||||
|
; gvmat32.asm -- Asm portion of the optimized longest_match for 32 bits x86 |
||||||
|
; Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant. |
||||||
|
; File written by Gilles Vollant, by modifiying the longest_match |
||||||
|
; from Jean-loup Gailly in deflate.c |
||||||
|
; It need wmask == 0x7fff |
||||||
|
; (assembly code is faster with a fixed wmask) |
||||||
|
; |
||||||
|
; For Visual C++ 4.2 and ML 6.11c (version in directory \MASM611C of Win95 DDK) |
||||||
|
; I compile with : "ml /coff /Zi /c gvmat32.asm" |
||||||
|
; |
||||||
|
; uInt longest_match_gvasm(IPos cur_match,int* match_start_ptr,uInt scan_end, |
||||||
|
; uInt scan_start,ush* prev,uch* window,int best_len, |
||||||
|
; IPos limit,uInt chain_length,uch* scanrp, |
||||||
|
; uInt nice_match); |
||||||
|
|
||||||
|
;uInt longest_match(s, cur_match) |
||||||
|
; deflate_state *s; |
||||||
|
; IPos cur_match; /* current match */ |
||||||
|
|
||||||
|
NbStack equ 76 |
||||||
|
cur_match equ dword ptr[esp+NbStack-0] |
||||||
|
str_s equ dword ptr[esp+NbStack-4] |
||||||
|
; 5 dword on top (ret,ebp,esi,edi,ebx) |
||||||
|
adrret equ dword ptr[esp+NbStack-8] |
||||||
|
pushebp equ dword ptr[esp+NbStack-12] |
||||||
|
pushedi equ dword ptr[esp+NbStack-16] |
||||||
|
pushesi equ dword ptr[esp+NbStack-20] |
||||||
|
pushebx equ dword ptr[esp+NbStack-24] |
||||||
|
|
||||||
|
chain_length equ dword ptr [esp+NbStack-28] |
||||||
|
limit equ dword ptr [esp+NbStack-32] |
||||||
|
best_len equ dword ptr [esp+NbStack-36] |
||||||
|
window equ dword ptr [esp+NbStack-40] |
||||||
|
prev equ dword ptr [esp+NbStack-44] |
||||||
|
scan_start equ word ptr [esp+NbStack-48] |
||||||
|
scan_end equ word ptr [esp+NbStack-52] |
||||||
|
match_start_ptr equ dword ptr [esp+NbStack-56] |
||||||
|
nice_match equ dword ptr [esp+NbStack-60] |
||||||
|
scanrp equ dword ptr [esp+NbStack-64] |
||||||
|
|
||||||
|
windowlen equ dword ptr [esp+NbStack-68] |
||||||
|
match_start equ dword ptr [esp+NbStack-72] |
||||||
|
strend equ dword ptr [esp+NbStack-76] |
||||||
|
NbStackAdd equ (76-24) |
||||||
|
|
||||||
|
.386p |
||||||
|
|
||||||
|
name gvmatch |
||||||
|
.MODEL FLAT |
||||||
|
|
||||||
|
|
||||||
|
@lmtype TYPEDEF PROTO C :PTR , :SDWORD |
||||||
|
longest_match_c PROTO @lmtype |
||||||
|
|
||||||
|
dep_max_chain_length equ 70h |
||||||
|
dep_window equ 2ch |
||||||
|
dep_strstart equ 60h |
||||||
|
dep_prev_length equ 6ch |
||||||
|
dep_nice_match equ 84h |
||||||
|
dep_w_size equ 20h |
||||||
|
dep_prev equ 34h |
||||||
|
dep_w_mask equ 28h |
||||||
|
dep_good_match equ 80h |
||||||
|
dep_match_start equ 64h |
||||||
|
dep_lookahead equ 68h |
||||||
|
|
||||||
|
|
||||||
|
_TEXT segment |
||||||
|
public _longest_match_asm7fff |
||||||
|
|
||||||
|
MAX_MATCH equ 258 |
||||||
|
MIN_MATCH equ 3 |
||||||
|
MIN_LOOKAHEAD equ (MAX_MATCH+MIN_MATCH+1) |
||||||
|
|
||||||
|
; initialize or check the variables used in match.asm. |
||||||
|
|
||||||
|
|
||||||
|
; ----------------------------------------------------------------------- |
||||||
|
; Set match_start to the longest match starting at the given string and |
||||||
|
; return its length. Matches shorter or equal to prev_length are discarded, |
||||||
|
; in which case the result is equal to prev_length and match_start is |
||||||
|
; garbage. |
||||||
|
; IN assertions: cur_match is the head of the hash chain for the current |
||||||
|
; string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 |
||||||
|
|
||||||
|
; int longest_match(cur_match) |
||||||
|
|
||||||
|
_longest_match_asm7fff proc near |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; return address |
||||||
|
|
||||||
|
mov eax,[esp+4] |
||||||
|
mov bx,[eax+dep_w_mask] |
||||||
|
cmp bx,7fffh |
||||||
|
jnz longest_match_c |
||||||
|
|
||||||
|
push ebp |
||||||
|
push edi |
||||||
|
push esi |
||||||
|
push ebx |
||||||
|
|
||||||
|
sub esp,NbStackAdd |
||||||
|
|
||||||
|
;//mov ebp,str_s |
||||||
|
mov ebp,eax |
||||||
|
|
||||||
|
mov eax,[ebp+dep_max_chain_length] |
||||||
|
mov ebx,[ebp+dep_prev_length] |
||||||
|
cmp [ebp+dep_good_match],ebx ; if prev_length>=good_match chain_length >>= 2 |
||||||
|
ja noshr |
||||||
|
shr eax,2 |
||||||
|
noshr: |
||||||
|
mov edi,[ebp+dep_nice_match] |
||||||
|
mov chain_length,eax |
||||||
|
mov edx,[ebp+dep_lookahead] |
||||||
|
cmp edx,edi |
||||||
|
;if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; |
||||||
|
jae nolookaheadnicematch |
||||||
|
mov edi,edx |
||||||
|
nolookaheadnicematch: |
||||||
|
mov best_len,ebx |
||||||
|
|
||||||
|
|
||||||
|
mov esi,[ebp+dep_window] |
||||||
|
mov ecx,[ebp+dep_strstart] |
||||||
|
mov window,esi |
||||||
|
|
||||||
|
mov nice_match,edi |
||||||
|
add esi,ecx |
||||||
|
mov scanrp,esi |
||||||
|
mov ax,word ptr [esi] |
||||||
|
mov bx,word ptr [esi+ebx-1] |
||||||
|
add esi,MAX_MATCH-1 |
||||||
|
mov scan_start,ax |
||||||
|
mov strend,esi |
||||||
|
mov scan_end,bx |
||||||
|
|
||||||
|
; IPos limit = s->strstart > (IPos)MAX_DIST(s) ? |
||||||
|
; s->strstart - (IPos)MAX_DIST(s) : NIL; |
||||||
|
|
||||||
|
mov esi,[ebp+dep_w_size] |
||||||
|
sub esi,MIN_LOOKAHEAD |
||||||
|
; here esi = MAX_DIST(s) |
||||||
|
sub ecx,esi |
||||||
|
ja nodist |
||||||
|
xor ecx,ecx |
||||||
|
nodist: |
||||||
|
mov limit,ecx |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
mov eax,[ebp+dep_prev] |
||||||
|
mov prev,eax |
||||||
|
|
||||||
|
mov ebx,dword ptr [ebp+dep_match_start] |
||||||
|
mov bp,scan_start |
||||||
|
mov edx,cur_match |
||||||
|
mov match_start,ebx |
||||||
|
|
||||||
|
mov bx,scan_end |
||||||
|
mov eax,window |
||||||
|
mov edi,eax |
||||||
|
add edi,best_len |
||||||
|
mov esi,prev |
||||||
|
dec edi |
||||||
|
mov windowlen,edi |
||||||
|
|
||||||
|
jmp beginloop2 |
||||||
|
align 4 |
||||||
|
|
||||||
|
; here, in the loop |
||||||
|
;;;; eax = chain_length |
||||||
|
; edx = dx = cur_match |
||||||
|
; ecx = limit |
||||||
|
; bx = scan_end |
||||||
|
; bp = scan_start |
||||||
|
; edi = windowlen (window + best_len) |
||||||
|
; esi = prev |
||||||
|
|
||||||
|
|
||||||
|
;// here; eax <=16 |
||||||
|
normalbeg0add16: |
||||||
|
add chain_length,16 |
||||||
|
jz exitloop |
||||||
|
normalbeg0: |
||||||
|
cmp word ptr[edi+edx-0],bx |
||||||
|
je normalbeg2 |
||||||
|
and edx,7fffh |
||||||
|
mov dx,word ptr[esi+edx*2] |
||||||
|
cmp ecx,edx |
||||||
|
jnb exitloop |
||||||
|
dec chain_length |
||||||
|
jnz normalbeg0 |
||||||
|
;jnbexitloopshort1: |
||||||
|
jmp exitloop |
||||||
|
|
||||||
|
contloop3: |
||||||
|
mov edi,windowlen |
||||||
|
|
||||||
|
; cur_match = prev[cur_match & wmask] |
||||||
|
and edx,7fffh |
||||||
|
mov dx,word ptr[esi+edx*2] |
||||||
|
; if cur_match > limit, go to exitloop |
||||||
|
cmp ecx,edx |
||||||
|
jnbexitloopshort1: |
||||||
|
jnb exitloop |
||||||
|
; if --chain_length != 0, go to exitloop |
||||||
|
|
||||||
|
beginloop2: |
||||||
|
sub chain_length,16+1 |
||||||
|
jna normalbeg0add16 |
||||||
|
|
||||||
|
do16: |
||||||
|
cmp word ptr[edi+edx],bx |
||||||
|
je normalbeg2dc0 |
||||||
|
|
||||||
|
maccn MACRO lab |
||||||
|
and edx,7fffh |
||||||
|
mov dx,word ptr[esi+edx*2] |
||||||
|
cmp ecx,edx |
||||||
|
jnb exitloop |
||||||
|
cmp word ptr[edi+edx-0],bx |
||||||
|
je lab |
||||||
|
ENDM |
||||||
|
|
||||||
|
rcontloop0: |
||||||
|
maccn normalbeg2dc1 |
||||||
|
|
||||||
|
rcontloop1: |
||||||
|
maccn normalbeg2dc2 |
||||||
|
|
||||||
|
rcontloop2: |
||||||
|
maccn normalbeg2dc3 |
||||||
|
|
||||||
|
rcontloop3: |
||||||
|
maccn normalbeg2dc4 |
||||||
|
|
||||||
|
rcontloop4: |
||||||
|
maccn normalbeg2dc5 |
||||||
|
|
||||||
|
rcontloop5: |
||||||
|
maccn normalbeg2dc6 |
||||||
|
|
||||||
|
rcontloop6: |
||||||
|
maccn normalbeg2dc7 |
||||||
|
|
||||||
|
rcontloop7: |
||||||
|
maccn normalbeg2dc8 |
||||||
|
|
||||||
|
rcontloop8: |
||||||
|
maccn normalbeg2dc9 |
||||||
|
|
||||||
|
rcontloop9: |
||||||
|
maccn normalbeg2dc10 |
||||||
|
|
||||||
|
rcontloop10: |
||||||
|
maccn normalbeg2dc11 |
||||||
|
|
||||||
|
rcontloop11: |
||||||
|
maccn short normalbeg2dc12 |
||||||
|
|
||||||
|
rcontloop12: |
||||||
|
maccn short normalbeg2dc13 |
||||||
|
|
||||||
|
rcontloop13: |
||||||
|
maccn short normalbeg2dc14 |
||||||
|
|
||||||
|
rcontloop14: |
||||||
|
maccn short normalbeg2dc15 |
||||||
|
|
||||||
|
rcontloop15: |
||||||
|
and edx,7fffh |
||||||
|
mov dx,word ptr[esi+edx*2] |
||||||
|
cmp ecx,edx |
||||||
|
jnb short exitloopshort |
||||||
|
|
||||||
|
sub chain_length,16 |
||||||
|
ja do16 |
||||||
|
jmp normalbeg0add16 |
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||||||
|
|
||||||
|
exitloopshort: |
||||||
|
jmp exitloop |
||||||
|
|
||||||
|
normbeg MACRO rcontlab,valsub |
||||||
|
cmp bp,word ptr[eax+edx] |
||||||
|
jne rcontlab |
||||||
|
add chain_length,16-valsub |
||||||
|
jmp iseq |
||||||
|
ENDM |
||||||
|
|
||||||
|
normalbeg2dc12: |
||||||
|
normbeg rcontloop12,12 |
||||||
|
|
||||||
|
normalbeg2dc13: |
||||||
|
normbeg rcontloop13,13 |
||||||
|
|
||||||
|
normalbeg2dc14: |
||||||
|
normbeg rcontloop14,14 |
||||||
|
|
||||||
|
normalbeg2dc15: |
||||||
|
normbeg rcontloop15,15 |
||||||
|
|
||||||
|
normalbeg2dc11: |
||||||
|
normbeg rcontloop11,11 |
||||||
|
|
||||||
|
normalbeg2dc10: |
||||||
|
normbeg rcontloop10,10 |
||||||
|
|
||||||
|
|
||||||
|
normalbeg2dc9: |
||||||
|
normbeg rcontloop9,9 |
||||||
|
|
||||||
|
normalbeg2dc8: |
||||||
|
normbeg rcontloop8,8 |
||||||
|
|
||||||
|
normalbeg2dc7: |
||||||
|
normbeg rcontloop7,7 |
||||||
|
|
||||||
|
normalbeg2dc5: |
||||||
|
normbeg rcontloop5,5 |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
normalbeg2dc6: |
||||||
|
normbeg rcontloop6,6 |
||||||
|
|
||||||
|
normalbeg2dc4: |
||||||
|
normbeg rcontloop4,4 |
||||||
|
|
||||||
|
normalbeg2dc3: |
||||||
|
normbeg rcontloop3,3 |
||||||
|
|
||||||
|
normalbeg2dc2: |
||||||
|
normbeg rcontloop2,2 |
||||||
|
|
||||||
|
normalbeg2dc1: |
||||||
|
normbeg rcontloop1,1 |
||||||
|
|
||||||
|
normalbeg2dc0: |
||||||
|
normbeg rcontloop0,0 |
||||||
|
|
||||||
|
|
||||||
|
; we go in normalbeg2 because *(ushf*)(match+best_len-1) == scan_end |
||||||
|
|
||||||
|
normalbeg2: |
||||||
|
|
||||||
|
; 10 nop here take 10% time |
||||||
|
mov edi,window |
||||||
|
;mov chain_length,eax ; now, we need eax... |
||||||
|
|
||||||
|
cmp bp,word ptr[edi+edx] |
||||||
|
jne contloop3 ; if *(ushf*)match != scan_start, continue |
||||||
|
|
||||||
|
iseq: |
||||||
|
|
||||||
|
mov edi,eax |
||||||
|
mov esi,scanrp ; esi = scan |
||||||
|
add edi,edx ; edi = window + cur_match = match |
||||||
|
|
||||||
|
|
||||||
|
mov eax,[esi+3] ; compare manually dword at match+3 |
||||||
|
xor eax,[edi+3] ; and scan +3 |
||||||
|
|
||||||
|
jz begincompare ; if equal, go to long compare |
||||||
|
|
||||||
|
; we will determine the unmatch byte and calculate len (in esi) |
||||||
|
or al,al |
||||||
|
je eq1rr |
||||||
|
mov esi,3 |
||||||
|
jmp trfinval |
||||||
|
eq1rr: |
||||||
|
or ax,ax |
||||||
|
je eq1 |
||||||
|
|
||||||
|
mov esi,4 |
||||||
|
jmp trfinval |
||||||
|
eq1: |
||||||
|
shl eax,8 |
||||||
|
jz eq11 |
||||||
|
mov esi,5 |
||||||
|
jmp trfinval |
||||||
|
eq11: |
||||||
|
mov esi,6 |
||||||
|
jmp trfinval |
||||||
|
|
||||||
|
begincompare: |
||||||
|
; here we now scan and match begin same |
||||||
|
add edi,6 |
||||||
|
add esi,6 |
||||||
|
mov ecx,(MAX_MATCH-(2+4))/4 ;//; scan for at most MAX_MATCH bytes |
||||||
|
repe cmpsd ;//; loop until mismatch |
||||||
|
|
||||||
|
je trfin ; go to trfin if not unmatch |
||||||
|
; we determine the unmatch byte |
||||||
|
sub esi,4 |
||||||
|
mov eax,[edi-4] |
||||||
|
xor eax,[esi] |
||||||
|
or al,al |
||||||
|
|
||||||
|
jnz trfin |
||||||
|
inc esi |
||||||
|
|
||||||
|
or ax,ax |
||||||
|
jnz trfin |
||||||
|
inc esi |
||||||
|
|
||||||
|
shl eax,8 |
||||||
|
jnz trfin |
||||||
|
inc esi |
||||||
|
|
||||||
|
trfin: |
||||||
|
sub esi,scanrp ; esi = len |
||||||
|
trfinval: |
||||||
|
cmp esi,best_len ; if len <= best_len, go contloop2 |
||||||
|
jbe contloop2 |
||||||
|
|
||||||
|
mov best_len,esi ; len become best_len |
||||||
|
|
||||||
|
mov match_start,edx |
||||||
|
cmp esi,nice_match ;//; if esi >= nice_match, exit |
||||||
|
mov ecx,scanrp |
||||||
|
jae exitloop |
||||||
|
add esi,window |
||||||
|
add ecx,best_len |
||||||
|
dec esi |
||||||
|
mov windowlen,esi |
||||||
|
mov bx,[ecx-1] |
||||||
|
|
||||||
|
|
||||||
|
; now we restore eax, ecx and esi, for the big loop : |
||||||
|
contloop2: |
||||||
|
mov esi,prev |
||||||
|
mov ecx,limit |
||||||
|
;mov eax,chain_length |
||||||
|
mov eax,window |
||||||
|
jmp contloop3 |
||||||
|
|
||||||
|
exitloop: |
||||||
|
mov ebx,match_start |
||||||
|
mov ebp,str_s |
||||||
|
mov dword ptr [ebp+dep_match_start],ebx |
||||||
|
mov eax,best_len |
||||||
|
add esp,NbStackAdd |
||||||
|
|
||||||
|
|
||||||
|
pop ebx |
||||||
|
pop esi |
||||||
|
pop edi |
||||||
|
pop ebp |
||||||
|
ret |
||||||
|
|
||||||
|
_longest_match_asm7fff endp |
||||||
|
|
||||||
|
_TEXT ends |
||||||
|
end |
||||||
|
|
@ -0,0 +1,229 @@ |
|||||||
|
/* gvmat32.c -- C portion of the optimized longest_match for 32 bits x86
|
||||||
|
* Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant. |
||||||
|
* File written by Gilles Vollant, by modifiying the longest_match |
||||||
|
* from Jean-loup Gailly in deflate.c |
||||||
|
* it prepare all parameters and call the assembly longest_match_gvasm |
||||||
|
* longest_match execute standard C code is wmask != 0x7fff |
||||||
|
* (assembly code is faster with a fixed wmask) |
||||||
|
* |
||||||
|
*/ |
||||||
|
//#pragma optimize("agt",on)
|
||||||
|
|
||||||
|
#include "deflate.h" |
||||||
|
|
||||||
|
#undef FAR |
||||||
|
#include <windows.h> |
||||||
|
|
||||||
|
#ifdef ASMV |
||||||
|
|
||||||
|
#define NIL 0 |
||||||
|
|
||||||
|
static unsigned int tot=0; |
||||||
|
static unsigned int totl0=0; |
||||||
|
static unsigned int totl0p0=0; |
||||||
|
static unsigned int ba0=0; |
||||||
|
static unsigned int ba1=0; |
||||||
|
static unsigned int cpta=0; |
||||||
|
static unsigned int cptb=0; |
||||||
|
|
||||||
|
#define UNALIGNED_OK |
||||||
|
#define gvshow(a,b,c,d) |
||||||
|
/*
|
||||||
|
void gvshow(int chain_length,int len,int limit,ushf* prev) |
||||||
|
{ |
||||||
|
static int ival=0; |
||||||
|
char sz[80]; |
||||||
|
unsigned long i; |
||||||
|
int prev0=*prev; |
||||||
|
ival++; |
||||||
|
//wsprintf(sz,"call %u, len=%u, chain_length=%u\n",ival,len,chain_length);
|
||||||
|
//OutputDebugString(sz);
|
||||||
|
tot++; |
||||||
|
if (limit==NIL) |
||||||
|
totl0++; |
||||||
|
if ((limit==NIL) && (prev0==0)) |
||||||
|
totl0p0++; |
||||||
|
for (i=limit+1;i<32768;i++) |
||||||
|
{ |
||||||
|
ush va=*(prev+i); |
||||||
|
if (ba0>4000000000) |
||||||
|
{ |
||||||
|
ba0+=10; |
||||||
|
} |
||||||
|
ba0++; |
||||||
|
if ((va>limit) || (va==0)) |
||||||
|
continue; |
||||||
|
ba1++; |
||||||
|
} |
||||||
|
} |
||||||
|
*/ |
||||||
|
|
||||||
|
|
||||||
|
/* if your C compiler don't add underline before function name,
|
||||||
|
define ADD_UNDERLINE_ASMFUNC */ |
||||||
|
#ifdef ADD_UNDERLINE_ASMFUNC |
||||||
|
#define longest_match_asm7fff _longest_match_asm7fff |
||||||
|
#endif |
||||||
|
void match_init() |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
uInt longest_match_c( |
||||||
|
deflate_state *s, |
||||||
|
IPos cur_match); /* current match */ |
||||||
|
|
||||||
|
|
||||||
|
uInt longest_match_asm7fff( |
||||||
|
deflate_state *s, |
||||||
|
IPos cur_match); /* current match */ |
||||||
|
|
||||||
|
uInt longest_match( |
||||||
|
deflate_state *s, |
||||||
|
IPos cur_match) /* current match */ |
||||||
|
{ |
||||||
|
if (s->w_mask == 0x7fff) |
||||||
|
return longest_match_asm7fff(s,cur_match); |
||||||
|
return longest_match_c(s,cur_match); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
uInt longest_match_c(s, cur_match) |
||||||
|
deflate_state *s; |
||||||
|
IPos cur_match; /* current match */ |
||||||
|
{ |
||||||
|
unsigned chain_length = s->max_chain_length;/* max hash chain length */ |
||||||
|
register Bytef *scan = s->window + s->strstart; /* current string */ |
||||||
|
register Bytef *match; /* matched string */ |
||||||
|
register int len; /* length of current match */ |
||||||
|
int best_len = s->prev_length; /* best match length so far */ |
||||||
|
int nice_match = s->nice_match; /* stop if match long enough */ |
||||||
|
IPos limit = s->strstart > (IPos)MAX_DIST(s) ? |
||||||
|
s->strstart - (IPos)MAX_DIST(s) : NIL; |
||||||
|
/* Stop when cur_match becomes <= limit. To simplify the code,
|
||||||
|
* we prevent matches with the string of window index 0. |
||||||
|
*/ |
||||||
|
Posf *prev = s->prev; |
||||||
|
uInt wmask = s->w_mask; |
||||||
|
|
||||||
|
#ifdef UNALIGNED_OK |
||||||
|
/* Compare two bytes at a time. Note: this is not always beneficial.
|
||||||
|
* Try with and without -DUNALIGNED_OK to check. |
||||||
|
*/ |
||||||
|
register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; |
||||||
|
register ush scan_start = *(ushf*)scan; |
||||||
|
register ush scan_end = *(ushf*)(scan+best_len-1); |
||||||
|
#else |
||||||
|
register Bytef *strend = s->window + s->strstart + MAX_MATCH; |
||||||
|
register Byte scan_end1 = scan[best_len-1]; |
||||||
|
register Byte scan_end = scan[best_len]; |
||||||
|
#endif |
||||||
|
|
||||||
|
/* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
|
||||||
|
* It is easy to get rid of this optimization if necessary. |
||||||
|
*/ |
||||||
|
Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); |
||||||
|
|
||||||
|
/* Do not waste too much time if we already have a good match: */ |
||||||
|
if (s->prev_length >= s->good_match) { |
||||||
|
chain_length >>= 2; |
||||||
|
} |
||||||
|
/* Do not look for matches beyond the end of the input. This is necessary
|
||||||
|
* to make deflate deterministic. |
||||||
|
*/ |
||||||
|
if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; |
||||||
|
|
||||||
|
Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); |
||||||
|
|
||||||
|
do { |
||||||
|
Assert(cur_match < s->strstart, "no future"); |
||||||
|
match = s->window + cur_match; |
||||||
|
|
||||||
|
/* Skip to next match if the match length cannot increase
|
||||||
|
* or if the match length is less than 2: |
||||||
|
*/ |
||||||
|
#if (defined(UNALIGNED_OK) && MAX_MATCH == 258) |
||||||
|
/* This code assumes sizeof(unsigned short) == 2. Do not use
|
||||||
|
* UNALIGNED_OK if your compiler uses a different size. |
||||||
|
*/ |
||||||
|
if (*(ushf*)(match+best_len-1) != scan_end || |
||||||
|
*(ushf*)match != scan_start) continue; |
||||||
|
|
||||||
|
/* It is not necessary to compare scan[2] and match[2] since they are
|
||||||
|
* always equal when the other bytes match, given that the hash keys |
||||||
|
* are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at |
||||||
|
* strstart+3, +5, ... up to strstart+257. We check for insufficient |
||||||
|
* lookahead only every 4th comparison; the 128th check will be made |
||||||
|
* at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is |
||||||
|
* necessary to put more guard bytes at the end of the window, or |
||||||
|
* to check more often for insufficient lookahead. |
||||||
|
*/ |
||||||
|
Assert(scan[2] == match[2], "scan[2]?"); |
||||||
|
scan++, match++; |
||||||
|
do { |
||||||
|
} while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && |
||||||
|
*(ushf*)(scan+=2) == *(ushf*)(match+=2) && |
||||||
|
*(ushf*)(scan+=2) == *(ushf*)(match+=2) && |
||||||
|
*(ushf*)(scan+=2) == *(ushf*)(match+=2) && |
||||||
|
scan < strend); |
||||||
|
/* The funny "do {}" generates better code on most compilers */ |
||||||
|
|
||||||
|
/* Here, scan <= window+strstart+257 */ |
||||||
|
Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); |
||||||
|
if (*scan == *match) scan++; |
||||||
|
|
||||||
|
len = (MAX_MATCH - 1) - (int)(strend-scan); |
||||||
|
scan = strend - (MAX_MATCH-1); |
||||||
|
|
||||||
|
#else /* UNALIGNED_OK */ |
||||||
|
|
||||||
|
if (match[best_len] != scan_end || |
||||||
|
match[best_len-1] != scan_end1 || |
||||||
|
*match != *scan || |
||||||
|
*++match != scan[1]) continue; |
||||||
|
|
||||||
|
/* The check at best_len-1 can be removed because it will be made
|
||||||
|
* again later. (This heuristic is not always a win.) |
||||||
|
* It is not necessary to compare scan[2] and match[2] since they |
||||||
|
* are always equal when the other bytes match, given that |
||||||
|
* the hash keys are equal and that HASH_BITS >= 8. |
||||||
|
*/ |
||||||
|
scan += 2, match++; |
||||||
|
Assert(*scan == *match, "match[2]?"); |
||||||
|
|
||||||
|
/* We check for insufficient lookahead only every 8th comparison;
|
||||||
|
* the 256th check will be made at strstart+258. |
||||||
|
*/ |
||||||
|
do { |
||||||
|
} while (*++scan == *++match && *++scan == *++match && |
||||||
|
*++scan == *++match && *++scan == *++match && |
||||||
|
*++scan == *++match && *++scan == *++match && |
||||||
|
*++scan == *++match && *++scan == *++match && |
||||||
|
scan < strend); |
||||||
|
|
||||||
|
Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); |
||||||
|
|
||||||
|
len = MAX_MATCH - (int)(strend - scan); |
||||||
|
scan = strend - MAX_MATCH; |
||||||
|
|
||||||
|
#endif /* UNALIGNED_OK */ |
||||||
|
|
||||||
|
if (len > best_len) { |
||||||
|
s->match_start = cur_match; |
||||||
|
best_len = len; |
||||||
|
if (len >= nice_match) break; |
||||||
|
#ifdef UNALIGNED_OK |
||||||
|
scan_end = *(ushf*)(scan+best_len-1); |
||||||
|
#else |
||||||
|
scan_end1 = scan[best_len-1]; |
||||||
|
scan_end = scan[best_len]; |
||||||
|
#endif |
||||||
|
} |
||||||
|
} while ((cur_match = prev[cur_match & wmask]) > limit |
||||||
|
&& --chain_length != 0); |
||||||
|
|
||||||
|
if ((uInt)best_len <= s->lookahead) return best_len; |
||||||
|
return s->lookahead; |
||||||
|
} |
||||||
|
|
||||||
|
#endif /* ASMV */ |
@ -0,0 +1 @@ |
|||||||
|
c:\masm611\bin\ml /coff /Zi /c /Flgvmat32.lst gvmat32.asm |
@ -0,0 +1,781 @@ |
|||||||
|
# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "" |
||||||
|
CFG=zlibvc - Win32 Debug
|
||||||
|
!MESSAGE No configuration specified. Defaulting to zlibvc - Win32 Debug. |
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IF "$(CFG)" != "zlibvc - Win32 Release" && "$(CFG)" != "zlibvc - Win32 Debug" |
||||||
|
!MESSAGE Invalid configuration "$(CFG)" specified. |
||||||
|
!MESSAGE You can specify a configuration when running NMAKE on this makefile |
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example: |
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "zlibvc.mak" CFG="zlibvc - Win32 Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are: |
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "zlibvc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") |
||||||
|
!MESSAGE "zlibvc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") |
||||||
|
!MESSAGE
|
||||||
|
!ERROR An invalid configuration is specified. |
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IF "$(OS)" == "Windows_NT" |
||||||
|
NULL=
|
||||||
|
!ELSE
|
||||||
|
NULL=nul
|
||||||
|
!ENDIF
|
||||||
|
################################################################################
|
||||||
|
# Begin Project
|
||||||
|
# PROP Target_Last_Scanned "zlibvc - Win32 Debug"
|
||||||
|
CPP=cl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
MTL=mktyplib.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release"
|
||||||
|
# PROP BASE Intermediate_Dir "Release"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "Release"
|
||||||
|
# PROP Intermediate_Dir "Release"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
OUTDIR=.\Release
|
||||||
|
INTDIR=.\Release
|
||||||
|
|
||||||
|
ALL : "$(OUTDIR)\zlib.dll" "$(OUTDIR)\zlibvc.bsc" |
||||||
|
|
||||||
|
CLEAN : |
||||||
|
-@erase "$(INTDIR)\adler32.obj"
|
||||||
|
-@erase "$(INTDIR)\adler32.sbr"
|
||||||
|
-@erase "$(INTDIR)\compress.obj"
|
||||||
|
-@erase "$(INTDIR)\compress.sbr"
|
||||||
|
-@erase "$(INTDIR)\crc32.obj"
|
||||||
|
-@erase "$(INTDIR)\crc32.sbr"
|
||||||
|
-@erase "$(INTDIR)\deflate.obj"
|
||||||
|
-@erase "$(INTDIR)\deflate.sbr"
|
||||||
|
-@erase "$(INTDIR)\gvmat32c.obj"
|
||||||
|
-@erase "$(INTDIR)\gvmat32c.sbr"
|
||||||
|
-@erase "$(INTDIR)\gzio.obj"
|
||||||
|
-@erase "$(INTDIR)\gzio.sbr"
|
||||||
|
-@erase "$(INTDIR)\infblock.obj"
|
||||||
|
-@erase "$(INTDIR)\infblock.sbr"
|
||||||
|
-@erase "$(INTDIR)\infcodes.obj"
|
||||||
|
-@erase "$(INTDIR)\infcodes.sbr"
|
||||||
|
-@erase "$(INTDIR)\inffast.obj"
|
||||||
|
-@erase "$(INTDIR)\inffast.sbr"
|
||||||
|
-@erase "$(INTDIR)\inflate.obj"
|
||||||
|
-@erase "$(INTDIR)\inflate.sbr"
|
||||||
|
-@erase "$(INTDIR)\inftrees.obj"
|
||||||
|
-@erase "$(INTDIR)\inftrees.sbr"
|
||||||
|
-@erase "$(INTDIR)\infutil.obj"
|
||||||
|
-@erase "$(INTDIR)\infutil.sbr"
|
||||||
|
-@erase "$(INTDIR)\trees.obj"
|
||||||
|
-@erase "$(INTDIR)\trees.sbr"
|
||||||
|
-@erase "$(INTDIR)\uncompr.obj"
|
||||||
|
-@erase "$(INTDIR)\uncompr.sbr"
|
||||||
|
-@erase "$(INTDIR)\zlib.res"
|
||||||
|
-@erase "$(INTDIR)\zutil.obj"
|
||||||
|
-@erase "$(INTDIR)\zutil.sbr"
|
||||||
|
-@erase "$(OUTDIR)\zlib.dll"
|
||||||
|
-@erase "$(OUTDIR)\zlib.exp"
|
||||||
|
-@erase "$(OUTDIR)\zlib.lib"
|
||||||
|
-@erase "$(OUTDIR)\zlib.map"
|
||||||
|
-@erase "$(OUTDIR)\zlibvc.bsc"
|
||||||
|
|
||||||
|
"$(OUTDIR)" : |
||||||
|
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
||||||
|
|
||||||
|
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
|
||||||
|
# ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D fdopen=_fdopen /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "ASMV" /FR /YX /c
|
||||||
|
CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "NDEBUG" /D fdopen=_fdopen /D "WIN32" /D\
|
||||||
|
"_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /D "ASMV"\
|
||||||
|
/FR"$(INTDIR)/" /Fp"$(INTDIR)/zlibvc.pch" /YX /Fo"$(INTDIR)/" /c
|
||||||
|
CPP_OBJS=.\Release/
|
||||||
|
CPP_SBRS=.\Release/
|
||||||
|
# ADD BASE MTL /nologo /D "NDEBUG" /win32
|
||||||
|
# ADD MTL /nologo /D "NDEBUG" /win32
|
||||||
|
MTL_PROJ=/nologo /D "NDEBUG" /win32
|
||||||
|
# ADD BASE RSC /l 0x40c /d "NDEBUG"
|
||||||
|
# ADD RSC /l 0x40c /d "NDEBUG"
|
||||||
|
RSC_PROJ=/l 0x40c /fo"$(INTDIR)/zlib.res" /d "NDEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
BSC32_FLAGS=/nologo /o"$(OUTDIR)/zlibvc.bsc"
|
||||||
|
BSC32_SBRS= \
|
||||||
|
"$(INTDIR)\adler32.sbr" \
|
||||||
|
"$(INTDIR)\compress.sbr" \
|
||||||
|
"$(INTDIR)\crc32.sbr" \
|
||||||
|
"$(INTDIR)\deflate.sbr" \
|
||||||
|
"$(INTDIR)\gvmat32c.sbr" \
|
||||||
|
"$(INTDIR)\gzio.sbr" \
|
||||||
|
"$(INTDIR)\infblock.sbr" \
|
||||||
|
"$(INTDIR)\infcodes.sbr" \
|
||||||
|
"$(INTDIR)\inffast.sbr" \
|
||||||
|
"$(INTDIR)\inflate.sbr" \
|
||||||
|
"$(INTDIR)\inftrees.sbr" \
|
||||||
|
"$(INTDIR)\infutil.sbr" \
|
||||||
|
"$(INTDIR)\trees.sbr" \
|
||||||
|
"$(INTDIR)\uncompr.sbr" \
|
||||||
|
"$(INTDIR)\zutil.sbr"
|
||||||
|
|
||||||
|
"$(OUTDIR)\zlibvc.bsc" : "$(OUTDIR)" $(BSC32_SBRS) |
||||||
|
$(BSC32) @<<
|
||||||
|
$(BSC32_FLAGS) $(BSC32_SBRS)
|
||||||
|
<< |
||||||
|
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
|
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:"Release/zlib.dll"
|
||||||
|
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
|
||||||
|
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo\
|
||||||
|
/subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)/zlib.pdb"\
|
||||||
|
/map:"$(INTDIR)/zlib.map" /machine:I386 /nodefaultlib /def:".\zlib.def"\
|
||||||
|
/out:"$(OUTDIR)/zlib.dll" /implib:"$(OUTDIR)/zlib.lib"
|
||||||
|
DEF_FILE= \
|
||||||
|
".\zlib.def"
|
||||||
|
LINK32_OBJS= \
|
||||||
|
"$(INTDIR)\adler32.obj" \
|
||||||
|
"$(INTDIR)\compress.obj" \
|
||||||
|
"$(INTDIR)\crc32.obj" \
|
||||||
|
"$(INTDIR)\deflate.obj" \
|
||||||
|
"$(INTDIR)\gvmat32c.obj" \
|
||||||
|
"$(INTDIR)\gzio.obj" \
|
||||||
|
"$(INTDIR)\infblock.obj" \
|
||||||
|
"$(INTDIR)\infcodes.obj" \
|
||||||
|
"$(INTDIR)\inffast.obj" \
|
||||||
|
"$(INTDIR)\inflate.obj" \
|
||||||
|
"$(INTDIR)\inftrees.obj" \
|
||||||
|
"$(INTDIR)\infutil.obj" \
|
||||||
|
"$(INTDIR)\trees.obj" \
|
||||||
|
"$(INTDIR)\uncompr.obj" \
|
||||||
|
"$(INTDIR)\zlib.res" \
|
||||||
|
"$(INTDIR)\zutil.obj" \
|
||||||
|
".\GVMAT32.obj"
|
||||||
|
|
||||||
|
"$(OUTDIR)\zlib.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) |
||||||
|
$(LINK32) @<<
|
||||||
|
$(LINK32_FLAGS) $(LINK32_OBJS)
|
||||||
|
<< |
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug"
|
||||||
|
# PROP Intermediate_Dir "Debug"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
OUTDIR=.\Debug
|
||||||
|
INTDIR=.\Debug
|
||||||
|
|
||||||
|
ALL : "$(OUTDIR)\zlib.dll" |
||||||
|
|
||||||
|
CLEAN : |
||||||
|
-@erase "$(INTDIR)\adler32.obj"
|
||||||
|
-@erase "$(INTDIR)\compress.obj"
|
||||||
|
-@erase "$(INTDIR)\crc32.obj"
|
||||||
|
-@erase "$(INTDIR)\deflate.obj"
|
||||||
|
-@erase "$(INTDIR)\gvmat32c.obj"
|
||||||
|
-@erase "$(INTDIR)\gzio.obj"
|
||||||
|
-@erase "$(INTDIR)\infblock.obj"
|
||||||
|
-@erase "$(INTDIR)\infcodes.obj"
|
||||||
|
-@erase "$(INTDIR)\inffast.obj"
|
||||||
|
-@erase "$(INTDIR)\inflate.obj"
|
||||||
|
-@erase "$(INTDIR)\inftrees.obj"
|
||||||
|
-@erase "$(INTDIR)\infutil.obj"
|
||||||
|
-@erase "$(INTDIR)\trees.obj"
|
||||||
|
-@erase "$(INTDIR)\uncompr.obj"
|
||||||
|
-@erase "$(INTDIR)\vc40.idb"
|
||||||
|
-@erase "$(INTDIR)\vc40.pdb"
|
||||||
|
-@erase "$(INTDIR)\zlib.res"
|
||||||
|
-@erase "$(INTDIR)\zutil.obj"
|
||||||
|
-@erase "$(OUTDIR)\zlib.dll"
|
||||||
|
-@erase "$(OUTDIR)\zlib.exp"
|
||||||
|
-@erase "$(OUTDIR)\zlib.ilk"
|
||||||
|
-@erase "$(OUTDIR)\zlib.lib"
|
||||||
|
-@erase "$(OUTDIR)\zlib.pdb"
|
||||||
|
|
||||||
|
"$(OUTDIR)" : |
||||||
|
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
||||||
|
|
||||||
|
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
|
||||||
|
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL" /YX /c
|
||||||
|
CPP_PROJ=/nologo /MTd /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS"\
|
||||||
|
/D "_WINDLL" /D "_WIN32" /D "BUILD_ZLIBDLL" /D "ZLIB_DLL"\
|
||||||
|
/Fp"$(INTDIR)/zlibvc.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c
|
||||||
|
CPP_OBJS=.\Debug/
|
||||||
|
CPP_SBRS=.\.
|
||||||
|
# ADD BASE MTL /nologo /D "_DEBUG" /win32
|
||||||
|
# ADD MTL /nologo /D "_DEBUG" /win32
|
||||||
|
MTL_PROJ=/nologo /D "_DEBUG" /win32
|
||||||
|
# ADD BASE RSC /l 0x40c /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x40c /d "_DEBUG"
|
||||||
|
RSC_PROJ=/l 0x40c /fo"$(INTDIR)/zlib.res" /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
BSC32_FLAGS=/nologo /o"$(OUTDIR)/zlibvc.bsc"
|
||||||
|
BSC32_SBRS= \
|
||||||
|
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
|
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"Debug/zlib.dll"
|
||||||
|
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
|
||||||
|
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\
|
||||||
|
/subsystem:windows /dll /incremental:yes /pdb:"$(OUTDIR)/zlib.pdb" /debug\
|
||||||
|
/machine:I386 /def:".\zlib.def" /out:"$(OUTDIR)/zlib.dll"\
|
||||||
|
/implib:"$(OUTDIR)/zlib.lib"
|
||||||
|
DEF_FILE= \
|
||||||
|
".\zlib.def"
|
||||||
|
LINK32_OBJS= \
|
||||||
|
"$(INTDIR)\adler32.obj" \
|
||||||
|
"$(INTDIR)\compress.obj" \
|
||||||
|
"$(INTDIR)\crc32.obj" \
|
||||||
|
"$(INTDIR)\deflate.obj" \
|
||||||
|
"$(INTDIR)\gvmat32c.obj" \
|
||||||
|
"$(INTDIR)\gzio.obj" \
|
||||||
|
"$(INTDIR)\infblock.obj" \
|
||||||
|
"$(INTDIR)\infcodes.obj" \
|
||||||
|
"$(INTDIR)\inffast.obj" \
|
||||||
|
"$(INTDIR)\inflate.obj" \
|
||||||
|
"$(INTDIR)\inftrees.obj" \
|
||||||
|
"$(INTDIR)\infutil.obj" \
|
||||||
|
"$(INTDIR)\trees.obj" \
|
||||||
|
"$(INTDIR)\uncompr.obj" \
|
||||||
|
"$(INTDIR)\zlib.res" \
|
||||||
|
"$(INTDIR)\zutil.obj" \
|
||||||
|
".\GVMAT32.obj"
|
||||||
|
|
||||||
|
"$(OUTDIR)\zlib.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) |
||||||
|
$(LINK32) @<<
|
||||||
|
$(LINK32_FLAGS) $(LINK32_OBJS)
|
||||||
|
<< |
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
.c{$(CPP_OBJS)}.obj: |
||||||
|
$(CPP) $(CPP_PROJ) $<
|
||||||
|
|
||||||
|
.cpp{$(CPP_OBJS)}.obj: |
||||||
|
$(CPP) $(CPP_PROJ) $<
|
||||||
|
|
||||||
|
.cxx{$(CPP_OBJS)}.obj: |
||||||
|
$(CPP) $(CPP_PROJ) $<
|
||||||
|
|
||||||
|
.c{$(CPP_SBRS)}.sbr: |
||||||
|
$(CPP) $(CPP_PROJ) $<
|
||||||
|
|
||||||
|
.cpp{$(CPP_SBRS)}.sbr: |
||||||
|
$(CPP) $(CPP_PROJ) $<
|
||||||
|
|
||||||
|
.cxx{$(CPP_SBRS)}.sbr: |
||||||
|
$(CPP) $(CPP_PROJ) $<
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "zlibvc - Win32 Release"
|
||||||
|
# Name "zlibvc - Win32 Debug"
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\adler32.c
|
||||||
|
DEP_CPP_ADLER=\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\adler32.obj" : $(SOURCE) $(DEP_CPP_ADLER) "$(INTDIR)" |
||||||
|
|
||||||
|
"$(INTDIR)\adler32.sbr" : $(SOURCE) $(DEP_CPP_ADLER) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\adler32.obj" : $(SOURCE) $(DEP_CPP_ADLER) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\compress.c
|
||||||
|
DEP_CPP_COMPR=\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\compress.obj" : $(SOURCE) $(DEP_CPP_COMPR) "$(INTDIR)" |
||||||
|
|
||||||
|
"$(INTDIR)\compress.sbr" : $(SOURCE) $(DEP_CPP_COMPR) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\compress.obj" : $(SOURCE) $(DEP_CPP_COMPR) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\crc32.c
|
||||||
|
DEP_CPP_CRC32=\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\crc32.obj" : $(SOURCE) $(DEP_CPP_CRC32) "$(INTDIR)" |
||||||
|
|
||||||
|
"$(INTDIR)\crc32.sbr" : $(SOURCE) $(DEP_CPP_CRC32) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\crc32.obj" : $(SOURCE) $(DEP_CPP_CRC32) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\deflate.c
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
DEP_CPP_DEFLA=\
|
||||||
|
".\deflate.h"\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
".\zutil.h"\
|
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\deflate.obj" : $(SOURCE) $(DEP_CPP_DEFLA) "$(INTDIR)" |
||||||
|
|
||||||
|
"$(INTDIR)\deflate.sbr" : $(SOURCE) $(DEP_CPP_DEFLA) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
DEP_CPP_DEFLA=\
|
||||||
|
".\deflate.h"\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
".\zutil.h"\
|
||||||
|
|
||||||
|
NODEP_CPP_DEFLA=\
|
||||||
|
".\local"\
|
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\deflate.obj" : $(SOURCE) $(DEP_CPP_DEFLA) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\gzio.c
|
||||||
|
DEP_CPP_GZIO_=\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
".\zutil.h"\
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\gzio.obj" : $(SOURCE) $(DEP_CPP_GZIO_) "$(INTDIR)" |
||||||
|
|
||||||
|
"$(INTDIR)\gzio.sbr" : $(SOURCE) $(DEP_CPP_GZIO_) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\gzio.obj" : $(SOURCE) $(DEP_CPP_GZIO_) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\infblock.c
|
||||||
|
DEP_CPP_INFBL=\
|
||||||
|
".\infblock.h"\
|
||||||
|
".\infcodes.h"\
|
||||||
|
".\inftrees.h"\
|
||||||
|
".\infutil.h"\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
".\zutil.h"\
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\infblock.obj" : $(SOURCE) $(DEP_CPP_INFBL) "$(INTDIR)" |
||||||
|
|
||||||
|
"$(INTDIR)\infblock.sbr" : $(SOURCE) $(DEP_CPP_INFBL) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\infblock.obj" : $(SOURCE) $(DEP_CPP_INFBL) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\infcodes.c
|
||||||
|
DEP_CPP_INFCO=\
|
||||||
|
".\infblock.h"\
|
||||||
|
".\infcodes.h"\
|
||||||
|
".\inffast.h"\
|
||||||
|
".\inftrees.h"\
|
||||||
|
".\infutil.h"\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
".\zutil.h"\
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\infcodes.obj" : $(SOURCE) $(DEP_CPP_INFCO) "$(INTDIR)" |
||||||
|
|
||||||
|
"$(INTDIR)\infcodes.sbr" : $(SOURCE) $(DEP_CPP_INFCO) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\infcodes.obj" : $(SOURCE) $(DEP_CPP_INFCO) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\inffast.c
|
||||||
|
DEP_CPP_INFFA=\
|
||||||
|
".\infblock.h"\
|
||||||
|
".\infcodes.h"\
|
||||||
|
".\inffast.h"\
|
||||||
|
".\inftrees.h"\
|
||||||
|
".\infutil.h"\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
".\zutil.h"\
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\inffast.obj" : $(SOURCE) $(DEP_CPP_INFFA) "$(INTDIR)" |
||||||
|
|
||||||
|
"$(INTDIR)\inffast.sbr" : $(SOURCE) $(DEP_CPP_INFFA) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\inffast.obj" : $(SOURCE) $(DEP_CPP_INFFA) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\inflate.c
|
||||||
|
DEP_CPP_INFLA=\
|
||||||
|
".\infblock.h"\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
".\zutil.h"\
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\inflate.obj" : $(SOURCE) $(DEP_CPP_INFLA) "$(INTDIR)" |
||||||
|
|
||||||
|
"$(INTDIR)\inflate.sbr" : $(SOURCE) $(DEP_CPP_INFLA) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\inflate.obj" : $(SOURCE) $(DEP_CPP_INFLA) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\inftrees.c
|
||||||
|
DEP_CPP_INFTR=\
|
||||||
|
".\inftrees.h"\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
".\zutil.h"\
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\inftrees.obj" : $(SOURCE) $(DEP_CPP_INFTR) "$(INTDIR)" |
||||||
|
|
||||||
|
"$(INTDIR)\inftrees.sbr" : $(SOURCE) $(DEP_CPP_INFTR) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\inftrees.obj" : $(SOURCE) $(DEP_CPP_INFTR) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\infutil.c
|
||||||
|
DEP_CPP_INFUT=\
|
||||||
|
".\infblock.h"\
|
||||||
|
".\infcodes.h"\
|
||||||
|
".\inftrees.h"\
|
||||||
|
".\infutil.h"\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
".\zutil.h"\
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\infutil.obj" : $(SOURCE) $(DEP_CPP_INFUT) "$(INTDIR)" |
||||||
|
|
||||||
|
"$(INTDIR)\infutil.sbr" : $(SOURCE) $(DEP_CPP_INFUT) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\infutil.obj" : $(SOURCE) $(DEP_CPP_INFUT) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\trees.c
|
||||||
|
DEP_CPP_TREES=\
|
||||||
|
".\deflate.h"\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
".\zutil.h"\
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\trees.obj" : $(SOURCE) $(DEP_CPP_TREES) "$(INTDIR)" |
||||||
|
|
||||||
|
"$(INTDIR)\trees.sbr" : $(SOURCE) $(DEP_CPP_TREES) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\trees.obj" : $(SOURCE) $(DEP_CPP_TREES) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\uncompr.c
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
DEP_CPP_UNCOM=\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\uncompr.obj" : $(SOURCE) $(DEP_CPP_UNCOM) "$(INTDIR)" |
||||||
|
|
||||||
|
"$(INTDIR)\uncompr.sbr" : $(SOURCE) $(DEP_CPP_UNCOM) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
DEP_CPP_UNCOM=\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
|
||||||
|
NODEP_CPP_UNCOM=\
|
||||||
|
".\uncompress"\
|
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\uncompr.obj" : $(SOURCE) $(DEP_CPP_UNCOM) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\zutil.c
|
||||||
|
DEP_CPP_ZUTIL=\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
".\zutil.h"\
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\zutil.obj" : $(SOURCE) $(DEP_CPP_ZUTIL) "$(INTDIR)" |
||||||
|
|
||||||
|
"$(INTDIR)\zutil.sbr" : $(SOURCE) $(DEP_CPP_ZUTIL) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\zutil.obj" : $(SOURCE) $(DEP_CPP_ZUTIL) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\zlib.rc
|
||||||
|
|
||||||
|
"$(INTDIR)\zlib.res" : $(SOURCE) "$(INTDIR)" |
||||||
|
$(RSC) $(RSC_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\zlib.def
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\GVMAT32.obj
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
################################################################################
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\gvmat32c.c
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "zlibvc - Win32 Release" |
||||||
|
|
||||||
|
DEP_CPP_GVMAT=\
|
||||||
|
".\deflate.h"\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
".\zutil.h"\
|
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\gvmat32c.obj" : $(SOURCE) $(DEP_CPP_GVMAT) "$(INTDIR)" |
||||||
|
|
||||||
|
"$(INTDIR)\gvmat32c.sbr" : $(SOURCE) $(DEP_CPP_GVMAT) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "zlibvc - Win32 Debug" |
||||||
|
|
||||||
|
DEP_CPP_GVMAT=\
|
||||||
|
".\deflate.h"\
|
||||||
|
".\zconf.h"\
|
||||||
|
".\zlib.h"\
|
||||||
|
".\zutil.h"\
|
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\gvmat32c.obj" : $(SOURCE) $(DEP_CPP_GVMAT) "$(INTDIR)" |
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
# End Target
|
||||||
|
# End Project
|
||||||
|
################################################################################
|
@ -0,0 +1,24 @@ |
|||||||
|
|
||||||
|
#include "zfstream.h" |
||||||
|
|
||||||
|
int main() { |
||||||
|
|
||||||
|
// Construct a stream object with this filebuffer. Anything sent
|
||||||
|
// to this stream will go to standard out.
|
||||||
|
gzofstream os( 1, ios::out ); |
||||||
|
|
||||||
|
// This text is getting compressed and sent to stdout.
|
||||||
|
// To prove this, run 'test | zcat'.
|
||||||
|
os << "Hello, Mommy" << endl; |
||||||
|
|
||||||
|
os << setcompressionlevel( Z_NO_COMPRESSION ); |
||||||
|
os << "hello, hello, hi, ho!" << endl; |
||||||
|
|
||||||
|
setcompressionlevel( os, Z_DEFAULT_COMPRESSION ) |
||||||
|
<< "I'm compressing again" << endl; |
||||||
|
|
||||||
|
os.close(); |
||||||
|
|
||||||
|
return 0; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,329 @@ |
|||||||
|
|
||||||
|
#include <memory.h> |
||||||
|
#include "zfstream.h" |
||||||
|
|
||||||
|
gzfilebuf::gzfilebuf() : |
||||||
|
file(NULL), |
||||||
|
mode(0), |
||||||
|
own_file_descriptor(0) |
||||||
|
{ } |
||||||
|
|
||||||
|
gzfilebuf::~gzfilebuf() { |
||||||
|
|
||||||
|
sync(); |
||||||
|
if ( own_file_descriptor ) |
||||||
|
close(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
gzfilebuf *gzfilebuf::open( const char *name, |
||||||
|
int io_mode ) { |
||||||
|
|
||||||
|
if ( is_open() ) |
||||||
|
return NULL; |
||||||
|
|
||||||
|
char char_mode[10]; |
||||||
|
char *p; |
||||||
|
memset(char_mode,'\0',10); |
||||||
|
p = char_mode; |
||||||
|
|
||||||
|
if ( io_mode & ios::in ) { |
||||||
|
mode = ios::in; |
||||||
|
*p++ = 'r'; |
||||||
|
} else if ( io_mode & ios::app ) { |
||||||
|
mode = ios::app; |
||||||
|
*p++ = 'a'; |
||||||
|
} else { |
||||||
|
mode = ios::out; |
||||||
|
*p++ = 'w'; |
||||||
|
} |
||||||
|
|
||||||
|
if ( io_mode & ios::binary ) { |
||||||
|
mode |= ios::binary; |
||||||
|
*p++ = 'b'; |
||||||
|
} |
||||||
|
|
||||||
|
// Hard code the compression level
|
||||||
|
if ( io_mode & (ios::out|ios::app )) { |
||||||
|
*p++ = '9'; |
||||||
|
} |
||||||
|
|
||||||
|
if ( (file = gzopen(name, char_mode)) == NULL ) |
||||||
|
return NULL; |
||||||
|
|
||||||
|
own_file_descriptor = 1; |
||||||
|
|
||||||
|
return this; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
gzfilebuf *gzfilebuf::attach( int file_descriptor, |
||||||
|
int io_mode ) { |
||||||
|
|
||||||
|
if ( is_open() ) |
||||||
|
return NULL; |
||||||
|
|
||||||
|
char char_mode[10]; |
||||||
|
char *p; |
||||||
|
memset(char_mode,'\0',10); |
||||||
|
p = char_mode; |
||||||
|
|
||||||
|
if ( io_mode & ios::in ) { |
||||||
|
mode = ios::in; |
||||||
|
*p++ = 'r'; |
||||||
|
} else if ( io_mode & ios::app ) { |
||||||
|
mode = ios::app; |
||||||
|
*p++ = 'a'; |
||||||
|
} else { |
||||||
|
mode = ios::out; |
||||||
|
*p++ = 'w'; |
||||||
|
} |
||||||
|
|
||||||
|
if ( io_mode & ios::binary ) { |
||||||
|
mode |= ios::binary; |
||||||
|
*p++ = 'b'; |
||||||
|
} |
||||||
|
|
||||||
|
// Hard code the compression level
|
||||||
|
if ( io_mode & (ios::out|ios::app )) { |
||||||
|
*p++ = '9'; |
||||||
|
} |
||||||
|
|
||||||
|
if ( (file = gzdopen(file_descriptor, char_mode)) == NULL ) |
||||||
|
return NULL; |
||||||
|
|
||||||
|
own_file_descriptor = 0; |
||||||
|
|
||||||
|
return this; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
gzfilebuf *gzfilebuf::close() { |
||||||
|
|
||||||
|
if ( is_open() ) { |
||||||
|
|
||||||
|
sync(); |
||||||
|
gzclose( file ); |
||||||
|
file = NULL; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
return this; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
int gzfilebuf::setcompressionlevel( short comp_level ) { |
||||||
|
|
||||||
|
return gzsetparams(file, comp_level, -2); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
int gzfilebuf::setcompressionstrategy( short comp_strategy ) { |
||||||
|
|
||||||
|
return gzsetparams(file, -2, comp_strategy); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
streampos gzfilebuf::seekoff( streamoff off, ios::seek_dir dir, int which ) { |
||||||
|
|
||||||
|
return streampos(EOF); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
int gzfilebuf::underflow() { |
||||||
|
|
||||||
|
// If the file hasn't been opened for reading, error.
|
||||||
|
if ( !is_open() || !(mode & ios::in) ) |
||||||
|
return EOF; |
||||||
|
|
||||||
|
// if a buffer doesn't exists, allocate one.
|
||||||
|
if ( !base() ) { |
||||||
|
|
||||||
|
if ( (allocate()) == EOF ) |
||||||
|
return EOF; |
||||||
|
setp(0,0); |
||||||
|
|
||||||
|
} else { |
||||||
|
|
||||||
|
if ( in_avail() ) |
||||||
|
return (unsigned char) *gptr(); |
||||||
|
|
||||||
|
if ( out_waiting() ) { |
||||||
|
if ( flushbuf() == EOF ) |
||||||
|
return EOF; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
// Attempt to fill the buffer.
|
||||||
|
|
||||||
|
int result = fillbuf(); |
||||||
|
if ( result == EOF ) { |
||||||
|
// disable get area
|
||||||
|
setg(0,0,0); |
||||||
|
return EOF; |
||||||
|
} |
||||||
|
|
||||||
|
return (unsigned char) *gptr(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
int gzfilebuf::overflow( int c ) { |
||||||
|
|
||||||
|
if ( !is_open() || !(mode & ios::out) ) |
||||||
|
return EOF; |
||||||
|
|
||||||
|
if ( !base() ) { |
||||||
|
if ( allocate() == EOF ) |
||||||
|
return EOF; |
||||||
|
setg(0,0,0); |
||||||
|
} else { |
||||||
|
if (in_avail()) { |
||||||
|
return EOF; |
||||||
|
} |
||||||
|
if (out_waiting()) { |
||||||
|
if (flushbuf() == EOF) |
||||||
|
return EOF; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
int bl = blen(); |
||||||
|
setp( base(), base() + bl); |
||||||
|
|
||||||
|
if ( c != EOF ) { |
||||||
|
|
||||||
|
*pptr() = c; |
||||||
|
pbump(1); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
return 0; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
int gzfilebuf::sync() { |
||||||
|
|
||||||
|
if ( !is_open() ) |
||||||
|
return EOF; |
||||||
|
|
||||||
|
if ( out_waiting() ) |
||||||
|
return flushbuf(); |
||||||
|
|
||||||
|
return 0; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
int gzfilebuf::flushbuf() { |
||||||
|
|
||||||
|
int n; |
||||||
|
char *q; |
||||||
|
|
||||||
|
q = pbase(); |
||||||
|
n = pptr() - q; |
||||||
|
|
||||||
|
if ( gzwrite( file, q, n) < n ) |
||||||
|
return EOF; |
||||||
|
|
||||||
|
setp(0,0); |
||||||
|
|
||||||
|
return 0; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
int gzfilebuf::fillbuf() { |
||||||
|
|
||||||
|
int required; |
||||||
|
char *p; |
||||||
|
|
||||||
|
p = base(); |
||||||
|
|
||||||
|
required = blen(); |
||||||
|
|
||||||
|
int t = gzread( file, p, required ); |
||||||
|
|
||||||
|
if ( t <= 0) return EOF; |
||||||
|
|
||||||
|
setg( base(), base(), base()+t); |
||||||
|
|
||||||
|
return t; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
gzfilestream_common::gzfilestream_common() : |
||||||
|
ios( gzfilestream_common::rdbuf() ) |
||||||
|
{ } |
||||||
|
|
||||||
|
gzfilestream_common::~gzfilestream_common() |
||||||
|
{ } |
||||||
|
|
||||||
|
void gzfilestream_common::attach( int fd, int io_mode ) { |
||||||
|
|
||||||
|
if ( !buffer.attach( fd, io_mode) ) |
||||||
|
clear( ios::failbit | ios::badbit ); |
||||||
|
else |
||||||
|
clear(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void gzfilestream_common::open( const char *name, int io_mode ) { |
||||||
|
|
||||||
|
if ( !buffer.open( name, io_mode ) ) |
||||||
|
clear( ios::failbit | ios::badbit ); |
||||||
|
else |
||||||
|
clear(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void gzfilestream_common::close() { |
||||||
|
|
||||||
|
if ( !buffer.close() ) |
||||||
|
clear( ios::failbit | ios::badbit ); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
gzfilebuf *gzfilestream_common::rdbuf() { |
||||||
|
|
||||||
|
return &buffer; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
gzifstream::gzifstream() : |
||||||
|
ios( gzfilestream_common::rdbuf() ) |
||||||
|
{ |
||||||
|
clear( ios::badbit ); |
||||||
|
} |
||||||
|
|
||||||
|
gzifstream::gzifstream( const char *name, int io_mode ) : |
||||||
|
ios( gzfilestream_common::rdbuf() ) |
||||||
|
{ |
||||||
|
gzfilestream_common::open( name, io_mode ); |
||||||
|
} |
||||||
|
|
||||||
|
gzifstream::gzifstream( int fd, int io_mode ) : |
||||||
|
ios( gzfilestream_common::rdbuf() ) |
||||||
|
{ |
||||||
|
gzfilestream_common::attach( fd, io_mode ); |
||||||
|
} |
||||||
|
|
||||||
|
gzifstream::~gzifstream() { } |
||||||
|
|
||||||
|
gzofstream::gzofstream() : |
||||||
|
ios( gzfilestream_common::rdbuf() ) |
||||||
|
{ |
||||||
|
clear( ios::badbit ); |
||||||
|
} |
||||||
|
|
||||||
|
gzofstream::gzofstream( const char *name, int io_mode ) : |
||||||
|
ios( gzfilestream_common::rdbuf() ) |
||||||
|
{ |
||||||
|
gzfilestream_common::open( name, io_mode ); |
||||||
|
} |
||||||
|
|
||||||
|
gzofstream::gzofstream( int fd, int io_mode ) : |
||||||
|
ios( gzfilestream_common::rdbuf() ) |
||||||
|
{ |
||||||
|
gzfilestream_common::attach( fd, io_mode ); |
||||||
|
} |
||||||
|
|
||||||
|
gzofstream::~gzofstream() { } |
@ -0,0 +1,142 @@ |
|||||||
|
|
||||||
|
#ifndef _zfstream_h |
||||||
|
#define _zfstream_h |
||||||
|
|
||||||
|
#include <fstream.h> |
||||||
|
#include "zlib.h" |
||||||
|
|
||||||
|
class gzfilebuf : public streambuf { |
||||||
|
|
||||||
|
public: |
||||||
|
|
||||||
|
gzfilebuf( ); |
||||||
|
virtual ~gzfilebuf(); |
||||||
|
|
||||||
|
gzfilebuf *open( const char *name, int io_mode ); |
||||||
|
gzfilebuf *attach( int file_descriptor, int io_mode ); |
||||||
|
gzfilebuf *close(); |
||||||
|
|
||||||
|
int setcompressionlevel( short comp_level ); |
||||||
|
int setcompressionstrategy( short comp_strategy ); |
||||||
|
|
||||||
|
inline int is_open() const { return (file !=NULL); } |
||||||
|
|
||||||
|
virtual streampos seekoff( streamoff, ios::seek_dir, int ); |
||||||
|
|
||||||
|
virtual int sync(); |
||||||
|
|
||||||
|
protected: |
||||||
|
|
||||||
|
virtual int underflow(); |
||||||
|
virtual int overflow( int = EOF ); |
||||||
|
|
||||||
|
private: |
||||||
|
|
||||||
|
gzFile file; |
||||||
|
short mode; |
||||||
|
short own_file_descriptor; |
||||||
|
|
||||||
|
int flushbuf(); |
||||||
|
int fillbuf(); |
||||||
|
|
||||||
|
}; |
||||||
|
|
||||||
|
class gzfilestream_common : virtual public ios { |
||||||
|
|
||||||
|
friend class gzifstream; |
||||||
|
friend class gzofstream; |
||||||
|
friend gzofstream &setcompressionlevel( gzofstream &, int ); |
||||||
|
friend gzofstream &setcompressionstrategy( gzofstream &, int ); |
||||||
|
|
||||||
|
public: |
||||||
|
virtual ~gzfilestream_common(); |
||||||
|
|
||||||
|
void attach( int fd, int io_mode ); |
||||||
|
void open( const char *name, int io_mode ); |
||||||
|
void close(); |
||||||
|
|
||||||
|
protected: |
||||||
|
gzfilestream_common(); |
||||||
|
|
||||||
|
private: |
||||||
|
gzfilebuf *rdbuf(); |
||||||
|
|
||||||
|
gzfilebuf buffer; |
||||||
|
|
||||||
|
}; |
||||||
|
|
||||||
|
class gzifstream : public gzfilestream_common, public istream { |
||||||
|
|
||||||
|
public: |
||||||
|
|
||||||
|
gzifstream(); |
||||||
|
gzifstream( const char *name, int io_mode = ios::in ); |
||||||
|
gzifstream( int fd, int io_mode = ios::in ); |
||||||
|
|
||||||
|
virtual ~gzifstream(); |
||||||
|
|
||||||
|
}; |
||||||
|
|
||||||
|
class gzofstream : public gzfilestream_common, public ostream { |
||||||
|
|
||||||
|
public: |
||||||
|
|
||||||
|
gzofstream(); |
||||||
|
gzofstream( const char *name, int io_mode = ios::out ); |
||||||
|
gzofstream( int fd, int io_mode = ios::out ); |
||||||
|
|
||||||
|
virtual ~gzofstream(); |
||||||
|
|
||||||
|
}; |
||||||
|
|
||||||
|
template<class T> class gzomanip { |
||||||
|
friend gzofstream &operator<<(gzofstream &, const gzomanip<T> &); |
||||||
|
public: |
||||||
|
gzomanip(gzofstream &(*f)(gzofstream &, T), T v) : func(f), val(v) { } |
||||||
|
private: |
||||||
|
gzofstream &(*func)(gzofstream &, T); |
||||||
|
T val; |
||||||
|
}; |
||||||
|
|
||||||
|
template<class T> gzofstream &operator<<(gzofstream &s, |
||||||
|
const gzomanip<T> &m) { |
||||||
|
return (*m.func)(s, m.val); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
inline gzofstream &setcompressionlevel( gzofstream &s, int l ) { |
||||||
|
(s.rdbuf())->setcompressionlevel(l); |
||||||
|
return s; |
||||||
|
} |
||||||
|
|
||||||
|
inline gzofstream &setcompressionstrategy( gzofstream &s, int l ) { |
||||||
|
(s.rdbuf())->setcompressionstrategy(l); |
||||||
|
return s; |
||||||
|
} |
||||||
|
|
||||||
|
inline gzomanip<int> setcompressionlevel(int l) |
||||||
|
{ |
||||||
|
return gzomanip<int>(&setcompressionlevel,l); |
||||||
|
} |
||||||
|
|
||||||
|
inline gzomanip<int> setcompressionstrategy(int l) |
||||||
|
{ |
||||||
|
return gzomanip<int>(&setcompressionstrategy,l); |
||||||
|
} |
||||||
|
|
||||||
|
#endif |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,307 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* Copyright (c) 1997 |
||||||
|
* Christian Michelsen Research AS |
||||||
|
* Advanced Computing |
||||||
|
* Fantoftvegen 38, 5036 BERGEN, Norway |
||||||
|
* http://www.cmr.no
|
||||||
|
* |
||||||
|
* Permission to use, copy, modify, distribute and sell this software |
||||||
|
* and its documentation for any purpose is hereby granted without fee, |
||||||
|
* provided that the above copyright notice appear in all copies and |
||||||
|
* that both that copyright notice and this permission notice appear |
||||||
|
* in supporting documentation. Christian Michelsen Research AS makes no |
||||||
|
* representations about the suitability of this software for any |
||||||
|
* purpose. It is provided "as is" without express or implied warranty. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef ZSTREAM__H |
||||||
|
#define ZSTREAM__H |
||||||
|
|
||||||
|
/*
|
||||||
|
* zstream.h - C++ interface to the 'zlib' general purpose compression library |
||||||
|
* $Id: zstream.h 1.1 1997-06-25 12:00:56+02 tyge Exp tyge $ |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <strstream.h> |
||||||
|
#include <string.h> |
||||||
|
#include <stdio.h> |
||||||
|
#include "zlib.h" |
||||||
|
|
||||||
|
#if defined(_WIN32) |
||||||
|
# include <fcntl.h> |
||||||
|
# include <io.h> |
||||||
|
# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) |
||||||
|
#else |
||||||
|
# define SET_BINARY_MODE(file) |
||||||
|
#endif |
||||||
|
|
||||||
|
class zstringlen { |
||||||
|
public: |
||||||
|
zstringlen(class izstream&); |
||||||
|
zstringlen(class ozstream&, const char*); |
||||||
|
size_t value() const { return val.word; } |
||||||
|
private: |
||||||
|
struct Val { unsigned char byte; size_t word; } val; |
||||||
|
}; |
||||||
|
|
||||||
|
// ----------------------------- izstream -----------------------------
|
||||||
|
|
||||||
|
class izstream |
||||||
|
{ |
||||||
|
public: |
||||||
|
izstream() : m_fp(0) {} |
||||||
|
izstream(FILE* fp) : m_fp(0) { open(fp); } |
||||||
|
izstream(const char* name) : m_fp(0) { open(name); } |
||||||
|
~izstream() { close(); } |
||||||
|
|
||||||
|
/* Opens a gzip (.gz) file for reading.
|
||||||
|
* open() can be used to read a file which is not in gzip format; |
||||||
|
* in this case read() will directly read from the file without |
||||||
|
* decompression. errno can be checked to distinguish two error |
||||||
|
* cases (if errno is zero, the zlib error is Z_MEM_ERROR). |
||||||
|
*/ |
||||||
|
void open(const char* name) { |
||||||
|
if (m_fp) close(); |
||||||
|
m_fp = ::gzopen(name, "rb"); |
||||||
|
} |
||||||
|
|
||||||
|
void open(FILE* fp) { |
||||||
|
SET_BINARY_MODE(fp); |
||||||
|
if (m_fp) close(); |
||||||
|
m_fp = ::gzdopen(fileno(fp), "rb"); |
||||||
|
} |
||||||
|
|
||||||
|
/* Flushes all pending input if necessary, closes the compressed file
|
||||||
|
* and deallocates all the (de)compression state. The return value is |
||||||
|
* the zlib error number (see function error() below). |
||||||
|
*/ |
||||||
|
int close() { |
||||||
|
int r = ::gzclose(m_fp); |
||||||
|
m_fp = 0; return r; |
||||||
|
} |
||||||
|
|
||||||
|
/* Binary read the given number of bytes from the compressed file.
|
||||||
|
*/ |
||||||
|
int read(void* buf, size_t len) { |
||||||
|
return ::gzread(m_fp, buf, len); |
||||||
|
} |
||||||
|
|
||||||
|
/* Returns the error message for the last error which occurred on the
|
||||||
|
* given compressed file. errnum is set to zlib error number. If an |
||||||
|
* error occurred in the file system and not in the compression library, |
||||||
|
* errnum is set to Z_ERRNO and the application may consult errno |
||||||
|
* to get the exact error code. |
||||||
|
*/ |
||||||
|
const char* error(int* errnum) { |
||||||
|
return ::gzerror(m_fp, errnum); |
||||||
|
} |
||||||
|
|
||||||
|
gzFile fp() { return m_fp; } |
||||||
|
|
||||||
|
private: |
||||||
|
gzFile m_fp; |
||||||
|
}; |
||||||
|
|
||||||
|
/*
|
||||||
|
* Binary read the given (array of) object(s) from the compressed file. |
||||||
|
* If the input file was not in gzip format, read() copies the objects number |
||||||
|
* of bytes into the buffer. |
||||||
|
* returns the number of uncompressed bytes actually read |
||||||
|
* (0 for end of file, -1 for error). |
||||||
|
*/ |
||||||
|
template <class T, class Items> |
||||||
|
inline int read(izstream& zs, T* x, Items items) { |
||||||
|
return ::gzread(zs.fp(), x, items*sizeof(T)); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Binary input with the '>' operator. |
||||||
|
*/ |
||||||
|
template <class T> |
||||||
|
inline izstream& operator>(izstream& zs, T& x) { |
||||||
|
::gzread(zs.fp(), &x, sizeof(T)); |
||||||
|
return zs; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
inline zstringlen::zstringlen(izstream& zs) { |
||||||
|
zs > val.byte; |
||||||
|
if (val.byte == 255) zs > val.word; |
||||||
|
else val.word = val.byte; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Read length of string + the string with the '>' operator. |
||||||
|
*/ |
||||||
|
inline izstream& operator>(izstream& zs, char* x) { |
||||||
|
zstringlen len(zs); |
||||||
|
::gzread(zs.fp(), x, len.value()); |
||||||
|
x[len.value()] = '\0'; |
||||||
|
return zs; |
||||||
|
} |
||||||
|
|
||||||
|
inline char* read_string(izstream& zs) { |
||||||
|
zstringlen len(zs); |
||||||
|
char* x = new char[len.value()+1]; |
||||||
|
::gzread(zs.fp(), x, len.value()); |
||||||
|
x[len.value()] = '\0'; |
||||||
|
return x; |
||||||
|
} |
||||||
|
|
||||||
|
// ----------------------------- ozstream -----------------------------
|
||||||
|
|
||||||
|
class ozstream |
||||||
|
{ |
||||||
|
public: |
||||||
|
ozstream() : m_fp(0), m_os(0) { |
||||||
|
} |
||||||
|
ozstream(FILE* fp, int level = Z_DEFAULT_COMPRESSION) |
||||||
|
: m_fp(0), m_os(0) { |
||||||
|
open(fp, level); |
||||||
|
} |
||||||
|
ozstream(const char* name, int level = Z_DEFAULT_COMPRESSION) |
||||||
|
: m_fp(0), m_os(0) { |
||||||
|
open(name, level); |
||||||
|
} |
||||||
|
~ozstream() { |
||||||
|
close(); |
||||||
|
} |
||||||
|
|
||||||
|
/* Opens a gzip (.gz) file for writing.
|
||||||
|
* The compression level parameter should be in 0..9 |
||||||
|
* errno can be checked to distinguish two error cases |
||||||
|
* (if errno is zero, the zlib error is Z_MEM_ERROR). |
||||||
|
*/ |
||||||
|
void open(const char* name, int level = Z_DEFAULT_COMPRESSION) { |
||||||
|
char mode[4] = "wb\0"; |
||||||
|
if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level; |
||||||
|
if (m_fp) close(); |
||||||
|
m_fp = ::gzopen(name, mode); |
||||||
|
} |
||||||
|
|
||||||
|
/* open from a FILE pointer.
|
||||||
|
*/ |
||||||
|
void open(FILE* fp, int level = Z_DEFAULT_COMPRESSION) { |
||||||
|
SET_BINARY_MODE(fp); |
||||||
|
char mode[4] = "wb\0"; |
||||||
|
if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level; |
||||||
|
if (m_fp) close(); |
||||||
|
m_fp = ::gzdopen(fileno(fp), mode); |
||||||
|
} |
||||||
|
|
||||||
|
/* Flushes all pending output if necessary, closes the compressed file
|
||||||
|
* and deallocates all the (de)compression state. The return value is |
||||||
|
* the zlib error number (see function error() below). |
||||||
|
*/ |
||||||
|
int close() { |
||||||
|
if (m_os) { |
||||||
|
::gzwrite(m_fp, m_os->str(), m_os->pcount()); |
||||||
|
delete[] m_os->str(); delete m_os; m_os = 0; |
||||||
|
} |
||||||
|
int r = ::gzclose(m_fp); m_fp = 0; return r; |
||||||
|
} |
||||||
|
|
||||||
|
/* Binary write the given number of bytes into the compressed file.
|
||||||
|
*/ |
||||||
|
int write(const void* buf, size_t len) { |
||||||
|
return ::gzwrite(m_fp, (voidp) buf, len); |
||||||
|
} |
||||||
|
|
||||||
|
/* Flushes all pending output into the compressed file. The parameter
|
||||||
|
* _flush is as in the deflate() function. The return value is the zlib |
||||||
|
* error number (see function gzerror below). flush() returns Z_OK if |
||||||
|
* the flush_ parameter is Z_FINISH and all output could be flushed. |
||||||
|
* flush() should be called only when strictly necessary because it can |
||||||
|
* degrade compression. |
||||||
|
*/ |
||||||
|
int flush(int _flush) { |
||||||
|
os_flush(); |
||||||
|
return ::gzflush(m_fp, _flush); |
||||||
|
} |
||||||
|
|
||||||
|
/* Returns the error message for the last error which occurred on the
|
||||||
|
* given compressed file. errnum is set to zlib error number. If an |
||||||
|
* error occurred in the file system and not in the compression library, |
||||||
|
* errnum is set to Z_ERRNO and the application may consult errno |
||||||
|
* to get the exact error code. |
||||||
|
*/ |
||||||
|
const char* error(int* errnum) { |
||||||
|
return ::gzerror(m_fp, errnum); |
||||||
|
} |
||||||
|
|
||||||
|
gzFile fp() { return m_fp; } |
||||||
|
|
||||||
|
ostream& os() { |
||||||
|
if (m_os == 0) m_os = new ostrstream; |
||||||
|
return *m_os; |
||||||
|
} |
||||||
|
|
||||||
|
void os_flush() { |
||||||
|
if (m_os && m_os->pcount()>0) { |
||||||
|
ostrstream* oss = new ostrstream; |
||||||
|
oss->fill(m_os->fill()); |
||||||
|
oss->flags(m_os->flags()); |
||||||
|
oss->precision(m_os->precision()); |
||||||
|
oss->width(m_os->width()); |
||||||
|
::gzwrite(m_fp, m_os->str(), m_os->pcount()); |
||||||
|
delete[] m_os->str(); delete m_os; m_os = oss; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private: |
||||||
|
gzFile m_fp; |
||||||
|
ostrstream* m_os; |
||||||
|
}; |
||||||
|
|
||||||
|
/*
|
||||||
|
* Binary write the given (array of) object(s) into the compressed file. |
||||||
|
* returns the number of uncompressed bytes actually written |
||||||
|
* (0 in case of error). |
||||||
|
*/ |
||||||
|
template <class T, class Items> |
||||||
|
inline int write(ozstream& zs, const T* x, Items items) { |
||||||
|
return ::gzwrite(zs.fp(), (voidp) x, items*sizeof(T)); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Binary output with the '<' operator. |
||||||
|
*/ |
||||||
|
template <class T> |
||||||
|
inline ozstream& operator<(ozstream& zs, const T& x) { |
||||||
|
::gzwrite(zs.fp(), (voidp) &x, sizeof(T)); |
||||||
|
return zs; |
||||||
|
} |
||||||
|
|
||||||
|
inline zstringlen::zstringlen(ozstream& zs, const char* x) { |
||||||
|
val.byte = 255; val.word = ::strlen(x); |
||||||
|
if (val.word < 255) zs < (val.byte = val.word); |
||||||
|
else zs < val; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Write length of string + the string with the '<' operator. |
||||||
|
*/ |
||||||
|
inline ozstream& operator<(ozstream& zs, const char* x) { |
||||||
|
zstringlen len(zs, x); |
||||||
|
::gzwrite(zs.fp(), (voidp) x, len.value()); |
||||||
|
return zs; |
||||||
|
} |
||||||
|
|
||||||
|
#ifdef _MSC_VER |
||||||
|
inline ozstream& operator<(ozstream& zs, char* const& x) { |
||||||
|
return zs < (const char*) x; |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
||||||
|
/*
|
||||||
|
* Ascii write with the << operator; |
||||||
|
*/ |
||||||
|
template <class T> |
||||||
|
inline ostream& operator<<(ozstream& zs, const T& x) { |
||||||
|
zs.os_flush(); |
||||||
|
return zs.os() << x; |
||||||
|
} |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,25 @@ |
|||||||
|
#include "zstream.h" |
||||||
|
#include <math.h> |
||||||
|
#include <stdlib.h> |
||||||
|
#include <iomanip.h> |
||||||
|
|
||||||
|
void main() { |
||||||
|
char h[256] = "Hello"; |
||||||
|
char* g = "Goodbye"; |
||||||
|
ozstream out("temp.gz"); |
||||||
|
out < "This works well" < h < g; |
||||||
|
out.close(); |
||||||
|
|
||||||
|
izstream in("temp.gz"); // read it back
|
||||||
|
char *x = read_string(in), *y = new char[256], z[256]; |
||||||
|
in > y > z; |
||||||
|
in.close(); |
||||||
|
cout << x << endl << y << endl << z << endl; |
||||||
|
|
||||||
|
out.open("temp.gz"); // try ascii output; zcat temp.gz to see the results
|
||||||
|
out << setw(50) << setfill('#') << setprecision(20) << x << endl << y << endl << z << endl; |
||||||
|
out << z << endl << y << endl << x << endl; |
||||||
|
out << 1.1234567890123456789 << endl; |
||||||
|
|
||||||
|
delete[] x; delete[] y; |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
CC=cc
|
||||||
|
CFLAGS=-g
|
||||||
|
|
||||||
|
untgz: untgz.o ../../libz.a |
||||||
|
$(CC) $(CFLAGS) -o untgz untgz.o -L../.. -lz
|
||||||
|
|
||||||
|
untgz.o: untgz.c ../../zlib.h |
||||||
|
$(CC) $(CFLAGS) -c -I../.. untgz.c
|
||||||
|
|
||||||
|
../../libz.a: |
||||||
|
cd ../..; make
|
||||||
|
|
||||||
|
clean: |
||||||
|
rm -f untgz untgz.o *~
|
@ -0,0 +1,63 @@ |
|||||||
|
# Makefile for zlib. Modified for mingw32 |
||||||
|
# For conditions of distribution and use, see copyright notice in zlib.h |
||||||
|
|
||||||
|
# To compile, |
||||||
|
# |
||||||
|
# make -fmakefile.w32 |
||||||
|
# |
||||||
|
|
||||||
|
CC=gcc |
||||||
|
|
||||||
|
# Generate dependencies (see end of the file) |
||||||
|
|
||||||
|
CPPFLAGS=-MMD |
||||||
|
|
||||||
|
#CFLAGS=-MMD -O |
||||||
|
#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 |
||||||
|
#CFLAGS=-MMD -g -DDEBUG |
||||||
|
CFLAGS=-O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ |
||||||
|
-Wstrict-prototypes -Wmissing-prototypes |
||||||
|
|
||||||
|
# If cp.exe is not found, replace with copy /Y . |
||||||
|
CP=cp -f |
||||||
|
|
||||||
|
# The default value of RM is "rm -f." |
||||||
|
# If "rm.exe" is not found, uncomment: |
||||||
|
# RM=del |
||||||
|
|
||||||
|
LD=gcc |
||||||
|
LDLIBS=-L. -lz |
||||||
|
LDFLAGS=-s |
||||||
|
|
||||||
|
|
||||||
|
INCL=zlib.h zconf.h |
||||||
|
LIBS=libz.a |
||||||
|
|
||||||
|
AR=ar rcs |
||||||
|
|
||||||
|
OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ |
||||||
|
zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o \ |
||||||
|
inffast.o |
||||||
|
|
||||||
|
TEST_OBJS = minigzip.o untgz.o |
||||||
|
|
||||||
|
all: minigzip.exe untgz.exe |
||||||
|
|
||||||
|
rebuild: clean all |
||||||
|
|
||||||
|
libz.a: $(OBJS) |
||||||
|
$(AR) $@ $(OBJS) |
||||||
|
|
||||||
|
%.exe : %.o $(LIBS) |
||||||
|
$(LD) $(LDFLAGS) -o $@ $< $(LDLIBS) |
||||||
|
|
||||||
|
.PHONY : clean |
||||||
|
|
||||||
|
clean: |
||||||
|
$(RM) *.d *.o *.exe libz.a foo.gz |
||||||
|
|
||||||
|
DEPS := $(wildcard *.d) |
||||||
|
ifneq ($(DEPS),) |
||||||
|
include $(DEPS) |
||||||
|
endif |
||||||
|
|
@ -0,0 +1,478 @@ |
|||||||
|
/*
|
||||||
|
* untgz.c -- Display contents and/or extract file from |
||||||
|
* a gzip'd TAR file |
||||||
|
* written by "Pedro A. Aranda Guti\irrez" <paag@tid.es> |
||||||
|
* adaptation to Unix by Jean-loup Gailly <jloup@gzip.org> |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
#include <stdlib.h> |
||||||
|
#include <string.h> |
||||||
|
#include <time.h> |
||||||
|
#include <utime.h> |
||||||
|
#include <errno.h> |
||||||
|
#include <fcntl.h> |
||||||
|
#ifdef unix |
||||||
|
# include <unistd.h> |
||||||
|
#else |
||||||
|
# include <direct.h> |
||||||
|
# include <io.h> |
||||||
|
#endif |
||||||
|
|
||||||
|
#include "zlib.h" |
||||||
|
|
||||||
|
/* Values used in typeflag field. */ |
||||||
|
|
||||||
|
#define REGTYPE '0' /* regular file */ |
||||||
|
#define AREGTYPE '\0' /* regular file */ |
||||||
|
#define LNKTYPE '1' /* link */ |
||||||
|
#define SYMTYPE '2' /* reserved */ |
||||||
|
#define CHRTYPE '3' /* character special */ |
||||||
|
#define BLKTYPE '4' /* block special */ |
||||||
|
#define DIRTYPE '5' /* directory */ |
||||||
|
#define FIFOTYPE '6' /* FIFO special */ |
||||||
|
#define CONTTYPE '7' /* reserved */ |
||||||
|
|
||||||
|
#define BLOCKSIZE 512 |
||||||
|
|
||||||
|
struct tar_header |
||||||
|
{ /* byte offset */ |
||||||
|
char name[100]; /* 0 */ |
||||||
|
char mode[8]; /* 100 */ |
||||||
|
char uid[8]; /* 108 */ |
||||||
|
char gid[8]; /* 116 */ |
||||||
|
char size[12]; /* 124 */ |
||||||
|
char mtime[12]; /* 136 */ |
||||||
|
char chksum[8]; /* 148 */ |
||||||
|
char typeflag; /* 156 */ |
||||||
|
char linkname[100]; /* 157 */ |
||||||
|
char magic[6]; /* 257 */ |
||||||
|
char version[2]; /* 263 */ |
||||||
|
char uname[32]; /* 265 */ |
||||||
|
char gname[32]; /* 297 */ |
||||||
|
char devmajor[8]; /* 329 */ |
||||||
|
char devminor[8]; /* 337 */ |
||||||
|
char prefix[155]; /* 345 */ |
||||||
|
/* 500 */ |
||||||
|
}; |
||||||
|
|
||||||
|
union tar_buffer { |
||||||
|
char buffer[BLOCKSIZE]; |
||||||
|
struct tar_header header; |
||||||
|
}; |
||||||
|
|
||||||
|
enum { TGZ_EXTRACT = 0, TGZ_LIST }; |
||||||
|
|
||||||
|
static char *TGZfname OF((const char *)); |
||||||
|
void TGZnotfound OF((const char *)); |
||||||
|
|
||||||
|
int getoct OF((char *, int)); |
||||||
|
char *strtime OF((time_t *)); |
||||||
|
int ExprMatch OF((char *,char *)); |
||||||
|
|
||||||
|
int makedir OF((char *)); |
||||||
|
int matchname OF((int,int,char **,char *)); |
||||||
|
|
||||||
|
void error OF((const char *)); |
||||||
|
int tar OF((gzFile, int, int, int, char **)); |
||||||
|
|
||||||
|
void help OF((int)); |
||||||
|
int main OF((int, char **)); |
||||||
|
|
||||||
|
char *prog; |
||||||
|
|
||||||
|
/* This will give a benign warning */ |
||||||
|
|
||||||
|
static char *TGZprefix[] = { "\0", ".tgz", ".tar.gz", NULL }; |
||||||
|
|
||||||
|
/* Return the real name of the TGZ archive */ |
||||||
|
/* or NULL if it does not exist. */ |
||||||
|
|
||||||
|
static char *TGZfname OF((const char *fname)) |
||||||
|
{ |
||||||
|
static char buffer[1024]; |
||||||
|
int origlen,i; |
||||||
|
|
||||||
|
strcpy(buffer,fname); |
||||||
|
origlen = strlen(buffer); |
||||||
|
|
||||||
|
for (i=0; TGZprefix[i]; i++) |
||||||
|
{ |
||||||
|
strcpy(buffer+origlen,TGZprefix[i]); |
||||||
|
if (access(buffer,F_OK) == 0) |
||||||
|
return buffer; |
||||||
|
} |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
/* error message for the filename */ |
||||||
|
|
||||||
|
void TGZnotfound OF((const char *fname)) |
||||||
|
{ |
||||||
|
int i; |
||||||
|
|
||||||
|
fprintf(stderr,"%s : couldn't find ",prog); |
||||||
|
for (i=0;TGZprefix[i];i++) |
||||||
|
fprintf(stderr,(TGZprefix[i+1]) ? "%s%s, " : "or %s%s\n", |
||||||
|
fname, |
||||||
|
TGZprefix[i]); |
||||||
|
exit(1); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/* help functions */ |
||||||
|
|
||||||
|
int getoct(char *p,int width) |
||||||
|
{ |
||||||
|
int result = 0; |
||||||
|
char c; |
||||||
|
|
||||||
|
while (width --) |
||||||
|
{ |
||||||
|
c = *p++; |
||||||
|
if (c == ' ') |
||||||
|
continue; |
||||||
|
if (c == 0) |
||||||
|
break; |
||||||
|
result = result * 8 + (c - '0'); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
char *strtime (time_t *t) |
||||||
|
{ |
||||||
|
struct tm *local; |
||||||
|
static char result[32]; |
||||||
|
|
||||||
|
local = localtime(t); |
||||||
|
sprintf(result,"%2d/%02d/%4d %02d:%02d:%02d", |
||||||
|
local->tm_mday, local->tm_mon+1, local->tm_year+1900, |
||||||
|
local->tm_hour, local->tm_min, local->tm_sec); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/* regular expression matching */ |
||||||
|
|
||||||
|
#define ISSPECIAL(c) (((c) == '*') || ((c) == '/')) |
||||||
|
|
||||||
|
int ExprMatch(char *string,char *expr) |
||||||
|
{ |
||||||
|
while (1) |
||||||
|
{ |
||||||
|
if (ISSPECIAL(*expr)) |
||||||
|
{ |
||||||
|
if (*expr == '/') |
||||||
|
{ |
||||||
|
if (*string != '\\' && *string != '/') |
||||||
|
return 0; |
||||||
|
string ++; expr++; |
||||||
|
} |
||||||
|
else if (*expr == '*') |
||||||
|
{ |
||||||
|
if (*expr ++ == 0) |
||||||
|
return 1; |
||||||
|
while (*++string != *expr) |
||||||
|
if (*string == 0) |
||||||
|
return 0; |
||||||
|
} |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if (*string != *expr) |
||||||
|
return 0; |
||||||
|
if (*expr++ == 0) |
||||||
|
return 1; |
||||||
|
string++; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/* recursive make directory */ |
||||||
|
/* abort if you get an ENOENT errno somewhere in the middle */ |
||||||
|
/* e.g. ignore error "mkdir on existing directory" */ |
||||||
|
/* */ |
||||||
|
/* return 1 if OK */ |
||||||
|
/* 0 on error */ |
||||||
|
|
||||||
|
int makedir (char *newdir) |
||||||
|
{ |
||||||
|
char *buffer = strdup(newdir); |
||||||
|
char *p; |
||||||
|
int len = strlen(buffer); |
||||||
|
|
||||||
|
if (len <= 0) { |
||||||
|
free(buffer); |
||||||
|
return 0; |
||||||
|
} |
||||||
|
if (buffer[len-1] == '/') { |
||||||
|
buffer[len-1] = '\0'; |
||||||
|
} |
||||||
|
if (mkdir(buffer, 0775) == 0) |
||||||
|
{ |
||||||
|
free(buffer); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
p = buffer+1; |
||||||
|
while (1) |
||||||
|
{ |
||||||
|
char hold; |
||||||
|
|
||||||
|
while(*p && *p != '\\' && *p != '/') |
||||||
|
p++; |
||||||
|
hold = *p; |
||||||
|
*p = 0; |
||||||
|
if ((mkdir(buffer, 0775) == -1) && (errno == ENOENT)) |
||||||
|
{ |
||||||
|
fprintf(stderr,"%s: couldn't create directory %s\n",prog,buffer); |
||||||
|
free(buffer); |
||||||
|
return 0; |
||||||
|
} |
||||||
|
if (hold == 0) |
||||||
|
break; |
||||||
|
*p++ = hold; |
||||||
|
} |
||||||
|
free(buffer); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
int matchname (int arg,int argc,char **argv,char *fname) |
||||||
|
{ |
||||||
|
if (arg == argc) /* no arguments given (untgz tgzarchive) */ |
||||||
|
return 1; |
||||||
|
|
||||||
|
while (arg < argc) |
||||||
|
if (ExprMatch(fname,argv[arg++])) |
||||||
|
return 1; |
||||||
|
|
||||||
|
return 0; /* ignore this for the moment being */ |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/* Tar file list or extract */ |
||||||
|
|
||||||
|
int tar (gzFile in,int action,int arg,int argc,char **argv) |
||||||
|
{ |
||||||
|
union tar_buffer buffer; |
||||||
|
int len; |
||||||
|
int err; |
||||||
|
int getheader = 1; |
||||||
|
int remaining = 0; |
||||||
|
FILE *outfile = NULL; |
||||||
|
char fname[BLOCKSIZE]; |
||||||
|
time_t tartime; |
||||||
|
|
||||||
|
if (action == TGZ_LIST) |
||||||
|
printf(" day time size file\n" |
||||||
|
" ---------- -------- --------- -------------------------------------\n"); |
||||||
|
while (1) |
||||||
|
{ |
||||||
|
len = gzread(in, &buffer, BLOCKSIZE); |
||||||
|
if (len < 0) |
||||||
|
error (gzerror(in, &err)); |
||||||
|
/*
|
||||||
|
* if we met the end of the tar |
||||||
|
* or the end-of-tar block, |
||||||
|
* we are done |
||||||
|
*/ |
||||||
|
if ((len == 0) || (buffer.header.name[0]== 0)) |
||||||
|
break; |
||||||
|
|
||||||
|
/*
|
||||||
|
* Always expect complete blocks to process |
||||||
|
* the tar information. |
||||||
|
*/ |
||||||
|
if (len != BLOCKSIZE) |
||||||
|
error("gzread: incomplete block read"); |
||||||
|
|
||||||
|
/*
|
||||||
|
* If we have to get a tar header |
||||||
|
*/ |
||||||
|
if (getheader == 1) |
||||||
|
{ |
||||||
|
tartime = (time_t)getoct(buffer.header.mtime,12); |
||||||
|
strcpy(fname,buffer.header.name); |
||||||
|
|
||||||
|
switch (buffer.header.typeflag) |
||||||
|
{ |
||||||
|
case DIRTYPE: |
||||||
|
if (action == TGZ_LIST) |
||||||
|
printf(" %s <dir> %s\n",strtime(&tartime),fname); |
||||||
|
if (action == TGZ_EXTRACT) |
||||||
|
makedir(fname); |
||||||
|
break; |
||||||
|
case REGTYPE: |
||||||
|
case AREGTYPE: |
||||||
|
remaining = getoct(buffer.header.size,12); |
||||||
|
if (action == TGZ_LIST) |
||||||
|
printf(" %s %9d %s\n",strtime(&tartime),remaining,fname); |
||||||
|
if (action == TGZ_EXTRACT) |
||||||
|
{ |
||||||
|
if ((remaining) && (matchname(arg,argc,argv,fname))) |
||||||
|
{ |
||||||
|
outfile = fopen(fname,"wb"); |
||||||
|
if (outfile == NULL) { |
||||||
|
/* try creating directory */ |
||||||
|
char *p = strrchr(fname, '/'); |
||||||
|
if (p != NULL) { |
||||||
|
*p = '\0'; |
||||||
|
makedir(fname); |
||||||
|
*p = '/'; |
||||||
|
outfile = fopen(fname,"wb"); |
||||||
|
} |
||||||
|
} |
||||||
|
fprintf(stderr, |
||||||
|
"%s %s\n", |
||||||
|
(outfile) ? "Extracting" : "Couldn't create", |
||||||
|
fname); |
||||||
|
} |
||||||
|
else |
||||||
|
outfile = NULL; |
||||||
|
} |
||||||
|
/*
|
||||||
|
* could have no contents |
||||||
|
*/ |
||||||
|
getheader = (remaining) ? 0 : 1; |
||||||
|
break; |
||||||
|
default: |
||||||
|
if (action == TGZ_LIST) |
||||||
|
printf(" %s <---> %s\n",strtime(&tartime),fname); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
unsigned int bytes = (remaining > BLOCKSIZE) ? BLOCKSIZE : remaining; |
||||||
|
|
||||||
|
if ((action == TGZ_EXTRACT) && (outfile != NULL)) |
||||||
|
{ |
||||||
|
if (fwrite(&buffer,sizeof(char),bytes,outfile) != bytes) |
||||||
|
{ |
||||||
|
fprintf(stderr,"%s : error writing %s skipping...\n",prog,fname); |
||||||
|
fclose(outfile); |
||||||
|
unlink(fname); |
||||||
|
} |
||||||
|
} |
||||||
|
remaining -= bytes; |
||||||
|
if (remaining == 0) |
||||||
|
{ |
||||||
|
getheader = 1; |
||||||
|
if ((action == TGZ_EXTRACT) && (outfile != NULL)) |
||||||
|
{ |
||||||
|
struct utimbuf settime; |
||||||
|
|
||||||
|
settime.actime = settime.modtime = tartime; |
||||||
|
|
||||||
|
fclose(outfile); |
||||||
|
outfile = NULL; |
||||||
|
utime(fname,&settime); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (gzclose(in) != Z_OK) |
||||||
|
error("failed gzclose"); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/* =========================================================== */ |
||||||
|
|
||||||
|
void help(int exitval) |
||||||
|
{ |
||||||
|
fprintf(stderr, |
||||||
|
"untgz v 0.1\n" |
||||||
|
" an sample application of zlib 1.0.4\n\n" |
||||||
|
"Usage : untgz TGZfile to extract all files\n" |
||||||
|
" untgz TGZfile fname ... to extract selected files\n" |
||||||
|
" untgz -l TGZfile to list archive contents\n" |
||||||
|
" untgz -h to display this help\n\n"); |
||||||
|
exit(exitval); |
||||||
|
} |
||||||
|
|
||||||
|
void error(const char *msg) |
||||||
|
{ |
||||||
|
fprintf(stderr, "%s: %s\n", prog, msg); |
||||||
|
exit(1); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/* ====================================================================== */ |
||||||
|
|
||||||
|
int _CRT_glob = 0; /* disable globbing of the arguments */ |
||||||
|
|
||||||
|
int main(int argc,char **argv) |
||||||
|
{ |
||||||
|
int action = TGZ_EXTRACT; |
||||||
|
int arg = 1; |
||||||
|
char *TGZfile; |
||||||
|
gzFile *f; |
||||||
|
|
||||||
|
|
||||||
|
prog = strrchr(argv[0],'\\'); |
||||||
|
if (prog == NULL) |
||||||
|
{ |
||||||
|
prog = strrchr(argv[0],'/'); |
||||||
|
if (prog == NULL) |
||||||
|
{ |
||||||
|
prog = strrchr(argv[0],':'); |
||||||
|
if (prog == NULL) |
||||||
|
prog = argv[0]; |
||||||
|
else |
||||||
|
prog++; |
||||||
|
} |
||||||
|
else |
||||||
|
prog++; |
||||||
|
} |
||||||
|
else |
||||||
|
prog++; |
||||||
|
|
||||||
|
if (argc == 1) |
||||||
|
help(0); |
||||||
|
|
||||||
|
if (strcmp(argv[arg],"-l") == 0) |
||||||
|
{ |
||||||
|
action = TGZ_LIST; |
||||||
|
if (argc == ++arg) |
||||||
|
help(0); |
||||||
|
} |
||||||
|
else if (strcmp(argv[arg],"-h") == 0) |
||||||
|
{ |
||||||
|
help(0); |
||||||
|
} |
||||||
|
|
||||||
|
if ((TGZfile = TGZfname(argv[arg])) == NULL) |
||||||
|
TGZnotfound(argv[arg]);
|
||||||
|
|
||||||
|
++arg; |
||||||
|
if ((action == TGZ_LIST) && (arg != argc)) |
||||||
|
help(1); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Process the TGZ file |
||||||
|
*/ |
||||||
|
switch(action) |
||||||
|
{ |
||||||
|
case TGZ_LIST: |
||||||
|
case TGZ_EXTRACT: |
||||||
|
f = gzopen(TGZfile,"rb"); |
||||||
|
if (f == NULL) |
||||||
|
{ |
||||||
|
fprintf(stderr,"%s: Couldn't gzopen %s\n", |
||||||
|
prog, |
||||||
|
TGZfile); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
exit(tar(f, action, arg, argc, argv)); |
||||||
|
break; |
||||||
|
|
||||||
|
default: |
||||||
|
error("Unknown option!"); |
||||||
|
exit(1); |
||||||
|
} |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
@ -0,0 +1,57 @@ |
|||||||
|
From: "Jon Caruana" <jon-net@usa.net> |
||||||
|
To: "Jean-loup Gailly" <gzip@prep.ai.mit.edu> |
||||||
|
Subject: Re: How to port zlib declares to vb? |
||||||
|
Date: Mon, 28 Oct 1996 18:33:03 -0600 |
||||||
|
|
||||||
|
Got the answer! (I haven't had time to check this but it's what I got, and |
||||||
|
looks correct): |
||||||
|
|
||||||
|
He has the following routines working: |
||||||
|
compress |
||||||
|
uncompress |
||||||
|
gzopen |
||||||
|
gzwrite |
||||||
|
gzread |
||||||
|
gzclose |
||||||
|
|
||||||
|
Declares follow: (Quoted from Carlos Rios <c_rios@sonda.cl>, in Vb4 form) |
||||||
|
|
||||||
|
#If Win16 Then 'Use Win16 calls. |
||||||
|
Declare Function compress Lib "ZLIB.DLL" (ByVal compr As |
||||||
|
String, comprLen As Any, ByVal buf As String, ByVal buflen |
||||||
|
As Long) As Integer |
||||||
|
Declare Function uncompress Lib "ZLIB.DLL" (ByVal uncompr |
||||||
|
As String, uncomprLen As Any, ByVal compr As String, ByVal |
||||||
|
lcompr As Long) As Integer |
||||||
|
Declare Function gzopen Lib "ZLIB.DLL" (ByVal filePath As |
||||||
|
String, ByVal mode As String) As Long |
||||||
|
Declare Function gzread Lib "ZLIB.DLL" (ByVal file As |
||||||
|
Long, ByVal uncompr As String, ByVal uncomprLen As Integer) |
||||||
|
As Integer |
||||||
|
Declare Function gzwrite Lib "ZLIB.DLL" (ByVal file As |
||||||
|
Long, ByVal uncompr As String, ByVal uncomprLen As Integer) |
||||||
|
As Integer |
||||||
|
Declare Function gzclose Lib "ZLIB.DLL" (ByVal file As |
||||||
|
Long) As Integer |
||||||
|
#Else |
||||||
|
Declare Function compress Lib "ZLIB32.DLL" |
||||||
|
(ByVal compr As String, comprLen As Any, ByVal buf As |
||||||
|
String, ByVal buflen As Long) As Integer |
||||||
|
Declare Function uncompress Lib "ZLIB32.DLL" |
||||||
|
(ByVal uncompr As String, uncomprLen As Any, ByVal compr As |
||||||
|
String, ByVal lcompr As Long) As Long |
||||||
|
Declare Function gzopen Lib "ZLIB32.DLL" |
||||||
|
(ByVal file As String, ByVal mode As String) As Long |
||||||
|
Declare Function gzread Lib "ZLIB32.DLL" |
||||||
|
(ByVal file As Long, ByVal uncompr As String, ByVal |
||||||
|
uncomprLen As Long) As Long |
||||||
|
Declare Function gzwrite Lib "ZLIB32.DLL" |
||||||
|
(ByVal file As Long, ByVal uncompr As String, ByVal |
||||||
|
uncomprLen As Long) As Long |
||||||
|
Declare Function gzclose Lib "ZLIB32.DLL" |
||||||
|
(ByVal file As Long) As Long |
||||||
|
#End If |
||||||
|
|
||||||
|
-Jon Caruana |
||||||
|
jon-net@usa.net |
||||||
|
Microsoft Sitebuilder Network Level 1 Member - HTML Writer's Guild Member |
@ -0,0 +1,57 @@ |
|||||||
|
LIBRARY "zlib" |
||||||
|
|
||||||
|
DESCRIPTION '"""zlib data compression library"""' |
||||||
|
|
||||||
|
EXETYPE NT |
||||||
|
|
||||||
|
SUBSYSTEM WINDOWS |
||||||
|
|
||||||
|
STUB 'WINSTUB.EXE' |
||||||
|
|
||||||
|
VERSION 1.07 |
||||||
|
|
||||||
|
CODE EXECUTE READ |
||||||
|
|
||||||
|
DATA READ WRITE |
||||||
|
|
||||||
|
HEAPSIZE 1048576,4096 |
||||||
|
|
||||||
|
EXPORTS |
||||||
|
adler32 @1 |
||||||
|
compress @2 |
||||||
|
crc32 @3 |
||||||
|
deflate @4 |
||||||
|
deflateCopy @5 |
||||||
|
deflateEnd @6 |
||||||
|
deflateInit2_ @7 |
||||||
|
deflateInit_ @8 |
||||||
|
deflateParams @9 |
||||||
|
deflateReset @10 |
||||||
|
deflateSetDictionary @11 |
||||||
|
gzclose @12 |
||||||
|
gzdopen @13 |
||||||
|
gzerror @14 |
||||||
|
gzflush @15 |
||||||
|
gzopen @16 |
||||||
|
gzread @17 |
||||||
|
gzwrite @18 |
||||||
|
inflate @19 |
||||||
|
inflateEnd @20 |
||||||
|
inflateInit2_ @21 |
||||||
|
inflateInit_ @22 |
||||||
|
inflateReset @23 |
||||||
|
inflateSetDictionary @24 |
||||||
|
inflateSync @25 |
||||||
|
uncompress @26 |
||||||
|
zlibVersion @27 |
||||||
|
gzprintf @28 |
||||||
|
gzputc @29 |
||||||
|
gzgetc @30 |
||||||
|
gzseek @31 |
||||||
|
gzrewind @32 |
||||||
|
gztell @33 |
||||||
|
gzeof @34 |
||||||
|
gzsetparams @35 |
||||||
|
zError @36 |
||||||
|
inflateSyncPoint @37 |
||||||
|
get_crc_table @38 |
@ -0,0 +1,88 @@ |
|||||||
|
# Makefile for zlib
|
||||||
|
|
||||||
|
!include <ntwin32.mak> |
||||||
|
|
||||||
|
CC=cl
|
||||||
|
LD=link
|
||||||
|
CFLAGS=-O -nologo
|
||||||
|
LDFLAGS=
|
||||||
|
O=.obj
|
||||||
|
|
||||||
|
# variables
|
||||||
|
OBJ1 = adler32$(O) compress$(O) crc32$(O) gzio$(O) uncompr$(O) deflate$(O) \
|
||||||
|
trees$(O)
|
||||||
|
OBJ2 = zutil$(O) inflate$(O) infblock$(O) inftrees$(O) infcodes$(O) \
|
||||||
|
infutil$(O) inffast$(O)
|
||||||
|
|
||||||
|
all: zlib.dll example.exe minigzip.exe |
||||||
|
|
||||||
|
adler32.obj: adler32.c zutil.h zlib.h zconf.h |
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
compress.obj: compress.c zlib.h zconf.h |
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
crc32.obj: crc32.c zutil.h zlib.h zconf.h |
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h |
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
gzio.obj: gzio.c zutil.h zlib.h zconf.h |
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
infblock.obj: infblock.c zutil.h zlib.h zconf.h infblock.h inftrees.h\
|
||||||
|
infcodes.h infutil.h
|
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
infcodes.obj: infcodes.c zutil.h zlib.h zconf.h inftrees.h infutil.h\
|
||||||
|
infcodes.h inffast.h
|
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
inflate.obj: inflate.c zutil.h zlib.h zconf.h infblock.h |
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h |
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
infutil.obj: infutil.c zutil.h zlib.h zconf.h inftrees.h infutil.h |
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h |
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
trees.obj: trees.c deflate.h zutil.h zlib.h zconf.h |
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
uncompr.obj: uncompr.c zlib.h zconf.h |
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
zutil.obj: zutil.c zutil.h zlib.h zconf.h |
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
example.obj: example.c zlib.h zconf.h |
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
minigzip.obj: minigzip.c zlib.h zconf.h |
||||||
|
$(CC) -c $(cvarsdll) $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
zlib.dll: $(OBJ1) $(OBJ2) zlib.dnt |
||||||
|
link $(dlllflags) -out:$@ -def:zlib.dnt $(OBJ1) $(OBJ2) $(guilibsdll)
|
||||||
|
|
||||||
|
zlib.lib: zlib.dll |
||||||
|
|
||||||
|
example.exe: example.obj zlib.lib |
||||||
|
$(LD) $(LDFLAGS) example.obj zlib.lib
|
||||||
|
|
||||||
|
minigzip.exe: minigzip.obj zlib.lib |
||||||
|
$(LD) $(LDFLAGS) minigzip.obj zlib.lib
|
||||||
|
|
||||||
|
test: example.exe minigzip.exe |
||||||
|
example
|
||||||
|
echo hello world | minigzip | minigzip -d
|
||||||
|
|
||||||
|
clean: |
||||||
|
del *.obj
|
||||||
|
del *.exe
|
||||||
|
del *.dll
|
||||||
|
del *.lib
|
@ -0,0 +1,44 @@ |
|||||||
|
LIBRARY zlib.dll |
||||||
|
EXETYPE WINDOWS |
||||||
|
CODE PRELOAD MOVEABLE DISCARDABLE |
||||||
|
DATA PRELOAD MOVEABLE MULTIPLE |
||||||
|
|
||||||
|
EXPORTS |
||||||
|
adler32 @1 |
||||||
|
compress @2 |
||||||
|
crc32 @3 |
||||||
|
deflate @4 |
||||||
|
deflateCopy @5 |
||||||
|
deflateEnd @6 |
||||||
|
deflateInit2_ @7 |
||||||
|
deflateInit_ @8 |
||||||
|
deflateParams @9 |
||||||
|
deflateReset @10 |
||||||
|
deflateSetDictionary @11 |
||||||
|
gzclose @12 |
||||||
|
gzdopen @13 |
||||||
|
gzerror @14 |
||||||
|
gzflush @15 |
||||||
|
gzopen @16 |
||||||
|
gzread @17 |
||||||
|
gzwrite @18 |
||||||
|
inflate @19 |
||||||
|
inflateEnd @20 |
||||||
|
inflateInit2_ @21 |
||||||
|
inflateInit_ @22 |
||||||
|
inflateReset @23 |
||||||
|
inflateSetDictionary @24 |
||||||
|
inflateSync @25 |
||||||
|
uncompress @26 |
||||||
|
zlibVersion @27 |
||||||
|
gzprintf @28 |
||||||
|
gzputc @29 |
||||||
|
gzgetc @30 |
||||||
|
gzseek @31 |
||||||
|
gzrewind @32 |
||||||
|
gztell @33 |
||||||
|
gzeof @34 |
||||||
|
gzsetparams @35 |
||||||
|
zError @36 |
||||||
|
inflateSyncPoint @37 |
||||||
|
get_crc_table @38 |
@ -0,0 +1,107 @@ |
|||||||
|
.TH ZLIB 3 "20 January 1998" |
||||||
|
.SH NAME |
||||||
|
zlib \- compression/decompression library |
||||||
|
.SH SYNOPSIS |
||||||
|
[see |
||||||
|
.I zlib.h |
||||||
|
for full descripton] |
||||||
|
.SH DESCRIPTION |
||||||
|
The |
||||||
|
.I zlib |
||||||
|
library is a general purpose data compression library. |
||||||
|
The code is reentrant (thread safe). |
||||||
|
It provides in-memory compression and decompression functions, |
||||||
|
including integrity checks of the uncompressed data. |
||||||
|
This version of the library supports only one compression method (deflation) |
||||||
|
but other algorithms will be added later and will have the same stream interface. |
||||||
|
.LP |
||||||
|
Compression can be done in a single step if the buffers are large enough |
||||||
|
(for example if an input file is mmap'ed), |
||||||
|
or can be done by repeated calls of the compression function. |
||||||
|
In the latter case, |
||||||
|
the application must provide more input and/or consume the output |
||||||
|
(providing more output space) before each call. |
||||||
|
.LP |
||||||
|
The library also supports reading and writing files in |
||||||
|
.I gzip |
||||||
|
(.gz) format |
||||||
|
with an interface similar to that of stdio. |
||||||
|
.LP |
||||||
|
The library does not install any signal handler. The decoder checks |
||||||
|
the consistency of the compressed data, so the library should never |
||||||
|
crash even in case of corrupted input. |
||||||
|
.LP |
||||||
|
All functions of the compression library are documented in the file |
||||||
|
.IR zlib.h. |
||||||
|
The distribution source includes examples of use of the library |
||||||
|
the files |
||||||
|
.I example.c |
||||||
|
and |
||||||
|
.IR minigzip.c . |
||||||
|
.LP |
||||||
|
A Java implementation of |
||||||
|
.IR zlib |
||||||
|
is available in the Java Development Kit 1.1 |
||||||
|
.IP |
||||||
|
http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html |
||||||
|
.LP |
||||||
|
A Perl interface to |
||||||
|
.IR zlib , |
||||||
|
written by Paul Marquess (pmarquess@bfsec.bt.co.uk) |
||||||
|
is available at CPAN (Comprehensive Perl Archive Network) sites, |
||||||
|
such as: |
||||||
|
.IP |
||||||
|
ftp://ftp.cis.ufl.edu/pub/perl/CPAN/modules/by-module/Compress/Compress-Zlib* |
||||||
|
.LP |
||||||
|
A Python interface to |
||||||
|
.IR zlib |
||||||
|
written by A.M. Kuchling <amk@magnet.com> |
||||||
|
is available from the Python Software Association sites, such as: |
||||||
|
.IP |
||||||
|
ftp://ftp.python.org/pub/python/contrib/Encoding/zlib*.tar.gz |
||||||
|
.SH "SEE ALSO" |
||||||
|
Questions about zlib should be sent to: |
||||||
|
.IP |
||||||
|
zlib@quest.jpl.nasa.gov |
||||||
|
or, if this fails, to the author addresses given below. |
||||||
|
The zlib home page is: |
||||||
|
.IP |
||||||
|
http://www.cdrom.com/infozip/zlib/ |
||||||
|
.LP |
||||||
|
The data format used by the zlib library is described by RFC |
||||||
|
(Request for Comments) 1950 to 1952 in the files: |
||||||
|
.IP |
||||||
|
ftp://ds.internic.net/rfc/rfc1950.txt (zlib format) |
||||||
|
.br |
||||||
|
rfc1951.txt (deflate format) |
||||||
|
.br |
||||||
|
rfc1952.txt (gzip format) |
||||||
|
.LP |
||||||
|
These documents are also available in other formats from: |
||||||
|
.IP |
||||||
|
ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html |
||||||
|
.SH AUTHORS |
||||||
|
Version 1.0.7. |
||||||
|
Copyright (C) 1995-1998 Jean-loup Gailly (jloup@gzip.org) |
||||||
|
and Mark Adler (madler@alumni.caltech.edu). |
||||||
|
.LP |
||||||
|
This software is provided "as-is," |
||||||
|
without any express or implied warranty. |
||||||
|
In no event will the authors be held liable for any damages |
||||||
|
arising from the use of this software. |
||||||
|
See the distribution directory with respect to requirements |
||||||
|
governing redistribution. |
||||||
|
The deflate format used by |
||||||
|
.I zlib |
||||||
|
was defined by Phil Katz. |
||||||
|
The deflate and |
||||||
|
.I zlib |
||||||
|
specifications were written by Peter Deutsch. |
||||||
|
Thanks to all the people who reported problems and suggested various |
||||||
|
improvements in |
||||||
|
.IR zlib ; |
||||||
|
who are too numerous to cite here. |
||||||
|
.LP |
||||||
|
UNIX manual page by R. P. C. Rodgers, |
||||||
|
U.S. National Library of Medicine (rodgers@nlm.nih.gov). |
||||||
|
.\" end of man page |
@ -1,46 +0,0 @@ |
|||||||
LIBRARY "zlib" |
|
||||||
|
|
||||||
DESCRIPTION '"""zlib data compression library"""' |
|
||||||
|
|
||||||
EXETYPE NT |
|
||||||
|
|
||||||
SUBSYSTEM WINDOWS |
|
||||||
|
|
||||||
STUB 'WINSTUB.EXE' |
|
||||||
|
|
||||||
VERSION 1.05 |
|
||||||
|
|
||||||
CODE EXECUTE READ |
|
||||||
|
|
||||||
DATA READ WRITE |
|
||||||
|
|
||||||
HEAPSIZE 1048576,4096 |
|
||||||
|
|
||||||
EXPORTS |
|
||||||
zlibVersion |
|
||||||
deflate |
|
||||||
deflateEnd |
|
||||||
inflate |
|
||||||
inflateEnd |
|
||||||
deflateSetDictionary |
|
||||||
deflateCopy |
|
||||||
deflateReset |
|
||||||
deflateParams |
|
||||||
inflateSetDictionary |
|
||||||
inflateSync |
|
||||||
inflateReset |
|
||||||
compress |
|
||||||
uncompress |
|
||||||
gzopen |
|
||||||
gzdopen |
|
||||||
gzread |
|
||||||
gzwrite |
|
||||||
gzflush |
|
||||||
gzclose |
|
||||||
gzerror |
|
||||||
adler32 |
|
||||||
crc32 |
|
||||||
deflateInit_ |
|
||||||
inflateInit_ |
|
||||||
deflateInit2_ |
|
||||||
inflateInit2_ |
|
Loading…
Reference in new issue