Seite 1 von 1

PB4.xx Speicher packen/entpacken im Zipformat

Verfasst: 18.10.2008 10:44
von ts-soft

Code: Alles auswählen

; 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

; Beispiel:
Define test.s = "Feel the ..Pure.. Power"
Define *Mem = zipPackMemory(@test, StringByteLength(test))

If *Mem
  Define *destMem = AllocateMemory(StringByteLength(test))
  Debug PeekS(*destMem, zipUnpackMemory(*Mem, *destMem))
EndIf
Kann ja vielleicht einer brauchen :wink:

// edit
Anpassung an MacOS

Re: PB4.xx Speicher packen/entpacken im Zipformat

Verfasst: 18.10.2008 11:42
von Kiffi
Danke! :allright:

(allerdings solltest Du in Deinem Beispiel einen anderen (längeren)
Teststring nehmen, denn in diesem Fall ist der gepackte Output länger als
die Quelle ;-))


Grüße ... Kiffi

Re: PB4.xx Speicher packen/entpacken im Zipformat

Verfasst: 18.10.2008 11:44
von ts-soft
Kiffi hat geschrieben:(allerdings solltest Du in Deinem Beispiel einen anderen (längeren) Teststring nehmen, denn in diesem Fall ist der gepackte Output länger als die Quelle ;-))
Stimmt ja garnicht, im Unicode-Modus spart man 3 Byte :lol:

Re: PB4.xx Speicher packen/entpacken im Zipformat

Verfasst: 18.10.2008 11:50
von Kiffi
nimm einfach

Code: Alles auswählen

Define test.s = Space(32000)
das ist beeindruckender. Mit oder ohne Unicode ;-)

Grüße ... Kiffi

Re: PB4.xx Speicher packen/entpacken im Zipformat

Verfasst: 18.10.2008 11:58
von ts-soft
Kiffi hat geschrieben:nimm einfach

Code: Alles auswählen

Define test.s = Space(32000)
das ist beeindruckender. Mit oder ohne Unicode ;-)

Grüße ... Kiffi
Knapp 100 KB hat die zlib.lib, ist also auch noch nicht so beeindruckend :mrgreen:

Gruß
Thomas