PureBasic
;
; ------------------------------------------------------------
;
;   PureBasic - Compressor example file
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;

UseBriefLZPacker() ; Small and fast packer

If ReadFile(0, OpenFileRequester("Выберите файл для сжатия", "", "*.*", 0))
  FileLength = Lof(0)
  
  ; Выделит 2 буфера памяти, необходимые для сжатия..
  ;
  *Source = AllocateMemory(FileLength)
  *Target = AllocateMemory(FileLength)
  If FileLength And *Source And *Target
    ReadData(0, *Source, FileLength) ; Считает весь файл в буфер памяти
    
    ; Сжатие файла, который находится в памяти (используйте таймер, чтобы увидеть время, затрачиваемое на сжатие...).
    ;
    CompressedLength = CompressMemory(*Source, FileLength, *Target, FileLength)
    If CompressedLength

      DecompressedLength = UncompressMemory(*Target, CompressedLength, *Source, FileLength)
      If DecompressedLength = FileLength
        MessageRequester("Инфо", "Достижения сжатия: "+#LF$+#LF$+"Старый размер: "+Str(FileLength)+#LF$+"Новый размер: "+Str(CompressedLength))
      EndIf
    Else
      MessageRequester("Ошибка", "Невозможно сжать файл")
    EndIf 
    
    FreeMemory(*Source)
    FreeMemory(*Target)
    
  EndIf
  
  CloseFile(0)
EndIf

End