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.
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
+ }