rbcdio 0.01

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 (70) hide show
  1. data/AUTHORS +1 -0
  2. data/COPYING +340 -0
  3. data/ChangeLog +315 -0
  4. data/INSTALL +236 -0
  5. data/Makefile.am +163 -0
  6. data/Makefile.in +557 -0
  7. data/NEWS +5 -0
  8. data/README +75 -0
  9. data/Rakefile +234 -0
  10. data/THANKS +3 -0
  11. data/VERSION +1 -0
  12. data/VERSION.in +1 -0
  13. data/config.guess +1473 -0
  14. data/config.sub +1576 -0
  15. data/configure +4802 -0
  16. data/configure.ac +158 -0
  17. data/data/copying.iso +0 -0
  18. data/data/isofs-m1.bin +0 -0
  19. data/data/isofs-m1.cue +3 -0
  20. data/doc/created.rid +1 -0
  21. data/doc/fr_class_index.html +42 -0
  22. data/doc/fr_file_index.html +40 -0
  23. data/doc/fr_method_index.html +133 -0
  24. data/doc/index.html +24 -0
  25. data/doc/rdoc-style.css +208 -0
  26. data/example/COPYING +340 -0
  27. data/example/README +47 -0
  28. data/example/audio.rb +186 -0
  29. data/example/cd-read.rb +167 -0
  30. data/example/copying +340 -0
  31. data/example/device.rb +91 -0
  32. data/example/drivers.rb +63 -0
  33. data/example/drives.rb +63 -0
  34. data/example/eject.rb +69 -0
  35. data/example/iso1.rb +89 -0
  36. data/example/iso2.rb +106 -0
  37. data/example/iso3.rb +111 -0
  38. data/example/tracks.rb +83 -0
  39. data/ext/cdio/Makefile +139 -0
  40. data/ext/cdio/extconf.rb +9 -0
  41. data/ext/cdio/rubycdio_wrap.c +3410 -0
  42. data/ext/iso9660/Makefile +139 -0
  43. data/ext/iso9660/extconf.rb +10 -0
  44. data/ext/iso9660/rubyiso9660_wrap.c +3005 -0
  45. data/install-sh +323 -0
  46. data/lib/Makefile +7 -0
  47. data/lib/cdio.rb +1000 -0
  48. data/lib/iso9660.rb +566 -0
  49. data/missing +360 -0
  50. data/rubycdio.m4 +14 -0
  51. data/swig/Makefile +7 -0
  52. data/swig/audio.swg +63 -0
  53. data/swig/compat.swg +104 -0
  54. data/swig/device.swg +513 -0
  55. data/swig/device_const.swg +144 -0
  56. data/swig/disc.swg +96 -0
  57. data/swig/read.swg +164 -0
  58. data/swig/rubycdio.swg +86 -0
  59. data/swig/rubyiso9660.swg +827 -0
  60. data/swig/track.swg +206 -0
  61. data/swig/types.swg +65 -0
  62. data/test/Makefile +7 -0
  63. data/test/Rakefile +8 -0
  64. data/test/cdda.bin +0 -0
  65. data/test/cdda.cue +7 -0
  66. data/test/cdda.toc +14 -0
  67. data/test/cdiotest.rb +228 -0
  68. data/test/isocopy.rb +394 -0
  69. data/test/isotest.rb +187 -0
  70. metadata +116 -0
data/swig/disc.swg ADDED
@@ -0,0 +1,96 @@
1
+ /* -*- c -*-
2
+ $Id: disc.swg,v 1.1.1.1 2006/11/13 05:13:33 rocky Exp $
3
+
4
+ Copyright (C) 2006 Rocky Bernstein <rocky@cpan.org>
5
+
6
+ This program is free software; you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation; either version 2 of the License, or
9
+ (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with this program; if not, write to the Free Software
18
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
+ */
20
+ /* See <cdio/device.h> for more extensive documentation. */
21
+
22
+ %constant long int DISC_MODE_CD_DA = CDIO_DISC_MODE_CD_DA;
23
+ %constant long int DISC_MODE_CD_DATA = CDIO_DISC_MODE_CD_DATA;
24
+ %constant long int DISC_MODE_CD_XA = CDIO_DISC_MODE_CD_XA;
25
+ %constant long int DISC_MODE_CD_MIXED = CDIO_DISC_MODE_CD_MIXED;
26
+ %constant long int DISC_MODE_DVD_ROM = CDIO_DISC_MODE_DVD_ROM;
27
+ %constant long int DISC_MODE_DVD_RAM = CDIO_DISC_MODE_DVD_RAM;
28
+ %constant long int DISC_MODE_DVD_R = CDIO_DISC_MODE_DVD_R;
29
+ %constant long int DISC_MODE_DVD_RW = CDIO_DISC_MODE_DVD_RW;
30
+ %constant long int DISC_MODE_DVD_PR = CDIO_DISC_MODE_DVD_PR;
31
+ %constant long int DISC_MODE_DVD_PRW = CDIO_DISC_MODE_DVD_PRW;
32
+ %constant long int DISC_MODE_DVD_OTHER = CDIO_DISC_MODE_DVD_OTHER;
33
+ %constant long int DISC_MODE_NO_INFO = CDIO_DISC_MODE_NO_INFO;
34
+ %constant long int DISC_MODE_ERROR = CDIO_DISC_MODE_ERROR;
35
+ %constant long int DISC_MODE_CD_I = CDIO_DISC_MODE_CD_I;
36
+
37
+ %rename cdio_get_disc_last_lsn get_disc_last_lsn;
38
+ %feature("autodoc",
39
+ "get_disc_last_lsn(cdio)->lsn
40
+ Get the LSN of the end of the CD.
41
+
42
+ perlcdio.INVALID_LSN is returned on error.");
43
+ lsn_t cdio_get_disc_last_lsn(const CdIo_t *p_cdio);
44
+
45
+
46
+ %feature("autodoc",
47
+ "get_disc_mode(p_cdio) -> str
48
+
49
+ Get disc mode - the kind of CD (CD-DA, CD-ROM mode 1, CD-MIXED, etc.
50
+ that we've got. The notion of 'CD' is extended a little to include
51
+ DVD's.");
52
+ const char *get_disc_mode (CdIo_t *p_cdio);
53
+
54
+ %rename cdio_get_joliet_level get_joliet_level;
55
+ %feature("autodoc",
56
+ "get_joliet_level(cdio)->int
57
+
58
+ Return the Joliet level recognized for cdio.
59
+ This only makes sense for something that has an ISO-9660
60
+ filesystem.");
61
+ int cdio_get_joliet_level(const CdIo_t *p_cdio);
62
+
63
+ /*!
64
+ Get the media catalog number (MCN) from the CD.
65
+
66
+ @return the media catalog number or NULL if there is none or we
67
+ don't have the ability to get it.
68
+
69
+ Note: string is malloc'd so caller has to free() the returned
70
+ string when done with it.
71
+
72
+ */
73
+ %rename cdio_get_mcn get_mcn;
74
+ %newobject cdio_get_mcn; // free malloc'd return value
75
+ char * cdio_get_mcn (const CdIo_t *p_cdio);
76
+
77
+ %rename cdio_get_num_tracks get_num_tracks;
78
+ %feature("autodoc",
79
+ "get_num_tracks(p_cdio)->int
80
+
81
+ Return the number of tracks on the CD.
82
+ On error rubycdio::INVALID_TRACK is returned.");
83
+ track_t cdio_get_num_tracks (const CdIo_t *p_cdio);
84
+
85
+ /*========================INLINE======================================*/
86
+
87
+ %inline %{
88
+ const char *
89
+ get_disc_mode (CdIo_t *p_cdio)
90
+ {
91
+ discmode_t discmode = cdio_get_discmode(p_cdio);
92
+ if (CDIO_DISC_MODE_ERROR == discmode) return NULL;
93
+ return discmode2str[discmode];
94
+ }
95
+
96
+ %}
data/swig/read.swg ADDED
@@ -0,0 +1,164 @@
1
+ /* -*- c -*-
2
+ $Id: read.swg,v 1.4 2006/11/29 01:43:28 rocky Exp $
3
+
4
+ Copyright (C) 2006 Rocky Bernstein <rocky@gnu.org>
5
+
6
+ This program is free software; you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation; either version 2 of the License, or
9
+ (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with this program; if not, write to the Free Software
18
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19
+ 02110-1301 USA.
20
+ */
21
+ /* See <cdio/read.h> for more extensive documentation. */
22
+
23
+ %constant long int READ_MODE_AUDIO = CDIO_READ_MODE_AUDIO;
24
+ %constant long int READ_MODE_M1F1 = CDIO_READ_MODE_M1F1;
25
+ %constant long int READ_MODE_M1F2 = CDIO_READ_MODE_M1F2;
26
+ %constant long int READ_MODE_M2F1 = CDIO_READ_MODE_M2F1;
27
+ %constant long int READ_MODE_M2F2 = CDIO_READ_MODE_M2F2;
28
+
29
+ %inline %{
30
+ typedef struct {
31
+ char *data;
32
+ size_t size;
33
+ driver_return_code_t drc;
34
+ } Buf_triple_t;
35
+ %}
36
+
37
+ %rename cdio_lseek lseek;
38
+ off_t cdio_lseek(const CdIo_t *p_cdio, off_t offset, int whence=SEEK_SET);
39
+
40
+ %typemap(out) Buf_triple_t
41
+ {
42
+ if (!$1.data)
43
+ return Qnil;
44
+ else {
45
+ VALUE data_triple = rb_ary_new();
46
+ rb_ary_push(data_triple, rb_str_new($1.data, $1.size));
47
+ rb_ary_push(data_triple, INT2NUM($1.size));
48
+ rb_ary_push(data_triple, INT2NUM($1.drc));
49
+ free($1.data);
50
+ return data_triple;
51
+ }
52
+
53
+ }
54
+
55
+ Buf_triple_t read_cd(const CdIo_t *p_cdio, size_t i_size);
56
+
57
+ %inline %{
58
+ Buf_triple_t read_cd(const CdIo_t *p_cdio, size_t i_size)
59
+ {
60
+ Buf_triple_t buf;
61
+ buf.data = calloc(1, i_size);
62
+ buf.size = cdio_read(p_cdio, buf.data, i_size);
63
+ if (buf.size == -1) {
64
+ free(buf.data);
65
+ buf.drc = DRIVER_OP_ERROR;
66
+ buf.data = NULL;
67
+ }
68
+ return buf;
69
+ }
70
+ %}
71
+
72
+ /* NOTE: arg 4 *must* be the size of the buf for the buf_t typemap. */
73
+ Buf_triple_t read_sectors(const CdIo_t *p_cdio, lsn_t i_lsn,
74
+ cdio_read_mode_t read_mode, size_t i_size);
75
+ %inline %{
76
+ /* NOTE: arg 4 *must* be the size of the buf for the buf_t typemap. */
77
+ Buf_triple_t
78
+ read_sectors(const CdIo_t *p_cdio, lsn_t i_lsn, cdio_read_mode_t read_mode,
79
+ size_t i_size)
80
+ {
81
+ Buf_triple_t buf;
82
+ uint32_t i_blocks;
83
+ uint16_t i_blocksize;
84
+ switch (read_mode) {
85
+ case CDIO_READ_MODE_AUDIO:
86
+ i_blocksize = CDIO_CD_FRAMESIZE_RAW;
87
+ break;
88
+ case CDIO_READ_MODE_M1F1:
89
+ i_blocksize = M2RAW_SECTOR_SIZE;
90
+ break;
91
+ case CDIO_READ_MODE_M1F2:
92
+ i_blocksize = M2RAW_SECTOR_SIZE;
93
+ break;
94
+ case CDIO_READ_MODE_M2F1:
95
+ i_blocksize = CDIO_CD_FRAMESIZE;
96
+ break;
97
+ case CDIO_READ_MODE_M2F2:
98
+ i_blocksize = M2F2_SECTOR_SIZE;
99
+ break;
100
+ default:
101
+ buf.data = NULL;
102
+ buf.drc = DRIVER_OP_BAD_PARAMETER;
103
+ buf.size = -1;
104
+ return buf;
105
+ }
106
+ buf.data = calloc(1, i_size);
107
+ i_blocks = i_size / i_blocksize;
108
+ buf.drc = cdio_read_sectors(p_cdio, buf.data, i_lsn, read_mode, i_blocks);
109
+ if (buf.drc < 0) {
110
+ free(buf.data);
111
+ buf.data = NULL;
112
+ buf.size = -1;
113
+ } else {
114
+ buf.size = i_size;
115
+ }
116
+ return buf;
117
+
118
+ }
119
+ %}
120
+
121
+ Buf_triple_t
122
+ read_data_bytes(const CdIo_t *p_cdio, lsn_t i_lsn, int16_t i_blocksize,
123
+ size_t i_size);
124
+ %inline %{
125
+ Buf_triple_t
126
+ read_data_bytes(const CdIo_t *p_cdio, lsn_t i_lsn, int16_t i_blocksize,
127
+ size_t i_size)
128
+ {
129
+ uint32_t i_blocks = i_size / i_blocksize;
130
+ Buf_triple_t buf;
131
+
132
+ switch (i_blocksize) {
133
+ case CDIO_CD_FRAMESIZE:
134
+ case CDIO_CD_FRAMESIZE_RAW:
135
+ case M2F2_SECTOR_SIZE:
136
+ case M2RAW_SECTOR_SIZE:
137
+ break;
138
+ default:
139
+ /* Don't know about these block sizes */
140
+ buf.data = NULL;
141
+ buf.drc = DRIVER_OP_BAD_PARAMETER;
142
+ buf.size = -1;
143
+ return buf;
144
+ }
145
+ buf.data = calloc(1, i_size);
146
+
147
+ #if DEBUGGING
148
+ printf("p_cdio: %x, i_size: %d, lsn: %d, blocksize %d, blocks %d\n",
149
+ p_cdio, i_size, i_lsn, i_blocksize, i_blocks);
150
+ #endif
151
+ buf.drc = cdio_read_data_sectors (p_cdio, buf.data, i_lsn,
152
+ i_blocksize, i_blocks);
153
+ #if DEBUGGING
154
+ printf("drc: %d\n", buf.drc);
155
+ #endif
156
+ if (buf.drc < 0) {
157
+ buf.data = NULL;
158
+ buf.size = -1;
159
+ } else {
160
+ buf.size = i_size;
161
+ }
162
+ return buf;
163
+ }
164
+ %}
data/swig/rubycdio.swg ADDED
@@ -0,0 +1,86 @@
1
+ /* -*- c -*-
2
+ $Id: rubycdio.swg,v 1.2 2006/11/13 21:44:31 rocky Exp $
3
+
4
+ Copyright (C) 2006 Rocky Bernstein <rocky@panix.com>
5
+
6
+ This program is free software; you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation; either version 2 of the License, or
9
+ (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with this program; if not, write to the Free Software
18
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19
+ 02110-1301 USA.
20
+ */
21
+ %define DOCSTRING
22
+ "This is a wrapper for The CD Input and Control library (libcdio) which
23
+ encapsulates CD-ROM reading and control. Python programs wishing to be
24
+ oblivious of the OS- and device-dependent properties of a CD-ROM can
25
+ use this library."
26
+ %enddef
27
+ %module(docstring=DOCSTRING) rubycdio
28
+ %{
29
+ /* Includes the header in the wrapper code */
30
+ #include <cdio/cdio.h>
31
+ #include <cdio/audio.h>
32
+ #include <cdio/cd_types.h>
33
+ %}
34
+
35
+ #include <cdio/cdio.h>
36
+ #include <cdio/audio.h>
37
+
38
+ %include "compat.swg"
39
+
40
+ %include "typemaps.i"
41
+
42
+ /* Various libcdio constants and typedefs */
43
+ %include "types.swg"
44
+
45
+ %feature("autodoc", 1);
46
+
47
+ %include "audio.swg"
48
+ %include "read.swg"
49
+ %include "track.swg"
50
+
51
+ /* In the presence of the exception handling, the order is important.
52
+ The below use %exception.
53
+ */
54
+ %include "device.swg"
55
+ %include "disc.swg"
56
+
57
+ /* Encapsulation is done in two parts. The lower-level python
58
+ interface is called rubycdio and is generated by SWIG.
59
+
60
+ The more object-oriented module is cdio; it is a Python class that
61
+ uses rubycdio. Although rubycdio is perfectly usable on its own, it is
62
+ expected that cdio is what most people will use. As rubycdio more
63
+ closely models the C interface, it is conceivable (if unlikely) that
64
+ diehard libcdio C users who are very familiar with that interface
65
+ could prefer that.
66
+
67
+ It is probably possible to change the SWIG in such a way to combine
68
+ these pieces. However there are the problems. First, I'm not that much
69
+ of a SWIG expert. Second it looks as though the resulting SWIG code
70
+ would be more complex. Third the separation makes translation very
71
+ straight forward to understand and maintain: first get what's in C
72
+ into Python as a one-to-one translation. Then we implement some nice
73
+ abstraction off of that. The abstraction can be modified without
74
+ having to redo the underlying translation. (But the reverse is
75
+ generally not true: usually changes to the C-to-python translation,
76
+ rubycdio, do result in small, but obvious and straightforward changes to
77
+ the abstraction layer cdio.)
78
+ */
79
+ #define INCLUDE_CLASS 0
80
+ #if INCLUDE_CLASS
81
+ /* In spite of the above, if we were to do things as a one-step approach,
82
+ this might be how it would be done. */
83
+ %rubycode %{
84
+ %include "cdio.rb"
85
+ %}
86
+ #endif