summaryrefslogtreecommitdiffstats
path: root/lib/e17/ecore.rb
blob: 668c8e4a7daa20b4457f72bc3f3a2c975358fbea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#! /usr/bin/env ruby
# -*- coding: UTF-8 -*-
#
require 'e17/ffi_helper'
#
module E17
    module ECORE
        #
        extend FFIHelper
        extend FFI::Library
        #
        ffi_lib 'ecore'
        #
        typedef :pointer, :data
        typedef :pointer, :ecore_pipe
        typedef :pointer, :ecore_fd_handler
        #
        callback :ecore_pipe_cb, [:data, :pointer, :int], :void
        callback :ecore_select_function, [:int, :pointer, :pointer, :pointer, :pointer], :int
        callback :ecore_fd_prep_cb, [:data, :pointer], :void
        #
        fcts = [
            # http://docs.enlightenment.org/auto/ecore/group__Ecore__Group.html
            [ :ecore_init, [], :int],
            [ :ecore_shutdown, [], :int],
            [ :ecore_pipe_add, [:ecore_pipe_cb, :data], :ecore_pipe],
            [ :ecore_pipe_del, [:ecore_pipe], :data],
            [ :ecore_pipe_read_close, [:ecore_pipe], :void],
            [ :ecore_pipe_write_close, [:ecore_pipe], :void],
            [ :ecore_pipe_write, [:ecore_pipe, :pointer, :int], :bool],
            # http://docs.enlightenment.org/auto/ecore/group__Ecore__Main__Loop__Group.html
            [ :ecore_main_loop_iterate, [], :void],
            [ :ecore_main_loop_begin, [], :void],
            [ :ecore_main_loop_quit, [], :void],
            [ :ecore_main_loop_select_func_set, [:ecore_select_function], :void],                           # TODO spec
            [ :ecore_main_loop_select_func_get, [], :ecore_select_function],                                # TODO spec
            [ :ecore_main_fd_handler_prepare_callback_set, [:ecore_fd_handler, :ecore_fd_prep_cb, :data], :void], # TODO spec
        ]
        #
        attach_fcts fcts
        #
        create_aliases 'ecore_'.length, fcts
        #
        class EcorePipe
            def initialize cb, data
                @ptr = ECORE.ecore_pipe_add cb, data
            end
            def del; ECORE.ecore_pipe_del @ptr; end
            def read_close; ECORE.ecore_pipe_read_close @ptr; end
            def write_close; ECORE.ecore_pipe_write_close @ptr; end
            def write data
                ECORE.ecore_pipe_write @ptr, FFI::MemoryPointer.from_string(data.to_s), data.to_s.length+1
            end
        end
    end
end
#
# EOF