rb_cdio 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ext/CdIo.c +132 -0
- data/ext/CdIo.h +108 -0
- data/ext/CdIo.o +0 -0
- data/ext/CdIo_Cd.c +345 -0
- data/ext/CdIo_Cd.o +0 -0
- data/ext/CdIo_Common.c +84 -0
- data/ext/CdIo_Common.o +0 -0
- data/ext/CdIo_Modulo.c +226 -0
- data/ext/CdIo_Modulo.o +0 -0
- data/ext/CdIo_Track.c +91 -0
- data/ext/CdIo_Track.o +0 -0
- data/ext/CdIo_TrackIso9660.c +78 -0
- data/ext/CdIo_TrackIso9660.o +0 -0
- data/ext/Makefile +127 -0
- data/ext/extconf.rb +4 -0
- data/ext/mkmf.log +26 -0
- data/lib/rb_cdio_read.rb +39 -0
- data/test/data/Makefile +677 -0
- data/test/data/Makefile.am +78 -0
- data/test/data/Makefile.in +677 -0
- data/test/data/bad-cat1.cue +9 -0
- data/test/data/bad-cat1.toc +8 -0
- data/test/data/bad-cat2.cue +9 -0
- data/test/data/bad-cat2.toc +8 -0
- data/test/data/bad-cat3.cue +9 -0
- data/test/data/bad-cat3.toc +8 -0
- data/test/data/bad-mode1.cue +7 -0
- data/test/data/bad-mode1.toc +5 -0
- data/test/data/bad-msf-1.cue +7 -0
- data/test/data/bad-msf-1.toc +6 -0
- data/test/data/bad-msf-2.cue +7 -0
- data/test/data/bad-msf-2.toc +6 -0
- data/test/data/bad-msf-3.cue +7 -0
- data/test/data/bad-msf-3.toc +6 -0
- data/test/data/cdda-read.right +148 -0
- data/test/data/cdda.bin +0 -0
- data/test/data/cdda.cue +6 -0
- data/test/data/cdda.right +44 -0
- data/test/data/cdda.toc +13 -0
- data/test/data/cdtext.toc +48 -0
- data/test/data/check_cd_read.sh +53 -0
- data/test/data/check_common_fn +186 -0
- data/test/data/check_common_fn.in +186 -0
- data/test/data/check_cue.sh +102 -0
- data/test/data/check_cue.sh.in +102 -0
- data/test/data/check_iso.sh +32 -0
- data/test/data/check_iso.sh.in +32 -0
- data/test/data/check_nrg.sh +68 -0
- data/test/data/check_nrg.sh.in +68 -0
- data/test/data/check_opts.sh +33 -0
- data/test/data/check_opts0.right +40 -0
- data/test/data/check_opts1.right +40 -0
- data/test/data/check_opts2.right +34 -0
- data/test/data/check_opts3.right +34 -0
- data/test/data/check_opts4.right +44 -0
- data/test/data/check_opts5.right +44 -0
- data/test/data/check_opts6.right +44 -0
- data/test/data/check_opts7.right +44 -0
- data/test/data/check_sizeof +117 -0
- data/test/data/check_sizeof.c +77 -0
- data/test/data/copying.iso +0 -0
- data/test/data/copying.right +10 -0
- data/test/data/data1.toc +8 -0
- data/test/data/data2.toc +13 -0
- data/test/data/data5.toc +13 -0
- data/test/data/data6.toc +8 -0
- data/test/data/data7.toc +13 -0
- data/test/data/isofs-m1-read.right +258 -0
- data/test/data/isofs-m1.bin +0 -0
- data/test/data/isofs-m1.cue +3 -0
- data/test/data/isofs-m1.right +57 -0
- data/test/data/isofs-m1.toc +4 -0
- data/test/data/t1.toc +5 -0
- data/test/data/t2.toc +6 -0
- data/test/data/t3.toc +11 -0
- data/test/data/t4.toc +8 -0
- data/test/data/t5.toc +8 -0
- data/test/data/t6.toc +7 -0
- data/test/data/t7.toc +12 -0
- data/test/data/t8.toc +14 -0
- data/test/data/t9.toc +31 -0
- data/test/data/testassert +117 -0
- data/test/data/testassert.c +36 -0
- data/test/data/testbincue +117 -0
- data/test/data/testbincue.c +88 -0
- data/test/data/testdefault +117 -0
- data/test/data/testdefault.c +196 -0
- data/test/data/testischar +117 -0
- data/test/data/testischar.c +71 -0
- data/test/data/testiso9660 +117 -0
- data/test/data/testiso9660.c +153 -0
- data/test/data/testtoc +117 -0
- data/test/data/testtoc.c +101 -0
- data/test/data/vcd_demo.right +116 -0
- data/test/data/videocd.nrg +0 -0
- data/test/data/videocd.right +92 -0
- data/test/testall.rb +4 -0
- data/test/testbincue.rb +30 -0
- data/test/testtoc.rb +45 -0
- metadata +141 -0
data/ext/CdIo_Cd.o
ADDED
Binary file
|
data/ext/CdIo_Common.c
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
#include "CdIo.h"
|
2
|
+
#define CAP(val,prop,cap,mask) \
|
3
|
+
rb_hash_aset(val,rb_str_new2(prop),(*cap & mask) ? Qtrue:Qfalse);
|
4
|
+
|
5
|
+
|
6
|
+
VALUE
|
7
|
+
get_cap(cdio_drive_read_cap_t * read_cap,
|
8
|
+
cdio_drive_write_cap_t * write_cap,
|
9
|
+
cdio_drive_misc_cap_t * misc_cap)
|
10
|
+
{
|
11
|
+
if (*read_cap & CDIO_DRIVE_CAP_ERROR
|
12
|
+
|| *read_cap & CDIO_DRIVE_CAP_UNKNOWN) {
|
13
|
+
rb_raise(rb_eException, "I can't read the caps!");
|
14
|
+
return Qnil;
|
15
|
+
}
|
16
|
+
VALUE read,
|
17
|
+
write,
|
18
|
+
misc,
|
19
|
+
ret;
|
20
|
+
read = rb_hash_new();
|
21
|
+
write = rb_hash_new();
|
22
|
+
misc = rb_hash_new();
|
23
|
+
ret = rb_hash_new();
|
24
|
+
rb_hash_aset(ret, rb_str_new2("read"), read);
|
25
|
+
rb_hash_aset(ret, rb_str_new2("write"), write);
|
26
|
+
rb_hash_aset(ret, rb_str_new2("misc"), misc);
|
27
|
+
CAP(read, "audio", read_cap, CDIO_DRIVE_CAP_READ_AUDIO);
|
28
|
+
CAP(read, "cd-da", read_cap, CDIO_DRIVE_CAP_READ_CD_DA);
|
29
|
+
CAP(read, "cd+g", read_cap, CDIO_DRIVE_CAP_READ_CD_G);
|
30
|
+
CAP(read, "cd-r", read_cap, CDIO_DRIVE_CAP_READ_CD_R);
|
31
|
+
CAP(read, "cd-rw", read_cap, CDIO_DRIVE_CAP_READ_CD_RW);
|
32
|
+
CAP(read, "dvd-r", read_cap, CDIO_DRIVE_CAP_READ_DVD_R);
|
33
|
+
CAP(read, "dvr+r", read_cap, CDIO_DRIVE_CAP_READ_DVD_PR);
|
34
|
+
CAP(read, "dvd-ram", read_cap, CDIO_DRIVE_CAP_READ_DVD_RAM);
|
35
|
+
CAP(read, "dvd-rom", read_cap, CDIO_DRIVE_CAP_READ_DVD_ROM);
|
36
|
+
CAP(read, "dvd-rw", read_cap, CDIO_DRIVE_CAP_READ_DVD_RW);
|
37
|
+
CAP(read, "dvd+rw", read_cap, CDIO_DRIVE_CAP_READ_DVD_RPW);
|
38
|
+
CAP(read, "c2_errs", read_cap, CDIO_DRIVE_CAP_READ_C2_ERRS);
|
39
|
+
CAP(write, "cd-r", write_cap, CDIO_DRIVE_CAP_WRITE_CD_R);
|
40
|
+
CAP(write, "cd-rw", write_cap, CDIO_DRIVE_CAP_WRITE_CD_RW);
|
41
|
+
CAP(write, "dvd-r", write_cap, CDIO_DRIVE_CAP_WRITE_DVD_R);
|
42
|
+
CAP(write, "dvd+r", write_cap, CDIO_DRIVE_CAP_WRITE_DVD_PR);
|
43
|
+
CAP(write, "dvd-ram", write_cap, CDIO_DRIVE_CAP_WRITE_DVD_RAM);
|
44
|
+
CAP(write, "dvd-rw", write_cap, CDIO_DRIVE_CAP_WRITE_DVD_RW);
|
45
|
+
CAP(write, "dvd+rw", write_cap, CDIO_DRIVE_CAP_WRITE_DVD_RPW);
|
46
|
+
CAP(write, "mount_rainier", write_cap,
|
47
|
+
CDIO_DRIVE_CAP_WRITE_MT_RAINIER);
|
48
|
+
CAP(write, "burn_proof", write_cap, CDIO_DRIVE_CAP_WRITE_BURN_PROOF);
|
49
|
+
CAP(write, "cd", write_cap, CDIO_DRIVE_CAP_WRITE_CD);
|
50
|
+
CAP(write, "dvd", write_cap, CDIO_DRIVE_CAP_WRITE_DVD);
|
51
|
+
CAP(misc, "close_tray", misc_cap, CDIO_DRIVE_CAP_MISC_CLOSE_TRAY);
|
52
|
+
CAP(misc, "eject", misc_cap, CDIO_DRIVE_CAP_MISC_EJECT);
|
53
|
+
CAP(misc, "lock", misc_cap, CDIO_DRIVE_CAP_MISC_LOCK);
|
54
|
+
CAP(misc, "select_speed", misc_cap, CDIO_DRIVE_CAP_MISC_SELECT_SPEED);
|
55
|
+
CAP(misc, "select_disk", misc_cap, CDIO_DRIVE_CAP_MISC_SELECT_DISC);
|
56
|
+
CAP(misc, "multi_session", misc_cap,
|
57
|
+
CDIO_DRIVE_CAP_MISC_MULTI_SESSION);
|
58
|
+
CAP(misc, "media_changed", misc_cap,
|
59
|
+
CDIO_DRIVE_CAP_MISC_MEDIA_CHANGED);
|
60
|
+
CAP(misc, "misc_reset", misc_cap, CDIO_DRIVE_CAP_MISC_RESET);
|
61
|
+
CAP(misc, "mcn", misc_cap, CDIO_DRIVE_CAP_MCN);
|
62
|
+
CAP(misc, "isrc", misc_cap, CDIO_DRIVE_CAP_ISRC);
|
63
|
+
CAP(misc, "file", misc_cap, CDIO_DRIVE_CAP_MISC_FILE);
|
64
|
+
return ret;
|
65
|
+
}
|
66
|
+
|
67
|
+
#undef CAP
|
68
|
+
|
69
|
+
|
70
|
+
VALUE get_cdtext(const cdtext_t *cdtext) {
|
71
|
+
if(NULL==cdtext) {
|
72
|
+
return Qnil;
|
73
|
+
} else {
|
74
|
+
VALUE ret;
|
75
|
+
ret=rb_hash_new();
|
76
|
+
int i;
|
77
|
+
for (i=0;i < MAX_CDTEXT_FIELDS;i++) {
|
78
|
+
if(cdtext->field[i]) {
|
79
|
+
rb_hash_aset(ret,rb_str_new2(cdtext_field2str(i)), rb_str_new2(cdtext->field[i]));
|
80
|
+
}
|
81
|
+
}
|
82
|
+
return ret;
|
83
|
+
}
|
84
|
+
}
|
data/ext/CdIo_Common.o
ADDED
Binary file
|
data/ext/CdIo_Modulo.c
ADDED
@@ -0,0 +1,226 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright (c) 2005 Claudio Bustos <clbustos@gmail.com>
|
3
|
+
* This code is hereby licensed for public consumption under the
|
4
|
+
* GNU GPL v2.
|
5
|
+
* You should have received a copy of the GNU General Public License
|
6
|
+
* along with this program; if not, write to the Free Software
|
7
|
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
8
|
+
*/
|
9
|
+
|
10
|
+
/*
|
11
|
+
* Definici?n de funciones para CdIo
|
12
|
+
*/
|
13
|
+
|
14
|
+
#include "CdIo.h"
|
15
|
+
|
16
|
+
VALUE
|
17
|
+
rb_cdio_get_devices(int argc, VALUE * argv, VALUE module)
|
18
|
+
{
|
19
|
+
char **devices = NULL,
|
20
|
+
**i;
|
21
|
+
driver_id_t driver_id;
|
22
|
+
VALUE driver;
|
23
|
+
rb_scan_args(argc, argv, "01", &driver);
|
24
|
+
FIXNUM_P(driver);
|
25
|
+
driver_id = (driver == Qnil) ? DRIVER_DEVICE : FIX2INT(driver);
|
26
|
+
devices = cdio_get_devices(driver_id);
|
27
|
+
if (NULL != devices) {
|
28
|
+
VALUE aDevices;
|
29
|
+
aDevices = rb_ary_new();
|
30
|
+
for (i = devices; *i != NULL; i++) {
|
31
|
+
rb_ary_push(aDevices, rb_str_new2(*i));
|
32
|
+
}
|
33
|
+
cdio_free_device_list(devices);
|
34
|
+
free(devices);
|
35
|
+
devices = NULL;
|
36
|
+
return aDevices;
|
37
|
+
} else {
|
38
|
+
return Qnil;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
|
43
|
+
VALUE
|
44
|
+
rb_cdio_get_default_device(int argc, VALUE * argv, VALUE module)
|
45
|
+
{
|
46
|
+
driver_id_t driver_id;
|
47
|
+
char *device;
|
48
|
+
VALUE cd;
|
49
|
+
rb_scan_args(argc, argv, "01", &cd);
|
50
|
+
if (cd != Qnil && Qtrue != rb_obj_is_instance_of(cd, cCdIoCd)) {
|
51
|
+
rb_raise(rb_eArgError, "Arg 1 must be a CdIo::Cd");
|
52
|
+
}
|
53
|
+
if (cd == Qnil) {
|
54
|
+
device = cdio_get_default_device(NULL);
|
55
|
+
} else {
|
56
|
+
GET_CDIO(cd, p_cdio);
|
57
|
+
device = cdio_get_default_device(p_cdio);
|
58
|
+
}
|
59
|
+
if (NULL != device) {
|
60
|
+
return rb_str_new2(device);
|
61
|
+
} else {
|
62
|
+
return Qnil;
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
VALUE
|
67
|
+
rb_cdio_get_drive_cap_dev(VALUE module, VALUE device)
|
68
|
+
{
|
69
|
+
cdio_drive_read_cap_t read_cap;
|
70
|
+
cdio_drive_write_cap_t write_cap;
|
71
|
+
cdio_drive_misc_cap_t misc_cap;
|
72
|
+
Check_Type(device, T_STRING);
|
73
|
+
SafeStringValue(device);
|
74
|
+
cdio_get_drive_cap_dev(StringValuePtr(device), &read_cap, &write_cap,
|
75
|
+
&misc_cap);
|
76
|
+
// Error?
|
77
|
+
return get_cap(&read_cap, &write_cap, &misc_cap);
|
78
|
+
}
|
79
|
+
|
80
|
+
VALUE
|
81
|
+
rb_cdio_driver_describe(VALUE module, VALUE driver)
|
82
|
+
{
|
83
|
+
FIXNUM_P(driver);
|
84
|
+
return rb_str_new2(cdio_driver_describe(FIX2INT(driver)));
|
85
|
+
}
|
86
|
+
|
87
|
+
VALUE
|
88
|
+
rb_cdio_open(int argc, VALUE * argv, VALUE module)
|
89
|
+
{
|
90
|
+
VALUE source,driver,block;
|
91
|
+
VALUE argv_2[2];
|
92
|
+
//def open(source=nil,driver=nil) &block
|
93
|
+
rb_scan_args(argc, argv, "02&", &source, &driver,&block);
|
94
|
+
if(Qnil!=source) {
|
95
|
+
Check_Type(source,T_STRING);
|
96
|
+
}
|
97
|
+
FIXNUM_P(driver);
|
98
|
+
argv_2[0]=source;
|
99
|
+
argv_2[1]=driver;
|
100
|
+
VALUE cd= rb_cdio_cd_new(2, argv_2, cCdIoCd);
|
101
|
+
if (Qnil==block) {
|
102
|
+
return cd;
|
103
|
+
} else {
|
104
|
+
rb_gc_start();
|
105
|
+
rb_yield(cd);
|
106
|
+
return Qnil;
|
107
|
+
}
|
108
|
+
}
|
109
|
+
|
110
|
+
VALUE
|
111
|
+
rb_cdio_track_format_describe(VALUE module, VALUE track_format)
|
112
|
+
{
|
113
|
+
FIXNUM_P(track_format);
|
114
|
+
trackmode_t format_t = FIX2INT(track_format);
|
115
|
+
return rb_str_new2(track_format2str[format_t]);
|
116
|
+
}
|
117
|
+
|
118
|
+
VALUE
|
119
|
+
rb_cdio_discmode_describe(VALUE module, VALUE discmode)
|
120
|
+
{
|
121
|
+
FIXNUM_P(discmode);
|
122
|
+
discmode_t discmode_i = FIX2INT(discmode);
|
123
|
+
return rb_str_new2(discmode2str[discmode_i]);
|
124
|
+
}
|
125
|
+
|
126
|
+
VALUE
|
127
|
+
rb_cdio_track_type_describe(VALUE module, VALUE track)
|
128
|
+
{
|
129
|
+
char desc[255];
|
130
|
+
if (Qtrue != rb_obj_is_kind_of(track, cCdIoTrack)) {
|
131
|
+
rb_raise(rb_eArgError, "Arg 1 must be a CdIo::Track");
|
132
|
+
}
|
133
|
+
VALUE cd = rb_iv_get(track, "@cd");
|
134
|
+
int i_track = FIX2INT(rb_iv_get(track, "@number"));
|
135
|
+
GET_CDIO(cd, p_cdio);
|
136
|
+
cdio_fs_anal_t fs;
|
137
|
+
cdio_iso_analysis_t cdio_iso_analysis;
|
138
|
+
fs = cdio_guess_cd_type(p_cdio, 0, i_track, &cdio_iso_analysis);
|
139
|
+
|
140
|
+
switch (CDIO_FSTYPE(fs)) {
|
141
|
+
case CDIO_FS_AUDIO:
|
142
|
+
strcpy(desc, "Audio CD");
|
143
|
+
break;
|
144
|
+
case CDIO_FS_ISO_9660:
|
145
|
+
strcpy(desc, "CD-ROM with ISO 9660 filesystem");
|
146
|
+
if (fs & CDIO_FS_ANAL_JOLIET) {
|
147
|
+
char desc2[50];
|
148
|
+
sprintf(desc2, " and joliet extension level %d",
|
149
|
+
cdio_iso_analysis.joliet_level);
|
150
|
+
strcat(desc, desc2);
|
151
|
+
}
|
152
|
+
if (fs & CDIO_FS_ANAL_ROCKRIDGE)
|
153
|
+
strcat(desc, " and rockridge extensions");
|
154
|
+
break;
|
155
|
+
case CDIO_FS_ISO_9660_INTERACTIVE:
|
156
|
+
strcpy(desc, "CD-ROM with CD-RTOS and ISO 9660 filesystem");
|
157
|
+
break;
|
158
|
+
case CDIO_FS_HIGH_SIERRA:
|
159
|
+
strcpy(desc, "CD-ROM with High Sierra filesystem");
|
160
|
+
break;
|
161
|
+
case CDIO_FS_INTERACTIVE:
|
162
|
+
strcpy(desc, "CD-Interactive");
|
163
|
+
break;
|
164
|
+
case CDIO_FS_HFS:
|
165
|
+
strcpy(desc, "CD-ROM with Macintosh HFS");
|
166
|
+
break;
|
167
|
+
case CDIO_FS_ISO_HFS:
|
168
|
+
strcpy(desc,
|
169
|
+
"CD-ROM with both Macintosh HFS and ISO 9660 filesystem");
|
170
|
+
break;
|
171
|
+
case CDIO_FS_UFS:
|
172
|
+
strcpy(desc, "CD-ROM with Unix UFS");
|
173
|
+
break;
|
174
|
+
case CDIO_FS_EXT2:
|
175
|
+
strcpy(desc, "CD-ROM with GNU/Linux EXT2 (native) filesystem");
|
176
|
+
break;
|
177
|
+
case CDIO_FS_3DO:
|
178
|
+
strcpy(desc, "CD-ROM with Panasonic 3DO filesystem");
|
179
|
+
break;
|
180
|
+
case CDIO_FS_UDFX:
|
181
|
+
strcpy(desc, "CD-ROM with UDFX filesystem");
|
182
|
+
break;
|
183
|
+
case CDIO_FS_UNKNOWN:
|
184
|
+
strcpy(desc, "CD-ROM with unknown filesystem");
|
185
|
+
break;
|
186
|
+
case CDIO_FS_XISO:
|
187
|
+
strcpy(desc, "CD-ROM with Microsoft X-BOX XISO filesystem");
|
188
|
+
break;
|
189
|
+
}
|
190
|
+
return rb_str_new2(desc);
|
191
|
+
}
|
192
|
+
|
193
|
+
static VALUE _is_file_bool(bool (*pf)(const char *n),VALUE name) {
|
194
|
+
Check_Type(name,T_STRING);
|
195
|
+
SafeStringValue(name);
|
196
|
+
bool res = pf(StringValuePtr(name));
|
197
|
+
return res ? Qtrue : Qfalse;
|
198
|
+
}
|
199
|
+
|
200
|
+
static VALUE _is_file_char(char *(*pf)(const char *n),VALUE name) {
|
201
|
+
Check_Type(name,T_STRING);
|
202
|
+
SafeStringValue(name);
|
203
|
+
char *bin = pf(StringValuePtr(name));
|
204
|
+
if(NULL==bin) {
|
205
|
+
return Qnil;
|
206
|
+
} else {
|
207
|
+
return rb_str_new2(bin);
|
208
|
+
}
|
209
|
+
}
|
210
|
+
|
211
|
+
VALUE rb_cdio_is_binfile(VALUE module, VALUE name) {
|
212
|
+
return _is_file_char(&cdio_is_binfile,name);
|
213
|
+
}
|
214
|
+
VALUE rb_cdio_is_cuefile(VALUE module, VALUE name) {
|
215
|
+
return _is_file_char(&cdio_is_cuefile,name);
|
216
|
+
}
|
217
|
+
VALUE rb_cdio_is_nrg(VALUE module, VALUE name) {
|
218
|
+
return _is_file_bool(&cdio_is_nrg,name);
|
219
|
+
}
|
220
|
+
VALUE rb_cdio_is_tocfile(VALUE module, VALUE name) {
|
221
|
+
return _is_file_bool(cdio_is_tocfile,name);
|
222
|
+
}
|
223
|
+
VALUE rb_cdio_is_device(int argc, VALUE * argv, VALUE module) {
|
224
|
+
return Qnil;
|
225
|
+
}
|
226
|
+
|
data/ext/CdIo_Modulo.o
ADDED
Binary file
|
data/ext/CdIo_Track.c
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright (c) 2005 Claudio Bustos <clbustos@gmail.com>
|
3
|
+
* This code is hereby licensed for public consumption under the
|
4
|
+
* GNU GPL v2.
|
5
|
+
* You should have received a copy of the GNU General Public License
|
6
|
+
* along with this program; if not, write to the Free Software
|
7
|
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
8
|
+
*/
|
9
|
+
|
10
|
+
#include "CdIo.h"
|
11
|
+
/**
|
12
|
+
* Funci�n extraida de cd-info.c
|
13
|
+
*/
|
14
|
+
|
15
|
+
|
16
|
+
VALUE
|
17
|
+
rb_cdio_track_new(VALUE cd, int track)
|
18
|
+
{
|
19
|
+
VALUE argv[2];
|
20
|
+
argv[0] = cd;
|
21
|
+
argv[1] = INT2FIX(track);
|
22
|
+
return rb_class_new_instance(2, argv, cCdIoTrack);
|
23
|
+
}
|
24
|
+
|
25
|
+
int
|
26
|
+
rb_cdio_track_number(VALUE obj)
|
27
|
+
{
|
28
|
+
return FIX2INT(rb_iv_get(obj, "@number"));
|
29
|
+
}
|
30
|
+
|
31
|
+
VALUE
|
32
|
+
rb_cdio_track_green(VALUE obj)
|
33
|
+
{
|
34
|
+
GET_CDIO(rb_iv_get(obj, "@cd"),p_cdio);
|
35
|
+
if (cdio_get_track_green(p_cdio, rb_cdio_track_number(obj))) {
|
36
|
+
return Qtrue;
|
37
|
+
} else {
|
38
|
+
return Qfalse;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
VALUE
|
42
|
+
rb_cdio_track_init(VALUE obj, VALUE cd, VALUE track)
|
43
|
+
{
|
44
|
+
// Verificaci�n de tipos.
|
45
|
+
lsn_t lsn;
|
46
|
+
int i_track;
|
47
|
+
FIXNUM_P(track);
|
48
|
+
if (Qtrue != rb_obj_is_instance_of(cd, cCdIoCd)) {
|
49
|
+
rb_raise(rb_eArgError, "Arg 1 must be a CdIo::Cd");
|
50
|
+
}
|
51
|
+
GET_CDIO(cd, p_cdio);
|
52
|
+
i_track = FIX2INT(track);
|
53
|
+
/** :cd :number :format, :green, :lba,:lsn,:msf,:sec_count*/
|
54
|
+
rb_iv_set(obj, "@cd", cd);
|
55
|
+
rb_iv_set(obj, "@number", track);
|
56
|
+
rb_iv_set(obj, "@format",
|
57
|
+
INT2FIX(cdio_get_track_format(p_cdio, i_track)));
|
58
|
+
|
59
|
+
rb_iv_set(obj, "@lba", INT2NUM(cdio_get_track_lba(p_cdio, i_track)));
|
60
|
+
lsn = cdio_get_track_lsn(p_cdio, i_track);
|
61
|
+
rb_iv_set(obj, "@lsn", INT2NUM(lsn));
|
62
|
+
// msf
|
63
|
+
msf_t msf;
|
64
|
+
char *msf_s;
|
65
|
+
|
66
|
+
if (cdio_get_track_msf(p_cdio, i_track, &msf)) {
|
67
|
+
msf_s = cdio_msf_to_str(&msf);
|
68
|
+
// printf("C->%d:%d:%d\n",(int)msf.m,(int)msf.s,(int)msf.f);
|
69
|
+
rb_iv_set(obj, "@min", INT2FIX(from_bcd8(msf.m)));
|
70
|
+
rb_iv_set(obj, "@sec", INT2FIX(from_bcd8(msf.s)));
|
71
|
+
rb_iv_set(obj, "@frames", INT2FIX(from_bcd8(msf.f)));
|
72
|
+
rb_iv_set(obj, "@msf", rb_str_new2(msf_s));
|
73
|
+
free(msf_s);
|
74
|
+
}
|
75
|
+
|
76
|
+
rb_iv_set(obj, "@sec_count",
|
77
|
+
INT2NUM(cdio_get_track_sec_count(p_cdio, i_track)));
|
78
|
+
// vemos el tipo
|
79
|
+
cdio_fs_anal_t fs;
|
80
|
+
cdio_iso_analysis_t iso_analysis;
|
81
|
+
fs = cdio_guess_cd_type(p_cdio, 0, i_track, &iso_analysis);
|
82
|
+
rb_iv_set(obj, "@track_type", INT2FIX(fs));
|
83
|
+
|
84
|
+
return obj;
|
85
|
+
}
|
86
|
+
|
87
|
+
VALUE rb_cdio_track_get_cdtext(VALUE obj) {
|
88
|
+
GET_CDIO(rb_iv_get(obj, "@cd"),p_cdio);
|
89
|
+
const cdtext_t *cdtext = cdio_get_cdtext(p_cdio, rb_cdio_track_number(obj));
|
90
|
+
return get_cdtext(cdtext);
|
91
|
+
}
|
data/ext/CdIo_Track.o
ADDED
Binary file
|
@@ -0,0 +1,78 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright (c) 2005 Claudio Bustos <clbustos@gmail.com>
|
3
|
+
* This code is hereby licensed for public consumption under the
|
4
|
+
* GNU GPL v2.
|
5
|
+
* You should have received a copy of the GNU General Public License
|
6
|
+
* along with this program; if not, write to the Free Software
|
7
|
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
8
|
+
*/
|
9
|
+
|
10
|
+
|
11
|
+
#include "CdIo.h"
|
12
|
+
static bool
|
13
|
+
read_iso9660_pvd(const CdIo * p_cdio, track_format_t track_format, /* out
|
14
|
+
*/
|
15
|
+
iso9660_pvd_t * p_pvd)
|
16
|
+
{
|
17
|
+
|
18
|
+
switch (track_format) {
|
19
|
+
case TRACK_FORMAT_CDI:
|
20
|
+
case TRACK_FORMAT_XA:
|
21
|
+
if (0 !=
|
22
|
+
cdio_read_mode2_sector(p_cdio, p_pvd, ISO_PVD_SECTOR, false))
|
23
|
+
return false;
|
24
|
+
break;
|
25
|
+
case TRACK_FORMAT_DATA:
|
26
|
+
if (0 !=
|
27
|
+
cdio_read_mode1_sector(p_cdio, p_pvd, ISO_PVD_SECTOR, false))
|
28
|
+
return false;
|
29
|
+
break;
|
30
|
+
case TRACK_FORMAT_AUDIO:
|
31
|
+
case TRACK_FORMAT_PSX:
|
32
|
+
case TRACK_FORMAT_ERROR:
|
33
|
+
default:
|
34
|
+
return false;
|
35
|
+
}
|
36
|
+
return true;
|
37
|
+
}
|
38
|
+
|
39
|
+
VALUE
|
40
|
+
rb_cdio_trackiso9660_new(VALUE cd, int track)
|
41
|
+
{
|
42
|
+
VALUE argv[2];
|
43
|
+
argv[0] = cd;
|
44
|
+
argv[1] = INT2FIX(track);
|
45
|
+
return rb_class_new_instance(2, argv, cCdIoTrackIso9660);
|
46
|
+
}
|
47
|
+
|
48
|
+
VALUE
|
49
|
+
rb_cdio_trackiso9660_init(VALUE obj, VALUE cd, VALUE track)
|
50
|
+
{
|
51
|
+
VALUE argv[2];
|
52
|
+
argv[0] = cd;
|
53
|
+
argv[1] = track;
|
54
|
+
rb_call_super(2, argv);
|
55
|
+
GET_CDIO(cd, p_cdio);
|
56
|
+
iso9660_pvd_t pvd;
|
57
|
+
track_format_t track_format =
|
58
|
+
cdio_get_track_format(p_cdio, FIX2INT(track));
|
59
|
+
// ok, empezamos con el chiste!
|
60
|
+
if (read_iso9660_pvd(p_cdio, track_format, &pvd)) {
|
61
|
+
// "system_id", "volume_id", "volumeset_id",
|
62
|
+
// "preparer_id","publisher_id","application_id"
|
63
|
+
rb_iv_set(obj, "@system_id",
|
64
|
+
rb_str_new2(iso9660_get_system_id(&pvd)));
|
65
|
+
rb_iv_set(obj, "@volume_id",
|
66
|
+
rb_str_new2(iso9660_get_volume_id(&pvd)));
|
67
|
+
rb_iv_set(obj, "@volumeset_id",
|
68
|
+
rb_str_new2(iso9660_get_volumeset_id(&pvd)));
|
69
|
+
rb_iv_set(obj, "@preparer_id",
|
70
|
+
rb_str_new2(iso9660_get_preparer_id(&pvd)));
|
71
|
+
rb_iv_set(obj, "@publisher_id",
|
72
|
+
rb_str_new2(iso9660_get_publisher_id(&pvd)));
|
73
|
+
rb_iv_set(obj, "@application_id",
|
74
|
+
rb_str_new2(iso9660_get_application_id(&pvd)));
|
75
|
+
|
76
|
+
}
|
77
|
+
return obj;
|
78
|
+
}
|