rb_cdio 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/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
|
+
}
|