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.
- data/AUTHORS +1 -0
- data/COPYING +340 -0
- data/ChangeLog +315 -0
- data/INSTALL +236 -0
- data/Makefile.am +163 -0
- data/Makefile.in +557 -0
- data/NEWS +5 -0
- data/README +75 -0
- data/Rakefile +234 -0
- data/THANKS +3 -0
- data/VERSION +1 -0
- data/VERSION.in +1 -0
- data/config.guess +1473 -0
- data/config.sub +1576 -0
- data/configure +4802 -0
- data/configure.ac +158 -0
- data/data/copying.iso +0 -0
- data/data/isofs-m1.bin +0 -0
- data/data/isofs-m1.cue +3 -0
- data/doc/created.rid +1 -0
- data/doc/fr_class_index.html +42 -0
- data/doc/fr_file_index.html +40 -0
- data/doc/fr_method_index.html +133 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/example/COPYING +340 -0
- data/example/README +47 -0
- data/example/audio.rb +186 -0
- data/example/cd-read.rb +167 -0
- data/example/copying +340 -0
- data/example/device.rb +91 -0
- data/example/drivers.rb +63 -0
- data/example/drives.rb +63 -0
- data/example/eject.rb +69 -0
- data/example/iso1.rb +89 -0
- data/example/iso2.rb +106 -0
- data/example/iso3.rb +111 -0
- data/example/tracks.rb +83 -0
- data/ext/cdio/Makefile +139 -0
- data/ext/cdio/extconf.rb +9 -0
- data/ext/cdio/rubycdio_wrap.c +3410 -0
- data/ext/iso9660/Makefile +139 -0
- data/ext/iso9660/extconf.rb +10 -0
- data/ext/iso9660/rubyiso9660_wrap.c +3005 -0
- data/install-sh +323 -0
- data/lib/Makefile +7 -0
- data/lib/cdio.rb +1000 -0
- data/lib/iso9660.rb +566 -0
- data/missing +360 -0
- data/rubycdio.m4 +14 -0
- data/swig/Makefile +7 -0
- data/swig/audio.swg +63 -0
- data/swig/compat.swg +104 -0
- data/swig/device.swg +513 -0
- data/swig/device_const.swg +144 -0
- data/swig/disc.swg +96 -0
- data/swig/read.swg +164 -0
- data/swig/rubycdio.swg +86 -0
- data/swig/rubyiso9660.swg +827 -0
- data/swig/track.swg +206 -0
- data/swig/types.swg +65 -0
- data/test/Makefile +7 -0
- data/test/Rakefile +8 -0
- data/test/cdda.bin +0 -0
- data/test/cdda.cue +7 -0
- data/test/cdda.toc +14 -0
- data/test/cdiotest.rb +228 -0
- data/test/isocopy.rb +394 -0
- data/test/isotest.rb +187 -0
- metadata +116 -0
data/example/drives.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# $Id: drives.rb,v 1.8 2006/12/16 14:29:06 rocky Exp $
|
3
|
+
#
|
4
|
+
# Program to read CD blocks. See read-cd from the libcdio distribution
|
5
|
+
# for a more complete program.
|
6
|
+
|
7
|
+
#
|
8
|
+
# Copyright (C) 2006 Rocky Bernstein <rocky@gnu.org>
|
9
|
+
#
|
10
|
+
# This program is free software; you can redistribute it and/or modify
|
11
|
+
# it under the terms of the GNU General Public License as published by
|
12
|
+
# the Free Software Foundation; either version 2 of the License, or
|
13
|
+
# (at your option) any later version.
|
14
|
+
#
|
15
|
+
# This program is distributed in the hope that it will be useful,
|
16
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
17
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
18
|
+
# GNU General Public License for more details.
|
19
|
+
#
|
20
|
+
# You should have received a copy of the GNU General Public License
|
21
|
+
# along with this program; if not, write to the Free Software
|
22
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
23
|
+
#
|
24
|
+
mypath = File.dirname(__FILE__)
|
25
|
+
if(File::exists?(mypath + "/../lib/cdio.rb"))
|
26
|
+
$: << File.dirname(__FILE__) + '/../lib'
|
27
|
+
$: << File.dirname(__FILE__) + '/../ext/cdio'
|
28
|
+
else
|
29
|
+
require 'rubygems'
|
30
|
+
require_gem "rbcdio"
|
31
|
+
end
|
32
|
+
require "cdio"
|
33
|
+
|
34
|
+
def print_drive_class(msg, bitmask, any)
|
35
|
+
cd_drives = Cdio::devices_with_cap(bitmask, any)
|
36
|
+
|
37
|
+
puts "%s..." % msg
|
38
|
+
for drive in cd_drives
|
39
|
+
puts "Drive %s" % drive
|
40
|
+
end
|
41
|
+
puts "-----"
|
42
|
+
end
|
43
|
+
|
44
|
+
cd_drives = Cdio::devices(Rubycdio::DRIVER_DEVICE)
|
45
|
+
if not cd_drives
|
46
|
+
puts "No CD-ROM drives found"
|
47
|
+
exit
|
48
|
+
end
|
49
|
+
for drive in cd_drives
|
50
|
+
puts "Drive %s" % drive
|
51
|
+
end
|
52
|
+
|
53
|
+
puts "-----"
|
54
|
+
|
55
|
+
print_drive_class("All CD-ROM drives (again)", Rubycdio::FS_MATCH_ALL, false);
|
56
|
+
print_drive_class("All CD-DA drives...", Rubycdio::FS_AUDIO, false);
|
57
|
+
print_drive_class("All drives with ISO 9660...", Rubycdio::FS_ISO_9660, false);
|
58
|
+
print_drive_class("VCD drives...",
|
59
|
+
(Rubycdio::FS_ANAL_SVCD|Rubycdio::FS_ANAL_CVD|
|
60
|
+
Rubycdio::FS_ANAL_VIDEOCD|Rubycdio::FS_UNKNOWN), true);
|
61
|
+
|
62
|
+
|
63
|
+
|
data/example/eject.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# $Id: eject.rb,v 1.10 2006/12/16 13:24:48 rocky Exp $
|
3
|
+
#
|
4
|
+
# A program to eject and close CD-ROM drive
|
5
|
+
|
6
|
+
# Copyright (C) 2006 Rocky Bernstein <rocky@gnu.org>
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU General Public License
|
19
|
+
# along with this program; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
21
|
+
#
|
22
|
+
mypath = File.dirname(__FILE__)
|
23
|
+
if(File::exists?(mypath + "/../lib/cdio.rb"))
|
24
|
+
$: << File.dirname(__FILE__) + '/../lib'
|
25
|
+
$: << File.dirname(__FILE__) + '/../ext/cdio'
|
26
|
+
else
|
27
|
+
require 'rubygems'
|
28
|
+
require_gem "rbcdio"
|
29
|
+
end
|
30
|
+
require "cdio"
|
31
|
+
|
32
|
+
if ARGV.length() > 0
|
33
|
+
begin
|
34
|
+
drive_name=@ARGV[1]
|
35
|
+
d = Cdio::Device.new(drive_name)
|
36
|
+
rescue IOError
|
37
|
+
print "Problem opening CD-ROM: %s" % drive_name
|
38
|
+
exit 1
|
39
|
+
end
|
40
|
+
else
|
41
|
+
begin
|
42
|
+
d = Cdio::Device.new(nil, Rubycdio::DRIVER_UNKNOWN)
|
43
|
+
drive_name = d.device()
|
44
|
+
rescue IOError
|
45
|
+
print "Problem finding a CD-ROM"
|
46
|
+
exit 1
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
begin
|
51
|
+
puts "Sending eject to drive %s" % drive_name
|
52
|
+
d.eject_media()
|
53
|
+
begin
|
54
|
+
puts "Closing CD in drive %s" % drive_name
|
55
|
+
Cdio::close_tray(drive_name)
|
56
|
+
puts "Closed tray of CD-ROM drive %s" % drive_name
|
57
|
+
rescue Cdio::DeviceException
|
58
|
+
puts "Closing tray of CD-ROM drive %s failed" % drive_name
|
59
|
+
end
|
60
|
+
|
61
|
+
rescue Cdio::DriverUnsupportedError
|
62
|
+
puts "Eject not supported for %s" % drive_name
|
63
|
+
rescue Cdio::DeviceException
|
64
|
+
puts "Eject of CD-ROM drive %s failed" % drive_name
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
|
data/example/iso1.rb
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# $Id: iso1.rb,v 1.9 2006/12/16 13:24:48 rocky Exp $
|
3
|
+
#
|
4
|
+
# A simple program to show using libiso9660 to list files in a directory of
|
5
|
+
# an ISO-9660 image.
|
6
|
+
#
|
7
|
+
# If a single argument is given, it is used as the ISO 9660 image to
|
8
|
+
# use in the listing. Otherwise a compiled-in default ISO 9660 image
|
9
|
+
# name (that comes with the libcdio distribution) will be used.
|
10
|
+
|
11
|
+
# Copyright (C) 2006 Rocky Bernstein <rocky@gnu.org>
|
12
|
+
#
|
13
|
+
# This program is free software; you can redistribute it and/or modify
|
14
|
+
# it under the terms of the GNU General Public License as published by
|
15
|
+
# the Free Software Foundation; either version 2 of the License, or
|
16
|
+
# (at your option) any later version.
|
17
|
+
#
|
18
|
+
# This program is distributed in the hope that it will be useful,
|
19
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21
|
+
# GNU General Public License for more details.
|
22
|
+
#
|
23
|
+
# You should have received a copy of the GNU General Public License
|
24
|
+
# along with this program; if not, write to the Free Software
|
25
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
26
|
+
|
27
|
+
mypath = File.dirname(__FILE__)
|
28
|
+
if(File::exists?(mypath + "/../lib/cdio.rb"))
|
29
|
+
$: << File.dirname(__FILE__) + '/../lib'
|
30
|
+
$: << File.dirname(__FILE__) + '/../ext/cdio'
|
31
|
+
$: << File.dirname(__FILE__) + '/../ext/iso9660'
|
32
|
+
else
|
33
|
+
require 'rubygems'
|
34
|
+
require_gem "rbcdio"
|
35
|
+
end
|
36
|
+
|
37
|
+
require "iso9660"
|
38
|
+
|
39
|
+
# The default ISO 9660 image if none given
|
40
|
+
ISO9660_IMAGE_PATH="../data"
|
41
|
+
ISO9660_IMAGE=ISO9660_IMAGE_PATH + "/copying.iso"
|
42
|
+
if ARGV.length() > 1
|
43
|
+
iso_image_fname = sys.argv[1]
|
44
|
+
else
|
45
|
+
iso_image_fname = ISO9660_IMAGE
|
46
|
+
end
|
47
|
+
|
48
|
+
iso = ISO9660::IFS.new(iso_image_fname)
|
49
|
+
|
50
|
+
if not iso.open?()
|
51
|
+
puts "Sorry, couldn't open %s as an ISO-9660 image." % iso_image_fname
|
52
|
+
exit(1)
|
53
|
+
end
|
54
|
+
|
55
|
+
path = '/'
|
56
|
+
|
57
|
+
file_stats = iso.readdir(path)
|
58
|
+
|
59
|
+
id_str = iso.application_id()
|
60
|
+
if id_str then puts "Application ID: %s" % id_str end
|
61
|
+
|
62
|
+
id_str = iso.preparer_id()
|
63
|
+
if id_str then puts "Preparer ID: %s" % id_str end
|
64
|
+
|
65
|
+
id_str = iso.publisher_id()
|
66
|
+
if id_str then puts "Publisher ID: %s" % id_str end
|
67
|
+
|
68
|
+
id_str = iso.system_id()
|
69
|
+
if id_str then puts "System ID: %s" % id_str end
|
70
|
+
|
71
|
+
id_str = iso.volume_id()
|
72
|
+
if id_str then puts "Volume ID: %s" % id_str end
|
73
|
+
|
74
|
+
id_str = iso.volumeset_id()
|
75
|
+
if id_str then puts "Volumeset ID: %s" % id_str end
|
76
|
+
|
77
|
+
for stat in file_stats
|
78
|
+
filename = stat["filename"]
|
79
|
+
lsn = stat["lsn"]
|
80
|
+
size = stat["size"]
|
81
|
+
sec_size = stat["secsize"]
|
82
|
+
is_dir = stat["type"] == 2 ? 'd' : '-'
|
83
|
+
puts "%s [LSN %6d] %8d %s%s" % [is_dir, lsn, size, path,
|
84
|
+
ISO9660.name_translate(filename)]
|
85
|
+
end
|
86
|
+
iso.close()
|
87
|
+
exit(0)
|
88
|
+
|
89
|
+
|
data/example/iso2.rb
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# $Id: iso2.rb,v 1.7 2006/12/16 03:44:48 rocky Exp $
|
3
|
+
# A program to show using iso9660 to extract a file
|
4
|
+
# from an ISO-9660 image.
|
5
|
+
#
|
6
|
+
# If a single argument is given, it is used as the ISO 9660 image to
|
7
|
+
# use in the extraction. Otherwise a compiled in default ISO 9660
|
8
|
+
# image name (that comes with the libcdio distribution) will be used.
|
9
|
+
|
10
|
+
# Copyright (C) 2006 Rocky Bernstein <rocky@gnu.org>
|
11
|
+
#
|
12
|
+
# This program is free software; you can redistribute it and/or modify
|
13
|
+
# it under the terms of the GNU General Public License as published by
|
14
|
+
# the Free Software Foundation; either version 2 of the License, or
|
15
|
+
# (at your option) any later version.
|
16
|
+
#
|
17
|
+
# This program is distributed in the hope that it will be useful,
|
18
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
19
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
20
|
+
# GNU General Public License for more details.
|
21
|
+
#
|
22
|
+
# You should have received a copy of the GNU General Public License
|
23
|
+
# along with this program; if not, write to the Free Software
|
24
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
25
|
+
|
26
|
+
mypath = File.dirname(__FILE__)
|
27
|
+
if(File::exists?(mypath + "/../lib/cdio.rb"))
|
28
|
+
$: << File.dirname(__FILE__) + '/../lib'
|
29
|
+
$: << File.dirname(__FILE__) + '/../ext/cdio'
|
30
|
+
$: << File.dirname(__FILE__) + '/../ext/iso9660'
|
31
|
+
else
|
32
|
+
require 'rubygems'
|
33
|
+
require_gem "rbcdio"
|
34
|
+
end
|
35
|
+
|
36
|
+
require "iso9660"
|
37
|
+
|
38
|
+
# The default CD image if none given
|
39
|
+
cd_image_path = "../data"
|
40
|
+
cd_image_fname = cd_image_path + "/isofs-m1.cue"
|
41
|
+
|
42
|
+
# File to extract if none given.
|
43
|
+
iso9660_path="/"
|
44
|
+
local_filename="COPYING"
|
45
|
+
|
46
|
+
if ARGV.length() > 1
|
47
|
+
cd_image_fname = ARGV[0]
|
48
|
+
if ARGV.length() > 2
|
49
|
+
local_filename = ARGV[1]
|
50
|
+
if ARGV.length() > 3
|
51
|
+
puts "\nusage: %s [CD-ROM-or-image [filename]]\nExtracts filename from CD-ROM-or-image." % $0
|
52
|
+
exit(1)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
begin
|
58
|
+
cd = ISO9660::FS::new(cd_image_fname)
|
59
|
+
rescue
|
60
|
+
puts "Sorry, couldn't open %s as a CD image." % cd_image_fname
|
61
|
+
exit(1)
|
62
|
+
end
|
63
|
+
|
64
|
+
statbuf = cd.stat(local_filename, false)
|
65
|
+
|
66
|
+
if not statbuf
|
67
|
+
puts "Could not get ISO-9660 file information for file %s in %s" %
|
68
|
+
[local_filename, cd_image_name]
|
69
|
+
cd.close()
|
70
|
+
exit(2)
|
71
|
+
end
|
72
|
+
|
73
|
+
o = open(local_filename, "w", 0664)
|
74
|
+
if not o
|
75
|
+
puts "Can't open %s for writing" % local_filename
|
76
|
+
end
|
77
|
+
|
78
|
+
# Copy the blocks from the ISO-9660 filesystem to the local filesystem.
|
79
|
+
blocks = (statbuf['size'].to_f / Rubycdio::ISO_BLOCKSIZE).ceil()
|
80
|
+
for i in 0 .. blocks - 1
|
81
|
+
lsn = statbuf['lsn'] + i
|
82
|
+
size, buf = cd.read_data_blocks(lsn)
|
83
|
+
|
84
|
+
if size < 0
|
85
|
+
puts "Error reading ISO 9660 file %s at LSN %d" % [
|
86
|
+
local_filename, lsn]
|
87
|
+
exit(4)
|
88
|
+
end
|
89
|
+
|
90
|
+
o.write(buf)
|
91
|
+
end
|
92
|
+
|
93
|
+
o.close()
|
94
|
+
|
95
|
+
# Make sure the file size has the exact same byte size. Without the
|
96
|
+
# truncate below, the file will a multiple of ISO_BLOCKSIZE.
|
97
|
+
|
98
|
+
f = File.new(local_filename, "r+")
|
99
|
+
f.truncate(statbuf['size'])
|
100
|
+
f.close()
|
101
|
+
|
102
|
+
puts "Extraction of file '%s' from %s successful." % [
|
103
|
+
local_filename, cd_image_fname]
|
104
|
+
|
105
|
+
cd.close()
|
106
|
+
exit(0)
|
data/example/iso3.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# $Id: iso3.rb,v 1.7 2006/12/16 13:24:48 rocky Exp $
|
3
|
+
#
|
4
|
+
# A program to show using ISO9660::IFS to extract a file
|
5
|
+
# from an ISO-9660 image.
|
6
|
+
#
|
7
|
+
# If a single argument is given, it is used as the ISO 9660 image to
|
8
|
+
# use in the extraction. Otherwise a compiled in default ISO 9660
|
9
|
+
# image name (that comes with the libcdio distribution) will be used.
|
10
|
+
|
11
|
+
# Copyright (C) 2006 Rocky Bernstein <rocky@cpan.org>
|
12
|
+
#
|
13
|
+
# This program is free software; you can redistribute it and/or modify
|
14
|
+
# it under the terms of the GNU General Public License as published by
|
15
|
+
# the Free Software Foundation; either version 2 of the License, or
|
16
|
+
# (at your option) any later version.
|
17
|
+
#
|
18
|
+
# This program is distributed in the hope that it will be useful,
|
19
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21
|
+
# GNU General Public License for more details.
|
22
|
+
#
|
23
|
+
# You should have received a copy of the GNU General Public License
|
24
|
+
# along with this program; if not, write to the Free Software
|
25
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
26
|
+
|
27
|
+
mypath = File.dirname(__FILE__)
|
28
|
+
if(File::exists?(mypath + "/../lib/cdio.rb"))
|
29
|
+
$: << File.dirname(__FILE__) + '/../lib'
|
30
|
+
$: << File.dirname(__FILE__) + '/../ext/cdio'
|
31
|
+
$: << File.dirname(__FILE__) + '/../ext/iso9660'
|
32
|
+
else
|
33
|
+
require 'rubygems'
|
34
|
+
require_gem "rbcdio"
|
35
|
+
end
|
36
|
+
|
37
|
+
require "iso9660"
|
38
|
+
|
39
|
+
# The default ISO 9660 image if none given
|
40
|
+
ISO9660_IMAGE_PATH="../data"
|
41
|
+
ISO9660_IMAGE=ISO9660_IMAGE_PATH + "/copying.iso"
|
42
|
+
|
43
|
+
# File to extract if none given.
|
44
|
+
local_filename="copying"
|
45
|
+
|
46
|
+
iso_image_fname = ISO9660_IMAGE
|
47
|
+
|
48
|
+
if ARGV.length() > 1
|
49
|
+
iso_image_fname = ARG[0]
|
50
|
+
if ARGV.length() > 2
|
51
|
+
local_filename = ARGV[1]
|
52
|
+
if ARGV.length() > 3
|
53
|
+
puts """
|
54
|
+
usage: %s [ISO9660-image.ISO [filename]]
|
55
|
+
Extracts filename from ISO9660-image.ISO.
|
56
|
+
""" % sys.argv[0]
|
57
|
+
exit(1)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
iso = ISO9660::IFS::new(iso_image_fname)
|
63
|
+
|
64
|
+
if not iso.open?():
|
65
|
+
puts "Sorry, couldn't open %s as an ISO-9660 image." % iso_image_fname
|
66
|
+
exit(1)
|
67
|
+
end
|
68
|
+
|
69
|
+
statbuf = iso.stat(local_filename, true)
|
70
|
+
|
71
|
+
if not statbuf:
|
72
|
+
puts "Could not get ISO-9660 file information for file %s" % local_filename
|
73
|
+
iso.close()
|
74
|
+
exit(2)
|
75
|
+
end
|
76
|
+
|
77
|
+
o = open(local_filename, "w", 0664)
|
78
|
+
if not o
|
79
|
+
puts "Can't open %s for writing" % local_filename
|
80
|
+
end
|
81
|
+
|
82
|
+
# Copy the blocks from the ISO-9660 filesystem to the local filesystem.
|
83
|
+
blocks = (statbuf['size'].to_f / Rubycdio::ISO_BLOCKSIZE).ceil()
|
84
|
+
|
85
|
+
for i in 0 .. blocks - 1
|
86
|
+
lsn = statbuf['lsn'] + i
|
87
|
+
size, buf = iso.seek_read(lsn)
|
88
|
+
|
89
|
+
if size <= 0
|
90
|
+
puts "Error reading ISO 9660 file %s at LSN %d" % [
|
91
|
+
local_filename, lsn]
|
92
|
+
exit(4)
|
93
|
+
end
|
94
|
+
|
95
|
+
o.write(buf)
|
96
|
+
end
|
97
|
+
|
98
|
+
o.close()
|
99
|
+
|
100
|
+
# Make sure the file size has the exact same byte size. Without the
|
101
|
+
# truncate below, the file will a multiple of ISO_BLOCKSIZE.
|
102
|
+
|
103
|
+
f = File.new(local_filename, "r+")
|
104
|
+
f.truncate(statbuf['size'])
|
105
|
+
f.close()
|
106
|
+
|
107
|
+
puts "Extraction of file '%s' from %s successful." % [
|
108
|
+
local_filename, iso_image_fname]
|
109
|
+
|
110
|
+
iso.close()
|
111
|
+
exit(0)
|
data/example/tracks.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# $Id: tracks.rb,v 1.10 2006/12/16 13:24:48 rocky Exp $
|
3
|
+
#
|
4
|
+
# A program to show CD information
|
5
|
+
|
6
|
+
# Copyright (C) 2006 Rocky Bernstein <rocky@gnu.org>
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU General Public License
|
19
|
+
# along with this program; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
21
|
+
#
|
22
|
+
mypath = File.dirname(__FILE__)
|
23
|
+
if(File::exists?(mypath + "/../lib/cdio.rb"))
|
24
|
+
$: << File.dirname(__FILE__) + '/../lib'
|
25
|
+
$: << File.dirname(__FILE__) + '/../ext/cdio'
|
26
|
+
else
|
27
|
+
require 'rubygems'
|
28
|
+
require_gem "rbcdio"
|
29
|
+
end
|
30
|
+
require "cdio"
|
31
|
+
|
32
|
+
if ARGV.length() > 0
|
33
|
+
begin
|
34
|
+
d = Cdio::Device.new(@ARGV[1])
|
35
|
+
rescue Cdio::IOError
|
36
|
+
puts "Problem opening CD-ROM: %s" % @ARGV[1]
|
37
|
+
exit(1)
|
38
|
+
end
|
39
|
+
else
|
40
|
+
begin
|
41
|
+
d = Cdio::Device.new("", Rubycdio::DRIVER_UNKNOWN)
|
42
|
+
rescue Cdio::IOError
|
43
|
+
puts "Problem finding a CD-ROM"
|
44
|
+
exit(1)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
t = d.first_track()
|
49
|
+
if not t
|
50
|
+
puts "Problem getting first track"
|
51
|
+
exit(2)
|
52
|
+
end
|
53
|
+
|
54
|
+
first_track = t.track
|
55
|
+
num_tracks = d.num_tracks()
|
56
|
+
last_track = first_track+num_tracks-1
|
57
|
+
|
58
|
+
begin
|
59
|
+
last_session = d.last_session()
|
60
|
+
puts "CD-ROM %s has %d track(s) and %d session(s)." %
|
61
|
+
[d.device(), d.num_tracks(), last_session]
|
62
|
+
rescue Cdio::DriverUnsupportedError:
|
63
|
+
puts "CD-ROM %s has %d track(s). " % [d.device(), d.num_tracks()]
|
64
|
+
end
|
65
|
+
|
66
|
+
puts "Track format is %s." % d.disc_mode()
|
67
|
+
|
68
|
+
mcn = d.mcn()
|
69
|
+
if mcn
|
70
|
+
puts "Media Catalog Number: %s" % mcn
|
71
|
+
end
|
72
|
+
|
73
|
+
puts "%3s: %-6s %s" % ["#", "LSN", "Format"]
|
74
|
+
for i in first_track .. last_track
|
75
|
+
begin
|
76
|
+
t = d.track(i)
|
77
|
+
puts "%3d: %06u %-6s %s" % [t.track, t.lsn(), t.msf(), t.format()]
|
78
|
+
rescue TrackError
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
puts "%3X: %06u leadout" % [Rubycdio::CDROM_LEADOUT_TRACK, d.disc_last_lsn()]
|
83
|
+
d.close()
|
data/ext/cdio/Makefile
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
|
2
|
+
SHELL = /bin/sh
|
3
|
+
|
4
|
+
#### Start of system configuration section. ####
|
5
|
+
|
6
|
+
srcdir = .
|
7
|
+
topdir = /usr/lib/ruby/1.8/i586-linux
|
8
|
+
hdrdir = $(topdir)
|
9
|
+
VPATH = $(srcdir):$(topdir):$(hdrdir)
|
10
|
+
prefix = $(DESTDIR)/usr
|
11
|
+
exec_prefix = $(DESTDIR)/usr
|
12
|
+
sitedir = $(libdir)/ruby/site_ruby
|
13
|
+
rubylibdir = $(libdir)/ruby/$(ruby_version)
|
14
|
+
archdir = $(rubylibdir)/$(arch)
|
15
|
+
sbindir = $(DESTDIR)/usr/sbin
|
16
|
+
datadir = $(DESTDIR)/usr/share
|
17
|
+
includedir = $(DESTDIR)/usr/include
|
18
|
+
infodir = $(DESTDIR)/usr/share/info
|
19
|
+
sysconfdir = $(DESTDIR)/etc
|
20
|
+
mandir = $(DESTDIR)/usr/share/man
|
21
|
+
libdir = $(DESTDIR)/usr/lib
|
22
|
+
sharedstatedir = $(DESTDIR)/usr/com
|
23
|
+
oldincludedir = $(DESTDIR)/usr/include
|
24
|
+
sitearchdir = $(sitelibdir)/$(sitearch)
|
25
|
+
bindir = $(DESTDIR)/usr/bin
|
26
|
+
localstatedir = $(DESTDIR)/var
|
27
|
+
sitelibdir = $(sitedir)/$(ruby_version)
|
28
|
+
libexecdir = $(DESTDIR)/usr/lib
|
29
|
+
|
30
|
+
CC = gcc
|
31
|
+
LIBRUBY = $(LIBRUBY_SO)
|
32
|
+
LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
|
33
|
+
LIBRUBYARG_SHARED = -Wl,-R -Wl,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)
|
34
|
+
LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
|
35
|
+
|
36
|
+
CFLAGS = -fPIC -O2 -march=i586 -mtune=i686 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -g -g -fno-strict-aliasing -fPIC
|
37
|
+
CPPFLAGS = -I. -I$(topdir) -I$(hdrdir) -I$(srcdir)
|
38
|
+
CXXFLAGS = $(CFLAGS)
|
39
|
+
DLDFLAGS =
|
40
|
+
LDSHARED = $(CC) -shared
|
41
|
+
AR = ar
|
42
|
+
EXEEXT =
|
43
|
+
|
44
|
+
RUBY_INSTALL_NAME = ruby
|
45
|
+
RUBY_SO_NAME = ruby
|
46
|
+
arch = i586-linux
|
47
|
+
sitearch = i586-linux
|
48
|
+
ruby_version = 1.8
|
49
|
+
ruby = /usr/bin/ruby
|
50
|
+
RUBY = $(ruby)
|
51
|
+
RM = rm -f
|
52
|
+
MAKEDIRS = mkdir -p
|
53
|
+
INSTALL = /usr/bin/install -c
|
54
|
+
INSTALL_PROG = $(INSTALL) -m 0755
|
55
|
+
INSTALL_DATA = $(INSTALL) -m 644
|
56
|
+
COPY = cp
|
57
|
+
|
58
|
+
#### End of system configuration section. ####
|
59
|
+
|
60
|
+
preload =
|
61
|
+
|
62
|
+
libpath = $(libdir)
|
63
|
+
LIBPATH = -L'$(libdir)' -Wl,-R'$(libdir)'
|
64
|
+
DEFFILE =
|
65
|
+
|
66
|
+
CLEANFILES =
|
67
|
+
DISTCLEANFILES =
|
68
|
+
|
69
|
+
extout =
|
70
|
+
extout_prefix =
|
71
|
+
target_prefix =
|
72
|
+
LOCAL_LIBS =
|
73
|
+
LIBS = $(LIBRUBYARG_SHARED) -lcdio -ldl -lcrypt -lm -lc
|
74
|
+
SRCS = rubycdio_wrap.c
|
75
|
+
OBJS = rubycdio_wrap.o
|
76
|
+
TARGET = rubycdio
|
77
|
+
DLLIB = $(TARGET).so
|
78
|
+
STATIC_LIB =
|
79
|
+
|
80
|
+
RUBYCOMMONDIR = $(sitedir)$(target_prefix)
|
81
|
+
RUBYLIBDIR = $(sitelibdir)$(target_prefix)
|
82
|
+
RUBYARCHDIR = $(sitearchdir)$(target_prefix)
|
83
|
+
|
84
|
+
TARGET_SO = $(DLLIB)
|
85
|
+
CLEANLIBS = $(TARGET).so $(TARGET).il? $(TARGET).tds $(TARGET).map
|
86
|
+
CLEANOBJS = *.o *.a *.s[ol] *.pdb *.exp *.bak
|
87
|
+
|
88
|
+
all: $(DLLIB)
|
89
|
+
static: $(STATIC_LIB)
|
90
|
+
|
91
|
+
clean:
|
92
|
+
@-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
|
93
|
+
|
94
|
+
distclean: clean
|
95
|
+
@-$(RM) Makefile extconf.h conftest.* mkmf.log
|
96
|
+
@-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
|
97
|
+
|
98
|
+
realclean: distclean
|
99
|
+
install: install-so install-rb
|
100
|
+
|
101
|
+
install-so: $(RUBYARCHDIR)
|
102
|
+
install-so: $(RUBYARCHDIR)/$(DLLIB)
|
103
|
+
$(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
|
104
|
+
$(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
|
105
|
+
install-rb: pre-install-rb install-rb-default
|
106
|
+
install-rb-default: pre-install-rb-default
|
107
|
+
pre-install-rb: Makefile
|
108
|
+
pre-install-rb-default: Makefile
|
109
|
+
$(RUBYARCHDIR):
|
110
|
+
$(MAKEDIRS) $@
|
111
|
+
|
112
|
+
site-install: site-install-so site-install-rb
|
113
|
+
site-install-so: install-so
|
114
|
+
site-install-rb: install-rb
|
115
|
+
|
116
|
+
.SUFFIXES: .c .m .cc .cxx .cpp .C .o
|
117
|
+
|
118
|
+
.cc.o:
|
119
|
+
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
|
120
|
+
|
121
|
+
.cxx.o:
|
122
|
+
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
|
123
|
+
|
124
|
+
.cpp.o:
|
125
|
+
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
|
126
|
+
|
127
|
+
.C.o:
|
128
|
+
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
|
129
|
+
|
130
|
+
.c.o:
|
131
|
+
$(CC) $(CFLAGS) $(CPPFLAGS) -c $<
|
132
|
+
|
133
|
+
$(DLLIB): $(OBJS)
|
134
|
+
@-$(RM) $@
|
135
|
+
$(LDSHARED) $(DLDFLAGS) $(LIBPATH) -o $@ $(OBJS) $(LOCAL_LIBS) $(LIBS)
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
$(OBJS): ruby.h defines.h
|
data/ext/cdio/extconf.rb
ADDED