rbcdio 0.01
Sign up to get free protection for your applications and to get access to all the features.
- 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