Code archives/Miscellaneous/gzip files and banks

This code has been declared by its author to be Public Domain code.

Download source code

gzip files and banks by Klaas2004
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