ruby-gr 0.0.16 → 0.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +103 -29
- data/lib/gr.rb +106 -71
- data/lib/gr/ffi.rb +6 -1
- data/lib/gr/plot.rb +179 -154
- data/lib/gr3.rb +41 -44
- data/lib/gr_commons/fiddley.rb +1 -1
- data/lib/gr_commons/gr_commons.rb +4 -0
- data/lib/gr_commons/search_shared_library.rb +31 -0
- data/lib/gr_commons/version.rb +1 -1
- data/lib/grm.rb +52 -0
- data/lib/grm/ffi.rb +73 -0
- data/lib/grm/grmbase.rb +13 -0
- data/lib/grm/version.rb +5 -0
- metadata +28 -8
data/lib/gr3.rb
CHANGED
@@ -2,39 +2,39 @@
|
|
2
2
|
|
3
3
|
# OverView of GR.rb
|
4
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
|
-
#
|
5
|
+
# +--------------------+ +--------------------+
|
6
|
+
# | GR module | | GR3 module |
|
7
|
+
# | +----------------+ | | +----------------+ |
|
8
|
+
# | | GR::FFI | | | | GR3::FFI | |
|
9
|
+
# | | + libGR.so | | | | + libGR3.so | |
|
10
|
+
# | +----------------+ | | +----------------+ |
|
11
|
+
# | | define_method | | | define_method |
|
12
|
+
# | +----------------+ | | +----------------+ |
|
13
|
+
# | | | GR::GRBase | | | | | GR3::GR3Base | |
|
14
|
+
# | | v (Pri^ate) | | | | v (Pri^ate) | |
|
15
|
+
# | +++--------------+ | | +++--------------+ |
|
16
|
+
# | | Extend | | | Extend |
|
17
|
+
# | v | | v +-------+ |
|
18
|
+
# | +-----------+ | | | Check | |
|
19
|
+
# | | GR::Plot | | | <--+ Error | |
|
20
|
+
# | +-----------+ | | +-------+ |
|
21
|
+
# +--------------------+ +----------+---------+
|
22
|
+
# ^ ^
|
23
|
+
# | +------------------+ |
|
24
|
+
# Extend | | GRCommons module | | Extend
|
25
|
+
# | | +--------------+ | |
|
26
|
+
# | | | Fiddley | | |
|
27
|
+
# | | +--------------+ | |
|
28
|
+
# | | +--------------+ | |
|
29
|
+
# +----+ CommonUtils +----+
|
30
|
+
# | | +--------------+ | |
|
31
|
+
# | | +--------------+ | |
|
32
|
+
# +----+ Version +----+
|
33
|
+
# | | +--------------+ |
|
34
|
+
# | | +--------------+ |
|
35
|
+
# +----+JupyterSupport| |
|
36
|
+
# | +--------------+ |
|
37
|
+
# +------------------+
|
38
38
|
#
|
39
39
|
# (You can edit the above AA diagram with http://asciiflow.com/)
|
40
40
|
#
|
@@ -60,23 +60,20 @@ module GR3
|
|
60
60
|
attr_accessor :ffi_lib
|
61
61
|
end
|
62
62
|
|
63
|
-
|
63
|
+
require_relative 'gr_commons/gr_commons'
|
64
|
+
extend GRCommons::SearchSharedLibrary
|
64
65
|
|
65
66
|
# Platforms | path
|
66
67
|
# Windows | bin/libGR3.dll
|
67
68
|
# MacOSX | lib/libGR3.so (NOT .dylib)
|
68
69
|
# Ubuntu | lib/libGR3.so
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
70
|
+
self.ffi_lib = case RbConfig::CONFIG['host_os']
|
71
|
+
when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
|
72
|
+
search_shared_library('libGR3.dll')
|
73
|
+
else
|
74
|
+
search_shared_library('libGR3.so')
|
75
|
+
end
|
75
76
|
|
76
|
-
# change the default encoding to UTF-8.
|
77
|
-
ENV['GKS_ENCODING'] ||= 'utf8'
|
78
|
-
|
79
|
-
require_relative 'gr_commons/gr_commons'
|
80
77
|
require_relative 'gr3/version'
|
81
78
|
require_relative 'gr3/ffi'
|
82
79
|
require_relative 'gr3/gr3base'
|
data/lib/gr_commons/fiddley.rb
CHANGED
@@ -13,7 +13,7 @@ module GRCommons
|
|
13
13
|
# NOTE: This module is only part of the original code.
|
14
14
|
# kojix2 adds, deletes, and modifies several methods.
|
15
15
|
module Fiddley
|
16
|
-
# NOTE: GR.rb supports 2.
|
16
|
+
# NOTE: GR.rb supports 2.5 +. Unpack 1 does not work under 2.3.
|
17
17
|
|
18
18
|
module Utils
|
19
19
|
# assumes short = 16bit, int = 32bit, long long = 64bit
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module GRCommons
|
2
|
+
module SearchSharedLibrary
|
3
|
+
def search_shared_library(gr_lib_name)
|
4
|
+
if Object.const_defined?(:RubyInstaller)
|
5
|
+
ENV['GRDIR'] ||= [
|
6
|
+
RubyInstaller::Runtime.msys2_installation.msys_path,
|
7
|
+
RubyInstaller::Runtime.msys2_installation.mingwarch
|
8
|
+
].join(File::ALT_SEPARATOR)
|
9
|
+
recursive_search(gr_lib_name, ENV['GRDIR']).tap do |path|
|
10
|
+
RubyInstaller::Runtime.add_dll_directory(File.dirname(path))
|
11
|
+
end
|
12
|
+
else
|
13
|
+
unless ENV['GRDIR']
|
14
|
+
warn 'Please set environment variable GRDIR'
|
15
|
+
exit 1
|
16
|
+
end
|
17
|
+
recursive_search(gr_lib_name, ENV['GRDIR'])
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def recursive_search(name, base_dir)
|
22
|
+
Dir.chdir(base_dir) do
|
23
|
+
if path = Dir["**/#{name}"].first
|
24
|
+
File.expand_path(path)
|
25
|
+
else
|
26
|
+
raise StandardError '#{name} not found in #{base_dir}'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/gr_commons/version.rb
CHANGED
data/lib/grm.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Check Fiddle version.
|
4
|
+
require 'fiddle'
|
5
|
+
|
6
|
+
# Check if fiddle supports variadic arguments.
|
7
|
+
# Fiddle is a standard Gem and may not have VERSION constant.
|
8
|
+
if !Fiddle.const_defined?(:VERSION) ||
|
9
|
+
(Gem::Version.new(Fiddle::VERSION) <= Gem::Version.new('1.0.0'))
|
10
|
+
raise LoadError, <<~MSG
|
11
|
+
Failed to load GRM module
|
12
|
+
Fiddle 1.0.1 or higher is required to run GRM.
|
13
|
+
See https://github.com/ruby/fiddle
|
14
|
+
MSG
|
15
|
+
end
|
16
|
+
|
17
|
+
module GRM
|
18
|
+
class Error < StandardError; end
|
19
|
+
|
20
|
+
class << self
|
21
|
+
attr_accessor :ffi_lib
|
22
|
+
end
|
23
|
+
|
24
|
+
require_relative 'gr_commons/gr_commons'
|
25
|
+
extend GRCommons::SearchSharedLibrary
|
26
|
+
|
27
|
+
# Platforms | path
|
28
|
+
# Windows | bin/libGRM.dll
|
29
|
+
# MacOSX | lib/libGRM.so (NOT .dylib)
|
30
|
+
# Ubuntu | lib/libGRM.so
|
31
|
+
self.ffi_lib = case RbConfig::CONFIG['host_os']
|
32
|
+
when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
|
33
|
+
search_shared_library('libGRM.dll')
|
34
|
+
else
|
35
|
+
search_shared_library('libGRM.so')
|
36
|
+
end
|
37
|
+
|
38
|
+
require_relative 'grm/version'
|
39
|
+
require_relative 'grm/ffi'
|
40
|
+
require_relative 'grm/grmbase'
|
41
|
+
|
42
|
+
# `inquiry` methods etc. are defined here.
|
43
|
+
extend GRCommons::GRCommonUtils
|
44
|
+
|
45
|
+
# `XXX` is the default type in GR.
|
46
|
+
# A Ruby array or NArray passed to GR method is automatically converted to
|
47
|
+
# a Fiddley::MemoryPointer in the GRBase class.
|
48
|
+
extend GRMBase
|
49
|
+
|
50
|
+
class << self
|
51
|
+
end
|
52
|
+
end
|
data/lib/grm/ffi.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'fiddle/import'
|
4
|
+
|
5
|
+
module GRM
|
6
|
+
# FFI Wrapper module for GRM.
|
7
|
+
# The functions for GRM are listed here.
|
8
|
+
# Add functions here when a new version of GR is released.
|
9
|
+
module FFI
|
10
|
+
extend Fiddle::Importer
|
11
|
+
|
12
|
+
begin
|
13
|
+
dlload GRM.ffi_lib
|
14
|
+
rescue LoadError
|
15
|
+
raise LoadError, 'Could not find GR Framework'
|
16
|
+
end
|
17
|
+
|
18
|
+
extend GRCommons::Extern
|
19
|
+
|
20
|
+
# Currently, the declarations of GRM functions are distributed in several
|
21
|
+
# header files.
|
22
|
+
|
23
|
+
# https://github.com/sciapp/gr/blob/master/lib/grm/args.h
|
24
|
+
try_extern 'grm_args_t *grm_args_new(void)'
|
25
|
+
try_extern 'void grm_args_delete(grm_args_t *args)'
|
26
|
+
try_extern 'int grm_args_push(grm_args_t *args, const char *key, const char *value_format, ...)'
|
27
|
+
try_extern 'int grm_args_push_buf(grm_args_t *args, const char *key, const char *value_format, const void *buffer, int apply_padding)'
|
28
|
+
try_extern 'int grm_args_contains(const grm_args_t *args, const char *keyword)'
|
29
|
+
try_extern 'void grm_args_clear(grm_args_t *args)'
|
30
|
+
try_extern 'void grm_args_remove(grm_args_t *args, const char *key)'
|
31
|
+
try_extern 'grm_args_ptr_t grm_length(double value, const char *unit)'
|
32
|
+
|
33
|
+
# https://github.com/sciapp/gr/blob/master/lib/grm/dump.h
|
34
|
+
try_extern 'void grm_dump(const grm_args_t *args, FILE *f)'
|
35
|
+
try_extern 'void grm_dump_json(const grm_args_t *args, FILE *f)'
|
36
|
+
try_extern 'char *grm_dump_json_str(void)'
|
37
|
+
|
38
|
+
# https://github.com/sciapp/gr/blob/master/lib/grm/event.h
|
39
|
+
try_extern 'int grm_register(grm_event_type_t type, grm_event_callback_t callback)'
|
40
|
+
try_extern 'int grm_unregister(grm_event_type_t type)'
|
41
|
+
|
42
|
+
# https://github.com/sciapp/gr/blob/master/lib/grm/interaction.h
|
43
|
+
try_extern 'int grm_input(const grm_args_t *input_args)'
|
44
|
+
try_extern 'int grm_get_box(const int x1, const int y1, const int x2, const int y2, const int keep_aspect_ratio, int *x, int *y, int *w, int *h)'
|
45
|
+
try_extern 'grm_input(const grm_args_t *input_args)'
|
46
|
+
try_extern 'grm_tooltip_info_t *grm_get_tooltip(const int, const int)'
|
47
|
+
|
48
|
+
# https://github.com/sciapp/gr/blob/master/lib/grm/net.h
|
49
|
+
try_extern 'void *grm_open(int is_receiver, const char *name, unsigned int id,
|
50
|
+
const char *(*custom_recv)(const char *, unsigned int),
|
51
|
+
int (*custom_send)(const char *, unsigned int, const char *))'
|
52
|
+
try_extern 'grm_args_t *grm_recv(const void *p, grm_args_t *args)'
|
53
|
+
try_extern 'int grm_send(const void *p, const char *data_desc, ...)'
|
54
|
+
try_extern 'int grm_send_buf(const void *p, const char *data_desc, const void *buffer, int apply_padding)'
|
55
|
+
try_extern 'int grm_send_ref(const void *p, const char *key, char format, const void *ref, int len)'
|
56
|
+
try_extern 'int grm_send_args(const void *p, const grm_args_t *args)'
|
57
|
+
try_extern 'void grm_close(const void *p)'
|
58
|
+
|
59
|
+
# https://github.com/sciapp/gr/blob/master/lib/grm/plot.h
|
60
|
+
try_extern 'void grm_finalize(void)'
|
61
|
+
try_extern 'int grm_clear(void)'
|
62
|
+
try_extern 'unsigned int grm_max_plotid(void)'
|
63
|
+
try_extern 'int grm_merge(const grm_args_t *args)'
|
64
|
+
try_extern 'int grm_merge_extended(const grm_args_t *args, int hold, const char *identificator)'
|
65
|
+
try_extern 'int grm_merge_hold(const grm_args_t *args)'
|
66
|
+
try_extern 'int grm_merge_named(const grm_args_t *args, const char *identificator)'
|
67
|
+
try_extern 'int grm_plot(const grm_args_t *args)'
|
68
|
+
try_extern 'int grm_switch(unsigned int id)'
|
69
|
+
|
70
|
+
# https://github.com/sciapp/gr/blob/master/lib/grm/util.h
|
71
|
+
try_extern 'FILE *grm_get_stdout(void)'
|
72
|
+
end
|
73
|
+
end
|
data/lib/grm/grmbase.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GRM
|
4
|
+
# This module automatically converts Ruby arrays and Numo::Narray into
|
5
|
+
# Fiddley::MemoryPointer.
|
6
|
+
module GRMBase
|
7
|
+
extend GRCommons::DefineMethods
|
8
|
+
define_ffi_methods(FFI,
|
9
|
+
prefix: 'grm_',
|
10
|
+
default_type: :float) # FIXME!
|
11
|
+
end
|
12
|
+
private_constant :GRMBase
|
13
|
+
end
|
data/lib/grm/version.rb
ADDED
metadata
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-gr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kojix2
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: histogram
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
|
-
type: :
|
20
|
+
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
@@ -25,7 +25,21 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: numo-narray
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - ">="
|
@@ -39,7 +53,7 @@ dependencies:
|
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
56
|
+
name: fiddle
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - ">="
|
@@ -146,11 +160,17 @@ files:
|
|
146
160
|
- lib/gr_commons/gr_common_utils.rb
|
147
161
|
- lib/gr_commons/gr_commons.rb
|
148
162
|
- lib/gr_commons/jupyter_support.rb
|
163
|
+
- lib/gr_commons/search_shared_library.rb
|
149
164
|
- lib/gr_commons/version.rb
|
165
|
+
- lib/grm.rb
|
166
|
+
- lib/grm/ffi.rb
|
167
|
+
- lib/grm/grmbase.rb
|
168
|
+
- lib/grm/version.rb
|
150
169
|
homepage: https://github.com/red-data-tools/GR.rb
|
151
170
|
licenses:
|
152
171
|
- MIT
|
153
|
-
metadata:
|
172
|
+
metadata:
|
173
|
+
msys2_mingw_dependencies: gr
|
154
174
|
post_install_message:
|
155
175
|
rdoc_options: []
|
156
176
|
require_paths:
|
@@ -159,7 +179,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
159
179
|
requirements:
|
160
180
|
- - ">="
|
161
181
|
- !ruby/object:Gem::Version
|
162
|
-
version: '2.
|
182
|
+
version: '2.5'
|
163
183
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
164
184
|
requirements:
|
165
185
|
- - ">="
|