tioga 1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Tioga_README +372 -0
- data/lgpl.txt +504 -0
- data/split/Dtable/defs.h +33 -0
- data/split/Dtable/dtable.c +1928 -0
- data/split/Dtable/dtable_intern.h +144 -0
- data/split/Dtable/dvector.h +61 -0
- data/split/Dtable/extconf.rb +4 -0
- data/split/Dtable/include/dtable.h +35 -0
- data/split/Dtable/lib/Dtable_extras.rb +90 -0
- data/split/Dtable/namespace.h +47 -0
- data/split/Dtable/safe_double.h +104 -0
- data/split/Dtable/symbols.c +92 -0
- data/split/Dtable/symbols.h +52 -0
- data/split/Dvector/defs.h +33 -0
- data/split/Dvector/dvector.c +5486 -0
- data/split/Dvector/dvector_intern.h +142 -0
- data/split/Dvector/extconf.rb +4 -0
- data/split/Dvector/include/dvector.h +61 -0
- data/split/Dvector/lib/Dvector_extras.rb +328 -0
- data/split/Dvector/lib/Numeric_extras.rb +134 -0
- data/split/Dvector/namespace.h +47 -0
- data/split/Dvector/safe_double.h +104 -0
- data/split/Dvector/symbols.c +92 -0
- data/split/Dvector/symbols.h +52 -0
- data/split/Flate/defs.h +33 -0
- data/split/Flate/extconf.rb +19 -0
- data/split/Flate/flate.c +156 -0
- data/split/Flate/flate_intern.h +97 -0
- data/split/Flate/include/flate.h +98 -0
- data/split/Flate/namespace.h +47 -0
- data/split/Flate/safe_double.h +104 -0
- data/split/Flate/symbols.c +92 -0
- data/split/Flate/symbols.h +52 -0
- data/split/Function/defs.h +33 -0
- data/split/Function/dvector.h +61 -0
- data/split/Function/extconf.rb +4 -0
- data/split/Function/function.c +988 -0
- data/split/Function/joint_qsort.c +258 -0
- data/split/Function/lib/Function_extras.rb +44 -0
- data/split/Function/namespace.h +47 -0
- data/split/Function/safe_double.h +104 -0
- data/split/Function/symbols.c +92 -0
- data/split/Function/symbols.h +52 -0
- data/split/Tioga/axes.c +774 -0
- data/split/Tioga/defs.h +33 -0
- data/split/Tioga/dtable.h +35 -0
- data/split/Tioga/dvector.h +61 -0
- data/split/Tioga/extconf.rb +4 -0
- data/split/Tioga/figures.c +672 -0
- data/split/Tioga/figures.h +855 -0
- data/split/Tioga/flate.h +98 -0
- data/split/Tioga/init.c +524 -0
- data/split/Tioga/lib/Arcs_and_Circles.rb +64 -0
- data/split/Tioga/lib/ColorConstants.rb +274 -0
- data/split/Tioga/lib/Colorbars.rb +10 -0
- data/split/Tioga/lib/Colormaps.rb +105 -0
- data/split/Tioga/lib/Coordinate_Conversions.rb +194 -0
- data/split/Tioga/lib/Creating_Paths.rb +94 -0
- data/split/Tioga/lib/Doc.rb +91 -0
- data/split/Tioga/lib/Executive.rb +515 -0
- data/split/Tioga/lib/FigMkr.rb +2224 -0
- data/split/Tioga/lib/FigureConstants.rb +125 -0
- data/split/Tioga/lib/Figures_and_Plots.rb +268 -0
- data/split/Tioga/lib/Images.rb +278 -0
- data/split/Tioga/lib/Legends.rb +190 -0
- data/split/Tioga/lib/MarkerConstants.rb +122 -0
- data/split/Tioga/lib/Markers.rb +129 -0
- data/split/Tioga/lib/Page_Frame_Bounds.rb +567 -0
- data/split/Tioga/lib/Rectangles.rb +94 -0
- data/split/Tioga/lib/Shading.rb +100 -0
- data/split/Tioga/lib/Special_Paths.rb +307 -0
- data/split/Tioga/lib/Strokes.rb +129 -0
- data/split/Tioga/lib/TeX_Text.rb +454 -0
- data/split/Tioga/lib/TexPreamble.rb +358 -0
- data/split/Tioga/lib/Titles_and_Labels.rb +306 -0
- data/split/Tioga/lib/Transparency.rb +89 -0
- data/split/Tioga/lib/Using_Paths.rb +164 -0
- data/split/Tioga/lib/Utils.rb +74 -0
- data/split/Tioga/lib/X_and_Y_Axes.rb +749 -0
- data/split/Tioga/lib/irb_tioga.rb +122 -0
- data/split/Tioga/lib/tioga.rb +1 -0
- data/split/Tioga/lib/tioga_ui.rb +5 -0
- data/split/Tioga/lib/tioga_ui_cmds.rb +793 -0
- data/split/Tioga/makers.c +989 -0
- data/split/Tioga/mk_tioga_sty.rb +53 -0
- data/split/Tioga/namespace.h +47 -0
- data/split/Tioga/pdf_font_dicts.c +18253 -0
- data/split/Tioga/pdfcolor.c +486 -0
- data/split/Tioga/pdfcoords.c +505 -0
- data/split/Tioga/pdffile.c +342 -0
- data/split/Tioga/pdfimage.c +536 -0
- data/split/Tioga/pdfpath.c +914 -0
- data/split/Tioga/pdfs.h +229 -0
- data/split/Tioga/pdftext.c +443 -0
- data/split/Tioga/safe_double.h +104 -0
- data/split/Tioga/symbols.c +92 -0
- data/split/Tioga/symbols.h +52 -0
- data/split/Tioga/texout.c +380 -0
- data/split/defs.h +33 -0
- data/split/extconf.rb +107 -0
- data/split/mkmf2.rb +1612 -0
- data/split/namespace.h +47 -0
- data/split/safe_double.h +104 -0
- data/split/scripts/tioga +4 -0
- data/split/symbols.c +92 -0
- data/split/symbols.h +52 -0
- data/tests/dtable_test.data +6 -0
- data/tests/dvector_read_test.data +1 -0
- data/tests/dvector_test.data +101 -0
- data/tests/tc_Dtable.rb +221 -0
- data/tests/tc_Dvector.rb +791 -0
- data/tests/tc_FMkr.rb +162 -0
- data/tests/tc_Flate.rb +45 -0
- data/tests/tc_Function.rb +111 -0
- data/tests/ts_Tioga.rb +38 -0
- metadata +163 -0
@@ -0,0 +1,134 @@
|
|
1
|
+
# Numeric_extras.rb
|
2
|
+
|
3
|
+
# add some Numeric methods
|
4
|
+
|
5
|
+
class Numeric
|
6
|
+
|
7
|
+
# Math functions
|
8
|
+
|
9
|
+
def acos
|
10
|
+
Math.acos(self)
|
11
|
+
end
|
12
|
+
|
13
|
+
def acosh
|
14
|
+
Math.acosh(self)
|
15
|
+
end
|
16
|
+
|
17
|
+
def asin
|
18
|
+
Math.asin(self)
|
19
|
+
end
|
20
|
+
|
21
|
+
def asinh
|
22
|
+
Math.asinh(self)
|
23
|
+
end
|
24
|
+
|
25
|
+
def atan
|
26
|
+
Math.atan(self)
|
27
|
+
end
|
28
|
+
|
29
|
+
def atanh
|
30
|
+
Math.atanh(self)
|
31
|
+
end
|
32
|
+
|
33
|
+
def atan2(n)
|
34
|
+
Math.atan2(self,n)
|
35
|
+
end
|
36
|
+
|
37
|
+
def cos
|
38
|
+
Math.cos(self)
|
39
|
+
end
|
40
|
+
|
41
|
+
def cosh
|
42
|
+
Math.cosh(self)
|
43
|
+
end
|
44
|
+
|
45
|
+
def exp
|
46
|
+
Math.exp(self)
|
47
|
+
end
|
48
|
+
|
49
|
+
def log
|
50
|
+
Math.log(self)
|
51
|
+
end
|
52
|
+
|
53
|
+
def log10
|
54
|
+
Math.log10(self)
|
55
|
+
end
|
56
|
+
|
57
|
+
def sin
|
58
|
+
Math.sin(self)
|
59
|
+
end
|
60
|
+
|
61
|
+
def sinh
|
62
|
+
Math.sinh(self)
|
63
|
+
end
|
64
|
+
|
65
|
+
def sqrt
|
66
|
+
Math.sqrt(self)
|
67
|
+
end
|
68
|
+
|
69
|
+
def tan
|
70
|
+
Math.tan(self)
|
71
|
+
end
|
72
|
+
|
73
|
+
def tanh
|
74
|
+
Math.tanh(self)
|
75
|
+
end
|
76
|
+
|
77
|
+
def neg
|
78
|
+
-self
|
79
|
+
end
|
80
|
+
|
81
|
+
def exp10
|
82
|
+
10**self
|
83
|
+
end
|
84
|
+
|
85
|
+
def inv
|
86
|
+
1/self
|
87
|
+
end
|
88
|
+
|
89
|
+
def trim(cutoff=1e-6)
|
90
|
+
(self.abs < cutoff)? 0.0 : self
|
91
|
+
end
|
92
|
+
|
93
|
+
def pow(y)
|
94
|
+
self**y
|
95
|
+
end
|
96
|
+
|
97
|
+
def raised_to(y)
|
98
|
+
self**y
|
99
|
+
end
|
100
|
+
|
101
|
+
def as_exponent_of(y)
|
102
|
+
y**self
|
103
|
+
end
|
104
|
+
|
105
|
+
def safe_log(cutoff=1e-99)
|
106
|
+
((self > cutoff)? self : cutoff).log
|
107
|
+
end
|
108
|
+
|
109
|
+
def safe_log10(cutoff=1e-99)
|
110
|
+
((self > cutoff)? self : cutoff).log10
|
111
|
+
end
|
112
|
+
|
113
|
+
def safe_inv(cutoff=1e-99)
|
114
|
+
(self.abs > cutoff)? 1/self : (self > 0)? 1/cutoff : -1/cutoff
|
115
|
+
end
|
116
|
+
|
117
|
+
def safe_sqrt
|
118
|
+
(self > 0.0)? self.sqrt : 0.0
|
119
|
+
end
|
120
|
+
|
121
|
+
def safe_asin
|
122
|
+
((self > 1.0)? 1.0 : (self < -1.0)? -1.0 : self).asin
|
123
|
+
end
|
124
|
+
|
125
|
+
def safe_acos
|
126
|
+
((self > 1.0)? 1.0 : (self < -1.0)? -1.0 : self).acos
|
127
|
+
end
|
128
|
+
|
129
|
+
def mod(y)
|
130
|
+
self.modulo(y)
|
131
|
+
end
|
132
|
+
|
133
|
+
|
134
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
/* namespace.h: an attempt at rationalizing shared objects
|
2
|
+
namespace use.
|
3
|
+
|
4
|
+
Copyright (C) 2006 Vincent Fourmond
|
5
|
+
|
6
|
+
This program is free software; you can redistribute it and/or modify
|
7
|
+
it under the terms of the GNU General Library Public License as published
|
8
|
+
by the Free Software Foundation; either version 2 of the License, or
|
9
|
+
(at your option) any later version.
|
10
|
+
|
11
|
+
This program is distributed in the hope that it will be useful,
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
GNU Library General Public License for more details.
|
15
|
+
|
16
|
+
You should have received a copy of the GNU Library General Public License
|
17
|
+
along with this program; if not, write to the Free Software
|
18
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19
|
+
*/
|
20
|
+
|
21
|
+
#ifndef _NAMESPACE_H
|
22
|
+
#define _NAMESPACE_H
|
23
|
+
|
24
|
+
/* This header file provides two OS-specific macros for the definition of
|
25
|
+
extern symbols:
|
26
|
+
|
27
|
+
* PUBLIC, which has to be used to mark objects that will be used
|
28
|
+
outside the module
|
29
|
+
|
30
|
+
* PRIVATE, for symbols which are "extern" but intern to the module
|
31
|
+
|
32
|
+
Please don't add "extern" after the PRIVATE or PUBLIC declaration
|
33
|
+
as this would break compilation on Darwin.
|
34
|
+
*/
|
35
|
+
|
36
|
+
#ifdef __APPLE__
|
37
|
+
# define PRIVATE __private_extern__
|
38
|
+
# define PUBLIC
|
39
|
+
#elif __GNUC__ >= 4 /* we have the visibility attribute */
|
40
|
+
# define PRIVATE __attribute__ ((visibility ("hidden")))
|
41
|
+
# define PUBLIC __attribute__ ((visibility ("default")))
|
42
|
+
#else /* not really good */
|
43
|
+
# define PRIVATE
|
44
|
+
# define PUBLIC
|
45
|
+
#endif /* __APPLE__ and __GNU_C_ >= 4*/
|
46
|
+
|
47
|
+
#endif
|
@@ -0,0 +1,104 @@
|
|
1
|
+
/**********************************************************************
|
2
|
+
|
3
|
+
safe_double.h: small abstraction for storing double without endianess
|
4
|
+
problems
|
5
|
+
|
6
|
+
Copyright (C) 2006 Vincent Fourmond
|
7
|
+
|
8
|
+
This program is free software; you can redistribute it and/or modify
|
9
|
+
it under the terms of the GNU General Library Public License as published
|
10
|
+
by the Free Software Foundation; either version 2 of the License, or
|
11
|
+
(at your option) any later version.
|
12
|
+
|
13
|
+
This program is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU Library General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU Library General Public License
|
19
|
+
along with this program; if not, write to the Free Software
|
20
|
+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
|
+
|
22
|
+
**********************************************************************/
|
23
|
+
|
24
|
+
/* This file provides two functions: store_double and get_double, which
|
25
|
+
can be used in a 'safe' way to store doubles and retrive them
|
26
|
+
in a hopefully platform-independent form. However, it just
|
27
|
+
stores it without regards to that if ieee754.h isn't found...
|
28
|
+
*/
|
29
|
+
|
30
|
+
#ifndef _DOUBLE_H
|
31
|
+
#define _DOUBLE_H
|
32
|
+
|
33
|
+
#define STORE_LOWER_BYTE(a,p) do {\
|
34
|
+
*(p++) = (a) & 0xFF; (a) >>= 8; }\
|
35
|
+
while(0)
|
36
|
+
#define STORE_UNSIGNED(a,p) for(i = 0; i < 4; i++) STORE_LOWER_BYTE(a,p);
|
37
|
+
#define GET_UNSIGNED(a,p) do { a = 0; for(i = 0; i < 4; i++) \
|
38
|
+
(a) |= *(p++) << (i * 8); } while (0)
|
39
|
+
|
40
|
+
#ifdef HAVE_IEEE754_H
|
41
|
+
#include <ieee754.h>
|
42
|
+
|
43
|
+
|
44
|
+
static inline void store_double(double a, unsigned char * p)
|
45
|
+
{
|
46
|
+
unsigned int tmp;
|
47
|
+
int i;
|
48
|
+
union ieee754_double d;
|
49
|
+
d.d = a;
|
50
|
+
/* we store it with lower bytes firts */
|
51
|
+
tmp = d.ieee.mantissa1;
|
52
|
+
STORE_UNSIGNED(tmp, p);
|
53
|
+
tmp = d.ieee.negative << 31 |
|
54
|
+
d.ieee.exponent << 20 |
|
55
|
+
d.ieee.mantissa0;
|
56
|
+
STORE_UNSIGNED(tmp, p);
|
57
|
+
}
|
58
|
+
|
59
|
+
|
60
|
+
static inline double get_double(const unsigned char * p)
|
61
|
+
{
|
62
|
+
unsigned int tmp;
|
63
|
+
int i;
|
64
|
+
union ieee754_double d;
|
65
|
+
GET_UNSIGNED(tmp, p);
|
66
|
+
d.ieee.mantissa1 = tmp;
|
67
|
+
GET_UNSIGNED(tmp, p);
|
68
|
+
d.ieee.mantissa0 = tmp & 0xFFFFF;
|
69
|
+
d.ieee.exponent = (tmp >> 20) & 0x7FF;
|
70
|
+
d.ieee.negative = (tmp >> 31) & 0x1;
|
71
|
+
return d.d;
|
72
|
+
}
|
73
|
+
|
74
|
+
#else
|
75
|
+
|
76
|
+
union basic_double{
|
77
|
+
double d;
|
78
|
+
struct {
|
79
|
+
unsigned int a:32;
|
80
|
+
unsigned int b:32;
|
81
|
+
} i;
|
82
|
+
};
|
83
|
+
|
84
|
+
static inline void store_double(double a, unsigned char * p)
|
85
|
+
{
|
86
|
+
union basic_double d;
|
87
|
+
int i;
|
88
|
+
d.d = a;
|
89
|
+
STORE_UNSIGNED(d.i.a, p);
|
90
|
+
STORE_UNSIGNED(d.i.b, p);
|
91
|
+
}
|
92
|
+
|
93
|
+
static inline double get_double(const unsigned char * p)
|
94
|
+
{
|
95
|
+
union basic_double d;
|
96
|
+
int i;
|
97
|
+
GET_UNSIGNED(d.i.a, p);
|
98
|
+
GET_UNSIGNED(d.i.b, p);
|
99
|
+
return d.d;
|
100
|
+
}
|
101
|
+
|
102
|
+
#endif /* HAVE_IEEE754_H */
|
103
|
+
|
104
|
+
#endif /* _DOUBLE_H */
|
@@ -0,0 +1,92 @@
|
|
1
|
+
/*
|
2
|
+
Copyright (C) 2006 Vincent Fourmond
|
3
|
+
|
4
|
+
Symbols is free software; you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU General Library Public License as published
|
6
|
+
by the Free Software Foundation; either version 2 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
Symbols is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU Library General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU Library General Public License
|
15
|
+
along with Dvector; if not, write to the Free Software
|
16
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
17
|
+
*/
|
18
|
+
|
19
|
+
|
20
|
+
/* Simple code for sharing C symbols across different Ruby libraries */
|
21
|
+
|
22
|
+
#include <ruby.h>
|
23
|
+
#include <intern.h>
|
24
|
+
|
25
|
+
#include <namespace.h>
|
26
|
+
|
27
|
+
|
28
|
+
/* MV stands for Module Variable */
|
29
|
+
#define MV_SYMBOLS "@_exported_C_symbols"
|
30
|
+
/* modified to use instance variables instead of global class variables:
|
31
|
+
this way, children don't overwrite the parent's export table
|
32
|
+
*/
|
33
|
+
|
34
|
+
|
35
|
+
/* makes sure that the hash is registered for the given
|
36
|
+
module and returns it */
|
37
|
+
static VALUE get_symbol_hash(VALUE module)
|
38
|
+
{
|
39
|
+
VALUE hash;
|
40
|
+
ID mv_id = rb_intern(MV_SYMBOLS);
|
41
|
+
if(RTEST(rb_ivar_defined(module, mv_id)))
|
42
|
+
{
|
43
|
+
hash = rb_ivar_get(module, mv_id);
|
44
|
+
Check_Type(hash, T_HASH);
|
45
|
+
return hash;
|
46
|
+
}
|
47
|
+
else
|
48
|
+
{
|
49
|
+
/* module variable uninitialized, we need to make sure it's here */
|
50
|
+
hash = rb_hash_new();
|
51
|
+
rb_ivar_set(module, mv_id, hash);
|
52
|
+
return hash;
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
/* registers a symbol in the given module. This one is the internal
|
57
|
+
function */
|
58
|
+
PRIVATE void rb_export_symbol(VALUE module, const char * symbol_name,
|
59
|
+
void * symbol)
|
60
|
+
{
|
61
|
+
VALUE hash = get_symbol_hash(module);
|
62
|
+
rb_hash_aset(hash, rb_str_new2(symbol_name),LONG2NUM((long) symbol));
|
63
|
+
}
|
64
|
+
|
65
|
+
PRIVATE void * rb_import_symbol_no_raise(VALUE module,
|
66
|
+
const char * symbol_name)
|
67
|
+
{
|
68
|
+
VALUE hash = rb_iv_get(module, MV_SYMBOLS);
|
69
|
+
if(TYPE(hash) != T_HASH)
|
70
|
+
return NULL; /* doesn't fail, but the importing module
|
71
|
+
should definitely check the return value. Beware
|
72
|
+
of segfaults ! */
|
73
|
+
VALUE symbol = rb_hash_aref(hash, rb_str_new2(symbol_name));
|
74
|
+
|
75
|
+
if(TYPE(symbol) == T_FIXNUM || TYPE(symbol) == T_BIGNUM)
|
76
|
+
return (void *) NUM2LONG(symbol);
|
77
|
+
return NULL;
|
78
|
+
}
|
79
|
+
|
80
|
+
/* same as before, but raises something is the return value is NULL,
|
81
|
+
which is probably best as a default behavior*/
|
82
|
+
PRIVATE void * rb_import_symbol(VALUE module, const char * symbol_name)
|
83
|
+
{
|
84
|
+
void * symbol = rb_import_symbol_no_raise(module, symbol_name);
|
85
|
+
if(symbol)
|
86
|
+
return symbol;
|
87
|
+
/* we get the name of the module: */
|
88
|
+
VALUE module_name = rb_funcall(module, rb_intern("to_s"), 0);
|
89
|
+
rb_raise(rb_eRuntimeError, "The symbol %s was not found in "
|
90
|
+
"module %s", symbol_name,
|
91
|
+
rb_string_value_cstr(&module_name));
|
92
|
+
}
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#ifndef _SYMBOLS_H
|
2
|
+
#define _SYMBOLS_H
|
3
|
+
|
4
|
+
#include <ruby.h>
|
5
|
+
/* A small layer for exporting and importing symbols from
|
6
|
+
a compiled module */
|
7
|
+
|
8
|
+
#include <namespace.h>
|
9
|
+
|
10
|
+
|
11
|
+
PRIVATE void rb_export_symbol(VALUE module, const char * symbol_name,
|
12
|
+
void * symbol);
|
13
|
+
PRIVATE void * rb_import_symbol(VALUE module, const char * symbol_name);
|
14
|
+
PRIVATE void * rb_import_symbol_no_raise(VALUE module,
|
15
|
+
const char * symbol_name);
|
16
|
+
|
17
|
+
/* a shortcut for exporting something with the same name */
|
18
|
+
#define RB_EXPORT_SYMBOL(module, name) \
|
19
|
+
rb_export_symbol(module, #name, name)
|
20
|
+
|
21
|
+
/* A shortcut for getting a symbol */
|
22
|
+
|
23
|
+
#define DECLARE_SYMBOL(ret_type,name,args) \
|
24
|
+
typedef ret_type (*rb_export_##name##_type) args;\
|
25
|
+
PRIVATE rb_export_##name##_type name
|
26
|
+
|
27
|
+
#define IMPLEMENT_SYMBOL(name)\
|
28
|
+
PRIVATE rb_export_##name##_type name = 0;
|
29
|
+
|
30
|
+
#define RB_IMPORT_SYMBOL(module, name) \
|
31
|
+
name = (rb_export_##name##_type) rb_import_symbol(module, #name)
|
32
|
+
|
33
|
+
|
34
|
+
/* These three macro enable a simple use of function declaration: this way,
|
35
|
+
you can type in a header file that is used by the importer:
|
36
|
+
|
37
|
+
DECLARE_SYMBOL(int, biniou, (int, int));
|
38
|
+
|
39
|
+
in one file of the importer code, you write
|
40
|
+
|
41
|
+
IMPLEMENT_SYMBOL(biniou);
|
42
|
+
|
43
|
+
and in the Init_... function, you write:
|
44
|
+
|
45
|
+
RB_IMPORT_SYMBOL(module, biniou);
|
46
|
+
|
47
|
+
and you can just use biniou as if it was a function declared as
|
48
|
+
usual in the header file
|
49
|
+
*/
|
50
|
+
#endif
|
51
|
+
|
52
|
+
|
data/split/Flate/defs.h
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
/**********************************************************************
|
2
|
+
|
3
|
+
defs.h:
|
4
|
+
some definitions that are used everywhere and that depend on some
|
5
|
+
HAVE_* macros.
|
6
|
+
|
7
|
+
Copyright (C) 2006 Vincent Fourmond
|
8
|
+
|
9
|
+
This program is free software; you can redistribute it and/or modify
|
10
|
+
it under the terms of the GNU General Library Public License as published
|
11
|
+
by the Free Software Foundation; either version 2 of the License, or
|
12
|
+
(at your option) any later version.
|
13
|
+
|
14
|
+
This program is distributed in the hope that it will be useful,
|
15
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
GNU Library General Public License for more details.
|
18
|
+
|
19
|
+
You should have received a copy of the GNU Library General Public License
|
20
|
+
along with this program; if not, write to the Free Software
|
21
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
22
|
+
|
23
|
+
**********************************************************************/
|
24
|
+
|
25
|
+
|
26
|
+
#ifdef HAVE_ISNAN
|
27
|
+
/* we use isnan and isinf, which are much faster than the workaround */
|
28
|
+
#define is_okay_number(x) (! isnan(x) && ! isinf(x))
|
29
|
+
#else
|
30
|
+
#define is_okay_number(x) ((x) - (x) == 0.0)
|
31
|
+
#define isnan(x) ((x) != (x))
|
32
|
+
/* yes, as funny as it may look NaN != NaN, and that's the only one */
|
33
|
+
#endif
|