I suggest you review how the file you're trying to read is built up, from what i can see the procedure should work as it is now, provided the data you read into ComSize is valid and that the predetermined buffer size is also valid. Anyhow this code works for me:
Code: Select all
; Compress using zlib.dll
If OpenLibrary(0, "zlib.dll")
file.s = OpenFileRequester("File to compress", "", "All files|*.*", 0)
If file <> ""
If ReadFile(0, file)
SourceLen.l = Lof()
DestLen.l = SourceLen + SourceLen/1000 + 16
If AllocateMemory(0, SourceLen) And AllocateMemory(1, DestLen)
ReadData(UseMemory(0), SourceLen)
result.l = CallFunction(0, "compress", UseMemory(1), @DestLen, UseMemory(0), SourceLen)
If result = 0
If CreateFile(1, file+".zp")
WriteLong(SourceLen)
WriteLong(DestLen)
WriteData(UseMemory(1), DestLen)
CloseFile(1)
Else
Debug "unable to create output file!"
EndIf
Else
Debug "compression failed, returned with error: "+Str(result)
EndIf
Else
Debug "unable to allocate memory"
EndIf
CloseFile(0)
Else
Debug "Unable to open file."
EndIf
Else
Debug "no file selected"
EndIf
CloseLibrary(0)
Else
Debug "Failed to open dll"
EndIf
; Decompress using zlib.dll
If OpenLibrary(0, "zlib.dll")
file.s = OpenFileRequester("File to decompress", "", "zpak|*.zp", 0)
If file <> ""
If ReadFile(0, file)
DestLen.l = ReadLong()
SourceLen.l = ReadLong()
DestLen.l = DestLen + DestLen/1000 + 16
If AllocateMemory(0, SourceLen) And AllocateMemory(1, DestLen)
ReadData(UseMemory(0), SourceLen)
result.l = CallFunction(0, "uncompress", UseMemory(1), @DestLen, UseMemory(0), SourceLen)
If result = 0
If CreateFile(1, file+".unzp")
WriteData(UseMemory(1), DestLen)
CloseFile(1)
Else
Debug "unable to create output file!"
EndIf
Else
Debug "decompression failed, returned with error: "+Str(result)
EndIf
Else
Debug "unable to allocate memory"
EndIf
CloseFile(0)
Else
Debug "Unable to open file."
EndIf
Else
Debug "no file selected"
EndIf
CloseLibrary(0)
Else
Debug "Failed to open dll"
EndIf