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