rb_cdio 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. data/ext/CdIo.c +132 -0
  2. data/ext/CdIo.h +108 -0
  3. data/ext/CdIo.o +0 -0
  4. data/ext/CdIo_Cd.c +345 -0
  5. data/ext/CdIo_Cd.o +0 -0
  6. data/ext/CdIo_Common.c +84 -0
  7. data/ext/CdIo_Common.o +0 -0
  8. data/ext/CdIo_Modulo.c +226 -0
  9. data/ext/CdIo_Modulo.o +0 -0
  10. data/ext/CdIo_Track.c +91 -0
  11. data/ext/CdIo_Track.o +0 -0
  12. data/ext/CdIo_TrackIso9660.c +78 -0
  13. data/ext/CdIo_TrackIso9660.o +0 -0
  14. data/ext/Makefile +127 -0
  15. data/ext/extconf.rb +4 -0
  16. data/ext/mkmf.log +26 -0
  17. data/lib/rb_cdio_read.rb +39 -0
  18. data/test/data/Makefile +677 -0
  19. data/test/data/Makefile.am +78 -0
  20. data/test/data/Makefile.in +677 -0
  21. data/test/data/bad-cat1.cue +9 -0
  22. data/test/data/bad-cat1.toc +8 -0
  23. data/test/data/bad-cat2.cue +9 -0
  24. data/test/data/bad-cat2.toc +8 -0
  25. data/test/data/bad-cat3.cue +9 -0
  26. data/test/data/bad-cat3.toc +8 -0
  27. data/test/data/bad-mode1.cue +7 -0
  28. data/test/data/bad-mode1.toc +5 -0
  29. data/test/data/bad-msf-1.cue +7 -0
  30. data/test/data/bad-msf-1.toc +6 -0
  31. data/test/data/bad-msf-2.cue +7 -0
  32. data/test/data/bad-msf-2.toc +6 -0
  33. data/test/data/bad-msf-3.cue +7 -0
  34. data/test/data/bad-msf-3.toc +6 -0
  35. data/test/data/cdda-read.right +148 -0
  36. data/test/data/cdda.bin +0 -0
  37. data/test/data/cdda.cue +6 -0
  38. data/test/data/cdda.right +44 -0
  39. data/test/data/cdda.toc +13 -0
  40. data/test/data/cdtext.toc +48 -0
  41. data/test/data/check_cd_read.sh +53 -0
  42. data/test/data/check_common_fn +186 -0
  43. data/test/data/check_common_fn.in +186 -0
  44. data/test/data/check_cue.sh +102 -0
  45. data/test/data/check_cue.sh.in +102 -0
  46. data/test/data/check_iso.sh +32 -0
  47. data/test/data/check_iso.sh.in +32 -0
  48. data/test/data/check_nrg.sh +68 -0
  49. data/test/data/check_nrg.sh.in +68 -0
  50. data/test/data/check_opts.sh +33 -0
  51. data/test/data/check_opts0.right +40 -0
  52. data/test/data/check_opts1.right +40 -0
  53. data/test/data/check_opts2.right +34 -0
  54. data/test/data/check_opts3.right +34 -0
  55. data/test/data/check_opts4.right +44 -0
  56. data/test/data/check_opts5.right +44 -0
  57. data/test/data/check_opts6.right +44 -0
  58. data/test/data/check_opts7.right +44 -0
  59. data/test/data/check_sizeof +117 -0
  60. data/test/data/check_sizeof.c +77 -0
  61. data/test/data/copying.iso +0 -0
  62. data/test/data/copying.right +10 -0
  63. data/test/data/data1.toc +8 -0
  64. data/test/data/data2.toc +13 -0
  65. data/test/data/data5.toc +13 -0
  66. data/test/data/data6.toc +8 -0
  67. data/test/data/data7.toc +13 -0
  68. data/test/data/isofs-m1-read.right +258 -0
  69. data/test/data/isofs-m1.bin +0 -0
  70. data/test/data/isofs-m1.cue +3 -0
  71. data/test/data/isofs-m1.right +57 -0
  72. data/test/data/isofs-m1.toc +4 -0
  73. data/test/data/t1.toc +5 -0
  74. data/test/data/t2.toc +6 -0
  75. data/test/data/t3.toc +11 -0
  76. data/test/data/t4.toc +8 -0
  77. data/test/data/t5.toc +8 -0
  78. data/test/data/t6.toc +7 -0
  79. data/test/data/t7.toc +12 -0
  80. data/test/data/t8.toc +14 -0
  81. data/test/data/t9.toc +31 -0
  82. data/test/data/testassert +117 -0
  83. data/test/data/testassert.c +36 -0
  84. data/test/data/testbincue +117 -0
  85. data/test/data/testbincue.c +88 -0
  86. data/test/data/testdefault +117 -0
  87. data/test/data/testdefault.c +196 -0
  88. data/test/data/testischar +117 -0
  89. data/test/data/testischar.c +71 -0
  90. data/test/data/testiso9660 +117 -0
  91. data/test/data/testiso9660.c +153 -0
  92. data/test/data/testtoc +117 -0
  93. data/test/data/testtoc.c +101 -0
  94. data/test/data/vcd_demo.right +116 -0
  95. data/test/data/videocd.nrg +0 -0
  96. data/test/data/videocd.right +92 -0
  97. data/test/testall.rb +4 -0
  98. data/test/testbincue.rb +30 -0
  99. data/test/testtoc.rb +45 -0
  100. metadata +141 -0
Binary file
@@ -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
+ }
Binary file
@@ -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
+
Binary file
@@ -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
+ }
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
+ }