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.
Files changed (154) hide show
  1. data/ChangeLog.txt +17 -2
  2. data/VERSION +1 -1
  3. data/doc/classes/CdIo.html +19 -31
  4. data/doc/classes/CdIo.src/M000001.html +1 -1
  5. data/doc/classes/CdIo.src/M000002.html +1 -1
  6. data/doc/classes/CdIo.src/M000003.html +1 -1
  7. data/doc/classes/CdIo.src/M000004.html +1 -1
  8. data/doc/classes/CdIo.src/M000005.html +1 -1
  9. data/doc/classes/CdIo.src/M000006.html +1 -1
  10. data/doc/classes/CdIo.src/M000007.html +1 -1
  11. data/doc/classes/CdIo.src/M000008.html +1 -1
  12. data/doc/classes/CdIo/Cd.html +51 -51
  13. data/doc/classes/CdIo/Cd.src/{M000011.html → M000020.html} +1 -1
  14. data/doc/classes/CdIo/Cd.src/M000021.html +3 -3
  15. data/doc/classes/CdIo/Cd.src/M000022.html +3 -3
  16. data/doc/classes/CdIo/Cd.src/M000023.html +3 -3
  17. data/doc/classes/CdIo/Cd.src/M000024.html +3 -3
  18. data/doc/classes/CdIo/Cd.src/M000025.html +3 -3
  19. data/doc/classes/CdIo/Cd.src/M000026.html +3 -3
  20. data/doc/classes/CdIo/Cd.src/M000027.html +3 -3
  21. data/doc/classes/CdIo/Cd.src/M000028.html +3 -3
  22. data/doc/classes/CdIo/Cd.src/M000029.html +3 -3
  23. data/doc/classes/CdIo/Cd.src/M000030.html +3 -3
  24. data/doc/classes/CdIo/Cd.src/M000031.html +3 -3
  25. data/doc/classes/CdIo/Cd.src/M000032.html +3 -3
  26. data/doc/classes/CdIo/Cd.src/M000033.html +3 -3
  27. data/doc/classes/CdIo/Cd.src/M000034.html +3 -3
  28. data/doc/classes/CdIo/Cd.src/M000035.html +3 -3
  29. data/doc/classes/CdIo/Cdda.html +428 -0
  30. data/doc/classes/CdIo/{Cd.src/M000016.html → Cdda.src/M000009.html} +3 -3
  31. data/doc/classes/CdIo/{Cd.src/M000013.html → Cdda.src/M000010.html} +3 -3
  32. data/doc/classes/CdIo/{Cd.src/M000036.html → Cdda.src/M000011.html} +3 -3
  33. data/doc/classes/CdIo/{Cd.src/M000014.html → Cdda.src/M000012.html} +3 -3
  34. data/doc/classes/CdIo/Cdda.src/M000013.html +17 -0
  35. data/doc/classes/CdIo/{Cd.src/M000019.html → Cdda.src/M000014.html} +3 -3
  36. data/doc/classes/CdIo/Cdda.src/M000015.html +17 -0
  37. data/doc/classes/CdIo/Cdda.src/M000016.html +17 -0
  38. data/doc/classes/CdIo/Cdda.src/M000017.html +17 -0
  39. data/doc/classes/CdIo/Cdda.src/M000018.html +17 -0
  40. data/doc/classes/CdIo/Cdda.src/M000019.html +17 -0
  41. data/doc/classes/CdIo/{Cd.src/M000015.html → Cdda.src/M000020.html} +3 -3
  42. data/doc/classes/CdIo/{Cd.src/M000017.html → Cdda.src/M000021.html} +3 -3
  43. data/doc/classes/CdIo/{Cd.src/M000018.html → Cdda.src/M000022.html} +3 -3
  44. data/doc/classes/CdIo/Cdda.src/M000023.html +17 -0
  45. data/doc/classes/CdIo/Cdda.src/M000024.html +17 -0
  46. data/doc/classes/CdIo/Exception.html +118 -0
  47. data/doc/classes/CdIo/Exception/BadParameter.html +111 -0
  48. data/doc/classes/CdIo/Exception/BadPointer.html +111 -0
  49. data/doc/classes/CdIo/{Device.html → Exception/CddbConn.html} +5 -5
  50. data/doc/classes/CdIo/Exception/CddbError.html +111 -0
  51. data/doc/classes/CdIo/{CdText.html → Exception/Error.html} +5 -5
  52. data/doc/{files/test/testall_rb.html → classes/CdIo/Exception/NoDriver.html} +26 -25
  53. data/doc/classes/CdIo/Exception/NotPermitted.html +111 -0
  54. data/doc/classes/CdIo/Exception/Unsupported.html +111 -0
  55. data/doc/classes/CdIo/Track.html +16 -16
  56. data/doc/classes/CdIo/Track.src/M000017.html +3 -3
  57. data/doc/classes/CdIo/Track.src/M000018.html +3 -3
  58. data/doc/classes/CdIo/Track.src/M000019.html +3 -3
  59. data/doc/classes/CdIo/Track.src/{M000009.html → M000025.html} +1 -1
  60. data/doc/classes/CdIo/Track.src/{M000010.html → M000026.html} +1 -1
  61. data/doc/classes/CdIo/Track.src/{M000011.html → M000027.html} +1 -1
  62. data/doc/classes/CdIo/TrackCdda.html +169 -0
  63. data/doc/classes/CdIo/TrackCdda.src/M000031.html +17 -0
  64. data/doc/classes/CdIo/TrackCdda.src/M000039.html +17 -0
  65. data/doc/classes/CdIo/TrackCdda.src/M000040.html +17 -0
  66. data/doc/classes/CdIo/TrackCdda.src/M000041.html +17 -0
  67. data/doc/classes/CdIo/Tracks.html +15 -15
  68. data/doc/classes/CdIo/Tracks.src/{M000020.html → M000028.html} +1 -1
  69. data/doc/classes/CdIo/Tracks.src/{M000021.html → M000029.html} +1 -1
  70. data/doc/classes/CdIo/Tracks.src/{M000022.html → M000030.html} +1 -1
  71. data/doc/classes/CdIo/{Cd.src/M000012.html → Tracks.src/M000036.html} +3 -3
  72. data/doc/classes/CdIo/Tracks.src/M000037.html +17 -0
  73. data/doc/classes/CdIo/Tracks.src/M000038.html +17 -0
  74. data/doc/created.rid +1 -1
  75. data/doc/files/__/rb_cdio_def_rb.html +235 -0
  76. data/doc/files/rb_cdio_def_rb.html +80 -5
  77. data/doc/fr_class_index.html +11 -0
  78. data/doc/fr_method_index.html +33 -14
  79. data/ext/CdIo.c +58 -3
  80. data/ext/CdIo.h +74 -1
  81. data/ext/CdIo_Cd.c +33 -80
  82. data/ext/CdIo_Cdda.c +607 -0
  83. data/ext/CdIo_Common.c +53 -8
  84. data/ext/CdIo_Modulo.c +12 -4
  85. data/ext/CdIo_Track.c +23 -35
  86. data/ext/CdIo_TrackCdda.c +13 -0
  87. data/ext/CdIo_TrackIso9660.c +1 -9
  88. data/ext/CdIo_Tracks.c +12 -2
  89. data/ext/extconf.rb +3 -0
  90. data/ext/mkmf.log +23 -0
  91. data/lib/rb_cdio_read.rb +23 -14
  92. data/rb_cdio.def.rb +157 -16
  93. data/test/data/bad-file.toc +13 -0
  94. data/test/data/cdda-read.right +3 -0
  95. data/test/data/cdda.cue +1 -0
  96. data/test/data/cdda.right +5 -28
  97. data/test/data/cdda.toc +2 -1
  98. data/test/data/check_common_fn +9 -9
  99. data/test/data/check_common_fn.in +9 -9
  100. data/test/data/check_cue.sh.in +35 -20
  101. data/test/data/check_iso.sh.in +23 -3
  102. data/test/data/check_nrg.sh.in +18 -16
  103. data/test/data/check_opts0.right +2 -24
  104. data/test/data/check_opts1.right +2 -24
  105. data/test/data/check_opts2.right +5 -27
  106. data/test/data/check_opts3.right +5 -27
  107. data/test/data/check_opts4.right +5 -27
  108. data/test/data/check_opts5.right +5 -27
  109. data/test/data/check_opts6.right +5 -27
  110. data/test/data/check_opts7.right +5 -27
  111. data/test/data/check_paranoia.sh.in +78 -0
  112. data/test/data/check_sizeof.c +5 -5
  113. data/test/data/copying-rr.iso +0 -0
  114. data/test/data/copying-rr.right +25 -0
  115. data/test/data/copying.right +3 -3
  116. data/test/data/data5.toc +3 -3
  117. data/test/data/data6.toc +2 -2
  118. data/test/data/data7.toc +3 -3
  119. data/test/data/isofs-m1-no-rr.right +33 -0
  120. data/test/data/isofs-m1-read.right +3 -0
  121. data/test/data/isofs-m1.right +12 -36
  122. data/test/data/joliet-nojoliet.right +23 -0
  123. data/test/data/joliet.iso +0 -0
  124. data/test/data/joliet.right +23 -0
  125. data/test/data/testbincue.c +19 -3
  126. data/test/data/testdefault.c +8 -2
  127. data/test/data/testiso9660.c +10 -5
  128. data/test/data/testparanoia.c +185 -0
  129. data/test/data/testtoc.c +18 -5
  130. data/test/data/vcd2.toc +23 -0
  131. data/test/data/vcd_demo.right +55 -79
  132. data/test/data/vcd_demo_vcdinfo.right +97 -0
  133. data/test/data/videocd.right +37 -61
  134. data/test/test_cdda.rb +73 -0
  135. data/test/testall.rb +1 -0
  136. data/test/testbincue.rb +6 -1
  137. data/test/testclose.rb +6 -1
  138. data/test/testmethods.rb +29 -21
  139. data/test/testtoc.rb +9 -2
  140. metadata +137 -80
  141. data/doc/classes/CdIo.src/M000009.html +0 -17
  142. data/doc/classes/CdIo.src/M000010.html +0 -17
  143. data/doc/classes/CdIo.src/M000011.html +0 -17
  144. data/doc/classes/CdIo.src/M000012.html +0 -17
  145. data/doc/classes/CdIo.src/M000013.html +0 -17
  146. data/doc/classes/CdIo.src/M000014.html +0 -17
  147. data/doc/classes/CdIo.src/M000015.html +0 -17
  148. data/doc/classes/CdIo.src/M000016.html +0 -17
  149. data/doc/classes/CdIo/Track.src/M000020.html +0 -17
  150. data/test/data/check_cd_read.sh +0 -53
  151. data/test/data/check_cue.sh +0 -102
  152. data/test/data/check_iso.sh +0 -32
  153. data/test/data/check_nrg.sh +0 -68
  154. data/test/data/check_opts.sh +0 -33
@@ -22,7 +22,18 @@
22
22
  <div id="index-entries">
23
23
  <a href="classes/CdIo.html">CdIo</a><br />
24
24
  <a href="classes/CdIo/Cd.html">CdIo::Cd</a><br />
25
+ <a href="classes/CdIo/Cdda.html">CdIo::Cdda</a><br />
26
+ <a href="classes/CdIo/Exception.html">CdIo::Exception</a><br />
27
+ <a href="classes/CdIo/Exception/BadParameter.html">CdIo::Exception::BadParameter</a><br />
28
+ <a href="classes/CdIo/Exception/BadPointer.html">CdIo::Exception::BadPointer</a><br />
29
+ <a href="classes/CdIo/Exception/CddbConn.html">CdIo::Exception::CddbConn</a><br />
30
+ <a href="classes/CdIo/Exception/CddbError.html">CdIo::Exception::CddbError</a><br />
31
+ <a href="classes/CdIo/Exception/Error.html">CdIo::Exception::Error</a><br />
32
+ <a href="classes/CdIo/Exception/NoDriver.html">CdIo::Exception::NoDriver</a><br />
33
+ <a href="classes/CdIo/Exception/NotPermitted.html">CdIo::Exception::NotPermitted</a><br />
34
+ <a href="classes/CdIo/Exception/Unsupported.html">CdIo::Exception::Unsupported</a><br />
25
35
  <a href="classes/CdIo/Track.html">CdIo::Track</a><br />
36
+ <a href="classes/CdIo/TrackCdda.html">CdIo::TrackCdda</a><br />
26
37
  <a href="classes/CdIo/TrackIso9660.html">CdIo::TrackIso9660</a><br />
27
38
  <a href="classes/CdIo/Tracks.html">CdIo::Tracks</a><br />
28
39
  </div>
@@ -20,28 +20,47 @@
20
20
  <div id="index">
21
21
  <h1 class="section-bar">Methods</h1>
22
22
  <div id="index-entries">
23
- <a href="classes/CdIo/Tracks.html#M000022">[] (CdIo::Tracks)</a><br />
24
- <a href="classes/CdIo/Cd.html#M000013">cdtext (CdIo::Cd)</a><br />
25
- <a href="classes/CdIo/Track.html#M000011">cdtext (CdIo::Track)</a><br />
26
- <a href="classes/CdIo/Cd.html#M000019">close (CdIo::Cd)</a><br />
23
+ <a href="classes/CdIo/Tracks.html#M000038">[] (CdIo::Tracks)</a><br />
24
+ <a href="classes/CdIo/Cdda.html#M000019">artist (CdIo::Cdda)</a><br />
25
+ <a href="classes/CdIo/TrackCdda.html#M000040">artist (CdIo::TrackCdda)</a><br />
26
+ <a href="classes/CdIo/Cdda.html#M000021">category (CdIo::Cdda)</a><br />
27
+ <a href="classes/CdIo/Cdda.html#M000018">cddb_fetch (CdIo::Cdda)</a><br />
28
+ <a href="classes/CdIo/Cdda.html#M000016">cddb_id (CdIo::Cdda)</a><br />
29
+ <a href="classes/CdIo/Cdda.html#M000017">cddb_matches (CdIo::Cdda)</a><br />
30
+ <a href="classes/CdIo/Track.html#M000027">cdtext (CdIo::Track)</a><br />
31
+ <a href="classes/CdIo/Cd.html#M000029">cdtext (CdIo::Cd)</a><br />
32
+ <a href="classes/CdIo/Cd.html#M000035">close (CdIo::Cd)</a><br />
27
33
  <a href="classes/CdIo.html#M000002">default_device (CdIo)</a><br />
28
34
  <a href="classes/CdIo.html#M000001">devices (CdIo)</a><br />
29
35
  <a href="classes/CdIo.html#M000005">discmode_describe (CdIo)</a><br />
30
- <a href="classes/CdIo/Cd.html#M000017">drive_cap (CdIo::Cd)</a><br />
36
+ <a href="classes/CdIo/Cd.html#M000033">drive_cap (CdIo::Cd)</a><br />
31
37
  <a href="classes/CdIo.html#M000003">drive_cap_dev (CdIo)</a><br />
32
38
  <a href="classes/CdIo.html#M000004">driver_describe (CdIo)</a><br />
33
- <a href="classes/CdIo/Tracks.html#M000021">each (CdIo::Tracks)</a><br />
34
- <a href="classes/CdIo/Track.html#M000010">green? (CdIo::Track)</a><br />
35
- <a href="classes/CdIo/Cd.html#M000018">hwinfo (CdIo::Cd)</a><br />
36
- <a href="classes/CdIo/Cd.html#M000015">is_cd? (CdIo::Cd)</a><br />
37
- <a href="classes/CdIo/Cd.html#M000016">is_dvd? (CdIo::Cd)</a><br />
38
- <a href="classes/CdIo/Tracks.html#M000020">new (CdIo::Tracks)</a><br />
39
- <a href="classes/CdIo/Track.html#M000009">new (CdIo::Track)</a><br />
40
- <a href="classes/CdIo/Cd.html#M000012">new (CdIo::Cd)</a><br />
39
+ <a href="classes/CdIo/Tracks.html#M000037">each (CdIo::Tracks)</a><br />
40
+ <a href="classes/CdIo/Cdda.html#M000024">extra_data (CdIo::Cdda)</a><br />
41
+ <a href="classes/CdIo/Cdda.html#M000022">genre (CdIo::Cdda)</a><br />
42
+ <a href="classes/CdIo/Track.html#M000026">green? (CdIo::Track)</a><br />
43
+ <a href="classes/CdIo/Cd.html#M000034">hwinfo (CdIo::Cd)</a><br />
44
+ <a href="classes/CdIo/Cd.html#M000031">is_cd? (CdIo::Cd)</a><br />
45
+ <a href="classes/CdIo/Cd.html#M000032">is_dvd? (CdIo::Cd)</a><br />
46
+ <a href="classes/CdIo/Cdda.html#M000023">length (CdIo::Cdda)</a><br />
47
+ <a href="classes/CdIo/Tracks.html#M000036">new (CdIo::Tracks)</a><br />
48
+ <a href="classes/CdIo/Track.html#M000025">new (CdIo::Track)</a><br />
49
+ <a href="classes/CdIo/Cd.html#M000028">new (CdIo::Cd)</a><br />
41
50
  <a href="classes/CdIo.html#M000008">open (CdIo)</a><br />
51
+ <a href="classes/CdIo/Cdda.html#M000012">pause (CdIo::Cdda)</a><br />
52
+ <a href="classes/CdIo/Cdda.html#M000011">play (CdIo::Cdda)</a><br />
53
+ <a href="classes/CdIo/TrackCdda.html#M000039">play (CdIo::TrackCdda)</a><br />
54
+ <a href="classes/CdIo/Cdda.html#M000013">resume (CdIo::Cdda)</a><br />
55
+ <a href="classes/CdIo/Cdda.html#M000014">stop (CdIo::Cdda)</a><br />
56
+ <a href="classes/CdIo/Cdda.html#M000015">subchannel (CdIo::Cdda)</a><br />
57
+ <a href="classes/CdIo/Cdda.html#M000020">title (CdIo::Cdda)</a><br />
58
+ <a href="classes/CdIo/TrackCdda.html#M000041">title (CdIo::TrackCdda)</a><br />
42
59
  <a href="classes/CdIo.html#M000006">track_format_describe (CdIo)</a><br />
43
60
  <a href="classes/CdIo.html#M000007">track_type_describe (CdIo)</a><br />
44
- <a href="classes/CdIo/Cd.html#M000014">tracks (CdIo::Cd)</a><br />
61
+ <a href="classes/CdIo/Cd.html#M000030">tracks (CdIo::Cd)</a><br />
62
+ <a href="classes/CdIo/Cdda.html#M000009">volume (CdIo::Cdda)</a><br />
63
+ <a href="classes/CdIo/Cdda.html#M000010">volume= (CdIo::Cdda)</a><br />
45
64
  </div>
46
65
  </div>
47
66
  </body>
data/ext/CdIo.c CHANGED
@@ -34,7 +34,7 @@ Init_rb_cdio()
34
34
  rb_define_module_function(mCdIo, "is_nrg", rb_cdio_is_nrg, 1);
35
35
  rb_define_module_function(mCdIo, "is_tocfile", rb_cdio_is_tocfile, 1);
36
36
  rb_define_module_function(mCdIo, "is_device", rb_cdio_is_device, -1);
37
-
37
+ rb_define_module_function(mCdIo, "close_tray", rb_cdio_close_tray, 1);
38
38
  /**
39
39
  * class CdIo::Cd
40
40
  */
@@ -45,7 +45,7 @@ Init_rb_cdio()
45
45
  #define CDIO_ATTR 9
46
46
  const char *attr[CDIO_ATTR] =
47
47
  { "device", "mcn", "driver_name", "driver_id", "first_track_num",
48
- "discmode", "num_tracks", "stat_size", "cddb_id"
48
+ "discmode", "num_tracks", "last_lsn", "joliet_level"
49
49
  };
50
50
  for (i = 0; i < CDIO_ATTR; i++) {
51
51
  rb_define_attr(cCdIoCd, attr[i], 1, 0);
@@ -63,6 +63,28 @@ Init_rb_cdio()
63
63
  rb_define_method(cCdIoCd, "drive_cap", rb_cdio_cd_get_drive_cap, 0);
64
64
  rb_define_method(cCdIoCd, "hwinfo", rb_cdio_cd_get_hwinfo, 0);
65
65
  rb_define_method(cCdIoCd, "close", rb_cdio_cd_close, 0);
66
+ rb_define_method(cCdIoCd, "eject", rb_cdio_cd_eject, 0);
67
+ // CdIo::CdDa module
68
+ mCdIoCdda = rb_define_module_under(mCdIo, "Cdda");
69
+ rb_define_method(mCdIoCdda, "volume", rb_cdio_cdda_get_volume, 0);
70
+ rb_define_method(mCdIoCdda, "volume=", rb_cdio_cdda_set_volume, 1);
71
+ rb_define_method(mCdIoCdda, "play", rb_cdio_cdda_play, -1);
72
+ rb_define_method(mCdIoCdda, "pause", rb_cdio_cdda_pause, 0);
73
+ rb_define_method(mCdIoCdda, "resume", rb_cdio_cdda_resume, 0);
74
+ rb_define_method(mCdIoCdda, "stop", rb_cdio_cdda_stop, 0);
75
+ rb_define_method(mCdIoCdda, "subchannel", rb_cdio_cdda_subchannel, 0);
76
+ rb_define_method(mCdIoCdda, "cddb_id", rb_cdio_cdda_cddb_id, 0);
77
+ rb_define_method(mCdIoCdda, "cddb_matches",rb_cdio_cdda_cddb_matches,0);
78
+ rb_define_method(mCdIoCdda, "cddb_fetch",rb_cdio_cdda_cddb_fetch,1);
79
+
80
+ rb_define_method(mCdIoCdda,"artist",rb_cdio_cdda_artist,0);
81
+ rb_define_method(mCdIoCdda,"title",rb_cdio_cdda_title,0);
82
+ rb_define_method(mCdIoCdda,"year",rb_cdio_cdda_year,0);
83
+ rb_define_method(mCdIoCdda,"length",rb_cdio_cdda_length,0);
84
+ rb_define_method(mCdIoCdda,"genre",rb_cdio_cdda_genre,0);
85
+ rb_define_method(mCdIoCdda,"category",rb_cdio_cdda_category,0);
86
+ rb_define_method(mCdIoCdda,"extra_data",rb_cdio_cdda_extra_data,0);
87
+
66
88
  /** class CdIo::Tracks */
67
89
  cCdIoTracks = rb_define_class_under(mCdIo, "Tracks", rb_cObject);
68
90
  rb_include_module(cCdIoTracks, rb_mEnumerable);
@@ -71,7 +93,6 @@ Init_rb_cdio()
71
93
  rb_define_method(cCdIoTracks, "<=>", rb_cdio_tracks_diff, 2);
72
94
  rb_define_method(cCdIoTracks, "[]", rb_cdio_tracks_index, 1);
73
95
  rb_define_attr(cCdIoTracks, "cd", 1, 0);
74
- rb_define_attr(cCdIoTracks, "tracks", 1, 0);
75
96
  /** class CdIo::Track */
76
97
  cCdIoTrack = rb_define_class_under(mCdIo, "Track", rb_cObject);
77
98
  rb_define_method(cCdIoTrack, "initialize", rb_cdio_track_init, 2);
@@ -99,6 +120,33 @@ Init_rb_cdio()
99
120
  }
100
121
  rb_define_method(cCdIoTrackIso9660, "initialize",
101
122
  rb_cdio_trackiso9660_init, 2);
123
+ // class CdIo::TrackCdda
124
+ cCdIoTrackCdda = rb_define_class_under(mCdIo, "TrackCdda", cCdIoTrack);
125
+ // rb_define_method(cCdIoTrackCdda, "initialize",
126
+ // rb_cdio_trackcdda_init, 2);
127
+ rb_define_method(cCdIoTrackCdda, "play", rb_cdio_trackcdda_play, 0);
128
+ rb_define_attr(cCdIoTrackCdda,"title",1,0);
129
+ rb_define_attr(cCdIoTrackCdda,"artist",1,0);
130
+ rb_define_attr(cCdIoTrackCdda,"extra_data",1,0);
131
+
132
+ // exceptions
133
+ mCdIoException = rb_define_module_under(mCdIo, "Exception");
134
+ eCdIoError =
135
+ rb_define_class_under(mCdIoException, "Error", rb_eIOError);
136
+ eCdIoUnsupported =
137
+ rb_define_class_under(mCdIoException, "Unsupported", rb_eIOError);
138
+ eCdIoUnitit =
139
+ rb_define_class_under(mCdIoException, "Unitit", rb_eIOError);
140
+ eCdIoNotPermitted =
141
+ rb_define_class_under(mCdIoException, "NotPermitted", rb_eIOError);
142
+ eCdIoBadParameter =
143
+ rb_define_class_under(mCdIoException, "BadParameter", rb_eIOError);
144
+ eCdIoBadPointer =
145
+ rb_define_class_under(mCdIoException, "BadPointer", rb_eNoMemError);
146
+ eCdIoNoDriver =
147
+ rb_define_class_under(mCdIoException, "NoDriver", rb_eIOError);
148
+ eCdIoCddbError = rb_define_class_under(mCdIoException, "CddbError",rb_eException);
149
+ eCdIoCddbConn = rb_define_class_under(mCdIoException, "CddbConn", rb_eIOError);
102
150
  // const for DRIVER
103
151
  rb_define_const(mCdIo, "DRIVER_UNKNOWN", INT2FIX(DRIVER_UNKNOWN));
104
152
  rb_define_const(mCdIo, "DRIVER_FREEBSD", INT2FIX(DRIVER_FREEBSD));
@@ -150,4 +198,11 @@ Init_rb_cdio()
150
198
  rb_define_const(mCdIo, "TRACK_FORMAT_ERROR", INT2FIX(TRACK_FORMAT_ERROR)); /**< Dunno what is, or some other error. */
151
199
  rb_define_const(mCdIo, "CDIO_CDROM_LEADOUT_TRACK",
152
200
  INT2FIX(CDIO_CDROM_LEADOUT_TRACK));
201
+ rb_define_const(mCdIoCdda,"SUB_ST_INVALID",INT2FIX(CDIO_MMC_READ_SUB_ST_INVALID));
202
+ rb_define_const(mCdIoCdda,"SUB_ST_PLAY",INT2FIX(CDIO_MMC_READ_SUB_ST_PLAY));
203
+ rb_define_const(mCdIoCdda,"SUB_ST_PAUSED",INT2FIX(CDIO_MMC_READ_SUB_ST_PAUSED));
204
+ rb_define_const(mCdIoCdda,"SUB_ST_COMPLETED",INT2FIX(CDIO_MMC_READ_SUB_ST_COMPLETED));
205
+ rb_define_const(mCdIoCdda,"SUB_ST_ERROR",INT2FIX(CDIO_MMC_READ_SUB_ST_ERROR));
206
+ rb_define_const(mCdIoCdda,"SUB_ST_NO_STATUS",INT2FIX(CDIO_MMC_READ_SUB_ST_NO_STATUS));
207
+
153
208
  }
data/ext/CdIo.h CHANGED
@@ -21,14 +21,42 @@
21
21
  #include <string.h>
22
22
  #include <cdio/iso9660.h>
23
23
  #include <cdio/cdtext.h>
24
+ #include <cdio/audio.h>
24
25
  #include <cdio/cd_types.h>
26
+ #include <cdio/mmc.h>
25
27
  #include <ruby.h>
26
28
 
29
+ // if we got cddb, include the library
30
+ #ifdef HAVE_CDDB_CDDB_H
31
+ #ifndef HAVE_CDDB
32
+ #define HAVE_CDDB 1
33
+ #endif
34
+ #include <cddb/cddb.h>
35
+ #endif
36
+
37
+ /** Test **/
38
+
39
+ #if LIBCDIO_VERSION_NUM < 73
40
+ #error rb_cdio 0.2.0 needs libcdio>=0.73
41
+ #endif
42
+
43
+
44
+ /** End tests **/
45
+
27
46
  #define GET_CDIO(self,p) \
28
47
  CdIo* p; \
29
48
  Data_Get_Struct(self, CdIo, p); \
30
49
  if(NULL==p) {rb_raise(rb_eException,"No pointer to CdIo");}
31
50
 
51
+ #define GET_TRACK(obj,p,t) \
52
+ CdIo* p; \
53
+ track_t t; \
54
+ Data_Get_Struct(rb_iv_get(obj, "@cd"), CdIo, p); \
55
+ if(NULL==p) {rb_raise(rb_eException,"No pointer to CdIo");} \
56
+ t=FIX2INT(rb_iv_get(obj,"@number"));
57
+
58
+ #define HASH_STR(hash,str1,str2) \
59
+ rb_hash_aset(hash,rb_str_new2(str1),rb_str_new2(str2));
32
60
 
33
61
  #undef CDIO_DRIVE_CAP_WRITE_DVD
34
62
  #define CDIO_DRIVE_CAP_WRITE_DVD ( \
@@ -39,11 +67,33 @@ if(NULL==p) {rb_raise(rb_eException,"No pointer to CdIo");}
39
67
  | CDIO_DRIVE_CAP_WRITE_DVD_RPW \
40
68
  )
41
69
 
70
+ // module CdIo
42
71
  VALUE mCdIo;
72
+ // class CdIo::Cd
43
73
  VALUE cCdIoCd;
74
+ // module CdIo::CdDa
75
+ VALUE mCdIoCdda;
76
+ // class CdIo::Track
44
77
  VALUE cCdIoTrack;
78
+ // class CdIo::TrackIso9660
45
79
  VALUE cCdIoTrackIso9660;
80
+ VALUE cCdIoTrackCdda;
81
+ // class CdIo::Tracks
46
82
  VALUE cCdIoTracks;
83
+ // module CdIo::Exception
84
+ VALUE mCdIoException;
85
+ // Exceptions
86
+ VALUE eCdIoError;
87
+ VALUE eCdIoUnsupported;
88
+ VALUE eCdIoUnitit;
89
+ VALUE eCdIoNotPermitted;
90
+ VALUE eCdIoBadParameter;
91
+ VALUE eCdIoBadPointer;
92
+ VALUE eCdIoNoDriver;
93
+ VALUE eCdIoCddbError;
94
+ VALUE eCdIoCddbConn;
95
+
96
+
47
97
  int Init_CdIo();
48
98
  // Metodos para el m�dulo CdIo
49
99
 
@@ -70,7 +120,7 @@ VALUE rb_cdio_is_cuefile(VALUE module, VALUE name);
70
120
  VALUE rb_cdio_is_nrg(VALUE module, VALUE name);
71
121
  VALUE rb_cdio_is_tocfile(VALUE module, VALUE name);
72
122
  VALUE rb_cdio_is_device(int argc, VALUE * argv, VALUE module);
73
-
123
+ VALUE rb_cdio_close_tray(VALUE module, VALUE name);
74
124
 
75
125
  /*
76
126
  * M�todos para clase CdIo::Cd
@@ -87,7 +137,28 @@ VALUE rb_cdio_cd_get_freedb(VALUE obj);
87
137
  VALUE rb_cdio_cd_get_drive_cap(VALUE obj);
88
138
  VALUE rb_cdio_cd_get_hwinfo(VALUE obj);
89
139
  VALUE rb_cdio_cd_close(VALUE obj);
140
+ VALUE rb_cdio_cd_eject(VALUE obj);
90
141
  VALUE rb_cdio_cd_get_cdtext(VALUE obj);
142
+ // module functions CdDa
143
+ VALUE rb_cdio_cdda_get_volume(VALUE obj);
144
+ VALUE rb_cdio_cdda_set_volume(VALUE obj,VALUE vol);
145
+ VALUE rb_cdio_cdda_play(int argc,VALUE* argv,VALUE obj);
146
+ VALUE rb_cdio_cdda_pause(VALUE obj);
147
+ VALUE rb_cdio_cdda_resume(VALUE obj);
148
+ VALUE rb_cdio_cdda_stop(VALUE obj);
149
+ VALUE rb_cdio_cdda_subchannel(VALUE obj);
150
+ VALUE rb_cdio_cdda_cddb_id(VALUE obj);
151
+ VALUE rb_cdio_cdda_cddb(VALUE obj);
152
+ VALUE rb_cdio_cdda_cddb_matches(VALUE obj);
153
+ VALUE rb_cdio_cdda_cddb_fetch(VALUE obj,VALUE match);
154
+
155
+ VALUE rb_cdio_cdda_category(VALUE obj);
156
+ VALUE rb_cdio_cdda_title(VALUE obj);
157
+ VALUE rb_cdio_cdda_artist(VALUE obj);
158
+ VALUE rb_cdio_cdda_year(VALUE obj);
159
+ VALUE rb_cdio_cdda_genre(VALUE obj);
160
+ VALUE rb_cdio_cdda_length(VALUE obj);
161
+ VALUE rb_cdio_cdda_extra_data(VALUE obj);
91
162
  /**
92
163
  * M�todos para la clase CdIo::Tracks
93
164
  */
@@ -107,6 +178,8 @@ VALUE rb_cdio_track_get_cdtext(VALUE obj);
107
178
  /* TrackIso9660*/
108
179
 
109
180
  VALUE rb_cdio_trackiso9660_init(VALUE obj, VALUE oCd, VALUE i_track);
181
+ /* TrackCdda */
182
+ VALUE rb_cdio_trackcdda_play(VALUE obj);
110
183
  /*
111
184
  * M�todos comunes
112
185
  */
@@ -27,59 +27,6 @@ _cdio_cd_destroy(void *p)
27
27
  }
28
28
 
29
29
 
30
-
31
-
32
-
33
-
34
- /**
35
- * CDDB
36
- * Extraido desde cd-info.
37
- **/
38
-
39
- static int
40
- cddb_dec_digit_sum(int n)
41
- {
42
- int ret = 0;
43
-
44
- for (;;) {
45
- ret += n % 10;
46
- n = n / 10;
47
- if (!n)
48
- return ret;
49
- }
50
- }
51
-
52
- /*
53
- * Return the number of seconds (discarding frame portion) of an MSF
54
- */
55
- static inline unsigned int
56
- msf_seconds(msf_t * msf)
57
- {
58
- return from_bcd8(msf->m) * 60 + from_bcd8(msf->s);
59
- }
60
-
61
- static unsigned long
62
- cddb_discid(CdIo * p_cdio, int i_tracks)
63
- {
64
- int i,
65
- t,
66
- n = 0;
67
- msf_t start_msf;
68
- msf_t msf;
69
-
70
- for (i = 1; i <= i_tracks; i++) {
71
- cdio_get_track_msf(p_cdio, i, &msf);
72
- n += cddb_dec_digit_sum(msf_seconds(&msf));
73
- }
74
-
75
- cdio_get_track_msf(p_cdio, 1, &start_msf);
76
- cdio_get_track_msf(p_cdio, CDIO_CDROM_LEADOUT_TRACK, &msf);
77
-
78
- t = msf_seconds(&msf) - msf_seconds(&start_msf);
79
-
80
- return ((n % 0xff) << 24 | t << 8 | i_tracks);
81
- }
82
-
83
30
  /**
84
31
  Create a new Cd::CdIo object.
85
32
  The first argument is an String for a device or a cue/bin/toc/nrg file
@@ -117,7 +64,8 @@ rb_cdio_cd_new(int argc, VALUE * argv, VALUE class)
117
64
  p_cdio = cdio_open(device, driver);
118
65
 
119
66
  if (p_cdio == NULL) {
120
- rb_raise(rb_eException, "I can't create a pointer");
67
+ rb_raise(eCdIoError,
68
+ "I can't create the object. Please, verify the media");
121
69
  return Qnil;
122
70
  } else {
123
71
  VALUE c_argv[2];
@@ -169,13 +117,16 @@ rb_cdio_cd_init(VALUE self, VALUE device, VALUE driver)
169
117
  }
170
118
  }
171
119
  // stat_size
172
- rb_iv_set(self, "@stat_size", INT2NUM(cdio_stat_size(p_cdio)));
173
- // si es un disco de audio, calculo su cddb
120
+ rb_iv_set(self, "@last_lsn", INT2NUM(cdio_get_disc_last_lsn(p_cdio)));
121
+ rb_iv_set(self, "@joliet_level",
122
+ INT2NUM(cdio_get_joliet_level(p_cdio)));
123
+
124
+ // si es un disco de audio, lo extiendo con las funciones
125
+ // del m�dulo Cdda
174
126
  if (CDIO_DISC_MODE_CD_DA == discmode) {
175
- char cddb[8];
176
- sprintf(cddb, "%08lx", cddb_discid(p_cdio, nt));
177
- rb_iv_set(self, "@cddb_id", rb_str_new2(cddb));
127
+ rb_extend_object(self, mCdIoCdda);
178
128
  }
129
+
179
130
  return self;
180
131
  }
181
132
 
@@ -186,24 +137,14 @@ rb_cdio_cd_init(VALUE self, VALUE device, VALUE driver)
186
137
  VALUE
187
138
  rb_cdio_cd_get_tracks(VALUE self)
188
139
  {
189
- VALUE argv[1];
190
- argv[0] = self;
191
- return rb_class_new_instance(1, argv, cCdIoTracks);
192
- VALUE aTracks;
193
- aTracks = rb_ary_new();
194
- GET_CDIO(self, p_cdio);
195
- track_t first_track_num;
196
- track_t num_tracks;
197
- first_track_num = cdio_get_first_track_num(p_cdio);
198
- num_tracks = cdio_get_num_tracks(p_cdio);
199
- // printf("C->Primera pista: %d\n",first_track_num);
200
- // printf("C->Numero pistas: %d\n",num_tracks);
201
- int j,
202
- i = first_track_num;
203
- for (j = 0; j < num_tracks; i++, j++) {
204
- rb_ary_push(aTracks, get_track(self, i));
140
+ VALUE tracks = rb_iv_get(self, "@tracks");
141
+ if (tracks == Qnil) {
142
+ VALUE argv[1];
143
+ argv[0] = self;
144
+ tracks = rb_class_new_instance(1, argv, cCdIoTracks);
145
+ rb_iv_set(self, "@tracks", tracks);
205
146
  }
206
- return aTracks;
147
+ return tracks;
207
148
  }
208
149
 
209
150
  /**
@@ -233,7 +174,8 @@ VALUE
233
174
  rb_cdio_cd_is_cd(VALUE obj)
234
175
  {
235
176
  GET_CDIO(obj, p_cdio);
236
- return (discmode_is_cd(cdio_get_discmode(p_cdio))) ? Qtrue : Qfalse;
177
+ return (cdio_is_discmode_cdrom(cdio_get_discmode(p_cdio))) ? Qtrue :
178
+ Qfalse;
237
179
  }
238
180
 
239
181
  /**
@@ -243,10 +185,11 @@ VALUE
243
185
  rb_cdio_cd_is_dvd(VALUE obj)
244
186
  {
245
187
  GET_CDIO(obj, p_cdio);
246
- return (discmode_is_dvd(cdio_get_discmode(p_cdio))) ? Qtrue : Qfalse;
188
+ return (cdio_is_discmode_dvd(cdio_get_discmode(p_cdio))) ? Qtrue :
189
+ Qfalse;
247
190
  }
248
191
 
249
- static VALUE
192
+ static VALUE
250
193
  _get_freedb(VALUE obj)
251
194
  {
252
195
  rb_require("freedb");
@@ -256,7 +199,7 @@ _get_freedb(VALUE obj)
256
199
  rb_iv_get(obj, "@device"));
257
200
  }
258
201
 
259
- static VALUE
202
+ static VALUE
260
203
  _get_freedb_error(VALUE obj, VALUE error_info)
261
204
  {
262
205
  rb_raise(rb_eLoadError,
@@ -326,3 +269,13 @@ rb_cdio_cd_get_cdtext(VALUE obj)
326
269
  const cdtext_t *cdtext = cdio_get_cdtext(p_cdio, 0);
327
270
  return get_cdtext(cdtext);
328
271
  }
272
+
273
+ VALUE
274
+ rb_cdio_cd_eject(VALUE obj)
275
+ {
276
+ GET_CDIO(obj, p_cdio);
277
+ verify_return_code(cdio_eject_media(&p_cdio));
278
+ rb_gc_start();
279
+ obj = Qnil;
280
+ return Qtrue;
281
+ }