Module: FFI::OpenMPT

Defined in:
lib/ffi/openmpt.rb,
lib/ffi/openmpt/api.rb,
lib/ffi/openmpt/module.rb,
lib/ffi/openmpt/openmpt.rb,
lib/ffi/openmpt/version.rb

Defined Under Namespace

Modules: API Classes: Module

Constant Summary collapse

VERSION =
'0.2.0'

Class Method Summary collapse

Class Method Details

.core_versionObject



14
15
16
# File 'lib/ffi/openmpt/openmpt.rb', line 14

def self.core_version
  [API.openmpt_get_core_version].pack('L>').unpack('CCCC')
end

.error_string(error) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/ffi/openmpt/openmpt.rb', line 43

def self.error_string(error)
  ptr = API.openmpt_error_string(error)
  str = ptr.read_string
  API.openmpt_free_string(ptr)

  str
end

.extension_supported?(ext) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
37
# File 'lib/ffi/openmpt/openmpt.rb', line 34

def self.extension_supported?(ext)
  supported = API.openmpt_is_extension_supported(ext.to_s)
  supported == 1
end

.library_versionObject



9
10
11
12
# File 'lib/ffi/openmpt/openmpt.rb', line 9

def self.library_version
  maj, min, pat = [API.openmpt_get_library_version].pack('L>').unpack('CCS')
  [maj, min, pat >> 8]
end

.probe_file(filename) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/ffi/openmpt/openmpt.rb', line 51

def self.probe_file(filename)
  probe_size = API.openmpt_probe_file_header_get_recommended_size
  data = ::File.binread(filename, probe_size)
  data_size = ::File.size(filename)
  probe_result = API.openmpt_probe_file_header(
    API::OPENMPT_PROBE_FILE_HEADER_FLAGS_DEFAULT,
    data,
    data.bytesize,
    data_size,
    API::LogSilent, nil, API::ErrorIgnore, nil, nil, nil
  )

  probe_result == API::OPENMPT_PROBE_FILE_HEADER_RESULT_SUCCESS
end

.string(key) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/ffi/openmpt/openmpt.rb', line 18

def self.string(key)
  ptr = API.openmpt_get_string(key.to_s)
  str = ptr.read_string
  API.openmpt_free_string(ptr)

  str
end

.supported_extensionsObject



26
27
28
29
30
31
32
# File 'lib/ffi/openmpt/openmpt.rb', line 26

def self.supported_extensions
  ptr = API.openmpt_get_supported_extensions
  exts = ptr.read_string.split(';').map(&:to_sym)
  API.openmpt_free_string(ptr)

  exts
end

.transient_error?(error) ⇒ Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/ffi/openmpt/openmpt.rb', line 39

def self.transient_error?(error)
  API.openmpt_error_is_transient(error) == 1
end