axon 0.0.2 → 0.1.0
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.
- data/CHANGELOG.rdoc +9 -3
- data/README.rdoc +29 -36
- data/Rakefile +26 -21
- data/TODO.rdoc +1 -6
- data/ext/axon/axon.c +6 -15
- data/ext/axon/extconf.rb +19 -9
- data/ext/axon/interpolation.c +147 -0
- data/ext/axon/jpeg.c +1207 -0
- data/ext/axon/png.c +542 -0
- data/lib/axon.rb +235 -32
- data/lib/axon/cropper.rb +80 -18
- data/lib/axon/fit.rb +69 -19
- data/lib/axon/generators.rb +109 -0
- data/lib/axon/scalers.rb +160 -0
- data/test/helper.rb +151 -6
- data/test/reader_tests.rb +37 -82
- data/test/scaler_tests.rb +102 -0
- data/test/stress_helper.rb +58 -0
- data/test/stress_tests.rb +8 -5
- data/test/test_bilinear_scaler.rb +60 -2
- data/test/test_cropper.rb +68 -1
- data/test/test_fit.rb +35 -0
- data/test/test_generators.rb +21 -0
- data/test/test_image.rb +61 -0
- data/test/test_jpeg_reader.rb +96 -94
- data/test/test_jpeg_writer.rb +95 -8
- data/test/test_nearest_neighbor_scaler.rb +28 -4
- data/test/test_png_reader.rb +12 -8
- data/test/test_png_writer.rb +8 -6
- data/test/writer_tests.rb +129 -111
- metadata +71 -128
- data/.gemtest +0 -0
- data/ext/axon/bilinear_interpolation.c +0 -115
- data/ext/axon/interpolation.h +0 -7
- data/ext/axon/jpeg_common.c +0 -118
- data/ext/axon/jpeg_common.h +0 -37
- data/ext/axon/jpeg_native_writer.c +0 -248
- data/ext/axon/jpeg_reader.c +0 -774
- data/ext/axon/nearest_neighbor_interpolation.c +0 -50
- data/ext/axon/png_common.c +0 -21
- data/ext/axon/png_common.h +0 -18
- data/ext/axon/png_native_writer.c +0 -166
- data/ext/axon/png_reader.c +0 -381
- data/lib/axon/axon.so +0 -0
- data/lib/axon/bilinear_scaler.rb +0 -60
- data/lib/axon/jpeg_writer.rb +0 -41
- data/lib/axon/nearest_neighbor_scaler.rb +0 -39
- data/lib/axon/png_writer.rb +0 -35
- data/lib/axon/scaler.rb +0 -41
- data/lib/axon/solid.rb +0 -23
- data/test/_test_readme.rb +0 -34
- data/test/test_exif.rb +0 -39
- data/test/test_generator.rb +0 -10
- data/test/test_icc.rb +0 -18
- data/test/test_jpeg.rb +0 -9
- data/test/test_png.rb +0 -9
metadata
CHANGED
@@ -1,164 +1,107 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: axon
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 2
|
10
|
-
version: 0.0.2
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Timothy Elliott
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
12
|
+
date: 2012-01-06 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: ! 'axon reads, manipulates, and writes images.
|
17
15
|
|
18
|
-
date: 2011-08-16 00:00:00 -07:00
|
19
|
-
default_executable:
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
22
|
-
name: rake-compiler
|
23
|
-
prerelease: false
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
33
|
-
type: :development
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: hoe
|
37
|
-
prerelease: false
|
38
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
|
-
requirements:
|
41
|
-
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
hash: 23
|
44
|
-
segments:
|
45
|
-
- 2
|
46
|
-
- 10
|
47
|
-
version: "2.10"
|
48
|
-
type: :development
|
49
|
-
version_requirements: *id002
|
50
|
-
description: |-
|
51
|
-
Axon is a library for streaming and manipulating JPEG and PNG images. It scales
|
52
|
-
and crops images along the way.
|
53
|
-
|
54
|
-
By limiting its functionality, Axon is able to depend on two ubiquitous
|
55
|
-
libraries: libjpeg and libpng. Axon can be installed anywhere those libraries
|
56
|
-
are available.
|
57
|
-
|
58
|
-
Axon never stores an entire image in memory. All images and operations are
|
59
|
-
streamed from an input to an output. As a result, memory requirements and
|
60
|
-
latency are low.
|
61
|
-
email:
|
62
|
-
- tle@holymonkey.com
|
63
|
-
executables: []
|
64
16
|
|
65
|
-
|
66
|
-
- ext/axon/extconf.rb
|
67
|
-
extra_rdoc_files: []
|
17
|
+
axon depends only on libjpeg and libpng.
|
68
18
|
|
69
|
-
|
70
|
-
|
19
|
+
|
20
|
+
axon never stores an entire image in memory. All images and operations are
|
21
|
+
|
22
|
+
streamed. This keeps memory requirements and latency low.
|
23
|
+
|
24
|
+
'
|
25
|
+
email: tle@holymonkey.com
|
26
|
+
executables: []
|
27
|
+
extensions:
|
28
|
+
- ext/axon/extconf.rb
|
29
|
+
extra_rdoc_files:
|
71
30
|
- README.rdoc
|
31
|
+
- CHANGELOG.rdoc
|
32
|
+
- TODO.rdoc
|
33
|
+
files:
|
72
34
|
- Rakefile
|
35
|
+
- README.rdoc
|
36
|
+
- CHANGELOG.rdoc
|
73
37
|
- TODO.rdoc
|
74
|
-
- ext/axon/bilinear_interpolation.c
|
75
|
-
- ext/axon/extconf.rb
|
76
|
-
- ext/axon/iccjpeg.c
|
77
|
-
- ext/axon/iccjpeg.h
|
78
|
-
- ext/axon/interpolation.h
|
79
|
-
- ext/axon/jpeg_common.c
|
80
|
-
- ext/axon/jpeg_common.h
|
81
|
-
- ext/axon/jpeg_native_writer.c
|
82
|
-
- ext/axon/jpeg_reader.c
|
83
|
-
- ext/axon/axon.c
|
84
|
-
- ext/axon/nearest_neighbor_interpolation.c
|
85
|
-
- ext/axon/png_common.c
|
86
|
-
- ext/axon/png_common.h
|
87
|
-
- ext/axon/png_native_writer.c
|
88
|
-
- ext/axon/png_reader.c
|
89
38
|
- lib/axon.rb
|
90
|
-
- lib/axon/bilinear_scaler.rb
|
91
|
-
- lib/axon/cropper.rb
|
92
39
|
- lib/axon/fit.rb
|
93
|
-
- lib/axon/
|
94
|
-
- lib/axon/
|
95
|
-
- lib/axon/
|
96
|
-
-
|
97
|
-
-
|
98
|
-
-
|
99
|
-
-
|
100
|
-
-
|
101
|
-
-
|
102
|
-
-
|
40
|
+
- lib/axon/cropper.rb
|
41
|
+
- lib/axon/scalers.rb
|
42
|
+
- lib/axon/generators.rb
|
43
|
+
- ext/axon/interpolation.c
|
44
|
+
- ext/axon/png.c
|
45
|
+
- ext/axon/jpeg.c
|
46
|
+
- ext/axon/axon.c
|
47
|
+
- ext/axon/iccjpeg.c
|
48
|
+
- ext/axon/iccjpeg.h
|
49
|
+
- ext/axon/extconf.rb
|
50
|
+
- test/stress_helper.rb
|
51
|
+
- test/test_image.rb
|
52
|
+
- test/test_png_writer.rb
|
53
|
+
- test/test_fit.rb
|
54
|
+
- test/test_generators.rb
|
103
55
|
- test/test_bilinear_scaler.rb
|
56
|
+
- test/test_nearest_neighbor_scaler.rb
|
57
|
+
- test/test_jpeg_writer.rb
|
58
|
+
- test/stress_tests.rb
|
104
59
|
- test/test_cropper.rb
|
105
|
-
- test/test_exif.rb
|
106
|
-
- test/test_generator.rb
|
107
|
-
- test/test_icc.rb
|
108
|
-
- test/test_jpeg.rb
|
109
60
|
- test/test_jpeg_reader.rb
|
110
|
-
- test/test_jpeg_writer.rb
|
111
|
-
- test/test_nearest_neighbor_scaler.rb
|
112
|
-
- test/test_png.rb
|
113
61
|
- test/test_png_reader.rb
|
114
|
-
- test/
|
62
|
+
- test/helper.rb
|
115
63
|
- test/writer_tests.rb
|
116
|
-
- .
|
117
|
-
|
64
|
+
- test/reader_tests.rb
|
65
|
+
- test/scaler_tests.rb
|
118
66
|
homepage: http://github.com/ender672/axon
|
119
67
|
licenses: []
|
120
|
-
|
121
68
|
post_install_message:
|
122
|
-
rdoc_options:
|
123
|
-
|
124
|
-
- README.rdoc
|
125
|
-
require_paths:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
126
71
|
- lib
|
127
|
-
|
72
|
+
- ext
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
74
|
none: false
|
129
|
-
requirements:
|
130
|
-
- -
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
|
133
|
-
|
134
|
-
- 0
|
135
|
-
version: "0"
|
136
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
80
|
none: false
|
138
|
-
requirements:
|
139
|
-
- -
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
|
142
|
-
segments:
|
143
|
-
- 0
|
144
|
-
version: "0"
|
81
|
+
requirements:
|
82
|
+
- - ! '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
145
85
|
requirements: []
|
146
|
-
|
147
|
-
|
148
|
-
rubygems_version: 1.6.2
|
86
|
+
rubyforge_project:
|
87
|
+
rubygems_version: 1.8.13
|
149
88
|
signing_key:
|
150
89
|
specification_version: 3
|
151
|
-
summary: Axon
|
152
|
-
test_files:
|
90
|
+
summary: Axon reads, manipulates, and writes images.
|
91
|
+
test_files:
|
92
|
+
- test/stress_helper.rb
|
93
|
+
- test/test_image.rb
|
153
94
|
- test/test_png_writer.rb
|
154
|
-
- test/
|
155
|
-
- test/
|
95
|
+
- test/test_fit.rb
|
96
|
+
- test/test_generators.rb
|
156
97
|
- test/test_bilinear_scaler.rb
|
157
|
-
- test/test_jpeg.rb
|
158
98
|
- test/test_nearest_neighbor_scaler.rb
|
159
99
|
- test/test_jpeg_writer.rb
|
100
|
+
- test/stress_tests.rb
|
160
101
|
- test/test_cropper.rb
|
161
102
|
- test/test_jpeg_reader.rb
|
162
103
|
- test/test_png_reader.rb
|
163
|
-
- test/
|
164
|
-
- test/
|
104
|
+
- test/helper.rb
|
105
|
+
- test/writer_tests.rb
|
106
|
+
- test/reader_tests.rb
|
107
|
+
- test/scaler_tests.rb
|
data/.gemtest
DELETED
File without changes
|
@@ -1,115 +0,0 @@
|
|
1
|
-
#include <ruby.h>
|
2
|
-
|
3
|
-
static ID id_image, id_components, id_width_ratio, id_width;
|
4
|
-
|
5
|
-
|
6
|
-
/* c00 a c10
|
7
|
-
* --------------------------
|
8
|
-
* | | |
|
9
|
-
* | | |
|
10
|
-
* | ty| |
|
11
|
-
* | tx | |
|
12
|
-
* |------------------+-----|
|
13
|
-
* | /| |
|
14
|
-
* | sample| |
|
15
|
-
* | | |
|
16
|
-
* | | |
|
17
|
-
* | | |
|
18
|
-
* | | |
|
19
|
-
* --------------------------
|
20
|
-
* c01 b c11
|
21
|
-
*
|
22
|
-
* a = (1 - tx) * c00 + tx * c10
|
23
|
-
* b = (1 - tx) * c01 + tx * c11
|
24
|
-
* sample = (1 - ty) * a + ty * b
|
25
|
-
*
|
26
|
-
* sample = (1 - ty) * (1 - tx) * c00 +
|
27
|
-
* (1 - ty) * tx * c10 +
|
28
|
-
* ty * (1 - tx) * c01 +
|
29
|
-
ty * tx * c11
|
30
|
-
*/
|
31
|
-
static VALUE
|
32
|
-
interpolate_scanline2(size_t width, double width_ratio, size_t components,
|
33
|
-
double ty, char *scanline1, char *scanline2)
|
34
|
-
{
|
35
|
-
VALUE rb_dest_sl;
|
36
|
-
double sample_x, tx, _tx, p00, p10, p01, p11;
|
37
|
-
unsigned char *c00, *c10, *c01, *c11, *dest_sl;
|
38
|
-
size_t sample_x_i, i, j;
|
39
|
-
|
40
|
-
rb_dest_sl = rb_str_new(0, width * components);
|
41
|
-
dest_sl = RSTRING_PTR(rb_dest_sl);
|
42
|
-
|
43
|
-
for (i = 0; i < width; i++) {
|
44
|
-
sample_x = i / width_ratio;
|
45
|
-
sample_x_i = (int)sample_x;
|
46
|
-
|
47
|
-
tx = sample_x - sample_x_i;
|
48
|
-
_tx = 1 - tx;
|
49
|
-
|
50
|
-
p11 = tx * ty;
|
51
|
-
p01 = _tx * ty;
|
52
|
-
p10 = tx - p11;
|
53
|
-
p00 = _tx - p01;
|
54
|
-
|
55
|
-
c00 = scanline1 + sample_x_i * components;
|
56
|
-
c10 = c00 + components;
|
57
|
-
c01 = scanline2 + sample_x_i * components;
|
58
|
-
c11 = c01 + components;
|
59
|
-
|
60
|
-
for (j = 0; j < components; j++)
|
61
|
-
*dest_sl++ = p00 * c00[j] + p10 * c10[j] + p01 * c01[j] +
|
62
|
-
p11 * c11[j];
|
63
|
-
}
|
64
|
-
|
65
|
-
return rb_dest_sl;
|
66
|
-
}
|
67
|
-
|
68
|
-
/*
|
69
|
-
* call-seq:
|
70
|
-
* image.interpolate_scanline(original_scanlines, q) -> interpolated_scanline
|
71
|
-
* Expects the instance variable @image to respond to components, and
|
72
|
-
* expects the intance variable @width_ratio to respond to the ratio that
|
73
|
-
* we will resample our width to.
|
74
|
-
*/
|
75
|
-
static VALUE
|
76
|
-
interpolate_scanline(VALUE self, VALUE orig_scanline1, VALUE orig_scanline2,
|
77
|
-
VALUE rb_sample_y)
|
78
|
-
{
|
79
|
-
VALUE rb_components, rb_width_ratio, rb_image, rb_width;
|
80
|
-
double width_ratio, ty, sample_y;
|
81
|
-
unsigned char *scanline1, *scanline2;
|
82
|
-
size_t width, components;
|
83
|
-
|
84
|
-
rb_width = rb_ivar_get(self, id_width);
|
85
|
-
width = FIX2INT(rb_width);
|
86
|
-
|
87
|
-
rb_image = rb_ivar_get(self, id_image);
|
88
|
-
rb_components = rb_funcall(rb_image, id_components, 0);
|
89
|
-
components = FIX2INT(rb_components);
|
90
|
-
|
91
|
-
rb_width_ratio = rb_ivar_get(self, id_width_ratio);
|
92
|
-
width_ratio = NUM2DBL(rb_width_ratio);
|
93
|
-
|
94
|
-
sample_y = NUM2DBL(rb_sample_y);
|
95
|
-
ty = sample_y - (int)sample_y;
|
96
|
-
|
97
|
-
scanline1 = RSTRING_PTR(orig_scanline1);
|
98
|
-
scanline2 = RSTRING_PTR(orig_scanline2);
|
99
|
-
|
100
|
-
return interpolate_scanline2(width, width_ratio, components, ty, scanline1,
|
101
|
-
scanline2);
|
102
|
-
}
|
103
|
-
|
104
|
-
void
|
105
|
-
Init_bilinear_interpolation()
|
106
|
-
{
|
107
|
-
VALUE mAxon = rb_define_module("Axon");
|
108
|
-
VALUE mBilinearScaling = rb_define_module_under(mAxon, "BilinearScaling");
|
109
|
-
rb_define_method(mBilinearScaling, "interpolate_scanline", interpolate_scanline, 3);
|
110
|
-
|
111
|
-
id_width = rb_intern("@width");
|
112
|
-
id_width_ratio = rb_intern("@width_ratio");
|
113
|
-
id_image = rb_intern("@image");
|
114
|
-
id_components = rb_intern("components");
|
115
|
-
}
|
data/ext/axon/interpolation.h
DELETED
data/ext/axon/jpeg_common.c
DELETED
@@ -1,118 +0,0 @@
|
|
1
|
-
#include "jpeg_common.h"
|
2
|
-
|
3
|
-
static ID id_GRAYSCALE, id_RGB, id_YCbCr, id_CMYK, id_YCCK, id_UNKNOWN;
|
4
|
-
static ID id_APP0, id_APP1, id_APP2, id_APP3, id_APP4, id_APP5, id_APP6,
|
5
|
-
id_APP7, id_APP8, id_APP9, id_APP10, id_APP11, id_APP12, id_APP13,
|
6
|
-
id_APP14, id_APP15, id_COM;
|
7
|
-
|
8
|
-
struct jpeg_error_mgr jerr;
|
9
|
-
|
10
|
-
ID
|
11
|
-
j_color_space_to_id(J_COLOR_SPACE cs)
|
12
|
-
{
|
13
|
-
switch (cs) {
|
14
|
-
case JCS_GRAYSCALE: return id_GRAYSCALE;
|
15
|
-
case JCS_RGB: return id_RGB;
|
16
|
-
case JCS_YCbCr: return id_YCbCr;
|
17
|
-
case JCS_CMYK: return id_CMYK;
|
18
|
-
case JCS_YCCK: return id_YCCK;
|
19
|
-
}
|
20
|
-
|
21
|
-
return id_UNKNOWN;
|
22
|
-
}
|
23
|
-
|
24
|
-
J_COLOR_SPACE
|
25
|
-
id_to_j_color_space(ID rb)
|
26
|
-
{
|
27
|
-
if (rb == id_GRAYSCALE) return JCS_GRAYSCALE;
|
28
|
-
else if (rb == id_RGB) return JCS_RGB;
|
29
|
-
else if (rb == id_YCbCr) return JCS_YCbCr;
|
30
|
-
else if (rb == id_CMYK) return JCS_CMYK;
|
31
|
-
else if (rb == id_YCCK) return JCS_YCCK;
|
32
|
-
else if (rb == id_UNKNOWN) return JCS_UNKNOWN;
|
33
|
-
|
34
|
-
rb_raise(rb_eRuntimeError, "Color Space not recognized.");
|
35
|
-
}
|
36
|
-
|
37
|
-
int sym_to_marker_code(VALUE sym)
|
38
|
-
{
|
39
|
-
ID rb = SYM2ID(sym);
|
40
|
-
|
41
|
-
if (rb == id_APP0) return JPEG_APP0;
|
42
|
-
else if (rb == id_APP1) return JPEG_APP0 + 1;
|
43
|
-
else if (rb == id_APP2) return JPEG_APP0 + 2;
|
44
|
-
else if (rb == id_APP3) return JPEG_APP0 + 3;
|
45
|
-
else if (rb == id_APP4) return JPEG_APP0 + 4;
|
46
|
-
else if (rb == id_APP5) return JPEG_APP0 + 5;
|
47
|
-
else if (rb == id_APP6) return JPEG_APP0 + 6;
|
48
|
-
else if (rb == id_APP7) return JPEG_APP0 + 7;
|
49
|
-
else if (rb == id_APP8) return JPEG_APP0 + 8;
|
50
|
-
else if (rb == id_APP9) return JPEG_APP0 + 9;
|
51
|
-
else if (rb == id_APP10) return JPEG_APP0 + 10;
|
52
|
-
else if (rb == id_APP11) return JPEG_APP0 + 11;
|
53
|
-
else if (rb == id_APP12) return JPEG_APP0 + 12;
|
54
|
-
else if (rb == id_APP13) return JPEG_APP0 + 13;
|
55
|
-
else if (rb == id_APP14) return JPEG_APP0 + 14;
|
56
|
-
else if (rb == id_APP15) return JPEG_APP0 + 15;
|
57
|
-
else if (rb == id_COM) return JPEG_COM;
|
58
|
-
|
59
|
-
rb_raise(rb_eRuntimeError, "Marker code not recognized.");
|
60
|
-
}
|
61
|
-
|
62
|
-
void
|
63
|
-
error_exit(j_common_ptr cinfo)
|
64
|
-
{
|
65
|
-
char buffer[JMSG_LENGTH_MAX];
|
66
|
-
|
67
|
-
(*cinfo->err->format_message) (cinfo, buffer);
|
68
|
-
rb_raise(rb_eRuntimeError, "jpeglib: %s", buffer);
|
69
|
-
}
|
70
|
-
|
71
|
-
void
|
72
|
-
output_message(j_common_ptr cinfo)
|
73
|
-
{
|
74
|
-
/* do nothing */
|
75
|
-
}
|
76
|
-
|
77
|
-
void
|
78
|
-
init_jerror(struct jpeg_error_mgr * err)
|
79
|
-
{
|
80
|
-
jpeg_std_error(err);
|
81
|
-
err->error_exit = error_exit;
|
82
|
-
err->output_message = output_message;
|
83
|
-
}
|
84
|
-
|
85
|
-
void
|
86
|
-
Init_jpeg()
|
87
|
-
{
|
88
|
-
VALUE mAxon = rb_define_module("Axon");
|
89
|
-
rb_const_set(mAxon, rb_intern("JPEG_LIB_VERSION"),
|
90
|
-
INT2FIX(JPEG_LIB_VERSION));
|
91
|
-
|
92
|
-
init_jerror(&jerr);
|
93
|
-
|
94
|
-
id_GRAYSCALE = rb_intern("GRAYSCALE");
|
95
|
-
id_RGB = rb_intern("RGB");
|
96
|
-
id_YCbCr = rb_intern("YCbCr");
|
97
|
-
id_CMYK = rb_intern("CMYK");
|
98
|
-
id_YCCK = rb_intern("YCCK");
|
99
|
-
id_UNKNOWN = rb_intern("UNKNOWN");
|
100
|
-
|
101
|
-
id_APP0 = rb_intern("APP0");
|
102
|
-
id_APP1 = rb_intern("APP1");
|
103
|
-
id_APP2 = rb_intern("APP2");
|
104
|
-
id_APP3 = rb_intern("APP3");
|
105
|
-
id_APP4 = rb_intern("APP4");
|
106
|
-
id_APP5 = rb_intern("APP5");
|
107
|
-
id_APP6 = rb_intern("APP6");
|
108
|
-
id_APP7 = rb_intern("APP7");
|
109
|
-
id_APP8 = rb_intern("APP8");
|
110
|
-
id_APP9 = rb_intern("APP9");
|
111
|
-
id_APP10 = rb_intern("APP10");
|
112
|
-
id_APP11 = rb_intern("APP11");
|
113
|
-
id_APP12 = rb_intern("APP12");
|
114
|
-
id_APP13 = rb_intern("APP13");
|
115
|
-
id_APP14 = rb_intern("APP14");
|
116
|
-
id_APP15 = rb_intern("APP15");
|
117
|
-
id_COM = rb_intern("COM");
|
118
|
-
}
|