rb_cdio 0.1.1 → 0.2.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.txt +17 -2
- data/VERSION +1 -1
- data/doc/classes/CdIo.html +19 -31
- data/doc/classes/CdIo.src/M000001.html +1 -1
- data/doc/classes/CdIo.src/M000002.html +1 -1
- data/doc/classes/CdIo.src/M000003.html +1 -1
- data/doc/classes/CdIo.src/M000004.html +1 -1
- data/doc/classes/CdIo.src/M000005.html +1 -1
- data/doc/classes/CdIo.src/M000006.html +1 -1
- data/doc/classes/CdIo.src/M000007.html +1 -1
- data/doc/classes/CdIo.src/M000008.html +1 -1
- data/doc/classes/CdIo/Cd.html +51 -51
- data/doc/classes/CdIo/Cd.src/{M000011.html → M000020.html} +1 -1
- data/doc/classes/CdIo/Cd.src/M000021.html +3 -3
- data/doc/classes/CdIo/Cd.src/M000022.html +3 -3
- data/doc/classes/CdIo/Cd.src/M000023.html +3 -3
- data/doc/classes/CdIo/Cd.src/M000024.html +3 -3
- data/doc/classes/CdIo/Cd.src/M000025.html +3 -3
- data/doc/classes/CdIo/Cd.src/M000026.html +3 -3
- data/doc/classes/CdIo/Cd.src/M000027.html +3 -3
- data/doc/classes/CdIo/Cd.src/M000028.html +3 -3
- data/doc/classes/CdIo/Cd.src/M000029.html +3 -3
- data/doc/classes/CdIo/Cd.src/M000030.html +3 -3
- data/doc/classes/CdIo/Cd.src/M000031.html +3 -3
- data/doc/classes/CdIo/Cd.src/M000032.html +3 -3
- data/doc/classes/CdIo/Cd.src/M000033.html +3 -3
- data/doc/classes/CdIo/Cd.src/M000034.html +3 -3
- data/doc/classes/CdIo/Cd.src/M000035.html +3 -3
- data/doc/classes/CdIo/Cdda.html +428 -0
- data/doc/classes/CdIo/{Cd.src/M000016.html → Cdda.src/M000009.html} +3 -3
- data/doc/classes/CdIo/{Cd.src/M000013.html → Cdda.src/M000010.html} +3 -3
- data/doc/classes/CdIo/{Cd.src/M000036.html → Cdda.src/M000011.html} +3 -3
- data/doc/classes/CdIo/{Cd.src/M000014.html → Cdda.src/M000012.html} +3 -3
- data/doc/classes/CdIo/Cdda.src/M000013.html +17 -0
- data/doc/classes/CdIo/{Cd.src/M000019.html → Cdda.src/M000014.html} +3 -3
- data/doc/classes/CdIo/Cdda.src/M000015.html +17 -0
- data/doc/classes/CdIo/Cdda.src/M000016.html +17 -0
- data/doc/classes/CdIo/Cdda.src/M000017.html +17 -0
- data/doc/classes/CdIo/Cdda.src/M000018.html +17 -0
- data/doc/classes/CdIo/Cdda.src/M000019.html +17 -0
- data/doc/classes/CdIo/{Cd.src/M000015.html → Cdda.src/M000020.html} +3 -3
- data/doc/classes/CdIo/{Cd.src/M000017.html → Cdda.src/M000021.html} +3 -3
- data/doc/classes/CdIo/{Cd.src/M000018.html → Cdda.src/M000022.html} +3 -3
- data/doc/classes/CdIo/Cdda.src/M000023.html +17 -0
- data/doc/classes/CdIo/Cdda.src/M000024.html +17 -0
- data/doc/classes/CdIo/Exception.html +118 -0
- data/doc/classes/CdIo/Exception/BadParameter.html +111 -0
- data/doc/classes/CdIo/Exception/BadPointer.html +111 -0
- data/doc/classes/CdIo/{Device.html → Exception/CddbConn.html} +5 -5
- data/doc/classes/CdIo/Exception/CddbError.html +111 -0
- data/doc/classes/CdIo/{CdText.html → Exception/Error.html} +5 -5
- data/doc/{files/test/testall_rb.html → classes/CdIo/Exception/NoDriver.html} +26 -25
- data/doc/classes/CdIo/Exception/NotPermitted.html +111 -0
- data/doc/classes/CdIo/Exception/Unsupported.html +111 -0
- data/doc/classes/CdIo/Track.html +16 -16
- data/doc/classes/CdIo/Track.src/M000017.html +3 -3
- data/doc/classes/CdIo/Track.src/M000018.html +3 -3
- data/doc/classes/CdIo/Track.src/M000019.html +3 -3
- data/doc/classes/CdIo/Track.src/{M000009.html → M000025.html} +1 -1
- data/doc/classes/CdIo/Track.src/{M000010.html → M000026.html} +1 -1
- data/doc/classes/CdIo/Track.src/{M000011.html → M000027.html} +1 -1
- data/doc/classes/CdIo/TrackCdda.html +169 -0
- data/doc/classes/CdIo/TrackCdda.src/M000031.html +17 -0
- data/doc/classes/CdIo/TrackCdda.src/M000039.html +17 -0
- data/doc/classes/CdIo/TrackCdda.src/M000040.html +17 -0
- data/doc/classes/CdIo/TrackCdda.src/M000041.html +17 -0
- data/doc/classes/CdIo/Tracks.html +15 -15
- data/doc/classes/CdIo/Tracks.src/{M000020.html → M000028.html} +1 -1
- data/doc/classes/CdIo/Tracks.src/{M000021.html → M000029.html} +1 -1
- data/doc/classes/CdIo/Tracks.src/{M000022.html → M000030.html} +1 -1
- data/doc/classes/CdIo/{Cd.src/M000012.html → Tracks.src/M000036.html} +3 -3
- data/doc/classes/CdIo/Tracks.src/M000037.html +17 -0
- data/doc/classes/CdIo/Tracks.src/M000038.html +17 -0
- data/doc/created.rid +1 -1
- data/doc/files/__/rb_cdio_def_rb.html +235 -0
- data/doc/files/rb_cdio_def_rb.html +80 -5
- data/doc/fr_class_index.html +11 -0
- data/doc/fr_method_index.html +33 -14
- data/ext/CdIo.c +58 -3
- data/ext/CdIo.h +74 -1
- data/ext/CdIo_Cd.c +33 -80
- data/ext/CdIo_Cdda.c +607 -0
- data/ext/CdIo_Common.c +53 -8
- data/ext/CdIo_Modulo.c +12 -4
- data/ext/CdIo_Track.c +23 -35
- data/ext/CdIo_TrackCdda.c +13 -0
- data/ext/CdIo_TrackIso9660.c +1 -9
- data/ext/CdIo_Tracks.c +12 -2
- data/ext/extconf.rb +3 -0
- data/ext/mkmf.log +23 -0
- data/lib/rb_cdio_read.rb +23 -14
- data/rb_cdio.def.rb +157 -16
- data/test/data/bad-file.toc +13 -0
- data/test/data/cdda-read.right +3 -0
- data/test/data/cdda.cue +1 -0
- data/test/data/cdda.right +5 -28
- data/test/data/cdda.toc +2 -1
- data/test/data/check_common_fn +9 -9
- data/test/data/check_common_fn.in +9 -9
- data/test/data/check_cue.sh.in +35 -20
- data/test/data/check_iso.sh.in +23 -3
- data/test/data/check_nrg.sh.in +18 -16
- data/test/data/check_opts0.right +2 -24
- data/test/data/check_opts1.right +2 -24
- data/test/data/check_opts2.right +5 -27
- data/test/data/check_opts3.right +5 -27
- data/test/data/check_opts4.right +5 -27
- data/test/data/check_opts5.right +5 -27
- data/test/data/check_opts6.right +5 -27
- data/test/data/check_opts7.right +5 -27
- data/test/data/check_paranoia.sh.in +78 -0
- data/test/data/check_sizeof.c +5 -5
- data/test/data/copying-rr.iso +0 -0
- data/test/data/copying-rr.right +25 -0
- data/test/data/copying.right +3 -3
- data/test/data/data5.toc +3 -3
- data/test/data/data6.toc +2 -2
- data/test/data/data7.toc +3 -3
- data/test/data/isofs-m1-no-rr.right +33 -0
- data/test/data/isofs-m1-read.right +3 -0
- data/test/data/isofs-m1.right +12 -36
- data/test/data/joliet-nojoliet.right +23 -0
- data/test/data/joliet.iso +0 -0
- data/test/data/joliet.right +23 -0
- data/test/data/testbincue.c +19 -3
- data/test/data/testdefault.c +8 -2
- data/test/data/testiso9660.c +10 -5
- data/test/data/testparanoia.c +185 -0
- data/test/data/testtoc.c +18 -5
- data/test/data/vcd2.toc +23 -0
- data/test/data/vcd_demo.right +55 -79
- data/test/data/vcd_demo_vcdinfo.right +97 -0
- data/test/data/videocd.right +37 -61
- data/test/test_cdda.rb +73 -0
- data/test/testall.rb +1 -0
- data/test/testbincue.rb +6 -1
- data/test/testclose.rb +6 -1
- data/test/testmethods.rb +29 -21
- data/test/testtoc.rb +9 -2
- metadata +137 -80
- data/doc/classes/CdIo.src/M000009.html +0 -17
- data/doc/classes/CdIo.src/M000010.html +0 -17
- data/doc/classes/CdIo.src/M000011.html +0 -17
- data/doc/classes/CdIo.src/M000012.html +0 -17
- data/doc/classes/CdIo.src/M000013.html +0 -17
- data/doc/classes/CdIo.src/M000014.html +0 -17
- data/doc/classes/CdIo.src/M000015.html +0 -17
- data/doc/classes/CdIo.src/M000016.html +0 -17
- data/doc/classes/CdIo/Track.src/M000020.html +0 -17
- data/test/data/check_cd_read.sh +0 -53
- data/test/data/check_cue.sh +0 -102
- data/test/data/check_iso.sh +0 -32
- data/test/data/check_nrg.sh +0 -68
- data/test/data/check_opts.sh +0 -33
data/ext/CdIo_Common.c
CHANGED
|
@@ -24,6 +24,7 @@ get_cap(cdio_drive_read_cap_t * read_cap,
|
|
|
24
24
|
rb_hash_aset(ret, rb_str_new2("read"), read);
|
|
25
25
|
rb_hash_aset(ret, rb_str_new2("write"), write);
|
|
26
26
|
rb_hash_aset(ret, rb_str_new2("misc"), misc);
|
|
27
|
+
// read
|
|
27
28
|
CAP(read, "audio", read_cap, CDIO_DRIVE_CAP_READ_AUDIO);
|
|
28
29
|
CAP(read, "cd-da", read_cap, CDIO_DRIVE_CAP_READ_CD_DA);
|
|
29
30
|
CAP(read, "cd+g", read_cap, CDIO_DRIVE_CAP_READ_CD_G);
|
|
@@ -36,6 +37,12 @@ get_cap(cdio_drive_read_cap_t * read_cap,
|
|
|
36
37
|
CAP(read, "dvd-rw", read_cap, CDIO_DRIVE_CAP_READ_DVD_RW);
|
|
37
38
|
CAP(read, "dvd+rw", read_cap, CDIO_DRIVE_CAP_READ_DVD_RPW);
|
|
38
39
|
CAP(read, "c2_errs", read_cap, CDIO_DRIVE_CAP_READ_C2_ERRS);
|
|
40
|
+
CAP(read, "mode2_form1", read_cap, CDIO_DRIVE_CAP_READ_MODE2_FORM1);
|
|
41
|
+
CAP(read, "mode2_form2", read_cap, CDIO_DRIVE_CAP_READ_MODE2_FORM2);
|
|
42
|
+
CAP(read, "mcn", read_cap, CDIO_DRIVE_CAP_READ_MCN);
|
|
43
|
+
CAP(read, "isrc", read_cap, CDIO_DRIVE_CAP_READ_ISRC);
|
|
44
|
+
|
|
45
|
+
// write
|
|
39
46
|
CAP(write, "cd-r", write_cap, CDIO_DRIVE_CAP_WRITE_CD_R);
|
|
40
47
|
CAP(write, "cd-rw", write_cap, CDIO_DRIVE_CAP_WRITE_CD_RW);
|
|
41
48
|
CAP(write, "dvd-r", write_cap, CDIO_DRIVE_CAP_WRITE_DVD_R);
|
|
@@ -48,6 +55,7 @@ get_cap(cdio_drive_read_cap_t * read_cap,
|
|
|
48
55
|
CAP(write, "burn_proof", write_cap, CDIO_DRIVE_CAP_WRITE_BURN_PROOF);
|
|
49
56
|
CAP(write, "cd", write_cap, CDIO_DRIVE_CAP_WRITE_CD);
|
|
50
57
|
CAP(write, "dvd", write_cap, CDIO_DRIVE_CAP_WRITE_DVD);
|
|
58
|
+
// misc
|
|
51
59
|
CAP(misc, "close_tray", misc_cap, CDIO_DRIVE_CAP_MISC_CLOSE_TRAY);
|
|
52
60
|
CAP(misc, "eject", misc_cap, CDIO_DRIVE_CAP_MISC_EJECT);
|
|
53
61
|
CAP(misc, "lock", misc_cap, CDIO_DRIVE_CAP_MISC_LOCK);
|
|
@@ -57,9 +65,7 @@ get_cap(cdio_drive_read_cap_t * read_cap,
|
|
|
57
65
|
CDIO_DRIVE_CAP_MISC_MULTI_SESSION);
|
|
58
66
|
CAP(misc, "media_changed", misc_cap,
|
|
59
67
|
CDIO_DRIVE_CAP_MISC_MEDIA_CHANGED);
|
|
60
|
-
CAP(misc, "
|
|
61
|
-
CAP(misc, "mcn", misc_cap, CDIO_DRIVE_CAP_MCN);
|
|
62
|
-
CAP(misc, "isrc", misc_cap, CDIO_DRIVE_CAP_ISRC);
|
|
68
|
+
CAP(misc, "reset", misc_cap, CDIO_DRIVE_CAP_MISC_RESET);
|
|
63
69
|
CAP(misc, "file", misc_cap, CDIO_DRIVE_CAP_MISC_FILE);
|
|
64
70
|
return ret;
|
|
65
71
|
}
|
|
@@ -115,14 +121,53 @@ _cdio_cd_is_iso(CdIo * p_cdio, track_t track)
|
|
|
115
121
|
*/
|
|
116
122
|
|
|
117
123
|
VALUE
|
|
118
|
-
get_track(VALUE
|
|
124
|
+
get_track(VALUE cd, track_t i)
|
|
119
125
|
{
|
|
120
|
-
GET_CDIO(
|
|
126
|
+
GET_CDIO(cd, p_cdio);
|
|
127
|
+
// printf("get_track 1:%d\n",i);
|
|
121
128
|
VALUE track;
|
|
129
|
+
track_format_t format = cdio_get_track_format(p_cdio, i);
|
|
130
|
+
VALUE argv[2];
|
|
131
|
+
argv[0] = cd;
|
|
132
|
+
argv[1] = INT2FIX(i);
|
|
133
|
+
// printf("get_track 2:%d\n",FIX2INT(argv[1]));
|
|
134
|
+
|
|
122
135
|
if (_cdio_cd_is_iso(p_cdio, i)) {
|
|
123
|
-
|
|
136
|
+
return rb_class_new_instance(2, argv, cCdIoTrackIso9660);
|
|
137
|
+
} else if (TRACK_FORMAT_AUDIO == format) {
|
|
138
|
+
return rb_class_new_instance(2, argv, cCdIoTrackCdda);
|
|
124
139
|
} else {
|
|
125
|
-
|
|
140
|
+
return rb_class_new_instance(2, argv, cCdIoTrack);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
void
|
|
144
|
+
verify_return_code(driver_return_code_t rc)
|
|
145
|
+
{
|
|
146
|
+
switch (rc) {
|
|
147
|
+
case DRIVER_OP_SUCCESS:
|
|
148
|
+
break;
|
|
149
|
+
case DRIVER_OP_ERROR:
|
|
150
|
+
rb_raise(eCdIoError, "Operation returned an error");
|
|
151
|
+
break;
|
|
152
|
+
case DRIVER_OP_UNSUPPORTED:
|
|
153
|
+
rb_raise(eCdIoUnsupported, "Driver doesn't support feature");
|
|
154
|
+
break;
|
|
155
|
+
case DRIVER_OP_UNINIT:
|
|
156
|
+
rb_raise(eCdIoUnitit, "driver hasn't been initialized");
|
|
157
|
+
break;
|
|
158
|
+
case DRIVER_OP_NOT_PERMITTED:
|
|
159
|
+
rb_raise(eCdIoNotPermitted, "Operation not permitted.");
|
|
160
|
+
break;
|
|
161
|
+
case DRIVER_OP_BAD_PARAMETER:
|
|
162
|
+
rb_raise(eCdIoBadParameter,
|
|
163
|
+
"Bad parameter (library bug, probably)");
|
|
164
|
+
break;
|
|
165
|
+
case DRIVER_OP_BAD_POINTER:
|
|
166
|
+
rb_raise(eCdIoBadPointer, "Bad pointer (library bug, probably)");
|
|
167
|
+
break;
|
|
168
|
+
case DRIVER_OP_NO_DRIVER:
|
|
169
|
+
rb_raise(eCdIoNoDriver,
|
|
170
|
+
"Operaton called on a driver not available on this OS");
|
|
171
|
+
break;
|
|
126
172
|
}
|
|
127
|
-
return track;
|
|
128
173
|
}
|
data/ext/CdIo_Modulo.c
CHANGED
|
@@ -31,8 +31,6 @@ rb_cdio_get_devices(int argc, VALUE * argv, VALUE module)
|
|
|
31
31
|
rb_ary_push(aDevices, rb_str_new2(*i));
|
|
32
32
|
}
|
|
33
33
|
cdio_free_device_list(devices);
|
|
34
|
-
free(devices);
|
|
35
|
-
devices = NULL;
|
|
36
34
|
return aDevices;
|
|
37
35
|
} else {
|
|
38
36
|
return Qnil;
|
|
@@ -193,7 +191,7 @@ rb_cdio_track_type_describe(VALUE module, VALUE track)
|
|
|
193
191
|
return rb_str_new2(desc);
|
|
194
192
|
}
|
|
195
193
|
|
|
196
|
-
static
|
|
194
|
+
static VALUE
|
|
197
195
|
_is_file_bool(bool(*pf) (const char *n), VALUE name)
|
|
198
196
|
{
|
|
199
197
|
Check_Type(name, T_STRING);
|
|
@@ -202,7 +200,7 @@ _is_file_bool(bool(*pf) (const char *n), VALUE name)
|
|
|
202
200
|
return res ? Qtrue : Qfalse;
|
|
203
201
|
}
|
|
204
202
|
|
|
205
|
-
static
|
|
203
|
+
static VALUE
|
|
206
204
|
_is_file_char(char *(*pf) (const char *n), VALUE name)
|
|
207
205
|
{
|
|
208
206
|
Check_Type(name, T_STRING);
|
|
@@ -244,3 +242,13 @@ rb_cdio_is_device(int argc, VALUE * argv, VALUE module)
|
|
|
244
242
|
{
|
|
245
243
|
return Qnil;
|
|
246
244
|
}
|
|
245
|
+
|
|
246
|
+
VALUE
|
|
247
|
+
rb_cdio_close_tray(VALUE module, VALUE name)
|
|
248
|
+
{
|
|
249
|
+
Check_Type(name, T_STRING);
|
|
250
|
+
SafeStringValue(name);
|
|
251
|
+
driver_return_code_t rc = cdio_close_tray(StringValuePtr(name), NULL);
|
|
252
|
+
verify_return_code(rc);
|
|
253
|
+
return Qtrue;
|
|
254
|
+
}
|
data/ext/CdIo_Track.c
CHANGED
|
@@ -8,49 +8,20 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
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
|
-
|
|
42
11
|
VALUE
|
|
43
12
|
rb_cdio_track_init(VALUE obj, VALUE cd, VALUE track)
|
|
44
13
|
{
|
|
45
|
-
//
|
|
14
|
+
// Verificacion de tipos.
|
|
46
15
|
lsn_t lsn;
|
|
47
16
|
int i_track;
|
|
48
17
|
FIXNUM_P(track);
|
|
49
18
|
if (Qtrue != rb_obj_is_instance_of(cd, cCdIoCd)) {
|
|
50
19
|
rb_raise(rb_eArgError, "Arg 1 must be a CdIo::Cd");
|
|
51
20
|
}
|
|
21
|
+
|
|
52
22
|
GET_CDIO(cd, p_cdio);
|
|
53
23
|
i_track = FIX2INT(track);
|
|
24
|
+
// printf("En init:%d\n",i_track);
|
|
54
25
|
// Verify track number
|
|
55
26
|
track_t min,
|
|
56
27
|
max;
|
|
@@ -79,9 +50,9 @@ rb_cdio_track_init(VALUE obj, VALUE cd, VALUE track)
|
|
|
79
50
|
if (cdio_get_track_msf(p_cdio, i_track, &msf)) {
|
|
80
51
|
msf_s = cdio_msf_to_str(&msf);
|
|
81
52
|
// printf("C->%d:%d:%d\n",(int)msf.m,(int)msf.s,(int)msf.f);
|
|
82
|
-
rb_iv_set(obj, "@min", INT2FIX(
|
|
83
|
-
rb_iv_set(obj, "@sec", INT2FIX(
|
|
84
|
-
rb_iv_set(obj, "@frames", INT2FIX(
|
|
53
|
+
rb_iv_set(obj, "@min", INT2FIX(cdio_from_bcd8(msf.m)));
|
|
54
|
+
rb_iv_set(obj, "@sec", INT2FIX(cdio_from_bcd8(msf.s)));
|
|
55
|
+
rb_iv_set(obj, "@frames", INT2FIX(cdio_from_bcd8(msf.f)));
|
|
85
56
|
rb_iv_set(obj, "@msf", rb_str_new2(msf_s));
|
|
86
57
|
free(msf_s);
|
|
87
58
|
}
|
|
@@ -98,6 +69,23 @@ rb_cdio_track_init(VALUE obj, VALUE cd, VALUE track)
|
|
|
98
69
|
return obj;
|
|
99
70
|
}
|
|
100
71
|
|
|
72
|
+
int
|
|
73
|
+
rb_cdio_track_number(VALUE obj)
|
|
74
|
+
{
|
|
75
|
+
return FIX2INT(rb_iv_get(obj, "@number"));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
VALUE
|
|
79
|
+
rb_cdio_track_green(VALUE obj)
|
|
80
|
+
{
|
|
81
|
+
GET_CDIO(rb_iv_get(obj, "@cd"), p_cdio);
|
|
82
|
+
if (cdio_get_track_green(p_cdio, rb_cdio_track_number(obj))) {
|
|
83
|
+
return Qtrue;
|
|
84
|
+
} else {
|
|
85
|
+
return Qfalse;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
101
89
|
VALUE
|
|
102
90
|
rb_cdio_track_get_cdtext(VALUE obj)
|
|
103
91
|
{
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#include "CdIo.h"
|
|
2
|
+
|
|
3
|
+
VALUE
|
|
4
|
+
rb_cdio_trackcdda_play(VALUE obj)
|
|
5
|
+
{
|
|
6
|
+
GET_TRACK(obj, p_cdio, track_i);
|
|
7
|
+
msf_t msf_start,
|
|
8
|
+
msf_end;
|
|
9
|
+
cdio_get_track_msf(p_cdio, track_i, &msf_start);
|
|
10
|
+
cdio_get_track_msf(p_cdio, track_i + 1, &msf_end);
|
|
11
|
+
verify_return_code(cdio_audio_play_msf(p_cdio, &msf_start, &msf_end));
|
|
12
|
+
return Qtrue;
|
|
13
|
+
}
|
data/ext/CdIo_TrackIso9660.c
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
#include "CdIo.h"
|
|
12
|
-
static
|
|
12
|
+
static bool
|
|
13
13
|
read_iso9660_pvd(const CdIo * p_cdio, track_format_t track_format, /* out
|
|
14
14
|
*/
|
|
15
15
|
iso9660_pvd_t * p_pvd)
|
|
@@ -36,14 +36,6 @@ read_iso9660_pvd(const CdIo * p_cdio, track_format_t track_format, /* out
|
|
|
36
36
|
return true;
|
|
37
37
|
}
|
|
38
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
39
|
|
|
48
40
|
VALUE
|
|
49
41
|
rb_cdio_trackiso9660_init(VALUE obj, VALUE cd, VALUE track)
|
data/ext/CdIo_Tracks.c
CHANGED
|
@@ -18,6 +18,7 @@ rb_cdio_tracks_init(VALUE obj, VALUE cd)
|
|
|
18
18
|
int j,
|
|
19
19
|
i = first_track_num;
|
|
20
20
|
for (j = 0; j < num_tracks; i++, j++) {
|
|
21
|
+
// printf("rb_cdio_tracks_init->%d\n",i);
|
|
21
22
|
rb_ary_push(aTracks, get_track(cd, i));
|
|
22
23
|
}
|
|
23
24
|
rb_iv_set(obj, "@tracks", aTracks);
|
|
@@ -60,7 +61,16 @@ rb_cdio_tracks_diff(VALUE obj, VALUE a, VALUE b)
|
|
|
60
61
|
VALUE
|
|
61
62
|
rb_cdio_tracks_index(VALUE obj, VALUE index)
|
|
62
63
|
{
|
|
63
|
-
|
|
64
|
+
// ok, this is a very stupid method, but...
|
|
64
65
|
FIXNUM_P(index);
|
|
65
|
-
|
|
66
|
+
VALUE aTracks = rb_iv_get(obj, "@tracks");
|
|
67
|
+
long len = RARRAY(aTracks)->len;
|
|
68
|
+
long i;
|
|
69
|
+
for (i = 0; i < len; i++) {
|
|
70
|
+
if (rb_iv_get(rb_ary_entry(aTracks, i), "@number") == index) {
|
|
71
|
+
return rb_ary_entry(aTracks, i);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return Qnil;
|
|
75
|
+
// return get_track(rb_iv_get(obj, "@cd"), FIX2INT(index));
|
|
66
76
|
}
|
data/ext/extconf.rb
CHANGED
data/ext/mkmf.log
CHANGED
|
@@ -24,3 +24,26 @@ int t() { iso9660_get_system_id(); return 0; }
|
|
|
24
24
|
|
|
25
25
|
--------------------
|
|
26
26
|
|
|
27
|
+
have_library: checking for cddb_new() in -lcddb... -------------------- yes
|
|
28
|
+
|
|
29
|
+
"i686-pc-linux-gnu-gcc -o conftest -I/home/cdx/ruby/rb_cdio/ext -I/usr/lib/ruby/1.8/i686-linux -O2 -march=athlon-xp -m3dnow -msse -mfpmath=sse -mmmx -pipe -ffast-math -fPIC conftest.c -L'/usr/lib' -Wl,-R'/usr/lib' -liso9660 -lcdio -lruby18-static -lcddb -liso9660 -lcdio -ldl -lcrypt -lm -lc"
|
|
30
|
+
checked program was:
|
|
31
|
+
/* begin */
|
|
32
|
+
|
|
33
|
+
/*top*/
|
|
34
|
+
int main() { return 0; }
|
|
35
|
+
int t() { cddb_new(); return 0; }
|
|
36
|
+
/* end */
|
|
37
|
+
|
|
38
|
+
--------------------
|
|
39
|
+
|
|
40
|
+
have_header: checking for cddb/cddb.h... -------------------- yes
|
|
41
|
+
|
|
42
|
+
"i686-pc-linux-gnu-gcc -E -I/home/cdx/ruby/rb_cdio/ext -I/usr/lib/ruby/1.8/i686-linux -O2 -march=athlon-xp -m3dnow -msse -mfpmath=sse -mmmx -pipe -ffast-math -fPIC conftest.c -o conftest.i"
|
|
43
|
+
checked program was:
|
|
44
|
+
/* begin */
|
|
45
|
+
#include <cddb/cddb.h>
|
|
46
|
+
/* end */
|
|
47
|
+
|
|
48
|
+
--------------------
|
|
49
|
+
|
data/lib/rb_cdio_read.rb
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
if(File::exists?("../ext/rb_cdio.so"))
|
|
2
|
+
require "../ext/rb_cdio"
|
|
3
|
+
else
|
|
4
|
+
require 'rubygems'
|
|
5
|
+
require_gem "rb_cdio",">=0.2"
|
|
6
|
+
end
|
|
4
7
|
dev=( ARGV[0].nil? ) ? nil:ARGV[0];
|
|
5
8
|
CdIo.open(ARGV[0]) {|cd|
|
|
6
9
|
puts "Device:"+cd.device
|
|
@@ -12,26 +15,32 @@ CdIo.open(ARGV[0]) {|cd|
|
|
|
12
15
|
puts "Discmode: "+CdIo.discmode_describe(cd.discmode);
|
|
13
16
|
puts "Is Cd?: "+((cd.is_cd? ) ? "Yes" : "No");
|
|
14
17
|
puts "Is Dvd?: "+((cd.is_dvd? ) ? "Yes" : "No");
|
|
18
|
+
cdda=false
|
|
15
19
|
if (cd.discmode==CdIo::CDIO_DISC_MODE_CD_DA)
|
|
16
|
-
puts "CDTEXT"
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
puts "CDTEXT: "+cd.cdtext.to_s
|
|
21
|
+
puts "Cddb: "+cd.cddb_id
|
|
22
|
+
begin
|
|
23
|
+
cd.cddb_fetch(1)
|
|
24
|
+
puts "Artist:"+cd.artist
|
|
25
|
+
puts "Title:"+cd.title
|
|
26
|
+
cdda=true
|
|
27
|
+
rescue =>e
|
|
28
|
+
puts "ERROR - Can't get cddb info : "+e.to_s
|
|
29
|
+
end
|
|
23
30
|
end
|
|
24
|
-
cd.
|
|
31
|
+
cd.tracks.each {|track|
|
|
25
32
|
puts "=========\nTrack number "+track.number.to_s
|
|
26
33
|
puts CdIo.track_format_describe(track.format);
|
|
27
34
|
|
|
28
35
|
if(cd.discmode==CdIo::CDIO_DISC_MODE_CD_DA)
|
|
29
|
-
puts "CDTEXT"
|
|
30
|
-
p track.get_cdtext
|
|
36
|
+
puts "CDTEXT:"+track.cdtext.to_s
|
|
31
37
|
end
|
|
32
38
|
puts "Format: "+CdIo.track_format_describe(track.format);
|
|
33
39
|
puts "Type: "+CdIo.track_type_describe(track);
|
|
34
|
-
puts track.msf
|
|
40
|
+
puts "Mfs: "+track.msf
|
|
41
|
+
if(cdda)
|
|
42
|
+
puts "Title:"+track.title
|
|
43
|
+
end
|
|
35
44
|
}
|
|
36
45
|
}
|
|
37
46
|
|
data/rb_cdio.def.rb
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
#!/bin/env ruby
|
|
2
2
|
# = rb_cdio
|
|
3
|
-
#
|
|
3
|
+
# Create bindings to the library libcdio and libcddb(optional).
|
|
4
|
+
# You can retrieve information about Cd and images. If you have
|
|
5
|
+
# library libcddb installed, you can retrieve information like artist and titles
|
|
6
|
+
# for CD-DA.
|
|
4
7
|
#
|
|
5
8
|
# == Version
|
|
6
9
|
# :include:VERSION
|
|
@@ -8,6 +11,43 @@
|
|
|
8
11
|
# == Changelog
|
|
9
12
|
# :include:ChangeLog.txt
|
|
10
13
|
#
|
|
14
|
+
# == Download
|
|
15
|
+
#
|
|
16
|
+
# http://rb-cdio.rubyforge.org
|
|
17
|
+
#
|
|
18
|
+
# == Example of use
|
|
19
|
+
# CdIo.devices
|
|
20
|
+
# ==>["/dev/cdrom", "/dev/dvd"]
|
|
21
|
+
# cd=CdIo.default_device
|
|
22
|
+
# ==>"/dev/cdrom"
|
|
23
|
+
# CdIo.drive_cap_dev(cd)
|
|
24
|
+
# ==>{"misc"=>{"close_tray"=>true, "media_changed"=>false, "select_disk"=>false, "lock"=>true, "multi_session"=>true, "eject"=>true, "reset"=>false, "select_speed"=>false, "file"=>false}, "read"=>{"mode2_form1"=>true, "dvd-rw"=>false, "audio"=>true, "mode2_form2"=>true, "c2_errs"=>false, "dvd-r"=>false, "mcn"=>true, "cd-da"=>true, "dvd-rom"=>false, "isrc"=>true, "cd-r"=>true, "dvd-ram"=>false, "dvr+r"=>false, "cd+g"=>false, "dvd+rw"=>false, "cd-rw"=>true}, "write"=>{"dvd-rw"=>false, "cd"=>false, "dvd-r"=>false, "burn_proof"=>false, "dvd+r"=>false, "cd-r"=>false, "dvd"=>false, "dvd-ram"=>false, "dvd+rw"=>false, "mount_rainier"=>false, "cd-rw"=>false}}
|
|
25
|
+
# CdIo.driver_describe(CdIo::DRIVER_LINUX)
|
|
26
|
+
# ==>"GNU/Linux ioctl and MMC driver"
|
|
27
|
+
# CdIo.discmode_describe(CdIo::CDIO_DISC_MODE_CD_DA)
|
|
28
|
+
# ==>"CD-DA"
|
|
29
|
+
# CdIo.track_format_describe(CdIo::TRACK_FORMAT_XA)
|
|
30
|
+
# ==>"XA"
|
|
31
|
+
# cdo=CdIo.open(cd)
|
|
32
|
+
# ==>#<CdIo::Cd:0xb7d2a91c>
|
|
33
|
+
# cdo.cdtext
|
|
34
|
+
# ==>nil
|
|
35
|
+
# cdo.tracks.each do |track|
|
|
36
|
+
# track.number
|
|
37
|
+
# track
|
|
38
|
+
# end
|
|
39
|
+
# ==>[#<CdIo::TrackIso9660:0xb7cde440 @leadout=false, @min=0, @cd=#<CdIo::Cd:0xb7d2a91c>, @sec_count=311872, @frames=0, @lsn=0, @format=3, @track_type=3, @msf="00:02:00", @number=1, @sec=2, @lba=150>]
|
|
40
|
+
# cdo.tracks[CdIo::CDIO_CDROM_LEADOUT_TRACK];
|
|
41
|
+
# cdo.is_cd?
|
|
42
|
+
# ==>true
|
|
43
|
+
# cdo.is_dvd?
|
|
44
|
+
# ==>false
|
|
45
|
+
# cdo.drive_cap
|
|
46
|
+
# ==>{"misc"=>{"close_tray"=>true, "media_changed"=>false, "select_disk"=>false, "lock"=>true, "multi_session"=>true, "eject"=>true, "reset"=>false, "select_speed"=>false, "file"=>false}, "read"=>{"mode2_form1"=>true, "dvd-rw"=>false, "audio"=>true, "mode2_form2"=>true, "c2_errs"=>false, "dvd-r"=>false, "mcn"=>true, "cd-da"=>true, "dvd-rom"=>false, "isrc"=>true, "cd-r"=>true, "dvd-ram"=>false, "dvr+r"=>false, "cd+g"=>false, "dvd+rw"=>false, "cd-rw"=>true}, "write"=>{"dvd-rw"=>false, "cd"=>false, "dvd-r"=>false, "burn_proof"=>false, "dvd+r"=>false, "cd-r"=>false, "dvd"=>false, "dvd-ram"=>false, "dvd+rw"=>false, "mount_rainier"=>false, "cd-rw"=>false}}
|
|
47
|
+
# cdo.hwinfo
|
|
48
|
+
# ==>{"revision"=>"1.00", "vendor"=>"HL-DT-ST", "model"=>"CD-ROM GCR-8520B"}
|
|
49
|
+
# cdo.joliet_level
|
|
50
|
+
# ==>0
|
|
11
51
|
|
|
12
52
|
# = Module CdIo
|
|
13
53
|
# The module CdIo defines constants, classes and methods
|
|
@@ -16,9 +56,10 @@
|
|
|
16
56
|
#
|
|
17
57
|
#
|
|
18
58
|
# The name of the constants are the same of libcdio, so theirs values
|
|
19
|
-
# can change on different OS and versions of the library
|
|
59
|
+
# can change on different OS and versions of the libcdio library
|
|
20
60
|
|
|
21
61
|
module CdIo
|
|
62
|
+
CDIO_CDROM_LEADOUT_TRACK=170
|
|
22
63
|
CDIO_DISC_MODE_CD_DA=0
|
|
23
64
|
CDIO_DISC_MODE_CD_DATA=1
|
|
24
65
|
CDIO_DISC_MODE_CD_MIXED=3
|
|
@@ -32,26 +73,22 @@ module CdIo
|
|
|
32
73
|
CDIO_DISC_MODE_DVD_RW=7
|
|
33
74
|
CDIO_DISC_MODE_ERROR=12
|
|
34
75
|
CDIO_DISC_MODE_NO_INFO=11
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
DRIVER_OSX=5
|
|
44
|
-
DRIVER_SOLARIS=4
|
|
76
|
+
DRIVER_BINCUE=9
|
|
77
|
+
DRIVER_CDRDAO=8
|
|
78
|
+
DRIVER_DEVICE=11
|
|
79
|
+
DRIVER_FREEBSD=3
|
|
80
|
+
DRIVER_LINUX=4
|
|
81
|
+
DRIVER_NRG=10
|
|
82
|
+
DRIVER_OSX=6
|
|
83
|
+
DRIVER_SOLARIS=5
|
|
45
84
|
DRIVER_UNKNOWN=0
|
|
46
|
-
DRIVER_WIN32=
|
|
85
|
+
DRIVER_WIN32=7
|
|
47
86
|
TRACK_FORMAT_AUDIO=0
|
|
48
87
|
TRACK_FORMAT_CDI=1
|
|
49
88
|
TRACK_FORMAT_DATA=3
|
|
50
89
|
TRACK_FORMAT_ERROR=5
|
|
51
90
|
TRACK_FORMAT_PSX=4
|
|
52
91
|
TRACK_FORMAT_XA=2
|
|
53
|
-
# The number for the leadout track of a cd
|
|
54
|
-
CDIO_CDROM_LEADOUT_TRACK=170
|
|
55
92
|
# Returns all active devices (with a cd or dvd inside)
|
|
56
93
|
#
|
|
57
94
|
# CdIo.get_devices #=> ["/dev/cdrom"]
|
|
@@ -101,8 +138,26 @@ module CdIo
|
|
|
101
138
|
#
|
|
102
139
|
def CdIo.open(device=nil,driver=nil,&block)
|
|
103
140
|
end
|
|
141
|
+
module Exception
|
|
142
|
+
class Error < IoError
|
|
143
|
+
end
|
|
144
|
+
class Unsupported < IoError
|
|
145
|
+
end
|
|
146
|
+
class NotPermitted < IoError
|
|
147
|
+
end
|
|
148
|
+
class BadParameter < IoError
|
|
149
|
+
end
|
|
150
|
+
class BadPointer < IoError
|
|
151
|
+
end
|
|
152
|
+
class NoDriver < IoError
|
|
153
|
+
end
|
|
154
|
+
class CddbError < Exception
|
|
155
|
+
end
|
|
156
|
+
class CddbConn < IoError
|
|
157
|
+
end
|
|
158
|
+
end
|
|
104
159
|
class Cd
|
|
105
|
-
attr_reader :device, :mcn, :driver_name, :driver_id, :first_track_num, :disc_mode, :num_tracks, :
|
|
160
|
+
attr_reader :device, :mcn, :driver_name, :driver_id, :first_track_num, :disc_mode, :num_tracks, :last_lsn, :joliet_level
|
|
106
161
|
#
|
|
107
162
|
# Create a new Cd::CdIo object.
|
|
108
163
|
# The first argument is an String for a device or a cue/bin/toc/nrg file
|
|
@@ -144,6 +199,84 @@ module CdIo
|
|
|
144
199
|
def close
|
|
145
200
|
end
|
|
146
201
|
end
|
|
202
|
+
# module with extra methods to extends a normal Cd
|
|
203
|
+
module Cdda
|
|
204
|
+
# get the volume in an array.
|
|
205
|
+
#
|
|
206
|
+
# cd.volume
|
|
207
|
+
# ==> [255, 255, 0, 0]
|
|
208
|
+
def volume
|
|
209
|
+
end
|
|
210
|
+
# set the volume. You have to put an array
|
|
211
|
+
#
|
|
212
|
+
# cd.volume=[255,255,0,0]
|
|
213
|
+
def volume=(vol_set)
|
|
214
|
+
end
|
|
215
|
+
# play cd tracks. Returns an array with the first and the last track to play
|
|
216
|
+
# Ex.: cd with 11 tracks:
|
|
217
|
+
#
|
|
218
|
+
# cd.play
|
|
219
|
+
# ==> [1,11]
|
|
220
|
+
# cd.play(1)
|
|
221
|
+
# ==> [1,1]
|
|
222
|
+
# cd.play(2,20)
|
|
223
|
+
# ==> [2,11]
|
|
224
|
+
def play
|
|
225
|
+
end
|
|
226
|
+
# pause the reproduction of cd
|
|
227
|
+
def pause
|
|
228
|
+
end
|
|
229
|
+
# resume the reproduction of cd after a pause
|
|
230
|
+
def resume
|
|
231
|
+
end
|
|
232
|
+
# stop the reproduction of the cd
|
|
233
|
+
def stop
|
|
234
|
+
end
|
|
235
|
+
# get subchannel information of reproduction of the cd
|
|
236
|
+
#
|
|
237
|
+
# cd.subchannel
|
|
238
|
+
# ==> {"control"=>0, "rel_addr"=>"00:00:02", "abs_addr"=>"00:02:02", "format"=>212, "audio_status_desc"=>"no_status", "track"=>1, "audio_status"=>21, "index"=>1, "address"=>6}
|
|
239
|
+
def subchannel
|
|
240
|
+
end
|
|
241
|
+
# get the cddb key for the cd, in hex format
|
|
242
|
+
#
|
|
243
|
+
# cd.cddb_id
|
|
244
|
+
# ==> "9609630b"
|
|
245
|
+
def cddb_id
|
|
246
|
+
end
|
|
247
|
+
# get matches for cddb in an array.
|
|
248
|
+
# Requires <b>libcddb</b>
|
|
249
|
+
#
|
|
250
|
+
# cd.cddb_matches
|
|
251
|
+
# ==> [{"artist"=>"Seru Giran", "category"=>"rock", "title"=>"Peperina", "id"=>"2466865419", "length"=>"2403", "year"=>"0", "genre"=>"rock"}, {"artist"=>"Seru Giran", "category"=>"rock", "title"=>"Peperina", "id"=>"2517197579", "length"=>"2403", "year"=>"0", "genre"=>"rock"}]
|
|
252
|
+
def cddb_matches
|
|
253
|
+
end
|
|
254
|
+
# Get the match number x on cddb. Add information for the cd
|
|
255
|
+
# and the tracks
|
|
256
|
+
# Requires <b>libcddb</b>
|
|
257
|
+
#
|
|
258
|
+
# cd.cddb_fetch(1)
|
|
259
|
+
# ==> true
|
|
260
|
+
# t=cd.tracks[1]
|
|
261
|
+
# puts t.number.to_s+"-"+t.artist+"-"+t.title
|
|
262
|
+
# ==> 1-Seru Giran-Peperina
|
|
263
|
+
#
|
|
264
|
+
#
|
|
265
|
+
def cddb_fetch(match)
|
|
266
|
+
end
|
|
267
|
+
def artist
|
|
268
|
+
end
|
|
269
|
+
def title
|
|
270
|
+
end
|
|
271
|
+
def category
|
|
272
|
+
end
|
|
273
|
+
def genre
|
|
274
|
+
end
|
|
275
|
+
def length
|
|
276
|
+
end
|
|
277
|
+
def extra_data
|
|
278
|
+
end
|
|
279
|
+
end
|
|
147
280
|
# Provides access to the tracks of a CdIo::Cd object
|
|
148
281
|
class Tracks
|
|
149
282
|
# Returns a CdIo::Tracks object por a given CdIo::Cd
|
|
@@ -184,4 +317,12 @@ module CdIo
|
|
|
184
317
|
class TrackIso9660 < Track
|
|
185
318
|
attr_reader :system_id, :volume_id, :volumeset_id, :preparer_id, :publisher_id, :application_id
|
|
186
319
|
end
|
|
320
|
+
class TrackCdda < Track
|
|
321
|
+
def play
|
|
322
|
+
end
|
|
323
|
+
def artist
|
|
324
|
+
end
|
|
325
|
+
def title
|
|
326
|
+
end
|
|
327
|
+
end
|
|
187
328
|
end
|