Page 1 of 1

UseJCALG1Packer() - UncompressMemory to zip converter??

Posted: Sun Mar 31, 2013 1:24 pm
by r7mk4
Hi,

everytime when there are some bank holidays I try to code a little bit. So sorry for my stupid question here,but I'm not doing that every day.
I want to convert an old program from PB 5.0 to PB 5.11 but the JCALG1 support is only for "unpacking".
Well, that would be okay, but it seems that I can use only the UncompressMemory-comamnd and not the Openpack-command.

This is too much for my coding skills. Can someone give me a code to open an old pack (JCALG1) archive and save the files directly or save the files in one of the new types (zip, whatever)?

Cheers

Re: UseJCALG1Packer() - UncompressMemory to zip converter??

Posted: Sun Mar 31, 2013 8:46 pm
by eJan
Hi, before i've used freak's code, try if it can help you (using packed 'TweakUI.exe' inside DataSection):

Code: Select all

; freak: http://www.purebasic.fr/english/viewtopic.php?p=71438#71438

DataSection
  FileStart:
  IncludeBinary "output.pak"
  FileEnd:
EndDataSection

UseJCALG1Packer()

Procedure.l UnpackIncludeFile(*CompressedData)
  Static *UncompressedData
  If *UncompressedData                        ; Free the memory from the last call (if there was any)
    FreeMemory(*UncompressedData)
  EndIf
  OriginalSize      = PeekL(*CompressedData)  ; read the original size
  *CompressedData   + 4                       ; move away from the size value to the packed data
  *UncompressedData = AllocateMemory(OriginalSize) ; allocate enough memory
  If *UncompressedData
    If UncompressMemory(*CompressedData, OriginalSize, *UncompressedData, OriginalSize) ; uncompress the data and return the address
      ProcedureReturn *UncompressedData
    EndIf
  EndIf
  ProcedureReturn 0
EndProcedure

Procedure ExtractIncludePack(file_name.s)
  Protected Unpack, Size
  If CreateFile(0, file_name)
    Unpack = UnpackIncludeFile(?FileStart)
    Size   = MemorySize(Unpack)
    WriteData(0, Unpack, Size)
    CloseFile(0)
    ProcedureReturn 1
  Else
    MessageRequester("Error", "Could not install the file - Installation failed")
    ProcedureReturn 0
  EndIf
EndProcedure

ExtractIncludePack("TweakUI.exe")