lib/libmspack.rb
require 'ffi'
require 'ffi-compiler/loader'
require 'libmspack/version'
require 'libmspack/exceptions'
require 'libmspack/mspack'
require 'libmspack/system'
require 'libmspack/mscab'
require 'libmspack/mschm'
require 'libmspack/mshlp'
require 'libmspack/mskwaj'
require 'libmspack/mslit'
require 'libmspack/msoab'
require 'libmspack/msszdd'
require 'libmspack/constants'
module LibMsPack
extend FFI::Library
ffi_lib FFI::Compiler::Loader.find('mspack')
include LibMsPack::Constants
include LibMsPack::MsPack
include LibMsPack::MsCab
include LibMsPack::MsChm
include LibMsPack::MsHlp
include LibMsPack::MsKwaj
include LibMsPack::MsLit
include LibMsPack::MsOab
include LibMsPack::MsSzdd
attach_function :SysSelfTestInternal, :mspack_sys_selftest_internal, [ :int ], :int
# Enquire about the binary compatibility version of a specific interface in the library.
#
# Currently, the following interfaces are defined:
#
# * MSPACK_VER_LIBRARY: the overall library
# * MSPACK_VER_SYSTEM: the MsPackSystem interface
# * MSPACK_VER_MSCABD: the MsCabDecompressor interface
# * MSPACK_VER_MSCABC: the MsCabCompressor interface
# * MSPACK_VER_MSCHMD: the MsChmDecompressor interface
# * MSPACK_VER_MSCHMC: the MsChmCompressor interface
# * MSPACK_VER_MSLITD: the MsLitDecompressor interface
# * MSPACK_VER_MSLITC: the MsLitCompressor interface
# * MSPACK_VER_MSHLPD: the MsHlpDecompressor interface
# * MSPACK_VER_MSHLPC: the MsHlpCompressor interface
# * MSPACK_VER_MSSZDDD: the MsSzddDecompressor interface
# * MSPACK_VER_MSSZDDC: the MsSzddCompressor interface
# * MSPACK_VER_MSKWAJD: the MsKwajDecompressor interface
# * MSPACK_VER_MSKWAJC: the MsKwajCompressor interface
# * MSPACK_VER_MSOABD: the MsOabDecompressor interface
# * MSPACK_VER_MSOABC: the MsOabCompressor interface
#
# The result of the function should be interpreted as follows:
#
# * -1: this interface is completely unknown to the library
# * 0: this interface is known, but non-functioning
# * 1: this interface has all basic functionality
# * 2, 3, ...: this interface has additional functionality, clearly marked in the documentation as "version 2", "version 3" and so on.
#
# @!method Version(entity)
# @param [Fixnum] entity the interface to request current version of
# @return [Fixnum] the version of the requested interface
attach_function :Version, :mspack_version, [ :int ], :int
# Creates a new CAB compressor.
# @!method CreateCabCompressor(sys)
# @param [MsPack::MsPackSystem, nil] sys a custom mspack system, or nil to use the default
# @return [MsCab::MsCabCompressor, nil]
attach_function :CreateCabCompressor, :mspack_create_cab_compressor, [ MsPackSystem.ptr ], MsCabCompressor.ptr
# Destroys an existing CAB compressor.
# @!method DestroyCabCompressor(system)
# @param [MsCab::MsCabCompressor] compressor the MsCab::MsCabCompressor to destroy
attach_function :DestroyCabCompressor, :mspack_destroy_cab_compressor, [ MsCabCompressor.ptr ], :void
# Creates a new CAB decompressor.
# @!method CreateCabDecompressor(sys)
# @param [MsPack::MsPackSystem, nil] sys a custom mspack system, or nil to use the default
# @return [MsCab::MsCabDecompressor, nil]
attach_function :CreateCabDecompressor, :mspack_create_cab_decompressor, [ MsPackSystem.ptr ], MsCabDecompressor.ptr
# Destroys an existing CAB decompressor.
# @!method DestroyCabDecompressor(decompressor)
# @param [MsCab::MsCabDecompressor] decompressor the MsCab::MsCabDecompressor to destroy
attach_function :DestroyCabDecompressor, :mspack_destroy_cab_decompressor, [ MsCabDecompressor.ptr ], :void
attach_function :CreateChmCompressor, :mspack_create_chm_compressor, [ MsPackSystem.ptr ], :pointer
attach_function :DestroyChmCompressor, :mspack_destroy_chm_compressor, [ :pointer ], :void
attach_function :CreateChmDecompressor, :mspack_create_chm_decompressor, [ MsPackSystem.ptr ], :pointer
attach_function :DestroyChmDecompressor, :mspack_destroy_chm_decompressor, [ :pointer ], :void
attach_function :CreateLitCompressor, :mspack_create_lit_compressor, [ MsPackSystem.ptr ], MsLitCompressor.ptr
attach_function :DestroyLitCompressor, :mspack_destroy_lit_compressor, [ MsLitCompressor.ptr ], :void
attach_function :CreateLitDecompressor, :mspack_create_lit_decompressor, [ MsPackSystem.ptr ], MsLitDecompressor.ptr
attach_function :DestroyLitDecompressor, :mspack_destroy_lit_decompressor, [ MsLitDecompressor.ptr ], :void
attach_function :CreateHlpCompressor, :mspack_create_hlp_compressor, [ MsPackSystem.ptr ], MsHlpCompressor.ptr
attach_function :DestroyHlpCompressor, :mspack_destroy_hlp_compressor, [ MsHlpCompressor.ptr ], :void
attach_function :CreateHlpDecompressor, :mspack_create_hlp_decompressor, [ MsPackSystem.ptr ], MsHlpDecompressor.ptr
attach_function :DestroyHlpDecompressor, :mspack_destroy_hlp_decompressor, [ MsHlpDecompressor.ptr ], :void
attach_function :CreateSzddCompressor, :mspack_create_szdd_compressor, [ MsPackSystem.ptr ], :pointer
attach_function :DestroySzddCompressor, :mspack_destroy_szdd_compressor, [ :pointer ], :void
attach_function :CreateSzddDecompressor, :mspack_create_szdd_decompressor, [ MsPackSystem.ptr ], :pointer
attach_function :DestroySzddDecompressor, :mspack_destroy_szdd_decompressor, [ :pointer ], :void
attach_function :CreateKwajCompressor, :mspack_create_kwaj_compressor, [ MsPackSystem.ptr ], :pointer
attach_function :DestroyKwajCompressor, :mspack_destroy_kwaj_compressor, [ :pointer ], :void
attach_function :CreateKwajDecompressor, :mspack_create_kwaj_decompressor, [ MsPackSystem.ptr ], :pointer
attach_function :DestroyKwajDecompressor, :mspack_destroy_kwaj_decompressor, [ :pointer ], :void
attach_function :CreateOabCompressor, :mspack_create_oab_compressor, [ MsPackSystem.ptr ], :pointer
attach_function :DestroyOabCompressor, :mspack_destroy_oab_compressor, [ :pointer ], :void
attach_function :CreateOabDecompressor, :mspack_create_oab_decompressor, [ MsPackSystem.ptr ], :pointer
attach_function :DestroyOabDecompressor, :mspack_destroy_oab_decompressor, [ :pointer ], :void
# System self-test function, to ensure both library and calling program can use one another.
#
# A result of MSPACK_ERR_OK means the library and caller are compatible. Any other result indicates that the library and caller are not compatible and should not be used. In particular, a value of MSPACK_ERR_SEEK means the library and caller use different off_t datatypes.
#
# @return [Fixnum] the result of the self-test
def self.SysSelfTest
LibMsPack.SysSelfTestInternal(8)
end
end