gmt 0.2.3 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8c3d9adf57be499c296fab1aa6c6c23d1001d17709f96c0cfc62d5a3fa344a66
4
- data.tar.gz: e51bafc40060577b2bc98a376dcc23b863e586697122e28335582ac0ffea522b
3
+ metadata.gz: 6ad7de33d11e4ab6419c28a78a14ba7ae9d5e0418485ab794060f8ca7a5a6f21
4
+ data.tar.gz: 11e72187266c674aad88d7597f2f50a2b714c2443820564a470bef2a180a5fdf
5
5
  SHA512:
6
- metadata.gz: 29d50bccf9a8868617653da560a520e2af073e81dcd8a99e75086f4108abfd6516f4a08073cadad8d78b60687434c06032299708b5dac9c674a09c2b5fdf9ed1
7
- data.tar.gz: 8f57a9db15bd3a1d5afbd899af330632e6fc72fec26c64c5ba64781ec939d42cc502a07b9d373ce02e1874e423d607dab608735d155b360130a66c81a3746ec4
6
+ metadata.gz: 921660bab096dd80e3908914ceca695090c83c9a7a644be6b594dc51c448c03ae1d6d33de02f5f02dc028ea32496bd672d8ac3ff980d98ee1ec7ed0170788f35
7
+ data.tar.gz: ffc9d3d9a51563c4e0295ccf7c621053db09fb5c302639dcabe0e516a01c09415670e8eab9f012857b0d4ecfe119a4a38a85c6962b178dc90451951a35a027a3
data/ext/gmt/gmt.c CHANGED
@@ -1,7 +1,11 @@
1
1
  #include <ruby.h>
2
+ #include <ruby/version.h>
3
+
2
4
  #include <gmt.h>
3
5
  #include <gmt_version.h>
4
6
 
7
+ #include <errno.h>
8
+
5
9
  #include "option.h"
6
10
 
7
11
  #define API_VER(major, minor, release) (10000 * major + 100 * minor + release)
@@ -15,17 +19,25 @@ typedef struct
15
19
 
16
20
  /* helpers */
17
21
 
18
- static void raise_unless_class_data(gmt_t *gmt)
19
- {
20
- if (gmt == NULL)
21
- rb_raise(rb_eRuntimeError, "failed fetch of GMT class data");
22
- }
22
+ static void gmt_free(void*);
23
23
 
24
- static void raise_if_error(int err, const char *module)
25
- {
26
- if (err)
27
- rb_raise(rb_eRuntimeError, "failed call to GMT module %s", module);
28
- }
24
+ static rb_data_type_t data_type = {
25
+ .wrap_struct_name = "ruby-gmt-wrap",
26
+ .function = {
27
+ .dmark = NULL,
28
+ .dfree = gmt_free,
29
+ .dsize = NULL,
30
+ #if RUBY_API_VERSION_CODE < 20700
31
+ .reserved = { NULL, NULL }
32
+ #else
33
+ .dcompact = NULL,
34
+ .reserved = { NULL }
35
+ #endif
36
+ },
37
+ .parent = NULL,
38
+ .data = NULL,
39
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY
40
+ };
29
41
 
30
42
  /* ruby object interface */
31
43
 
@@ -38,13 +50,18 @@ static void gmt_free(void *p)
38
50
  GMT_Destroy_Session(gmt->session);
39
51
  gmt->session = NULL;
40
52
  }
53
+
54
+ free(gmt);
41
55
  }
42
56
 
43
- static VALUE gmt_alloc(VALUE klass)
57
+ static VALUE gmt_alloc(VALUE cls)
44
58
  {
45
59
  gmt_t *gmt;
46
60
 
47
- VALUE obj = Data_Make_Struct(klass, gmt_t, NULL, gmt_free, gmt);
61
+ if ((gmt = malloc(sizeof(gmt_t))) == NULL)
62
+ rb_raise(rb_eNoMemError, "failed to alloc GMT struct");
63
+
64
+ VALUE obj = TypedData_Wrap_Struct(cls, &data_type, gmt);
48
65
 
49
66
  gmt->session = NULL;
50
67
 
@@ -55,7 +72,7 @@ static VALUE gmt_init(VALUE self)
55
72
  {
56
73
  gmt_t *gmt;
57
74
 
58
- Data_Get_Struct(self, gmt_t, gmt);
75
+ TypedData_Get_Struct(self, gmt_t, &data_type, gmt);
59
76
 
60
77
  gmt->session =
61
78
  GMT_Create_Session("Session name", 2, 0, NULL);
@@ -70,7 +87,7 @@ static VALUE gmt_release(VALUE self)
70
87
  {
71
88
  gmt_t *gmt;
72
89
 
73
- Data_Get_Struct(self, gmt_t, gmt);
90
+ TypedData_Get_Struct(self, gmt_t, &data_type, gmt);
74
91
 
75
92
  if (gmt->session)
76
93
  {
@@ -89,8 +106,10 @@ static VALUE gmt_simple(const char *name, int argc, VALUE *argv, VALUE self)
89
106
  rb_scan_args(argc, argv, "*1", &files, &opts);
90
107
 
91
108
  gmt_t *gmt;
92
- Data_Get_Struct(self, gmt_t, gmt);
93
- raise_unless_class_data(gmt);
109
+ TypedData_Get_Struct(self, gmt_t, &data_type, gmt);
110
+
111
+ if (gmt == NULL)
112
+ rb_raise(rb_eRuntimeError, "failed fetch of GMT class data");
94
113
 
95
114
  void *session = gmt->session;
96
115
 
@@ -98,10 +117,22 @@ static VALUE gmt_simple(const char *name, int argc, VALUE *argv, VALUE self)
98
117
  gmt_opts = ruby_array_to_gmt_options(opts, session);
99
118
  gmt_opts = append_inputs_to_gmt_options(files, gmt_opts, session);
100
119
 
120
+ errno = 0;
101
121
  int err = GMT_Call_Module(session, name, -1, gmt_opts);
122
+ int gmt_errno = errno;
102
123
 
103
124
  GMT_Destroy_Options(session, &gmt_opts);
104
- raise_if_error(err, name);
125
+
126
+ if (err != 0)
127
+ {
128
+ VALUE gmt_syserr;
129
+
130
+ if ((gmt_errno != 0) &&
131
+ ((gmt_syserr = rb_syserr_new(gmt_errno, NULL)) != 0))
132
+ rb_exc_raise(gmt_syserr);
133
+ else
134
+ rb_raise(rb_eRuntimeError, "failed call to GMT module %s", name);
135
+ }
105
136
 
106
137
  return Qtrue;
107
138
  }
@@ -114,7 +145,7 @@ static VALUE gmt_simple(const char *name, int argc, VALUE *argv, VALUE self)
114
145
 
115
146
  The "modern mode" modules (which have a slicker way of routing and
116
147
  combining postscript output) will probably need a different treatment,
117
- possibly a more attractive on from the Ruby perspective; for now we
148
+ possibly a more attractive one from the Ruby perspective; for now we
118
149
  just limit ourselves to the classic mode.
119
150
  */
120
151
 
@@ -218,10 +249,6 @@ GMT_FUN(sphtriangulate)
218
249
 
219
250
  /* Convert or extract subsets of data */
220
251
 
221
- #if API_AT_LEAST(6, 2, 0)
222
- GMT_FUN(gmtbinstats)
223
- #endif
224
-
225
252
  GMT_FUN(gmtconnect)
226
253
  GMT_FUN(gmtconvert)
227
254
  GMT_FUN(gmtselect)
@@ -241,6 +268,10 @@ GMT_FUN(grd2kml)
241
268
  GMT_FUN(grd2rgb) /* https://github.com/GenericMappingTools/gmt/pull/425 */
242
269
  #endif
243
270
 
271
+ #if API_AT_LEAST(6, 2, 0)
272
+ GMT_FUN(gmtbinstats)
273
+ #endif
274
+
244
275
  /* trends in 1-D and 2-D data */
245
276
 
246
277
  GMT_FUN(fitcircle)
data/ext/gmt/option.c CHANGED
@@ -32,7 +32,7 @@ static gmt_option_t* append_option(void *session,
32
32
  return GMT_Append_Option(session, gmt_opt, gmt_opts);
33
33
  }
34
34
 
35
- extern gmt_option_t* ruby_array_to_gmt_options(VALUE opts, void *session)
35
+ gmt_option_t* ruby_array_to_gmt_options(VALUE opts, void *session)
36
36
  {
37
37
  if (TYPE(opts) != T_ARRAY)
38
38
  rb_raise(rb_eArgError, "options should be an array");
@@ -74,9 +74,9 @@ extern gmt_option_t* ruby_array_to_gmt_options(VALUE opts, void *session)
74
74
  return gmt_opts;
75
75
  }
76
76
 
77
- extern gmt_option_t* append_inputs_to_gmt_options(VALUE files,
78
- gmt_option_t* gmt_opts,
79
- void *session)
77
+ gmt_option_t* append_inputs_to_gmt_options(VALUE files,
78
+ gmt_option_t *gmt_opts,
79
+ void *session)
80
80
  {
81
81
  if (TYPE(files) != T_ARRAY)
82
82
  rb_raise(rb_eArgError, "inputs should be an array");
data/ext/gmt/option.h CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  typedef struct GMT_OPTION gmt_option_t;
16
16
 
17
- extern gmt_option_t* ruby_array_to_gmt_options(VALUE, void*);
18
- extern gmt_option_t* append_inputs_to_gmt_options(VALUE, gmt_option_t*, void*);
17
+ gmt_option_t* ruby_array_to_gmt_options(VALUE, void*);
18
+ gmt_option_t* append_inputs_to_gmt_options(VALUE, gmt_option_t*, void*);
19
19
 
20
20
  #endif
data/lib/gmt.rb CHANGED
@@ -66,6 +66,18 @@
66
66
  #
67
67
  # using this format.
68
68
  #
69
+ # One occasionally has need for multiple calls to the same option: the
70
+ # <code>-B</code> option being the usual culprit. In this case, use a single
71
+ # <code>:B</code> key and an array of the arguments:
72
+ #
73
+ # B: [
74
+ # 'xa%g+l%s' % [dx, x_label],
75
+ # 'ya%g+l%s' % [dy, y_label],
76
+ # 'nWeS'
77
+ # ], ...
78
+ #
79
+ # for example.
80
+ #
69
81
  # == PostScript functions
70
82
  #
71
83
  # When creating complex PostScript plots one needs to make several calls to
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gmt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - J.J. Green
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-09 00:00:00.000000000 Z
11
+ date: 2024-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -131,7 +131,7 @@ requirements:
131
131
  - GMT5/6 development libraries (compile)
132
132
  - GMT5/6 installation (test)
133
133
  - ghostscript (test)
134
- rubygems_version: 3.1.2
134
+ rubygems_version: 3.2.3
135
135
  signing_key:
136
136
  specification_version: 4
137
137
  summary: Generic Mapping Tools (GMT)