pgplot 0.1.7
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 +7 -0
- data/FuncUsage +46 -0
- data/README +107 -0
- data/README.ja +91 -0
- data/demo/pgdemo1.rb +414 -0
- data/demo/pgdemo15.rb +78 -0
- data/demo/pgdemo3.rb +188 -0
- data/demo/pgdemo4.rb +80 -0
- data/demo/pgdemo9.rb +44 -0
- data/ext/cogen.rb +158 -0
- data/ext/depend +4 -0
- data/ext/extconf.rb +124 -0
- data/ext/kwarg.c +78 -0
- data/ext/rb_pgplot.c +1896 -0
- data/ext/rb_pgplot.c.in +1268 -0
- data/ext/version.h +1 -0
- data/test/pgband.rb +21 -0
- data/test/pgcurs.rb +14 -0
- data/test/pggray.rb +21 -0
- data/test/pglcur.rb +14 -0
- data/test/pgline.rb +13 -0
- data/test/pgncur.rb +14 -0
- data/test/pgolin.rb +14 -0
- data/test/pgtick.rb +12 -0
- metadata +99 -0
data/ext/kwarg.c
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
/*
|
2
|
+
kwarg.c : Process keyword arguments for Ruby
|
3
|
+
|
4
|
+
Copyright (c) 2001 Masahiro TANAKA <masa@ir.isas.ac.jp>
|
5
|
+
|
6
|
+
This program is free software.
|
7
|
+
You can distribute/modify this program
|
8
|
+
under the same terms as Ruby itself.
|
9
|
+
NO WARRANTY.
|
10
|
+
*/
|
11
|
+
#include <ruby.h>
|
12
|
+
|
13
|
+
/* void rb_scan_kw_args __((VALUE, ...)); */
|
14
|
+
|
15
|
+
static VALUE
|
16
|
+
kw_hash_i(i, tmp)
|
17
|
+
VALUE i, tmp;
|
18
|
+
{
|
19
|
+
VALUE key;
|
20
|
+
|
21
|
+
key = RARRAY_PTR(i)[0];
|
22
|
+
if (TYPE(key)==T_SYMBOL) {
|
23
|
+
key = rb_funcall(key, rb_intern("id2name"), 0);
|
24
|
+
} else
|
25
|
+
if (TYPE(key)!=T_STRING) {
|
26
|
+
rb_raise(rb_eArgError, "keywords must be String or Symbol");
|
27
|
+
}
|
28
|
+
|
29
|
+
rb_hash_aset(tmp, key, RARRAY_PTR(i)[1]);
|
30
|
+
return Qnil;
|
31
|
+
}
|
32
|
+
|
33
|
+
#ifdef HAVE_STDARG_PROTOTYPES
|
34
|
+
#include <stdarg.h>
|
35
|
+
#define va_init_list(a,b) va_start(a,b)
|
36
|
+
#else
|
37
|
+
#include <varargs.h>
|
38
|
+
#define va_init_list(a,b) va_start(a)
|
39
|
+
#endif
|
40
|
+
|
41
|
+
void
|
42
|
+
#ifdef HAVE_STDARG_PROTOTYPES
|
43
|
+
rb_scan_kw_args(VALUE hash, ...)
|
44
|
+
#else
|
45
|
+
rb_scan_kw_args(hash, va_alist)
|
46
|
+
VALUE hash;
|
47
|
+
va_dcl
|
48
|
+
#endif
|
49
|
+
{
|
50
|
+
char *key;
|
51
|
+
VALUE *var, val, str, tmp;
|
52
|
+
va_list vargs;
|
53
|
+
|
54
|
+
va_init_list(vargs, hash);
|
55
|
+
|
56
|
+
tmp = rb_hash_new();
|
57
|
+
if (TYPE(hash) == T_HASH)
|
58
|
+
rb_iterate(rb_each, hash, kw_hash_i, tmp);
|
59
|
+
else if (hash != Qnil)
|
60
|
+
rb_fatal("rb_san_kw_args: non-hash arg passed");
|
61
|
+
|
62
|
+
for (;;) {
|
63
|
+
key = va_arg(vargs, char*);
|
64
|
+
if (!key) break;
|
65
|
+
var = va_arg(vargs, VALUE*);
|
66
|
+
str = rb_str_new2(key);
|
67
|
+
val = rb_funcall(tmp, rb_intern("delete"), 1, str);
|
68
|
+
if (var) *var = val;
|
69
|
+
}
|
70
|
+
|
71
|
+
if (rb_funcall(tmp, rb_intern("empty?"), 0)==Qfalse) {
|
72
|
+
val = rb_funcall(tmp, rb_intern("keys"), 0);
|
73
|
+
val = rb_funcall(val, rb_intern("join"), 1, rb_str_new2(","));
|
74
|
+
rb_raise(rb_eArgError, "unknown keywords: %s",StringValuePtr(val));
|
75
|
+
}
|
76
|
+
|
77
|
+
va_end(vargs);
|
78
|
+
}
|