Code archives/Miscellaneous/gzip files and banks
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| You can get the DLL from here: http://www.winimage.com/zLibDll/ There is a lot more in this dll ... but this is a good start i think The adler stuff is a pretty fast CRC Checksum .. the other functions are pretty selfexplaining. [decl] .lib "zlib.dll" zip_open%(path$,mode$): "gzopen" zip_close%(file%):"gzclose" zip_write%(file%,buffer*,len%):"gzwrite" zip_compress%(dest*,destLen*,source*,sourceLen%): "compress" zip_uncompress%(dest*, destLen*, source*,sourceLen%):"uncompress" zip_version$():"zlibVersion" zip_adler32%(adler%,buffer*,length%):"adler32" zip_crc32%(adler%,buffer*,length%):"CRC32" [/decl] | |||||
If Not FileType("zlib.dll")=1 Then RuntimeError("zlib.dll missing")
Function gZipFile$(org_file$,destination$="")
source_bank=CreateBank(FileSize(org_file$))
source_len=BankSize(source_bank)
f=OpenFile(org_file$)
If Not f
Return "-ERROR cannot open source file"
EndIf
ReadBytes source_bank,f,0,BankSize(source_bank)
CloseFile f
new_file$=org_file$+".gz"
file = zip_open(new_file$, "wb")
If (file = 0)
Return("-ERROR cannot open destination file")
EndIf
suc = zip_write(file,source_bank,source_len)
If Not suc
Return("-ERROR cannot compress file")
EndIf
file = zip_close(file)
Return FileSize(new_file$)
End Function
Function gzip_adler32file(file$)
f = ReadFile(file)
If Not f Then Return False
bufferSize = 4096
buffer = CreateBank(bufferSize)
adler = zip_adler32(0,buffer,0)
While Not Eof(f)
length = ReadBytes(buffer,f,0,bufferSize)
adler = zip_adler32(adler,buffer,length)
Wend
CloseFile(f)
Return adler
End Function
Function gzip_adler32bank(bank)
adler = zip_adler32(0,bank,0)
adler = zip_adler32(adler,bank,BankSize(bank))
Return adler
End Function
Function gzip_compressBank(bank)
sourceLen = BankSize(bank)
dest = CreateBank(Ceil(sourceLen * 1.1)+12)
destLen = CreateBank(4)
PokeInt(destLen,0,BankSize(dest))
If zip_compress(dest, destLen, bank,sourceLen) <> 0 Then Return False
newLen = PeekInt(destLen,0)
If newlen <= 0
FreeBank destLen
FreeBank dest
Return False
EndIf
ResizeBank(bank,newLen)
CopyBank(dest,0,bank,0,newlen)
FreeBank destLen
FreeBank dest
Return bank
End Function
Function gzip_uncompressBank(bank,Length)
sourceLen = BankSize(bank)
dest = CreateBank(Length)
destLen = CreateBank(4)
PokeInt(destLen,0,Length)
If zip_uncompress(dest, destLen, bank,sourceLen) <> 0 Then Return callback
ResizeBank(bank,Length)
CopyBank(dest,0,bank,0,Length)
FreeBank destLen
FreeBank dest
Return bank
End Function |
Comments
None.
Code Archives Forum