Page 1 of 1
PackMemory x64 differs on x86
Posted: Sun Nov 01, 2009 8:09 pm
by Thunder93
Hi folks,
Can someone tell me if I'm doing something wrong...?, is it normal to be seeing PackMemory results with PureBasic x86 being different from PackMemory results with PureBasic x64 .. on the same unaltered file?
Code: Select all
newSize.l = PackMemory(mem1, mem2, Size,9)
x64 newSize =
88
x86 newSize =
70
Regards,
Thunder93
Re: PackMemory x64 differs on x86
Posted: Sun Nov 01, 2009 8:16 pm
by ts-soft
x64 use briefLZ and x86 use jCalg1
greetings
Thomas
/edit
you can use this for both:
Code: Select all
; Autor: Thomas (ts-soft) Schulz
; PB-Version: 4.xx
; OS: windows/linux
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
ImportC #PB_Compiler_Home + "purelibraries/linux/libraries/zlib.a"
CompilerCase #PB_OS_Windows
ImportC "zlib.lib"
CompilerEndSelect
compress2(*dest, *destLen, *source, sourceLen, level)
uncompress(*dest, *destLen, *source, sourceLen)
EndImport
Procedure zipPackMemory(*source, sourceLen = #PB_Default, level = #PB_Default)
Protected *dest, destLen
If level < #PB_Default Or level > 9 : level = #PB_Default : EndIf
If *source
If sourceLen = #PB_Default : sourceLen = MemorySize(*source) : EndIf
destLen = sourceLen + 13 + (Int(sourceLen / 100))
*dest = AllocateMemory(destLen)
If *dest
If Not compress2(*dest, @destLen, *source, sourceLen, level)
*dest = ReAllocateMemory(*dest, destLen)
ProcedureReturn *dest
EndIf
EndIf
EndIf
EndProcedure
Procedure zipUnpackMemory(*source, *dest)
Protected sourceLen = MemorySize(*source)
Protected destLen = MemorySize(*dest)
If Not uncompress(*dest, @destLen, *source, sourceLen)
ProcedureReturn destLen
EndIf
EndProcedure
Re: PackMemory x64 differs on x86
Posted: Sun Nov 01, 2009 8:21 pm
by Thunder93
Thanks Thomas,
I remember being told this before, ... I like jCalg1 better, does better compression than the other one.
Re: PackMemory x64 differs on x86
Posted: Sun Nov 01, 2009 8:25 pm
by ts-soft
Thunder93 wrote:I like jCalg1 better, does better compression than the other one.
but can't pack all files like png, iso and so on, to many errors. I use mostly zip or for fast compress briefLZ
Re: PackMemory x64 differs on x86
Posted: Sun Nov 01, 2009 9:30 pm
by DoubleDutch
ts-soft: Thanks, nice routines that will be very handy.

Re: PackMemory x64 differs on x86
Posted: Sun Nov 01, 2009 10:20 pm
by Thunder93
Thanks ts-soft for sharing!
For the current project I'm looking to use jCalg1, for a few different reasons. But your code will surely be useful enough in the future!
Regards,
Thunder93
Re: PackMemory x64 differs on x86
Posted: Sun Nov 01, 2009 11:15 pm
by jamirokwai
ts-soft wrote:x64 use briefLZ and x86 use jCalg1
greetings
Thomas
/edit
you can use this for both:
Code: Select all
; Autor: Thomas (ts-soft) Schulz
; PB-Version: 4.xx
; OS: windows/linux/macos
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
ImportC #PB_Compiler_Home + "purelibraries/linux/libraries/zlib.a"
CompilerCase #PB_OS_MacOS
ImportC "/usr/lib/libz.dylib"
CompilerCase #PB_OS_Windows
ImportC "zlib.lib"
CompilerEndSelect
compress2(*dest, *destLen, *source, sourceLen, level)
uncompress(*dest, *destLen, *source, sourceLen)
EndImport
Procedure zipPackMemory(*source, sourceLen = #PB_Default, level = #PB_Default)
Protected *dest, destLen
If level < #PB_Default Or level > 9 : level = #PB_Default : EndIf
If *source
If sourceLen = #PB_Default : sourceLen = MemorySize(*source) : EndIf
destLen = sourceLen + 13 + (Int(sourceLen / 100))
*dest = AllocateMemory(destLen)
If *dest
If Not compress2(*dest, @destLen, *source, sourceLen, level)
*dest = ReAllocateMemory(*dest, destLen)
ProcedureReturn *dest
EndIf
EndIf
EndIf
EndProcedure
Procedure zipUnpackMemory(*source, *dest)
Protected sourceLen = MemorySize(*source)
Protected destLen = MemorySize(*dest)
If Not uncompress(*dest, @destLen, *source, sourceLen)
ProcedureReturn destLen
EndIf
EndProcedure
Hi there,
I added 2 lines for MacOS X-Support. Works great on PB 4.40b5 and PB 4.31 Intel

I will use these routines for my projects... I think on Mac OS, the file "/usr/lib/libz.dylib" is installed on default. But I don't know if it is save to rely on the existance. Maybe it's better to put a copy into the app-bundle also?!