Device-Cdio-v2.0.0000755001750001750 013222226273 13414 5ustar00rockyrocky000000000000Device-Cdio-v2.0.0/SIGNATURE000644001750001750 1243713222226273 15066 0ustar00rockyrocky000000000000This file contains message digests of all files listed in MANIFEST, signed via the Module::Signature module, version 0.79. To verify the content in this distribution, first make sure you have Module::Signature installed, then type: % cpansign -v It will check each file's integrity, as well as the signature's validity. If "==> Signature verified OK! <==" is not displayed, the distribution may already have been compromised, and you should not run its Makefile.PL or Build.PL. -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 SHA1 9a1f2ab199a0673cd8d0306eecd30ab97d2265b5 Build.PL SHA1 8624bcdae55baeef00cd11d5dfcfa60f68710a02 COPYING SHA1 ea0ea929fe417e076ea3c498aa86cc094543c1dc ChangeLog SHA1 21af337f76cdfd5bd0df07c9aa007673db720d19 Changes SHA1 4e1d0209dcf3f33004676902775e878089cc2d5d GNUmakefile SHA1 977c846e7958465faf794f6f8f5fcbf0a3b7fd8e MANIFEST SHA1 933d2b826fbc341eb409fd90411fb5824f240477 META.json SHA1 db2002114a72867398306371cce84da25ef6e0cb META.yml SHA1 e10ed8927490a767418c222be43af8413f091acc Makefile.PL SHA1 3ae10a40184e53d7d0ad2ff8762d77704e26ae4c README.md SHA1 bf8876342e9c23cb2edd2791a5c25f236de63e1c THANKS SHA1 0914ae01ba4db9a0662a58204dd91b6c59400506 configure SHA1 19b4049870fd9b6306778d8fd3fbdcc51f169c55 data/cdda.bin SHA1 4d48af2fbdb4a0c1601da469a1676757a3c31155 data/cdda.cue SHA1 8a4b2a0c48b67e109899b783e63fc1b424bdc6cc data/cdda.toc SHA1 346beddcbe1499a2c3152e2794a34b3f03330596 data/cdtext-test.toc SHA1 6a1f3e36afbea8037c7d2419ef6e815dc19d5e7d data/cdtext.cdt SHA1 c807ef36a3836f32e93f82ea28ee2d109e92c426 data/copying.iso SHA1 70b651d67810fdeb96e015f829aa20469c3309a5 data/isofs-m1.bin SHA1 8cb48199b6e90bdc7b97d9d7215c82247d2b1ec0 data/isofs-m1.cue SHA1 8b60afe90ea7b98bf1eccf6e14046d89dc5c64c9 examples/.gitignore SHA1 9fb285486e930b739ebae64eeedeb42e67bbb1e8 examples/README SHA1 f6b6d441850c5ab1922bb169d1ec8275c14a51ad examples/audio.pl SHA1 cde423159ef4ae5f69d50320bd082d593c196a16 examples/cd-read.pl SHA1 b32034f8928ce7e35839d2d49da0fdae722c5a64 examples/cdchange.pl SHA1 1b7e55ceeb1fbbb3e806dc98c058652b13a32574 examples/cdtext-raw.pl SHA1 0d0edda0599a7ed29cf5582b5f66a3b09ff4cfe8 examples/cdtext.pl SHA1 846314cbb63211abeb0688ab6d8564df4cc6eec6 examples/checkcd.pl SHA1 4039472251e2a05da71e32bdefeafea1c90efd96 examples/device.pl SHA1 85b8db4d1ce7868dd98e1ce96420ad8080e00a00 examples/drives.pl SHA1 27377943d982eb15ad385a01056becd7847cd140 examples/eject.pl SHA1 dfa4ad302fb9478811b997a407eb57af4e94478d examples/iso0.pl SHA1 7ff21532b1a1fff551c3c854f45df02b006c8772 examples/iso1.pl SHA1 5ae951fbffd8e4f207b3e743b41e55dbad80bc43 examples/iso2.pl SHA1 054b80cd74769dcc5abdb0425b91385376d82a91 examples/iso3.pl SHA1 11a3786020d6ed46a4bee7cb944e181d82388a52 examples/tracks.pl SHA1 90af7aeff2b18e30b1d2024622a20238a2bdae86 lib/Device/Cdio.pm SHA1 5160887f061cb9d2446f20b7221aab9c0f4e3fd4 lib/Device/Cdio/Device.pm SHA1 59660b6db81e7b306ebe7d7cd23f2ba049494dee lib/Device/Cdio/ISO9660.pm SHA1 9df90acad20086f3f8c6cd5962b1b6863d04cc80 lib/Device/Cdio/ISO9660/FS.pm SHA1 c358737cda8ac7d7f70c5c03456b455481f12c01 lib/Device/Cdio/ISO9660/IFS.pm SHA1 155cca9c9ceaff21d20864a77c8c87d8ead3c6a9 lib/Device/Cdio/Track.pm SHA1 1e127d321eacff1d11351fa5ad0ba48c37dc2149 lib/Device/Cdio/Util.pm SHA1 829a67f1e2a7319c98eb1ab61f285558bd4ec5b8 lib/perlcdio.pm SHA1 41b00ba4731f36f3cd8f1becd44d1b9fe0825ffd lib/perliso9660.pm SHA1 eea41467d68b0cccd35dc5ea6261cebd63fdde0a lib/perlmmc.pm SHA1 28d013d459d08948eb3041613d5bc83c46053785 perlcdio_wrap.c SHA1 499b4d1182c08d48c3e1e8ee2f0c5969a3f70796 perliso9660_wrap.c SHA1 4ba894a5683ea3b22a86149dd34936d6885e04be perlmmc_wrap.c SHA1 026db667631e5c92621cdd717e93c8b053d4736e swig/audio.swg SHA1 ba9abeaaf37888031e7a5997f010b010ffebd97d swig/cdtext.swg SHA1 12dc444c2391f1384a9e48b047a78ff831f7d275 swig/device.swg SHA1 fee0ba184fb7f1c7f5a15c4443ee7ccff1fbaa2c swig/device_const.swg SHA1 5ebcc414317ca38383a0b9008416dea0e049cec8 swig/disc.swg SHA1 53f63607569d1c2456567b2e8d80d3b730ee0444 swig/perlcdio.swg SHA1 96f5a56c5656cf86eec6952e8a0dcbd40bf3f564 swig/perliso9660.swg SHA1 aa841afa223dc9c345e4e8cf1fa94f9e27135ec6 swig/perlmmc.swg SHA1 36c11ca632fa0de5a4dc6c29ca31e6d479c8a1bc swig/read.swg SHA1 8f2314f0b0b5048e5057d95b24e3b2daf5854780 swig/track.swg SHA1 c50d9bf6bf4e388f346a7e1d15fc708c4491a570 swig/types.swg SHA1 9b89e57d5444e67638ad1477e6db059c823d08a4 t/00.load.t SHA1 30e79551031400b0d9662dd8e908f26682b72258 t/01.pod-coverage.t SHA1 e3629617f384b836b1b1687bad1f4d051b81796f t/01.pod.t SHA1 a1cff6d52e0db8fb235d2389826ebca91d3db5cc t/02.default.t SHA1 f6cf6674884b08c9e33bf8f5a320431afa7ebb92 t/05.ops.t SHA1 b2dde692beb72ff0cc78b7337914b7b6dfef2623 t/06.bincue.t SHA1 0c0df039155f1b8d9f2b34f3ac4c3e83c5364cfb t/06.image.t SHA1 e6d4db764bc9b6b4610c7b4fd829c186fdd28970 t/06.toc.t SHA1 db3d8bc149e7768de4f8ea483708b3bf2c9e1236 t/07.iso.t SHA1 17a7b118e28439e5ed37c6915c31ec4bfcc45307 t/07.iso1.t SHA1 30c51e5f69e4934bd54cbfc903a985c29368e3bf t/07.iso2.t SHA1 50276658d97517cec082e86304ab9be4d18753b0 t/07.iso3.t SHA1 eb0106af77ec82afab9448312cfb1cb617c70070 t/10.cdda.t SHA1 ef53580f6f19c99eeb0c9336a2df2cc06599e6e2 t/10.cdtext.t SHA1 45533382456d1c0e61afd853d7ecb6205eb16b62 t/10.read.t SHA1 0fc01e8d5b215274c213e48f589a188a70367dd0 t/11.dev.t -----BEGIN PGP SIGNATURE----- iEYEARECAAYFAlpJLLcACgkQGo3lAIJ17CHOvQCfQMm58rVwg063z0jkzEk1gvJp QxwAn3uMF5SQ2rYcENQ0YJGIiz5rWeyT =xD+S -----END PGP SIGNATURE----- Device-Cdio-v2.0.0/Build.PL000555001750001750 2537113222226267 15103 0ustar00rockyrocky000000000000#!/usr/bin/env perl # Copyright (C) 2006, 2008, 2011-2012, 2014, 2017 # Rocky Bernstein # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . use strict; use warnings; use Module::Build; use ExtUtils::PkgConfig; use Config; use File::Copy; my %libcdio_pkgcfg = ExtUtils::PkgConfig->find ('libcdio'); use constant MIN_LIBCDIO_VERSION => 1.1; my $lv = $libcdio_pkgcfg{'modversion'}; if (exists($libcdio_pkgcfg{'modversion'})) { $libcdio_pkgcfg{'modversion'} =~ m{\A((?:\d+)(?:\.\d+))}; my $libcdio_version = $1; if (defined($libcdio_version)) { if ($libcdio_version < MIN_LIBCDIO_VERSION) { printf STDERR " *** *** You need to have libcdio %s or greater installed. (You have $lv). *** Get libcdio from http://www.gnu.org/software/libcdio/download.html ", MIN_LIBCDIO_VERSION; die "OS unsupported - or maybe it is. This message is here to appease testing services like CPANTS that look for messages like this"; } else { print "Good, I found libcdio version $lv installed.\n"; } } else { print STDERR " *** *** Can't parse libcdio version $lv. "; exit 1; } } else { print STDERR " *** *** Can't find libcdio configuration info. Is libcdio installed? *** Get libcdio from http://www.gnu.org/software/libcdio/download.html "; die "OS unsupported - or maybe it is. This message is here to appease testing services like CPANTS that look for messages like this"; } my $class = Module::Build->subclass( class => 'MyModuleBuild', code => q! use File::Basename; use Data::Dumper; sub process_swig_files { my $self = shift; my $verb = $self->runtime_params('verbose'); $verb = 0 if $self->runtime_params('quiet'); #my @p = @_; print "process swig files\n" if $verb; my $swigdeps = $self->config('swig_source'); my @swig_flags = $self->split_like_shell($self->config('swig_flags')); my @swigsource = keys %$swigdeps; my $lib = 'lib'; #my $blib_lib = File::Spec->catfile('blib', 'lib'); foreach my $file (@swigsource) { #FIXME add dir $self->config('swig_files') my $basename = basename($file, '.swg'); my $cfile = $basename."_wrap.c"; my $pmfile = File::Spec->catfile($lib,"$basename.pm"); if ($self->up_to_date($swigdeps->{$file}, $cfile) && $self->up_to_date($swigdeps->{$file}, $pmfile)) { next if $self->up_to_date($file, $cfile) && $self->up_to_date($cfile, $pmfile); } print "swig: $file -> $cfile\n" if $verb; $self->do_system('swig', '-o', $cfile, '-perl', '-outdir', $lib, @swig_flags, $file); $self->copy_if_modified(from => $pmfile, to_dir => 'blib'); } return 1; } sub process_c_files { my $self = shift; my $verb = $self->runtime_params('verbose'); $verb = 0 if $self->runtime_params('quiet'); #my @p = @_; print "process c files\n" if $verb; my $cfiles = $self->rscan_dir('./',qr/\.c$/); # if none return #set $self->quiet() for CBuilder->new $self->quiet($verb?0:1); my $cb = $self->cbuilder(); # get a ExtUtils::CBuilder object print " CBuilder: ",$cb->VERSION,"\n" if $verb; #setenv TMPDIR for cc ?? foreach my $file (@$cfiles) { my $basename = basename($file, '_wrap.c'); $basename = basename($file, '.c') if not defined $basename; my $libname = $basename.".".$self->config('dlext'); $libname = File::Spec->catfile('blib', 'arch',$libname); next if $self->up_to_date($file,$libname); print "(CC) $file -> $basename.so\n" if $verb; my $obj = $cb->compile(source => $file, ## include_dirs => $self->config('include_dirs'), extra_compiler_flags => $self->config('extra_compiler_flags')); print "CB compiled: $obj\n" if $verb; my $lib = $cb->link(objects => $obj, extra_linker_flags => $self->config('extra_linker_flags')); print "CB generated: $lib\n" if $verb; $self->copy_if_modified(from => $lib, to => $libname); } return 1; } !); # my $builder = $class->new( module_name => 'Device::Cdio', add_to_cleanup => [ 'Device-Cdio-*', 'tmp*', 'cover_db'], configure_requires => { 'Module::Build' => 0.38 }, create_makefile_pl => 'small', dist_abstract => 'Perl bindings for CD Input and control library (libcdio)', dist_author => 'Rocky Bernstein ', dist_version_from => 'lib/Device/Cdio.pm', license => 'gpl', needs_compiler => 1, release_status => 'stable', # or 'testing' which will append TRIAL to tarball meta_merge => { resources => { bugtracker => 'https://github.com/rocky/Perl-Device-Cdio/issues', repository => 'http://github.com/rocky/Perl-Device-Cdio' } }, requires => { 'ExtUtils::PkgConfig' => '1.03', 'Test::More' => 0, 'version' => 0, 'ExtUtils::CBuilder' => '0.28', }, sign => 1); $builder->config(swig_files => './'); $builder->config(swig_source => { # with dependencies as hash value 'swig/perlcdio.swg' => ['swig/audio.swg', 'swig/device.swg', 'swig/disc.swg', 'swig/device_const.swg', 'swig/disc.swg', 'swig/read.swg', 'swig/track.swg', 'swig/types.swg'], 'swig/perliso9660.swg' => ['swig/types.swg'], 'swig/perlmmc.swg', => ['swig/types.swg']} ); if($builder->have_c_compiler()) { $builder->notes('c_compiler' => 1); print "C compiler found - check swig\n" if $builder->config('verbose'); if(!$builder->config('obj_ext')) { $builder->config('obj_ext','.o'); } if(!$builder->config('dlext')) { $builder->config('dlext','so'); } my $swig_installed = check_swig( verbose => $builder->config('verbose')); $builder->notes(swig_installed => $swig_installed); my ($ccflags, $ldflags,$swig_flags) = check_c_compiler( $builder->config('cc'), $builder->config('ccflags')); $builder->config(extra_linker_flags => $ldflags); $builder->config(extra_compiler_flags => $ccflags); if($swig_installed) { $builder->config(swig_flags => $swig_flags); $builder->add_build_element('swig'); $builder->add_to_cleanup('lib/perl*.pm','*.c'); } $builder->add_build_element('c'); $builder->add_to_cleanup('*.o','*.so','tmp*',); # better: $builder->config('dlext') $builder->config('obj_ext') #add a cleanup build_element ?? #rearrange order of the build process my @el = @{$builder->build_elements}; my $i = grep {$el[$_] eq 'c'} 0..$#el; unshift @el, splice @el, $i, 1; @el = @{$builder->build_elements}; $i = grep {$el[$_] eq 'swig'} 0..$#el; unshift @el, splice @el, $i, 1; #if ($builder->config('verbose')) { # foreach my $i (@el) { # print " $i "; # } # print "\n"; #} } #distclean : unlink lib/perliso9660.pm, lib/perlmmc.pm lib/perlcdio.pm # c files? $builder->create_build_script(); sub try_compile { my ($c, %args) = @_; my $ok = 0; my $tmp = "tmp$$"; local(*TMPC); my $obj_ext = $builder->config('obj_ext') || ".o"; unlink("$tmp.c", "$tmp$obj_ext"); if (open(TMPC, ">", "$tmp.c")) { print TMPC $c; close(TMPC); my $cccmd = $builder->config('cc'); my $errornull; my $ccflags = $builder->config('ccflags'); $ccflags .= " $args{ccflags}" if $args{ccflags}; if ($args{silent} ) { $errornull = "2>/dev/null" unless defined $errornull; } else { $errornull = ''; } $cccmd = "$cccmd -o $tmp $ccflags $tmp.c $errornull"; printf "cccmd = $cccmd\n" if $args{verbose}; my $res = system($cccmd); $ok = defined($res) && $res == 0; if ( !$ok ) { my $errno = $? >> 8; local $! = $errno; print " *** The test compile of '$tmp.c' failed: status $? *** (the status means: errno = $errno or '$!') *** DO NOT PANIC: this just means that *some* you may get some innocuous *** compiler warnings. "; } unlink("$tmp.c"); } return $ok; } sub try_cflags ($) { my ($ccflags) = @_; my $c_prog = "int main () { return 0; }\n"; print "Checking if ",$builder->config('cc')," supports \"$ccflags\"..."; my $result = try_compile($c_prog, ccflags=>$ccflags); if ($result) { print "yes\n"; return " $ccflags"; } print "no\n"; return ''; } sub check_swig { print "Checking for SWIG..."; my @swig_version = `swig -version 2>&1`; if ($?) { my $errno = $? >> 8; print " *** I don't see SWIG installed. I'll use the SWIG-generated file *** that comes with the distribution. If you want SWIG, get it *** from http://www.swig.org "; print "*** Output was: @swig_version " if @swig_version; } else { print "ok\n"; return 1; } return 0; } sub check_c_compiler { my $cc= shift; my $ccflags = shift; $ccflags .= ' '. $libcdio_pkgcfg{cflags}; ## Swig produces a number of GCC warnings. Turn them off if we can. $ccflags .= try_cflags("-Wno-strict-aliasing"); $ccflags .= try_cflags("-Wno-unused-function"); $ccflags .= try_cflags("-Wno-unused-value"); $ccflags .= try_cflags("-Wno-unused-function"); $ccflags .= try_cflags("-Wno-unused-variable"); my %libiso9660_pkgcfg = ExtUtils::PkgConfig->find ('libiso9660'); my $ldflags = "$libcdio_pkgcfg{libs} $libiso9660_pkgcfg{libs} -lcdio"; my $swig_flags=''; if ('cygwin' eq $Config{osname} && $Config{shrpenv} =~ m{\Aenv LD_RUN_PATH=(.*)\Z} ) { $ldflags .= " -L$1 -lperl"; # Should we check the 32-ness? $swig_flags = '-DNEED_LONG'; } elsif ('darwin' eq $Config{osname}) { $ldflags .= " -bundle -flat_namespace"; } #lddlflags ?? $ccflags =~ s/^\s+//; $ccflags =~ s/\s+$//; $ldflags =~ s/^\s+//; $ldflags =~ s/\s+$//; return ($ccflags, $ldflags, $swig_flags); } Device-Cdio-v2.0.0/META.json000444001750001750 500413222226267 15174 0ustar00rockyrocky000000000000{ "abstract" : "Perl bindings for CD Input and control library (libcdio)", "author" : [ "Rocky Bernstein " ], "dynamic_config" : 1, "generated_by" : "Module::Build version 0.4214", "license" : [ "gpl_1" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : "2" }, "name" : "Device-Cdio", "prereqs" : { "build" : { "requires" : { "ExtUtils::CBuilder" : "0" } }, "configure" : { "requires" : { "Module::Build" : "0.38" } }, "runtime" : { "requires" : { "ExtUtils::CBuilder" : "0.28", "ExtUtils::PkgConfig" : "1.03", "Test::More" : "0", "version" : "0" } } }, "provides" : { "Device::Cdio" : { "file" : "lib/Device/Cdio.pm", "version" : "v2.0.0" }, "Device::Cdio::Device" : { "file" : "lib/Device/Cdio/Device.pm" }, "Device::Cdio::ISO9660" : { "file" : "lib/Device/Cdio/ISO9660.pm" }, "Device::Cdio::ISO9660::FS" : { "file" : "lib/Device/Cdio/ISO9660/FS.pm" }, "Device::Cdio::ISO9660::IFS" : { "file" : "lib/Device/Cdio/ISO9660/IFS.pm" }, "Device::Cdio::Track" : { "file" : "lib/Device/Cdio/Track.pm" }, "Device::Cdio::Util" : { "file" : "lib/Device/Cdio/Util.pm" }, "perlcdio" : { "file" : "lib/perlcdio.pm" }, "perlcdio::imaxdiv_t" : { "file" : "lib/perlcdio.pm" }, "perlcdioc" : { "file" : "lib/perlcdio.pm" }, "perliso9660" : { "file" : "lib/perliso9660.pm" }, "perliso9660::imaxdiv_t" : { "file" : "lib/perliso9660.pm" }, "perliso9660c" : { "file" : "lib/perliso9660.pm" }, "perlmmc" : { "file" : "lib/perlmmc.pm" }, "perlmmc::imaxdiv_t" : { "file" : "lib/perlmmc.pm" }, "perlmmcc" : { "file" : "lib/perlmmc.pm" } }, "release_status" : "stable", "resources" : { "bugtracker" : { "web" : "https://github.com/rocky/Perl-Device-Cdio/issues" }, "license" : [ "http://opensource.org/licenses/gpl-license.php" ], "repository" : { "url" : "http://github.com/rocky/Perl-Device-Cdio" } }, "version" : "v2.0.0", "x_serialization_backend" : "JSON::PP version 2.27400" } Device-Cdio-v2.0.0/perliso9660_wrap.c000444001750001750 54120713222226267 17024 0ustar00rockyrocky000000000000/* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). * Version 3.0.10 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make * changes to this file unless you know what you are doing--modify the SWIG * interface file instead. * ----------------------------------------------------------------------------- */ #ifndef SWIGPERL #define SWIGPERL #endif #define SWIG_CASTRANK_MODE /* ----------------------------------------------------------------------------- * This section contains generic SWIG labels for method/variable * declarations/attributes, and other compiler dependent labels. * ----------------------------------------------------------------------------- */ /* template workaround for compilers that cannot correctly implement the C++ standard */ #ifndef SWIGTEMPLATEDISAMBIGUATOR # if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) # define SWIGTEMPLATEDISAMBIGUATOR template # elif defined(__HP_aCC) /* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ /* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ # define SWIGTEMPLATEDISAMBIGUATOR template # else # define SWIGTEMPLATEDISAMBIGUATOR # endif #endif /* inline attribute */ #ifndef SWIGINLINE # if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) # define SWIGINLINE inline # else # define SWIGINLINE # endif #endif /* attribute recognised by some compilers to avoid 'unused' warnings */ #ifndef SWIGUNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) # define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif # elif defined(__ICC) # define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif #endif #ifndef SWIG_MSC_UNSUPPRESS_4505 # if defined(_MSC_VER) # pragma warning(disable : 4505) /* unreferenced local function has been removed */ # endif #endif #ifndef SWIGUNUSEDPARM # ifdef __cplusplus # define SWIGUNUSEDPARM(p) # else # define SWIGUNUSEDPARM(p) p SWIGUNUSED # endif #endif /* internal SWIG method */ #ifndef SWIGINTERN # define SWIGINTERN static SWIGUNUSED #endif /* internal inline SWIG method */ #ifndef SWIGINTERNINLINE # define SWIGINTERNINLINE SWIGINTERN SWIGINLINE #endif /* exporting methods */ #if defined(__GNUC__) # if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) # ifndef GCC_HASCLASSVISIBILITY # define GCC_HASCLASSVISIBILITY # endif # endif #endif #ifndef SWIGEXPORT # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) # if defined(STATIC_LINKED) # define SWIGEXPORT # else # define SWIGEXPORT __declspec(dllexport) # endif # else # if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) # define SWIGEXPORT __attribute__ ((visibility("default"))) # else # define SWIGEXPORT # endif # endif #endif /* calling conventions for Windows */ #ifndef SWIGSTDCALL # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) # define SWIGSTDCALL __stdcall # else # define SWIGSTDCALL # endif #endif /* Deal with Microsoft's attempt at deprecating C standard runtime functions */ #if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) # define _CRT_SECURE_NO_DEPRECATE #endif /* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ #if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) # define _SCL_SECURE_NO_DEPRECATE #endif /* Deal with Apple's deprecated 'AssertMacros.h' from Carbon-framework */ #if defined(__APPLE__) && !defined(__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES) # define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0 #endif /* Intel's compiler complains if a variable which was never initialised is * cast to void, which is a common idiom which we use to indicate that we * are aware a variable isn't used. So we just silence that warning. * See: https://github.com/swig/swig/issues/192 for more discussion. */ #ifdef __INTEL_COMPILER # pragma warning disable 592 #endif /* ----------------------------------------------------------------------------- * swigrun.swg * * This file contains generic C API SWIG runtime support for pointer * type checking. * ----------------------------------------------------------------------------- */ /* This should only be incremented when either the layout of swig_type_info changes, or for whatever reason, the runtime changes incompatibly */ #define SWIG_RUNTIME_VERSION "4" /* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ #ifdef SWIG_TYPE_TABLE # define SWIG_QUOTE_STRING(x) #x # define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) # define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) #else # define SWIG_TYPE_TABLE_NAME #endif /* You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for creating a static or dynamic library from the SWIG runtime code. In 99.9% of the cases, SWIG just needs to declare them as 'static'. But only do this if strictly necessary, ie, if you have problems with your compiler or suchlike. */ #ifndef SWIGRUNTIME # define SWIGRUNTIME SWIGINTERN #endif #ifndef SWIGRUNTIMEINLINE # define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE #endif /* Generic buffer size */ #ifndef SWIG_BUFFER_SIZE # define SWIG_BUFFER_SIZE 1024 #endif /* Flags for pointer conversions */ #define SWIG_POINTER_DISOWN 0x1 #define SWIG_CAST_NEW_MEMORY 0x2 /* Flags for new pointer objects */ #define SWIG_POINTER_OWN 0x1 /* Flags/methods for returning states. The SWIG conversion methods, as ConvertPtr, return an integer that tells if the conversion was successful or not. And if not, an error code can be returned (see swigerrors.swg for the codes). Use the following macros/flags to set or process the returning states. In old versions of SWIG, code such as the following was usually written: if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { // success code } else { //fail code } Now you can be more explicit: int res = SWIG_ConvertPtr(obj,vptr,ty.flags); if (SWIG_IsOK(res)) { // success code } else { // fail code } which is the same really, but now you can also do Type *ptr; int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); if (SWIG_IsOK(res)) { // success code if (SWIG_IsNewObj(res) { ... delete *ptr; } else { ... } } else { // fail code } I.e., now SWIG_ConvertPtr can return new objects and you can identify the case and take care of the deallocation. Of course that also requires SWIG_ConvertPtr to return new result values, such as int SWIG_ConvertPtr(obj, ptr,...) { if () { if () { *ptr = ; return SWIG_NEWOBJ; } else { *ptr = ; return SWIG_OLDOBJ; } } else { return SWIG_BADOBJ; } } Of course, returning the plain '0(success)/-1(fail)' still works, but you can be more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the SWIG errors code. Finally, if the SWIG_CASTRANK_MODE is enabled, the result code allows to return the 'cast rank', for example, if you have this int food(double) int fooi(int); and you call food(1) // cast rank '1' (1 -> 1.0) fooi(1) // cast rank '0' just use the SWIG_AddCast()/SWIG_CheckState() */ #define SWIG_OK (0) #define SWIG_ERROR (-1) #define SWIG_IsOK(r) (r >= 0) #define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) /* The CastRankLimit says how many bits are used for the cast rank */ #define SWIG_CASTRANKLIMIT (1 << 8) /* The NewMask denotes the object was created (using new/malloc) */ #define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1) /* The TmpMask is for in/out typemaps that use temporal objects */ #define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1) /* Simple returning values */ #define SWIG_BADOBJ (SWIG_ERROR) #define SWIG_OLDOBJ (SWIG_OK) #define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK) #define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK) /* Check, add and del mask methods */ #define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r) #define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r) #define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK)) #define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r) #define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) #define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) /* Cast-Rank Mode */ #if defined(SWIG_CASTRANK_MODE) # ifndef SWIG_TypeRank # define SWIG_TypeRank unsigned long # endif # ifndef SWIG_MAXCASTRANK /* Default cast allowed */ # define SWIG_MAXCASTRANK (2) # endif # define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) # define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) SWIGINTERNINLINE int SWIG_AddCast(int r) { return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; } SWIGINTERNINLINE int SWIG_CheckState(int r) { return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; } #else /* no cast-rank mode */ # define SWIG_AddCast(r) (r) # define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) #endif #include #ifdef __cplusplus extern "C" { #endif typedef void *(*swig_converter_func)(void *, int *); typedef struct swig_type_info *(*swig_dycast_func)(void **); /* Structure to store information on one type */ typedef struct swig_type_info { const char *name; /* mangled name of this type */ const char *str; /* human readable name of this type */ swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ struct swig_cast_info *cast; /* linked list of types that can cast into this type */ void *clientdata; /* language specific type data */ int owndata; /* flag if the structure owns the clientdata */ } swig_type_info; /* Structure to store a type and conversion function used for casting */ typedef struct swig_cast_info { swig_type_info *type; /* pointer to type that is equivalent to this type */ swig_converter_func converter; /* function to cast the void pointers */ struct swig_cast_info *next; /* pointer to next cast in linked list */ struct swig_cast_info *prev; /* pointer to the previous cast */ } swig_cast_info; /* Structure used to store module information * Each module generates one structure like this, and the runtime collects * all of these structures and stores them in a circularly linked list.*/ typedef struct swig_module_info { swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ size_t size; /* Number of types in this module */ struct swig_module_info *next; /* Pointer to next element in circularly linked list */ swig_type_info **type_initial; /* Array of initially generated type structures */ swig_cast_info **cast_initial; /* Array of initially generated casting structures */ void *clientdata; /* Language specific module data */ } swig_module_info; /* Compare two type names skipping the space characters, therefore "char*" == "char *" and "Class" == "Class", etc. Return 0 when the two name types are equivalent, as in strncmp, but skipping ' '. */ SWIGRUNTIME int SWIG_TypeNameComp(const char *f1, const char *l1, const char *f2, const char *l2) { for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { while ((*f1 == ' ') && (f1 != l1)) ++f1; while ((*f2 == ' ') && (f2 != l2)) ++f2; if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; } return (int)((l1 - f1) - (l2 - f2)); } /* Check type equivalence in a name list like ||... Return 0 if equal, -1 if nb < tb, 1 if nb > tb */ SWIGRUNTIME int SWIG_TypeCmp(const char *nb, const char *tb) { int equiv = 1; const char* te = tb + strlen(tb); const char* ne = nb; while (equiv != 0 && *ne) { for (nb = ne; *ne; ++ne) { if (*ne == '|') break; } equiv = SWIG_TypeNameComp(nb, ne, tb, te); if (*ne) ++ne; } return equiv; } /* Check type equivalence in a name list like ||... Return 0 if not equal, 1 if equal */ SWIGRUNTIME int SWIG_TypeEquiv(const char *nb, const char *tb) { return SWIG_TypeCmp(nb, tb) == 0 ? 1 : 0; } /* Check the typename */ SWIGRUNTIME swig_cast_info * SWIG_TypeCheck(const char *c, swig_type_info *ty) { if (ty) { swig_cast_info *iter = ty->cast; while (iter) { if (strcmp(iter->type->name, c) == 0) { if (iter == ty->cast) return iter; /* Move iter to the top of the linked list */ iter->prev->next = iter->next; if (iter->next) iter->next->prev = iter->prev; iter->next = ty->cast; iter->prev = 0; if (ty->cast) ty->cast->prev = iter; ty->cast = iter; return iter; } iter = iter->next; } } return 0; } /* Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison */ SWIGRUNTIME swig_cast_info * SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) { if (ty) { swig_cast_info *iter = ty->cast; while (iter) { if (iter->type == from) { if (iter == ty->cast) return iter; /* Move iter to the top of the linked list */ iter->prev->next = iter->next; if (iter->next) iter->next->prev = iter->prev; iter->next = ty->cast; iter->prev = 0; if (ty->cast) ty->cast->prev = iter; ty->cast = iter; return iter; } iter = iter->next; } } return 0; } /* Cast a pointer up an inheritance hierarchy */ SWIGRUNTIMEINLINE void * SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); } /* Dynamic pointer casting. Down an inheritance hierarchy */ SWIGRUNTIME swig_type_info * SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { swig_type_info *lastty = ty; if (!ty || !ty->dcast) return ty; while (ty && (ty->dcast)) { ty = (*ty->dcast)(ptr); if (ty) lastty = ty; } return lastty; } /* Return the name associated with this type */ SWIGRUNTIMEINLINE const char * SWIG_TypeName(const swig_type_info *ty) { return ty->name; } /* Return the pretty name associated with this type, that is an unmangled type name in a form presentable to the user. */ SWIGRUNTIME const char * SWIG_TypePrettyName(const swig_type_info *type) { /* The "str" field contains the equivalent pretty names of the type, separated by vertical-bar characters. We choose to print the last name, as it is often (?) the most specific. */ if (!type) return NULL; if (type->str != NULL) { const char *last_name = type->str; const char *s; for (s = type->str; *s; s++) if (*s == '|') last_name = s+1; return last_name; } else return type->name; } /* Set the clientdata field for a type */ SWIGRUNTIME void SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { swig_cast_info *cast = ti->cast; /* if (ti->clientdata == clientdata) return; */ ti->clientdata = clientdata; while (cast) { if (!cast->converter) { swig_type_info *tc = cast->type; if (!tc->clientdata) { SWIG_TypeClientData(tc, clientdata); } } cast = cast->next; } } SWIGRUNTIME void SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { SWIG_TypeClientData(ti, clientdata); ti->owndata = 1; } /* Search for a swig_type_info structure only by mangled name Search is a O(log #types) We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * SWIG_MangledTypeQueryModule(swig_module_info *start, swig_module_info *end, const char *name) { swig_module_info *iter = start; do { if (iter->size) { size_t l = 0; size_t r = iter->size - 1; do { /* since l+r >= 0, we can (>> 1) instead (/ 2) */ size_t i = (l + r) >> 1; const char *iname = iter->types[i]->name; if (iname) { int compare = strcmp(name, iname); if (compare == 0) { return iter->types[i]; } else if (compare < 0) { if (i) { r = i - 1; } else { break; } } else if (compare > 0) { l = i + 1; } } else { break; /* should never happen */ } } while (l <= r); } iter = iter->next; } while (iter != end); return 0; } /* Search for a swig_type_info structure for either a mangled name or a human readable name. It first searches the mangled names of the types, which is a O(log #types) If a type is not found it then searches the human readable names, which is O(#types). We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * SWIG_TypeQueryModule(swig_module_info *start, swig_module_info *end, const char *name) { /* STEP 1: Search the name field using binary search */ swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); if (ret) { return ret; } else { /* STEP 2: If the type hasn't been found, do a complete search of the str field (the human readable name) */ swig_module_info *iter = start; do { size_t i = 0; for (; i < iter->size; ++i) { if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) return iter->types[i]; } iter = iter->next; } while (iter != end); } /* neither found a match */ return 0; } /* Pack binary data into a string */ SWIGRUNTIME char * SWIG_PackData(char *c, void *ptr, size_t sz) { static const char hex[17] = "0123456789abcdef"; const unsigned char *u = (unsigned char *) ptr; const unsigned char *eu = u + sz; for (; u != eu; ++u) { unsigned char uu = *u; *(c++) = hex[(uu & 0xf0) >> 4]; *(c++) = hex[uu & 0xf]; } return c; } /* Unpack binary data from a string */ SWIGRUNTIME const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) { unsigned char *u = (unsigned char *) ptr; const unsigned char *eu = u + sz; for (; u != eu; ++u) { char d = *(c++); unsigned char uu; if ((d >= '0') && (d <= '9')) uu = (unsigned char)((d - '0') << 4); else if ((d >= 'a') && (d <= 'f')) uu = (unsigned char)((d - ('a'-10)) << 4); else return (char *) 0; d = *(c++); if ((d >= '0') && (d <= '9')) uu |= (unsigned char)(d - '0'); else if ((d >= 'a') && (d <= 'f')) uu |= (unsigned char)(d - ('a'-10)); else return (char *) 0; *u = uu; } return c; } /* Pack 'void *' into a string buffer. */ SWIGRUNTIME char * SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { char *r = buff; if ((2*sizeof(void *) + 2) > bsz) return 0; *(r++) = '_'; r = SWIG_PackData(r,&ptr,sizeof(void *)); if (strlen(name) + 1 > (bsz - (r - buff))) return 0; strcpy(r,name); return buff; } SWIGRUNTIME const char * SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { if (*c != '_') { if (strcmp(c,"NULL") == 0) { *ptr = (void *) 0; return name; } else { return 0; } } return SWIG_UnpackData(++c,ptr,sizeof(void *)); } SWIGRUNTIME char * SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { char *r = buff; size_t lname = (name ? strlen(name) : 0); if ((2*sz + 2 + lname) > bsz) return 0; *(r++) = '_'; r = SWIG_PackData(r,ptr,sz); if (lname) { strncpy(r,name,lname+1); } else { *r = 0; } return buff; } SWIGRUNTIME const char * SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { if (*c != '_') { if (strcmp(c,"NULL") == 0) { memset(ptr,0,sz); return name; } else { return 0; } } return SWIG_UnpackData(++c,ptr,sz); } #ifdef __cplusplus } #endif /* Errors in SWIG */ #define SWIG_UnknownError -1 #define SWIG_IOError -2 #define SWIG_RuntimeError -3 #define SWIG_IndexError -4 #define SWIG_TypeError -5 #define SWIG_DivisionByZero -6 #define SWIG_OverflowError -7 #define SWIG_SyntaxError -8 #define SWIG_ValueError -9 #define SWIG_SystemError -10 #define SWIG_AttributeError -11 #define SWIG_MemoryError -12 #define SWIG_NullReferenceError -13 #ifdef __cplusplus /* Needed on some windows machines---since MS plays funny games with the header files under C++ */ #include #include extern "C" { #endif #include "EXTERN.h" #include "perl.h" #include "XSUB.h" /* Add in functionality missing in older versions of Perl. Much of this is based on Devel-PPPort on cpan. */ /* Add PERL_REVISION, PERL_VERSION, PERL_SUBVERSION if missing */ #ifndef PERL_REVISION # if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION)) # define PERL_PATCHLEVEL_H_IMPLICIT # include # endif # if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL))) # include # endif # ifndef PERL_REVISION # define PERL_REVISION (5) # define PERL_VERSION PATCHLEVEL # define PERL_SUBVERSION SUBVERSION # endif #endif #if defined(WIN32) && defined(PERL_OBJECT) && !defined(PerlIO_exportFILE) #define PerlIO_exportFILE(fh,fl) (FILE*)(fh) #endif #ifndef SvIOK_UV # define SvIOK_UV(sv) (SvIOK(sv) && (SvUVX(sv) == SvIVX(sv))) #endif #ifndef SvUOK # define SvUOK(sv) SvIOK_UV(sv) #endif #if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5))) # define PL_sv_undef sv_undef # define PL_na na # define PL_errgv errgv # define PL_sv_no sv_no # define PL_sv_yes sv_yes # define PL_markstack_ptr markstack_ptr #endif #ifndef IVSIZE # ifdef LONGSIZE # define IVSIZE LONGSIZE # else # define IVSIZE 4 /* A bold guess, but the best we can make. */ # endif #endif #ifndef INT2PTR # if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) # define PTRV UV # define INT2PTR(any,d) (any)(d) # else # if PTRSIZE == LONGSIZE # define PTRV unsigned long # else # define PTRV unsigned # endif # define INT2PTR(any,d) (any)(PTRV)(d) # endif # define NUM2PTR(any,d) (any)(PTRV)(d) # define PTR2IV(p) INT2PTR(IV,p) # define PTR2UV(p) INT2PTR(UV,p) # define PTR2NV(p) NUM2PTR(NV,p) # if PTRSIZE == LONGSIZE # define PTR2ul(p) (unsigned long)(p) # else # define PTR2ul(p) INT2PTR(unsigned long,p) # endif #endif /* !INT2PTR */ #ifndef SvPV_nolen # define SvPV_nolen(x) SvPV(x,PL_na) #endif #ifndef get_sv # define get_sv perl_get_sv #endif #ifndef ERRSV # define ERRSV get_sv("@",FALSE) #endif #ifndef pTHX_ #define pTHX_ #endif #include #ifdef __cplusplus } #endif /* ----------------------------------------------------------------------------- * error manipulation * ----------------------------------------------------------------------------- */ SWIGINTERN const char* SWIG_Perl_ErrorType(int code) { switch(code) { case SWIG_MemoryError: return "MemoryError"; case SWIG_IOError: return "IOError"; case SWIG_RuntimeError: return "RuntimeError"; case SWIG_IndexError: return "IndexError"; case SWIG_TypeError: return "TypeError"; case SWIG_DivisionByZero: return "ZeroDivisionError"; case SWIG_OverflowError: return "OverflowError"; case SWIG_SyntaxError: return "SyntaxError"; case SWIG_ValueError: return "ValueError"; case SWIG_SystemError: return "SystemError"; case SWIG_AttributeError: return "AttributeError"; default: return "RuntimeError"; } } /* ----------------------------------------------------------------------------- * perlrun.swg * * This file contains the runtime support for Perl modules * and includes code for managing global variables and pointer * type checking. * ----------------------------------------------------------------------------- */ #ifdef PERL_OBJECT #define SWIG_PERL_OBJECT_DECL CPerlObj *SWIGUNUSEDPARM(pPerl), #define SWIG_PERL_OBJECT_CALL pPerl, #else #define SWIG_PERL_OBJECT_DECL #define SWIG_PERL_OBJECT_CALL #endif /* Common SWIG API */ /* for raw pointers */ #define SWIG_ConvertPtr(obj, pp, type, flags) SWIG_Perl_ConvertPtr(SWIG_PERL_OBJECT_CALL obj, pp, type, flags) #define SWIG_ConvertPtrAndOwn(obj, pp, type, flags,own) SWIG_Perl_ConvertPtrAndOwn(SWIG_PERL_OBJECT_CALL obj, pp, type, flags, own) #define SWIG_NewPointerObj(p, type, flags) SWIG_Perl_NewPointerObj(SWIG_PERL_OBJECT_CALL p, type, flags) #define swig_owntype int /* for raw packed data */ #define SWIG_ConvertPacked(obj, p, s, type) SWIG_Perl_ConvertPacked(SWIG_PERL_OBJECT_CALL obj, p, s, type) #define SWIG_NewPackedObj(p, s, type) SWIG_Perl_NewPackedObj(SWIG_PERL_OBJECT_CALL p, s, type) /* for class or struct pointers */ #define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags) #define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags) /* for C or C++ function pointers */ #define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_ConvertPtr(obj, pptr, type, 0) #define SWIG_NewFunctionPtrObj(ptr, type) SWIG_NewPointerObj(ptr, type, 0) /* for C++ member pointers, ie, member methods */ #define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_ConvertPacked(obj, ptr, sz, ty) #define SWIG_NewMemberObj(ptr, sz, type) SWIG_NewPackedObj(ptr, sz, type) /* Runtime API */ #define SWIG_GetModule(clientdata) SWIG_Perl_GetModule(clientdata) #define SWIG_SetModule(clientdata, pointer) SWIG_Perl_SetModule(pointer) /* Error manipulation */ #define SWIG_ErrorType(code) SWIG_Perl_ErrorType(code) #define SWIG_Error(code, msg) sv_setpvf(get_sv("@", GV_ADD), "%s %s", SWIG_ErrorType(code), msg) #define SWIG_fail goto fail /* Perl-specific SWIG API */ #define SWIG_MakePtr(sv, ptr, type, flags) SWIG_Perl_MakePtr(SWIG_PERL_OBJECT_CALL sv, ptr, type, flags) #define SWIG_MakePackedObj(sv, p, s, type) SWIG_Perl_MakePackedObj(SWIG_PERL_OBJECT_CALL sv, p, s, type) #define SWIG_SetError(str) SWIG_Error(SWIG_RuntimeError, str) #define SWIG_PERL_DECL_ARGS_1(arg1) (SWIG_PERL_OBJECT_DECL arg1) #define SWIG_PERL_CALL_ARGS_1(arg1) (SWIG_PERL_OBJECT_CALL arg1) #define SWIG_PERL_DECL_ARGS_2(arg1, arg2) (SWIG_PERL_OBJECT_DECL arg1, arg2) #define SWIG_PERL_CALL_ARGS_2(arg1, arg2) (SWIG_PERL_OBJECT_CALL arg1, arg2) /* ----------------------------------------------------------------------------- * pointers/data manipulation * ----------------------------------------------------------------------------- */ /* For backward compatibility only */ #define SWIG_POINTER_EXCEPTION 0 #ifdef __cplusplus extern "C" { #endif #define SWIG_OWNER SWIG_POINTER_OWN #define SWIG_SHADOW SWIG_OWNER << 1 #define SWIG_MAYBE_PERL_OBJECT SWIG_PERL_OBJECT_DECL /* SWIG Perl macros */ /* Macro to declare an XS function */ #ifndef XSPROTO # define XSPROTO(name) void name(pTHX_ CV* cv) #endif /* Macro to call an XS function */ #ifdef PERL_OBJECT # define SWIG_CALLXS(_name) _name(cv,pPerl) #else # ifndef MULTIPLICITY # define SWIG_CALLXS(_name) _name(cv) # else # define SWIG_CALLXS(_name) _name(PERL_GET_THX, cv) # endif #endif #ifdef PERL_OBJECT #define MAGIC_PPERL CPerlObj *pPerl = (CPerlObj *) this; #ifdef __cplusplus extern "C" { #endif typedef int (CPerlObj::*SwigMagicFunc)(SV *, MAGIC *); #ifdef __cplusplus } #endif #define SWIG_MAGIC(a,b) (SV *a, MAGIC *b) #define SWIGCLASS_STATIC #else /* PERL_OBJECT */ #define MAGIC_PPERL #define SWIGCLASS_STATIC static SWIGUNUSED #ifndef MULTIPLICITY #define SWIG_MAGIC(a,b) (SV *a, MAGIC *b) #ifdef __cplusplus extern "C" { #endif typedef int (*SwigMagicFunc)(SV *, MAGIC *); #ifdef __cplusplus } #endif #else /* MULTIPLICITY */ #define SWIG_MAGIC(a,b) (struct interpreter *interp, SV *a, MAGIC *b) #ifdef __cplusplus extern "C" { #endif typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *); #ifdef __cplusplus } #endif #endif /* MULTIPLICITY */ #endif /* PERL_OBJECT */ # ifdef PERL_OBJECT # define SWIG_croak_null() SWIG_Perl_croak_null(pPerl) static void SWIGUNUSED SWIG_Perl_croak_null(CPerlObj *pPerl) # else static void SWIGUNUSED SWIG_croak_null() # endif { SV *err = get_sv("@", GV_ADD); # if (PERL_VERSION < 6) croak("%_", err); # else if (sv_isobject(err)) croak(0); else croak("%s", SvPV_nolen(err)); # endif } /* Define how strict is the cast between strings and integers/doubles when overloading between these types occurs. The default is making it as strict as possible by using SWIG_AddCast when needed. You can use -DSWIG_PERL_NO_STRICT_STR2NUM at compilation time to disable the SWIG_AddCast, making the casting between string and numbers less strict. In the end, we try to solve the overloading between strings and numerical types in the more natural way, but if you can avoid it, well, avoid it using %rename, for example. */ #ifndef SWIG_PERL_NO_STRICT_STR2NUM # ifndef SWIG_PERL_STRICT_STR2NUM # define SWIG_PERL_STRICT_STR2NUM # endif #endif #ifdef SWIG_PERL_STRICT_STR2NUM /* string takes precedence */ #define SWIG_Str2NumCast(x) SWIG_AddCast(x) #else /* number takes precedence */ #define SWIG_Str2NumCast(x) x #endif #include SWIGRUNTIME const char * SWIG_Perl_TypeProxyName(const swig_type_info *type) { if (!type) return NULL; if (type->clientdata != NULL) { return (const char*) type->clientdata; } else { return type->name; } } /* Identical to SWIG_TypeCheck, except for strcmp comparison */ SWIGRUNTIME swig_cast_info * SWIG_TypeProxyCheck(const char *c, swig_type_info *ty) { if (ty) { swig_cast_info *iter = ty->cast; while (iter) { if (strcmp(SWIG_Perl_TypeProxyName(iter->type), c) == 0) { if (iter == ty->cast) return iter; /* Move iter to the top of the linked list */ iter->prev->next = iter->next; if (iter->next) iter->next->prev = iter->prev; iter->next = ty->cast; iter->prev = 0; if (ty->cast) ty->cast->prev = iter; ty->cast = iter; return iter; } iter = iter->next; } } return 0; } /* Function for getting a pointer value */ SWIGRUNTIME int SWIG_Perl_ConvertPtrAndOwn(SWIG_MAYBE_PERL_OBJECT SV *sv, void **ptr, swig_type_info *_t, int flags, int *own) { swig_cast_info *tc; void *voidptr = (void *)0; SV *tsv = 0; if (own) *own = 0; /* If magical, apply more magic */ if (SvGMAGICAL(sv)) mg_get(sv); /* Check to see if this is an object */ if (sv_isobject(sv)) { IV tmp = 0; tsv = (SV*) SvRV(sv); if ((SvTYPE(tsv) == SVt_PVHV)) { MAGIC *mg; if (SvMAGICAL(tsv)) { mg = mg_find(tsv,'P'); if (mg) { sv = mg->mg_obj; if (sv_isobject(sv)) { tsv = (SV*)SvRV(sv); tmp = SvIV(tsv); } } } else { return SWIG_ERROR; } } else { tmp = SvIV(tsv); } voidptr = INT2PTR(void *,tmp); } else if (! SvOK(sv)) { /* Check for undef */ *(ptr) = (void *) 0; return SWIG_OK; } else if (SvTYPE(sv) == SVt_RV) { /* Check for NULL pointer */ if (!SvROK(sv)) { /* In Perl 5.12 and later, SVt_RV == SVt_IV, so sv could be a valid integer value. */ if (SvIOK(sv)) { return SWIG_ERROR; } else { /* NULL pointer (reference to undef). */ *(ptr) = (void *) 0; return SWIG_OK; } } else { return SWIG_ERROR; } } else { /* Don't know what it is */ return SWIG_ERROR; } if (_t) { /* Now see if the types match */ char *_c = HvNAME(SvSTASH(SvRV(sv))); tc = SWIG_TypeProxyCheck(_c,_t); #ifdef SWIG_DIRECTORS if (!tc && !sv_derived_from(sv,SWIG_Perl_TypeProxyName(_t))) { #else if (!tc) { #endif return SWIG_ERROR; } { int newmemory = 0; *ptr = SWIG_TypeCast(tc,voidptr,&newmemory); if (newmemory == SWIG_CAST_NEW_MEMORY) { assert(own); /* badly formed typemap which will lead to a memory leak - it must set and use own to delete *ptr */ if (own) *own = *own | SWIG_CAST_NEW_MEMORY; } } } else { *ptr = voidptr; } /* * DISOWN implementation: we need a perl guru to check this one. */ if (tsv && (flags & SWIG_POINTER_DISOWN)) { /* * almost copy paste code from below SWIG_POINTER_OWN setting */ SV *obj = sv; HV *stash = SvSTASH(SvRV(obj)); GV *gv = *(GV**)hv_fetch(stash, "OWNER", 5, TRUE); if (isGV(gv)) { HV *hv = GvHVn(gv); /* * To set ownership (see below), a newSViv(1) entry is added. * Hence, to remove ownership, we delete the entry. */ if (hv_exists_ent(hv, obj, 0)) { hv_delete_ent(hv, obj, 0, 0); } } } return SWIG_OK; } SWIGRUNTIME int SWIG_Perl_ConvertPtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void **ptr, swig_type_info *_t, int flags) { return SWIG_Perl_ConvertPtrAndOwn(sv, ptr, _t, flags, 0); } SWIGRUNTIME void SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, int flags) { if (ptr && (flags & (SWIG_SHADOW | SWIG_POINTER_OWN))) { SV *self; SV *obj=newSV(0); HV *hash=newHV(); HV *stash; sv_setref_pv(obj, SWIG_Perl_TypeProxyName(t), ptr); stash=SvSTASH(SvRV(obj)); if (flags & SWIG_POINTER_OWN) { HV *hv; GV *gv = *(GV**)hv_fetch(stash, "OWNER", 5, TRUE); if (!isGV(gv)) gv_init(gv, stash, "OWNER", 5, FALSE); hv=GvHVn(gv); hv_store_ent(hv, obj, newSViv(1), 0); } sv_magic((SV *)hash, (SV *)obj, 'P', Nullch, 0); SvREFCNT_dec(obj); self=newRV_noinc((SV *)hash); sv_setsv(sv, self); SvREFCNT_dec((SV *)self); sv_bless(sv, stash); } else { sv_setref_pv(sv, SWIG_Perl_TypeProxyName(t), ptr); } } SWIGRUNTIMEINLINE SV * SWIG_Perl_NewPointerObj(SWIG_MAYBE_PERL_OBJECT void *ptr, swig_type_info *t, int flags) { SV *result = sv_newmortal(); SWIG_MakePtr(result, ptr, t, flags); return result; } SWIGRUNTIME void SWIG_Perl_MakePackedObj(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, int sz, swig_type_info *type) { char result[1024]; char *r = result; if ((2*sz + 1 + strlen(SWIG_Perl_TypeProxyName(type))) > 1000) return; *(r++) = '_'; r = SWIG_PackData(r,ptr,sz); strcpy(r,SWIG_Perl_TypeProxyName(type)); sv_setpv(sv, result); } SWIGRUNTIME SV * SWIG_Perl_NewPackedObj(SWIG_MAYBE_PERL_OBJECT void *ptr, int sz, swig_type_info *type) { SV *result = sv_newmortal(); SWIG_Perl_MakePackedObj(result, ptr, sz, type); return result; } /* Convert a packed value value */ SWIGRUNTIME int SWIG_Perl_ConvertPacked(SWIG_MAYBE_PERL_OBJECT SV *obj, void *ptr, int sz, swig_type_info *ty) { swig_cast_info *tc; const char *c = 0; if ((!obj) || (!SvOK(obj))) return SWIG_ERROR; c = SvPV_nolen(obj); /* Pointer values must start with leading underscore */ if (*c != '_') return SWIG_ERROR; c++; c = SWIG_UnpackData(c,ptr,sz); if (ty) { tc = SWIG_TypeCheck(c,ty); if (!tc) return SWIG_ERROR; } return SWIG_OK; } /* Macros for low-level exception handling */ #define SWIG_croak(x) { SWIG_Error(SWIG_RuntimeError, x); SWIG_fail; } typedef XSPROTO(SwigPerlWrapper); typedef SwigPerlWrapper *SwigPerlWrapperPtr; /* Structure for command table */ typedef struct { const char *name; SwigPerlWrapperPtr wrapper; } swig_command_info; /* Information for constant table */ #define SWIG_INT 1 #define SWIG_FLOAT 2 #define SWIG_STRING 3 #define SWIG_POINTER 4 #define SWIG_BINARY 5 /* Constant information structure */ typedef struct swig_constant_info { int type; const char *name; long lvalue; double dvalue; void *pvalue; swig_type_info **ptype; } swig_constant_info; /* Structure for variable table */ typedef struct { const char *name; SwigMagicFunc set; SwigMagicFunc get; swig_type_info **type; } swig_variable_info; /* Magic variable code */ #ifndef PERL_OBJECT # ifdef __cplusplus # define swig_create_magic(s,a,b,c) _swig_create_magic(s,const_cast(a),b,c) # else # define swig_create_magic(s,a,b,c) _swig_create_magic(s,(char*)(a),b,c) # endif # ifndef MULTIPLICITY SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *)) # else SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *)) # endif #else # define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c) SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (CPerlObj::*set)(SV *, MAGIC *), int (CPerlObj::*get)(SV *, MAGIC *)) #endif { MAGIC *mg; sv_magic(sv,sv,'U',name,strlen(name)); mg = mg_find(sv,'U'); mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL)); mg->mg_virtual->svt_get = (SwigMagicFunc) get; mg->mg_virtual->svt_set = (SwigMagicFunc) set; mg->mg_virtual->svt_len = 0; mg->mg_virtual->svt_clear = 0; mg->mg_virtual->svt_free = 0; } SWIGRUNTIME swig_module_info * SWIG_Perl_GetModule(void *SWIGUNUSEDPARM(clientdata)) { static void *type_pointer = (void *)0; SV *pointer; /* first check if pointer already created */ if (!type_pointer) { pointer = get_sv("swig_runtime_data::type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, FALSE | GV_ADDMULTI); if (pointer && SvOK(pointer)) { type_pointer = INT2PTR(swig_type_info **, SvIV(pointer)); } } return (swig_module_info *) type_pointer; } SWIGRUNTIME void SWIG_Perl_SetModule(swig_module_info *module) { SV *pointer; /* create a new pointer */ pointer = get_sv("swig_runtime_data::type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, TRUE | GV_ADDMULTI); sv_setiv(pointer, PTR2IV(module)); } #ifdef __cplusplus } #endif /* Workaround perl5 global namespace pollution. Note that undefining library * functions like fopen will not solve the problem on all platforms as fopen * might be a macro on Windows but not necessarily on other operating systems. */ #ifdef do_open #undef do_open #endif #ifdef do_close #undef do_close #endif #ifdef do_exec #undef do_exec #endif #ifdef scalar #undef scalar #endif #ifdef list #undef list #endif #ifdef apply #undef apply #endif #ifdef convert #undef convert #endif #ifdef Error #undef Error #endif #ifdef form #undef form #endif #ifdef vform #undef vform #endif #ifdef LABEL #undef LABEL #endif #ifdef METHOD #undef METHOD #endif #ifdef Move #undef Move #endif #ifdef yylex #undef yylex #endif #ifdef yyparse #undef yyparse #endif #ifdef yyerror #undef yyerror #endif #ifdef invert #undef invert #endif #ifdef ref #undef ref #endif #ifdef read #undef read #endif #ifdef write #undef write #endif #ifdef eof #undef eof #endif #ifdef close #undef close #endif #ifdef rewind #undef rewind #endif #ifdef free #undef free #endif #ifdef malloc #undef malloc #endif #ifdef calloc #undef calloc #endif #ifdef Stat #undef Stat #endif #ifdef check #undef check #endif #ifdef seekdir #undef seekdir #endif #ifdef open #undef open #endif #ifdef readdir #undef readdir #endif #ifdef bind #undef bind #endif #ifdef access #undef access #endif #ifdef stat #undef stat #endif #ifdef seed #undef seed #endif #ifdef bool /* Leave if macro is from C99 stdbool.h */ #ifndef __bool_true_false_are_defined #undef bool #endif #endif #define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) #define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else /* -------- TYPES TABLE (BEGIN) -------- */ #define SWIGTYPE_p_CdIo_t swig_types[0] #define SWIGTYPE_p_CdioList_t swig_types[1] #define SWIGTYPE_p_char swig_types[2] #define SWIGTYPE_p_imaxdiv_t swig_types[3] #define SWIGTYPE_p_int swig_types[4] #define SWIGTYPE_p_iso9660_dir_t swig_types[5] #define SWIGTYPE_p_iso9660_dtime_t swig_types[6] #define SWIGTYPE_p_iso9660_ltime_t swig_types[7] #define SWIGTYPE_p_iso9660_pvd_t swig_types[8] #define SWIGTYPE_p_iso9660_stat_t swig_types[9] #define SWIGTYPE_p_iso9660_t swig_types[10] #define SWIGTYPE_p_long swig_types[11] #define SWIGTYPE_p_long_long swig_types[12] #define SWIGTYPE_p_mode_t swig_types[13] #define SWIGTYPE_p_p_char swig_types[14] #define SWIGTYPE_p_short swig_types[15] #define SWIGTYPE_p_signed_char swig_types[16] #define SWIGTYPE_p_unsigned_char swig_types[17] #define SWIGTYPE_p_unsigned_int swig_types[18] #define SWIGTYPE_p_unsigned_long_long swig_types[19] #define SWIGTYPE_p_unsigned_short swig_types[20] static swig_type_info *swig_types[22]; static swig_module_info swig_module = {swig_types, 21, 0, 0, 0, 0}; #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) /* -------- TYPES TABLE (END) -------- */ #define SWIG_init boot_perliso9660 #define SWIG_name "perliso9660c::boot_perliso9660" #define SWIG_prefix "perliso9660c::" #define SWIGVERSION 0x030010 #define SWIG_VERSION SWIGVERSION #define SWIG_as_voidptr(a) (void *)((const void *)(a)) #define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),(void**)(a)) #ifdef __cplusplus extern "C" #endif #ifndef PERL_OBJECT #ifndef MULTIPLICITY SWIGEXPORT void SWIG_init (CV* cv); #else SWIGEXPORT void SWIG_init (pTHXo_ CV* cv); #endif #else SWIGEXPORT void SWIG_init (CV *cv, CPerlObj *); #endif /* Includes the header in the wrapper code */ #include #include #include #include #include #include // Use the C99 official header #include #if !defined(SWIG_NO_LLONG_MAX) # if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__) # define LLONG_MAX __LONG_LONG_MAX__ # define LLONG_MIN (-LLONG_MAX - 1LL) # define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) # endif #endif #if defined(LLONG_MAX) && !defined(SWIG_LONG_LONG_AVAILABLE) # define SWIG_LONG_LONG_AVAILABLE #endif #include #ifdef _MSC_VER # ifndef strtoull # define strtoull _strtoui64 # endif # ifndef strtoll # define strtoll _strtoi64 # endif #endif SWIGINTERN int SWIG_AsVal_double SWIG_PERL_DECL_ARGS_2(SV *obj, double *val) { if (SvNIOK(obj)) { if (val) *val = SvNV(obj); return SWIG_OK; } else if (SvIOK(obj)) { if (val) *val = (double) SvIV(obj); return SWIG_AddCast(SWIG_OK); } else { const char *nptr = SvPV_nolen(obj); if (nptr) { char *endptr; double v; errno = 0; v = strtod(nptr, &endptr); if (errno == ERANGE) { errno = 0; return SWIG_OverflowError; } else { if (*endptr == '\0') { if (val) *val = v; return SWIG_Str2NumCast(SWIG_OK); } } } } return SWIG_TypeError; } #include #include SWIGINTERNINLINE int SWIG_CanCastAsInteger(double *d, double min, double max) { double x = *d; if ((min <= x && x <= max)) { double fx = floor(x); double cx = ceil(x); double rd = ((x - fx) < 0.5) ? fx : cx; /* simple rint */ if ((errno == EDOM) || (errno == ERANGE)) { errno = 0; } else { double summ, reps, diff; if (rd < x) { diff = x - rd; } else if (rd > x) { diff = rd - x; } else { return 1; } summ = rd + x; reps = diff/summ; if (reps < 8*DBL_EPSILON) { *d = rd; return 1; } } } return 0; } #ifdef SWIG_LONG_LONG_AVAILABLE SWIGINTERN int SWIG_AsVal_long_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, long long *val) { if (SvUOK(obj)) { UV v = SvUV(obj); /* pretty sure this could allow v == LLONG MAX */ if (UVSIZE < sizeof(*val) || v < LLONG_MAX) { if (val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else if (SvIOK(obj)) { IV v = SvIV(obj); if (IVSIZE <= sizeof(*val) || (v >= LLONG_MIN && v <= LLONG_MAX)) { if (val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else { int dispatch = 0; const char *nptr = SvPV_nolen(obj); if (nptr) { char *endptr; long long v; errno = 0; v = strtoll(nptr, &endptr,0); if (errno == ERANGE) { errno = 0; return SWIG_OverflowError; } else { if (*endptr == '\0') { if (val) *val = v; return SWIG_Str2NumCast(SWIG_OK); } } } if (!dispatch) { const double mant_max = 1LL << DBL_MANT_DIG; const double mant_min = -mant_max; double d; int res = SWIG_AddCast(SWIG_AsVal_double SWIG_PERL_CALL_ARGS_2(obj,&d)); if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, mant_min, mant_max)) { if (val) *val = (long long)(d); return res; } } } return SWIG_TypeError; } #endif #include #if defined(_MSC_VER) || defined(__BORLANDC__) || defined(_WATCOM) # ifndef snprintf # define snprintf _snprintf # endif #endif #ifdef SWIG_LONG_LONG_AVAILABLE SWIGINTERNINLINE SV * SWIG_From_long_SS_long SWIG_PERL_DECL_ARGS_1(long long value) { SV *sv; if (IVSIZE >= sizeof(value) || (value >= IV_MIN && value <= IV_MAX)) sv = newSViv((IV)(value)); else { //sv = newSVpvf("%lld", value); doesn't work in non 64bit Perl char temp[256]; sprintf(temp, "%lld", value); sv = newSVpv(temp, 0); } return sv_2mortal(sv); } #endif SWIGINTERN swig_type_info* SWIG_pchar_descriptor(void) { static int init = 0; static swig_type_info* info = 0; if (!init) { info = SWIG_TypeQuery("_p_char"); init = 1; } return info; } SWIGINTERN int SWIG_AsCharPtrAndSize(SV *obj, char** cptr, size_t* psize, int *alloc) { if (SvMAGICAL(obj)) { SV *tmp = sv_newmortal(); SvSetSV(tmp, obj); obj = tmp; } if (SvPOK(obj)) { STRLEN len = 0; char *cstr = SvPV(obj, len); size_t size = len + 1; if (cptr) { if (alloc) { if (*alloc == SWIG_NEWOBJ) { *cptr = (char *)memcpy((char *)malloc((size)*sizeof(char)), cstr, sizeof(char)*(size)); } else { *cptr = cstr; *alloc = SWIG_OLDOBJ; } } } if (psize) *psize = size; return SWIG_OK; } else { swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); if (pchar_descriptor) { char* vptr = 0; if (SWIG_ConvertPtr(obj, (void**)&vptr, pchar_descriptor, 0) == SWIG_OK) { if (cptr) *cptr = vptr; if (psize) *psize = vptr ? (strlen(vptr) + 1) : 0; if (alloc) *alloc = SWIG_OLDOBJ; return SWIG_OK; } } } return SWIG_TypeError; } SWIGINTERN int SWIG_AsVal_long SWIG_PERL_DECL_ARGS_2(SV *obj, long* val) { if (SvUOK(obj)) { UV v = SvUV(obj); if (UVSIZE < sizeof(*val) || v <= LONG_MAX) { if (val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else if (SvIOK(obj)) { IV v = SvIV(obj); if (IVSIZE <= sizeof(*val) || (v >= LONG_MIN && v <= LONG_MAX)) { if(val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else { int dispatch = 0; const char *nptr = SvPV_nolen(obj); if (nptr) { char *endptr; long v; errno = 0; v = strtol(nptr, &endptr,0); if (errno == ERANGE) { errno = 0; return SWIG_OverflowError; } else { if (*endptr == '\0') { if (val) *val = v; return SWIG_Str2NumCast(SWIG_OK); } } } if (!dispatch) { double d; int res = SWIG_AddCast(SWIG_AsVal_double SWIG_PERL_CALL_ARGS_2(obj,&d)); if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, LONG_MIN, LONG_MAX)) { if (val) *val = (long)(d); return res; } } } return SWIG_TypeError; } SWIGINTERN int SWIG_AsVal_int SWIG_PERL_DECL_ARGS_2(SV * obj, int *val) { long v; int res = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(obj, &v); if (SWIG_IsOK(res)) { if ((v < INT_MIN || v > INT_MAX)) { return SWIG_OverflowError; } else { if (val) *val = (int)(v); } } return res; } #ifdef SWIG_LONG_LONG_AVAILABLE SWIGINTERNINLINE SV * SWIG_From_unsigned_SS_long_SS_long SWIG_PERL_DECL_ARGS_1(unsigned long long value) { SV *sv; if (UVSIZE >= sizeof(value) || value <= UV_MAX) sv = newSVuv((UV)(value)); else { //sv = newSVpvf("%llu", value); doesn't work in non 64bit Perl char temp[256]; sprintf(temp, "%llu", value); sv = newSVpv(temp, 0); } return sv_2mortal(sv); } #endif SWIGINTERNINLINE SV * SWIG_From_long SWIG_PERL_DECL_ARGS_1(long value) { SV *sv; if (IVSIZE >= sizeof(value) || (value >= IV_MIN && value <= IV_MAX)) sv = newSViv(value); else sv = newSVpvf("%ld", value); return sv_2mortal(sv); } typedef CdioList_t IsoStatList_t; typedef iso9660_stat_t IsoStat_t; SWIGINTERN int SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val) { if (SvUOK(obj)) { UV v = SvUV(obj); if (UVSIZE <= sizeof(*val) || v <= ULONG_MAX) { if (val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else if (SvIOK(obj)) { IV v = SvIV(obj); if (v >= 0 && (IVSIZE <= sizeof(*val) || v <= ULONG_MAX)) { if (val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else { int dispatch = 0; const char *nptr = SvPV_nolen(obj); if (nptr) { char *endptr; unsigned long v; errno = 0; v = strtoul(nptr, &endptr,0); if (errno == ERANGE) { errno = 0; return SWIG_OverflowError; } else { if (*endptr == '\0') { if (val) *val = v; return SWIG_Str2NumCast(SWIG_OK); } } } if (!dispatch) { double d; int res = SWIG_AddCast(SWIG_AsVal_double SWIG_PERL_CALL_ARGS_2(obj,&d)); if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, ULONG_MAX)) { if (val) *val = (unsigned long)(d); return res; } } } return SWIG_TypeError; } SWIGINTERN int SWIG_AsVal_unsigned_SS_char SWIG_PERL_DECL_ARGS_2(SV * obj, unsigned char *val) { unsigned long v; int res = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(obj, &v); if (SWIG_IsOK(res)) { if ((v > UCHAR_MAX)) { return SWIG_OverflowError; } else { if (val) *val = (unsigned char)(v); } } return res; } SWIGINTERN int SWIG_AsVal_unsigned_SS_int SWIG_PERL_DECL_ARGS_2(SV * obj, unsigned int *val) { unsigned long v; int res = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(obj, &v); if (SWIG_IsOK(res)) { if ((v > UINT_MAX)) { return SWIG_OverflowError; } else { if (val) *val = (unsigned int)(v); } } return res; } SWIGINTERNINLINE SV * SWIG_From_bool SWIG_PERL_DECL_ARGS_1(bool value) { return boolSV(value); } typedef long int my_ssize_t; typedef char *buf_t; buf_t seek_read (const iso9660_t *p_iso, lsn_t start, long int i_size, /*out*/ my_ssize_t *pi_size) { char *p_buf = calloc(ISO_BLOCKSIZE, i_size); *pi_size = iso9660_iso_seek_read(p_iso, p_buf, start, i_size); return p_buf; } iso9660_pvd_t *fs_read_pvd ( const CdIo_t *p_cdio ) { static iso9660_pvd_t pvd; bool b_ok = iso9660_fs_read_pvd ( p_cdio, &pvd ); if (!b_ok) return NULL; return &pvd; } iso9660_pvd_t *ifs_read_pvd ( const iso9660_t *p_iso ) { static iso9660_pvd_t pvd; bool b_ok = iso9660_ifs_read_pvd ( p_iso, &pvd ); if (!b_ok) return NULL; return &pvd; } iso9660_dtime_t * set_dtime ( int tm_sec, int tm_min, int tm_hour, int tm_mday, int tm_mon, int tm_year) { struct tm tm = { tm_sec, tm_min, tm_hour, tm_mday, tm_mon, tm_year, 0, 0, 0 }; static iso9660_dtime_t dtime; iso9660_set_dtime (&tm, &dtime); return &dtime; } iso9660_ltime_t * set_ltime ( int tm_sec, int tm_min, int tm_hour, int tm_mday, int tm_mon, int tm_year) { struct tm tm = { tm_sec, tm_min, tm_hour, tm_mday, tm_mon, tm_year, 0, 0, 0 }; static iso9660_ltime_t ldate; iso9660_set_ltime (&tm, &ldate); return &ldate; } SWIGINTERN int SWIG_AsVal_bool SWIG_PERL_DECL_ARGS_2(SV *obj, bool* val) { if (obj == &PL_sv_yes) { if (val) *val = true; return SWIG_OK; } else if (obj == &PL_sv_no) { if (val) *val = false; return SWIG_OK; } else { if (val) *val = SvTRUE(obj) ? true : false; return SWIG_AddCast(SWIG_OK); } } SWIGINTERNINLINE SV * SWIG_From_int SWIG_PERL_DECL_ARGS_1(int value) { return SWIG_From_long SWIG_PERL_CALL_ARGS_1(value); } bool get_dtime (const iso9660_dtime_t *dtime, bool use_localtime, int *tm_sec, int *tm_min, int *tm_hour, int *tm_mday, int *tm_mon, int *tm_year, int *tm_wday, int *tm_yday, int *tm_isdst) { struct tm tm; bool b_okay = iso9660_get_dtime (dtime, use_localtime, &tm); if (b_okay) { *tm_sec = tm.tm_sec; *tm_min = tm.tm_min; *tm_hour = tm.tm_hour; *tm_mon = tm.tm_mon; *tm_mday = tm.tm_mday; *tm_year = tm.tm_year; *tm_wday = tm.tm_wday; *tm_yday = tm.tm_yday; *tm_isdst = tm.tm_isdst; } return b_okay; } bool get_ltime (const iso9660_ltime_t *p_ldate, int *tm_sec, int *tm_min, int *tm_hour, int *tm_mday, int *tm_mon, int *tm_year, int *tm_wday, int *tm_yday, int *tm_isdst) { struct tm tm; bool b_okay = iso9660_get_ltime (p_ldate, &tm); if (b_okay) { *tm_sec = tm.tm_sec; *tm_min = tm.tm_min; *tm_hour = tm.tm_hour; *tm_mon = tm.tm_mon; *tm_mday = tm.tm_mday; *tm_year = tm.tm_year; *tm_wday = tm.tm_wday; *tm_yday = tm.tm_yday; *tm_isdst = tm.tm_isdst; } return b_okay; } SWIGINTERNINLINE SV * SWIG_FromCharPtrAndSize(const char* carray, size_t size) { SV *obj = sv_newmortal(); if (carray) { sv_setpvn(obj, carray, size); } else { sv_setsv(obj, &PL_sv_undef); } return obj; } SWIGINTERNINLINE SV * SWIG_FromCharPtr(const char *cptr) { return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0)); } char * name_translate(const char *psz_oldname) { char *psz_newname=calloc(sizeof(char), strlen(psz_oldname)+1); iso9660_name_translate(psz_oldname, psz_newname); return psz_newname; } char * name_translate_ext(const char *psz_oldname, uint8_t i_joliet_level) { char *psz_newname=calloc(sizeof(char), strlen(psz_oldname)+1); iso9660_name_translate_ext(psz_oldname, psz_newname, i_joliet_level); return psz_newname; } #ifdef SWIG_LONG_LONG_AVAILABLE SWIGINTERN int SWIG_AsVal_unsigned_SS_long_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long long *val) { if (SvUOK(obj)) { /* pretty sure this should be conditional on * (UVSIZE <= sizeof(*val) || v <= ULLONG_MAX) */ if (val) *val = SvUV(obj); return SWIG_OK; } else if (SvIOK(obj)) { IV v = SvIV(obj); if (v >= 0 && (IVSIZE <= sizeof(*val) || v <= ULLONG_MAX)) { if (val) *val = v; return SWIG_OK; } else { return SWIG_OverflowError; } } else { int dispatch = 0; const char *nptr = SvPV_nolen(obj); if (nptr) { char *endptr; unsigned long long v; errno = 0; v = strtoull(nptr, &endptr,0); if (errno == ERANGE) { errno = 0; return SWIG_OverflowError; } else { if (*endptr == '\0') { if (val) *val = v; return SWIG_Str2NumCast(SWIG_OK); } } } if (!dispatch) { const double mant_max = 1LL << DBL_MANT_DIG; double d; int res = SWIG_AddCast(SWIG_AsVal_double SWIG_PERL_CALL_ARGS_2(obj,&d)); if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, mant_max)) { if (val) *val = (unsigned long long)(d); return res; } } } return SWIG_TypeError; } #endif SWIGINTERNINLINE int SWIG_AsVal_size_t SWIG_PERL_DECL_ARGS_2(SV * obj, size_t *val) { int res = SWIG_TypeError; #ifdef SWIG_LONG_LONG_AVAILABLE if (sizeof(size_t) <= sizeof(unsigned long)) { #endif unsigned long v; res = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(obj, val ? &v : 0); if (SWIG_IsOK(res) && val) *val = (size_t)(v); #ifdef SWIG_LONG_LONG_AVAILABLE } else if (sizeof(size_t) <= sizeof(unsigned long long)) { unsigned long long v; res = SWIG_AsVal_unsigned_SS_long_SS_long SWIG_PERL_CALL_ARGS_2(obj, val ? &v : 0); if (SWIG_IsOK(res) && val) *val = (size_t)(v); } #endif return res; } char * strncpy_pad(const char src[], size_t len, enum strncpy_pad_check _check) { char *dst = calloc(sizeof(char), len+1); return iso9660_strncpy_pad(dst, src, len, _check); } IsoStatList_t *fs_readdir (CdIo_t *p_cdio, const char psz_path[]) { CdioList_t *p_statlist = iso9660_fs_readdir (p_cdio, psz_path); return p_statlist; } IsoStatList_t *ifs_readdir (iso9660_t *p_iso, const char psz_path[]) { CdioList_t *p_statlist = iso9660_ifs_readdir (p_iso, psz_path); return p_statlist; } char * ifs_get_application_id(iso9660_t *p_iso) { char *psz; bool ok = iso9660_ifs_get_application_id(p_iso, &psz); if (!ok) return NULL; return psz; } SWIGINTERNINLINE SV * SWIG_From_unsigned_SS_long SWIG_PERL_DECL_ARGS_1(unsigned long value) { SV *sv; if (UVSIZE >= sizeof(value) || value <= UV_MAX) sv = newSVuv(value); else sv = newSVpvf("%lu", value); return sv_2mortal(sv); } SWIGINTERNINLINE SV * SWIG_From_unsigned_SS_char SWIG_PERL_DECL_ARGS_1(unsigned char value) { return SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1(value); } char * ifs_get_preparer_id(iso9660_t *p_iso) { char *psz; bool ok = iso9660_ifs_get_preparer_id(p_iso, &psz); if (!ok) return NULL; return psz; } char * ifs_get_publisher_id(iso9660_t *p_iso) { char *psz; bool ok = iso9660_ifs_get_publisher_id(p_iso, &psz); if (!ok) return NULL; return psz; } char * ifs_get_system_id(iso9660_t *p_iso) { char *psz; bool ok = iso9660_ifs_get_system_id(p_iso, &psz); if (!ok) return NULL; return psz; } char * ifs_get_volume_id(iso9660_t *p_iso) { char *psz; bool ok = iso9660_ifs_get_volume_id(p_iso, &psz); if (!ok) return NULL; return psz; } char * ifs_get_volumeset_id(iso9660_t *p_iso) { char *psz; bool ok = iso9660_ifs_get_volumeset_id(p_iso, &psz); if (!ok) return NULL; return psz; } SWIGINTERNINLINE SV * SWIG_From_unsigned_SS_int SWIG_PERL_DECL_ARGS_1(unsigned int value) { return SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1(value); } #ifdef __cplusplus extern "C" { #endif #ifdef PERL_OBJECT #define MAGIC_CLASS _wrap_perliso9660_var:: class _wrap_perliso9660_var : public CPerlObj { public: #else #define MAGIC_CLASS #endif SWIGCLASS_STATIC int swig_magic_readonly(pTHX_ SV *SWIGUNUSEDPARM(sv), MAGIC *SWIGUNUSEDPARM(mg)) { MAGIC_PPERL croak("Value is read-only."); return 0; } #ifdef PERL_OBJECT }; #endif #ifdef __cplusplus } #endif #ifdef __cplusplus extern "C" { #endif XS(_wrap_imaxdiv_t_quot_set) { { imaxdiv_t *arg1 = (imaxdiv_t *) 0 ; long long arg2 ; void *argp1 = 0 ; int res1 = 0 ; long long val2 ; int ecode2 = 0 ; int argvi = 0; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: imaxdiv_t_quot_set(self,quot);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_imaxdiv_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "imaxdiv_t_quot_set" "', argument " "1"" of type '" "imaxdiv_t *""'"); } arg1 = (imaxdiv_t *)(argp1); ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "imaxdiv_t_quot_set" "', argument " "2"" of type '" "long long""'"); } arg2 = (long long)(val2); if (arg1) (arg1)->quot = arg2; ST(argvi) = sv_newmortal(); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_imaxdiv_t_quot_get) { { imaxdiv_t *arg1 = (imaxdiv_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; long long result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: imaxdiv_t_quot_get(self);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_imaxdiv_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "imaxdiv_t_quot_get" "', argument " "1"" of type '" "imaxdiv_t *""'"); } arg1 = (imaxdiv_t *)(argp1); result = (long long) ((arg1)->quot); ST(argvi) = SWIG_From_long_SS_long SWIG_PERL_CALL_ARGS_1((long long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_imaxdiv_t_rem_set) { { imaxdiv_t *arg1 = (imaxdiv_t *) 0 ; long long arg2 ; void *argp1 = 0 ; int res1 = 0 ; long long val2 ; int ecode2 = 0 ; int argvi = 0; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: imaxdiv_t_rem_set(self,rem);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_imaxdiv_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "imaxdiv_t_rem_set" "', argument " "1"" of type '" "imaxdiv_t *""'"); } arg1 = (imaxdiv_t *)(argp1); ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "imaxdiv_t_rem_set" "', argument " "2"" of type '" "long long""'"); } arg2 = (long long)(val2); if (arg1) (arg1)->rem = arg2; ST(argvi) = sv_newmortal(); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_imaxdiv_t_rem_get) { { imaxdiv_t *arg1 = (imaxdiv_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; long long result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: imaxdiv_t_rem_get(self);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_imaxdiv_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "imaxdiv_t_rem_get" "', argument " "1"" of type '" "imaxdiv_t *""'"); } arg1 = (imaxdiv_t *)(argp1); result = (long long) ((arg1)->rem); ST(argvi) = SWIG_From_long_SS_long SWIG_PERL_CALL_ARGS_1((long long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_new_imaxdiv_t) { { int argvi = 0; imaxdiv_t *result = 0 ; dXSARGS; if ((items < 0) || (items > 0)) { SWIG_croak("Usage: new_imaxdiv_t();"); } result = (imaxdiv_t *)calloc(1, sizeof(imaxdiv_t)); ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_imaxdiv_t, SWIG_OWNER | SWIG_SHADOW); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_delete_imaxdiv_t) { { imaxdiv_t *arg1 = (imaxdiv_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: delete_imaxdiv_t(self);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_imaxdiv_t, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_imaxdiv_t" "', argument " "1"" of type '" "imaxdiv_t *""'"); } arg1 = (imaxdiv_t *)(argp1); free((char *) arg1); ST(argvi) = sv_newmortal(); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_imaxabs) { { intmax_t arg1 ; long long val1 ; int ecode1 = 0 ; int argvi = 0; intmax_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: imaxabs(n);"); } ecode1 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "imaxabs" "', argument " "1"" of type '" "intmax_t""'"); } arg1 = (intmax_t)(val1); result = (intmax_t)imaxabs(arg1); ST(argvi) = SWIG_From_long_SS_long SWIG_PERL_CALL_ARGS_1((long long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_imaxdiv) { { intmax_t arg1 ; intmax_t arg2 ; long long val1 ; int ecode1 = 0 ; long long val2 ; int ecode2 = 0 ; int argvi = 0; imaxdiv_t result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: imaxdiv(numer,denom);"); } ecode1 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "imaxdiv" "', argument " "1"" of type '" "intmax_t""'"); } arg1 = (intmax_t)(val1); ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "imaxdiv" "', argument " "2"" of type '" "intmax_t""'"); } arg2 = (intmax_t)(val2); result = imaxdiv(arg1,arg2); ST(argvi) = SWIG_NewPointerObj((imaxdiv_t *)memcpy((imaxdiv_t *)malloc(sizeof(imaxdiv_t)),&result,sizeof(imaxdiv_t)), SWIGTYPE_p_imaxdiv_t, SWIG_POINTER_OWN | SWIG_SHADOW); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_strtoimax) { { char *arg1 = (char *) 0 ; char **arg2 = (char **) 0 ; int arg3 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; int val3 ; int ecode3 = 0 ; int argvi = 0; intmax_t result; dXSARGS; if ((items < 3) || (items > 3)) { SWIG_croak("Usage: strtoimax(nptr,endptr,base);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strtoimax" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_p_char, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "strtoimax" "', argument " "2"" of type '" "char **""'"); } arg2 = (char **)(argp2); ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strtoimax" "', argument " "3"" of type '" "int""'"); } arg3 = (int)(val3); result = (intmax_t)strtoimax((char const *)arg1,arg2,arg3); ST(argvi) = SWIG_From_long_SS_long SWIG_PERL_CALL_ARGS_1((long long)(result)); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_strtoumax) { { char *arg1 = (char *) 0 ; char **arg2 = (char **) 0 ; int arg3 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; int val3 ; int ecode3 = 0 ; int argvi = 0; uintmax_t result; dXSARGS; if ((items < 3) || (items > 3)) { SWIG_croak("Usage: strtoumax(nptr,endptr,base);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strtoumax" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_p_char, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "strtoumax" "', argument " "2"" of type '" "char **""'"); } arg2 = (char **)(argp2); ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strtoumax" "', argument " "3"" of type '" "int""'"); } arg3 = (int)(val3); result = (uintmax_t)strtoumax((char const *)arg1,arg2,arg3); ST(argvi) = SWIG_From_unsigned_SS_long_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long long)(result)); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_open_iso) { { char *arg1 = (char *) 0 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; int argvi = 0; iso9660_t *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: open_iso(psz_path);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "open_iso" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); result = (iso9660_t *)iso9660_open((char const *)arg1); ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_iso9660_t, 0 | 0); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_open_ext) { { char *arg1 = (char *) 0 ; iso_extension_mask_t arg2 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; unsigned char val2 ; int ecode2 = 0 ; int argvi = 0; iso9660_t *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: open_ext(psz_path,iso_extension_mask);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "open_ext" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); ecode2 = SWIG_AsVal_unsigned_SS_char SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "open_ext" "', argument " "2"" of type '" "iso_extension_mask_t""'"); } arg2 = (iso_extension_mask_t)(val2); result = (iso9660_t *)iso9660_open_ext((char const *)arg1,arg2); ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_iso9660_t, 0 | 0); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_open_fuzzy) { { char *arg1 = (char *) 0 ; unsigned int arg2 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; iso9660_t *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: open_fuzzy(psz_path,i_fuzz);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "open_fuzzy" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "open_fuzzy" "', argument " "2"" of type '" "unsigned int""'"); } arg2 = (unsigned int)(val2); result = (iso9660_t *)iso9660_open_fuzzy((char const *)arg1,arg2); ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_iso9660_t, 0 | 0); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_iso9660_open_fuzzy_ext) { { char *arg1 = (char *) 0 ; iso_extension_mask_t arg2 ; unsigned int arg3 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; unsigned char val2 ; int ecode2 = 0 ; unsigned int val3 ; int ecode3 = 0 ; int argvi = 0; iso9660_t *result = 0 ; dXSARGS; if ((items < 3) || (items > 3)) { SWIG_croak("Usage: iso9660_open_fuzzy_ext(psz_path,iso_extension_mask,i_fuzz);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "iso9660_open_fuzzy_ext" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); ecode2 = SWIG_AsVal_unsigned_SS_char SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "iso9660_open_fuzzy_ext" "', argument " "2"" of type '" "iso_extension_mask_t""'"); } arg2 = (iso_extension_mask_t)(val2); ecode3 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "iso9660_open_fuzzy_ext" "', argument " "3"" of type '" "unsigned int""'"); } arg3 = (unsigned int)(val3); result = (iso9660_t *)iso9660_open_fuzzy_ext((char const *)arg1,arg2,arg3); ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_iso9660_t, 0 | 0); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_ifs_fuzzy_read_superblock) { { iso9660_t *arg1 = (iso9660_t *) 0 ; iso_extension_mask_t arg2 ; unsigned int arg3 ; void *argp1 = 0 ; int res1 = 0 ; unsigned char val2 ; int ecode2 = 0 ; unsigned int val3 ; int ecode3 = 0 ; int argvi = 0; bool result; dXSARGS; if ((items < 3) || (items > 3)) { SWIG_croak("Usage: ifs_fuzzy_read_superblock(p_iso,iso_extension_mask,i_fuzz);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ifs_fuzzy_read_superblock" "', argument " "1"" of type '" "iso9660_t *""'"); } arg1 = (iso9660_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_char SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "ifs_fuzzy_read_superblock" "', argument " "2"" of type '" "iso_extension_mask_t""'"); } arg2 = (iso_extension_mask_t)(val2); ecode3 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "ifs_fuzzy_read_superblock" "', argument " "3"" of type '" "unsigned int""'"); } arg3 = (unsigned int)(val3); result = (bool)iso9660_ifs_fuzzy_read_superblock(arg1,arg2,arg3); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_close) { { iso9660_t *arg1 = (iso9660_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; bool result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: close(p_iso);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "close" "', argument " "1"" of type '" "iso9660_t *""'"); } arg1 = (iso9660_t *)(argp1); result = (bool)iso9660_close(arg1); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_seek_read) { { iso9660_t *arg1 = (iso9660_t *) 0 ; lsn_t arg2 ; long arg3 ; my_ssize_t *arg4 = (my_ssize_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; long val3 ; int ecode3 = 0 ; my_ssize_t temp4 ; int res4 = SWIG_TMPOBJ ; int argvi = 0; buf_t result; dXSARGS; arg4 = &temp4; if ((items < 3) || (items > 3)) { SWIG_croak("Usage: seek_read(p_iso,start,i_size);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "seek_read" "', argument " "1"" of type '" "iso9660_t const *""'"); } arg1 = (iso9660_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "seek_read" "', argument " "2"" of type '" "lsn_t""'"); } arg2 = (lsn_t)(val2); ecode3 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "seek_read" "', argument " "3"" of type '" "long""'"); } arg3 = (long)(val3); result = (buf_t)seek_read((iso9660_t const *)arg1,arg2,arg3,arg4); { /* result is of type buf_t */ ST(argvi) = sv_newmortal(); if (result) { /* I don't yet know how to pick up arg4 another way. THIS MEANS ARG3 MUST ALWAYS BE THE SIZE. */ sv_setpvn((SV*)ST(argvi++), (char *) result, *arg4); /* Don't leak memory. return value was malloc'd by libcdio. */ /* free(result); */ } else { sv_setsv((SV*)ST(argvi++), &PL_sv_undef); } } if (SWIG_IsTmpObj(res4)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((*arg4)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_long, new_flags); argvi++ ; } free((char*)result); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_fs_read_pvd) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; iso9660_pvd_t *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: fs_read_pvd(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "fs_read_pvd" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); result = (iso9660_pvd_t *)fs_read_pvd((CdIo_t const *)arg1); ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_iso9660_pvd_t, 0 | 0); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_ifs_read_pvd) { { iso9660_t *arg1 = (iso9660_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; iso9660_pvd_t *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: ifs_read_pvd(p_iso);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ifs_read_pvd" "', argument " "1"" of type '" "iso9660_t const *""'"); } arg1 = (iso9660_t *)(argp1); result = (iso9660_pvd_t *)ifs_read_pvd((iso9660_t const *)arg1); ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_iso9660_pvd_t, 0 | 0); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_fs_read_superblock) { { CdIo_t *arg1 = (CdIo_t *) 0 ; iso_extension_mask_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; unsigned char val2 ; int ecode2 = 0 ; int argvi = 0; bool result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: fs_read_superblock(p_cdio,iso_extension_mask);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "fs_read_superblock" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_char SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "fs_read_superblock" "', argument " "2"" of type '" "iso_extension_mask_t""'"); } arg2 = (iso_extension_mask_t)(val2); result = (bool)iso9660_fs_read_superblock(arg1,arg2); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_ifs_read_superblock) { { iso9660_t *arg1 = (iso9660_t *) 0 ; iso_extension_mask_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; unsigned char val2 ; int ecode2 = 0 ; int argvi = 0; bool result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: ifs_read_superblock(p_iso,iso_extension_mask);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ifs_read_superblock" "', argument " "1"" of type '" "iso9660_t *""'"); } arg1 = (iso9660_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_char SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "ifs_read_superblock" "', argument " "2"" of type '" "iso_extension_mask_t""'"); } arg2 = (iso_extension_mask_t)(val2); result = (bool)iso9660_ifs_read_superblock(arg1,arg2); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_set_dtime) { { int arg1 ; int arg2 ; int arg3 ; int arg4 ; int arg5 ; int arg6 ; int val1 ; int ecode1 = 0 ; int val2 ; int ecode2 = 0 ; int val3 ; int ecode3 = 0 ; int val4 ; int ecode4 = 0 ; int val5 ; int ecode5 = 0 ; int val6 ; int ecode6 = 0 ; int argvi = 0; iso9660_dtime_t *result = 0 ; dXSARGS; if ((items < 6) || (items > 6)) { SWIG_croak("Usage: set_dtime(tm_sec,tm_min,tm_hour,tm_mday,tm_mon,tm_year);"); } ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "set_dtime" "', argument " "1"" of type '" "int""'"); } arg1 = (int)(val1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "set_dtime" "', argument " "2"" of type '" "int""'"); } arg2 = (int)(val2); ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "set_dtime" "', argument " "3"" of type '" "int""'"); } arg3 = (int)(val3); ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "set_dtime" "', argument " "4"" of type '" "int""'"); } arg4 = (int)(val4); ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5); if (!SWIG_IsOK(ecode5)) { SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "set_dtime" "', argument " "5"" of type '" "int""'"); } arg5 = (int)(val5); ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6); if (!SWIG_IsOK(ecode6)) { SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "set_dtime" "', argument " "6"" of type '" "int""'"); } arg6 = (int)(val6); result = (iso9660_dtime_t *)set_dtime(arg1,arg2,arg3,arg4,arg5,arg6); ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_iso9660_dtime_t, 0 | 0); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_set_ltime) { { int arg1 ; int arg2 ; int arg3 ; int arg4 ; int arg5 ; int arg6 ; int val1 ; int ecode1 = 0 ; int val2 ; int ecode2 = 0 ; int val3 ; int ecode3 = 0 ; int val4 ; int ecode4 = 0 ; int val5 ; int ecode5 = 0 ; int val6 ; int ecode6 = 0 ; int argvi = 0; iso9660_ltime_t *result = 0 ; dXSARGS; if ((items < 6) || (items > 6)) { SWIG_croak("Usage: set_ltime(tm_sec,tm_min,tm_hour,tm_mday,tm_mon,tm_year);"); } ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "set_ltime" "', argument " "1"" of type '" "int""'"); } arg1 = (int)(val1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "set_ltime" "', argument " "2"" of type '" "int""'"); } arg2 = (int)(val2); ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "set_ltime" "', argument " "3"" of type '" "int""'"); } arg3 = (int)(val3); ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "set_ltime" "', argument " "4"" of type '" "int""'"); } arg4 = (int)(val4); ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5); if (!SWIG_IsOK(ecode5)) { SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "set_ltime" "', argument " "5"" of type '" "int""'"); } arg5 = (int)(val5); ecode6 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(5), &val6); if (!SWIG_IsOK(ecode6)) { SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "set_ltime" "', argument " "6"" of type '" "int""'"); } arg6 = (int)(val6); result = (iso9660_ltime_t *)set_ltime(arg1,arg2,arg3,arg4,arg5,arg6); ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_iso9660_ltime_t, 0 | 0); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_dtime) { { iso9660_dtime_t *arg1 = (iso9660_dtime_t *) 0 ; bool arg2 ; int *arg3 = (int *) 0 ; int *arg4 = (int *) 0 ; int *arg5 = (int *) 0 ; int *arg6 = (int *) 0 ; int *arg7 = (int *) 0 ; int *arg8 = (int *) 0 ; int *arg9 = (int *) 0 ; int *arg10 = (int *) 0 ; int *arg11 = (int *) 0 ; void *argp1 = 0 ; int res1 = 0 ; bool val2 ; int ecode2 = 0 ; int temp3 ; int res3 = SWIG_TMPOBJ ; int temp4 ; int res4 = SWIG_TMPOBJ ; int temp5 ; int res5 = SWIG_TMPOBJ ; int temp6 ; int res6 = SWIG_TMPOBJ ; int temp7 ; int res7 = SWIG_TMPOBJ ; int temp8 ; int res8 = SWIG_TMPOBJ ; int temp9 ; int res9 = SWIG_TMPOBJ ; int temp10 ; int res10 = SWIG_TMPOBJ ; int temp11 ; int res11 = SWIG_TMPOBJ ; int argvi = 0; bool result; dXSARGS; arg3 = &temp3; arg4 = &temp4; arg5 = &temp5; arg6 = &temp6; arg7 = &temp7; arg8 = &temp8; arg9 = &temp9; arg10 = &temp10; arg11 = &temp11; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: get_dtime(dtime,use_localtime);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_dtime_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_dtime" "', argument " "1"" of type '" "iso9660_dtime_t const *""'"); } arg1 = (iso9660_dtime_t *)(argp1); ecode2 = SWIG_AsVal_bool SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_dtime" "', argument " "2"" of type '" "bool""'"); } arg2 = (bool)(val2); result = (bool)get_dtime((iso9660_dtime_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; if (SWIG_IsTmpObj(res3)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg3)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res4)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg4)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res5)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg5)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res6)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg6)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res6) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg6), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res7)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg7)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res7) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg7), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res8)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg8)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res8) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg8), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res9)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg9)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res9) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg9), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res10)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg10)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res10) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg10), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res11)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg11)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res11) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg11), SWIGTYPE_p_int, new_flags); argvi++ ; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_ltime) { { iso9660_ltime_t *arg1 = (iso9660_ltime_t *) 0 ; int *arg2 = (int *) 0 ; int *arg3 = (int *) 0 ; int *arg4 = (int *) 0 ; int *arg5 = (int *) 0 ; int *arg6 = (int *) 0 ; int *arg7 = (int *) 0 ; int *arg8 = (int *) 0 ; int *arg9 = (int *) 0 ; int *arg10 = (int *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int temp2 ; int res2 = SWIG_TMPOBJ ; int temp3 ; int res3 = SWIG_TMPOBJ ; int temp4 ; int res4 = SWIG_TMPOBJ ; int temp5 ; int res5 = SWIG_TMPOBJ ; int temp6 ; int res6 = SWIG_TMPOBJ ; int temp7 ; int res7 = SWIG_TMPOBJ ; int temp8 ; int res8 = SWIG_TMPOBJ ; int temp9 ; int res9 = SWIG_TMPOBJ ; int temp10 ; int res10 = SWIG_TMPOBJ ; int argvi = 0; bool result; dXSARGS; arg2 = &temp2; arg3 = &temp3; arg4 = &temp4; arg5 = &temp5; arg6 = &temp6; arg7 = &temp7; arg8 = &temp8; arg9 = &temp9; arg10 = &temp10; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_ltime(dtime);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_ltime_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_ltime" "', argument " "1"" of type '" "iso9660_ltime_t const *""'"); } arg1 = (iso9660_ltime_t *)(argp1); result = (bool)get_ltime((iso9660_ltime_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; if (SWIG_IsTmpObj(res2)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg2)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res3)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg3)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res4)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg4)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res5)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg5)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res6)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg6)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res6) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg6), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res7)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg7)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res7) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg7), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res8)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg8)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res8) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg8), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res9)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg9)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res9) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg9), SWIGTYPE_p_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res10)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg10)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res10) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg10), SWIGTYPE_p_int, new_flags); argvi++ ; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_is_dchar) { { int arg1 ; int val1 ; int ecode1 = 0 ; int argvi = 0; bool result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: is_dchar(c);"); } ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "is_dchar" "', argument " "1"" of type '" "int""'"); } arg1 = (int)(val1); result = (bool)iso9660_isdchar(arg1); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_is_achar) { { int arg1 ; int val1 ; int ecode1 = 0 ; int argvi = 0; bool result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: is_achar(c);"); } ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "is_achar" "', argument " "1"" of type '" "int""'"); } arg1 = (int)(val1); result = (bool)iso9660_isachar(arg1); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_name_translate) { { char *arg1 = (char *) 0 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: name_translate(psz_oldname);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "name_translate" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); result = (char *)name_translate((char const *)arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); free((char*)result); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_name_translate_ext) { { char *arg1 = (char *) 0 ; unsigned char arg2 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; unsigned char val2 ; int ecode2 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: name_translate_ext(psz_oldname,i_joliet_level);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "name_translate_ext" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); ecode2 = SWIG_AsVal_unsigned_SS_char SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "name_translate_ext" "', argument " "2"" of type '" "unsigned char""'"); } arg2 = (unsigned char)(val2); result = (char *)name_translate_ext((char const *)arg1,arg2); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); free((char*)result); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_strncpy_pad) { { char *arg1 ; size_t arg2 ; enum strncpy_pad_check arg3 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; size_t val2 ; int ecode2 = 0 ; int val3 ; int ecode3 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 3) || (items > 3)) { SWIG_croak("Usage: strncpy_pad(src,len,_check);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strncpy_pad" "', argument " "1"" of type '" "char const []""'"); } arg1 = (char *)(buf1); ecode2 = SWIG_AsVal_size_t SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strncpy_pad" "', argument " "2"" of type '" "size_t""'"); } arg2 = (size_t)(val2); ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strncpy_pad" "', argument " "3"" of type '" "enum strncpy_pad_check""'"); } arg3 = (enum strncpy_pad_check)(val3); result = (char *)strncpy_pad((char const (*))arg1,arg2,arg3); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); free((char*)result); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_dirname_valid_p) { { char *arg1 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; int argvi = 0; bool result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: dirname_valid_p(psz_path);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "dirname_valid_p" "', argument " "1"" of type '" "char const []""'"); } arg1 = (char *)(buf1); result = (bool)iso9660_dirname_valid_p((char const (*))arg1); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_pathname_isofy) { { char *arg1 ; unsigned int arg2 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: pathname_isofy(psz_path,i_version);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "pathname_isofy" "', argument " "1"" of type '" "char const []""'"); } arg1 = (char *)(buf1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "pathname_isofy" "', argument " "2"" of type '" "unsigned int""'"); } arg2 = (unsigned int)(val2); result = (char *)iso9660_pathname_isofy((char const (*))arg1,arg2); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); free((char*)result); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_pathname_valid_p) { { char *arg1 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; int argvi = 0; bool result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: pathname_valid_p(psz_path);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "pathname_valid_p" "', argument " "1"" of type '" "char const []""'"); } arg1 = (char *)(buf1); result = (bool)iso9660_pathname_valid_p((char const (*))arg1); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_fs_find_lsn) { { CdIo_t *arg1 = (CdIo_t *) 0 ; lsn_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; int argvi = 0; IsoStat_t *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: fs_find_lsn(p_cdio,i_lsn);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "fs_find_lsn" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "fs_find_lsn" "', argument " "2"" of type '" "lsn_t""'"); } arg2 = (lsn_t)(val2); result = (IsoStat_t *)iso9660_fs_find_lsn(arg1,arg2); { // result is of type IsoStatList_t iso9660_stat_t *p_statbuf = result; if (!result) goto out; PPCODE: /* Have Perl compute the length of the string using strlen() */ XPUSHs(sv_2mortal(newSVpv(p_statbuf->filename, 0))); XPUSHs(sv_2mortal(newSViv(p_statbuf->lsn))); XPUSHs(sv_2mortal(newSViv(p_statbuf->size))); XPUSHs(sv_2mortal(newSViv(p_statbuf->secsize))); XPUSHs(sv_2mortal(newSViv(p_statbuf->type))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_sec))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_min))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_hour))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mon))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_year))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_wday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_yday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_isdst))); argvi += 16; free (p_statbuf); out: ; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_ifs_find_lsn) { { iso9660_t *arg1 = (iso9660_t *) 0 ; lsn_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; int argvi = 0; IsoStat_t *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: ifs_find_lsn(p_iso,i_lsn);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ifs_find_lsn" "', argument " "1"" of type '" "iso9660_t *""'"); } arg1 = (iso9660_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "ifs_find_lsn" "', argument " "2"" of type '" "lsn_t""'"); } arg2 = (lsn_t)(val2); result = (IsoStat_t *)iso9660_ifs_find_lsn(arg1,arg2); { // result is of type IsoStatList_t iso9660_stat_t *p_statbuf = result; if (!result) goto out; PPCODE: /* Have Perl compute the length of the string using strlen() */ XPUSHs(sv_2mortal(newSVpv(p_statbuf->filename, 0))); XPUSHs(sv_2mortal(newSViv(p_statbuf->lsn))); XPUSHs(sv_2mortal(newSViv(p_statbuf->size))); XPUSHs(sv_2mortal(newSViv(p_statbuf->secsize))); XPUSHs(sv_2mortal(newSViv(p_statbuf->type))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_sec))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_min))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_hour))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mon))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_year))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_wday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_yday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_isdst))); argvi += 16; free (p_statbuf); out: ; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_fs_stat) { { CdIo_t *arg1 = (CdIo_t *) 0 ; char *arg2 ; void *argp1 = 0 ; int res1 = 0 ; int res2 ; char *buf2 = 0 ; int alloc2 = 0 ; int argvi = 0; IsoStat_t *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: fs_stat(p_cdio,psz_path);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "fs_stat" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "fs_stat" "', argument " "2"" of type '" "char const []""'"); } arg2 = (char *)(buf2); result = (IsoStat_t *)iso9660_fs_stat(arg1,(char const (*))arg2); { // result is of type IsoStatList_t iso9660_stat_t *p_statbuf = result; if (!result) goto out; PPCODE: /* Have Perl compute the length of the string using strlen() */ XPUSHs(sv_2mortal(newSVpv(p_statbuf->filename, 0))); XPUSHs(sv_2mortal(newSViv(p_statbuf->lsn))); XPUSHs(sv_2mortal(newSViv(p_statbuf->size))); XPUSHs(sv_2mortal(newSViv(p_statbuf->secsize))); XPUSHs(sv_2mortal(newSViv(p_statbuf->type))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_sec))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_min))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_hour))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mon))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_year))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_wday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_yday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_isdst))); argvi += 16; free (p_statbuf); out: ; } if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); XSRETURN(argvi); fail: if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); SWIG_croak_null(); } } XS(_wrap_fs_stat_translate) { { CdIo_t *arg1 = (CdIo_t *) 0 ; char *arg2 ; void *argp1 = 0 ; int res1 = 0 ; int res2 ; char *buf2 = 0 ; int alloc2 = 0 ; int argvi = 0; IsoStat_t *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: fs_stat_translate(p_cdio,psz_path);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "fs_stat_translate" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "fs_stat_translate" "', argument " "2"" of type '" "char const []""'"); } arg2 = (char *)(buf2); result = (IsoStat_t *)iso9660_fs_stat_translate(arg1,(char const (*))arg2); { // result is of type IsoStatList_t iso9660_stat_t *p_statbuf = result; if (!result) goto out; PPCODE: /* Have Perl compute the length of the string using strlen() */ XPUSHs(sv_2mortal(newSVpv(p_statbuf->filename, 0))); XPUSHs(sv_2mortal(newSViv(p_statbuf->lsn))); XPUSHs(sv_2mortal(newSViv(p_statbuf->size))); XPUSHs(sv_2mortal(newSViv(p_statbuf->secsize))); XPUSHs(sv_2mortal(newSViv(p_statbuf->type))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_sec))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_min))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_hour))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mon))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_year))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_wday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_yday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_isdst))); argvi += 16; free (p_statbuf); out: ; } if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); XSRETURN(argvi); fail: if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); SWIG_croak_null(); } } XS(_wrap_ifs_stat) { { iso9660_t *arg1 = (iso9660_t *) 0 ; char *arg2 ; void *argp1 = 0 ; int res1 = 0 ; int res2 ; char *buf2 = 0 ; int alloc2 = 0 ; int argvi = 0; IsoStat_t *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: ifs_stat(p_iso,psz_path);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ifs_stat" "', argument " "1"" of type '" "iso9660_t *""'"); } arg1 = (iso9660_t *)(argp1); res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ifs_stat" "', argument " "2"" of type '" "char const []""'"); } arg2 = (char *)(buf2); result = (IsoStat_t *)iso9660_ifs_stat(arg1,(char const (*))arg2); { // result is of type IsoStatList_t iso9660_stat_t *p_statbuf = result; if (!result) goto out; PPCODE: /* Have Perl compute the length of the string using strlen() */ XPUSHs(sv_2mortal(newSVpv(p_statbuf->filename, 0))); XPUSHs(sv_2mortal(newSViv(p_statbuf->lsn))); XPUSHs(sv_2mortal(newSViv(p_statbuf->size))); XPUSHs(sv_2mortal(newSViv(p_statbuf->secsize))); XPUSHs(sv_2mortal(newSViv(p_statbuf->type))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_sec))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_min))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_hour))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mon))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_year))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_wday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_yday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_isdst))); argvi += 16; free (p_statbuf); out: ; } if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); XSRETURN(argvi); fail: if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); SWIG_croak_null(); } } XS(_wrap_ifs_stat_translate) { { iso9660_t *arg1 = (iso9660_t *) 0 ; char *arg2 ; void *argp1 = 0 ; int res1 = 0 ; int res2 ; char *buf2 = 0 ; int alloc2 = 0 ; int argvi = 0; IsoStat_t *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: ifs_stat_translate(p_iso,psz_path);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ifs_stat_translate" "', argument " "1"" of type '" "iso9660_t *""'"); } arg1 = (iso9660_t *)(argp1); res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ifs_stat_translate" "', argument " "2"" of type '" "char const []""'"); } arg2 = (char *)(buf2); result = (IsoStat_t *)iso9660_ifs_stat_translate(arg1,(char const (*))arg2); { // result is of type IsoStatList_t iso9660_stat_t *p_statbuf = result; if (!result) goto out; PPCODE: /* Have Perl compute the length of the string using strlen() */ XPUSHs(sv_2mortal(newSVpv(p_statbuf->filename, 0))); XPUSHs(sv_2mortal(newSViv(p_statbuf->lsn))); XPUSHs(sv_2mortal(newSViv(p_statbuf->size))); XPUSHs(sv_2mortal(newSViv(p_statbuf->secsize))); XPUSHs(sv_2mortal(newSViv(p_statbuf->type))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_sec))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_min))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_hour))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mon))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_year))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_wday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_yday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_isdst))); argvi += 16; free (p_statbuf); out: ; } if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); XSRETURN(argvi); fail: if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); SWIG_croak_null(); } } XS(_wrap_fs_readdir) { { CdIo_t *arg1 = (CdIo_t *) 0 ; char *arg2 ; void *argp1 = 0 ; int res1 = 0 ; int res2 ; char *buf2 = 0 ; int alloc2 = 0 ; int argvi = 0; IsoStatList_t *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: fs_readdir(p_cdio,psz_path);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "fs_readdir" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "fs_readdir" "', argument " "2"" of type '" "char const []""'"); } arg2 = (char *)(buf2); result = (IsoStatList_t *)fs_readdir(arg1,(char const (*))arg2); { // result is of type IsoStatList_t CdioISO9660FileList_t *p_entlist = result; CdioListNode_t *p_entnode; unsigned int num = 0; if (!result) goto out; PPCODE: /* For each element in the array of strings, create a new * mortalscalar, and stuff it into the above array. */ _CDIO_LIST_FOREACH (p_entnode, p_entlist) { iso9660_stat_t *p_statbuf = (iso9660_stat_t *) _cdio_list_node_data (p_entnode); /* Have perl compute the length of the string using strlen() */ XPUSHs(sv_2mortal(newSVpv(p_statbuf->filename, 0))); XPUSHs(sv_2mortal(newSViv(p_statbuf->lsn))); XPUSHs(sv_2mortal(newSViv(p_statbuf->size))); XPUSHs(sv_2mortal(newSViv(p_statbuf->secsize))); XPUSHs(sv_2mortal(newSViv(p_statbuf->type))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_sec))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_min))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_hour))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mon))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_year))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_wday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_yday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_isdst))); num += 14; } iso9660_filelist_free(p_entlist); argvi += num + 2; out: ; } if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); XSRETURN(argvi); fail: if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); SWIG_croak_null(); } } XS(_wrap_ifs_readdir) { { iso9660_t *arg1 = (iso9660_t *) 0 ; char *arg2 ; void *argp1 = 0 ; int res1 = 0 ; int res2 ; char *buf2 = 0 ; int alloc2 = 0 ; int argvi = 0; IsoStatList_t *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: ifs_readdir(p_iso,psz_path);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ifs_readdir" "', argument " "1"" of type '" "iso9660_t *""'"); } arg1 = (iso9660_t *)(argp1); res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ifs_readdir" "', argument " "2"" of type '" "char const []""'"); } arg2 = (char *)(buf2); result = (IsoStatList_t *)ifs_readdir(arg1,(char const (*))arg2); { // result is of type IsoStatList_t CdioISO9660FileList_t *p_entlist = result; CdioListNode_t *p_entnode; unsigned int num = 0; if (!result) goto out; PPCODE: /* For each element in the array of strings, create a new * mortalscalar, and stuff it into the above array. */ _CDIO_LIST_FOREACH (p_entnode, p_entlist) { iso9660_stat_t *p_statbuf = (iso9660_stat_t *) _cdio_list_node_data (p_entnode); /* Have perl compute the length of the string using strlen() */ XPUSHs(sv_2mortal(newSVpv(p_statbuf->filename, 0))); XPUSHs(sv_2mortal(newSViv(p_statbuf->lsn))); XPUSHs(sv_2mortal(newSViv(p_statbuf->size))); XPUSHs(sv_2mortal(newSViv(p_statbuf->secsize))); XPUSHs(sv_2mortal(newSViv(p_statbuf->type))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_sec))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_min))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_hour))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mon))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_year))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_wday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_yday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_isdst))); num += 14; } iso9660_filelist_free(p_entlist); argvi += num + 2; out: ; } if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); XSRETURN(argvi); fail: if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); SWIG_croak_null(); } } XS(_wrap_get_application_id) { { iso9660_pvd_t *arg1 = (iso9660_pvd_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_application_id(p_pvd);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_pvd_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_application_id" "', argument " "1"" of type '" "iso9660_pvd_t *""'"); } arg1 = (iso9660_pvd_t *)(argp1); result = (char *)iso9660_get_application_id(arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_ifs_get_application_id) { { iso9660_t *arg1 = (iso9660_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: ifs_get_application_id(p_iso);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ifs_get_application_id" "', argument " "1"" of type '" "iso9660_t *""'"); } arg1 = (iso9660_t *)(argp1); result = (char *)ifs_get_application_id(arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_joliet_level) { { iso9660_t *arg1 = (iso9660_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; unsigned char result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_joliet_level(p_iso);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_joliet_level" "', argument " "1"" of type '" "iso9660_t *""'"); } arg1 = (iso9660_t *)(argp1); result = (unsigned char)iso9660_ifs_get_joliet_level(arg1); ST(argvi) = SWIG_From_unsigned_SS_char SWIG_PERL_CALL_ARGS_1((unsigned char)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_dir_len) { { iso9660_dir_t *arg1 = (iso9660_dir_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; unsigned char result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_dir_len(p_idr);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_dir_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_dir_len" "', argument " "1"" of type '" "iso9660_dir_t const *""'"); } arg1 = (iso9660_dir_t *)(argp1); result = (unsigned char)iso9660_get_dir_len((iso9660_dir_t const *)arg1); ST(argvi) = SWIG_From_unsigned_SS_char SWIG_PERL_CALL_ARGS_1((unsigned char)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_iso9660_dir_to_name) { { iso9660_dir_t *arg1 = (iso9660_dir_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: iso9660_dir_to_name(p_iso9660_dir);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_dir_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "iso9660_dir_to_name" "', argument " "1"" of type '" "iso9660_dir_t const *""'"); } arg1 = (iso9660_dir_t *)(argp1); result = (char *)iso9660_dir_to_name((iso9660_dir_t const *)arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; free((char*)result); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_posix_filemode) { { iso9660_stat_t *arg1 = (iso9660_stat_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; mode_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_posix_filemode(p_iso_dirent);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_stat_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_posix_filemode" "', argument " "1"" of type '" "iso9660_stat_t const *""'"); } arg1 = (iso9660_stat_t *)(argp1); result = iso9660_get_posix_filemode((iso9660_stat_t const *)arg1); ST(argvi) = SWIG_NewPointerObj((mode_t *)memcpy((mode_t *)malloc(sizeof(mode_t)),&result,sizeof(mode_t)), SWIGTYPE_p_mode_t, SWIG_POINTER_OWN | 0); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_preparer_id) { { iso9660_pvd_t *arg1 = (iso9660_pvd_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_preparer_id(p_pvd);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_pvd_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_preparer_id" "', argument " "1"" of type '" "iso9660_pvd_t const *""'"); } arg1 = (iso9660_pvd_t *)(argp1); result = (char *)iso9660_get_preparer_id((iso9660_pvd_t const *)arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_ifs_get_preparer_id) { { iso9660_t *arg1 = (iso9660_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: ifs_get_preparer_id(p_iso);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ifs_get_preparer_id" "', argument " "1"" of type '" "iso9660_t *""'"); } arg1 = (iso9660_t *)(argp1); result = (char *)ifs_get_preparer_id(arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; free((char*)result); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_publisher_id) { { iso9660_pvd_t *arg1 = (iso9660_pvd_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_publisher_id(p_pvd);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_pvd_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_publisher_id" "', argument " "1"" of type '" "iso9660_pvd_t const *""'"); } arg1 = (iso9660_pvd_t *)(argp1); result = (char *)iso9660_get_publisher_id((iso9660_pvd_t const *)arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_ifs_get_publisher_id) { { iso9660_t *arg1 = (iso9660_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: ifs_get_publisher_id(p_iso);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ifs_get_publisher_id" "', argument " "1"" of type '" "iso9660_t *""'"); } arg1 = (iso9660_t *)(argp1); result = (char *)ifs_get_publisher_id(arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; free((char*)result); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_pvd_type) { { iso9660_pvd_t *arg1 = (iso9660_pvd_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; unsigned char result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_pvd_type(p_pvd);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_pvd_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_pvd_type" "', argument " "1"" of type '" "iso9660_pvd_t const *""'"); } arg1 = (iso9660_pvd_t *)(argp1); result = (unsigned char)iso9660_get_pvd_type((iso9660_pvd_t const *)arg1); ST(argvi) = SWIG_From_unsigned_SS_char SWIG_PERL_CALL_ARGS_1((unsigned char)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_pvd_id) { { iso9660_pvd_t *arg1 = (iso9660_pvd_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_pvd_id(p_pvd);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_pvd_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_pvd_id" "', argument " "1"" of type '" "iso9660_pvd_t const *""'"); } arg1 = (iso9660_pvd_t *)(argp1); result = (char *)iso9660_get_pvd_id((iso9660_pvd_t const *)arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_pvd_space_size) { { iso9660_pvd_t *arg1 = (iso9660_pvd_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; int result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_pvd_space_size(p_pvd);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_pvd_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_pvd_space_size" "', argument " "1"" of type '" "iso9660_pvd_t const *""'"); } arg1 = (iso9660_pvd_t *)(argp1); result = (int)iso9660_get_pvd_space_size((iso9660_pvd_t const *)arg1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_pvd_block_size) { { iso9660_pvd_t *arg1 = (iso9660_pvd_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; int result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_pvd_block_size(p_pvd);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_pvd_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_pvd_block_size" "', argument " "1"" of type '" "iso9660_pvd_t const *""'"); } arg1 = (iso9660_pvd_t *)(argp1); result = (int)iso9660_get_pvd_block_size((iso9660_pvd_t const *)arg1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_pvd_version) { { iso9660_pvd_t *arg1 = (iso9660_pvd_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; int result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_pvd_version(pvd);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_pvd_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_pvd_version" "', argument " "1"" of type '" "iso9660_pvd_t const *""'"); } arg1 = (iso9660_pvd_t *)(argp1); result = (int)iso9660_get_pvd_version((iso9660_pvd_t const *)arg1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_system_id) { { iso9660_pvd_t *arg1 = (iso9660_pvd_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_system_id(p_pvd);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_pvd_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_system_id" "', argument " "1"" of type '" "iso9660_pvd_t const *""'"); } arg1 = (iso9660_pvd_t *)(argp1); result = (char *)iso9660_get_system_id((iso9660_pvd_t const *)arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_ifs_get_system_id) { { iso9660_t *arg1 = (iso9660_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: ifs_get_system_id(p_iso);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ifs_get_system_id" "', argument " "1"" of type '" "iso9660_t *""'"); } arg1 = (iso9660_t *)(argp1); result = (char *)ifs_get_system_id(arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; free((char*)result); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_root_lsn) { { iso9660_pvd_t *arg1 = (iso9660_pvd_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; lsn_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_root_lsn(p_pvd);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_pvd_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_root_lsn" "', argument " "1"" of type '" "iso9660_pvd_t const *""'"); } arg1 = (iso9660_pvd_t *)(argp1); result = (lsn_t)iso9660_get_root_lsn((iso9660_pvd_t const *)arg1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_volume_id) { { iso9660_pvd_t *arg1 = (iso9660_pvd_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_volume_id(p_pvd);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_pvd_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_volume_id" "', argument " "1"" of type '" "iso9660_pvd_t const *""'"); } arg1 = (iso9660_pvd_t *)(argp1); result = (char *)iso9660_get_volume_id((iso9660_pvd_t const *)arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_ifs_get_volume_id) { { iso9660_t *arg1 = (iso9660_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: ifs_get_volume_id(p_iso);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ifs_get_volume_id" "', argument " "1"" of type '" "iso9660_t *""'"); } arg1 = (iso9660_t *)(argp1); result = (char *)ifs_get_volume_id(arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; free((char*)result); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_volumeset_id) { { iso9660_pvd_t *arg1 = (iso9660_pvd_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_volumeset_id(p_pvd);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_pvd_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_volumeset_id" "', argument " "1"" of type '" "iso9660_pvd_t const *""'"); } arg1 = (iso9660_pvd_t *)(argp1); result = (char *)iso9660_get_volumeset_id((iso9660_pvd_t const *)arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_ifs_get_volumeset_id) { { iso9660_t *arg1 = (iso9660_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: ifs_get_volumeset_id(p_iso);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ifs_get_volumeset_id" "', argument " "1"" of type '" "iso9660_t *""'"); } arg1 = (iso9660_t *)(argp1); result = (char *)ifs_get_volumeset_id(arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; free((char*)result); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_pathtable_init) { { void *arg1 = (void *) 0 ; int res1 ; int argvi = 0; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: pathtable_init(pt);"); } res1 = SWIG_ConvertPtr(ST(0),SWIG_as_voidptrptr(&arg1), 0, 0); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "pathtable_init" "', argument " "1"" of type '" "void *""'"); } iso9660_pathtable_init(arg1); ST(argvi) = sv_newmortal(); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_pathtable_get_size) { { void *arg1 = (void *) 0 ; int res1 ; int argvi = 0; unsigned int result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: pathtable_get_size(pt);"); } res1 = SWIG_ConvertPtr(ST(0),SWIG_as_voidptrptr(&arg1), 0, 0); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "pathtable_get_size" "', argument " "1"" of type '" "void const *""'"); } result = (unsigned int)iso9660_pathtable_get_size((void const *)arg1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_pathtable_l_add_entry) { { void *arg1 = (void *) 0 ; char *arg2 ; unsigned int arg3 ; unsigned int arg4 ; int res1 ; int res2 ; char *buf2 = 0 ; int alloc2 = 0 ; unsigned int val3 ; int ecode3 = 0 ; unsigned int val4 ; int ecode4 = 0 ; int argvi = 0; unsigned int result; dXSARGS; if ((items < 4) || (items > 4)) { SWIG_croak("Usage: pathtable_l_add_entry(pt,name,extent,parent);"); } res1 = SWIG_ConvertPtr(ST(0),SWIG_as_voidptrptr(&arg1), 0, 0); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "pathtable_l_add_entry" "', argument " "1"" of type '" "void *""'"); } res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "pathtable_l_add_entry" "', argument " "2"" of type '" "char const []""'"); } arg2 = (char *)(buf2); ecode3 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "pathtable_l_add_entry" "', argument " "3"" of type '" "unsigned int""'"); } arg3 = (unsigned int)(val3); ecode4 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "pathtable_l_add_entry" "', argument " "4"" of type '" "unsigned int""'"); } arg4 = (unsigned int)(val4); result = (unsigned int)iso9660_pathtable_l_add_entry(arg1,(char const (*))arg2,arg3,arg4); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(result)); argvi++ ; if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); XSRETURN(argvi); fail: if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); SWIG_croak_null(); } } XS(_wrap_pathtable_m_add_entry) { { void *arg1 = (void *) 0 ; char *arg2 ; unsigned int arg3 ; unsigned int arg4 ; int res1 ; int res2 ; char *buf2 = 0 ; int alloc2 = 0 ; unsigned int val3 ; int ecode3 = 0 ; unsigned int val4 ; int ecode4 = 0 ; int argvi = 0; unsigned int result; dXSARGS; if ((items < 4) || (items > 4)) { SWIG_croak("Usage: pathtable_m_add_entry(pt,name,extent,parent);"); } res1 = SWIG_ConvertPtr(ST(0),SWIG_as_voidptrptr(&arg1), 0, 0); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "pathtable_m_add_entry" "', argument " "1"" of type '" "void *""'"); } res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "pathtable_m_add_entry" "', argument " "2"" of type '" "char const []""'"); } arg2 = (char *)(buf2); ecode3 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "pathtable_m_add_entry" "', argument " "3"" of type '" "unsigned int""'"); } arg3 = (unsigned int)(val3); ecode4 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "pathtable_m_add_entry" "', argument " "4"" of type '" "unsigned int""'"); } arg4 = (unsigned int)(val4); result = (unsigned int)iso9660_pathtable_m_add_entry(arg1,(char const (*))arg2,arg3,arg4); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(result)); argvi++ ; if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); XSRETURN(argvi); fail: if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); SWIG_croak_null(); } } XS(_wrap_set_evd) { { void *arg1 = (void *) 0 ; int res1 ; int argvi = 0; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: set_evd(pd);"); } res1 = SWIG_ConvertPtr(ST(0),SWIG_as_voidptrptr(&arg1), 0, 0); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "set_evd" "', argument " "1"" of type '" "void *""'"); } iso9660_set_evd(arg1); ST(argvi) = sv_newmortal(); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_is_xa) { { iso9660_t *arg1 = (iso9660_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; bool result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: is_xa(p_iso);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iso9660_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "is_xa" "', argument " "1"" of type '" "iso9660_t const *""'"); } arg1 = (iso9660_t *)(argp1); result = (bool)iso9660_ifs_is_xa((iso9660_t const *)arg1); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ static swig_type_info _swigt__p_CdIo_t = {"_p_CdIo_t", "CdIo_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_CdioList_t = {"_p_CdioList_t", "CdioList_t *|IsoStatList_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_imaxdiv_t = {"_p_imaxdiv_t", "imaxdiv_t *", 0, 0, (void*)"perliso9660::imaxdiv_t", 0}; static swig_type_info _swigt__p_int = {"_p_int", "intptr_t *|int *|int_least32_t *|int_fast32_t *|lba_t *|int32_t *|lsn_t *|int_fast16_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_iso9660_dir_t = {"_p_iso9660_dir_t", "iso9660_dir_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_iso9660_dtime_t = {"_p_iso9660_dtime_t", "iso9660_dtime_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_iso9660_ltime_t = {"_p_iso9660_ltime_t", "iso9660_ltime_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_iso9660_pvd_t = {"_p_iso9660_pvd_t", "iso9660_pvd_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_iso9660_stat_t = {"_p_iso9660_stat_t", "iso9660_stat_t *|IsoStat_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_iso9660_t = {"_p_iso9660_t", "iso9660_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_long = {"_p_long", "my_ssize_t *|ssize_t *|long *|driver_return_code_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_long_long = {"_p_long_long", "int_least64_t *|int_fast64_t *|int64_t *|long long *|intmax_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_mode_t = {"_p_mode_t", "mode_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_short = {"_p_short", "short *|int_least16_t *|int16_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_signed_char = {"_p_signed_char", "signed char *|int_least8_t *|int_fast8_t *|int8_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *|iso_extension_mask_t *|uint_least8_t *|uint_fast8_t *|uint8_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_unsigned_int = {"_p_unsigned_int", "track_t *|uintptr_t *|uint_least32_t *|uint_fast32_t *|uint32_t *|unsigned int *|cdio_drive_write_cap_t *|cdio_drive_misc_cap_t *|cdio_drive_read_cap_t *|driver_id_t *|uint_fast16_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_unsigned_long_long = {"_p_unsigned_long_long", "uint_least64_t *|uint_fast64_t *|uint64_t *|unsigned long long *|uintmax_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_unsigned_short = {"_p_unsigned_short", "unsigned short *|uint_least16_t *|uint16_t *", 0, 0, (void*)0, 0}; static swig_type_info *swig_type_initial[] = { &_swigt__p_CdIo_t, &_swigt__p_CdioList_t, &_swigt__p_char, &_swigt__p_imaxdiv_t, &_swigt__p_int, &_swigt__p_iso9660_dir_t, &_swigt__p_iso9660_dtime_t, &_swigt__p_iso9660_ltime_t, &_swigt__p_iso9660_pvd_t, &_swigt__p_iso9660_stat_t, &_swigt__p_iso9660_t, &_swigt__p_long, &_swigt__p_long_long, &_swigt__p_mode_t, &_swigt__p_p_char, &_swigt__p_short, &_swigt__p_signed_char, &_swigt__p_unsigned_char, &_swigt__p_unsigned_int, &_swigt__p_unsigned_long_long, &_swigt__p_unsigned_short, }; static swig_cast_info _swigc__p_CdIo_t[] = { {&_swigt__p_CdIo_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_CdioList_t[] = { {&_swigt__p_CdioList_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_imaxdiv_t[] = { {&_swigt__p_imaxdiv_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_iso9660_dir_t[] = { {&_swigt__p_iso9660_dir_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_iso9660_dtime_t[] = { {&_swigt__p_iso9660_dtime_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_iso9660_ltime_t[] = { {&_swigt__p_iso9660_ltime_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_iso9660_pvd_t[] = { {&_swigt__p_iso9660_pvd_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_iso9660_stat_t[] = { {&_swigt__p_iso9660_stat_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_iso9660_t[] = { {&_swigt__p_iso9660_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_long[] = { {&_swigt__p_long, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_long_long[] = { {&_swigt__p_long_long, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_mode_t[] = { {&_swigt__p_mode_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_short[] = { {&_swigt__p_short, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_signed_char[] = { {&_swigt__p_signed_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_unsigned_char[] = { {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_unsigned_int[] = { {&_swigt__p_unsigned_int, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_unsigned_long_long[] = { {&_swigt__p_unsigned_long_long, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_unsigned_short[] = { {&_swigt__p_unsigned_short, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info *swig_cast_initial[] = { _swigc__p_CdIo_t, _swigc__p_CdioList_t, _swigc__p_char, _swigc__p_imaxdiv_t, _swigc__p_int, _swigc__p_iso9660_dir_t, _swigc__p_iso9660_dtime_t, _swigc__p_iso9660_ltime_t, _swigc__p_iso9660_pvd_t, _swigc__p_iso9660_stat_t, _swigc__p_iso9660_t, _swigc__p_long, _swigc__p_long_long, _swigc__p_mode_t, _swigc__p_p_char, _swigc__p_short, _swigc__p_signed_char, _swigc__p_unsigned_char, _swigc__p_unsigned_int, _swigc__p_unsigned_long_long, _swigc__p_unsigned_short, }; /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ static swig_constant_info swig_constants[] = { {0,0,0,0,0,0} }; #ifdef __cplusplus } #endif static swig_variable_info swig_variables[] = { {0,0,0,0} }; static swig_command_info swig_commands[] = { {"perliso9660c::imaxdiv_t_quot_set", _wrap_imaxdiv_t_quot_set}, {"perliso9660c::imaxdiv_t_quot_get", _wrap_imaxdiv_t_quot_get}, {"perliso9660c::imaxdiv_t_rem_set", _wrap_imaxdiv_t_rem_set}, {"perliso9660c::imaxdiv_t_rem_get", _wrap_imaxdiv_t_rem_get}, {"perliso9660c::new_imaxdiv_t", _wrap_new_imaxdiv_t}, {"perliso9660c::delete_imaxdiv_t", _wrap_delete_imaxdiv_t}, {"perliso9660c::imaxabs", _wrap_imaxabs}, {"perliso9660c::imaxdiv", _wrap_imaxdiv}, {"perliso9660c::strtoimax", _wrap_strtoimax}, {"perliso9660c::strtoumax", _wrap_strtoumax}, {"perliso9660c::open_iso", _wrap_open_iso}, {"perliso9660c::open_ext", _wrap_open_ext}, {"perliso9660c::open_fuzzy", _wrap_open_fuzzy}, {"perliso9660c::iso9660_open_fuzzy_ext", _wrap_iso9660_open_fuzzy_ext}, {"perliso9660c::ifs_fuzzy_read_superblock", _wrap_ifs_fuzzy_read_superblock}, {"perliso9660c::close", _wrap_close}, {"perliso9660c::seek_read", _wrap_seek_read}, {"perliso9660c::fs_read_pvd", _wrap_fs_read_pvd}, {"perliso9660c::ifs_read_pvd", _wrap_ifs_read_pvd}, {"perliso9660c::fs_read_superblock", _wrap_fs_read_superblock}, {"perliso9660c::ifs_read_superblock", _wrap_ifs_read_superblock}, {"perliso9660c::set_dtime", _wrap_set_dtime}, {"perliso9660c::set_ltime", _wrap_set_ltime}, {"perliso9660c::get_dtime", _wrap_get_dtime}, {"perliso9660c::get_ltime", _wrap_get_ltime}, {"perliso9660c::is_dchar", _wrap_is_dchar}, {"perliso9660c::is_achar", _wrap_is_achar}, {"perliso9660c::name_translate", _wrap_name_translate}, {"perliso9660c::name_translate_ext", _wrap_name_translate_ext}, {"perliso9660c::strncpy_pad", _wrap_strncpy_pad}, {"perliso9660c::dirname_valid_p", _wrap_dirname_valid_p}, {"perliso9660c::pathname_isofy", _wrap_pathname_isofy}, {"perliso9660c::pathname_valid_p", _wrap_pathname_valid_p}, {"perliso9660c::fs_find_lsn", _wrap_fs_find_lsn}, {"perliso9660c::ifs_find_lsn", _wrap_ifs_find_lsn}, {"perliso9660c::fs_stat", _wrap_fs_stat}, {"perliso9660c::fs_stat_translate", _wrap_fs_stat_translate}, {"perliso9660c::ifs_stat", _wrap_ifs_stat}, {"perliso9660c::ifs_stat_translate", _wrap_ifs_stat_translate}, {"perliso9660c::fs_readdir", _wrap_fs_readdir}, {"perliso9660c::ifs_readdir", _wrap_ifs_readdir}, {"perliso9660c::get_application_id", _wrap_get_application_id}, {"perliso9660c::ifs_get_application_id", _wrap_ifs_get_application_id}, {"perliso9660c::get_joliet_level", _wrap_get_joliet_level}, {"perliso9660c::get_dir_len", _wrap_get_dir_len}, {"perliso9660c::iso9660_dir_to_name", _wrap_iso9660_dir_to_name}, {"perliso9660c::get_posix_filemode", _wrap_get_posix_filemode}, {"perliso9660c::get_preparer_id", _wrap_get_preparer_id}, {"perliso9660c::ifs_get_preparer_id", _wrap_ifs_get_preparer_id}, {"perliso9660c::get_publisher_id", _wrap_get_publisher_id}, {"perliso9660c::ifs_get_publisher_id", _wrap_ifs_get_publisher_id}, {"perliso9660c::get_pvd_type", _wrap_get_pvd_type}, {"perliso9660c::get_pvd_id", _wrap_get_pvd_id}, {"perliso9660c::get_pvd_space_size", _wrap_get_pvd_space_size}, {"perliso9660c::get_pvd_block_size", _wrap_get_pvd_block_size}, {"perliso9660c::get_pvd_version", _wrap_get_pvd_version}, {"perliso9660c::get_system_id", _wrap_get_system_id}, {"perliso9660c::ifs_get_system_id", _wrap_ifs_get_system_id}, {"perliso9660c::get_root_lsn", _wrap_get_root_lsn}, {"perliso9660c::get_volume_id", _wrap_get_volume_id}, {"perliso9660c::ifs_get_volume_id", _wrap_ifs_get_volume_id}, {"perliso9660c::get_volumeset_id", _wrap_get_volumeset_id}, {"perliso9660c::ifs_get_volumeset_id", _wrap_ifs_get_volumeset_id}, {"perliso9660c::pathtable_init", _wrap_pathtable_init}, {"perliso9660c::pathtable_get_size", _wrap_pathtable_get_size}, {"perliso9660c::pathtable_l_add_entry", _wrap_pathtable_l_add_entry}, {"perliso9660c::pathtable_m_add_entry", _wrap_pathtable_m_add_entry}, {"perliso9660c::set_evd", _wrap_set_evd}, {"perliso9660c::is_xa", _wrap_is_xa}, {0,0} }; /* ----------------------------------------------------------------------------- * Type initialization: * This problem is tough by the requirement that no dynamic * memory is used. Also, since swig_type_info structures store pointers to * swig_cast_info structures and swig_cast_info structures store pointers back * to swig_type_info structures, we need some lookup code at initialization. * The idea is that swig generates all the structures that are needed. * The runtime then collects these partially filled structures. * The SWIG_InitializeModule function takes these initial arrays out of * swig_module, and does all the lookup, filling in the swig_module.types * array with the correct data and linking the correct swig_cast_info * structures together. * * The generated swig_type_info structures are assigned statically to an initial * array. We just loop through that array, and handle each type individually. * First we lookup if this type has been already loaded, and if so, use the * loaded structure instead of the generated one. Then we have to fill in the * cast linked list. The cast data is initially stored in something like a * two-dimensional array. Each row corresponds to a type (there are the same * number of rows as there are in the swig_type_initial array). Each entry in * a column is one of the swig_cast_info structures for that type. * The cast_initial array is actually an array of arrays, because each row has * a variable number of columns. So to actually build the cast linked list, * we find the array of casts associated with the type, and loop through it * adding the casts to the list. The one last trick we need to do is making * sure the type pointer in the swig_cast_info struct is correct. * * First off, we lookup the cast->type name to see if it is already loaded. * There are three cases to handle: * 1) If the cast->type has already been loaded AND the type we are adding * casting info to has not been loaded (it is in this module), THEN we * replace the cast->type pointer with the type pointer that has already * been loaded. * 2) If BOTH types (the one we are adding casting info to, and the * cast->type) are loaded, THEN the cast info has already been loaded by * the previous module so we just ignore it. * 3) Finally, if cast->type has not already been loaded, then we add that * swig_cast_info to the linked list (because the cast->type) pointer will * be correct. * ----------------------------------------------------------------------------- */ #ifdef __cplusplus extern "C" { #if 0 } /* c-mode */ #endif #endif #if 0 #define SWIGRUNTIME_DEBUG #endif SWIGRUNTIME void SWIG_InitializeModule(void *clientdata) { size_t i; swig_module_info *module_head, *iter; int init; /* check to see if the circular list has been setup, if not, set it up */ if (swig_module.next==0) { /* Initialize the swig_module */ swig_module.type_initial = swig_type_initial; swig_module.cast_initial = swig_cast_initial; swig_module.next = &swig_module; init = 1; } else { init = 0; } /* Try and load any already created modules */ module_head = SWIG_GetModule(clientdata); if (!module_head) { /* This is the first module loaded for this interpreter */ /* so set the swig module into the interpreter */ SWIG_SetModule(clientdata, &swig_module); } else { /* the interpreter has loaded a SWIG module, but has it loaded this one? */ iter=module_head; do { if (iter==&swig_module) { /* Our module is already in the list, so there's nothing more to do. */ return; } iter=iter->next; } while (iter!= module_head); /* otherwise we must add our module into the list */ swig_module.next = module_head->next; module_head->next = &swig_module; } /* When multiple interpreters are used, a module could have already been initialized in a different interpreter, but not yet have a pointer in this interpreter. In this case, we do not want to continue adding types... everything should be set up already */ if (init == 0) return; /* Now work on filling in swig_module.types */ #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: size %d\n", swig_module.size); #endif for (i = 0; i < swig_module.size; ++i) { swig_type_info *type = 0; swig_type_info *ret; swig_cast_info *cast; #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); #endif /* if there is another module already loaded */ if (swig_module.next != &swig_module) { type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); } if (type) { /* Overwrite clientdata field */ #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: found type %s\n", type->name); #endif if (swig_module.type_initial[i]->clientdata) { type->clientdata = swig_module.type_initial[i]->clientdata; #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name); #endif } } else { type = swig_module.type_initial[i]; } /* Insert casting types */ cast = swig_module.cast_initial[i]; while (cast->type) { /* Don't need to add information already in the list */ ret = 0; #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: look cast %s\n", cast->type->name); #endif if (swig_module.next != &swig_module) { ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); #ifdef SWIGRUNTIME_DEBUG if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name); #endif } if (ret) { if (type == swig_module.type_initial[i]) { #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: skip old type %s\n", ret->name); #endif cast->type = ret; ret = 0; } else { /* Check for casting already in the list */ swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type); #ifdef SWIGRUNTIME_DEBUG if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name); #endif if (!ocast) ret = 0; } } if (!ret) { #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name); #endif if (type->cast) { type->cast->prev = cast; cast->next = type->cast; } type->cast = cast; } cast++; } /* Set entry in modules->types array equal to the type */ swig_module.types[i] = type; } swig_module.types[i] = 0; #ifdef SWIGRUNTIME_DEBUG printf("**** SWIG_InitializeModule: Cast List ******\n"); for (i = 0; i < swig_module.size; ++i) { int j = 0; swig_cast_info *cast = swig_module.cast_initial[i]; printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); while (cast->type) { printf("SWIG_InitializeModule: cast type %s\n", cast->type->name); cast++; ++j; } printf("---- Total casts: %d\n",j); } printf("**** SWIG_InitializeModule: Cast List ******\n"); #endif } /* This function will propagate the clientdata field of type to * any new swig_type_info structures that have been added into the list * of equivalent types. It is like calling * SWIG_TypeClientData(type, clientdata) a second time. */ SWIGRUNTIME void SWIG_PropagateClientData(void) { size_t i; swig_cast_info *equiv; static int init_run = 0; if (init_run) return; init_run = 1; for (i = 0; i < swig_module.size; i++) { if (swig_module.types[i]->clientdata) { equiv = swig_module.types[i]->cast; while (equiv) { if (!equiv->converter) { if (equiv->type && !equiv->type->clientdata) SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); } equiv = equiv->next; } } } } #ifdef __cplusplus #if 0 { /* c-mode */ #endif } #endif #if defined(__cplusplus) && ! defined(XSPROTO) extern "C" #endif XS(SWIG_init) { dXSARGS; int i; (void)items; SWIG_InitializeModule(0); /* Install commands */ for (i = 0; swig_commands[i].name; i++) { /* Casts only needed for Perl < 5.10. */ #ifdef __cplusplus newXS(const_cast(swig_commands[i].name), swig_commands[i].wrapper, const_cast(__FILE__)); #else newXS((char*)swig_commands[i].name, swig_commands[i].wrapper, (char*)__FILE__); #endif } /* Install variables */ for (i = 0; swig_variables[i].name; i++) { SV *sv; sv = get_sv(swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI); if (swig_variables[i].type) { SWIG_MakePtr(sv,(void *)1, *swig_variables[i].type,0); } else { sv_setiv(sv,(IV) 0); } swig_create_magic(sv, swig_variables[i].name, swig_variables[i].set, swig_variables[i].get); } /* Install constant */ for (i = 0; swig_constants[i].type; i++) { SV *sv; sv = get_sv(swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI); switch(swig_constants[i].type) { case SWIG_INT: sv_setiv(sv, (IV) swig_constants[i].lvalue); break; case SWIG_FLOAT: sv_setnv(sv, (double) swig_constants[i].dvalue); break; case SWIG_STRING: sv_setpv(sv, (const char *) swig_constants[i].pvalue); break; case SWIG_POINTER: SWIG_MakePtr(sv, swig_constants[i].pvalue, *(swig_constants[i].ptype),0); break; case SWIG_BINARY: SWIG_MakePackedObj(sv, swig_constants[i].pvalue, swig_constants[i].lvalue, *(swig_constants[i].ptype)); break; default: break; } SvREADONLY_on(sv); } SWIG_TypeClientData(SWIGTYPE_p_imaxdiv_t, (void*) "perliso9660::imaxdiv_t"); /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "VERSION_NUM", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(LIBCDIO_VERSION_NUM))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "INVALID_LBA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_INVALID_LBA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "INVALID_LSN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_INVALID_LSN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CD_FRAMESIZE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_CD_FRAMESIZE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CD_FRAMESIZE_RAW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_CD_FRAMESIZE_RAW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "ISO_BLOCKSIZE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_CD_FRAMESIZE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "M2F2_SECTOR_SIZE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(M2F2_SECTOR_SIZE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "M2RAW_SECTOR_SIZE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(M2RAW_SECTOR_SIZE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "PVD_SECTOR", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_PVD_SECTOR))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "EVD_SECTOR", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_EVD_SECTOR))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "LEN_ISONAME", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(LEN_ISONAME))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MAX_SYSTEM_ID", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_MAX_SYSTEM_ID))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MAX_ISONAME", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(MAX_ISONAME))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MAX_PREPARER_ID", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_MAX_PREPARER_ID))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MAX_ISOPATHNAME", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(MAX_ISOPATHNAME))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FILE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_FILE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "EXISTENCE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_EXISTENCE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DIRECTORY", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_DIRECTORY))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "ASSOCIATED", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_ASSOCIATED))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "RECORD", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_RECORD))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "PROTECTION", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_PROTECTION))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRESERVED1", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_DRESERVED1))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRESERVED2", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_DRESERVED2))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MULTIEXTENT", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_MULTIEXTENT))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "VD_BOOT_RECORD", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_VD_BOOT_RECORD))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "VD_PRIMARY", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_VD_PRIMARY))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "VD_SUPPLEMENTARY", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_VD_SUPPLEMENTARY))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "VD_PARITION", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_VD_PARITION))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "VD_END", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_VD_END))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MAX_PUBLISHER_ID", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_MAX_PUBLISHER_ID))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MAX_APPLICATION_ID", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_MAX_APPLICATION_ID))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MAX_VOLUME_ID", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_MAX_VOLUME_ID))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MAX_VOLUMESET_ID", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_MAX_VOLUMESET_ID))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "STANDARD_ID", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_STANDARD_ID))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "NOCHECK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO9660_NOCHECK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "SEVEN_BIT", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO9660_7BIT))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "ACHARS", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO9660_ACHARS))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DCHARS", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO9660_DCHARS))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "EXTENSION_JOLIET_LEVEL1", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_EXTENSION_JOLIET_LEVEL1))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "EXTENSION_JOLIET_LEVEL2", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_EXTENSION_JOLIET_LEVEL2))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "EXTENSION_JOLIET_LEVEL3", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_EXTENSION_JOLIET_LEVEL3))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "EXTENSION_ROCK_RIDGE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_EXTENSION_ROCK_RIDGE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "EXTENSION_HIGH_SIERRA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_EXTENSION_HIGH_SIERRA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "EXTENSION_ALL", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_EXTENSION_ALL))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "EXTENSION_NONE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_EXTENSION_NONE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "EXTENSION_JOLIET", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(ISO_EXTENSION_JOLIET))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; ST(0) = &PL_sv_yes; XSRETURN(1); } Device-Cdio-v2.0.0/META.yml000444001750001750 314313222226267 15026 0ustar00rockyrocky000000000000--- abstract: 'Perl bindings for CD Input and control library (libcdio)' author: - 'Rocky Bernstein ' build_requires: ExtUtils::CBuilder: '0' configure_requires: Module::Build: '0.38' dynamic_config: 1 generated_by: 'Module::Build version 0.4214, CPAN::Meta::Converter version 2.150005' license: gpl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: '1.4' name: Device-Cdio provides: Device::Cdio: file: lib/Device/Cdio.pm version: v2.0.0 Device::Cdio::Device: file: lib/Device/Cdio/Device.pm Device::Cdio::ISO9660: file: lib/Device/Cdio/ISO9660.pm Device::Cdio::ISO9660::FS: file: lib/Device/Cdio/ISO9660/FS.pm Device::Cdio::ISO9660::IFS: file: lib/Device/Cdio/ISO9660/IFS.pm Device::Cdio::Track: file: lib/Device/Cdio/Track.pm Device::Cdio::Util: file: lib/Device/Cdio/Util.pm perlcdio: file: lib/perlcdio.pm perlcdio::imaxdiv_t: file: lib/perlcdio.pm perlcdioc: file: lib/perlcdio.pm perliso9660: file: lib/perliso9660.pm perliso9660::imaxdiv_t: file: lib/perliso9660.pm perliso9660c: file: lib/perliso9660.pm perlmmc: file: lib/perlmmc.pm perlmmc::imaxdiv_t: file: lib/perlmmc.pm perlmmcc: file: lib/perlmmc.pm requires: ExtUtils::CBuilder: '0.28' ExtUtils::PkgConfig: '1.03' Test::More: '0' version: '0' resources: bugtracker: https://github.com/rocky/Perl-Device-Cdio/issues license: http://opensource.org/licenses/gpl-license.php repository: http://github.com/rocky/Perl-Device-Cdio version: v2.0.0 x_serialization_backend: 'CPAN::Meta::YAML version 0.012' Device-Cdio-v2.0.0/Changes000444001750001750 701213222226267 15047 0ustar00rockyrocky000000000000Revision history for Device-Cdio 2.0.0 Dec 31, 2017 Revise for libcdio 2.0.0 API 0.4.0 Nov 1, 2017 - ISO filesystem stat now returns all of the time.h fields, e.g. mon, day, hour, min, sec, year, yday, wday, is_dst - Add {cdio_,}audio_play_track_index. - Update docs and spelling corrections from Debian release - Simplify swig code, we now require >= 0.92 - Lots of admnistrivia: improve MANIFEST and MANIFEST.SKIP - regularize versions 0.3.1 Oct 29, 2017 - Adjust to make work on libcdio 0.92 - Add CD-Text capability, and use Leon Merten Lohse's CD-Text interface - Add MIN_CDTEXT_FIELD - Remove warnings caused by version compatiblity. - Add get_cdtext when we have a track object. - We need libcdio 0.83 or greater 0.82 won't do. - Replace a couple of "exit"s with "die "OS unsupported" 0.3.0 OCT 16, 2011 (Jerry G Geiger Release) - Mostly administrivia. Most of the changes in this release are due to Jerry G Geiger - match up mmc_get_isrc header with libcdio - Add $track->get_track_isrc. - Commit changes to return array ref or array based on wantarray. - DeviceList_t maps to returning an array reference rather than an array. - Fixed the C routines that return char** so they return a Perl list. added cdio_guess_cd_type and cdio_read_pvd. (Jerry G Geiger) - Get device name via driver_id=>$perlcdio::DRIVER_DEVICE - Add get_cddb_discid, auto_get_status, get_joliet_level - Numerous other fixes and tests from Jerry G Geiger 0.2.4 Sept 2, 2006 - Fix bad allocation in strncpy_pad - Fix bugs in Device::Cdio::ISO9600::FS::readddir() and Device::Cdio::ISO9600::FS::find_lsn(). Thanks to Shannon. - Fix bug in strncpy_pad(). - Start MMC interface - Small documentation and example changes 0.2.3 Mar 22, 2006 - Take advantage of bugs fixed upstream in libcdio 0.77. In particular some of the time setting/getting routines - Misc Documentation fixups 0.2.2 Mar 3, 2006 - Changes dictated by CPAN: copy of SWIG-generated files from blib/lib to lib - Add version numbers for SWIG Perl modules - Add ISO9660::IFS and ISO9660::FS regression tests - Better "Synopsis" documentation on IFS and FS. - add create_makefile_pl => passthrough for Makefile.PL compatibility 0.2.0 Mar 2, 2006 Interrum hand-hacked package to get CPAN to index. 0.2.0 Mar 1, 2006 - Add rudimentary ISO 9660 library. See iso1.pl, iso2.pl, iso3.pl and 07.iso.t - Include more C files from SWIG. (In other words drop requirement that SWIG is installed - this time, for sure!) 0.0.2 Feb 13, 2006 - Drop requirement that SWIG is installed. - $dev->get_device() is a little more useful. - Fixes for Darwin (and remove some invalid pointer references too and guard accessing outside of fixed-length hwinfo arrays). - Allow Perl 5.8.6. - synch up version numbers in Cdio/Track.pm and Cdio/Device.pm with Cdio.pm 0.0.1 Feb 10, 2006 Initial release. What's here from libcdio. Most everything from In lay terms, this is the audio CD controls, device controls, disc classification, various block CD read routines, and some track routines. What's not here (yet) is CD-Text reading, CD-Paranoia interface, the ISO 9660 library or the (SCSI) MMC command interface. An oft-asked for request is for UDF support, analogous to the ISO 9660 support. That's currently missing in libcdio. If there is something in this list you want, dig in. Much of it is this is straightforward based on continuing what's here. It was an incredible amount of work to get just this far. $Id$ Device-Cdio-v2.0.0/THANKS000444001750001750 132513222226267 14470 0ustar00rockyrocky000000000000Many thanks to Jerry G Geiger for resurrecting this project from the dead. He added: - audio_get_status - audio_get_volume - audio_set_volume - cdio_guess_cd_type - cdio_read_pvd - cdio_version (version string of linked library) - get_cddb_discid - get_disk_cdtext - get_joliet_level - get_track_cdtext - get_track_isrc - is_tray_open - example/checkcd.pl to show CD characteristics He also fixed Build.PL so it works again and added many corrections to my faulty C interface code.; Thanks to Martín Ferrari for making this available on Debian *and* for finding and fixing the bugs needed to do so. Thanks to Debian- and Ubuntu-aware "downstream" folks Gregor Herrmann and Adam Conrad for cluing me into what's up there. Device-Cdio-v2.0.0/ChangeLog000444001750001750 10672013222226267 15374 0ustar00rockyrocky0000000000002017-12-31 rocky * Changes, admin-tools/how-to-make-a-release.txt: Get ready for release 2.0.0 2017-12-28 R. Bernstein * t/10.cdtext.t: Remove old comment 2017-12-23 rocky * MANIFEST, META.yml, lib/Device/Cdio.pm: Bump version. Administrivia 2017-12-23 rocky * MANIFEST, t/cdtext.toc => data/cdtext-test.toc, examples/cdtext-raw.pl, lib/Device/Cdio/Device.pm, swig/cdtext.swg, t/.gdb_history, t/10.cdtext.t: Reinstate all CD-Text tests... Add example program and data to parse a CD-Text data file 2017-12-23 rocky * examples/cdtext.pl, lib/Device/Cdio/Device.pm, swig/cdtext.swg: Improve Cd-Text handling 2017-12-23 rocky * examples/cdtext.pl, lib/Device/Cdio/Device.pm, t/10.cdtext.t: Correct cdtext handling for libcdio 2.0.0 API 2017-12-18 rocky * lib/Device/Cdio/Track.pm, swig/perlmmc.swg: Correct get_track_isrc routine Fixes #5 2017-12-18 rocky * .travis.yml: Another Travis config attempt 2017-12-18 rocky * .travis.yml: Another Travis config attempt 2017-12-18 rocky * .travis.yml: Travis yaml typo 2017-12-18 rocky * .travis.yml: Bump libcdio version used in Travis CI 2017-12-18 rocky * circle.yml, examples/cdtext.pl, lib/Device/Cdio/Device.pm, swig/cdtext.swg, t/10.cdda.t, t/10.cdtext.t: Work on cdtext for libcdio 1.1.0 2017-12-17 R. Bernstein * META.yml, examples/cdtext.pl, lib/Device/Cdio/Device.pm, swig/cdtext.swg: Revise CD-Text for current libcdio 1.1.0 API 2017-12-06 rocky * .travis.yml, Build.PL, swig/device_const.swg, swig/disc.swg, swig/perliso9660.swg, t/10.cdtext.t: Start upgrade to 1.1.0 interface 2017-11-01 R. Bernstein * ChangeLog, Changes, META.yml, admin-tools/how-to-make-a-release.txt, lib/Device/Cdio.pm: Get ready for release 0.4.0 2017-10-31 rocky * README.md: add CircleCI badge 2017-10-31 rocky * README.md: add CircleCI badge 2017-10-31 rocky * README.md, admin-tools/how-to-make-a-release.txt: add CircleCI badge 2017-10-31 rocky * lib/Device/Cdio.pm, lib/Device/Cdio/ISO9660/FS.pm, lib/Device/Cdio/ISO9660/IFS.pm, lib/Device/Cdio/Track.pm, lib/Device/Cdio/Util.pm: Regularize docs 2017-10-31 rocky * Build.PL, lib/Device/Cdio/Device.pm, lib/Device/Cdio/ISO9660.pm, swig/audio.swg: Add {cdio_,}audio_play_track_index. Go over docs 2017-10-31 R. Bernstein * t/07.iso1.t, t/07.iso2.t, t/07.iso3.t: Set timezioe UTC in tests... So we have repatable time checks across CI testing 2017-10-31 R. Bernstein * MANIFEST.SKIP, examples/iso1.pl, lib/Device/Cdio/ISO9660.pm, lib/Device/Cdio/ISO9660/FS.pm, lib/Device/Cdio/ISO9660/IFS.pm, swig/perliso9660.swg, t/07.iso1.t, t/07.iso2.t, t/07.iso3.t: ISO9660 stat hash ref now returns time 2017-10-30 R. Bernstein * .gitignore, Build.PL, ChangeLog, MANIFEST, swig/{cdtext_new.swg => cdtext.swg}, swig/cdtext_old.swg: Simplify: No longer have cdtext_{old,new} 2017-10-30 R. Bernstein * circle.yml: Add Test::Pod::Coverage to CircleCI 2017-10-30 R. Bernstein * admin-tools/how-to-make-a-release.txt, swig/perliso9660.swg: Simplify code (we require >= 0.92) 2017-10-30 R. Bernstein * MANIFEST.SKIP: CI Administrivia 2017-10-30 R. Bernstein * ChangeLog, MANIFEST.SKIP, META.yml, circle.yml, t/05.ops.t, t/11.dev.t: CircleCI env vars (again) 2017-10-30 R. Bernstein * t/05.ops.t, t/11.dev.t: CircleCI is close to working (again) 2017-10-30 R. Bernstein * circle.yml: CircleCI is close to working 2017-10-30 R. Bernstein * circle.yml: CirclCi test again 2017-10-30 R. Bernstein * circle.yml: CirclCi test again 2017-10-30 R. Bernstein * .circleci.yml => circle.yml: CircleCI test 3 2017-10-30 R. Bernstein * .circleci/circle.yml => .circleci.yml: CircleCI testing 2017-10-30 R. Bernstein * .circleci/circle.yml, MANIFEST.SKIP, git2cl, lib/Device/Cdio.pm, lib/Device/Cdio/Device.pm, lib/Device/Cdio/ISO9660/FS.pm, lib/Device/Cdio/ISO9660/IFS.pm, lib/Device/Cdio/Track.pm, swig/audio.swg, swig/device.swg: Spelling mistakes from gregor herrmann 2017-10-30 R. Bernstein * .travis.yml: Fix travis config bug 2017-10-30 R. Bernstein * .travis.yml: Another travis attempt 2017-10-30 R. Bernstein * .travis.yml: travis cpanm futzing 2017-10-30 R. Bernstein * .travis.yml: Try travis testing on 2 libcdio version 2017-10-30 R. Bernstein * .travis.yml: Botched travis env vars 2017-10-30 R. Bernstein * .travis.yml, MANIFEST, MANIFEST.SKIP, META.yml: Lots of Administrivia: Improve what goes into MANIFEST and MANIFEST.skip. Thanks to manwar .travis.yml: - Try more versions of Perl - Try two versions of libcdio 0.92 and 0.94 - Try a more generalized install mechanism for Perl modules 2017-10-29 R. Bernstein * lib/Device/Cdio.pm: Don't how to get non-numeric git version 2017-10-29 R. Bernstein * .gitignore, META.yml, admin-tools/how-to-make-a-release.txt, lib/Device/Cdio.pm: Administrivia - bump version 2017-10-29 R. Bernstein * ChangeLog, README.md: Get ready for release 0.3.1 Add CI badge 2017-10-29 R. Bernstein * t/11.dev.t: Travis 17th try 2017-10-29 R. Bernstein * t/11.dev.t: Travis 16th try 2017-10-29 R. Bernstein * t/05.ops.t: Travis 15th try 2017-10-29 R. Bernstein * .travis.yml: Travis 14th try 2017-10-29 R. Bernstein * .travis.yml: Travis 13th try 2017-10-29 R. Bernstein * .travis.yml: Travis 12th try (probably getting closer) 2017-10-29 R. Bernstein * GNUmakefile: Travis 11th try 2017-10-29 R. Bernstein * .travis.yml, GNUmakefile: 10th try 2017-10-29 R. Bernstein * GNUmakefile: Travis 9th try 2017-10-29 R. Bernstein * .travis.yml: Travis 8th try 2017-10-29 R. Bernstein * .travis.yml, ChangeLog, MANIFEST.SKIP: Travis 6th try 2017-10-29 R. Bernstein * .travis.yml: Travis 6th try 2017-10-29 R. Bernstein * .travis.yml, Build.PL: Travis 5th try 2017-10-29 R. Bernstein * .travis.yml: Travis 4th try 2017-10-29 R. Bernstein * .travis.yml: Travis 3rd try 2017-10-29 R. Bernstein * .travis.yml: Get ready for release 0.3.1 Travis 2nd attempt 2017-10-29 R. Bernstein * .travis.yml, THANKS: Get ready for elease 0.3.1 Thank Debian/Ubuntu folks. Try travis 2017-10-29 R. Bernstein * .gitignore, GNUmakefile, MANIFEST.SKIP, README.md, admin-tools/how-to-make-a-release.txt, admin-tools/testall.sh: Get ready for release 0.3.1 Add targets to make conventional Makefile, but .gitignore it Add build instructions and tools (admin-tools) 2017-10-29 R. Bernstein * : Get ready for release 0.3.1 Looks like we need libcdio greater than 0.83 now. 0.94 works *.swg: define extern functions to remove gcc warnings Strip whitespace from ends of lines 2014-05-24 R. Bernstein * .gitignore, Build.PL, MANIFEST, swig/.gitignore, swig/perlcdio.swg, swig/perliso9660.swg, t/07.iso2.t: Adjust to make it work on libcdio 0.92 2012-04-16 r * swig/cdtext_new.swg: We'll change libcido to add MIN_CDTEXT_FIELD 2012-04-16 r * Build.PL, examples/cdtext.pl, lib/Device/Cdio/Track.pm, swig/cdtext_old.swg, t/05.ops.t, t/10.cdtext.t: swig/cdtext_old.swg: Make this work on libcdio 0.83. 10.cdtext.t: Remove warnings caused by version compatiblity. Track.pm: Add get_cdtext when we have a track object. Build.PL: Need libcdio 0.83 or greater 0.82 won't do. chmod +x 2012-04-15 R. Bernstein * MANIFEST, t/10.cdtext.t, t/cdtext.toc: Add CD-Text test case 2012-04-15 R. Bernstein * .gitignore, Build.PL, examples/cdtext.pl, lib/.gitignore, swig/.gitignore, swig/cdtext_new.swg, swig/cdtext_old.swg, swig/device.swg, swig/perlcdio.swg, swig/perliso9660.swg, t/10.cdda.t, t/10.cdtext.t: Add CD-Text capability and add CD-Text example program. 2012-04-13 R. Bernstein * swig/disc.swg, swig/perlcdio.swg, swig/types.swg: Revise CD-Text to handle Leon Merten Lohse's new CD-Text interface. This patch is from Leon. 2012-03-10 R. Bernstein * swig/device.swg, swig/device_const.swg, swig/disc.swg: Revise to tolerate recent libcdio incompatibilities (those after version 0.83). 2012-01-18 R. Bernstein * lib/Device/Cdio/ISO9660.pm, lib/Device/Cdio/ISO9660/FS.pm, lib/Device/Cdio/ISO9660/IFS.pm, swig/perliso9660.swg, t/07.iso1.t: Add Device::Cdio::ISO9660::IFS::find_lsn. Had already same routine in Device::Cdio::FS. IFS and FS should not assume Device::Cdio::ISO960 is used. 2011-11-13 R. Bernstein * Makefile: Add installdeps target 2011-10-28 R. Bernstein * Build.PL, lib/Device/Cdio.pm: Replace a couple of "exit"s with "die "OS supported" 2011-10-16 R. Bernstein * Build.PL: More administrivia because Build.PL has changed a bit. 2011-10-16 R. Bernstein * MANIFEST, MANIFEST.SKIP, META.yml, swig/perlmmc.swg: Get ready for release 0.3.0. Mostly administrivia. perlmmc.swg: match up mmc_get_isrc header with libcdio. 2011-10-16 R. Bernstein * .gitignore, Makefile: Administrivia 2011-09-05 R. Bernstein * Makefile: Comment Makefile a little bit more. 2011-08-25 R. Bernstein * THANKS, examples/README, examples/checkcd.pl, lib/Device/Cdio.pm, lib/Device/Cdio/Device.pm, lib/Device/Cdio/Track.pm, swig/device.swg, swig/perlmmc.swg, swig/track.swg: Add $track->get_track_isrc. Commit changes to return array ref or array based on wantarray. DeviceList_t maps to returning an array reference rather than an array. Change all due to jerry geiger. 2011-08-21 r * examples/checkcd.pl: Guard against uninitialized variables which sometimes means we are trying to do a operation in a situation where it can't be done. 2011-08-21 r * MANIFEST: More administrivia: Add new files to MANIFEST. 2011-08-20 R. Bernstein * examples/checkcd.pl: Array return values are now via Array references, the OO layer may convert these to arrays if desired. Add program to show properties of a CD, e.g. cd type (Audio, ISO-9660, UDF). All of this is from jerry geiger. 2011-08-15 R. Bernstein * THANKS, lib/Device/Cdio.pm, lib/Device/Cdio/Device.pm, swig/device.swg, swig/disc.swg, swig/perlcdio.swg, swig/read.swg: Jerry G Geiger fixed the C routines that return char** so they return a Perl list. He also added cdio_guess_cd_type and cdio_read_pvd. 2011-08-14 R. Bernstein * t/11.dev.t: 11.dev.t: Get device name via driver_id=>$perlcdio::DRIVER_DEVICE since Device::Cdio::get_devices is borked. Thanks again to Jerry G Geiger for the investigation and suggestion. 2011-08-09 R. Bernstein * lib/Device/Cdio/Device.pm, t/11.dev.t: First crack at testing audio routines. From Jerry G Geiger. 2011-08-09 R. Bernstein * Build.PL: Slightly more precise test to see if running swig can be skipped. Change from Jerry G Geiger. 2011-08-09 R. Bernstein * Build.PL, META.yml, t/06.bincue.t, t/07.iso.t: Build.PL picks up libcdio's CFLAGS now. Correct 07.iso.t test. These changes from Jerry G Geiger. Remove code for pre libcdio 0.77. Versions this far back are hopeless. 2011-08-08 r * .gitignore, META.yml: Another file to ignore 2011-08-08 r * README.md: Small README.md clarificaion. 2011-08-08 r * README.md: Update README.md to reflect current status. 2011-08-08 r * README.md: More markdownification. 2011-08-08 r * MANIFEST, README => README.md: Use Markdown for README which looks better on github. 2011-08-08 r * Build.PL, MANIFEST, MANIFEST.SKIP: Build Administrivia. 2011-08-08 r * Build.PL: Remove cover_db on cleanup 2011-08-08 r * Build.PL: Rebuild lib/*.pm if needed. 2011-08-07 r * Build.PL, MANIFEST, MANIFEST.SKIP, audio.swg => swig/audio.swg, device.swg => swig/device.swg, device_const.swg => swig/device_const.swg, disc.swg => swig/disc.swg, perlcdio.swg => swig/perlcdio.swg, perliso9660.swg => swig/perliso9660.swg, perlmmc.swg => swig/perlmmc.swg, read.swg => swig/read.swg, track.swg => swig/track.swg, types.swg => swig/types.swg: Move swig files to a SWIG directory. 2011-08-06 r * Build.PL: Regularize my email address 2011-08-06 r * .cvsignore, .gitignore, examples/.cvsignore, examples/.gitignore, lib/Device/.cvsignore, lib/Device/.gitignore: convert and remove .cvsignore 2011-08-06 r * t/.cvsignore, t/.gitignore, t/00.load.t, t/01.pod-coverage.t, t/01.pod.t, t/02.default.t, t/05.ops.t, t/06.bincue.t, t/06.image.t, t/06.toc.t, t/07.iso.t, t/10.read.t: More test initialization futzing. chdir basename is just plain wrong! 2011-08-06 r * t/00.load.t, t/01.pod-coverage.t, t/01.pod.t, t/02.default.t, t/05.ops.t, t/06.bincue.t, t/06.image.t, t/06.toc.t, t/07.iso.t, t/07.iso1.t, t/07.iso2.t, t/07.iso3.t, t/10.cdda.t, t/10.read.t: Small test idiom things. The changes allow tests to be run in more ways from more directories and with more information shown. 2011-08-06 r * : commit d9472ddf2491f47ba83ddcad208a31ab7defbc1f Author: R. Bernstein Date: Thu Aug 4 20:30:53 2011 -0400 2011-08-03 r * : commit 225343f6ae58ab8ab6ccd564bb41d5723f7fd175 Author: R. Bernstein Date: Wed Aug 3 21:46:24 2011 -0400 2011-08-03 R. Bernstein * MANIFEST: Remove compat.swg. 2011-08-02 R. Bernstein * Build.PL, compat.swg, perlcdio.swg, perliso9660.swg: Remove compat.swg which was there for no-longer unsupport libcdio versions 2011-08-01 R. Bernstein * THANKS: More things that Jerry added. 2011-08-01 R. Bernstein * THANKS, audio.swg, device.swg, disc.swg, lib/Device/Cdio/Device.pm, lib/Device/Cdio/ISO9660/FS.pm, perlcdio.swg, perliso9660.swg, perlmmc.swg: More fixes and completion of code from Jerry G Geiger. Added get_cddb_discid audio_get_status get_joliet_level Fixed some faulty C code. 2011-08-01 R. Bernstein * Build.PL: Should now be able to build cleanly. Build.PL now copies shared object (.so's) to the right place. All the heavy lifting done by Jerry G Geiger. 2011-07-31 r * Makefile: Note remake. 2011-07-30 r * .gitignore, MANIFEST.SKIP, META.yml, Makefile: Administrivia. 2011-07-30 r * .gitignore, Build.PL, Makefile: Makefile : start to clean up and document tasks .gitignore: start merging info from .cvsignore Build.PL: remove debug output 2011-07-30 r * audio.swg, device.swg, perlcdio.swg: Remove gcc -Wstrict-prototypes warnings. 2011-07-30 r * README: Update copyright 2011-07-30 r * cvs2cl_header, cvs2cl_usermap: Remove some CVS cuft 2011-07-30 r * audio.swg, device.swg, disc.swg, lib/Device/Cdio/Device.pm, perlcdio.swg: Add Jerry G Geiger's patches to current git sources. 2011-07-30 r * Build.PL, META.yml, README, audio.swg, compat.swg, device.swg, device_const.swg, disc.swg, examples/README, examples/audio.pl, examples/cd-read.pl, examples/device.pl, examples/drives.pl, examples/eject.pl, examples/iso1.pl, examples/iso2.pl, examples/iso3.pl, examples/tracks.pl, lib/Device/Cdio.pm, lib/Device/Cdio/ISO9660.pm, perlcdio.swg, perliso9660.swg, read.swg, t/00.load.t, t/02.default.t, t/05.ops.t, t/06.bincue.t, t/06.image.t, t/06.toc.t, t/07.iso1.t, t/07.iso3.t, t/10.cdda.t, t/10.read.t, track.swg, types.swg: Add META.yml. Remove $Id$ lines. 2011-07-30 R. Bernstein * .gitignore, Build.PL, COPYING, THANKS, examples/.gitignore, examples/iso0.pl, lib/{.cvsignore => .gitignore}, lib/Device/Cdio.pm, perlmmc.swg, t/01.pod-coverage.t, t/01.pod.t, t/07.iso.t, t/07.iso2.t: Use Jerry G Geiger's Build.PL patch to get close to having this work automatically. I still needed to copy _wrap files to their unwrapped versions. Version numbers, and minimum required versions updated; tests updated too. Some CVS $Id$ lines removed. 2008-05-16 karl * COPYING: no need for separate COPYING file? 2008-04-29 karl * README, examples/audio.pl, examples/cd-read.pl, examples/cdchange.pl, examples/device.pl, examples/drives.pl, examples/eject.pl, examples/iso1.pl, examples/iso2.pl, examples/iso3.pl, examples/tracks.pl, lib/Device/Cdio.pm, lib/Device/Cdio/Device.pm, lib/Device/Cdio/ISO9660.pm, lib/Device/Cdio/ISO9660/FS.pm, lib/Device/Cdio/ISO9660/IFS.pm, lib/Device/Cdio/Track.pm, lib/Device/Cdio/Util.pm, perlcdio.swg, perliso9660.swg, perlmmc.swg: gplv3+ 2008-04-28 karl * Build.PL, COPYING, Makefile, audio.swg, compat.swg, device.swg, device_const.swg, disc.swg, perlcdio.swg, perliso9660.swg, perlmmc.swg, read.swg, track.swg, types.swg: gplv3+ 2007-08-12 rocky * lib/Device/Cdio/ISO9660/FS.pm, lib/Device/Cdio/ISO9660/IFS.pm: Documentation changes. 2007-08-01 rocky * MANIFEST, THANKS, perliso9660.swg: Memory allocation was off by one in the name_translate function. This could lead to a buffer overflow in when the translated name is as long as the original. Patch by Martín Ferrari 2007-07-31 rocky * Build.PL, perliso9660.swg: Build.PL: http://rt.cpan.org/Public/Bug/Display.html?id=28132 perlis9660.swg: the "perl" parameter part isn't needed since we don't bundle sources for different languages. 2007-01-31 rocky * lib/Device/Cdio/ISO9660/IFS.pm: Documentation changes. 2007-01-18 rocky * device.swg: Remove deprecated perl5 language indicator on typemaps. 2007-01-18 rocky * examples/README, lib/Device/Cdio/ISO9660/FS.pm, read.swg: read.swg: some signed ints become unsigned README, FS.PM: correct documentation. 2006-12-16 rocky * examples/cd-read.pl: cd-read: add hex-dump routine. 2006-12-03 rocky * lib/Device/Cdio/ISO9660.pm: Typo. 2006-11-12 rocky * lib/Device/Cdio/Device.pm: Another formatting change 2006-11-12 rocky * lib/Device/Cdio.pm: small perldoc formatting improvement. 2006-11-12 rocky * examples/cdchange.pl, perlcdio.swg, perliso9660.swg, perlmmc.swg: Add "use strict". 2006-10-15 rocky * lib/Device/Cdio.pm, lib/Device/Cdio/ISO9660.pm: Small document changes/corrections 2006-10-15 rocky * lib/Device/Cdio.pm: Small doc typo. 2006-09-02 rocky * .cvsignore, lib/Device/.cvsignore: . 2006-09-02 rocky * .cvsignore: . 2006-09-02 rocky * ChangeLog, Changes, Makefile: Get ready for v.0.2.4 release 2006-09-02 rocky * lib/Device/Cdio.pm: Wrong name in link: libiso9660->libcdio. 2006-08-07 rocky * examples/tracks.pl, lib/Device/Cdio/Track.pm, t/10.cdda.t: get_track_msf -> get_msf. Use/show msf in tracks.pl example program. 2006-08-07 rocky * disc.swg, lib/Device/Cdio/Track.pm, t/10.cdda.t, track.swg: Add get_track_msf. Patch supplied by Shannon. http://rt.cpan.org/Public/Bug/Display.html?id=20862 Doc fixes: pycdio. -> $perlcdio:: 2006-08-05 rocky * .cvsignore, Build.PL, lib/.cvsignore, t/07.iso.t: Get ready for new release. t/07.iso.t: ltime with DST is probably still broken. 2006-08-05 rocky * ChangeLog: ChangeLog 2006-08-05 rocky * ChangeLog, Changes, lib/Device/Cdio.pm: Get ready for 0.2.4 release. 2006-08-05 rocky * Makefile, lib/Device/Cdio/ISO9660/FS.pm, t/07.iso2.t: Fix bugs in Device::Cdio::ISO9600::FS::readddir and Device::Cdio::ISO9600::FS::find_lsn 2006-04-01 rocky * perlmmc.swg: Finish first pass of SWIGifying mmc.h. Nothing has been tested yet, and no doubt many changes lay ahead. 2006-04-01 rocky * Build.PL, MANIFEST, perliso9660.swg, perlmmc.swg: Start MMC interface. 2006-03-31 rocky * Changes: [no log message] 2006-03-31 rocky * examples/iso1.pl, examples/iso2.pl, examples/iso3.pl, lib/Device/Cdio/ISO9660/IFS.pm: IFS.pm: documentation changes examples/* small changes for clarity 2006-03-31 rocky * t/07.iso.t: Reinstate strnpad_cpy test. 2006-03-30 rocky * perliso9660.swg: Wasn't allocation large enough buffer for strncpy_pad. 2006-03-23 rocky * lib/Device/Cdio/Device.pm, perliso9660.swg: perlisio9660.swg: free C stat lists Device.pm: doc typo. 2006-03-23 rocky * README, examples/README, lib/Device/Cdio.pm, lib/Device/Cdio/Device.pm, lib/Device/Cdio/ISO9660.pm, lib/Device/Cdio/ISO9660/FS.pm, lib/Device/Cdio/Track.pm, perliso9660.swg: More documentation changes. (And there will be more until we get it right.) 2006-03-23 rocky * examples/.cvsignore: examples/.cvsignore 2006-03-23 rocky * examples/.cvsignore: examples/.cvsignore 2006-03-23 rocky * ChangeLog, Changes: Prepare for 0.2.3 release. 2006-03-20 rocky * lib/Device/Cdio.pm: perldoc touch-ups. 2006-03-17 rocky * t/07.iso.t: Got daylight saving's time issue fixed (probably) in libcdio 0.77. 2006-03-17 rocky * lib/Device/Cdio/Util.pm: We are Cdio, not CGI. 2006-03-17 rocky * t/07.iso.t: Add get/set ltime test. 2006-03-16 rocky * perliso9660.swg, t/07.iso.t: Reconcile differences in dtime vs tm structure somewhat. 2006-03-14 rocky * lib/Device/Cdio.pm, lib/Device/Cdio/ISO9660.pm, perliso9660.swg: ISO9660.pm: Minor corrections (perlcdio->perliso9660) Document corrections. FSF Address change 2006-03-13 rocky * ChangeLog, README, lib/Device/Cdio/ISO9660.pm, lib/Device/Cdio/ISO9660/FS.pm, lib/Device/Cdio/ISO9660/IFS.pm, perliso9660.swg: ISO9660.pm, perliso9660.swg: remove bogus b_mode2 stuff. IFS.pm: revise documentation README: revise since we are using Module::Build 2006-03-04 rocky * Build.PL, device.swg: Regressing Build.PL and device.swg. The problem that I changed Build.PL for was really caused by an erroneous commit of device.swg. 2006-03-04 rocky * Build.PL, ChangeLog: If we have SWIG, remove swig-generated files. I think they can cause problems on other platforms. 2006-03-03 rocky * t/07.iso.t: Gotta remove is_{a,d}char tests again. 2006-03-03 rocky * Makefile: make distcheck -> Build disttest (not distcheck). 2006-03-03 rocky * .cvsignore, Makefile.PL: .cvsignore 2006-03-03 rocky * Build.PL, Changes, Makefile.PL: add create_makefile_pl => passthrough for Makefile.PL compatibility 2006-03-03 rocky * ChangeLog: Get ready for release. 2006-03-03 rocky * lib/Device/Cdio.pm, lib/Device/Cdio/ISO9660.pm: more documetation work 2006-03-03 rocky * Changes: Prepare for release. 2006-03-03 rocky * t/07.iso.t: stncpy_pad still broken on cygwin. 2006-03-03 rocky * device.swg, t/.cvsignore, t/.gdb_history: t/.cvsignore 2006-03-03 rocky * lib/Device/Cdio/ISO9660.pm, t/07.iso.t: Fix stncpy_pad bug. 2006-03-03 rocky * MANIFEST, examples/iso3.pl, t/07.iso2.t, t/07.iso3.t: Turn example programs into regression tests. 2006-03-03 rocky * lib/Device/Cdio.pm, lib/Device/Cdio/Device.pm, lib/Device/Cdio/ISO9660.pm, lib/Device/Cdio/ISO9660/FS.pm, lib/Device/Cdio/ISO9660/IFS.pm, lib/Device/Cdio/Track.pm, t/07.iso1.t: Documenti modules better. 2006-03-03 rocky * perliso9660.swg: Orgainize documentation more, and more documentation. 2006-03-03 rocky * lib/.cvsignore: lib/.cvsignore 2006-03-03 rocky * ChangeLog, Changes, MANIFEST, MANIFEST.SKIP, lib/Device/Cdio/ISO9660.pm, t/07.iso1.t: ISO9660: bug in setting is_dir again. 07.iso1.t: Add ISO9660::IFS test 2006-03-03 rocky * Build.PL, MANIFEST, examples/iso1.pl, examples/iso2.pl, examples/iso3.pl, lib/Device/Cdio.pm, lib/Device/Cdio/ISO9660/FS.pm, lib/Device/Cdio/ISO9660/IFS.pm, perlcdio.swg, perliso9660.swg: IFS.pm, FS.pm: A better Synopsis page Build.PL: copy SWIG-generated files to lib. MANIFEST: Don't distribute out of blib to keep the CPAN indexer happy *.swg: Get VERSION from Device::Cdio examples/*.pl: use File::Spec to concatenate file names. Cdio.pm: Go for 0.2.2. 2006-03-02 rocky * ChangeLog, perliso9660.swg, t/07.iso.t: perliso9660.swg: remove stuff that was not used and/or misleading. 07.iso.t: skip strnpad tests until we understand why they sometimes fail. 2006-03-02 rocky * Build.PL, ChangeLog, lib/Device/Cdio/ISO9660.pm, lib/Device/Cdio/ISO9660/FS.pm, lib/Device/Cdio/ISO9660/IFS.pm, perliso9660.swg, t/07.iso.t: Build.PL: use pkg-config for iso9660. Solves the -libiconv problem on cygwin better (and doesn't break GNU/Linux). perliso9660.swg *.pm: remove more of the conditional LIBCDIO_VERSION_NUM tests. We'll live with a little more reduced for now. ISO9660.pm: more defensive about short stat arrays. 07.iso.t: typo creaped in. 2006-03-02 rocky * Build.PL, lib/Device/Cdio/ISO9660/IFS.pm, perliso9660.swg, t/07.iso.t: Fixes for stock libcdio 0.76 Some adjustments for cygwin (but I'm not sure cygwin's at fault.) 2006-03-02 rocky * .cvsignore, META.yml: META.yml is derived when making the distribution. 2006-03-02 rocky * examples/iso1.pl, lib/Device/Cdio/ISO9660.pm, lib/Device/Cdio/ISO9660/FS.pm, lib/Device/Cdio/ISO9660/IFS.pm, perliso9660.swg: IFS.pm, FS.pm: Add find_lsn routines. ISO9660.pm: Add common stat array to hash conversion routine IFS.pm, iso1.pm: Add get_xxx routines. use them in iso1.pm perliso9660.swg: Document more routines. Correct the ifs_get* routines. Regularize ifs_xxx instead of xxx_ifs via %rename. 2006-03-02 rocky * ChangeLog, README, cvs2cl_usermap, examples/cd-read.pl, lib/Device/Cdio.pm, lib/Device/Cdio/ISO9660/FS.pm, lib/Device/Cdio/ISO9660/IFS.pm, perliso9660.swg: perliso9660.swg: add lots of perlpod. All constants done and meny subroutines. all: Go over email addresses yet again. {,I}FS.pm: Prefer string comparison to numeric one. Some versions of perl can't handle the numeric comaprison for reasons I don't know or want to find out why. 2006-03-02 rocky * ChangeLog, Changes, META.yml, examples/README: Update documentation. 2006-03-02 rocky * MANIFEST, examples/iso1.pl, examples/iso2.pl, examples/iso3.pl, lib/Device/Cdio/Device.pm, lib/Device/Cdio/ISO9660/FS.pm, lib/Device/Cdio/ISO9660/IFS.pm, perliso9660.swg: Lots of changes to get IFS and FS working well enough for the sample programs iso2.pl and iso3.pl. We now return an singleton iso9660stat_t returning data from ISO 9660 reads works. Removed open and close from @EXPORTS (is in @EXPORTS_OK) as that was getting confused with builtin open()/close(). 2006-03-01 rocky * .cvsignore: .cvsignore add iso9660 c's and .o's 2006-03-01 rocky * lib/Device/Cdio/ISO9660.pm: Handles non-OO routines (like name_translate is_achar, etc.) 2006-03-01 rocky * MANIFEST, META.yml: MANIFEST: add IFS.pm 2006-03-01 rocky * MANIFEST, device.swg, examples/iso1.pl, lib/Device/Cdio/ISO9660/IFS.pm, perliso9660.swg: Get first example program, (iso1.c) from libcdio working. More routines from iso9660.h work. In particular readdir. device.swg, perlcdio.swig: better SWIG use based on recent experience with perlcdio9660.swg. 2006-02-28 rocky * lib/Device/Cdio/ISO9660/FS.pm: FS class is a subclass of Cdio::Device for working with ISO9660 tracks. 2006-02-28 rocky * lib/Device/Cdio/ISO9660/IFS.pm: Missing a method doc. 2006-02-28 rocky * MANIFEST, lib/Device/Cdio/ISO9660/IFS.pm, perliso9660.swg, read.swg, types.swg: More towards getting ISO 9660 working. A number of routines added. read.swg: was not freeing a char * return object. 2006-02-26 rocky * MANIFEST, lib/Device/Cdio.pm, lib/Device/Cdio/Device.pm, lib/Device/Cdio/ISO9660/IFS.pm, lib/Device/Cdio/Track.pm, perliso9660.swg, t/07.iso.t: More work on the ISO 9660 filesystem routines. Add first hint of Perl Package (Device::Cdio::ISO9660) and OO routines (Device::Cdio::ISO9660::IFS) 2006-02-25 rocky * Build.PL, device.swg, perliso9660.swg, t/07.iso.t, types.swg: More work on getting ISO 9660 more compilete. 2006-02-25 rocky * Build.PL, MANIFEST, perliso9660.swg, t/07.iso.t, types.swg: Looks like ISO9660 access for Perl (via libiso9660) will be a reality! 2006-02-24 rocky * Build.PL, MANIFEST, META.yml, device.swg, lib/Device/Cdio.pm: Version number need to change for CPAN. Build.PL: a little neater perhaps. 2006-02-13 rocky * ChangeLog, META.yml, device.swg, examples/device.pl, lib/Device/Cdio.pm, lib/Device/Cdio/Device.pm, lib/Device/Cdio/Track.pm, lib/Device/Cdio/Util.pm: device.swg: minor space issues Cdio.pm: alphabetize better Cdio.pm, Track.pm: set track moved from Device to Track Util.pm: set version number same as Device::Cdio 2006-02-13 rocky * Build.PL, ChangeLog, Changes, MANIFEST, MANIFEST.SKIP, META.yml, device.swg, lib/Device/Cdio.pm, lib/Device/Cdio/Device.pm, lib/Device/Cdio/Track.pm, t/06.bincue.t: Build.PL: we no longer require SWIG to be installed. We'll use our own perlcdio_wrap.c if not. device.swg: guard against using a libcdio's get_hwinfo which can store outside of the array. It's only a problem in theory as release revision numbers are not more than 4 bytes long and the current CVS (where the revsion number is 7 bytes long, e.g 0.77cvs) now truncates. *.pm: Synchronize version numbers. Device.pm: a more useful get_device routine. 2006-02-12 rocky * t/.gdb_history: Tolerate gdb debugging 2006-02-12 rocky * device.swg: Possibly a slightly better fix and slightly better code. 2006-02-12 rocky * device.swg: get_hw_info() change for Darwin. Don't know why, but static's inside of routine was causing memory to get clobbered. So moved it out. in char ** returns we really need to check that we don't have NULL. One 2006-02-11 rocky * Build.PL, lib/Device/Cdio.pm, lib/Device/Cdio/Device.pm, lib/Device/Cdio/Track.pm, lib/Device/Cdio/Util.pm: Allow Perl 5.8.6. Build.PL - remove "-undefined suppress". Thanks to Steve Schultz for cluing me into this. 2006-02-10 rocky * Build.PL, Changes, disc.swg, examples/tracks.pl, lib/Device/Cdio/Device.pm, t/10.cdda.t: disc.swg, Device.pm, 10.cdda.t: Add get_mcn and regression test. Changes: Note what we've got. Build.PL: make a guess at how darwin work. 2006-02-10 rocky * Build.PL, MANIFEST, MANIFEST.SKIP, examples/cd-read.pl, lib/Device/Cdio.pm, lib/Device/Cdio/Device.pm, perlcdio.swg, read.swg, t/10.read.t, types.swg: Fix bug in being able to return binary read data. Add cd-read program from libcdio. 2006-02-10 rocky * ChangeLog, ChangeLog.0, MANIFEST, MANIFEST.SKIP, Makefile, cvs2cl_header, cvs2cl_usermap, examples/audio.pl, examples/cdchange.pl, examples/device.pl, examples/drives.pl, examples/eject.pl, examples/tracks.pl: Allow example programs to get run outside of unpacked directory (if Cdio is installed). Add ChangeLogs and code for making them. 2006-02-10 rocky * device.swg, perlcdio.swg, types.swg: Move word size determination from device.swg to types.swg. A better place for it. perlcdio.swg: document more constants. 2006-02-10 rocky * Build.PL, device.swg: Another hack around word mismatch problem to reduce SWIG warnings. 2006-02-10 rocky * device.swg, examples/README: README: Add cautionary warnings about inoperability. Reduce expectations. device.swg: hack for word size. Sigh. 2006-02-10 rocky * Build.PL, device.swg, examples/tracks.pl: Fixes for cygwin tracks.pl: test for error condition - no CD installed. 2006-02-10 rocky * examples/device.pl: Work on device capabilities 2006-02-10 rocky * MANIFEST, t/10.read.t: Add read test. 2006-02-10 rocky * examples/device.pl, lib/Device/Cdio.pm, lib/Device/Cdio/Device.pm, lib/Device/Cdio/Track.pm, lib/Device/Cdio/Util.pm, perlcdio.swg, read.swg, t/10.cdda.t, types.swg: First cut at getting read routines working. There may be a bug in trying to return binary data. Just don't know how to do it in Perl yet. 2006-02-09 rocky * MANIFEST, device_const.swg, examples/README, examples/audio.pl, examples/cdchange.pl, examples/device.pl, examples/drives.pl, examples/eject.pl, examples/tracks.pl, lib/Device/Cdio.pm, lib/Device/Cdio/Track.pm, lib/Device/Cdio/Util.pm, t/00.load.t, t/01.pod-coverage.t, t/02.default.t, t/05.ops.t, t/06.bincue.t, t/06.image.t, t/06.toc.t, t/10.cdda.t: Use the BEGIN { cd ... } use lib; trick I learned on Perl Testing. Add more sample programs from libcdio. device.pl doesn't work though. 2006-02-09 rocky * Build.PL, Makefile, device.swg: Build.PL: Track %include dependencies of main SWIG file. device.swg: Use typedefs for clarity and to ensure typemap operations operate only where they should. 2006-02-09 rocky * device_const.swg, perlcdio.swg: Documentation. device_const.swg: filled in some ommitted FS's. 2006-02-09 rocky * device_const.swg, examples/audio.pl: Bugs in audio example. FS_ for filesystems didn't get added. 2006-02-09 rocky * Build.PL, META.yml, audio.swg, compat.swg, device.swg, device_const.swg, disc.swg, examples/audio.pl, examples/cdchange.pl, examples/eject.pl, examples/tracks.pl, lib/Device/Cdio.pm, lib/Device/Cdio/Device.pm, lib/Device/Cdio/Track.pm, lib/Device/Cdio/Util.pm, perlcdio.swg, read.swg, track.swg, types.swg: rocky@panix.com->rocky@cpan.org 2006-02-09 rocky * Build.PL, MANIFEST.SKIP, Makefile, lib/Device/Cdio.pm, lib/Device/Cdio/Device.pm, lib/Device/Cdio/Track.pm, perlcdio.swg: More documentation issues. Things to make Build happy (which I suppose means things are more correct.) 2006-02-09 rocky * .cvsignore, Build.PL, META.yml: Abstract got removed. 2006-02-09 rocky * MANIFEST, MANIFEST.SKIP: MANIFEST: store in the format Build wants it. MANIFEST.SKIP: skip those tmp files. 2006-02-09 rocky * Build.PL, MANIFEST, Makefile, t/06.bincue.t: Makefile: C O M P A T A B I L I T Y ! Build.PL: Nuke optimization. SWIG and gcc 4.0 and optimization don't play well. 2006-02-08 rocky * .cvsignore, Build.PL, MANIFEST.SKIP, configure: configure: run perl Build .cvsignore vs. MANIFEST.SKIP - the plague of originality Build.PL: test for SWIG 2006-02-08 rocky * Build.PL, MANIFEST, META.yml, Makefile.PL, examples/audio.pl, lib/Device/Cdio.pm: Build.PL: Fold in more configure-like checks Makefile.PL: Arrange to call Module::Builder Cdio.pm: Add more non-subroutine and general documentation audio.pl: search only drives with CD-DA 2006-02-08 rocky * Initial revision Device-Cdio-v2.0.0/COPYING000444001750001750 10451313222226267 14653 0ustar00rockyrocky000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . Device-Cdio-v2.0.0/configure000555001750001750 21613222226267 15442 0ustar00rockyrocky000000000000#!/bin/sh # $Id$ echo "Psst... This package is is build via 'perl Build.PL'" echo "Just a moment while I transfer your call." perl ./Build.PL Device-Cdio-v2.0.0/perlcdio_wrap.c000444001750001750 104603713222226267 16645 0ustar00rockyrocky000000000000/* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). * Version 3.0.10 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make * changes to this file unless you know what you are doing--modify the SWIG * interface file instead. * ----------------------------------------------------------------------------- */ #ifndef SWIGPERL #define SWIGPERL #endif #define SWIG_CASTRANK_MODE /* ----------------------------------------------------------------------------- * This section contains generic SWIG labels for method/variable * declarations/attributes, and other compiler dependent labels. * ----------------------------------------------------------------------------- */ /* template workaround for compilers that cannot correctly implement the C++ standard */ #ifndef SWIGTEMPLATEDISAMBIGUATOR # if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) # define SWIGTEMPLATEDISAMBIGUATOR template # elif defined(__HP_aCC) /* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ /* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ # define SWIGTEMPLATEDISAMBIGUATOR template # else # define SWIGTEMPLATEDISAMBIGUATOR # endif #endif /* inline attribute */ #ifndef SWIGINLINE # if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) # define SWIGINLINE inline # else # define SWIGINLINE # endif #endif /* attribute recognised by some compilers to avoid 'unused' warnings */ #ifndef SWIGUNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) # define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif # elif defined(__ICC) # define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif #endif #ifndef SWIG_MSC_UNSUPPRESS_4505 # if defined(_MSC_VER) # pragma warning(disable : 4505) /* unreferenced local function has been removed */ # endif #endif #ifndef SWIGUNUSEDPARM # ifdef __cplusplus # define SWIGUNUSEDPARM(p) # else # define SWIGUNUSEDPARM(p) p SWIGUNUSED # endif #endif /* internal SWIG method */ #ifndef SWIGINTERN # define SWIGINTERN static SWIGUNUSED #endif /* internal inline SWIG method */ #ifndef SWIGINTERNINLINE # define SWIGINTERNINLINE SWIGINTERN SWIGINLINE #endif /* exporting methods */ #if defined(__GNUC__) # if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) # ifndef GCC_HASCLASSVISIBILITY # define GCC_HASCLASSVISIBILITY # endif # endif #endif #ifndef SWIGEXPORT # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) # if defined(STATIC_LINKED) # define SWIGEXPORT # else # define SWIGEXPORT __declspec(dllexport) # endif # else # if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) # define SWIGEXPORT __attribute__ ((visibility("default"))) # else # define SWIGEXPORT # endif # endif #endif /* calling conventions for Windows */ #ifndef SWIGSTDCALL # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) # define SWIGSTDCALL __stdcall # else # define SWIGSTDCALL # endif #endif /* Deal with Microsoft's attempt at deprecating C standard runtime functions */ #if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) # define _CRT_SECURE_NO_DEPRECATE #endif /* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ #if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) # define _SCL_SECURE_NO_DEPRECATE #endif /* Deal with Apple's deprecated 'AssertMacros.h' from Carbon-framework */ #if defined(__APPLE__) && !defined(__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES) # define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0 #endif /* Intel's compiler complains if a variable which was never initialised is * cast to void, which is a common idiom which we use to indicate that we * are aware a variable isn't used. So we just silence that warning. * See: https://github.com/swig/swig/issues/192 for more discussion. */ #ifdef __INTEL_COMPILER # pragma warning disable 592 #endif /* ----------------------------------------------------------------------------- * swigrun.swg * * This file contains generic C API SWIG runtime support for pointer * type checking. * ----------------------------------------------------------------------------- */ /* This should only be incremented when either the layout of swig_type_info changes, or for whatever reason, the runtime changes incompatibly */ #define SWIG_RUNTIME_VERSION "4" /* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ #ifdef SWIG_TYPE_TABLE # define SWIG_QUOTE_STRING(x) #x # define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) # define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) #else # define SWIG_TYPE_TABLE_NAME #endif /* You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for creating a static or dynamic library from the SWIG runtime code. In 99.9% of the cases, SWIG just needs to declare them as 'static'. But only do this if strictly necessary, ie, if you have problems with your compiler or suchlike. */ #ifndef SWIGRUNTIME # define SWIGRUNTIME SWIGINTERN #endif #ifndef SWIGRUNTIMEINLINE # define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE #endif /* Generic buffer size */ #ifndef SWIG_BUFFER_SIZE # define SWIG_BUFFER_SIZE 1024 #endif /* Flags for pointer conversions */ #define SWIG_POINTER_DISOWN 0x1 #define SWIG_CAST_NEW_MEMORY 0x2 /* Flags for new pointer objects */ #define SWIG_POINTER_OWN 0x1 /* Flags/methods for returning states. The SWIG conversion methods, as ConvertPtr, return an integer that tells if the conversion was successful or not. And if not, an error code can be returned (see swigerrors.swg for the codes). Use the following macros/flags to set or process the returning states. In old versions of SWIG, code such as the following was usually written: if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { // success code } else { //fail code } Now you can be more explicit: int res = SWIG_ConvertPtr(obj,vptr,ty.flags); if (SWIG_IsOK(res)) { // success code } else { // fail code } which is the same really, but now you can also do Type *ptr; int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); if (SWIG_IsOK(res)) { // success code if (SWIG_IsNewObj(res) { ... delete *ptr; } else { ... } } else { // fail code } I.e., now SWIG_ConvertPtr can return new objects and you can identify the case and take care of the deallocation. Of course that also requires SWIG_ConvertPtr to return new result values, such as int SWIG_ConvertPtr(obj, ptr,...) { if () { if () { *ptr = ; return SWIG_NEWOBJ; } else { *ptr = ; return SWIG_OLDOBJ; } } else { return SWIG_BADOBJ; } } Of course, returning the plain '0(success)/-1(fail)' still works, but you can be more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the SWIG errors code. Finally, if the SWIG_CASTRANK_MODE is enabled, the result code allows to return the 'cast rank', for example, if you have this int food(double) int fooi(int); and you call food(1) // cast rank '1' (1 -> 1.0) fooi(1) // cast rank '0' just use the SWIG_AddCast()/SWIG_CheckState() */ #define SWIG_OK (0) #define SWIG_ERROR (-1) #define SWIG_IsOK(r) (r >= 0) #define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) /* The CastRankLimit says how many bits are used for the cast rank */ #define SWIG_CASTRANKLIMIT (1 << 8) /* The NewMask denotes the object was created (using new/malloc) */ #define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1) /* The TmpMask is for in/out typemaps that use temporal objects */ #define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1) /* Simple returning values */ #define SWIG_BADOBJ (SWIG_ERROR) #define SWIG_OLDOBJ (SWIG_OK) #define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK) #define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK) /* Check, add and del mask methods */ #define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r) #define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r) #define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK)) #define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r) #define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) #define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) /* Cast-Rank Mode */ #if defined(SWIG_CASTRANK_MODE) # ifndef SWIG_TypeRank # define SWIG_TypeRank unsigned long # endif # ifndef SWIG_MAXCASTRANK /* Default cast allowed */ # define SWIG_MAXCASTRANK (2) # endif # define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) # define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) SWIGINTERNINLINE int SWIG_AddCast(int r) { return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; } SWIGINTERNINLINE int SWIG_CheckState(int r) { return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; } #else /* no cast-rank mode */ # define SWIG_AddCast(r) (r) # define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) #endif #include #ifdef __cplusplus extern "C" { #endif typedef void *(*swig_converter_func)(void *, int *); typedef struct swig_type_info *(*swig_dycast_func)(void **); /* Structure to store information on one type */ typedef struct swig_type_info { const char *name; /* mangled name of this type */ const char *str; /* human readable name of this type */ swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ struct swig_cast_info *cast; /* linked list of types that can cast into this type */ void *clientdata; /* language specific type data */ int owndata; /* flag if the structure owns the clientdata */ } swig_type_info; /* Structure to store a type and conversion function used for casting */ typedef struct swig_cast_info { swig_type_info *type; /* pointer to type that is equivalent to this type */ swig_converter_func converter; /* function to cast the void pointers */ struct swig_cast_info *next; /* pointer to next cast in linked list */ struct swig_cast_info *prev; /* pointer to the previous cast */ } swig_cast_info; /* Structure used to store module information * Each module generates one structure like this, and the runtime collects * all of these structures and stores them in a circularly linked list.*/ typedef struct swig_module_info { swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ size_t size; /* Number of types in this module */ struct swig_module_info *next; /* Pointer to next element in circularly linked list */ swig_type_info **type_initial; /* Array of initially generated type structures */ swig_cast_info **cast_initial; /* Array of initially generated casting structures */ void *clientdata; /* Language specific module data */ } swig_module_info; /* Compare two type names skipping the space characters, therefore "char*" == "char *" and "Class" == "Class", etc. Return 0 when the two name types are equivalent, as in strncmp, but skipping ' '. */ SWIGRUNTIME int SWIG_TypeNameComp(const char *f1, const char *l1, const char *f2, const char *l2) { for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { while ((*f1 == ' ') && (f1 != l1)) ++f1; while ((*f2 == ' ') && (f2 != l2)) ++f2; if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; } return (int)((l1 - f1) - (l2 - f2)); } /* Check type equivalence in a name list like ||... Return 0 if equal, -1 if nb < tb, 1 if nb > tb */ SWIGRUNTIME int SWIG_TypeCmp(const char *nb, const char *tb) { int equiv = 1; const char* te = tb + strlen(tb); const char* ne = nb; while (equiv != 0 && *ne) { for (nb = ne; *ne; ++ne) { if (*ne == '|') break; } equiv = SWIG_TypeNameComp(nb, ne, tb, te); if (*ne) ++ne; } return equiv; } /* Check type equivalence in a name list like ||... Return 0 if not equal, 1 if equal */ SWIGRUNTIME int SWIG_TypeEquiv(const char *nb, const char *tb) { return SWIG_TypeCmp(nb, tb) == 0 ? 1 : 0; } /* Check the typename */ SWIGRUNTIME swig_cast_info * SWIG_TypeCheck(const char *c, swig_type_info *ty) { if (ty) { swig_cast_info *iter = ty->cast; while (iter) { if (strcmp(iter->type->name, c) == 0) { if (iter == ty->cast) return iter; /* Move iter to the top of the linked list */ iter->prev->next = iter->next; if (iter->next) iter->next->prev = iter->prev; iter->next = ty->cast; iter->prev = 0; if (ty->cast) ty->cast->prev = iter; ty->cast = iter; return iter; } iter = iter->next; } } return 0; } /* Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison */ SWIGRUNTIME swig_cast_info * SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) { if (ty) { swig_cast_info *iter = ty->cast; while (iter) { if (iter->type == from) { if (iter == ty->cast) return iter; /* Move iter to the top of the linked list */ iter->prev->next = iter->next; if (iter->next) iter->next->prev = iter->prev; iter->next = ty->cast; iter->prev = 0; if (ty->cast) ty->cast->prev = iter; ty->cast = iter; return iter; } iter = iter->next; } } return 0; } /* Cast a pointer up an inheritance hierarchy */ SWIGRUNTIMEINLINE void * SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); } /* Dynamic pointer casting. Down an inheritance hierarchy */ SWIGRUNTIME swig_type_info * SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { swig_type_info *lastty = ty; if (!ty || !ty->dcast) return ty; while (ty && (ty->dcast)) { ty = (*ty->dcast)(ptr); if (ty) lastty = ty; } return lastty; } /* Return the name associated with this type */ SWIGRUNTIMEINLINE const char * SWIG_TypeName(const swig_type_info *ty) { return ty->name; } /* Return the pretty name associated with this type, that is an unmangled type name in a form presentable to the user. */ SWIGRUNTIME const char * SWIG_TypePrettyName(const swig_type_info *type) { /* The "str" field contains the equivalent pretty names of the type, separated by vertical-bar characters. We choose to print the last name, as it is often (?) the most specific. */ if (!type) return NULL; if (type->str != NULL) { const char *last_name = type->str; const char *s; for (s = type->str; *s; s++) if (*s == '|') last_name = s+1; return last_name; } else return type->name; } /* Set the clientdata field for a type */ SWIGRUNTIME void SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { swig_cast_info *cast = ti->cast; /* if (ti->clientdata == clientdata) return; */ ti->clientdata = clientdata; while (cast) { if (!cast->converter) { swig_type_info *tc = cast->type; if (!tc->clientdata) { SWIG_TypeClientData(tc, clientdata); } } cast = cast->next; } } SWIGRUNTIME void SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { SWIG_TypeClientData(ti, clientdata); ti->owndata = 1; } /* Search for a swig_type_info structure only by mangled name Search is a O(log #types) We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * SWIG_MangledTypeQueryModule(swig_module_info *start, swig_module_info *end, const char *name) { swig_module_info *iter = start; do { if (iter->size) { size_t l = 0; size_t r = iter->size - 1; do { /* since l+r >= 0, we can (>> 1) instead (/ 2) */ size_t i = (l + r) >> 1; const char *iname = iter->types[i]->name; if (iname) { int compare = strcmp(name, iname); if (compare == 0) { return iter->types[i]; } else if (compare < 0) { if (i) { r = i - 1; } else { break; } } else if (compare > 0) { l = i + 1; } } else { break; /* should never happen */ } } while (l <= r); } iter = iter->next; } while (iter != end); return 0; } /* Search for a swig_type_info structure for either a mangled name or a human readable name. It first searches the mangled names of the types, which is a O(log #types) If a type is not found it then searches the human readable names, which is O(#types). We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * SWIG_TypeQueryModule(swig_module_info *start, swig_module_info *end, const char *name) { /* STEP 1: Search the name field using binary search */ swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); if (ret) { return ret; } else { /* STEP 2: If the type hasn't been found, do a complete search of the str field (the human readable name) */ swig_module_info *iter = start; do { size_t i = 0; for (; i < iter->size; ++i) { if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) return iter->types[i]; } iter = iter->next; } while (iter != end); } /* neither found a match */ return 0; } /* Pack binary data into a string */ SWIGRUNTIME char * SWIG_PackData(char *c, void *ptr, size_t sz) { static const char hex[17] = "0123456789abcdef"; const unsigned char *u = (unsigned char *) ptr; const unsigned char *eu = u + sz; for (; u != eu; ++u) { unsigned char uu = *u; *(c++) = hex[(uu & 0xf0) >> 4]; *(c++) = hex[uu & 0xf]; } return c; } /* Unpack binary data from a string */ SWIGRUNTIME const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) { unsigned char *u = (unsigned char *) ptr; const unsigned char *eu = u + sz; for (; u != eu; ++u) { char d = *(c++); unsigned char uu; if ((d >= '0') && (d <= '9')) uu = (unsigned char)((d - '0') << 4); else if ((d >= 'a') && (d <= 'f')) uu = (unsigned char)((d - ('a'-10)) << 4); else return (char *) 0; d = *(c++); if ((d >= '0') && (d <= '9')) uu |= (unsigned char)(d - '0'); else if ((d >= 'a') && (d <= 'f')) uu |= (unsigned char)(d - ('a'-10)); else return (char *) 0; *u = uu; } return c; } /* Pack 'void *' into a string buffer. */ SWIGRUNTIME char * SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { char *r = buff; if ((2*sizeof(void *) + 2) > bsz) return 0; *(r++) = '_'; r = SWIG_PackData(r,&ptr,sizeof(void *)); if (strlen(name) + 1 > (bsz - (r - buff))) return 0; strcpy(r,name); return buff; } SWIGRUNTIME const char * SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { if (*c != '_') { if (strcmp(c,"NULL") == 0) { *ptr = (void *) 0; return name; } else { return 0; } } return SWIG_UnpackData(++c,ptr,sizeof(void *)); } SWIGRUNTIME char * SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { char *r = buff; size_t lname = (name ? strlen(name) : 0); if ((2*sz + 2 + lname) > bsz) return 0; *(r++) = '_'; r = SWIG_PackData(r,ptr,sz); if (lname) { strncpy(r,name,lname+1); } else { *r = 0; } return buff; } SWIGRUNTIME const char * SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { if (*c != '_') { if (strcmp(c,"NULL") == 0) { memset(ptr,0,sz); return name; } else { return 0; } } return SWIG_UnpackData(++c,ptr,sz); } #ifdef __cplusplus } #endif /* Errors in SWIG */ #define SWIG_UnknownError -1 #define SWIG_IOError -2 #define SWIG_RuntimeError -3 #define SWIG_IndexError -4 #define SWIG_TypeError -5 #define SWIG_DivisionByZero -6 #define SWIG_OverflowError -7 #define SWIG_SyntaxError -8 #define SWIG_ValueError -9 #define SWIG_SystemError -10 #define SWIG_AttributeError -11 #define SWIG_MemoryError -12 #define SWIG_NullReferenceError -13 #ifdef __cplusplus /* Needed on some windows machines---since MS plays funny games with the header files under C++ */ #include #include extern "C" { #endif #include "EXTERN.h" #include "perl.h" #include "XSUB.h" /* Add in functionality missing in older versions of Perl. Much of this is based on Devel-PPPort on cpan. */ /* Add PERL_REVISION, PERL_VERSION, PERL_SUBVERSION if missing */ #ifndef PERL_REVISION # if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION)) # define PERL_PATCHLEVEL_H_IMPLICIT # include # endif # if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL))) # include # endif # ifndef PERL_REVISION # define PERL_REVISION (5) # define PERL_VERSION PATCHLEVEL # define PERL_SUBVERSION SUBVERSION # endif #endif #if defined(WIN32) && defined(PERL_OBJECT) && !defined(PerlIO_exportFILE) #define PerlIO_exportFILE(fh,fl) (FILE*)(fh) #endif #ifndef SvIOK_UV # define SvIOK_UV(sv) (SvIOK(sv) && (SvUVX(sv) == SvIVX(sv))) #endif #ifndef SvUOK # define SvUOK(sv) SvIOK_UV(sv) #endif #if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5))) # define PL_sv_undef sv_undef # define PL_na na # define PL_errgv errgv # define PL_sv_no sv_no # define PL_sv_yes sv_yes # define PL_markstack_ptr markstack_ptr #endif #ifndef IVSIZE # ifdef LONGSIZE # define IVSIZE LONGSIZE # else # define IVSIZE 4 /* A bold guess, but the best we can make. */ # endif #endif #ifndef INT2PTR # if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) # define PTRV UV # define INT2PTR(any,d) (any)(d) # else # if PTRSIZE == LONGSIZE # define PTRV unsigned long # else # define PTRV unsigned # endif # define INT2PTR(any,d) (any)(PTRV)(d) # endif # define NUM2PTR(any,d) (any)(PTRV)(d) # define PTR2IV(p) INT2PTR(IV,p) # define PTR2UV(p) INT2PTR(UV,p) # define PTR2NV(p) NUM2PTR(NV,p) # if PTRSIZE == LONGSIZE # define PTR2ul(p) (unsigned long)(p) # else # define PTR2ul(p) INT2PTR(unsigned long,p) # endif #endif /* !INT2PTR */ #ifndef SvPV_nolen # define SvPV_nolen(x) SvPV(x,PL_na) #endif #ifndef get_sv # define get_sv perl_get_sv #endif #ifndef ERRSV # define ERRSV get_sv("@",FALSE) #endif #ifndef pTHX_ #define pTHX_ #endif #include #ifdef __cplusplus } #endif /* ----------------------------------------------------------------------------- * error manipulation * ----------------------------------------------------------------------------- */ SWIGINTERN const char* SWIG_Perl_ErrorType(int code) { switch(code) { case SWIG_MemoryError: return "MemoryError"; case SWIG_IOError: return "IOError"; case SWIG_RuntimeError: return "RuntimeError"; case SWIG_IndexError: return "IndexError"; case SWIG_TypeError: return "TypeError"; case SWIG_DivisionByZero: return "ZeroDivisionError"; case SWIG_OverflowError: return "OverflowError"; case SWIG_SyntaxError: return "SyntaxError"; case SWIG_ValueError: return "ValueError"; case SWIG_SystemError: return "SystemError"; case SWIG_AttributeError: return "AttributeError"; default: return "RuntimeError"; } } /* ----------------------------------------------------------------------------- * perlrun.swg * * This file contains the runtime support for Perl modules * and includes code for managing global variables and pointer * type checking. * ----------------------------------------------------------------------------- */ #ifdef PERL_OBJECT #define SWIG_PERL_OBJECT_DECL CPerlObj *SWIGUNUSEDPARM(pPerl), #define SWIG_PERL_OBJECT_CALL pPerl, #else #define SWIG_PERL_OBJECT_DECL #define SWIG_PERL_OBJECT_CALL #endif /* Common SWIG API */ /* for raw pointers */ #define SWIG_ConvertPtr(obj, pp, type, flags) SWIG_Perl_ConvertPtr(SWIG_PERL_OBJECT_CALL obj, pp, type, flags) #define SWIG_ConvertPtrAndOwn(obj, pp, type, flags,own) SWIG_Perl_ConvertPtrAndOwn(SWIG_PERL_OBJECT_CALL obj, pp, type, flags, own) #define SWIG_NewPointerObj(p, type, flags) SWIG_Perl_NewPointerObj(SWIG_PERL_OBJECT_CALL p, type, flags) #define swig_owntype int /* for raw packed data */ #define SWIG_ConvertPacked(obj, p, s, type) SWIG_Perl_ConvertPacked(SWIG_PERL_OBJECT_CALL obj, p, s, type) #define SWIG_NewPackedObj(p, s, type) SWIG_Perl_NewPackedObj(SWIG_PERL_OBJECT_CALL p, s, type) /* for class or struct pointers */ #define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags) #define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags) /* for C or C++ function pointers */ #define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_ConvertPtr(obj, pptr, type, 0) #define SWIG_NewFunctionPtrObj(ptr, type) SWIG_NewPointerObj(ptr, type, 0) /* for C++ member pointers, ie, member methods */ #define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_ConvertPacked(obj, ptr, sz, ty) #define SWIG_NewMemberObj(ptr, sz, type) SWIG_NewPackedObj(ptr, sz, type) /* Runtime API */ #define SWIG_GetModule(clientdata) SWIG_Perl_GetModule(clientdata) #define SWIG_SetModule(clientdata, pointer) SWIG_Perl_SetModule(pointer) /* Error manipulation */ #define SWIG_ErrorType(code) SWIG_Perl_ErrorType(code) #define SWIG_Error(code, msg) sv_setpvf(get_sv("@", GV_ADD), "%s %s", SWIG_ErrorType(code), msg) #define SWIG_fail goto fail /* Perl-specific SWIG API */ #define SWIG_MakePtr(sv, ptr, type, flags) SWIG_Perl_MakePtr(SWIG_PERL_OBJECT_CALL sv, ptr, type, flags) #define SWIG_MakePackedObj(sv, p, s, type) SWIG_Perl_MakePackedObj(SWIG_PERL_OBJECT_CALL sv, p, s, type) #define SWIG_SetError(str) SWIG_Error(SWIG_RuntimeError, str) #define SWIG_PERL_DECL_ARGS_1(arg1) (SWIG_PERL_OBJECT_DECL arg1) #define SWIG_PERL_CALL_ARGS_1(arg1) (SWIG_PERL_OBJECT_CALL arg1) #define SWIG_PERL_DECL_ARGS_2(arg1, arg2) (SWIG_PERL_OBJECT_DECL arg1, arg2) #define SWIG_PERL_CALL_ARGS_2(arg1, arg2) (SWIG_PERL_OBJECT_CALL arg1, arg2) /* ----------------------------------------------------------------------------- * pointers/data manipulation * ----------------------------------------------------------------------------- */ /* For backward compatibility only */ #define SWIG_POINTER_EXCEPTION 0 #ifdef __cplusplus extern "C" { #endif #define SWIG_OWNER SWIG_POINTER_OWN #define SWIG_SHADOW SWIG_OWNER << 1 #define SWIG_MAYBE_PERL_OBJECT SWIG_PERL_OBJECT_DECL /* SWIG Perl macros */ /* Macro to declare an XS function */ #ifndef XSPROTO # define XSPROTO(name) void name(pTHX_ CV* cv) #endif /* Macro to call an XS function */ #ifdef PERL_OBJECT # define SWIG_CALLXS(_name) _name(cv,pPerl) #else # ifndef MULTIPLICITY # define SWIG_CALLXS(_name) _name(cv) # else # define SWIG_CALLXS(_name) _name(PERL_GET_THX, cv) # endif #endif #ifdef PERL_OBJECT #define MAGIC_PPERL CPerlObj *pPerl = (CPerlObj *) this; #ifdef __cplusplus extern "C" { #endif typedef int (CPerlObj::*SwigMagicFunc)(SV *, MAGIC *); #ifdef __cplusplus } #endif #define SWIG_MAGIC(a,b) (SV *a, MAGIC *b) #define SWIGCLASS_STATIC #else /* PERL_OBJECT */ #define MAGIC_PPERL #define SWIGCLASS_STATIC static SWIGUNUSED #ifndef MULTIPLICITY #define SWIG_MAGIC(a,b) (SV *a, MAGIC *b) #ifdef __cplusplus extern "C" { #endif typedef int (*SwigMagicFunc)(SV *, MAGIC *); #ifdef __cplusplus } #endif #else /* MULTIPLICITY */ #define SWIG_MAGIC(a,b) (struct interpreter *interp, SV *a, MAGIC *b) #ifdef __cplusplus extern "C" { #endif typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *); #ifdef __cplusplus } #endif #endif /* MULTIPLICITY */ #endif /* PERL_OBJECT */ # ifdef PERL_OBJECT # define SWIG_croak_null() SWIG_Perl_croak_null(pPerl) static void SWIGUNUSED SWIG_Perl_croak_null(CPerlObj *pPerl) # else static void SWIGUNUSED SWIG_croak_null() # endif { SV *err = get_sv("@", GV_ADD); # if (PERL_VERSION < 6) croak("%_", err); # else if (sv_isobject(err)) croak(0); else croak("%s", SvPV_nolen(err)); # endif } /* Define how strict is the cast between strings and integers/doubles when overloading between these types occurs. The default is making it as strict as possible by using SWIG_AddCast when needed. You can use -DSWIG_PERL_NO_STRICT_STR2NUM at compilation time to disable the SWIG_AddCast, making the casting between string and numbers less strict. In the end, we try to solve the overloading between strings and numerical types in the more natural way, but if you can avoid it, well, avoid it using %rename, for example. */ #ifndef SWIG_PERL_NO_STRICT_STR2NUM # ifndef SWIG_PERL_STRICT_STR2NUM # define SWIG_PERL_STRICT_STR2NUM # endif #endif #ifdef SWIG_PERL_STRICT_STR2NUM /* string takes precedence */ #define SWIG_Str2NumCast(x) SWIG_AddCast(x) #else /* number takes precedence */ #define SWIG_Str2NumCast(x) x #endif #include SWIGRUNTIME const char * SWIG_Perl_TypeProxyName(const swig_type_info *type) { if (!type) return NULL; if (type->clientdata != NULL) { return (const char*) type->clientdata; } else { return type->name; } } /* Identical to SWIG_TypeCheck, except for strcmp comparison */ SWIGRUNTIME swig_cast_info * SWIG_TypeProxyCheck(const char *c, swig_type_info *ty) { if (ty) { swig_cast_info *iter = ty->cast; while (iter) { if (strcmp(SWIG_Perl_TypeProxyName(iter->type), c) == 0) { if (iter == ty->cast) return iter; /* Move iter to the top of the linked list */ iter->prev->next = iter->next; if (iter->next) iter->next->prev = iter->prev; iter->next = ty->cast; iter->prev = 0; if (ty->cast) ty->cast->prev = iter; ty->cast = iter; return iter; } iter = iter->next; } } return 0; } /* Function for getting a pointer value */ SWIGRUNTIME int SWIG_Perl_ConvertPtrAndOwn(SWIG_MAYBE_PERL_OBJECT SV *sv, void **ptr, swig_type_info *_t, int flags, int *own) { swig_cast_info *tc; void *voidptr = (void *)0; SV *tsv = 0; if (own) *own = 0; /* If magical, apply more magic */ if (SvGMAGICAL(sv)) mg_get(sv); /* Check to see if this is an object */ if (sv_isobject(sv)) { IV tmp = 0; tsv = (SV*) SvRV(sv); if ((SvTYPE(tsv) == SVt_PVHV)) { MAGIC *mg; if (SvMAGICAL(tsv)) { mg = mg_find(tsv,'P'); if (mg) { sv = mg->mg_obj; if (sv_isobject(sv)) { tsv = (SV*)SvRV(sv); tmp = SvIV(tsv); } } } else { return SWIG_ERROR; } } else { tmp = SvIV(tsv); } voidptr = INT2PTR(void *,tmp); } else if (! SvOK(sv)) { /* Check for undef */ *(ptr) = (void *) 0; return SWIG_OK; } else if (SvTYPE(sv) == SVt_RV) { /* Check for NULL pointer */ if (!SvROK(sv)) { /* In Perl 5.12 and later, SVt_RV == SVt_IV, so sv could be a valid integer value. */ if (SvIOK(sv)) { return SWIG_ERROR; } else { /* NULL pointer (reference to undef). */ *(ptr) = (void *) 0; return SWIG_OK; } } else { return SWIG_ERROR; } } else { /* Don't know what it is */ return SWIG_ERROR; } if (_t) { /* Now see if the types match */ char *_c = HvNAME(SvSTASH(SvRV(sv))); tc = SWIG_TypeProxyCheck(_c,_t); #ifdef SWIG_DIRECTORS if (!tc && !sv_derived_from(sv,SWIG_Perl_TypeProxyName(_t))) { #else if (!tc) { #endif return SWIG_ERROR; } { int newmemory = 0; *ptr = SWIG_TypeCast(tc,voidptr,&newmemory); if (newmemory == SWIG_CAST_NEW_MEMORY) { assert(own); /* badly formed typemap which will lead to a memory leak - it must set and use own to delete *ptr */ if (own) *own = *own | SWIG_CAST_NEW_MEMORY; } } } else { *ptr = voidptr; } /* * DISOWN implementation: we need a perl guru to check this one. */ if (tsv && (flags & SWIG_POINTER_DISOWN)) { /* * almost copy paste code from below SWIG_POINTER_OWN setting */ SV *obj = sv; HV *stash = SvSTASH(SvRV(obj)); GV *gv = *(GV**)hv_fetch(stash, "OWNER", 5, TRUE); if (isGV(gv)) { HV *hv = GvHVn(gv); /* * To set ownership (see below), a newSViv(1) entry is added. * Hence, to remove ownership, we delete the entry. */ if (hv_exists_ent(hv, obj, 0)) { hv_delete_ent(hv, obj, 0, 0); } } } return SWIG_OK; } SWIGRUNTIME int SWIG_Perl_ConvertPtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void **ptr, swig_type_info *_t, int flags) { return SWIG_Perl_ConvertPtrAndOwn(sv, ptr, _t, flags, 0); } SWIGRUNTIME void SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, int flags) { if (ptr && (flags & (SWIG_SHADOW | SWIG_POINTER_OWN))) { SV *self; SV *obj=newSV(0); HV *hash=newHV(); HV *stash; sv_setref_pv(obj, SWIG_Perl_TypeProxyName(t), ptr); stash=SvSTASH(SvRV(obj)); if (flags & SWIG_POINTER_OWN) { HV *hv; GV *gv = *(GV**)hv_fetch(stash, "OWNER", 5, TRUE); if (!isGV(gv)) gv_init(gv, stash, "OWNER", 5, FALSE); hv=GvHVn(gv); hv_store_ent(hv, obj, newSViv(1), 0); } sv_magic((SV *)hash, (SV *)obj, 'P', Nullch, 0); SvREFCNT_dec(obj); self=newRV_noinc((SV *)hash); sv_setsv(sv, self); SvREFCNT_dec((SV *)self); sv_bless(sv, stash); } else { sv_setref_pv(sv, SWIG_Perl_TypeProxyName(t), ptr); } } SWIGRUNTIMEINLINE SV * SWIG_Perl_NewPointerObj(SWIG_MAYBE_PERL_OBJECT void *ptr, swig_type_info *t, int flags) { SV *result = sv_newmortal(); SWIG_MakePtr(result, ptr, t, flags); return result; } SWIGRUNTIME void SWIG_Perl_MakePackedObj(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, int sz, swig_type_info *type) { char result[1024]; char *r = result; if ((2*sz + 1 + strlen(SWIG_Perl_TypeProxyName(type))) > 1000) return; *(r++) = '_'; r = SWIG_PackData(r,ptr,sz); strcpy(r,SWIG_Perl_TypeProxyName(type)); sv_setpv(sv, result); } SWIGRUNTIME SV * SWIG_Perl_NewPackedObj(SWIG_MAYBE_PERL_OBJECT void *ptr, int sz, swig_type_info *type) { SV *result = sv_newmortal(); SWIG_Perl_MakePackedObj(result, ptr, sz, type); return result; } /* Convert a packed value value */ SWIGRUNTIME int SWIG_Perl_ConvertPacked(SWIG_MAYBE_PERL_OBJECT SV *obj, void *ptr, int sz, swig_type_info *ty) { swig_cast_info *tc; const char *c = 0; if ((!obj) || (!SvOK(obj))) return SWIG_ERROR; c = SvPV_nolen(obj); /* Pointer values must start with leading underscore */ if (*c != '_') return SWIG_ERROR; c++; c = SWIG_UnpackData(c,ptr,sz); if (ty) { tc = SWIG_TypeCheck(c,ty); if (!tc) return SWIG_ERROR; } return SWIG_OK; } /* Macros for low-level exception handling */ #define SWIG_croak(x) { SWIG_Error(SWIG_RuntimeError, x); SWIG_fail; } typedef XSPROTO(SwigPerlWrapper); typedef SwigPerlWrapper *SwigPerlWrapperPtr; /* Structure for command table */ typedef struct { const char *name; SwigPerlWrapperPtr wrapper; } swig_command_info; /* Information for constant table */ #define SWIG_INT 1 #define SWIG_FLOAT 2 #define SWIG_STRING 3 #define SWIG_POINTER 4 #define SWIG_BINARY 5 /* Constant information structure */ typedef struct swig_constant_info { int type; const char *name; long lvalue; double dvalue; void *pvalue; swig_type_info **ptype; } swig_constant_info; /* Structure for variable table */ typedef struct { const char *name; SwigMagicFunc set; SwigMagicFunc get; swig_type_info **type; } swig_variable_info; /* Magic variable code */ #ifndef PERL_OBJECT # ifdef __cplusplus # define swig_create_magic(s,a,b,c) _swig_create_magic(s,const_cast(a),b,c) # else # define swig_create_magic(s,a,b,c) _swig_create_magic(s,(char*)(a),b,c) # endif # ifndef MULTIPLICITY SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *)) # else SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *)) # endif #else # define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c) SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (CPerlObj::*set)(SV *, MAGIC *), int (CPerlObj::*get)(SV *, MAGIC *)) #endif { MAGIC *mg; sv_magic(sv,sv,'U',name,strlen(name)); mg = mg_find(sv,'U'); mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL)); mg->mg_virtual->svt_get = (SwigMagicFunc) get; mg->mg_virtual->svt_set = (SwigMagicFunc) set; mg->mg_virtual->svt_len = 0; mg->mg_virtual->svt_clear = 0; mg->mg_virtual->svt_free = 0; } SWIGRUNTIME swig_module_info * SWIG_Perl_GetModule(void *SWIGUNUSEDPARM(clientdata)) { static void *type_pointer = (void *)0; SV *pointer; /* first check if pointer already created */ if (!type_pointer) { pointer = get_sv("swig_runtime_data::type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, FALSE | GV_ADDMULTI); if (pointer && SvOK(pointer)) { type_pointer = INT2PTR(swig_type_info **, SvIV(pointer)); } } return (swig_module_info *) type_pointer; } SWIGRUNTIME void SWIG_Perl_SetModule(swig_module_info *module) { SV *pointer; /* create a new pointer */ pointer = get_sv("swig_runtime_data::type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, TRUE | GV_ADDMULTI); sv_setiv(pointer, PTR2IV(module)); } #ifdef __cplusplus } #endif /* Workaround perl5 global namespace pollution. Note that undefining library * functions like fopen will not solve the problem on all platforms as fopen * might be a macro on Windows but not necessarily on other operating systems. */ #ifdef do_open #undef do_open #endif #ifdef do_close #undef do_close #endif #ifdef do_exec #undef do_exec #endif #ifdef scalar #undef scalar #endif #ifdef list #undef list #endif #ifdef apply #undef apply #endif #ifdef convert #undef convert #endif #ifdef Error #undef Error #endif #ifdef form #undef form #endif #ifdef vform #undef vform #endif #ifdef LABEL #undef LABEL #endif #ifdef METHOD #undef METHOD #endif #ifdef Move #undef Move #endif #ifdef yylex #undef yylex #endif #ifdef yyparse #undef yyparse #endif #ifdef yyerror #undef yyerror #endif #ifdef invert #undef invert #endif #ifdef ref #undef ref #endif #ifdef read #undef read #endif #ifdef write #undef write #endif #ifdef eof #undef eof #endif #ifdef close #undef close #endif #ifdef rewind #undef rewind #endif #ifdef free #undef free #endif #ifdef malloc #undef malloc #endif #ifdef calloc #undef calloc #endif #ifdef Stat #undef Stat #endif #ifdef check #undef check #endif #ifdef seekdir #undef seekdir #endif #ifdef open #undef open #endif #ifdef readdir #undef readdir #endif #ifdef bind #undef bind #endif #ifdef access #undef access #endif #ifdef stat #undef stat #endif #ifdef seed #undef seed #endif #ifdef bool /* Leave if macro is from C99 stdbool.h */ #ifndef __bool_true_false_are_defined #undef bool #endif #endif #define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) #define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else /* -------- TYPES TABLE (BEGIN) -------- */ #define SWIGTYPE_p_CdIo_t swig_types[0] #define SWIGTYPE_p_a_9220__unsigned_char swig_types[1] #define SWIGTYPE_p_cdio_hwinfo_t swig_types[2] #define SWIGTYPE_p_cdtext_t swig_types[3] #define SWIGTYPE_p_char swig_types[4] #define SWIGTYPE_p_imaxdiv_t swig_types[5] #define SWIGTYPE_p_int swig_types[6] #define SWIGTYPE_p_iso9660_pvd_t swig_types[7] #define SWIGTYPE_p_long swig_types[8] #define SWIGTYPE_p_long_long swig_types[9] #define SWIGTYPE_p_off_t swig_types[10] #define SWIGTYPE_p_p_char swig_types[11] #define SWIGTYPE_p_short swig_types[12] #define SWIGTYPE_p_signed_char swig_types[13] #define SWIGTYPE_p_unsigned_char swig_types[14] #define SWIGTYPE_p_unsigned_int swig_types[15] #define SWIGTYPE_p_unsigned_long_long swig_types[16] #define SWIGTYPE_p_unsigned_short swig_types[17] static swig_type_info *swig_types[19]; static swig_module_info swig_module = {swig_types, 18, 0, 0, 0, 0}; #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) /* -------- TYPES TABLE (END) -------- */ #define SWIG_init boot_perlcdio #define SWIG_name "perlcdioc::boot_perlcdio" #define SWIG_prefix "perlcdioc::" #define SWIGVERSION 0x030010 #define SWIG_VERSION SWIGVERSION #define SWIG_as_voidptr(a) (void *)((const void *)(a)) #define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),(void**)(a)) #ifdef __cplusplus extern "C" #endif #ifndef PERL_OBJECT #ifndef MULTIPLICITY SWIGEXPORT void SWIG_init (CV* cv); #else SWIGEXPORT void SWIG_init (pTHXo_ CV* cv); #endif #else SWIGEXPORT void SWIG_init (CV *cv, CPerlObj *); #endif /* Includes the header in the wrapper code */ #include #include #include #include #include #include #include // Use the C99 official header #include #if !defined(SWIG_NO_LLONG_MAX) # if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__) # define LLONG_MAX __LONG_LONG_MAX__ # define LLONG_MIN (-LLONG_MAX - 1LL) # define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) # endif #endif #if defined(LLONG_MAX) && !defined(SWIG_LONG_LONG_AVAILABLE) # define SWIG_LONG_LONG_AVAILABLE #endif #include #ifdef _MSC_VER # ifndef strtoull # define strtoull _strtoui64 # endif # ifndef strtoll # define strtoll _strtoi64 # endif #endif SWIGINTERN int SWIG_AsVal_double SWIG_PERL_DECL_ARGS_2(SV *obj, double *val) { if (SvNIOK(obj)) { if (val) *val = SvNV(obj); return SWIG_OK; } else if (SvIOK(obj)) { if (val) *val = (double) SvIV(obj); return SWIG_AddCast(SWIG_OK); } else { const char *nptr = SvPV_nolen(obj); if (nptr) { char *endptr; double v; errno = 0; v = strtod(nptr, &endptr); if (errno == ERANGE) { errno = 0; return SWIG_OverflowError; } else { if (*endptr == '\0') { if (val) *val = v; return SWIG_Str2NumCast(SWIG_OK); } } } } return SWIG_TypeError; } #include #include SWIGINTERNINLINE int SWIG_CanCastAsInteger(double *d, double min, double max) { double x = *d; if ((min <= x && x <= max)) { double fx = floor(x); double cx = ceil(x); double rd = ((x - fx) < 0.5) ? fx : cx; /* simple rint */ if ((errno == EDOM) || (errno == ERANGE)) { errno = 0; } else { double summ, reps, diff; if (rd < x) { diff = x - rd; } else if (rd > x) { diff = rd - x; } else { return 1; } summ = rd + x; reps = diff/summ; if (reps < 8*DBL_EPSILON) { *d = rd; return 1; } } } return 0; } #ifdef SWIG_LONG_LONG_AVAILABLE SWIGINTERN int SWIG_AsVal_long_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, long long *val) { if (SvUOK(obj)) { UV v = SvUV(obj); /* pretty sure this could allow v == LLONG MAX */ if (UVSIZE < sizeof(*val) || v < LLONG_MAX) { if (val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else if (SvIOK(obj)) { IV v = SvIV(obj); if (IVSIZE <= sizeof(*val) || (v >= LLONG_MIN && v <= LLONG_MAX)) { if (val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else { int dispatch = 0; const char *nptr = SvPV_nolen(obj); if (nptr) { char *endptr; long long v; errno = 0; v = strtoll(nptr, &endptr,0); if (errno == ERANGE) { errno = 0; return SWIG_OverflowError; } else { if (*endptr == '\0') { if (val) *val = v; return SWIG_Str2NumCast(SWIG_OK); } } } if (!dispatch) { const double mant_max = 1LL << DBL_MANT_DIG; const double mant_min = -mant_max; double d; int res = SWIG_AddCast(SWIG_AsVal_double SWIG_PERL_CALL_ARGS_2(obj,&d)); if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, mant_min, mant_max)) { if (val) *val = (long long)(d); return res; } } } return SWIG_TypeError; } #endif #include #if defined(_MSC_VER) || defined(__BORLANDC__) || defined(_WATCOM) # ifndef snprintf # define snprintf _snprintf # endif #endif #ifdef SWIG_LONG_LONG_AVAILABLE SWIGINTERNINLINE SV * SWIG_From_long_SS_long SWIG_PERL_DECL_ARGS_1(long long value) { SV *sv; if (IVSIZE >= sizeof(value) || (value >= IV_MIN && value <= IV_MAX)) sv = newSViv((IV)(value)); else { //sv = newSVpvf("%lld", value); doesn't work in non 64bit Perl char temp[256]; sprintf(temp, "%lld", value); sv = newSVpv(temp, 0); } return sv_2mortal(sv); } #endif SWIGINTERN swig_type_info* SWIG_pchar_descriptor(void) { static int init = 0; static swig_type_info* info = 0; if (!init) { info = SWIG_TypeQuery("_p_char"); init = 1; } return info; } SWIGINTERN int SWIG_AsCharPtrAndSize(SV *obj, char** cptr, size_t* psize, int *alloc) { if (SvMAGICAL(obj)) { SV *tmp = sv_newmortal(); SvSetSV(tmp, obj); obj = tmp; } if (SvPOK(obj)) { STRLEN len = 0; char *cstr = SvPV(obj, len); size_t size = len + 1; if (cptr) { if (alloc) { if (*alloc == SWIG_NEWOBJ) { *cptr = (char *)memcpy((char *)malloc((size)*sizeof(char)), cstr, sizeof(char)*(size)); } else { *cptr = cstr; *alloc = SWIG_OLDOBJ; } } } if (psize) *psize = size; return SWIG_OK; } else { swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); if (pchar_descriptor) { char* vptr = 0; if (SWIG_ConvertPtr(obj, (void**)&vptr, pchar_descriptor, 0) == SWIG_OK) { if (cptr) *cptr = vptr; if (psize) *psize = vptr ? (strlen(vptr) + 1) : 0; if (alloc) *alloc = SWIG_OLDOBJ; return SWIG_OK; } } } return SWIG_TypeError; } SWIGINTERN int SWIG_AsVal_long SWIG_PERL_DECL_ARGS_2(SV *obj, long* val) { if (SvUOK(obj)) { UV v = SvUV(obj); if (UVSIZE < sizeof(*val) || v <= LONG_MAX) { if (val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else if (SvIOK(obj)) { IV v = SvIV(obj); if (IVSIZE <= sizeof(*val) || (v >= LONG_MIN && v <= LONG_MAX)) { if(val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else { int dispatch = 0; const char *nptr = SvPV_nolen(obj); if (nptr) { char *endptr; long v; errno = 0; v = strtol(nptr, &endptr,0); if (errno == ERANGE) { errno = 0; return SWIG_OverflowError; } else { if (*endptr == '\0') { if (val) *val = v; return SWIG_Str2NumCast(SWIG_OK); } } } if (!dispatch) { double d; int res = SWIG_AddCast(SWIG_AsVal_double SWIG_PERL_CALL_ARGS_2(obj,&d)); if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, LONG_MIN, LONG_MAX)) { if (val) *val = (long)(d); return res; } } } return SWIG_TypeError; } SWIGINTERN int SWIG_AsVal_int SWIG_PERL_DECL_ARGS_2(SV * obj, int *val) { long v; int res = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(obj, &v); if (SWIG_IsOK(res)) { if ((v < INT_MIN || v > INT_MAX)) { return SWIG_OverflowError; } else { if (val) *val = (int)(v); } } return res; } #ifdef SWIG_LONG_LONG_AVAILABLE SWIGINTERNINLINE SV * SWIG_From_unsigned_SS_long_SS_long SWIG_PERL_DECL_ARGS_1(unsigned long long value) { SV *sv; if (UVSIZE >= sizeof(value) || value <= UV_MAX) sv = newSVuv((UV)(value)); else { //sv = newSVpvf("%llu", value); doesn't work in non 64bit Perl char temp[256]; sprintf(temp, "%llu", value); sv = newSVpv(temp, 0); } return sv_2mortal(sv); } #endif SWIGINTERNINLINE SV * SWIG_From_long SWIG_PERL_DECL_ARGS_1(long value) { SV *sv; if (IVSIZE >= sizeof(value) || (value >= IV_MIN && value <= IV_MAX)) sv = newSViv(value); else sv = newSVpvf("%ld", value); return sv_2mortal(sv); } #ifndef CLAMP # define CLAMP(val, min_value, max_value) \ ( (val < min_value ? min_value : \ ((val > max_value) ? max_value : val)) ) #endif driver_return_code_t audio_play_track_index(CdIo_t *p_cdio, int start_track, int start_index, int end_track, int end_index) { cdio_track_index_t track_index; track_index.i_start_track = (uint8_t) (CLAMP(start_track, 0, 99)); track_index.i_start_index = (uint8_t) (CLAMP(start_index, 0, 255)); track_index.i_start_track = (uint8_t) (CLAMP(end_track, 0, 99)); track_index.i_end_track = (uint8_t) (CLAMP(end_index, 0, 99)); return cdio_audio_play_track_index(p_cdio, &track_index); } driver_return_code_t audio_play_lsn (CdIo_t *p_cdio, lsn_t start_lsn, lsn_t end_lsn) { msf_t start_msf; msf_t end_msf; cdio_lsn_to_msf (start_lsn, &start_msf); cdio_lsn_to_msf (end_lsn, &end_msf); return cdio_audio_play_msf(p_cdio, &start_msf, &end_msf); } SWIGINTERNINLINE SV * SWIG_From_int SWIG_PERL_DECL_ARGS_1(int value) { return SWIG_From_long SWIG_PERL_CALL_ARGS_1(value); } uint8_t *audio_get_volume_levels (CdIo_t *p_cdio, int *rc) { static uint8_t _volume[4]; driver_return_code_t drc; drc = cdio_audio_get_volume (p_cdio, (cdio_audio_volume_t*)&_volume); *rc = drc; return _volume; } #ifndef CLAMP # define CLAMP(val, min_value, max_value) \ ( (val < min_value ? min_value : \ ((val > max_value) ? max_value : val)) ) #endif int audio_set_volume_levels(CdIo_t *p_cdio, int channel_vol1, int channel_vol2, int channel_vol3, int channel_vol4) { static cdio_audio_volume_t audio_volume; audio_volume.level[0] = CLAMP(channel_vol1, 0, 255); audio_volume.level[1] = CLAMP(channel_vol2, 0, 255); audio_volume.level[2] = CLAMP(channel_vol3, 0, 255); audio_volume.level[3] = CLAMP(channel_vol4, 0, 255); return cdio_audio_set_volume(p_cdio, &audio_volume); } extern uint8_t cdio_from_bcd8(uint8_t p); //static cdio_subchannel_t cdio_subchannel; SV * audio_get_status ( CdIo_t *p_cdio, int *drc) { static cdio_subchannel_t sub; driver_return_code_t rc; HV * audio_st; char *a_s_t; rc = cdio_audio_read_subchannel(p_cdio, &sub); *drc = rc; audio_st = newHV(); /* unsigned int msf_seconds(msf_t *msf) or * */ switch(sub.audio_status) { case 0x00: a_s_t = "INVALID"; break; case 0x11: a_s_t = "playing"; break; case 0x12: a_s_t = "paused"; break; case 0x13: a_s_t = "completed"; break; case 0x14: a_s_t = "ERROR"; break; case 0x15: a_s_t = "NO_STATUS"; break; default: a_s_t = "UNKNOWN"; } hv_store(audio_st, "format", 6, newSVuv(sub.format), 0); hv_store(audio_st, "audio_status", 12, newSVuv(sub.audio_status), 0); hv_store(audio_st, "status_text", 11, newSVpv(a_s_t, 0), 0); hv_store(audio_st, "address", 7, newSVuv(sub.address), 0); hv_store(audio_st, "control", 7, newSVuv(sub.control), 0); hv_store(audio_st, "track", 5, newSVuv(sub.track), 0); hv_store(audio_st, "index", 5, newSVuv(sub.index), 0); hv_store(audio_st, "abs_m", 5, newSVuv(cdio_from_bcd8(sub.abs_addr.m)), 0); hv_store(audio_st, "abs_s", 5, newSVuv(cdio_from_bcd8(sub.abs_addr.s)), 0); hv_store(audio_st, "abs_f", 5, newSVuv(cdio_from_bcd8(sub.abs_addr.f)), 0); hv_store(audio_st, "disk_s", 6, newSVuv(cdio_audio_get_msf_seconds(&sub.abs_addr)),0); hv_store(audio_st, "rel_m", 5, newSVuv(cdio_from_bcd8(sub.rel_addr.m)), 0); hv_store(audio_st, "rel_s", 5, newSVuv(cdio_from_bcd8(sub.rel_addr.s)), 0); hv_store(audio_st, "rel_f", 5, newSVuv(cdio_from_bcd8(sub.rel_addr.f)), 0); hv_store(audio_st, "track_s", 7, newSVuv(cdio_audio_get_msf_seconds(&sub.rel_addr)),0); return newRV_noinc(sv_2mortal((SV*)audio_st)); } SWIGINTERN int SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val) { if (SvUOK(obj)) { UV v = SvUV(obj); if (UVSIZE <= sizeof(*val) || v <= ULONG_MAX) { if (val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else if (SvIOK(obj)) { IV v = SvIV(obj); if (v >= 0 && (IVSIZE <= sizeof(*val) || v <= ULONG_MAX)) { if (val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else { int dispatch = 0; const char *nptr = SvPV_nolen(obj); if (nptr) { char *endptr; unsigned long v; errno = 0; v = strtoul(nptr, &endptr,0); if (errno == ERANGE) { errno = 0; return SWIG_OverflowError; } else { if (*endptr == '\0') { if (val) *val = v; return SWIG_Str2NumCast(SWIG_OK); } } } if (!dispatch) { double d; int res = SWIG_AddCast(SWIG_AsVal_double SWIG_PERL_CALL_ARGS_2(obj,&d)); if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, ULONG_MAX)) { if (val) *val = (unsigned long)(d); return res; } } } return SWIG_TypeError; } SWIGINTERN int SWIG_AsVal_unsigned_SS_char SWIG_PERL_DECL_ARGS_2(SV * obj, unsigned char *val) { unsigned long v; int res = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(obj, &v); if (SWIG_IsOK(res)) { if ((v > UCHAR_MAX)) { return SWIG_OverflowError; } else { if (val) *val = (unsigned char)(v); } } return res; } typedef long int my_ssize_t; SWIGINTERNINLINE SV * SWIG_FromCharPtrAndSize(const char* carray, size_t size) { SV *obj = sv_newmortal(); if (carray) { sv_setpvn(obj, carray, size); } else { sv_setsv(obj, &PL_sv_undef); } return obj; } SWIGINTERNINLINE SV * SWIG_FromCharPtr(const char *cptr) { return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0)); } char * read_cd(const CdIo_t *p_cdio, my_ssize_t i_size, /*out*/ my_ssize_t *pi_size) { char *p_buf = calloc(1, i_size); *pi_size = cdio_read(p_cdio, p_buf, i_size); return p_buf; } typedef char *buf_t; /* NOTE: arg 4 *must* be the size of the buf for the buf_t typemap. */ buf_t read_sectors(const CdIo_t *p_cdio, lsn_t i_lsn, cdio_read_mode_t read_mode, my_ssize_t i_size, /*out*/ my_ssize_t *pi_size, /*out*/ long int *drc) { char *p_buf; uint32_t i_blocks; uint16_t i_blocksize; switch (read_mode) { case CDIO_READ_MODE_AUDIO: i_blocksize = CDIO_CD_FRAMESIZE_RAW; break; case CDIO_READ_MODE_M1F1: i_blocksize = M2RAW_SECTOR_SIZE; break; case CDIO_READ_MODE_M1F2: i_blocksize = M2RAW_SECTOR_SIZE; break; case CDIO_READ_MODE_M2F1: i_blocksize = CDIO_CD_FRAMESIZE; break; case CDIO_READ_MODE_M2F2: i_blocksize = M2F2_SECTOR_SIZE; break; default: pi_size = NULL; *drc = DRIVER_OP_BAD_PARAMETER; return NULL; } p_buf = calloc(1, i_size); i_blocks = i_size / i_blocksize; *drc = cdio_read_sectors(p_cdio, p_buf, i_lsn, read_mode, i_blocks); if (*drc < 0) { pi_size = NULL; return NULL; } *pi_size = i_size; return p_buf; } SWIGINTERN int SWIG_AsVal_short SWIG_PERL_DECL_ARGS_2(SV * obj, short *val) { long v; int res = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(obj, &v); if (SWIG_IsOK(res)) { if ((v < SHRT_MIN || v > SHRT_MAX)) { return SWIG_OverflowError; } else { if (val) *val = (short)(v); } } return res; } /* NOTE: arg 4 *must* be the size of the buf for the buf_t typemap. */ buf_t read_data_bytes(const CdIo_t *p_cdio, lsn_t i_lsn, int16_t i_blocksize, my_ssize_t i_size, /*out*/ my_ssize_t *pi_size, /*out*/ long int *drc) { uint32_t i_blocks = i_size / i_blocksize; char *p_buf; switch (i_blocksize) { case CDIO_CD_FRAMESIZE: case CDIO_CD_FRAMESIZE_RAW: case M2F2_SECTOR_SIZE: case M2RAW_SECTOR_SIZE: break; default: /* Don't know about these block sizes */ pi_size = NULL; *drc = DRIVER_OP_BAD_PARAMETER; return NULL; } p_buf = calloc(1, i_size); #if DEBUGGING printf("p_cdio: %x, i_size: %d, lsn: %d, blocksize %d, blocks %d\n", p_cdio, i_size, i_lsn, i_blocksize, i_blocks); #endif *drc = cdio_read_data_sectors (p_cdio, p_buf, i_lsn, i_blocksize, i_blocks); #if DEBUGGING printf("drc: %d\n", drc); #endif if (*drc < 0) { pi_size = NULL; return NULL; } *pi_size = i_size; return p_buf; } iso9660_pvd_t *cdio_read_pvd ( const CdIo_t *p_cdio ) { static iso9660_pvd_t pvd; int rc = cdio_read_data_sectors( p_cdio, &pvd, ISO_PVD_SECTOR, ISO_BLOCKSIZE, 1); if (rc < 0) return NULL; return &pvd; } SWIGINTERNINLINE SV * SWIG_From_unsigned_SS_long SWIG_PERL_DECL_ARGS_1(unsigned long value) { SV *sv; if (UVSIZE >= sizeof(value) || value <= UV_MAX) sv = newSVuv(value); else sv = newSVpvf("%lu", value); return sv_2mortal(sv); } SWIGINTERNINLINE SV * SWIG_From_unsigned_SS_int SWIG_PERL_DECL_ARGS_1(unsigned int value) { return SWIG_From_unsigned_SS_long SWIG_PERL_CALL_ARGS_1(value); } SWIGINTERN int SWIG_AsVal_unsigned_SS_int SWIG_PERL_DECL_ARGS_2(SV * obj, unsigned int *val) { unsigned long v; int res = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(obj, &v); if (SWIG_IsOK(res)) { if ((v > UINT_MAX)) { return SWIG_OverflowError; } else { if (val) *val = (unsigned int)(v); } } return res; } SWIGINTERNINLINE SV * SWIG_From_bool SWIG_PERL_DECL_ARGS_1(bool value) { return boolSV(value); } const char *get_track_msf(const CdIo_t *p_cdio, track_t i_track) { msf_t msf; char *psz_msf; if (!cdio_get_track_msf( p_cdio, i_track, &msf )) { return "error"; } psz_msf = cdio_msf_to_str( &msf ); return psz_msf; } const char *get_track_format(const CdIo_t *p_cdio, track_t i_track) { track_format_t track_format = cdio_get_track_format(p_cdio, i_track); return track_format2str[track_format]; } typedef uint8_t cdtext_data_bytes_t[9220]; #ifdef SWIG_LONG_LONG_AVAILABLE SWIGINTERN int SWIG_AsVal_unsigned_SS_long_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long long *val) { if (SvUOK(obj)) { /* pretty sure this should be conditional on * (UVSIZE <= sizeof(*val) || v <= ULLONG_MAX) */ if (val) *val = SvUV(obj); return SWIG_OK; } else if (SvIOK(obj)) { IV v = SvIV(obj); if (v >= 0 && (IVSIZE <= sizeof(*val) || v <= ULLONG_MAX)) { if (val) *val = v; return SWIG_OK; } else { return SWIG_OverflowError; } } else { int dispatch = 0; const char *nptr = SvPV_nolen(obj); if (nptr) { char *endptr; unsigned long long v; errno = 0; v = strtoull(nptr, &endptr,0); if (errno == ERANGE) { errno = 0; return SWIG_OverflowError; } else { if (*endptr == '\0') { if (val) *val = v; return SWIG_Str2NumCast(SWIG_OK); } } } if (!dispatch) { const double mant_max = 1LL << DBL_MANT_DIG; double d; int res = SWIG_AddCast(SWIG_AsVal_double SWIG_PERL_CALL_ARGS_2(obj,&d)); if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, mant_max)) { if (val) *val = (unsigned long long)(d); return res; } } } return SWIG_TypeError; } #endif SWIGINTERNINLINE int SWIG_AsVal_size_t SWIG_PERL_DECL_ARGS_2(SV * obj, size_t *val) { int res = SWIG_TypeError; #ifdef SWIG_LONG_LONG_AVAILABLE if (sizeof(size_t) <= sizeof(unsigned long)) { #endif unsigned long v; res = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(obj, val ? &v : 0); if (SWIG_IsOK(res) && val) *val = (size_t)(v); #ifdef SWIG_LONG_LONG_AVAILABLE } else if (sizeof(size_t) <= sizeof(unsigned long long)) { unsigned long long v; res = SWIG_AsVal_unsigned_SS_long_SS_long SWIG_PERL_CALL_ARGS_2(obj, val ? &v : 0); if (SWIG_IsOK(res) && val) *val = (size_t)(v); } #endif return res; } typedef char ** DeviceList_t; driver_return_code_t close_tray(const char *psz_drive, driver_id_t p_driver_id, driver_id_t *p_out_driver_id) { *p_out_driver_id = p_driver_id; return cdio_close_tray(psz_drive, p_out_driver_id); } driver_return_code_t eject_media (CdIo_t *p_cdio) { /* libcdio routines uses a Cdio_t **p_cdio, so we have to pass in something it can clobber. */ CdIo_t **pp_cdio = &p_cdio; return cdio_eject_media (pp_cdio); } char * get_default_device_driver(driver_id_t driver_id, driver_id_t *p_out_driver_id) { *p_out_driver_id = driver_id; return cdio_get_default_device_driver(p_out_driver_id); } DeviceList_t get_devices(driver_id_t driver_id) { return cdio_get_devices(driver_id); } DeviceList_t get_devices_ret (driver_id_t driver_id, driver_id_t *p_out_driver_id) { *p_out_driver_id = driver_id; return cdio_get_devices_ret (p_out_driver_id); } SWIGINTERN int SWIG_AsVal_bool SWIG_PERL_DECL_ARGS_2(SV *obj, bool* val) { if (obj == &PL_sv_yes) { if (val) *val = true; return SWIG_OK; } else if (obj == &PL_sv_no) { if (val) *val = false; return SWIG_OK; } else { if (val) *val = SvTRUE(obj) ? true : false; return SWIG_AddCast(SWIG_OK); } } DeviceList_t get_devices_with_cap (unsigned int capabilities, bool b_any) { return cdio_get_devices_with_cap (NULL, (cdio_fs_anal_t) capabilities, b_any); } DeviceList_t get_devices_with_cap_ret (unsigned int capabilities, bool b_any, driver_id_t *p_out_driver_id) { return cdio_get_devices_with_cap_ret (NULL, (cdio_fs_anal_t) capabilities, b_any, p_out_driver_id); } int have_driver (unsigned int driver_id) { if (cdio_have_driver(driver_id)) return 1; return 0; } /*! True if CD-ROM understand ATAPI commands. */ bool have_ATAPI (CdIo_t *p_cdio) { return cdio_have_atapi(p_cdio) == yep; } typedef char ** HWInfo_t; static cdio_hwinfo_t hw_info; const HWInfo_t get_hwinfo ( const CdIo_t *p_cdio, int *drc) { static const char *hwinfo[4] = { hw_info.psz_vendor, hw_info.psz_model, hw_info.psz_revision, NULL }; bool b_got_hwinfo = cdio_get_hwinfo(p_cdio, &hw_info); *drc = b_got_hwinfo; return (const HWInfo_t) hwinfo; } extern int mmc_get_tray_status(const CdIo_t *p_cdio); const char * get_disc_mode (CdIo_t *p_cdio) { discmode_t discmode = cdio_get_discmode(p_cdio); if (CDIO_DISC_MODE_ERROR == discmode) return (const char *)newSV(0); return discmode2str[discmode]; } static int cddb_dec_digit_sum(int n) { int ret=0; for (;;) { ret += n%10; n = n/10; if (!n) return ret; } } uint32_t get_cddb_discid(CdIo_t *p_cdio) { int i,t,n=0; msf_t start_msf; msf_t msf; track_t i_tracks = cdio_get_num_tracks (p_cdio); if(i_tracks == CDIO_INVALID_TRACK) return 0; for (i = 1; i <= i_tracks; i++) { cdio_get_track_msf(p_cdio, i, &msf); n += cddb_dec_digit_sum(cdio_audio_get_msf_seconds(&msf)); } cdio_get_track_msf(p_cdio, 1, &start_msf); cdio_get_track_msf(p_cdio, CDIO_CDROM_LEADOUT_TRACK, &msf); t = cdio_audio_get_msf_seconds(&msf)-cdio_audio_get_msf_seconds(&start_msf); return ((n % 0xff) << 24 | t << 8 | i_tracks); } SV * guess_cd_type(const CdIo_t *cdio, int start_session, track_t track_num) { cdio_iso_analysis_t t; int r; HV * iso_analysis; r = cdio_guess_cd_type (cdio, start_session, track_num, &t); iso_analysis = newHV(); hv_store(iso_analysis, "cdio_fs_t",9, newSViv(r&CDIO_FS_MASK),0); hv_store(iso_analysis, "cdio_fs_cap_t",13, newSViv(r&~CDIO_FS_MASK),0); hv_store(iso_analysis, "joliet_level",12, newSVuv(t.joliet_level),0); hv_store(iso_analysis, "iso_label",9,newSVpv(t.iso_label,0),0); hv_store(iso_analysis, "isofs_size",10, newSVuv(t.isofs_size),0); hv_store(iso_analysis, "UDFVerMinor",11, newSVuv((unsigned int)t.UDFVerMinor),0); hv_store(iso_analysis, "UDFVerMajor",11, newSVuv((unsigned int)t.UDFVerMajor),0); return newRV_noinc(sv_2mortal((SV*)iso_analysis)); } const char * cdio_version() { return CDIO_VERSION; } #ifdef __cplusplus extern "C" { #endif #ifdef PERL_OBJECT #define MAGIC_CLASS _wrap_perlcdio_var:: class _wrap_perlcdio_var : public CPerlObj { public: #else #define MAGIC_CLASS #endif SWIGCLASS_STATIC int swig_magic_readonly(pTHX_ SV *SWIGUNUSEDPARM(sv), MAGIC *SWIGUNUSEDPARM(mg)) { MAGIC_PPERL croak("Value is read-only."); return 0; } SWIGCLASS_STATIC int _wrap_hw_info_set(pTHX_ SV* sv, MAGIC * SWIGUNUSEDPARM(mg)) { MAGIC_PPERL { void *argp = 0; int res = SWIG_ConvertPtr(sv, &argp, SWIGTYPE_p_cdio_hwinfo_t, 0 ); if (!SWIG_IsOK(res)) { SWIG_exception_fail(SWIG_ArgError(res), "in variable '""hw_info""' of type '""cdio_hwinfo_t""'"); } if (!argp) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in variable '""hw_info""' of type '""cdio_hwinfo_t""'"); } else { hw_info = *((cdio_hwinfo_t *)(argp)); } } fail: return 1; } SWIGCLASS_STATIC int _wrap_hw_info_get(pTHX_ SV *sv, MAGIC *SWIGUNUSEDPARM(mg)) { MAGIC_PPERL sv_setiv(SvRV(sv), PTR2IV(&hw_info)); return 1; } #ifdef PERL_OBJECT }; #endif #ifdef __cplusplus } #endif #ifdef __cplusplus extern "C" { #endif XS(_wrap_imaxdiv_t_quot_set) { { imaxdiv_t *arg1 = (imaxdiv_t *) 0 ; long long arg2 ; void *argp1 = 0 ; int res1 = 0 ; long long val2 ; int ecode2 = 0 ; int argvi = 0; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: imaxdiv_t_quot_set(self,quot);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_imaxdiv_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "imaxdiv_t_quot_set" "', argument " "1"" of type '" "imaxdiv_t *""'"); } arg1 = (imaxdiv_t *)(argp1); ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "imaxdiv_t_quot_set" "', argument " "2"" of type '" "long long""'"); } arg2 = (long long)(val2); if (arg1) (arg1)->quot = arg2; ST(argvi) = sv_newmortal(); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_imaxdiv_t_quot_get) { { imaxdiv_t *arg1 = (imaxdiv_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; long long result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: imaxdiv_t_quot_get(self);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_imaxdiv_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "imaxdiv_t_quot_get" "', argument " "1"" of type '" "imaxdiv_t *""'"); } arg1 = (imaxdiv_t *)(argp1); result = (long long) ((arg1)->quot); ST(argvi) = SWIG_From_long_SS_long SWIG_PERL_CALL_ARGS_1((long long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_imaxdiv_t_rem_set) { { imaxdiv_t *arg1 = (imaxdiv_t *) 0 ; long long arg2 ; void *argp1 = 0 ; int res1 = 0 ; long long val2 ; int ecode2 = 0 ; int argvi = 0; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: imaxdiv_t_rem_set(self,rem);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_imaxdiv_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "imaxdiv_t_rem_set" "', argument " "1"" of type '" "imaxdiv_t *""'"); } arg1 = (imaxdiv_t *)(argp1); ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "imaxdiv_t_rem_set" "', argument " "2"" of type '" "long long""'"); } arg2 = (long long)(val2); if (arg1) (arg1)->rem = arg2; ST(argvi) = sv_newmortal(); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_imaxdiv_t_rem_get) { { imaxdiv_t *arg1 = (imaxdiv_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; long long result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: imaxdiv_t_rem_get(self);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_imaxdiv_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "imaxdiv_t_rem_get" "', argument " "1"" of type '" "imaxdiv_t *""'"); } arg1 = (imaxdiv_t *)(argp1); result = (long long) ((arg1)->rem); ST(argvi) = SWIG_From_long_SS_long SWIG_PERL_CALL_ARGS_1((long long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_new_imaxdiv_t) { { int argvi = 0; imaxdiv_t *result = 0 ; dXSARGS; if ((items < 0) || (items > 0)) { SWIG_croak("Usage: new_imaxdiv_t();"); } result = (imaxdiv_t *)calloc(1, sizeof(imaxdiv_t)); ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_imaxdiv_t, SWIG_OWNER | SWIG_SHADOW); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_delete_imaxdiv_t) { { imaxdiv_t *arg1 = (imaxdiv_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: delete_imaxdiv_t(self);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_imaxdiv_t, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_imaxdiv_t" "', argument " "1"" of type '" "imaxdiv_t *""'"); } arg1 = (imaxdiv_t *)(argp1); free((char *) arg1); ST(argvi) = sv_newmortal(); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_imaxabs) { { intmax_t arg1 ; long long val1 ; int ecode1 = 0 ; int argvi = 0; intmax_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: imaxabs(n);"); } ecode1 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "imaxabs" "', argument " "1"" of type '" "intmax_t""'"); } arg1 = (intmax_t)(val1); result = (intmax_t)imaxabs(arg1); ST(argvi) = SWIG_From_long_SS_long SWIG_PERL_CALL_ARGS_1((long long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_imaxdiv) { { intmax_t arg1 ; intmax_t arg2 ; long long val1 ; int ecode1 = 0 ; long long val2 ; int ecode2 = 0 ; int argvi = 0; imaxdiv_t result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: imaxdiv(numer,denom);"); } ecode1 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "imaxdiv" "', argument " "1"" of type '" "intmax_t""'"); } arg1 = (intmax_t)(val1); ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "imaxdiv" "', argument " "2"" of type '" "intmax_t""'"); } arg2 = (intmax_t)(val2); result = imaxdiv(arg1,arg2); ST(argvi) = SWIG_NewPointerObj((imaxdiv_t *)memcpy((imaxdiv_t *)malloc(sizeof(imaxdiv_t)),&result,sizeof(imaxdiv_t)), SWIGTYPE_p_imaxdiv_t, SWIG_POINTER_OWN | SWIG_SHADOW); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_strtoimax) { { char *arg1 = (char *) 0 ; char **arg2 = (char **) 0 ; int arg3 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; int val3 ; int ecode3 = 0 ; int argvi = 0; intmax_t result; dXSARGS; if ((items < 3) || (items > 3)) { SWIG_croak("Usage: strtoimax(nptr,endptr,base);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strtoimax" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_p_char, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "strtoimax" "', argument " "2"" of type '" "char **""'"); } arg2 = (char **)(argp2); ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strtoimax" "', argument " "3"" of type '" "int""'"); } arg3 = (int)(val3); result = (intmax_t)strtoimax((char const *)arg1,arg2,arg3); ST(argvi) = SWIG_From_long_SS_long SWIG_PERL_CALL_ARGS_1((long long)(result)); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_strtoumax) { { char *arg1 = (char *) 0 ; char **arg2 = (char **) 0 ; int arg3 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; int val3 ; int ecode3 = 0 ; int argvi = 0; uintmax_t result; dXSARGS; if ((items < 3) || (items > 3)) { SWIG_croak("Usage: strtoumax(nptr,endptr,base);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strtoumax" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_p_char, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "strtoumax" "', argument " "2"" of type '" "char **""'"); } arg2 = (char **)(argp2); ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strtoumax" "', argument " "3"" of type '" "int""'"); } arg3 = (int)(val3); result = (uintmax_t)strtoumax((char const *)arg1,arg2,arg3); ST(argvi) = SWIG_From_unsigned_SS_long_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long long)(result)); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_audio_pause) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; driver_return_code_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: audio_pause(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "audio_pause" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); result = (driver_return_code_t)cdio_audio_pause(arg1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_audio_play_track_index) { { CdIo_t *arg1 = (CdIo_t *) 0 ; int arg2 ; int arg3 ; int arg4 ; int arg5 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; int val3 ; int ecode3 = 0 ; int val4 ; int ecode4 = 0 ; int val5 ; int ecode5 = 0 ; int argvi = 0; driver_return_code_t result; dXSARGS; if ((items < 5) || (items > 5)) { SWIG_croak("Usage: audio_play_track_index(p_cdio,start_track,start_index,end_track,end_index);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "audio_play_track_index" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "audio_play_track_index" "', argument " "2"" of type '" "int""'"); } arg2 = (int)(val2); ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "audio_play_track_index" "', argument " "3"" of type '" "int""'"); } arg3 = (int)(val3); ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "audio_play_track_index" "', argument " "4"" of type '" "int""'"); } arg4 = (int)(val4); ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5); if (!SWIG_IsOK(ecode5)) { SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "audio_play_track_index" "', argument " "5"" of type '" "int""'"); } arg5 = (int)(val5); result = (driver_return_code_t)audio_play_track_index(arg1,arg2,arg3,arg4,arg5); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_audio_play_lsn) { { CdIo_t *arg1 = (CdIo_t *) 0 ; lsn_t arg2 ; lsn_t arg3 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; int val3 ; int ecode3 = 0 ; int argvi = 0; driver_return_code_t result; dXSARGS; if ((items < 3) || (items > 3)) { SWIG_croak("Usage: audio_play_lsn(p_cdio,start_lsn,end_lsn);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "audio_play_lsn" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "audio_play_lsn" "', argument " "2"" of type '" "lsn_t""'"); } arg2 = (lsn_t)(val2); ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "audio_play_lsn" "', argument " "3"" of type '" "lsn_t""'"); } arg3 = (lsn_t)(val3); result = (driver_return_code_t)audio_play_lsn(arg1,arg2,arg3); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_audio_resume) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; driver_return_code_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: audio_resume(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "audio_resume" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); result = (driver_return_code_t)cdio_audio_resume(arg1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_audio_stop) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; driver_return_code_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: audio_stop(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "audio_stop" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); result = (driver_return_code_t)cdio_audio_stop(arg1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_audio_get_volume_levels) { { CdIo_t *arg1 = (CdIo_t *) 0 ; int *arg2 = (int *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int temp2 ; int res2 = SWIG_TMPOBJ ; int argvi = 0; unsigned char *result = 0 ; dXSARGS; arg2 = &temp2; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: audio_get_volume_levels(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "audio_get_volume_levels" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); result = (unsigned char *)audio_get_volume_levels(arg1,arg2); { AV *myav; SV **svs; if (result) { svs = (SV **) malloc(4*sizeof(SV *)); svs[0] = sv_newmortal(); sv_setiv((SV*) svs[0],result[0]); svs[1] = sv_newmortal(); sv_setiv((SV*) svs[1],result[1]); svs[2] = sv_newmortal(); sv_setiv((SV*) svs[2],result[2]); svs[3] = sv_newmortal(); sv_setiv((SV*) svs[3],result[3]); myav = av_make(4,svs); free(svs); ST(argvi) = newRV_noinc((SV*)myav); sv_2mortal(ST(argvi)); argvi++; } } if (SWIG_IsTmpObj(res2)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg2)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags); argvi++ ; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_audio_set_volume_levels) { { CdIo_t *arg1 = (CdIo_t *) 0 ; int arg2 ; int arg3 ; int arg4 ; int arg5 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; int val3 ; int ecode3 = 0 ; int val4 ; int ecode4 = 0 ; int val5 ; int ecode5 = 0 ; int argvi = 0; int result; dXSARGS; if ((items < 5) || (items > 5)) { SWIG_croak("Usage: audio_set_volume_levels(p_cdio,channel_vol1,channel_vol2,channel_vol3,channel_vol4);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "audio_set_volume_levels" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "audio_set_volume_levels" "', argument " "2"" of type '" "int""'"); } arg2 = (int)(val2); ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "audio_set_volume_levels" "', argument " "3"" of type '" "int""'"); } arg3 = (int)(val3); ecode4 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "audio_set_volume_levels" "', argument " "4"" of type '" "int""'"); } arg4 = (int)(val4); ecode5 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(4), &val5); if (!SWIG_IsOK(ecode5)) { SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "audio_set_volume_levels" "', argument " "5"" of type '" "int""'"); } arg5 = (int)(val5); result = (int)audio_set_volume_levels(arg1,arg2,arg3,arg4,arg5); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_audio_get_status) { { CdIo_t *arg1 = (CdIo_t *) 0 ; int *arg2 = (int *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int temp2 ; int res2 = SWIG_TMPOBJ ; int argvi = 0; SV *result = 0 ; dXSARGS; arg2 = &temp2; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: audio_get_status(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "audio_get_status" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); result = (SV *)audio_get_status(arg1,arg2); ST(argvi) = result; argvi++ ; if (SWIG_IsTmpObj(res2)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg2)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags); argvi++ ; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdio_from_bcd8) { { unsigned char arg1 ; unsigned char val1 ; int ecode1 = 0 ; int argvi = 0; unsigned char result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: cdio_from_bcd8(p);"); } ecode1 = SWIG_AsVal_unsigned_SS_char SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "cdio_from_bcd8" "', argument " "1"" of type '" "unsigned char""'"); } arg1 = (unsigned char)(val1); result = (unsigned char)cdio_from_bcd8(arg1); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_lseek) { { CdIo_t *arg1 = (CdIo_t *) 0 ; off_t arg2 ; int arg3 = (int) SEEK_SET ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 ; int res2 = 0 ; int val3 ; int ecode3 = 0 ; int argvi = 0; off_t result; dXSARGS; if ((items < 2) || (items > 3)) { SWIG_croak("Usage: lseek(p_cdio,offset,whence);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "lseek" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); { res2 = SWIG_ConvertPtr(ST(1), &argp2, SWIGTYPE_p_off_t, 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "lseek" "', argument " "2"" of type '" "off_t""'"); } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "lseek" "', argument " "2"" of type '" "off_t""'"); } else { arg2 = *((off_t *)(argp2)); } } if (items > 2) { ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "lseek" "', argument " "3"" of type '" "int""'"); } arg3 = (int)(val3); } result = cdio_lseek((CdIo_t const *)arg1,arg2,arg3); ST(argvi) = SWIG_NewPointerObj((off_t *)memcpy((off_t *)malloc(sizeof(off_t)),&result,sizeof(off_t)), SWIGTYPE_p_off_t, SWIG_POINTER_OWN | 0); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_read_cd) { { CdIo_t *arg1 = (CdIo_t *) 0 ; my_ssize_t arg2 ; my_ssize_t *arg3 = (my_ssize_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; long val2 ; int ecode2 = 0 ; my_ssize_t temp3 ; int res3 = SWIG_TMPOBJ ; int argvi = 0; char *result = 0 ; dXSARGS; arg3 = &temp3; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: read_cd(p_cdio,i_size);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "read_cd" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "read_cd" "', argument " "2"" of type '" "my_ssize_t""'"); } arg2 = (my_ssize_t)(val2); result = (char *)read_cd((CdIo_t const *)arg1,arg2,arg3); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; if (SWIG_IsTmpObj(res3)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((*arg3)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_long, new_flags); argvi++ ; } free((char*)result); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_read_sectors) { { CdIo_t *arg1 = (CdIo_t *) 0 ; lsn_t arg2 ; cdio_read_mode_t arg3 ; my_ssize_t arg4 ; my_ssize_t *arg5 = (my_ssize_t *) 0 ; long *arg6 = (long *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; int val3 ; int ecode3 = 0 ; long val4 ; int ecode4 = 0 ; my_ssize_t temp5 ; int res5 = SWIG_TMPOBJ ; long temp6 ; int res6 = SWIG_TMPOBJ ; int argvi = 0; buf_t result; dXSARGS; arg5 = &temp5; arg6 = &temp6; if ((items < 4) || (items > 4)) { SWIG_croak("Usage: read_sectors(p_cdio,i_lsn,read_mode,i_size);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "read_sectors" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "read_sectors" "', argument " "2"" of type '" "lsn_t""'"); } arg2 = (lsn_t)(val2); ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "read_sectors" "', argument " "3"" of type '" "cdio_read_mode_t""'"); } arg3 = (cdio_read_mode_t)(val3); ecode4 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(3), &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "read_sectors" "', argument " "4"" of type '" "my_ssize_t""'"); } arg4 = (my_ssize_t)(val4); result = (buf_t)read_sectors((CdIo_t const *)arg1,arg2,arg3,arg4,arg5,arg6); { /* result is of type buf_t */ ST(argvi) = sv_newmortal(); if (result) { /* I don't yet know how to pick up arg4 another way. THIS MEANS ARG4 MUST ALWAYS BE THE SIZE. */ sv_setpvn((SV*)ST(argvi++), (char *) result, arg4); /* Don't leak memory. return value was malloc'd by libcdio. */ free(result); } else { sv_setsv((SV*)ST(argvi++), &PL_sv_undef); } } if (SWIG_IsTmpObj(res5)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((*arg5)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_long, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res6)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((*arg6)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res6) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg6), SWIGTYPE_p_long, new_flags); argvi++ ; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_read_data_bytes) { { CdIo_t *arg1 = (CdIo_t *) 0 ; lsn_t arg2 ; int16_t arg3 ; my_ssize_t arg4 ; my_ssize_t *arg5 = (my_ssize_t *) 0 ; long *arg6 = (long *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; short val3 ; int ecode3 = 0 ; long val4 ; int ecode4 = 0 ; my_ssize_t temp5 ; int res5 = SWIG_TMPOBJ ; long temp6 ; int res6 = SWIG_TMPOBJ ; int argvi = 0; buf_t result; dXSARGS; arg5 = &temp5; arg6 = &temp6; if ((items < 4) || (items > 4)) { SWIG_croak("Usage: read_data_bytes(p_cdio,i_lsn,i_blocksize,i_size);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "read_data_bytes" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "read_data_bytes" "', argument " "2"" of type '" "lsn_t""'"); } arg2 = (lsn_t)(val2); ecode3 = SWIG_AsVal_short SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "read_data_bytes" "', argument " "3"" of type '" "int16_t""'"); } arg3 = (int16_t)(val3); ecode4 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(3), &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "read_data_bytes" "', argument " "4"" of type '" "my_ssize_t""'"); } arg4 = (my_ssize_t)(val4); result = (buf_t)read_data_bytes((CdIo_t const *)arg1,arg2,arg3,arg4,arg5,arg6); { /* result is of type buf_t */ ST(argvi) = sv_newmortal(); if (result) { /* I don't yet know how to pick up arg4 another way. THIS MEANS ARG4 MUST ALWAYS BE THE SIZE. */ sv_setpvn((SV*)ST(argvi++), (char *) result, arg4); /* Don't leak memory. return value was malloc'd by libcdio. */ free(result); } else { sv_setsv((SV*)ST(argvi++), &PL_sv_undef); } } if (SWIG_IsTmpObj(res5)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((*arg5)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_long, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res6)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((*arg6)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res6) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg6), SWIGTYPE_p_long, new_flags); argvi++ ; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdio_read_pvd) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; iso9660_pvd_t *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: cdio_read_pvd(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "cdio_read_pvd" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); result = (iso9660_pvd_t *)cdio_read_pvd((CdIo_t const *)arg1); ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_iso9660_pvd_t, 0 | 0); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_first_track_num) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; track_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_first_track_num(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_first_track_num" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); result = (track_t)cdio_get_first_track_num((CdIo_t const *)arg1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_last_track_num) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; track_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_last_track_num(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_last_track_num" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); result = (track_t)cdio_get_last_track_num((CdIo_t const *)arg1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_track) { { CdIo_t *arg1 = (CdIo_t *) 0 ; lsn_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; int argvi = 0; track_t result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: get_track(p_cdio,lsn);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_track" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_track" "', argument " "2"" of type '" "lsn_t""'"); } arg2 = (lsn_t)(val2); result = (track_t)cdio_get_track((CdIo_t const *)arg1,arg2); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_track_channels) { { CdIo_t *arg1 = (CdIo_t *) 0 ; track_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; int result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: get_track_channels(p_cdio,i_track);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_track_channels" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_track_channels" "', argument " "2"" of type '" "track_t""'"); } arg2 = (track_t)(val2); result = (int)cdio_get_track_channels((CdIo_t const *)arg1,arg2); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_track_copy_permit) { { CdIo_t *arg1 = (CdIo_t *) 0 ; track_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; track_flag_t result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: get_track_copy_permit(p_cdio,i_track);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_track_copy_permit" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_track_copy_permit" "', argument " "2"" of type '" "track_t""'"); } arg2 = (track_t)(val2); result = (track_flag_t)cdio_get_track_copy_permit((CdIo_t const *)arg1,arg2); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_track_format) { { CdIo_t *arg1 = (CdIo_t *) 0 ; track_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: get_track_format(p_cdio,i_track);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_track_format" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_track_format" "', argument " "2"" of type '" "track_t""'"); } arg2 = (track_t)(val2); result = (char *)get_track_format((CdIo_t const *)arg1,arg2); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_is_track_green) { { CdIo_t *arg1 = (CdIo_t *) 0 ; track_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; bool result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: is_track_green(p_cdio,i_track);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "is_track_green" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "is_track_green" "', argument " "2"" of type '" "track_t""'"); } arg2 = (track_t)(val2); result = (bool)cdio_get_track_green((CdIo_t const *)arg1,arg2); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_track_last_lsn) { { CdIo_t *arg1 = (CdIo_t *) 0 ; track_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; lsn_t result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: get_track_last_lsn(p_cdio,i_track);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_track_last_lsn" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_track_last_lsn" "', argument " "2"" of type '" "track_t""'"); } arg2 = (track_t)(val2); result = (lsn_t)cdio_get_track_last_lsn((CdIo_t const *)arg1,arg2); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_track_lba) { { CdIo_t *arg1 = (CdIo_t *) 0 ; track_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; lba_t result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: get_track_lba(p_cdio,i_track);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_track_lba" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_track_lba" "', argument " "2"" of type '" "track_t""'"); } arg2 = (track_t)(val2); result = (lba_t)cdio_get_track_lba((CdIo_t const *)arg1,arg2); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_track_lsn) { { CdIo_t *arg1 = (CdIo_t *) 0 ; track_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; lsn_t result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: get_track_lsn(p_cdio,i_track);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_track_lsn" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_track_lsn" "', argument " "2"" of type '" "track_t""'"); } arg2 = (track_t)(val2); result = (lsn_t)cdio_get_track_lsn((CdIo_t const *)arg1,arg2); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_track_msf) { { CdIo_t *arg1 = (CdIo_t *) 0 ; track_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: get_track_msf(p_cdio,i_track);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_track_msf" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_track_msf" "', argument " "2"" of type '" "track_t""'"); } arg2 = (track_t)(val2); result = (char *)get_track_msf((CdIo_t const *)arg1,arg2); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_track_preemphasis) { { CdIo_t *arg1 = (CdIo_t *) 0 ; track_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; track_flag_t result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: get_track_preemphasis(p_cdio,i_track);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_track_preemphasis" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_track_preemphasis" "', argument " "2"" of type '" "track_t""'"); } arg2 = (track_t)(val2); result = (track_flag_t)cdio_get_track_preemphasis((CdIo_t const *)arg1,arg2); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_track_sec_count) { { CdIo_t *arg1 = (CdIo_t *) 0 ; track_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; unsigned int result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: get_track_sec_count(p_cdio,i_track);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_track_sec_count" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_track_sec_count" "', argument " "2"" of type '" "track_t""'"); } arg2 = (track_t)(val2); result = (unsigned int)cdio_get_track_sec_count((CdIo_t const *)arg1,arg2); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdio_get_track_isrc) { { CdIo_t *arg1 = (CdIo_t *) 0 ; track_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: cdio_get_track_isrc(p_cdio,i_track);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "cdio_get_track_isrc" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "cdio_get_track_isrc" "', argument " "2"" of type '" "track_t""'"); } arg2 = (track_t)(val2); result = (char *)cdio_get_track_isrc((CdIo_t const *)arg1,arg2); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdtext_field2str) { { cdtext_field_t arg1 ; int val1 ; int ecode1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: cdtext_field2str(i);"); } ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "cdtext_field2str" "', argument " "1"" of type '" "cdtext_field_t""'"); } arg1 = (cdtext_field_t)(val1); result = (char *)cdtext_field2str(arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdtext_lang2str) { { cdtext_lang_t arg1 ; int val1 ; int ecode1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: cdtext_lang2str(i);"); } ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "cdtext_lang2str" "', argument " "1"" of type '" "cdtext_lang_t""'"); } arg1 = (cdtext_lang_t)(val1); result = (char *)cdtext_lang2str(arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdtext_genre2str) { { cdtext_genre_t arg1 ; int val1 ; int ecode1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: cdtext_genre2str(i);"); } ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "cdtext_genre2str" "', argument " "1"" of type '" "cdtext_genre_t""'"); } arg1 = (cdtext_genre_t)(val1); result = (char *)cdtext_genre2str(arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdtext_init) { { int argvi = 0; cdtext_t *result = 0 ; dXSARGS; if ((items < 0) || (items > 0)) { SWIG_croak("Usage: cdtext_init();"); } result = (cdtext_t *)cdtext_init(); ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_cdtext_t, 0 | 0); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdtext_data_init) { { cdtext_t *arg1 = (cdtext_t *) 0 ; unsigned char *arg2 ; size_t arg3 ; void *argp1 = 0 ; int res1 = 0 ; size_t val3 ; int ecode3 = 0 ; int argvi = 0; int result; dXSARGS; if ((items < 3) || (items > 3)) { SWIG_croak("Usage: cdtext_data_init(p_cdtext,wdata,i_data);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_cdtext_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "cdtext_data_init" "', argument " "1"" of type '" "cdtext_t *""'"); } arg1 = (cdtext_t *)(argp1); { /* SVpv to uint8_t * */ cdtext_data_bytes_t wdata = { 0, }; STRLEN len; char *ptr; ptr = SvPV(ST(1), len); memcpy(wdata, ptr, len); arg2=wdata; } ecode3 = SWIG_AsVal_size_t SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "cdtext_data_init" "', argument " "3"" of type '" "size_t""'"); } arg3 = (size_t)(val3); result = (int)cdtext_data_init(arg1,arg2,arg3); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdtext_destroy) { { cdtext_t *arg1 = (cdtext_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: cdtext_destroy(p_cdtext);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_cdtext_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "cdtext_destroy" "', argument " "1"" of type '" "cdtext_t *""'"); } arg1 = (cdtext_t *)(argp1); cdtext_destroy(arg1); ST(argvi) = sv_newmortal(); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdtext_get) { { cdtext_t *arg1 = (cdtext_t *) 0 ; cdtext_field_t arg2 ; track_t arg3 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; unsigned int val3 ; int ecode3 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 3) || (items > 3)) { SWIG_croak("Usage: cdtext_get(p_cdtext,key,track);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_cdtext_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "cdtext_get" "', argument " "1"" of type '" "cdtext_t const *""'"); } arg1 = (cdtext_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "cdtext_get" "', argument " "2"" of type '" "cdtext_field_t""'"); } arg2 = (cdtext_field_t)(val2); ecode3 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "cdtext_get" "', argument " "3"" of type '" "track_t""'"); } arg3 = (track_t)(val3); result = (char *)cdtext_get((cdtext_t const *)arg1,arg2,arg3); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdtext_get_language) { { cdtext_t *arg1 = (cdtext_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; cdtext_lang_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: cdtext_get_language(p_cdtext);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_cdtext_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "cdtext_get_language" "', argument " "1"" of type '" "cdtext_t const *""'"); } arg1 = (cdtext_t *)(argp1); result = (cdtext_lang_t)cdtext_get_language((cdtext_t const *)arg1); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdtext_select_language) { { cdtext_t *arg1 = (cdtext_t *) 0 ; cdtext_lang_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; int argvi = 0; bool result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: cdtext_select_language(p_cdtext,lang);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_cdtext_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "cdtext_select_language" "', argument " "1"" of type '" "cdtext_t *""'"); } arg1 = (cdtext_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "cdtext_select_language" "', argument " "2"" of type '" "cdtext_lang_t""'"); } arg2 = (cdtext_lang_t)(val2); result = (bool)cdtext_select_language(arg1,arg2); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdtext_list_languages) { { cdtext_t *arg1 = (cdtext_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; cdtext_lang_t *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: cdtext_list_languages(p_cdtext);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_cdtext_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "cdtext_list_languages" "', argument " "1"" of type '" "cdtext_t const *""'"); } arg1 = (cdtext_t *)(argp1); result = (cdtext_lang_t *)cdtext_list_languages((cdtext_t const *)arg1); { AV *myav; SV **svs; if (result) { svs = (SV **) malloc(4*sizeof(SV *)); svs[0] = sv_newmortal(); sv_setiv((SV*) svs[0],result[0]); svs[1] = sv_newmortal(); sv_setiv((SV*) svs[1],result[1]); svs[2] = sv_newmortal(); sv_setiv((SV*) svs[2],result[2]); svs[3] = sv_newmortal(); sv_setiv((SV*) svs[3],result[3]); myav = av_make(4,svs); free(svs); ST(argvi) = newRV_noinc((SV*)myav); sv_2mortal(ST(argvi)); argvi++; } } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdtext_set) { { cdtext_t *arg1 = (cdtext_t *) 0 ; cdtext_field_t arg2 ; unsigned char *arg3 = (unsigned char *) 0 ; track_t arg4 ; char *arg5 = (char *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; void *argp3 = 0 ; int res3 = 0 ; unsigned int val4 ; int ecode4 = 0 ; int res5 ; char *buf5 = 0 ; int alloc5 = 0 ; int argvi = 0; dXSARGS; if ((items < 5) || (items > 5)) { SWIG_croak("Usage: cdtext_set(p_cdtext,key,value,track,charset);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_cdtext_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "cdtext_set" "', argument " "1"" of type '" "cdtext_t *""'"); } arg1 = (cdtext_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "cdtext_set" "', argument " "2"" of type '" "cdtext_field_t""'"); } arg2 = (cdtext_field_t)(val2); res3 = SWIG_ConvertPtr(ST(2), &argp3,SWIGTYPE_p_unsigned_char, 0 | 0 ); if (!SWIG_IsOK(res3)) { SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "cdtext_set" "', argument " "3"" of type '" "unsigned char const *""'"); } arg3 = (unsigned char *)(argp3); ecode4 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(3), &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "cdtext_set" "', argument " "4"" of type '" "track_t""'"); } arg4 = (track_t)(val4); res5 = SWIG_AsCharPtrAndSize(ST(4), &buf5, NULL, &alloc5); if (!SWIG_IsOK(res5)) { SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "cdtext_set" "', argument " "5"" of type '" "char const *""'"); } arg5 = (char *)(buf5); cdtext_set(arg1,arg2,(unsigned char const *)arg3,arg4,(char const *)arg5); ST(argvi) = sv_newmortal(); if (alloc5 == SWIG_NEWOBJ) free((char*)buf5); XSRETURN(argvi); fail: if (alloc5 == SWIG_NEWOBJ) free((char*)buf5); SWIG_croak_null(); } } XS(_wrap_cdio_get_cdtext) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; cdtext_t *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: cdio_get_cdtext(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "cdio_get_cdtext" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); result = (cdtext_t *)cdio_get_cdtext(arg1); ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_cdtext_t, 0 | 0); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdtext_get_const) { { cdtext_t *arg1 = (cdtext_t *) 0 ; cdtext_field_t arg2 ; track_t arg3 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; unsigned int val3 ; int ecode3 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 3) || (items > 3)) { SWIG_croak("Usage: cdtext_get_const(p_cdtext,key,track);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_cdtext_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "cdtext_get_const" "', argument " "1"" of type '" "cdtext_t const *""'"); } arg1 = (cdtext_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "cdtext_get_const" "', argument " "2"" of type '" "cdtext_field_t""'"); } arg2 = (cdtext_field_t)(val2); ecode3 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "cdtext_get_const" "', argument " "3"" of type '" "track_t""'"); } arg3 = (track_t)(val3); result = (char *)cdtext_get_const((cdtext_t const *)arg1,arg2,arg3); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_close_tray) { { char *arg1 = (char *) 0 ; driver_id_t arg2 ; driver_id_t *arg3 = (driver_id_t *) 0 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; driver_id_t temp3 ; int res3 = SWIG_TMPOBJ ; int argvi = 0; driver_return_code_t result; dXSARGS; arg3 = &temp3; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: close_tray(psz_drive,p_driver_id);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "close_tray" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "close_tray" "', argument " "2"" of type '" "driver_id_t""'"); } arg2 = (driver_id_t)(val2); result = (driver_return_code_t)close_tray((char const *)arg1,arg2,arg3); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ; if (SWIG_IsTmpObj(res3)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((*arg3)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_unsigned_int, new_flags); argvi++ ; } if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_close) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: close(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "close" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); cdio_destroy(arg1); ST(argvi) = sv_newmortal(); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_driver_errmsg) { { driver_return_code_t arg1 ; long val1 ; int ecode1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: driver_errmsg(drc);"); } ecode1 = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "driver_errmsg" "', argument " "1"" of type '" "driver_return_code_t""'"); } arg1 = (driver_return_code_t)(val1); result = (char *)cdio_driver_errmsg(arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_eject_media) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; driver_return_code_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: eject_media(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "eject_media" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); result = (driver_return_code_t)eject_media(arg1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_eject_media_drive) { { char *arg1 = (char *) NULL ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; int argvi = 0; driver_return_code_t result; dXSARGS; if ((items < 0) || (items > 1)) { SWIG_croak("Usage: eject_media_drive(psz_drive);"); } if (items > 0) { res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "eject_media_drive" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); } result = (driver_return_code_t)cdio_eject_media_drive((char const *)arg1); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_get_arg) { { CdIo_t *arg1 = (CdIo_t *) 0 ; char *arg2 ; void *argp1 = 0 ; int res1 = 0 ; int res2 ; char *buf2 = 0 ; int alloc2 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: get_arg(p_cdio,key);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_arg" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "get_arg" "', argument " "2"" of type '" "char const []""'"); } arg2 = (char *)(buf2); result = (char *)cdio_get_arg((CdIo_t const *)arg1,(char const (*))arg2); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); XSRETURN(argvi); fail: if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); SWIG_croak_null(); } } XS(_wrap_get_device) { { CdIo_t *arg1 = (CdIo_t *) NULL ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 0) || (items > 1)) { SWIG_croak("Usage: get_device(p_cdio);"); } if (items > 0) { res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_device" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); } result = (char *)cdio_get_default_device((CdIo_t const *)arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; free((char*)result); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_default_device_driver) { { driver_id_t arg1 ; driver_id_t *arg2 = (driver_id_t *) 0 ; unsigned int val1 ; int ecode1 = 0 ; driver_id_t temp2 ; int res2 = SWIG_TMPOBJ ; int argvi = 0; char *result = 0 ; dXSARGS; arg2 = &temp2; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_default_device_driver(p_driver_id);"); } ecode1 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "get_default_device_driver" "', argument " "1"" of type '" "driver_id_t""'"); } arg1 = (driver_id_t)(val1); result = (char *)get_default_device_driver(arg1,arg2); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; if (SWIG_IsTmpObj(res2)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((*arg2)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_unsigned_int, new_flags); argvi++ ; } free((char*)result); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdio_get_devices) { { driver_id_t arg1 ; unsigned int val1 ; int ecode1 = 0 ; int argvi = 0; DeviceList_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: cdio_get_devices(driver_id);"); } ecode1 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "cdio_get_devices" "', argument " "1"" of type '" "driver_id_t""'"); } arg1 = (driver_id_t)(val1); result = (DeviceList_t)cdio_get_devices(arg1); { /* char ** to array SVp*/ /* AV *myav; SV **svs; int i = 0,len = 0; */ /* Figure out how many elements we have */ /* while (result[len]) len++; svs = (SV **) malloc(len*sizeof(SV *)); for (i = 0; i < len ; i++) { svs[i] = sv_newmortal(); sv_setpv((SV*)svs[i],result[i]); //svs[i] = sv_2mortal((SV*)newSVpv(result[i], 0)); }; myav = av_make(len,svs); free(svs); ST(argvi) = newRV_noinc((SV*)myav); sv_2mortal(ST(argvi)); */ // or: shorter version AV *myav; int i =0; myav = newAV(); char **p = result; while (*p) { av_store(myav, i, (SV*)newSVpv(*p, 0)); i++;p++; } ST(argvi) = newRV_noinc((SV*)myav); sv_2mortal(ST(argvi)); argvi++; cdio_free_device_list(result); } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_devices) { { driver_id_t arg1 ; unsigned int val1 ; int ecode1 = 0 ; int argvi = 0; DeviceList_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_devices(driver_id);"); } ecode1 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "get_devices" "', argument " "1"" of type '" "driver_id_t""'"); } arg1 = (driver_id_t)(val1); result = (DeviceList_t)get_devices(arg1); { /* char ** to array SVp*/ /* AV *myav; SV **svs; int i = 0,len = 0; */ /* Figure out how many elements we have */ /* while (result[len]) len++; svs = (SV **) malloc(len*sizeof(SV *)); for (i = 0; i < len ; i++) { svs[i] = sv_newmortal(); sv_setpv((SV*)svs[i],result[i]); //svs[i] = sv_2mortal((SV*)newSVpv(result[i], 0)); }; myav = av_make(len,svs); free(svs); ST(argvi) = newRV_noinc((SV*)myav); sv_2mortal(ST(argvi)); */ // or: shorter version AV *myav; int i =0; myav = newAV(); char **p = result; while (*p) { av_store(myav, i, (SV*)newSVpv(*p, 0)); i++;p++; } ST(argvi) = newRV_noinc((SV*)myav); sv_2mortal(ST(argvi)); argvi++; cdio_free_device_list(result); } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_devices_ret) { { driver_id_t arg1 ; driver_id_t *arg2 = (driver_id_t *) 0 ; unsigned int val1 ; int ecode1 = 0 ; driver_id_t temp2 ; int res2 = SWIG_TMPOBJ ; int argvi = 0; DeviceList_t result; dXSARGS; arg2 = &temp2; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_devices_ret(driver_id);"); } ecode1 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "get_devices_ret" "', argument " "1"" of type '" "driver_id_t""'"); } arg1 = (driver_id_t)(val1); result = (DeviceList_t)get_devices_ret(arg1,arg2); { /* char ** to array SVp*/ /* AV *myav; SV **svs; int i = 0,len = 0; */ /* Figure out how many elements we have */ /* while (result[len]) len++; svs = (SV **) malloc(len*sizeof(SV *)); for (i = 0; i < len ; i++) { svs[i] = sv_newmortal(); sv_setpv((SV*)svs[i],result[i]); //svs[i] = sv_2mortal((SV*)newSVpv(result[i], 0)); }; myav = av_make(len,svs); free(svs); ST(argvi) = newRV_noinc((SV*)myav); sv_2mortal(ST(argvi)); */ // or: shorter version AV *myav; int i =0; myav = newAV(); char **p = result; while (*p) { av_store(myav, i, (SV*)newSVpv(*p, 0)); i++;p++; } ST(argvi) = newRV_noinc((SV*)myav); sv_2mortal(ST(argvi)); argvi++; cdio_free_device_list(result); } if (SWIG_IsTmpObj(res2)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((*arg2)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_unsigned_int, new_flags); argvi++ ; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_devices_with_cap) { { unsigned int arg1 ; bool arg2 ; unsigned int val1 ; int ecode1 = 0 ; bool val2 ; int ecode2 = 0 ; int argvi = 0; DeviceList_t result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: get_devices_with_cap(capabilities,b_any);"); } ecode1 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "get_devices_with_cap" "', argument " "1"" of type '" "unsigned int""'"); } arg1 = (unsigned int)(val1); ecode2 = SWIG_AsVal_bool SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_devices_with_cap" "', argument " "2"" of type '" "bool""'"); } arg2 = (bool)(val2); result = (DeviceList_t)get_devices_with_cap(arg1,arg2); { /* char ** to array SVp*/ /* AV *myav; SV **svs; int i = 0,len = 0; */ /* Figure out how many elements we have */ /* while (result[len]) len++; svs = (SV **) malloc(len*sizeof(SV *)); for (i = 0; i < len ; i++) { svs[i] = sv_newmortal(); sv_setpv((SV*)svs[i],result[i]); //svs[i] = sv_2mortal((SV*)newSVpv(result[i], 0)); }; myav = av_make(len,svs); free(svs); ST(argvi) = newRV_noinc((SV*)myav); sv_2mortal(ST(argvi)); */ // or: shorter version AV *myav; int i =0; myav = newAV(); char **p = result; while (*p) { av_store(myav, i, (SV*)newSVpv(*p, 0)); i++;p++; } ST(argvi) = newRV_noinc((SV*)myav); sv_2mortal(ST(argvi)); argvi++; cdio_free_device_list(result); } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_devices_with_cap_ret) { { unsigned int arg1 ; bool arg2 ; driver_id_t *arg3 = (driver_id_t *) 0 ; unsigned int val1 ; int ecode1 = 0 ; bool val2 ; int ecode2 = 0 ; driver_id_t temp3 ; int res3 = SWIG_TMPOBJ ; int argvi = 0; DeviceList_t result; dXSARGS; arg3 = &temp3; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: get_devices_with_cap_ret(capabilities,b_any);"); } ecode1 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "get_devices_with_cap_ret" "', argument " "1"" of type '" "unsigned int""'"); } arg1 = (unsigned int)(val1); ecode2 = SWIG_AsVal_bool SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_devices_with_cap_ret" "', argument " "2"" of type '" "bool""'"); } arg2 = (bool)(val2); result = (DeviceList_t)get_devices_with_cap_ret(arg1,arg2,arg3); { /* char ** to array SVp*/ /* AV *myav; SV **svs; int i = 0,len = 0; */ /* Figure out how many elements we have */ /* while (result[len]) len++; svs = (SV **) malloc(len*sizeof(SV *)); for (i = 0; i < len ; i++) { svs[i] = sv_newmortal(); sv_setpv((SV*)svs[i],result[i]); //svs[i] = sv_2mortal((SV*)newSVpv(result[i], 0)); }; myav = av_make(len,svs); free(svs); ST(argvi) = newRV_noinc((SV*)myav); sv_2mortal(ST(argvi)); */ // or: shorter version AV *myav; int i =0; myav = newAV(); char **p = result; while (*p) { av_store(myav, i, (SV*)newSVpv(*p, 0)); i++;p++; } ST(argvi) = newRV_noinc((SV*)myav); sv_2mortal(ST(argvi)); argvi++; cdio_free_device_list(result); } if (SWIG_IsTmpObj(res3)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((*arg3)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_unsigned_int, new_flags); argvi++ ; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_drive_cap__SWIG_0) { { CdIo_t *arg1 = (CdIo_t *) 0 ; unsigned int *arg2 = (unsigned int *) 0 ; unsigned int *arg3 = (unsigned int *) 0 ; unsigned int *arg4 = (unsigned int *) 0 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int temp2 ; int res2 = SWIG_TMPOBJ ; unsigned int temp3 ; int res3 = SWIG_TMPOBJ ; unsigned int temp4 ; int res4 = SWIG_TMPOBJ ; int argvi = 0; dXSARGS; arg2 = &temp2; arg3 = &temp3; arg4 = &temp4; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_drive_cap(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_drive_cap" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); cdio_get_drive_cap((CdIo_t const *)arg1,arg2,arg3,arg4); ST(argvi) = sv_newmortal(); if (SWIG_IsTmpObj(res2)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((*arg2)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_unsigned_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res3)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((*arg3)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_unsigned_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res4)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((*arg4)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_unsigned_int, new_flags); argvi++ ; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_drive_cap__SWIG_1) { { char *arg1 = (char *) NULL ; unsigned int *arg2 = (unsigned int *) 0 ; unsigned int *arg3 = (unsigned int *) 0 ; unsigned int *arg4 = (unsigned int *) 0 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; unsigned int temp2 ; int res2 = SWIG_TMPOBJ ; unsigned int temp3 ; int res3 = SWIG_TMPOBJ ; unsigned int temp4 ; int res4 = SWIG_TMPOBJ ; int argvi = 0; dXSARGS; arg2 = &temp2; arg3 = &temp3; arg4 = &temp4; if ((items < 0) || (items > 1)) { SWIG_croak("Usage: get_drive_cap(device);"); } if (items > 0) { res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_drive_cap" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); } cdio_get_drive_cap_dev((char const *)arg1,arg2,arg3,arg4); ST(argvi) = sv_newmortal(); if (SWIG_IsTmpObj(res2)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((*arg2)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_unsigned_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res3)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((*arg3)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_unsigned_int, new_flags); argvi++ ; } if (SWIG_IsTmpObj(res4)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((*arg4)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_unsigned_int, new_flags); argvi++ ; } if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_get_drive_cap) { dXSARGS; { unsigned long _index = 0; SWIG_TypeRank _rank = 0; if ((items >= 0) && (items <= 1)) { SWIG_TypeRank _ranki = 0; SWIG_TypeRank _rankm = 0; SWIG_TypeRank _pi = 1; int _v = 0; if (items > 0) { { int res = SWIG_AsCharPtrAndSize(ST(0), 0, NULL, 0); _v = SWIG_CheckState(res); } if (!_v) goto check_1; _ranki += _v*_pi; _rankm += _pi; _pi *= SWIG_MAXCASTRANK; } if (!_index || (_ranki < _rank)) { _rank = _ranki; _index = 1; if (_rank == _rankm) goto dispatch; } } check_1: if (items == 1) { SWIG_TypeRank _ranki = 0; SWIG_TypeRank _rankm = 0; SWIG_TypeRank _pi = 1; int _v = 0; { void *vptr = 0; int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_CdIo_t, 0); _v = SWIG_CheckState(res); } if (!_v) goto check_2; _ranki += _v*_pi; _rankm += _pi; _pi *= SWIG_MAXCASTRANK; if (!_index || (_ranki < _rank)) { _rank = _ranki; _index = 2; if (_rank == _rankm) goto dispatch; } } check_2: dispatch: switch(_index) { case 1: PUSHMARK(MARK); SWIG_CALLXS(_wrap_get_drive_cap__SWIG_1); return; case 2: PUSHMARK(MARK); SWIG_CALLXS(_wrap_get_drive_cap__SWIG_0); return; } } croak("No matching function for overloaded 'get_drive_cap'"); XSRETURN(0); } XS(_wrap_get_driver_name) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_driver_name(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_driver_name" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); result = (char *)cdio_get_driver_name((CdIo_t const *)arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_driver_id) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; driver_id_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_driver_id(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_driver_id" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); result = (driver_id_t)cdio_get_driver_id((CdIo_t const *)arg1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_last_session) { { CdIo_t *arg1 = (CdIo_t *) 0 ; lsn_t *arg2 = (lsn_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; lsn_t temp2 ; int res2 = SWIG_TMPOBJ ; int argvi = 0; driver_return_code_t result; dXSARGS; arg2 = &temp2; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_last_session(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_last_session" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); result = (driver_return_code_t)cdio_get_last_session(arg1,arg2); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ; if (SWIG_IsTmpObj(res2)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg2)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags); argvi++ ; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_have_driver) { { unsigned int arg1 ; unsigned int val1 ; int ecode1 = 0 ; int argvi = 0; int result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: have_driver(driver_id);"); } ecode1 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "have_driver" "', argument " "1"" of type '" "unsigned int""'"); } arg1 = (unsigned int)(val1); result = (int)have_driver(arg1); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_have_ATAPI) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; bool result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: have_ATAPI(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "have_ATAPI" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); result = (bool)have_ATAPI(arg1); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_is_binfile) { { char *arg1 = (char *) 0 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: is_binfile(bin_name);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "is_binfile" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); result = (char *)cdio_is_binfile((char const *)arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); free((char*)result); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_is_cuefile) { { char *arg1 = (char *) 0 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: is_cuefile(cue_name);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "is_cuefile" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); result = (char *)cdio_is_cuefile((char const *)arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); free((char*)result); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_is_device) { { char *arg1 = (char *) 0 ; driver_id_t arg2 = (driver_id_t) DRIVER_UNKNOWN ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; bool result; dXSARGS; if ((items < 1) || (items > 2)) { SWIG_croak("Usage: is_device(psz_source,driver_id);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "is_device" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); if (items > 1) { ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "is_device" "', argument " "2"" of type '" "driver_id_t""'"); } arg2 = (driver_id_t)(val2); } result = (bool)cdio_is_device((char const *)arg1,arg2); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_is_nrg) { { char *arg1 = (char *) 0 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; int argvi = 0; bool result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: is_nrg(nrg_name);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "is_nrg" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); result = (bool)cdio_is_nrg((char const *)arg1); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_is_tocfile) { { char *arg1 = (char *) 0 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; int argvi = 0; bool result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: is_tocfile(tocfile_name);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "is_tocfile" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); result = (bool)cdio_is_tocfile((char const *)arg1); ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1((bool)(result)); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_get_media_changed) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; int result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_media_changed(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_media_changed" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); result = (int)cdio_get_media_changed(arg1); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_hwinfo) { { CdIo_t *arg1 = (CdIo_t *) 0 ; int *arg2 = (int *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int temp2 ; int res2 = SWIG_TMPOBJ ; int argvi = 0; HWInfo_t result; dXSARGS; arg2 = &temp2; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_hwinfo(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_hwinfo" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); result = (HWInfo_t)get_hwinfo((CdIo_t const *)arg1,arg2); { /* char ** to array SVp*/ AV *myav; SV **svs; int i = 0,len = 0; /* no test if(!result) { ST(argvi) = newSV(0); } */ /* Figure out how many elements we have */ while (result[len]) len++; svs = (SV **) malloc(len*sizeof(SV *)); for (i = 0; i < len ; i++) { svs[i] = sv_newmortal(); sv_setpv((SV*)svs[i],result[i]); }; myav = av_make(len,svs); free(svs); ST(argvi) = newRV_noinc((SV*)myav); sv_2mortal(ST(argvi)); argvi++; } if (SWIG_IsTmpObj(res2)) { if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((*arg2)); argvi++ ; } else { int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0) : 0; if (argvi >= items) EXTEND(sp,1); ST(argvi) = SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags); argvi++ ; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_mmc_get_tray_status) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; int result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: mmc_get_tray_status(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "mmc_get_tray_status" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); result = (int)mmc_get_tray_status((CdIo_t const *)arg1); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_set_blocksize) { { CdIo_t *arg1 = (CdIo_t *) 0 ; int arg2 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; int argvi = 0; driver_return_code_t result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: set_blocksize(p_cdio,i_blocksize);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "set_blocksize" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "set_blocksize" "', argument " "2"" of type '" "int""'"); } arg2 = (int)(val2); result = (driver_return_code_t)cdio_set_blocksize((CdIo_t const *)arg1,arg2); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_set_speed) { { CdIo_t *arg1 = (CdIo_t *) 0 ; int arg2 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; int argvi = 0; driver_return_code_t result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: set_speed(p_cdio,i_speed);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "set_speed" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "set_speed" "', argument " "2"" of type '" "int""'"); } arg2 = (int)(val2); result = (driver_return_code_t)cdio_set_speed((CdIo_t const *)arg1,arg2); ST(argvi) = SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_open_cd) { { char *arg1 = (char *) NULL ; driver_id_t arg2 = (driver_id_t) DRIVER_UNKNOWN ; char *arg3 = (char *) NULL ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int res3 ; char *buf3 = 0 ; int alloc3 = 0 ; int argvi = 0; CdIo_t *result = 0 ; dXSARGS; if ((items < 0) || (items > 3)) { SWIG_croak("Usage: open_cd(psz_source,driver_id,psz_access_mode);"); } if (items > 0) { res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "open_cd" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); } if (items > 1) { ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "open_cd" "', argument " "2"" of type '" "driver_id_t""'"); } arg2 = (driver_id_t)(val2); } if (items > 2) { res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3); if (!SWIG_IsOK(res3)) { SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "open_cd" "', argument " "3"" of type '" "char const *""'"); } arg3 = (char *)(buf3); } result = (CdIo_t *)cdio_open_am((char const *)arg1,arg2,(char const *)arg3); ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CdIo_t, 0 | 0); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); SWIG_croak_null(); } } XS(_wrap_get_disc_last_lsn) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; lsn_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_disc_last_lsn(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_disc_last_lsn" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); result = (lsn_t)cdio_get_disc_last_lsn((CdIo_t const *)arg1); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_disc_mode) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_disc_mode(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_disc_mode" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); result = (char *)get_disc_mode(arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_joliet_level) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; int result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_joliet_level(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_joliet_level" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); result = (int)cdio_get_joliet_level((CdIo_t const *)arg1); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_mcn) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_mcn(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_mcn" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); result = (char *)cdio_get_mcn((CdIo_t const *)arg1); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; free((char*)result); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_num_tracks) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; track_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_num_tracks(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_num_tracks" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); result = (track_t)cdio_get_num_tracks((CdIo_t const *)arg1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_get_cddb_discid) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; unsigned int result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: get_cddb_discid(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_cddb_discid" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); result = (unsigned int)get_cddb_discid(arg1); ST(argvi) = SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cddb_dec_digit_sum) { { int arg1 ; int val1 ; int ecode1 = 0 ; int argvi = 0; int result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: cddb_dec_digit_sum(n);"); } ecode1 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "cddb_dec_digit_sum" "', argument " "1"" of type '" "int""'"); } arg1 = (int)(val1); result = (int)cddb_dec_digit_sum(arg1); { ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi),(IV) result); argvi++; } XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_guess_cd_type) { { CdIo_t *arg1 = (CdIo_t *) 0 ; int arg2 ; track_t arg3 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; unsigned int val3 ; int ecode3 = 0 ; int argvi = 0; SV *result = 0 ; dXSARGS; if ((items < 3) || (items > 3)) { SWIG_croak("Usage: guess_cd_type(cdio,start_session,track_num);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "guess_cd_type" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "guess_cd_type" "', argument " "2"" of type '" "int""'"); } arg2 = (int)(val2); ecode3 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "guess_cd_type" "', argument " "3"" of type '" "track_t""'"); } arg3 = (track_t)(val3); result = (SV *)guess_cd_type((CdIo_t const *)arg1,arg2,arg3); ST(argvi) = result; argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_cdio_version) { { int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 0) || (items > 0)) { SWIG_croak("Usage: cdio_version();"); } result = (char *)cdio_version(); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ static swig_type_info _swigt__p_CdIo_t = {"_p_CdIo_t", "CdIo_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_a_9220__unsigned_char = {"_p_a_9220__unsigned_char", "cdtext_data_bytes_t *|unsigned char (*)[9220]", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_cdio_hwinfo_t = {"_p_cdio_hwinfo_t", "cdio_hwinfo_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_cdtext_t = {"_p_cdtext_t", "cdtext_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_imaxdiv_t = {"_p_imaxdiv_t", "imaxdiv_t *", 0, 0, (void*)"perlcdio::imaxdiv_t", 0}; static swig_type_info _swigt__p_int = {"_p_int", "cdtext_genre_t *|intptr_t *|int *|int_least32_t *|int_fast32_t *|lba_t *|int32_t *|track_flag_t *|lsn_t *|cdtext_field_t *|int_fast16_t *|cdio_read_mode_t *|cdtext_lang_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_iso9660_pvd_t = {"_p_iso9660_pvd_t", "iso9660_pvd_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_long = {"_p_long", "my_ssize_t *|ssize_t *|long *|driver_return_code_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_long_long = {"_p_long_long", "int_least64_t *|int_fast64_t *|int64_t *|long long *|intmax_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_off_t = {"_p_off_t", "off_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_short = {"_p_short", "short *|int_least16_t *|int16_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_signed_char = {"_p_signed_char", "signed char *|int_least8_t *|int_fast8_t *|int8_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *|uint_least8_t *|uint_fast8_t *|uint8_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_unsigned_int = {"_p_unsigned_int", "track_t *|uintptr_t *|uint_least32_t *|uint_fast32_t *|uint32_t *|unsigned int *|cdio_drive_write_cap_t *|cdio_drive_misc_cap_t *|cdio_drive_read_cap_t *|driver_id_t *|uint_fast16_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_unsigned_long_long = {"_p_unsigned_long_long", "uint_least64_t *|uint_fast64_t *|uint64_t *|unsigned long long *|uintmax_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_unsigned_short = {"_p_unsigned_short", "unsigned short *|uint_least16_t *|uint16_t *", 0, 0, (void*)0, 0}; static swig_type_info *swig_type_initial[] = { &_swigt__p_CdIo_t, &_swigt__p_a_9220__unsigned_char, &_swigt__p_cdio_hwinfo_t, &_swigt__p_cdtext_t, &_swigt__p_char, &_swigt__p_imaxdiv_t, &_swigt__p_int, &_swigt__p_iso9660_pvd_t, &_swigt__p_long, &_swigt__p_long_long, &_swigt__p_off_t, &_swigt__p_p_char, &_swigt__p_short, &_swigt__p_signed_char, &_swigt__p_unsigned_char, &_swigt__p_unsigned_int, &_swigt__p_unsigned_long_long, &_swigt__p_unsigned_short, }; static swig_cast_info _swigc__p_CdIo_t[] = { {&_swigt__p_CdIo_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_a_9220__unsigned_char[] = { {&_swigt__p_a_9220__unsigned_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_cdio_hwinfo_t[] = { {&_swigt__p_cdio_hwinfo_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_cdtext_t[] = { {&_swigt__p_cdtext_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_imaxdiv_t[] = { {&_swigt__p_imaxdiv_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_iso9660_pvd_t[] = { {&_swigt__p_iso9660_pvd_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_long[] = { {&_swigt__p_long, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_long_long[] = { {&_swigt__p_long_long, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_off_t[] = { {&_swigt__p_off_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_short[] = { {&_swigt__p_short, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_signed_char[] = { {&_swigt__p_signed_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_unsigned_char[] = { {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_unsigned_int[] = { {&_swigt__p_unsigned_int, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_unsigned_long_long[] = { {&_swigt__p_unsigned_long_long, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_unsigned_short[] = { {&_swigt__p_unsigned_short, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info *swig_cast_initial[] = { _swigc__p_CdIo_t, _swigc__p_a_9220__unsigned_char, _swigc__p_cdio_hwinfo_t, _swigc__p_cdtext_t, _swigc__p_char, _swigc__p_imaxdiv_t, _swigc__p_int, _swigc__p_iso9660_pvd_t, _swigc__p_long, _swigc__p_long_long, _swigc__p_off_t, _swigc__p_p_char, _swigc__p_short, _swigc__p_signed_char, _swigc__p_unsigned_char, _swigc__p_unsigned_int, _swigc__p_unsigned_long_long, _swigc__p_unsigned_short, }; /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ static swig_constant_info swig_constants[] = { {0,0,0,0,0,0} }; #ifdef __cplusplus } #endif static swig_variable_info swig_variables[] = { { "perlcdioc::hw_info", MAGIC_CLASS _wrap_hw_info_set, MAGIC_CLASS _wrap_hw_info_get,&SWIGTYPE_p_cdio_hwinfo_t }, {0,0,0,0} }; static swig_command_info swig_commands[] = { {"perlcdioc::imaxdiv_t_quot_set", _wrap_imaxdiv_t_quot_set}, {"perlcdioc::imaxdiv_t_quot_get", _wrap_imaxdiv_t_quot_get}, {"perlcdioc::imaxdiv_t_rem_set", _wrap_imaxdiv_t_rem_set}, {"perlcdioc::imaxdiv_t_rem_get", _wrap_imaxdiv_t_rem_get}, {"perlcdioc::new_imaxdiv_t", _wrap_new_imaxdiv_t}, {"perlcdioc::delete_imaxdiv_t", _wrap_delete_imaxdiv_t}, {"perlcdioc::imaxabs", _wrap_imaxabs}, {"perlcdioc::imaxdiv", _wrap_imaxdiv}, {"perlcdioc::strtoimax", _wrap_strtoimax}, {"perlcdioc::strtoumax", _wrap_strtoumax}, {"perlcdioc::audio_pause", _wrap_audio_pause}, {"perlcdioc::audio_play_track_index", _wrap_audio_play_track_index}, {"perlcdioc::audio_play_lsn", _wrap_audio_play_lsn}, {"perlcdioc::audio_resume", _wrap_audio_resume}, {"perlcdioc::audio_stop", _wrap_audio_stop}, {"perlcdioc::audio_get_volume_levels", _wrap_audio_get_volume_levels}, {"perlcdioc::audio_set_volume_levels", _wrap_audio_set_volume_levels}, {"perlcdioc::audio_get_status", _wrap_audio_get_status}, {"perlcdioc::cdio_from_bcd8", _wrap_cdio_from_bcd8}, {"perlcdioc::lseek", _wrap_lseek}, {"perlcdioc::read_cd", _wrap_read_cd}, {"perlcdioc::read_sectors", _wrap_read_sectors}, {"perlcdioc::read_data_bytes", _wrap_read_data_bytes}, {"perlcdioc::cdio_read_pvd", _wrap_cdio_read_pvd}, {"perlcdioc::get_first_track_num", _wrap_get_first_track_num}, {"perlcdioc::get_last_track_num", _wrap_get_last_track_num}, {"perlcdioc::get_track", _wrap_get_track}, {"perlcdioc::get_track_channels", _wrap_get_track_channels}, {"perlcdioc::get_track_copy_permit", _wrap_get_track_copy_permit}, {"perlcdioc::get_track_format", _wrap_get_track_format}, {"perlcdioc::is_track_green", _wrap_is_track_green}, {"perlcdioc::get_track_last_lsn", _wrap_get_track_last_lsn}, {"perlcdioc::get_track_lba", _wrap_get_track_lba}, {"perlcdioc::get_track_lsn", _wrap_get_track_lsn}, {"perlcdioc::get_track_msf", _wrap_get_track_msf}, {"perlcdioc::get_track_preemphasis", _wrap_get_track_preemphasis}, {"perlcdioc::get_track_sec_count", _wrap_get_track_sec_count}, {"perlcdioc::cdio_get_track_isrc", _wrap_cdio_get_track_isrc}, {"perlcdioc::cdtext_field2str", _wrap_cdtext_field2str}, {"perlcdioc::cdtext_lang2str", _wrap_cdtext_lang2str}, {"perlcdioc::cdtext_genre2str", _wrap_cdtext_genre2str}, {"perlcdioc::cdtext_init", _wrap_cdtext_init}, {"perlcdioc::cdtext_data_init", _wrap_cdtext_data_init}, {"perlcdioc::cdtext_destroy", _wrap_cdtext_destroy}, {"perlcdioc::cdtext_get", _wrap_cdtext_get}, {"perlcdioc::cdtext_get_language", _wrap_cdtext_get_language}, {"perlcdioc::cdtext_select_language", _wrap_cdtext_select_language}, {"perlcdioc::cdtext_list_languages", _wrap_cdtext_list_languages}, {"perlcdioc::cdtext_set", _wrap_cdtext_set}, {"perlcdioc::cdio_get_cdtext", _wrap_cdio_get_cdtext}, {"perlcdioc::cdtext_get_const", _wrap_cdtext_get_const}, {"perlcdioc::close_tray", _wrap_close_tray}, {"perlcdioc::close", _wrap_close}, {"perlcdioc::driver_errmsg", _wrap_driver_errmsg}, {"perlcdioc::eject_media", _wrap_eject_media}, {"perlcdioc::eject_media_drive", _wrap_eject_media_drive}, {"perlcdioc::get_arg", _wrap_get_arg}, {"perlcdioc::get_device", _wrap_get_device}, {"perlcdioc::get_default_device_driver", _wrap_get_default_device_driver}, {"perlcdioc::cdio_get_devices", _wrap_cdio_get_devices}, {"perlcdioc::get_devices", _wrap_get_devices}, {"perlcdioc::get_devices_ret", _wrap_get_devices_ret}, {"perlcdioc::get_devices_with_cap", _wrap_get_devices_with_cap}, {"perlcdioc::get_devices_with_cap_ret", _wrap_get_devices_with_cap_ret}, {"perlcdioc::get_drive_cap", _wrap_get_drive_cap}, {"perlcdioc::get_driver_name", _wrap_get_driver_name}, {"perlcdioc::get_driver_id", _wrap_get_driver_id}, {"perlcdioc::get_last_session", _wrap_get_last_session}, {"perlcdioc::have_driver", _wrap_have_driver}, {"perlcdioc::have_ATAPI", _wrap_have_ATAPI}, {"perlcdioc::is_binfile", _wrap_is_binfile}, {"perlcdioc::is_cuefile", _wrap_is_cuefile}, {"perlcdioc::is_device", _wrap_is_device}, {"perlcdioc::is_nrg", _wrap_is_nrg}, {"perlcdioc::is_tocfile", _wrap_is_tocfile}, {"perlcdioc::get_media_changed", _wrap_get_media_changed}, {"perlcdioc::get_hwinfo", _wrap_get_hwinfo}, {"perlcdioc::mmc_get_tray_status", _wrap_mmc_get_tray_status}, {"perlcdioc::set_blocksize", _wrap_set_blocksize}, {"perlcdioc::set_speed", _wrap_set_speed}, {"perlcdioc::open_cd", _wrap_open_cd}, {"perlcdioc::get_disc_last_lsn", _wrap_get_disc_last_lsn}, {"perlcdioc::get_disc_mode", _wrap_get_disc_mode}, {"perlcdioc::get_joliet_level", _wrap_get_joliet_level}, {"perlcdioc::get_mcn", _wrap_get_mcn}, {"perlcdioc::get_num_tracks", _wrap_get_num_tracks}, {"perlcdioc::get_cddb_discid", _wrap_get_cddb_discid}, {"perlcdioc::cddb_dec_digit_sum", _wrap_cddb_dec_digit_sum}, {"perlcdioc::guess_cd_type", _wrap_guess_cd_type}, {"perlcdioc::cdio_version", _wrap_cdio_version}, {0,0} }; /* ----------------------------------------------------------------------------- * Type initialization: * This problem is tough by the requirement that no dynamic * memory is used. Also, since swig_type_info structures store pointers to * swig_cast_info structures and swig_cast_info structures store pointers back * to swig_type_info structures, we need some lookup code at initialization. * The idea is that swig generates all the structures that are needed. * The runtime then collects these partially filled structures. * The SWIG_InitializeModule function takes these initial arrays out of * swig_module, and does all the lookup, filling in the swig_module.types * array with the correct data and linking the correct swig_cast_info * structures together. * * The generated swig_type_info structures are assigned statically to an initial * array. We just loop through that array, and handle each type individually. * First we lookup if this type has been already loaded, and if so, use the * loaded structure instead of the generated one. Then we have to fill in the * cast linked list. The cast data is initially stored in something like a * two-dimensional array. Each row corresponds to a type (there are the same * number of rows as there are in the swig_type_initial array). Each entry in * a column is one of the swig_cast_info structures for that type. * The cast_initial array is actually an array of arrays, because each row has * a variable number of columns. So to actually build the cast linked list, * we find the array of casts associated with the type, and loop through it * adding the casts to the list. The one last trick we need to do is making * sure the type pointer in the swig_cast_info struct is correct. * * First off, we lookup the cast->type name to see if it is already loaded. * There are three cases to handle: * 1) If the cast->type has already been loaded AND the type we are adding * casting info to has not been loaded (it is in this module), THEN we * replace the cast->type pointer with the type pointer that has already * been loaded. * 2) If BOTH types (the one we are adding casting info to, and the * cast->type) are loaded, THEN the cast info has already been loaded by * the previous module so we just ignore it. * 3) Finally, if cast->type has not already been loaded, then we add that * swig_cast_info to the linked list (because the cast->type) pointer will * be correct. * ----------------------------------------------------------------------------- */ #ifdef __cplusplus extern "C" { #if 0 } /* c-mode */ #endif #endif #if 0 #define SWIGRUNTIME_DEBUG #endif SWIGRUNTIME void SWIG_InitializeModule(void *clientdata) { size_t i; swig_module_info *module_head, *iter; int init; /* check to see if the circular list has been setup, if not, set it up */ if (swig_module.next==0) { /* Initialize the swig_module */ swig_module.type_initial = swig_type_initial; swig_module.cast_initial = swig_cast_initial; swig_module.next = &swig_module; init = 1; } else { init = 0; } /* Try and load any already created modules */ module_head = SWIG_GetModule(clientdata); if (!module_head) { /* This is the first module loaded for this interpreter */ /* so set the swig module into the interpreter */ SWIG_SetModule(clientdata, &swig_module); } else { /* the interpreter has loaded a SWIG module, but has it loaded this one? */ iter=module_head; do { if (iter==&swig_module) { /* Our module is already in the list, so there's nothing more to do. */ return; } iter=iter->next; } while (iter!= module_head); /* otherwise we must add our module into the list */ swig_module.next = module_head->next; module_head->next = &swig_module; } /* When multiple interpreters are used, a module could have already been initialized in a different interpreter, but not yet have a pointer in this interpreter. In this case, we do not want to continue adding types... everything should be set up already */ if (init == 0) return; /* Now work on filling in swig_module.types */ #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: size %d\n", swig_module.size); #endif for (i = 0; i < swig_module.size; ++i) { swig_type_info *type = 0; swig_type_info *ret; swig_cast_info *cast; #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); #endif /* if there is another module already loaded */ if (swig_module.next != &swig_module) { type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); } if (type) { /* Overwrite clientdata field */ #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: found type %s\n", type->name); #endif if (swig_module.type_initial[i]->clientdata) { type->clientdata = swig_module.type_initial[i]->clientdata; #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name); #endif } } else { type = swig_module.type_initial[i]; } /* Insert casting types */ cast = swig_module.cast_initial[i]; while (cast->type) { /* Don't need to add information already in the list */ ret = 0; #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: look cast %s\n", cast->type->name); #endif if (swig_module.next != &swig_module) { ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); #ifdef SWIGRUNTIME_DEBUG if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name); #endif } if (ret) { if (type == swig_module.type_initial[i]) { #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: skip old type %s\n", ret->name); #endif cast->type = ret; ret = 0; } else { /* Check for casting already in the list */ swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type); #ifdef SWIGRUNTIME_DEBUG if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name); #endif if (!ocast) ret = 0; } } if (!ret) { #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name); #endif if (type->cast) { type->cast->prev = cast; cast->next = type->cast; } type->cast = cast; } cast++; } /* Set entry in modules->types array equal to the type */ swig_module.types[i] = type; } swig_module.types[i] = 0; #ifdef SWIGRUNTIME_DEBUG printf("**** SWIG_InitializeModule: Cast List ******\n"); for (i = 0; i < swig_module.size; ++i) { int j = 0; swig_cast_info *cast = swig_module.cast_initial[i]; printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); while (cast->type) { printf("SWIG_InitializeModule: cast type %s\n", cast->type->name); cast++; ++j; } printf("---- Total casts: %d\n",j); } printf("**** SWIG_InitializeModule: Cast List ******\n"); #endif } /* This function will propagate the clientdata field of type to * any new swig_type_info structures that have been added into the list * of equivalent types. It is like calling * SWIG_TypeClientData(type, clientdata) a second time. */ SWIGRUNTIME void SWIG_PropagateClientData(void) { size_t i; swig_cast_info *equiv; static int init_run = 0; if (init_run) return; init_run = 1; for (i = 0; i < swig_module.size; i++) { if (swig_module.types[i]->clientdata) { equiv = swig_module.types[i]->cast; while (equiv) { if (!equiv->converter) { if (equiv->type && !equiv->type->clientdata) SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); } equiv = equiv->next; } } } } #ifdef __cplusplus #if 0 { /* c-mode */ #endif } #endif #if defined(__cplusplus) && ! defined(XSPROTO) extern "C" #endif XS(SWIG_init) { dXSARGS; int i; (void)items; SWIG_InitializeModule(0); /* Install commands */ for (i = 0; swig_commands[i].name; i++) { /* Casts only needed for Perl < 5.10. */ #ifdef __cplusplus newXS(const_cast(swig_commands[i].name), swig_commands[i].wrapper, const_cast(__FILE__)); #else newXS((char*)swig_commands[i].name, swig_commands[i].wrapper, (char*)__FILE__); #endif } /* Install variables */ for (i = 0; swig_variables[i].name; i++) { SV *sv; sv = get_sv(swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI); if (swig_variables[i].type) { SWIG_MakePtr(sv,(void *)1, *swig_variables[i].type,0); } else { sv_setiv(sv,(IV) 0); } swig_create_magic(sv, swig_variables[i].name, swig_variables[i].set, swig_variables[i].get); } /* Install constant */ for (i = 0; swig_constants[i].type; i++) { SV *sv; sv = get_sv(swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI); switch(swig_constants[i].type) { case SWIG_INT: sv_setiv(sv, (IV) swig_constants[i].lvalue); break; case SWIG_FLOAT: sv_setnv(sv, (double) swig_constants[i].dvalue); break; case SWIG_STRING: sv_setpv(sv, (const char *) swig_constants[i].pvalue); break; case SWIG_POINTER: SWIG_MakePtr(sv, swig_constants[i].pvalue, *(swig_constants[i].ptype),0); break; case SWIG_BINARY: SWIG_MakePackedObj(sv, swig_constants[i].pvalue, swig_constants[i].lvalue, *(swig_constants[i].ptype)); break; default: break; } SvREADONLY_on(sv); } SWIG_TypeClientData(SWIGTYPE_p_imaxdiv_t, (void*) "perlcdio::imaxdiv_t"); /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "VERSION_NUM", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(LIBCDIO_VERSION_NUM))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "INVALID_LBA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_INVALID_LBA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "INVALID_LSN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_INVALID_LSN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CD_FRAMESIZE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_CD_FRAMESIZE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CD_FRAMESIZE_RAW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_CD_FRAMESIZE_RAW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "ISO_BLOCKSIZE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_CD_FRAMESIZE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "M2F2_SECTOR_SIZE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(M2F2_SECTOR_SIZE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "M2RAW_SECTOR_SIZE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(M2RAW_SECTOR_SIZE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_MODE_AUDIO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_READ_MODE_AUDIO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_MODE_M1F1", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_READ_MODE_M1F1))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_MODE_M1F2", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_READ_MODE_M1F2))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_MODE_M2F1", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_READ_MODE_M2F1))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_MODE_M2F2", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_READ_MODE_M2F2))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "TRACK_FORMAT_AUDIO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(TRACK_FORMAT_AUDIO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "TRACK_FORMAT_CDI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(TRACK_FORMAT_CDI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "TRACK_FORMAT_XA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(TRACK_FORMAT_XA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "TRACK_FORMAT_DATA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(TRACK_FORMAT_DATA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "TRACK_FORMAT_PSX", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(TRACK_FORMAT_PSX))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDIO_TRACK_FLAG_FALSE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_TRACK_FLAG_FALSE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDIO_TRACK_FLAG_TRUE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_TRACK_FLAG_TRUE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDIO_TRACK_FLAG_ERROR", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_TRACK_FLAG_ERROR))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDIO_TRACK_FLAG_UNKNOWN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_TRACK_FLAG_UNKNOWN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDIO_CDROM_LBA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_CDROM_LBA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDIO_CDROM_MSF", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_CDROM_MSF))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDIO_CDROM_DATA_TRACK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_CDROM_DATA_TRACK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDIO_CDROM_CDI_TRACK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_CDROM_CDI_TRACK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDIO_CDROM_XA_TRACK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_CDROM_XA_TRACK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "AUDIO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(AUDIO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MODE1", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(MODE1))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MODE1_RAW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(MODE1_RAW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MODE2", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(MODE2))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MODE2_FORM1", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(MODE2_FORM1))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MODE2_FORM2", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(MODE2_FORM2))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MODE2_FORM_MIX", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(MODE2_FORM_MIX))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MODE2_RAW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(MODE2_RAW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "INVALID_TRACK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_INVALID_TRACK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDROM_LEADOUT_TRACK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(0xAA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_FIELD_TITLE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_FIELD_TITLE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_FIELD_PERFORMER", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_FIELD_PERFORMER))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_FIELD_SONGWRITER", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_FIELD_SONGWRITER))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_FIELD_COMPOSER", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_FIELD_COMPOSER))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_FIELD_MESSAGE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_FIELD_MESSAGE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_FIELD_ARRANGER", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_FIELD_ARRANGER))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_FIELD_ISRC", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_FIELD_ISRC))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_FIELD_UPC_EAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_FIELD_UPC_EAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_FIELD_GENRE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_FIELD_GENRE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_FIELD_DISCID", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_FIELD_DISCID))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_FIELD_INVALID", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_FIELD_INVALID))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_UNUSED", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_UNUSED))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_UNDEFINED", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_UNDEFINED))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_ADULT_CONTEMP", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_ADULT_CONTEMP))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_ALT_ROCK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_ALT_ROCK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_CHILDRENS", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_CHILDRENS))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_CLASSIC", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_CLASSIC))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_CHRIST_CONTEMP", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_CHRIST_CONTEMP))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_COUNTRY", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_COUNTRY))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_DANCE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_DANCE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_EASY_LISTENING", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_EASY_LISTENING))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_EROTIC", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_EROTIC))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_FOLK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_FOLK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_GOSPEL", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_GOSPEL))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_HIPHOP", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_HIPHOP))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_JAZZ", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_JAZZ))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_LATIN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_LATIN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_MUSICAL", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_MUSICAL))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_NEWAGE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_NEWAGE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_OPERA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_OPERA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_OPERETTA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_OPERETTA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_POP", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_POP))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_RAP", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_RAP))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_REGGAE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_REGGAE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_ROCK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_ROCK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_RYTHMANDBLUES", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_RYTHMANDBLUES))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_SOUNDEFFECTS", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_SOUNDEFFECTS))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_SOUNDTRACK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_SOUNDTRACK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_SPOKEN_WORD", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_SPOKEN_WORD))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_GENRE_WORLD_MUSIC", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_GENRE_WORLD_MUSIC))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_UNKNOWN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_UNKNOWN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_ALBANIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_ALBANIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_BRETON", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_BRETON))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_CATALAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_CATALAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_CROATIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_CROATIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_WELSH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_WELSH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_CZECH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_CZECH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_DANISH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_DANISH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_GERMAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_GERMAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_ENGLISH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_ENGLISH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_SPANISH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_SPANISH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_ESPERANTO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_ESPERANTO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_ESTONIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_ESTONIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_BASQUE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_BASQUE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_FAROESE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_FAROESE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_FRENCH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_FRENCH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_FRISIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_FRISIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_IRISH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_IRISH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_GAELIC", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_GAELIC))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_GALICIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_GALICIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_ICELANDIC", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_ICELANDIC))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_ITALIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_ITALIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_LAPPISH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_LAPPISH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_LATIN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_LATIN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_LATVIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_LATVIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_LUXEMBOURGIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_LUXEMBOURGIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_LITHUANIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_LITHUANIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_HUNGARIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_HUNGARIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_MALTESE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_MALTESE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_DUTCH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_DUTCH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_NORWEGIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_NORWEGIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_OCCITAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_OCCITAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_POLISH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_POLISH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_PORTUGUESE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_PORTUGUESE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_ROMANIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_ROMANIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_ROMANSH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_ROMANSH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_SERBIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_SERBIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_SLOVAK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_SLOVAK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_SLOVENIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_SLOVENIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_FINNISH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_FINNISH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_SWEDISH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_SWEDISH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_TURKISH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_TURKISH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_FLEMISH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_FLEMISH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_WALLON", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_WALLON))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_ZULU", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_ZULU))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_VIETNAMESE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_VIETNAMESE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_UZBEK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_UZBEK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_URDU", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_URDU))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_UKRAINIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_UKRAINIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_THAI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_THAI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_TELUGU", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_TELUGU))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_TATAR", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_TATAR))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_TAMIL", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_TAMIL))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_TADZHIK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_TADZHIK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_SWAHILI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_SWAHILI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_SRANANTONGO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_SRANANTONGO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_SOMALI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_SOMALI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_SINHALESE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_SINHALESE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_SHONA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_SHONA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_SERBO_CROAT", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_SERBO_CROAT))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_RUTHENIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_RUTHENIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_RUSSIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_RUSSIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_QUECHUA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_QUECHUA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_PUSHTU", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_PUSHTU))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_PUNJABI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_PUNJABI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_PERSIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_PERSIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_PAPAMIENTO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_PAPAMIENTO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_ORIYA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_ORIYA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_NEPALI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_NEPALI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_NDEBELE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_NDEBELE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_MARATHI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_MARATHI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_MOLDAVIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_MOLDAVIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_MALAYSIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_MALAYSIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_MALAGASAY", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_MALAGASAY))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_MACEDONIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_MACEDONIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_LAOTIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_LAOTIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_KOREAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_KOREAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_KHMER", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_KHMER))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_KAZAKH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_KAZAKH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_KANNADA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_KANNADA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_JAPANESE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_JAPANESE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_INDONESIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_INDONESIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_HINDI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_HINDI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_HEBREW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_HEBREW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_HAUSA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_HAUSA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_GURANI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_GURANI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_GUJURATI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_GUJURATI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_GREEK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_GREEK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_GEORGIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_GEORGIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_FULANI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_FULANI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_DARI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_DARI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_CHURASH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_CHURASH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_CHINESE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_CHINESE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_BURMESE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_BURMESE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_BULGARIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_BULGARIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_BENGALI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_BENGALI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_BIELORUSSIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_BIELORUSSIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_BAMBORA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_BAMBORA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_AZERBAIJANI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_AZERBAIJANI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_ASSAMESE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_ASSAMESE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_ARMENIAN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_ARMENIAN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_ARABIC", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_ARABIC))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDTEXT_LANGUAGE_AMHARIC", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(CDTEXT_LANGUAGE_AMHARIC))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MIN_CDTEXT_FIELD", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(MIN_CDTEXT_FIELD))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MAX_CDTEXT_FIELDS", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(MAX_CDTEXT_FIELDS))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_ERROR", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_ERROR))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_UNKNOWN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_UNKNOWN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_MISC_CLOSE_TRAY", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_MISC_CLOSE_TRAY))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_MISC_EJECT", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_MISC_EJECT))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_MISC_LOCK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_MISC_LOCK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_MISC_SELECT_SPEED", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_MISC_SELECT_SPEED))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_MISC_SELECT_DISC", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_MISC_SELECT_DISC))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_MISC_MULTI_SESSION", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_MISC_MULTI_SESSION))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_MISC_MEDIA_CHANGED", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_MISC_MEDIA_CHANGED))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_MISC_RESET", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_MISC_RESET))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_MISC_FILE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_MISC_FILE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_AUDIO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_AUDIO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_CD_DA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_CD_DA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_CD_G", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_CD_G))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_CD_R", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_CD_R))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_CD_RW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_CD_RW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_DVD_R", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_DVD_R))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_DVD_PR", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_DVD_PR))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_DVD_RAM", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_DVD_RAM))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_DVD_ROM", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_DVD_ROM))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_DVD_RW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_DVD_RW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_DVD_RPW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_DVD_RPW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_C2_ERRS", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_C2_ERRS))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_MODE2_FORM1", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_MODE2_FORM1))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_MODE2_FORM2", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_MODE2_FORM2))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_MCN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_MCN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_READ_ISRC", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_READ_ISRC))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_WRITE_CD_R", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_WRITE_CD_R))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_WRITE_CD_RW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_WRITE_CD_RW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_WRITE_DVD_R", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_WRITE_DVD_R))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_WRITE_DVD_PR", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_WRITE_DVD_PR))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_WRITE_DVD_RAM", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_WRITE_DVD_RAM))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_WRITE_DVD_RW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_WRITE_DVD_RW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_WRITE_DVD_RPW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_WRITE_DVD_RPW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_WRITE_MT_RAINIER", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_WRITE_MT_RAINIER))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_WRITE_BURN_PROOF", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_WRITE_BURN_PROOF))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_WRITE_CD", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_WRITE_CD))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_WRITE_DVD", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_WRITE_DVD))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVE_CAP_WRITE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DRIVE_CAP_WRITE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MMC_HW_VENDOR_LEN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_HW_VENDOR_LEN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MMC_HW_MODEL_LEN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_HW_MODEL_LEN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "MMC_HW_REVISION_LEN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_HW_REVISION_LEN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "SRC_IS_DISK_IMAGE_MASK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_SRC_IS_DISK_IMAGE_MASK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "SRC_IS_DEVICE_MASK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_SRC_IS_DEVICE_MASK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "SRC_IS_SCSI_MASK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_SRC_IS_SCSI_MASK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "SRC_IS_NATIVE_MASK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_SRC_IS_NATIVE_MASK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_UNKNOWN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_UNKNOWN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_AIX", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_AIX))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_FREEBSD", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_FREEBSD))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_LINUX", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_LINUX))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_SOLARIS", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_SOLARIS))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_WIN32", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_WIN32))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_CDRDAO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_CDRDAO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_BINCUE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_BINCUE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_NRG", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_NRG))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_DEVICE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_DEVICE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_OP_SUCCESS", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_OP_SUCCESS))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_OP_ERROR", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_OP_ERROR))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_OP_UNSUPPORTED", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_OP_UNSUPPORTED))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_OP_UNINIT", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_OP_UNINIT))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_OP_NOT_PERMITTED", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_OP_NOT_PERMITTED))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_OP_BAD_PARAMETER", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_OP_BAD_PARAMETER))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_OP_BAD_POINTER", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_OP_BAD_POINTER))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DRIVER_OP_NO_DRIVER", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(DRIVER_OP_NO_DRIVER))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_AUDIO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_AUDIO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_HIGH_SIERRA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_HIGH_SIERRA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ISO_9660", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ISO_9660))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_INTERACTIVE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_INTERACTIVE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_HFS", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_HFS))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_UFS", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_UFS))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_EXT2", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_EXT2))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ISO_HFS", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ISO_HFS))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ISO_9660_INTERACTIVE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ISO_9660_INTERACTIVE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_3DO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_3DO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_XISO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_XISO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_UDFX", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_UDFX))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_UDF", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_UDF))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ISO_UDF", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ISO_UDF))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ANAL_XA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ANAL_XA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ANAL_MULTISESSION", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ANAL_MULTISESSION))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ANAL_PHOTO_CD", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ANAL_PHOTO_CD))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ANAL_HIDDEN_TRACK", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ANAL_HIDDEN_TRACK))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ANAL_CDTV", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ANAL_CDTV))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ANAL_BOOTABLE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ANAL_BOOTABLE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ANAL_VIDEOCD", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ANAL_VIDEOCD))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ANAL_ROCKRIDGE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ANAL_ROCKRIDGE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ANAL_JOLIET", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ANAL_JOLIET))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ANAL_SVCD", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ANAL_SVCD))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ANAL_CVD", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ANAL_CVD))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_ANAL_XISO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_ANAL_XISO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_MATCH_ALL", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_MATCH_ALL))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FS_UNKNOWN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_unsigned_SS_int SWIG_PERL_CALL_ARGS_1((unsigned int)(CDIO_FS_UNKNOWN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DISC_MODE_CD_DA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DISC_MODE_CD_DA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DISC_MODE_CD_DATA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DISC_MODE_CD_DATA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DISC_MODE_CD_XA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DISC_MODE_CD_XA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DISC_MODE_CD_MIXED", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DISC_MODE_CD_MIXED))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DISC_MODE_DVD_ROM", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DISC_MODE_DVD_ROM))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DISC_MODE_DVD_RAM", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DISC_MODE_DVD_RAM))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DISC_MODE_DVD_R", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DISC_MODE_DVD_R))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DISC_MODE_DVD_RW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DISC_MODE_DVD_RW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DISC_MODE_DVD_PR", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DISC_MODE_DVD_PR))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DISC_MODE_DVD_PRW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DISC_MODE_DVD_PRW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DISC_MODE_DVD_OTHER", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DISC_MODE_DVD_OTHER))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DISC_MODE_NO_INFO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DISC_MODE_NO_INFO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DISC_MODE_ERROR", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DISC_MODE_ERROR))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "DISC_MODE_CD_I", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_DISC_MODE_CD_I))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; ST(0) = &PL_sv_yes; XSRETURN(1); } Device-Cdio-v2.0.0/perlmmc_wrap.c000444001750001750 35530213222226267 16460 0ustar00rockyrocky000000000000/* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). * Version 3.0.10 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make * changes to this file unless you know what you are doing--modify the SWIG * interface file instead. * ----------------------------------------------------------------------------- */ #ifndef SWIGPERL #define SWIGPERL #endif #define SWIG_CASTRANK_MODE /* ----------------------------------------------------------------------------- * This section contains generic SWIG labels for method/variable * declarations/attributes, and other compiler dependent labels. * ----------------------------------------------------------------------------- */ /* template workaround for compilers that cannot correctly implement the C++ standard */ #ifndef SWIGTEMPLATEDISAMBIGUATOR # if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) # define SWIGTEMPLATEDISAMBIGUATOR template # elif defined(__HP_aCC) /* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ /* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ # define SWIGTEMPLATEDISAMBIGUATOR template # else # define SWIGTEMPLATEDISAMBIGUATOR # endif #endif /* inline attribute */ #ifndef SWIGINLINE # if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) # define SWIGINLINE inline # else # define SWIGINLINE # endif #endif /* attribute recognised by some compilers to avoid 'unused' warnings */ #ifndef SWIGUNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) # define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif # elif defined(__ICC) # define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif #endif #ifndef SWIG_MSC_UNSUPPRESS_4505 # if defined(_MSC_VER) # pragma warning(disable : 4505) /* unreferenced local function has been removed */ # endif #endif #ifndef SWIGUNUSEDPARM # ifdef __cplusplus # define SWIGUNUSEDPARM(p) # else # define SWIGUNUSEDPARM(p) p SWIGUNUSED # endif #endif /* internal SWIG method */ #ifndef SWIGINTERN # define SWIGINTERN static SWIGUNUSED #endif /* internal inline SWIG method */ #ifndef SWIGINTERNINLINE # define SWIGINTERNINLINE SWIGINTERN SWIGINLINE #endif /* exporting methods */ #if defined(__GNUC__) # if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) # ifndef GCC_HASCLASSVISIBILITY # define GCC_HASCLASSVISIBILITY # endif # endif #endif #ifndef SWIGEXPORT # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) # if defined(STATIC_LINKED) # define SWIGEXPORT # else # define SWIGEXPORT __declspec(dllexport) # endif # else # if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) # define SWIGEXPORT __attribute__ ((visibility("default"))) # else # define SWIGEXPORT # endif # endif #endif /* calling conventions for Windows */ #ifndef SWIGSTDCALL # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) # define SWIGSTDCALL __stdcall # else # define SWIGSTDCALL # endif #endif /* Deal with Microsoft's attempt at deprecating C standard runtime functions */ #if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) # define _CRT_SECURE_NO_DEPRECATE #endif /* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ #if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) # define _SCL_SECURE_NO_DEPRECATE #endif /* Deal with Apple's deprecated 'AssertMacros.h' from Carbon-framework */ #if defined(__APPLE__) && !defined(__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES) # define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0 #endif /* Intel's compiler complains if a variable which was never initialised is * cast to void, which is a common idiom which we use to indicate that we * are aware a variable isn't used. So we just silence that warning. * See: https://github.com/swig/swig/issues/192 for more discussion. */ #ifdef __INTEL_COMPILER # pragma warning disable 592 #endif /* ----------------------------------------------------------------------------- * swigrun.swg * * This file contains generic C API SWIG runtime support for pointer * type checking. * ----------------------------------------------------------------------------- */ /* This should only be incremented when either the layout of swig_type_info changes, or for whatever reason, the runtime changes incompatibly */ #define SWIG_RUNTIME_VERSION "4" /* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ #ifdef SWIG_TYPE_TABLE # define SWIG_QUOTE_STRING(x) #x # define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) # define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) #else # define SWIG_TYPE_TABLE_NAME #endif /* You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for creating a static or dynamic library from the SWIG runtime code. In 99.9% of the cases, SWIG just needs to declare them as 'static'. But only do this if strictly necessary, ie, if you have problems with your compiler or suchlike. */ #ifndef SWIGRUNTIME # define SWIGRUNTIME SWIGINTERN #endif #ifndef SWIGRUNTIMEINLINE # define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE #endif /* Generic buffer size */ #ifndef SWIG_BUFFER_SIZE # define SWIG_BUFFER_SIZE 1024 #endif /* Flags for pointer conversions */ #define SWIG_POINTER_DISOWN 0x1 #define SWIG_CAST_NEW_MEMORY 0x2 /* Flags for new pointer objects */ #define SWIG_POINTER_OWN 0x1 /* Flags/methods for returning states. The SWIG conversion methods, as ConvertPtr, return an integer that tells if the conversion was successful or not. And if not, an error code can be returned (see swigerrors.swg for the codes). Use the following macros/flags to set or process the returning states. In old versions of SWIG, code such as the following was usually written: if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { // success code } else { //fail code } Now you can be more explicit: int res = SWIG_ConvertPtr(obj,vptr,ty.flags); if (SWIG_IsOK(res)) { // success code } else { // fail code } which is the same really, but now you can also do Type *ptr; int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); if (SWIG_IsOK(res)) { // success code if (SWIG_IsNewObj(res) { ... delete *ptr; } else { ... } } else { // fail code } I.e., now SWIG_ConvertPtr can return new objects and you can identify the case and take care of the deallocation. Of course that also requires SWIG_ConvertPtr to return new result values, such as int SWIG_ConvertPtr(obj, ptr,...) { if () { if () { *ptr = ; return SWIG_NEWOBJ; } else { *ptr = ; return SWIG_OLDOBJ; } } else { return SWIG_BADOBJ; } } Of course, returning the plain '0(success)/-1(fail)' still works, but you can be more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the SWIG errors code. Finally, if the SWIG_CASTRANK_MODE is enabled, the result code allows to return the 'cast rank', for example, if you have this int food(double) int fooi(int); and you call food(1) // cast rank '1' (1 -> 1.0) fooi(1) // cast rank '0' just use the SWIG_AddCast()/SWIG_CheckState() */ #define SWIG_OK (0) #define SWIG_ERROR (-1) #define SWIG_IsOK(r) (r >= 0) #define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) /* The CastRankLimit says how many bits are used for the cast rank */ #define SWIG_CASTRANKLIMIT (1 << 8) /* The NewMask denotes the object was created (using new/malloc) */ #define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1) /* The TmpMask is for in/out typemaps that use temporal objects */ #define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1) /* Simple returning values */ #define SWIG_BADOBJ (SWIG_ERROR) #define SWIG_OLDOBJ (SWIG_OK) #define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK) #define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK) /* Check, add and del mask methods */ #define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r) #define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r) #define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK)) #define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r) #define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) #define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) /* Cast-Rank Mode */ #if defined(SWIG_CASTRANK_MODE) # ifndef SWIG_TypeRank # define SWIG_TypeRank unsigned long # endif # ifndef SWIG_MAXCASTRANK /* Default cast allowed */ # define SWIG_MAXCASTRANK (2) # endif # define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) # define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) SWIGINTERNINLINE int SWIG_AddCast(int r) { return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; } SWIGINTERNINLINE int SWIG_CheckState(int r) { return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; } #else /* no cast-rank mode */ # define SWIG_AddCast(r) (r) # define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) #endif #include #ifdef __cplusplus extern "C" { #endif typedef void *(*swig_converter_func)(void *, int *); typedef struct swig_type_info *(*swig_dycast_func)(void **); /* Structure to store information on one type */ typedef struct swig_type_info { const char *name; /* mangled name of this type */ const char *str; /* human readable name of this type */ swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ struct swig_cast_info *cast; /* linked list of types that can cast into this type */ void *clientdata; /* language specific type data */ int owndata; /* flag if the structure owns the clientdata */ } swig_type_info; /* Structure to store a type and conversion function used for casting */ typedef struct swig_cast_info { swig_type_info *type; /* pointer to type that is equivalent to this type */ swig_converter_func converter; /* function to cast the void pointers */ struct swig_cast_info *next; /* pointer to next cast in linked list */ struct swig_cast_info *prev; /* pointer to the previous cast */ } swig_cast_info; /* Structure used to store module information * Each module generates one structure like this, and the runtime collects * all of these structures and stores them in a circularly linked list.*/ typedef struct swig_module_info { swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ size_t size; /* Number of types in this module */ struct swig_module_info *next; /* Pointer to next element in circularly linked list */ swig_type_info **type_initial; /* Array of initially generated type structures */ swig_cast_info **cast_initial; /* Array of initially generated casting structures */ void *clientdata; /* Language specific module data */ } swig_module_info; /* Compare two type names skipping the space characters, therefore "char*" == "char *" and "Class" == "Class", etc. Return 0 when the two name types are equivalent, as in strncmp, but skipping ' '. */ SWIGRUNTIME int SWIG_TypeNameComp(const char *f1, const char *l1, const char *f2, const char *l2) { for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { while ((*f1 == ' ') && (f1 != l1)) ++f1; while ((*f2 == ' ') && (f2 != l2)) ++f2; if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; } return (int)((l1 - f1) - (l2 - f2)); } /* Check type equivalence in a name list like ||... Return 0 if equal, -1 if nb < tb, 1 if nb > tb */ SWIGRUNTIME int SWIG_TypeCmp(const char *nb, const char *tb) { int equiv = 1; const char* te = tb + strlen(tb); const char* ne = nb; while (equiv != 0 && *ne) { for (nb = ne; *ne; ++ne) { if (*ne == '|') break; } equiv = SWIG_TypeNameComp(nb, ne, tb, te); if (*ne) ++ne; } return equiv; } /* Check type equivalence in a name list like ||... Return 0 if not equal, 1 if equal */ SWIGRUNTIME int SWIG_TypeEquiv(const char *nb, const char *tb) { return SWIG_TypeCmp(nb, tb) == 0 ? 1 : 0; } /* Check the typename */ SWIGRUNTIME swig_cast_info * SWIG_TypeCheck(const char *c, swig_type_info *ty) { if (ty) { swig_cast_info *iter = ty->cast; while (iter) { if (strcmp(iter->type->name, c) == 0) { if (iter == ty->cast) return iter; /* Move iter to the top of the linked list */ iter->prev->next = iter->next; if (iter->next) iter->next->prev = iter->prev; iter->next = ty->cast; iter->prev = 0; if (ty->cast) ty->cast->prev = iter; ty->cast = iter; return iter; } iter = iter->next; } } return 0; } /* Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison */ SWIGRUNTIME swig_cast_info * SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) { if (ty) { swig_cast_info *iter = ty->cast; while (iter) { if (iter->type == from) { if (iter == ty->cast) return iter; /* Move iter to the top of the linked list */ iter->prev->next = iter->next; if (iter->next) iter->next->prev = iter->prev; iter->next = ty->cast; iter->prev = 0; if (ty->cast) ty->cast->prev = iter; ty->cast = iter; return iter; } iter = iter->next; } } return 0; } /* Cast a pointer up an inheritance hierarchy */ SWIGRUNTIMEINLINE void * SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); } /* Dynamic pointer casting. Down an inheritance hierarchy */ SWIGRUNTIME swig_type_info * SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { swig_type_info *lastty = ty; if (!ty || !ty->dcast) return ty; while (ty && (ty->dcast)) { ty = (*ty->dcast)(ptr); if (ty) lastty = ty; } return lastty; } /* Return the name associated with this type */ SWIGRUNTIMEINLINE const char * SWIG_TypeName(const swig_type_info *ty) { return ty->name; } /* Return the pretty name associated with this type, that is an unmangled type name in a form presentable to the user. */ SWIGRUNTIME const char * SWIG_TypePrettyName(const swig_type_info *type) { /* The "str" field contains the equivalent pretty names of the type, separated by vertical-bar characters. We choose to print the last name, as it is often (?) the most specific. */ if (!type) return NULL; if (type->str != NULL) { const char *last_name = type->str; const char *s; for (s = type->str; *s; s++) if (*s == '|') last_name = s+1; return last_name; } else return type->name; } /* Set the clientdata field for a type */ SWIGRUNTIME void SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { swig_cast_info *cast = ti->cast; /* if (ti->clientdata == clientdata) return; */ ti->clientdata = clientdata; while (cast) { if (!cast->converter) { swig_type_info *tc = cast->type; if (!tc->clientdata) { SWIG_TypeClientData(tc, clientdata); } } cast = cast->next; } } SWIGRUNTIME void SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { SWIG_TypeClientData(ti, clientdata); ti->owndata = 1; } /* Search for a swig_type_info structure only by mangled name Search is a O(log #types) We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * SWIG_MangledTypeQueryModule(swig_module_info *start, swig_module_info *end, const char *name) { swig_module_info *iter = start; do { if (iter->size) { size_t l = 0; size_t r = iter->size - 1; do { /* since l+r >= 0, we can (>> 1) instead (/ 2) */ size_t i = (l + r) >> 1; const char *iname = iter->types[i]->name; if (iname) { int compare = strcmp(name, iname); if (compare == 0) { return iter->types[i]; } else if (compare < 0) { if (i) { r = i - 1; } else { break; } } else if (compare > 0) { l = i + 1; } } else { break; /* should never happen */ } } while (l <= r); } iter = iter->next; } while (iter != end); return 0; } /* Search for a swig_type_info structure for either a mangled name or a human readable name. It first searches the mangled names of the types, which is a O(log #types) If a type is not found it then searches the human readable names, which is O(#types). We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * SWIG_TypeQueryModule(swig_module_info *start, swig_module_info *end, const char *name) { /* STEP 1: Search the name field using binary search */ swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); if (ret) { return ret; } else { /* STEP 2: If the type hasn't been found, do a complete search of the str field (the human readable name) */ swig_module_info *iter = start; do { size_t i = 0; for (; i < iter->size; ++i) { if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) return iter->types[i]; } iter = iter->next; } while (iter != end); } /* neither found a match */ return 0; } /* Pack binary data into a string */ SWIGRUNTIME char * SWIG_PackData(char *c, void *ptr, size_t sz) { static const char hex[17] = "0123456789abcdef"; const unsigned char *u = (unsigned char *) ptr; const unsigned char *eu = u + sz; for (; u != eu; ++u) { unsigned char uu = *u; *(c++) = hex[(uu & 0xf0) >> 4]; *(c++) = hex[uu & 0xf]; } return c; } /* Unpack binary data from a string */ SWIGRUNTIME const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) { unsigned char *u = (unsigned char *) ptr; const unsigned char *eu = u + sz; for (; u != eu; ++u) { char d = *(c++); unsigned char uu; if ((d >= '0') && (d <= '9')) uu = (unsigned char)((d - '0') << 4); else if ((d >= 'a') && (d <= 'f')) uu = (unsigned char)((d - ('a'-10)) << 4); else return (char *) 0; d = *(c++); if ((d >= '0') && (d <= '9')) uu |= (unsigned char)(d - '0'); else if ((d >= 'a') && (d <= 'f')) uu |= (unsigned char)(d - ('a'-10)); else return (char *) 0; *u = uu; } return c; } /* Pack 'void *' into a string buffer. */ SWIGRUNTIME char * SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { char *r = buff; if ((2*sizeof(void *) + 2) > bsz) return 0; *(r++) = '_'; r = SWIG_PackData(r,&ptr,sizeof(void *)); if (strlen(name) + 1 > (bsz - (r - buff))) return 0; strcpy(r,name); return buff; } SWIGRUNTIME const char * SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { if (*c != '_') { if (strcmp(c,"NULL") == 0) { *ptr = (void *) 0; return name; } else { return 0; } } return SWIG_UnpackData(++c,ptr,sizeof(void *)); } SWIGRUNTIME char * SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { char *r = buff; size_t lname = (name ? strlen(name) : 0); if ((2*sz + 2 + lname) > bsz) return 0; *(r++) = '_'; r = SWIG_PackData(r,ptr,sz); if (lname) { strncpy(r,name,lname+1); } else { *r = 0; } return buff; } SWIGRUNTIME const char * SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { if (*c != '_') { if (strcmp(c,"NULL") == 0) { memset(ptr,0,sz); return name; } else { return 0; } } return SWIG_UnpackData(++c,ptr,sz); } #ifdef __cplusplus } #endif /* Errors in SWIG */ #define SWIG_UnknownError -1 #define SWIG_IOError -2 #define SWIG_RuntimeError -3 #define SWIG_IndexError -4 #define SWIG_TypeError -5 #define SWIG_DivisionByZero -6 #define SWIG_OverflowError -7 #define SWIG_SyntaxError -8 #define SWIG_ValueError -9 #define SWIG_SystemError -10 #define SWIG_AttributeError -11 #define SWIG_MemoryError -12 #define SWIG_NullReferenceError -13 #ifdef __cplusplus /* Needed on some windows machines---since MS plays funny games with the header files under C++ */ #include #include extern "C" { #endif #include "EXTERN.h" #include "perl.h" #include "XSUB.h" /* Add in functionality missing in older versions of Perl. Much of this is based on Devel-PPPort on cpan. */ /* Add PERL_REVISION, PERL_VERSION, PERL_SUBVERSION if missing */ #ifndef PERL_REVISION # if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION)) # define PERL_PATCHLEVEL_H_IMPLICIT # include # endif # if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL))) # include # endif # ifndef PERL_REVISION # define PERL_REVISION (5) # define PERL_VERSION PATCHLEVEL # define PERL_SUBVERSION SUBVERSION # endif #endif #if defined(WIN32) && defined(PERL_OBJECT) && !defined(PerlIO_exportFILE) #define PerlIO_exportFILE(fh,fl) (FILE*)(fh) #endif #ifndef SvIOK_UV # define SvIOK_UV(sv) (SvIOK(sv) && (SvUVX(sv) == SvIVX(sv))) #endif #ifndef SvUOK # define SvUOK(sv) SvIOK_UV(sv) #endif #if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5))) # define PL_sv_undef sv_undef # define PL_na na # define PL_errgv errgv # define PL_sv_no sv_no # define PL_sv_yes sv_yes # define PL_markstack_ptr markstack_ptr #endif #ifndef IVSIZE # ifdef LONGSIZE # define IVSIZE LONGSIZE # else # define IVSIZE 4 /* A bold guess, but the best we can make. */ # endif #endif #ifndef INT2PTR # if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) # define PTRV UV # define INT2PTR(any,d) (any)(d) # else # if PTRSIZE == LONGSIZE # define PTRV unsigned long # else # define PTRV unsigned # endif # define INT2PTR(any,d) (any)(PTRV)(d) # endif # define NUM2PTR(any,d) (any)(PTRV)(d) # define PTR2IV(p) INT2PTR(IV,p) # define PTR2UV(p) INT2PTR(UV,p) # define PTR2NV(p) NUM2PTR(NV,p) # if PTRSIZE == LONGSIZE # define PTR2ul(p) (unsigned long)(p) # else # define PTR2ul(p) INT2PTR(unsigned long,p) # endif #endif /* !INT2PTR */ #ifndef SvPV_nolen # define SvPV_nolen(x) SvPV(x,PL_na) #endif #ifndef get_sv # define get_sv perl_get_sv #endif #ifndef ERRSV # define ERRSV get_sv("@",FALSE) #endif #ifndef pTHX_ #define pTHX_ #endif #include #ifdef __cplusplus } #endif /* ----------------------------------------------------------------------------- * error manipulation * ----------------------------------------------------------------------------- */ SWIGINTERN const char* SWIG_Perl_ErrorType(int code) { switch(code) { case SWIG_MemoryError: return "MemoryError"; case SWIG_IOError: return "IOError"; case SWIG_RuntimeError: return "RuntimeError"; case SWIG_IndexError: return "IndexError"; case SWIG_TypeError: return "TypeError"; case SWIG_DivisionByZero: return "ZeroDivisionError"; case SWIG_OverflowError: return "OverflowError"; case SWIG_SyntaxError: return "SyntaxError"; case SWIG_ValueError: return "ValueError"; case SWIG_SystemError: return "SystemError"; case SWIG_AttributeError: return "AttributeError"; default: return "RuntimeError"; } } /* ----------------------------------------------------------------------------- * perlrun.swg * * This file contains the runtime support for Perl modules * and includes code for managing global variables and pointer * type checking. * ----------------------------------------------------------------------------- */ #ifdef PERL_OBJECT #define SWIG_PERL_OBJECT_DECL CPerlObj *SWIGUNUSEDPARM(pPerl), #define SWIG_PERL_OBJECT_CALL pPerl, #else #define SWIG_PERL_OBJECT_DECL #define SWIG_PERL_OBJECT_CALL #endif /* Common SWIG API */ /* for raw pointers */ #define SWIG_ConvertPtr(obj, pp, type, flags) SWIG_Perl_ConvertPtr(SWIG_PERL_OBJECT_CALL obj, pp, type, flags) #define SWIG_ConvertPtrAndOwn(obj, pp, type, flags,own) SWIG_Perl_ConvertPtrAndOwn(SWIG_PERL_OBJECT_CALL obj, pp, type, flags, own) #define SWIG_NewPointerObj(p, type, flags) SWIG_Perl_NewPointerObj(SWIG_PERL_OBJECT_CALL p, type, flags) #define swig_owntype int /* for raw packed data */ #define SWIG_ConvertPacked(obj, p, s, type) SWIG_Perl_ConvertPacked(SWIG_PERL_OBJECT_CALL obj, p, s, type) #define SWIG_NewPackedObj(p, s, type) SWIG_Perl_NewPackedObj(SWIG_PERL_OBJECT_CALL p, s, type) /* for class or struct pointers */ #define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags) #define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags) /* for C or C++ function pointers */ #define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_ConvertPtr(obj, pptr, type, 0) #define SWIG_NewFunctionPtrObj(ptr, type) SWIG_NewPointerObj(ptr, type, 0) /* for C++ member pointers, ie, member methods */ #define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_ConvertPacked(obj, ptr, sz, ty) #define SWIG_NewMemberObj(ptr, sz, type) SWIG_NewPackedObj(ptr, sz, type) /* Runtime API */ #define SWIG_GetModule(clientdata) SWIG_Perl_GetModule(clientdata) #define SWIG_SetModule(clientdata, pointer) SWIG_Perl_SetModule(pointer) /* Error manipulation */ #define SWIG_ErrorType(code) SWIG_Perl_ErrorType(code) #define SWIG_Error(code, msg) sv_setpvf(get_sv("@", GV_ADD), "%s %s", SWIG_ErrorType(code), msg) #define SWIG_fail goto fail /* Perl-specific SWIG API */ #define SWIG_MakePtr(sv, ptr, type, flags) SWIG_Perl_MakePtr(SWIG_PERL_OBJECT_CALL sv, ptr, type, flags) #define SWIG_MakePackedObj(sv, p, s, type) SWIG_Perl_MakePackedObj(SWIG_PERL_OBJECT_CALL sv, p, s, type) #define SWIG_SetError(str) SWIG_Error(SWIG_RuntimeError, str) #define SWIG_PERL_DECL_ARGS_1(arg1) (SWIG_PERL_OBJECT_DECL arg1) #define SWIG_PERL_CALL_ARGS_1(arg1) (SWIG_PERL_OBJECT_CALL arg1) #define SWIG_PERL_DECL_ARGS_2(arg1, arg2) (SWIG_PERL_OBJECT_DECL arg1, arg2) #define SWIG_PERL_CALL_ARGS_2(arg1, arg2) (SWIG_PERL_OBJECT_CALL arg1, arg2) /* ----------------------------------------------------------------------------- * pointers/data manipulation * ----------------------------------------------------------------------------- */ /* For backward compatibility only */ #define SWIG_POINTER_EXCEPTION 0 #ifdef __cplusplus extern "C" { #endif #define SWIG_OWNER SWIG_POINTER_OWN #define SWIG_SHADOW SWIG_OWNER << 1 #define SWIG_MAYBE_PERL_OBJECT SWIG_PERL_OBJECT_DECL /* SWIG Perl macros */ /* Macro to declare an XS function */ #ifndef XSPROTO # define XSPROTO(name) void name(pTHX_ CV* cv) #endif /* Macro to call an XS function */ #ifdef PERL_OBJECT # define SWIG_CALLXS(_name) _name(cv,pPerl) #else # ifndef MULTIPLICITY # define SWIG_CALLXS(_name) _name(cv) # else # define SWIG_CALLXS(_name) _name(PERL_GET_THX, cv) # endif #endif #ifdef PERL_OBJECT #define MAGIC_PPERL CPerlObj *pPerl = (CPerlObj *) this; #ifdef __cplusplus extern "C" { #endif typedef int (CPerlObj::*SwigMagicFunc)(SV *, MAGIC *); #ifdef __cplusplus } #endif #define SWIG_MAGIC(a,b) (SV *a, MAGIC *b) #define SWIGCLASS_STATIC #else /* PERL_OBJECT */ #define MAGIC_PPERL #define SWIGCLASS_STATIC static SWIGUNUSED #ifndef MULTIPLICITY #define SWIG_MAGIC(a,b) (SV *a, MAGIC *b) #ifdef __cplusplus extern "C" { #endif typedef int (*SwigMagicFunc)(SV *, MAGIC *); #ifdef __cplusplus } #endif #else /* MULTIPLICITY */ #define SWIG_MAGIC(a,b) (struct interpreter *interp, SV *a, MAGIC *b) #ifdef __cplusplus extern "C" { #endif typedef int (*SwigMagicFunc)(struct interpreter *, SV *, MAGIC *); #ifdef __cplusplus } #endif #endif /* MULTIPLICITY */ #endif /* PERL_OBJECT */ # ifdef PERL_OBJECT # define SWIG_croak_null() SWIG_Perl_croak_null(pPerl) static void SWIGUNUSED SWIG_Perl_croak_null(CPerlObj *pPerl) # else static void SWIGUNUSED SWIG_croak_null() # endif { SV *err = get_sv("@", GV_ADD); # if (PERL_VERSION < 6) croak("%_", err); # else if (sv_isobject(err)) croak(0); else croak("%s", SvPV_nolen(err)); # endif } /* Define how strict is the cast between strings and integers/doubles when overloading between these types occurs. The default is making it as strict as possible by using SWIG_AddCast when needed. You can use -DSWIG_PERL_NO_STRICT_STR2NUM at compilation time to disable the SWIG_AddCast, making the casting between string and numbers less strict. In the end, we try to solve the overloading between strings and numerical types in the more natural way, but if you can avoid it, well, avoid it using %rename, for example. */ #ifndef SWIG_PERL_NO_STRICT_STR2NUM # ifndef SWIG_PERL_STRICT_STR2NUM # define SWIG_PERL_STRICT_STR2NUM # endif #endif #ifdef SWIG_PERL_STRICT_STR2NUM /* string takes precedence */ #define SWIG_Str2NumCast(x) SWIG_AddCast(x) #else /* number takes precedence */ #define SWIG_Str2NumCast(x) x #endif #include SWIGRUNTIME const char * SWIG_Perl_TypeProxyName(const swig_type_info *type) { if (!type) return NULL; if (type->clientdata != NULL) { return (const char*) type->clientdata; } else { return type->name; } } /* Identical to SWIG_TypeCheck, except for strcmp comparison */ SWIGRUNTIME swig_cast_info * SWIG_TypeProxyCheck(const char *c, swig_type_info *ty) { if (ty) { swig_cast_info *iter = ty->cast; while (iter) { if (strcmp(SWIG_Perl_TypeProxyName(iter->type), c) == 0) { if (iter == ty->cast) return iter; /* Move iter to the top of the linked list */ iter->prev->next = iter->next; if (iter->next) iter->next->prev = iter->prev; iter->next = ty->cast; iter->prev = 0; if (ty->cast) ty->cast->prev = iter; ty->cast = iter; return iter; } iter = iter->next; } } return 0; } /* Function for getting a pointer value */ SWIGRUNTIME int SWIG_Perl_ConvertPtrAndOwn(SWIG_MAYBE_PERL_OBJECT SV *sv, void **ptr, swig_type_info *_t, int flags, int *own) { swig_cast_info *tc; void *voidptr = (void *)0; SV *tsv = 0; if (own) *own = 0; /* If magical, apply more magic */ if (SvGMAGICAL(sv)) mg_get(sv); /* Check to see if this is an object */ if (sv_isobject(sv)) { IV tmp = 0; tsv = (SV*) SvRV(sv); if ((SvTYPE(tsv) == SVt_PVHV)) { MAGIC *mg; if (SvMAGICAL(tsv)) { mg = mg_find(tsv,'P'); if (mg) { sv = mg->mg_obj; if (sv_isobject(sv)) { tsv = (SV*)SvRV(sv); tmp = SvIV(tsv); } } } else { return SWIG_ERROR; } } else { tmp = SvIV(tsv); } voidptr = INT2PTR(void *,tmp); } else if (! SvOK(sv)) { /* Check for undef */ *(ptr) = (void *) 0; return SWIG_OK; } else if (SvTYPE(sv) == SVt_RV) { /* Check for NULL pointer */ if (!SvROK(sv)) { /* In Perl 5.12 and later, SVt_RV == SVt_IV, so sv could be a valid integer value. */ if (SvIOK(sv)) { return SWIG_ERROR; } else { /* NULL pointer (reference to undef). */ *(ptr) = (void *) 0; return SWIG_OK; } } else { return SWIG_ERROR; } } else { /* Don't know what it is */ return SWIG_ERROR; } if (_t) { /* Now see if the types match */ char *_c = HvNAME(SvSTASH(SvRV(sv))); tc = SWIG_TypeProxyCheck(_c,_t); #ifdef SWIG_DIRECTORS if (!tc && !sv_derived_from(sv,SWIG_Perl_TypeProxyName(_t))) { #else if (!tc) { #endif return SWIG_ERROR; } { int newmemory = 0; *ptr = SWIG_TypeCast(tc,voidptr,&newmemory); if (newmemory == SWIG_CAST_NEW_MEMORY) { assert(own); /* badly formed typemap which will lead to a memory leak - it must set and use own to delete *ptr */ if (own) *own = *own | SWIG_CAST_NEW_MEMORY; } } } else { *ptr = voidptr; } /* * DISOWN implementation: we need a perl guru to check this one. */ if (tsv && (flags & SWIG_POINTER_DISOWN)) { /* * almost copy paste code from below SWIG_POINTER_OWN setting */ SV *obj = sv; HV *stash = SvSTASH(SvRV(obj)); GV *gv = *(GV**)hv_fetch(stash, "OWNER", 5, TRUE); if (isGV(gv)) { HV *hv = GvHVn(gv); /* * To set ownership (see below), a newSViv(1) entry is added. * Hence, to remove ownership, we delete the entry. */ if (hv_exists_ent(hv, obj, 0)) { hv_delete_ent(hv, obj, 0, 0); } } } return SWIG_OK; } SWIGRUNTIME int SWIG_Perl_ConvertPtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void **ptr, swig_type_info *_t, int flags) { return SWIG_Perl_ConvertPtrAndOwn(sv, ptr, _t, flags, 0); } SWIGRUNTIME void SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, int flags) { if (ptr && (flags & (SWIG_SHADOW | SWIG_POINTER_OWN))) { SV *self; SV *obj=newSV(0); HV *hash=newHV(); HV *stash; sv_setref_pv(obj, SWIG_Perl_TypeProxyName(t), ptr); stash=SvSTASH(SvRV(obj)); if (flags & SWIG_POINTER_OWN) { HV *hv; GV *gv = *(GV**)hv_fetch(stash, "OWNER", 5, TRUE); if (!isGV(gv)) gv_init(gv, stash, "OWNER", 5, FALSE); hv=GvHVn(gv); hv_store_ent(hv, obj, newSViv(1), 0); } sv_magic((SV *)hash, (SV *)obj, 'P', Nullch, 0); SvREFCNT_dec(obj); self=newRV_noinc((SV *)hash); sv_setsv(sv, self); SvREFCNT_dec((SV *)self); sv_bless(sv, stash); } else { sv_setref_pv(sv, SWIG_Perl_TypeProxyName(t), ptr); } } SWIGRUNTIMEINLINE SV * SWIG_Perl_NewPointerObj(SWIG_MAYBE_PERL_OBJECT void *ptr, swig_type_info *t, int flags) { SV *result = sv_newmortal(); SWIG_MakePtr(result, ptr, t, flags); return result; } SWIGRUNTIME void SWIG_Perl_MakePackedObj(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, int sz, swig_type_info *type) { char result[1024]; char *r = result; if ((2*sz + 1 + strlen(SWIG_Perl_TypeProxyName(type))) > 1000) return; *(r++) = '_'; r = SWIG_PackData(r,ptr,sz); strcpy(r,SWIG_Perl_TypeProxyName(type)); sv_setpv(sv, result); } SWIGRUNTIME SV * SWIG_Perl_NewPackedObj(SWIG_MAYBE_PERL_OBJECT void *ptr, int sz, swig_type_info *type) { SV *result = sv_newmortal(); SWIG_Perl_MakePackedObj(result, ptr, sz, type); return result; } /* Convert a packed value value */ SWIGRUNTIME int SWIG_Perl_ConvertPacked(SWIG_MAYBE_PERL_OBJECT SV *obj, void *ptr, int sz, swig_type_info *ty) { swig_cast_info *tc; const char *c = 0; if ((!obj) || (!SvOK(obj))) return SWIG_ERROR; c = SvPV_nolen(obj); /* Pointer values must start with leading underscore */ if (*c != '_') return SWIG_ERROR; c++; c = SWIG_UnpackData(c,ptr,sz); if (ty) { tc = SWIG_TypeCheck(c,ty); if (!tc) return SWIG_ERROR; } return SWIG_OK; } /* Macros for low-level exception handling */ #define SWIG_croak(x) { SWIG_Error(SWIG_RuntimeError, x); SWIG_fail; } typedef XSPROTO(SwigPerlWrapper); typedef SwigPerlWrapper *SwigPerlWrapperPtr; /* Structure for command table */ typedef struct { const char *name; SwigPerlWrapperPtr wrapper; } swig_command_info; /* Information for constant table */ #define SWIG_INT 1 #define SWIG_FLOAT 2 #define SWIG_STRING 3 #define SWIG_POINTER 4 #define SWIG_BINARY 5 /* Constant information structure */ typedef struct swig_constant_info { int type; const char *name; long lvalue; double dvalue; void *pvalue; swig_type_info **ptype; } swig_constant_info; /* Structure for variable table */ typedef struct { const char *name; SwigMagicFunc set; SwigMagicFunc get; swig_type_info **type; } swig_variable_info; /* Magic variable code */ #ifndef PERL_OBJECT # ifdef __cplusplus # define swig_create_magic(s,a,b,c) _swig_create_magic(s,const_cast(a),b,c) # else # define swig_create_magic(s,a,b,c) _swig_create_magic(s,(char*)(a),b,c) # endif # ifndef MULTIPLICITY SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *)) # else SWIGRUNTIME void _swig_create_magic(SV *sv, char *name, int (*set)(struct interpreter*, SV *, MAGIC *), int (*get)(struct interpreter*, SV *,MAGIC *)) # endif #else # define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c) SWIGRUNTIME void _swig_create_magic(CPerlObj *pPerl, SV *sv, const char *name, int (CPerlObj::*set)(SV *, MAGIC *), int (CPerlObj::*get)(SV *, MAGIC *)) #endif { MAGIC *mg; sv_magic(sv,sv,'U',name,strlen(name)); mg = mg_find(sv,'U'); mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL)); mg->mg_virtual->svt_get = (SwigMagicFunc) get; mg->mg_virtual->svt_set = (SwigMagicFunc) set; mg->mg_virtual->svt_len = 0; mg->mg_virtual->svt_clear = 0; mg->mg_virtual->svt_free = 0; } SWIGRUNTIME swig_module_info * SWIG_Perl_GetModule(void *SWIGUNUSEDPARM(clientdata)) { static void *type_pointer = (void *)0; SV *pointer; /* first check if pointer already created */ if (!type_pointer) { pointer = get_sv("swig_runtime_data::type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, FALSE | GV_ADDMULTI); if (pointer && SvOK(pointer)) { type_pointer = INT2PTR(swig_type_info **, SvIV(pointer)); } } return (swig_module_info *) type_pointer; } SWIGRUNTIME void SWIG_Perl_SetModule(swig_module_info *module) { SV *pointer; /* create a new pointer */ pointer = get_sv("swig_runtime_data::type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, TRUE | GV_ADDMULTI); sv_setiv(pointer, PTR2IV(module)); } #ifdef __cplusplus } #endif /* Workaround perl5 global namespace pollution. Note that undefining library * functions like fopen will not solve the problem on all platforms as fopen * might be a macro on Windows but not necessarily on other operating systems. */ #ifdef do_open #undef do_open #endif #ifdef do_close #undef do_close #endif #ifdef do_exec #undef do_exec #endif #ifdef scalar #undef scalar #endif #ifdef list #undef list #endif #ifdef apply #undef apply #endif #ifdef convert #undef convert #endif #ifdef Error #undef Error #endif #ifdef form #undef form #endif #ifdef vform #undef vform #endif #ifdef LABEL #undef LABEL #endif #ifdef METHOD #undef METHOD #endif #ifdef Move #undef Move #endif #ifdef yylex #undef yylex #endif #ifdef yyparse #undef yyparse #endif #ifdef yyerror #undef yyerror #endif #ifdef invert #undef invert #endif #ifdef ref #undef ref #endif #ifdef read #undef read #endif #ifdef write #undef write #endif #ifdef eof #undef eof #endif #ifdef close #undef close #endif #ifdef rewind #undef rewind #endif #ifdef free #undef free #endif #ifdef malloc #undef malloc #endif #ifdef calloc #undef calloc #endif #ifdef Stat #undef Stat #endif #ifdef check #undef check #endif #ifdef seekdir #undef seekdir #endif #ifdef open #undef open #endif #ifdef readdir #undef readdir #endif #ifdef bind #undef bind #endif #ifdef access #undef access #endif #ifdef stat #undef stat #endif #ifdef seed #undef seed #endif #ifdef bool /* Leave if macro is from C99 stdbool.h */ #ifndef __bool_true_false_are_defined #undef bool #endif #endif #define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) #define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else /* -------- TYPES TABLE (BEGIN) -------- */ #define SWIGTYPE_p_CdIo_t swig_types[0] #define SWIGTYPE_p_char swig_types[1] #define SWIGTYPE_p_imaxdiv_t swig_types[2] #define SWIGTYPE_p_int swig_types[3] #define SWIGTYPE_p_long swig_types[4] #define SWIGTYPE_p_long_long swig_types[5] #define SWIGTYPE_p_p_char swig_types[6] #define SWIGTYPE_p_short swig_types[7] #define SWIGTYPE_p_signed_char swig_types[8] #define SWIGTYPE_p_unsigned_char swig_types[9] #define SWIGTYPE_p_unsigned_int swig_types[10] #define SWIGTYPE_p_unsigned_long_long swig_types[11] #define SWIGTYPE_p_unsigned_short swig_types[12] static swig_type_info *swig_types[14]; static swig_module_info swig_module = {swig_types, 13, 0, 0, 0, 0}; #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) /* -------- TYPES TABLE (END) -------- */ #define SWIG_init boot_perlmmc #define SWIG_name "perlmmcc::boot_perlmmc" #define SWIG_prefix "perlmmcc::" #define SWIGVERSION 0x030010 #define SWIG_VERSION SWIGVERSION #define SWIG_as_voidptr(a) (void *)((const void *)(a)) #define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),(void**)(a)) #ifdef __cplusplus extern "C" #endif #ifndef PERL_OBJECT #ifndef MULTIPLICITY SWIGEXPORT void SWIG_init (CV* cv); #else SWIGEXPORT void SWIG_init (pTHXo_ CV* cv); #endif #else SWIGEXPORT void SWIG_init (CV *cv, CPerlObj *); #endif /* Includes the header in the wrapper code */ #include #include #include #include // Use the C99 official header #include #if !defined(SWIG_NO_LLONG_MAX) # if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__) # define LLONG_MAX __LONG_LONG_MAX__ # define LLONG_MIN (-LLONG_MAX - 1LL) # define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) # endif #endif #if defined(LLONG_MAX) && !defined(SWIG_LONG_LONG_AVAILABLE) # define SWIG_LONG_LONG_AVAILABLE #endif #include #ifdef _MSC_VER # ifndef strtoull # define strtoull _strtoui64 # endif # ifndef strtoll # define strtoll _strtoi64 # endif #endif SWIGINTERN int SWIG_AsVal_double SWIG_PERL_DECL_ARGS_2(SV *obj, double *val) { if (SvNIOK(obj)) { if (val) *val = SvNV(obj); return SWIG_OK; } else if (SvIOK(obj)) { if (val) *val = (double) SvIV(obj); return SWIG_AddCast(SWIG_OK); } else { const char *nptr = SvPV_nolen(obj); if (nptr) { char *endptr; double v; errno = 0; v = strtod(nptr, &endptr); if (errno == ERANGE) { errno = 0; return SWIG_OverflowError; } else { if (*endptr == '\0') { if (val) *val = v; return SWIG_Str2NumCast(SWIG_OK); } } } } return SWIG_TypeError; } #include #include SWIGINTERNINLINE int SWIG_CanCastAsInteger(double *d, double min, double max) { double x = *d; if ((min <= x && x <= max)) { double fx = floor(x); double cx = ceil(x); double rd = ((x - fx) < 0.5) ? fx : cx; /* simple rint */ if ((errno == EDOM) || (errno == ERANGE)) { errno = 0; } else { double summ, reps, diff; if (rd < x) { diff = x - rd; } else if (rd > x) { diff = rd - x; } else { return 1; } summ = rd + x; reps = diff/summ; if (reps < 8*DBL_EPSILON) { *d = rd; return 1; } } } return 0; } #ifdef SWIG_LONG_LONG_AVAILABLE SWIGINTERN int SWIG_AsVal_long_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, long long *val) { if (SvUOK(obj)) { UV v = SvUV(obj); /* pretty sure this could allow v == LLONG MAX */ if (UVSIZE < sizeof(*val) || v < LLONG_MAX) { if (val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else if (SvIOK(obj)) { IV v = SvIV(obj); if (IVSIZE <= sizeof(*val) || (v >= LLONG_MIN && v <= LLONG_MAX)) { if (val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else { int dispatch = 0; const char *nptr = SvPV_nolen(obj); if (nptr) { char *endptr; long long v; errno = 0; v = strtoll(nptr, &endptr,0); if (errno == ERANGE) { errno = 0; return SWIG_OverflowError; } else { if (*endptr == '\0') { if (val) *val = v; return SWIG_Str2NumCast(SWIG_OK); } } } if (!dispatch) { const double mant_max = 1LL << DBL_MANT_DIG; const double mant_min = -mant_max; double d; int res = SWIG_AddCast(SWIG_AsVal_double SWIG_PERL_CALL_ARGS_2(obj,&d)); if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, mant_min, mant_max)) { if (val) *val = (long long)(d); return res; } } } return SWIG_TypeError; } #endif #include #if defined(_MSC_VER) || defined(__BORLANDC__) || defined(_WATCOM) # ifndef snprintf # define snprintf _snprintf # endif #endif #ifdef SWIG_LONG_LONG_AVAILABLE SWIGINTERNINLINE SV * SWIG_From_long_SS_long SWIG_PERL_DECL_ARGS_1(long long value) { SV *sv; if (IVSIZE >= sizeof(value) || (value >= IV_MIN && value <= IV_MAX)) sv = newSViv((IV)(value)); else { //sv = newSVpvf("%lld", value); doesn't work in non 64bit Perl char temp[256]; sprintf(temp, "%lld", value); sv = newSVpv(temp, 0); } return sv_2mortal(sv); } #endif SWIGINTERN swig_type_info* SWIG_pchar_descriptor(void) { static int init = 0; static swig_type_info* info = 0; if (!init) { info = SWIG_TypeQuery("_p_char"); init = 1; } return info; } SWIGINTERN int SWIG_AsCharPtrAndSize(SV *obj, char** cptr, size_t* psize, int *alloc) { if (SvMAGICAL(obj)) { SV *tmp = sv_newmortal(); SvSetSV(tmp, obj); obj = tmp; } if (SvPOK(obj)) { STRLEN len = 0; char *cstr = SvPV(obj, len); size_t size = len + 1; if (cptr) { if (alloc) { if (*alloc == SWIG_NEWOBJ) { *cptr = (char *)memcpy((char *)malloc((size)*sizeof(char)), cstr, sizeof(char)*(size)); } else { *cptr = cstr; *alloc = SWIG_OLDOBJ; } } } if (psize) *psize = size; return SWIG_OK; } else { swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); if (pchar_descriptor) { char* vptr = 0; if (SWIG_ConvertPtr(obj, (void**)&vptr, pchar_descriptor, 0) == SWIG_OK) { if (cptr) *cptr = vptr; if (psize) *psize = vptr ? (strlen(vptr) + 1) : 0; if (alloc) *alloc = SWIG_OLDOBJ; return SWIG_OK; } } } return SWIG_TypeError; } SWIGINTERN int SWIG_AsVal_long SWIG_PERL_DECL_ARGS_2(SV *obj, long* val) { if (SvUOK(obj)) { UV v = SvUV(obj); if (UVSIZE < sizeof(*val) || v <= LONG_MAX) { if (val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else if (SvIOK(obj)) { IV v = SvIV(obj); if (IVSIZE <= sizeof(*val) || (v >= LONG_MIN && v <= LONG_MAX)) { if(val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else { int dispatch = 0; const char *nptr = SvPV_nolen(obj); if (nptr) { char *endptr; long v; errno = 0; v = strtol(nptr, &endptr,0); if (errno == ERANGE) { errno = 0; return SWIG_OverflowError; } else { if (*endptr == '\0') { if (val) *val = v; return SWIG_Str2NumCast(SWIG_OK); } } } if (!dispatch) { double d; int res = SWIG_AddCast(SWIG_AsVal_double SWIG_PERL_CALL_ARGS_2(obj,&d)); if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, LONG_MIN, LONG_MAX)) { if (val) *val = (long)(d); return res; } } } return SWIG_TypeError; } SWIGINTERN int SWIG_AsVal_int SWIG_PERL_DECL_ARGS_2(SV * obj, int *val) { long v; int res = SWIG_AsVal_long SWIG_PERL_CALL_ARGS_2(obj, &v); if (SWIG_IsOK(res)) { if ((v < INT_MIN || v > INT_MAX)) { return SWIG_OverflowError; } else { if (val) *val = (int)(v); } } return res; } #ifdef SWIG_LONG_LONG_AVAILABLE SWIGINTERNINLINE SV * SWIG_From_unsigned_SS_long_SS_long SWIG_PERL_DECL_ARGS_1(unsigned long long value) { SV *sv; if (UVSIZE >= sizeof(value) || value <= UV_MAX) sv = newSVuv((UV)(value)); else { //sv = newSVpvf("%llu", value); doesn't work in non 64bit Perl char temp[256]; sprintf(temp, "%llu", value); sv = newSVpv(temp, 0); } return sv_2mortal(sv); } #endif SWIGINTERNINLINE SV * SWIG_From_long SWIG_PERL_DECL_ARGS_1(long value) { SV *sv; if (IVSIZE >= sizeof(value) || (value >= IV_MIN && value <= IV_MAX)) sv = newSViv(value); else sv = newSVpvf("%ld", value); return sv_2mortal(sv); } SWIGINTERNINLINE SV * SWIG_From_int SWIG_PERL_DECL_ARGS_1(int value) { return SWIG_From_long SWIG_PERL_CALL_ARGS_1(value); } extern int mmc_eject_media(const CdIo_t *p_cdio); SWIGINTERN int SWIG_AsVal_unsigned_SS_long SWIG_PERL_DECL_ARGS_2(SV *obj, unsigned long *val) { if (SvUOK(obj)) { UV v = SvUV(obj); if (UVSIZE <= sizeof(*val) || v <= ULONG_MAX) { if (val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else if (SvIOK(obj)) { IV v = SvIV(obj); if (v >= 0 && (IVSIZE <= sizeof(*val) || v <= ULONG_MAX)) { if (val) *val = v; return SWIG_OK; } return SWIG_OverflowError; } else { int dispatch = 0; const char *nptr = SvPV_nolen(obj); if (nptr) { char *endptr; unsigned long v; errno = 0; v = strtoul(nptr, &endptr,0); if (errno == ERANGE) { errno = 0; return SWIG_OverflowError; } else { if (*endptr == '\0') { if (val) *val = v; return SWIG_Str2NumCast(SWIG_OK); } } } if (!dispatch) { double d; int res = SWIG_AddCast(SWIG_AsVal_double SWIG_PERL_CALL_ARGS_2(obj,&d)); if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, ULONG_MAX)) { if (val) *val = (unsigned long)(d); return res; } } } return SWIG_TypeError; } SWIGINTERN int SWIG_AsVal_unsigned_SS_int SWIG_PERL_DECL_ARGS_2(SV * obj, unsigned int *val) { unsigned long v; int res = SWIG_AsVal_unsigned_SS_long SWIG_PERL_CALL_ARGS_2(obj, &v); if (SWIG_IsOK(res)) { if ((v > UINT_MAX)) { return SWIG_OverflowError; } else { if (val) *val = (unsigned int)(v); } } return res; } SWIGINTERNINLINE SV * SWIG_FromCharPtrAndSize(const char* carray, size_t size) { SV *obj = sv_newmortal(); if (carray) { sv_setpvn(obj, carray, size); } else { sv_setsv(obj, &PL_sv_undef); } return obj; } SWIGINTERNINLINE SV * SWIG_FromCharPtr(const char *cptr) { return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0)); } extern int mmc_close_tray(CdIo_t *p_cdio); extern int mmc_start_stop_unit (const CdIo_t *p_cdio); extern char *mmc_get_track_isrc (const CdIo_t *p_cdio, track_t i_track); char * mmc_get_isrc(CdIo_t *p_cdio, track_t track) { return mmc_get_track_isrc (p_cdio, track); } #ifdef __cplusplus extern "C" { #endif #ifdef PERL_OBJECT #define MAGIC_CLASS _wrap_perlmmc_var:: class _wrap_perlmmc_var : public CPerlObj { public: #else #define MAGIC_CLASS #endif SWIGCLASS_STATIC int swig_magic_readonly(pTHX_ SV *SWIGUNUSEDPARM(sv), MAGIC *SWIGUNUSEDPARM(mg)) { MAGIC_PPERL croak("Value is read-only."); return 0; } #ifdef PERL_OBJECT }; #endif #ifdef __cplusplus } #endif #ifdef __cplusplus extern "C" { #endif XS(_wrap_imaxdiv_t_quot_set) { { imaxdiv_t *arg1 = (imaxdiv_t *) 0 ; long long arg2 ; void *argp1 = 0 ; int res1 = 0 ; long long val2 ; int ecode2 = 0 ; int argvi = 0; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: imaxdiv_t_quot_set(self,quot);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_imaxdiv_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "imaxdiv_t_quot_set" "', argument " "1"" of type '" "imaxdiv_t *""'"); } arg1 = (imaxdiv_t *)(argp1); ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "imaxdiv_t_quot_set" "', argument " "2"" of type '" "long long""'"); } arg2 = (long long)(val2); if (arg1) (arg1)->quot = arg2; ST(argvi) = sv_newmortal(); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_imaxdiv_t_quot_get) { { imaxdiv_t *arg1 = (imaxdiv_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; long long result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: imaxdiv_t_quot_get(self);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_imaxdiv_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "imaxdiv_t_quot_get" "', argument " "1"" of type '" "imaxdiv_t *""'"); } arg1 = (imaxdiv_t *)(argp1); result = (long long) ((arg1)->quot); ST(argvi) = SWIG_From_long_SS_long SWIG_PERL_CALL_ARGS_1((long long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_imaxdiv_t_rem_set) { { imaxdiv_t *arg1 = (imaxdiv_t *) 0 ; long long arg2 ; void *argp1 = 0 ; int res1 = 0 ; long long val2 ; int ecode2 = 0 ; int argvi = 0; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: imaxdiv_t_rem_set(self,rem);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_imaxdiv_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "imaxdiv_t_rem_set" "', argument " "1"" of type '" "imaxdiv_t *""'"); } arg1 = (imaxdiv_t *)(argp1); ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "imaxdiv_t_rem_set" "', argument " "2"" of type '" "long long""'"); } arg2 = (long long)(val2); if (arg1) (arg1)->rem = arg2; ST(argvi) = sv_newmortal(); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_imaxdiv_t_rem_get) { { imaxdiv_t *arg1 = (imaxdiv_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; long long result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: imaxdiv_t_rem_get(self);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_imaxdiv_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "imaxdiv_t_rem_get" "', argument " "1"" of type '" "imaxdiv_t *""'"); } arg1 = (imaxdiv_t *)(argp1); result = (long long) ((arg1)->rem); ST(argvi) = SWIG_From_long_SS_long SWIG_PERL_CALL_ARGS_1((long long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_new_imaxdiv_t) { { int argvi = 0; imaxdiv_t *result = 0 ; dXSARGS; if ((items < 0) || (items > 0)) { SWIG_croak("Usage: new_imaxdiv_t();"); } result = (imaxdiv_t *)calloc(1, sizeof(imaxdiv_t)); ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_imaxdiv_t, SWIG_OWNER | SWIG_SHADOW); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_delete_imaxdiv_t) { { imaxdiv_t *arg1 = (imaxdiv_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: delete_imaxdiv_t(self);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_imaxdiv_t, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_imaxdiv_t" "', argument " "1"" of type '" "imaxdiv_t *""'"); } arg1 = (imaxdiv_t *)(argp1); free((char *) arg1); ST(argvi) = sv_newmortal(); XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_imaxabs) { { intmax_t arg1 ; long long val1 ; int ecode1 = 0 ; int argvi = 0; intmax_t result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: imaxabs(n);"); } ecode1 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "imaxabs" "', argument " "1"" of type '" "intmax_t""'"); } arg1 = (intmax_t)(val1); result = (intmax_t)imaxabs(arg1); ST(argvi) = SWIG_From_long_SS_long SWIG_PERL_CALL_ARGS_1((long long)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_imaxdiv) { { intmax_t arg1 ; intmax_t arg2 ; long long val1 ; int ecode1 = 0 ; long long val2 ; int ecode2 = 0 ; int argvi = 0; imaxdiv_t result; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: imaxdiv(numer,denom);"); } ecode1 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(0), &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "imaxdiv" "', argument " "1"" of type '" "intmax_t""'"); } arg1 = (intmax_t)(val1); ecode2 = SWIG_AsVal_long_SS_long SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "imaxdiv" "', argument " "2"" of type '" "intmax_t""'"); } arg2 = (intmax_t)(val2); result = imaxdiv(arg1,arg2); ST(argvi) = SWIG_NewPointerObj((imaxdiv_t *)memcpy((imaxdiv_t *)malloc(sizeof(imaxdiv_t)),&result,sizeof(imaxdiv_t)), SWIGTYPE_p_imaxdiv_t, SWIG_POINTER_OWN | SWIG_SHADOW); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_strtoimax) { { char *arg1 = (char *) 0 ; char **arg2 = (char **) 0 ; int arg3 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; int val3 ; int ecode3 = 0 ; int argvi = 0; intmax_t result; dXSARGS; if ((items < 3) || (items > 3)) { SWIG_croak("Usage: strtoimax(nptr,endptr,base);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strtoimax" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_p_char, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "strtoimax" "', argument " "2"" of type '" "char **""'"); } arg2 = (char **)(argp2); ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strtoimax" "', argument " "3"" of type '" "int""'"); } arg3 = (int)(val3); result = (intmax_t)strtoimax((char const *)arg1,arg2,arg3); ST(argvi) = SWIG_From_long_SS_long SWIG_PERL_CALL_ARGS_1((long long)(result)); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_strtoumax) { { char *arg1 = (char *) 0 ; char **arg2 = (char **) 0 ; int arg3 ; int res1 ; char *buf1 = 0 ; int alloc1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; int val3 ; int ecode3 = 0 ; int argvi = 0; uintmax_t result; dXSARGS; if ((items < 3) || (items > 3)) { SWIG_croak("Usage: strtoumax(nptr,endptr,base);"); } res1 = SWIG_AsCharPtrAndSize(ST(0), &buf1, NULL, &alloc1); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strtoumax" "', argument " "1"" of type '" "char const *""'"); } arg1 = (char *)(buf1); res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_p_char, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "strtoumax" "', argument " "2"" of type '" "char **""'"); } arg2 = (char **)(argp2); ecode3 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(2), &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strtoumax" "', argument " "3"" of type '" "int""'"); } arg3 = (int)(val3); result = (uintmax_t)strtoumax((char const *)arg1,arg2,arg3); ST(argvi) = SWIG_From_unsigned_SS_long_SS_long SWIG_PERL_CALL_ARGS_1((unsigned long long)(result)); argvi++ ; if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); SWIG_croak_null(); } } XS(_wrap_mmc_eject_media) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; int result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: mmc_eject_media(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "mmc_eject_media" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); result = (int)mmc_eject_media((CdIo_t const *)arg1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_stop_media) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; int result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: stop_media(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "stop_media" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); result = (int)mmc_start_stop_unit((CdIo_t const *)arg1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_mmc_close_tray) { { CdIo_t *arg1 = (CdIo_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; int result; dXSARGS; if ((items < 1) || (items > 1)) { SWIG_croak("Usage: mmc_close_tray(p_cdio);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "mmc_close_tray" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); result = (int)mmc_close_tray(arg1); ST(argvi) = SWIG_From_int SWIG_PERL_CALL_ARGS_1((int)(result)); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_mmc_get_isrc) { { CdIo_t *arg1 = (CdIo_t *) 0 ; track_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: mmc_get_isrc(p_cdio,track);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "mmc_get_isrc" "', argument " "1"" of type '" "CdIo_t *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "mmc_get_isrc" "', argument " "2"" of type '" "track_t""'"); } arg2 = (track_t)(val2); result = (char *)mmc_get_isrc(arg1,arg2); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } XS(_wrap_mmc_get_track_isrc) { { CdIo_t *arg1 = (CdIo_t *) 0 ; track_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int val2 ; int ecode2 = 0 ; int argvi = 0; char *result = 0 ; dXSARGS; if ((items < 2) || (items > 2)) { SWIG_croak("Usage: mmc_get_track_isrc(p_cdio,i_track);"); } res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CdIo_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "mmc_get_track_isrc" "', argument " "1"" of type '" "CdIo_t const *""'"); } arg1 = (CdIo_t *)(argp1); ecode2 = SWIG_AsVal_unsigned_SS_int SWIG_PERL_CALL_ARGS_2(ST(1), &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "mmc_get_track_isrc" "', argument " "2"" of type '" "track_t""'"); } arg2 = (track_t)(val2); result = (char *)mmc_get_track_isrc((CdIo_t const *)arg1,arg2); ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); } } /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ static swig_type_info _swigt__p_CdIo_t = {"_p_CdIo_t", "CdIo_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_imaxdiv_t = {"_p_imaxdiv_t", "imaxdiv_t *", 0, 0, (void*)"perlmmc::imaxdiv_t", 0}; static swig_type_info _swigt__p_int = {"_p_int", "intptr_t *|int *|int_least32_t *|int_fast32_t *|lba_t *|int32_t *|lsn_t *|int_fast16_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_long = {"_p_long", "my_ssize_t *|ssize_t *|cdio_mmc_level_t *|long *|driver_return_code_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_long_long = {"_p_long_long", "int_least64_t *|int_fast64_t *|int64_t *|long long *|intmax_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_short = {"_p_short", "short *|int_least16_t *|int16_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_signed_char = {"_p_signed_char", "signed char *|int_least8_t *|int_fast8_t *|int8_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *|uint_least8_t *|uint_fast8_t *|uint8_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_unsigned_int = {"_p_unsigned_int", "track_t *|uintptr_t *|uint_least32_t *|uint_fast32_t *|uint32_t *|unsigned int *|cdio_drive_write_cap_t *|cdio_drive_misc_cap_t *|cdio_drive_read_cap_t *|driver_id_t *|uint_fast16_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_unsigned_long_long = {"_p_unsigned_long_long", "uint_least64_t *|uint_fast64_t *|uint64_t *|unsigned long long *|uintmax_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_unsigned_short = {"_p_unsigned_short", "unsigned short *|uint_least16_t *|uint16_t *", 0, 0, (void*)0, 0}; static swig_type_info *swig_type_initial[] = { &_swigt__p_CdIo_t, &_swigt__p_char, &_swigt__p_imaxdiv_t, &_swigt__p_int, &_swigt__p_long, &_swigt__p_long_long, &_swigt__p_p_char, &_swigt__p_short, &_swigt__p_signed_char, &_swigt__p_unsigned_char, &_swigt__p_unsigned_int, &_swigt__p_unsigned_long_long, &_swigt__p_unsigned_short, }; static swig_cast_info _swigc__p_CdIo_t[] = { {&_swigt__p_CdIo_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_imaxdiv_t[] = { {&_swigt__p_imaxdiv_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_long[] = { {&_swigt__p_long, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_long_long[] = { {&_swigt__p_long_long, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_short[] = { {&_swigt__p_short, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_signed_char[] = { {&_swigt__p_signed_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_unsigned_char[] = { {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_unsigned_int[] = { {&_swigt__p_unsigned_int, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_unsigned_long_long[] = { {&_swigt__p_unsigned_long_long, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_unsigned_short[] = { {&_swigt__p_unsigned_short, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info *swig_cast_initial[] = { _swigc__p_CdIo_t, _swigc__p_char, _swigc__p_imaxdiv_t, _swigc__p_int, _swigc__p_long, _swigc__p_long_long, _swigc__p_p_char, _swigc__p_short, _swigc__p_signed_char, _swigc__p_unsigned_char, _swigc__p_unsigned_int, _swigc__p_unsigned_long_long, _swigc__p_unsigned_short, }; /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ static swig_constant_info swig_constants[] = { {0,0,0,0,0,0} }; #ifdef __cplusplus } #endif static swig_variable_info swig_variables[] = { {0,0,0,0} }; static swig_command_info swig_commands[] = { {"perlmmcc::imaxdiv_t_quot_set", _wrap_imaxdiv_t_quot_set}, {"perlmmcc::imaxdiv_t_quot_get", _wrap_imaxdiv_t_quot_get}, {"perlmmcc::imaxdiv_t_rem_set", _wrap_imaxdiv_t_rem_set}, {"perlmmcc::imaxdiv_t_rem_get", _wrap_imaxdiv_t_rem_get}, {"perlmmcc::new_imaxdiv_t", _wrap_new_imaxdiv_t}, {"perlmmcc::delete_imaxdiv_t", _wrap_delete_imaxdiv_t}, {"perlmmcc::imaxabs", _wrap_imaxabs}, {"perlmmcc::imaxdiv", _wrap_imaxdiv}, {"perlmmcc::strtoimax", _wrap_strtoimax}, {"perlmmcc::strtoumax", _wrap_strtoumax}, {"perlmmcc::mmc_eject_media", _wrap_mmc_eject_media}, {"perlmmcc::stop_media", _wrap_stop_media}, {"perlmmcc::mmc_close_tray", _wrap_mmc_close_tray}, {"perlmmcc::mmc_get_isrc", _wrap_mmc_get_isrc}, {"perlmmcc::mmc_get_track_isrc", _wrap_mmc_get_track_isrc}, {0,0} }; /* ----------------------------------------------------------------------------- * Type initialization: * This problem is tough by the requirement that no dynamic * memory is used. Also, since swig_type_info structures store pointers to * swig_cast_info structures and swig_cast_info structures store pointers back * to swig_type_info structures, we need some lookup code at initialization. * The idea is that swig generates all the structures that are needed. * The runtime then collects these partially filled structures. * The SWIG_InitializeModule function takes these initial arrays out of * swig_module, and does all the lookup, filling in the swig_module.types * array with the correct data and linking the correct swig_cast_info * structures together. * * The generated swig_type_info structures are assigned statically to an initial * array. We just loop through that array, and handle each type individually. * First we lookup if this type has been already loaded, and if so, use the * loaded structure instead of the generated one. Then we have to fill in the * cast linked list. The cast data is initially stored in something like a * two-dimensional array. Each row corresponds to a type (there are the same * number of rows as there are in the swig_type_initial array). Each entry in * a column is one of the swig_cast_info structures for that type. * The cast_initial array is actually an array of arrays, because each row has * a variable number of columns. So to actually build the cast linked list, * we find the array of casts associated with the type, and loop through it * adding the casts to the list. The one last trick we need to do is making * sure the type pointer in the swig_cast_info struct is correct. * * First off, we lookup the cast->type name to see if it is already loaded. * There are three cases to handle: * 1) If the cast->type has already been loaded AND the type we are adding * casting info to has not been loaded (it is in this module), THEN we * replace the cast->type pointer with the type pointer that has already * been loaded. * 2) If BOTH types (the one we are adding casting info to, and the * cast->type) are loaded, THEN the cast info has already been loaded by * the previous module so we just ignore it. * 3) Finally, if cast->type has not already been loaded, then we add that * swig_cast_info to the linked list (because the cast->type) pointer will * be correct. * ----------------------------------------------------------------------------- */ #ifdef __cplusplus extern "C" { #if 0 } /* c-mode */ #endif #endif #if 0 #define SWIGRUNTIME_DEBUG #endif SWIGRUNTIME void SWIG_InitializeModule(void *clientdata) { size_t i; swig_module_info *module_head, *iter; int init; /* check to see if the circular list has been setup, if not, set it up */ if (swig_module.next==0) { /* Initialize the swig_module */ swig_module.type_initial = swig_type_initial; swig_module.cast_initial = swig_cast_initial; swig_module.next = &swig_module; init = 1; } else { init = 0; } /* Try and load any already created modules */ module_head = SWIG_GetModule(clientdata); if (!module_head) { /* This is the first module loaded for this interpreter */ /* so set the swig module into the interpreter */ SWIG_SetModule(clientdata, &swig_module); } else { /* the interpreter has loaded a SWIG module, but has it loaded this one? */ iter=module_head; do { if (iter==&swig_module) { /* Our module is already in the list, so there's nothing more to do. */ return; } iter=iter->next; } while (iter!= module_head); /* otherwise we must add our module into the list */ swig_module.next = module_head->next; module_head->next = &swig_module; } /* When multiple interpreters are used, a module could have already been initialized in a different interpreter, but not yet have a pointer in this interpreter. In this case, we do not want to continue adding types... everything should be set up already */ if (init == 0) return; /* Now work on filling in swig_module.types */ #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: size %d\n", swig_module.size); #endif for (i = 0; i < swig_module.size; ++i) { swig_type_info *type = 0; swig_type_info *ret; swig_cast_info *cast; #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); #endif /* if there is another module already loaded */ if (swig_module.next != &swig_module) { type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); } if (type) { /* Overwrite clientdata field */ #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: found type %s\n", type->name); #endif if (swig_module.type_initial[i]->clientdata) { type->clientdata = swig_module.type_initial[i]->clientdata; #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name); #endif } } else { type = swig_module.type_initial[i]; } /* Insert casting types */ cast = swig_module.cast_initial[i]; while (cast->type) { /* Don't need to add information already in the list */ ret = 0; #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: look cast %s\n", cast->type->name); #endif if (swig_module.next != &swig_module) { ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); #ifdef SWIGRUNTIME_DEBUG if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name); #endif } if (ret) { if (type == swig_module.type_initial[i]) { #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: skip old type %s\n", ret->name); #endif cast->type = ret; ret = 0; } else { /* Check for casting already in the list */ swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type); #ifdef SWIGRUNTIME_DEBUG if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name); #endif if (!ocast) ret = 0; } } if (!ret) { #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name); #endif if (type->cast) { type->cast->prev = cast; cast->next = type->cast; } type->cast = cast; } cast++; } /* Set entry in modules->types array equal to the type */ swig_module.types[i] = type; } swig_module.types[i] = 0; #ifdef SWIGRUNTIME_DEBUG printf("**** SWIG_InitializeModule: Cast List ******\n"); for (i = 0; i < swig_module.size; ++i) { int j = 0; swig_cast_info *cast = swig_module.cast_initial[i]; printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); while (cast->type) { printf("SWIG_InitializeModule: cast type %s\n", cast->type->name); cast++; ++j; } printf("---- Total casts: %d\n",j); } printf("**** SWIG_InitializeModule: Cast List ******\n"); #endif } /* This function will propagate the clientdata field of type to * any new swig_type_info structures that have been added into the list * of equivalent types. It is like calling * SWIG_TypeClientData(type, clientdata) a second time. */ SWIGRUNTIME void SWIG_PropagateClientData(void) { size_t i; swig_cast_info *equiv; static int init_run = 0; if (init_run) return; init_run = 1; for (i = 0; i < swig_module.size; i++) { if (swig_module.types[i]->clientdata) { equiv = swig_module.types[i]->cast; while (equiv) { if (!equiv->converter) { if (equiv->type && !equiv->type->clientdata) SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); } equiv = equiv->next; } } } } #ifdef __cplusplus #if 0 { /* c-mode */ #endif } #endif #if defined(__cplusplus) && ! defined(XSPROTO) extern "C" #endif XS(SWIG_init) { dXSARGS; int i; (void)items; SWIG_InitializeModule(0); /* Install commands */ for (i = 0; swig_commands[i].name; i++) { /* Casts only needed for Perl < 5.10. */ #ifdef __cplusplus newXS(const_cast(swig_commands[i].name), swig_commands[i].wrapper, const_cast(__FILE__)); #else newXS((char*)swig_commands[i].name, swig_commands[i].wrapper, (char*)__FILE__); #endif } /* Install variables */ for (i = 0; swig_variables[i].name; i++) { SV *sv; sv = get_sv(swig_variables[i].name, TRUE | 0x2 | GV_ADDMULTI); if (swig_variables[i].type) { SWIG_MakePtr(sv,(void *)1, *swig_variables[i].type,0); } else { sv_setiv(sv,(IV) 0); } swig_create_magic(sv, swig_variables[i].name, swig_variables[i].set, swig_variables[i].get); } /* Install constant */ for (i = 0; swig_constants[i].type; i++) { SV *sv; sv = get_sv(swig_constants[i].name, TRUE | 0x2 | GV_ADDMULTI); switch(swig_constants[i].type) { case SWIG_INT: sv_setiv(sv, (IV) swig_constants[i].lvalue); break; case SWIG_FLOAT: sv_setnv(sv, (double) swig_constants[i].dvalue); break; case SWIG_STRING: sv_setpv(sv, (const char *) swig_constants[i].pvalue); break; case SWIG_POINTER: SWIG_MakePtr(sv, swig_constants[i].pvalue, *(swig_constants[i].ptype),0); break; case SWIG_BINARY: SWIG_MakePackedObj(sv, swig_constants[i].pvalue, swig_constants[i].lvalue, *(swig_constants[i].ptype)); break; default: break; } SvREADONLY_on(sv); } SWIG_TypeClientData(SWIGTYPE_p_imaxdiv_t, (void*) "perlmmc::imaxdiv_t"); /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "VERSION_NUM", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(LIBCDIO_VERSION_NUM))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "INVALID_LBA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_INVALID_LBA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "INVALID_LSN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_INVALID_LSN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CD_FRAMESIZE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_CD_FRAMESIZE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CD_FRAMESIZE_RAW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_CD_FRAMESIZE_RAW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "ISO_BLOCKSIZE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_CD_FRAMESIZE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "M2F2_SECTOR_SIZE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(M2F2_SECTOR_SIZE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "M2RAW_SECTOR_SIZE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(M2RAW_SECTOR_SIZE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_INQUIRY", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_INQUIRY))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_MODE_SELECT_6", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_MODE_SELECT_6))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_MODE_SENSE_6", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_MODE_SENSE_6))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_START_STOP", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_START_STOP))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_ALLOW_MEDIUM_REMOVAL", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_ALLOW_MEDIUM_REMOVAL))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDIO_MMC_GPCMD_READ_10", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_READ_10))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_READ_SUBCHANNEL", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_READ_SUBCHANNEL))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_READ_HEADER", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_READ_HEADER))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_PLAY_AUDIO_10", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_PLAY_AUDIO_10))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_GET_CONFIGURATION", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_GET_CONFIGURATION))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_PLAY_AUDIO_MSF", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_PLAY_AUDIO_MSF))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_PLAY_AUDIO_TI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_PLAY_AUDIO_TI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_PLAY_TRACK_REL_10", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_PLAY_TRACK_REL_10))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_GET_EVENT_STATUS", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_GET_EVENT_STATUS))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_PAUSE_RESUME", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_PAUSE_RESUME))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_READ_DISC_INFO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_READ_DISC_INFO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_MODE_SELECT_10", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_MODE_SELECT_10))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_MODE_SENSE_10", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_MODE_SENSE_10))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_PLAY_AUDIO_12", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_PLAY_AUDIO_12))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_LOAD_UNLOAD", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_LOAD_UNLOAD))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_READ_12", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_READ_12))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_PLAY_TRACK_REL_12", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_PLAY_TRACK_REL_12))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_READ_DVD_STRUCTURE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_READ_DVD_STRUCTURE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_READ_MSF", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_READ_MSF))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_SET_SPEED", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_SET_SPEED))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_READ_CD", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_READ_CD))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_CD_PLAYBACK_STATUS", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_CD_PLAYBACK_STATUS))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_PLAYBACK_CONTROL", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_PLAYBACK_CONTROL))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_READ_CDDA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_READ_CDDA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_READ_CDXA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_READ_CDXA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GPCMD_READ_ALL_SUBCODES", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GPCMD_READ_ALL_SUBCODES))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_SUB_ST_INVALID", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READ_SUB_ST_INVALID))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_SUB_ST_PLAY", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READ_SUB_ST_PLAY))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_SUB_ST_PAUSED", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READ_SUB_ST_PAUSED))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_SUB_ST_COMPLETED", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READ_SUB_ST_COMPLETED))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_SUB_ST_ERROR", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READ_SUB_ST_ERROR))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_SUB_ST_NO_STATUS", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READ_SUB_ST_NO_STATUS))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_TYPE_ANY", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READ_TYPE_ANY))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_TYPE_CDDA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READ_TYPE_CDDA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_TYPE_MODE1", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READ_TYPE_MODE1))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_TYPE_MODE2", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READ_TYPE_MODE2))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_TYPE_M2F1", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READ_TYPE_M2F1))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READ_TYPE_M2F2", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READ_TYPE_M2F2))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READTOC_FMT_TOC", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READTOC_FMT_TOC))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READTOC_FMT_SESSION", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READTOC_FMT_SESSION))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READTOC_FMT_FULTOC", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READTOC_FMT_FULTOC))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDIO_MMC_READTOC_FMT_PMA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READTOC_FMT_PMA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READTOC_FMT_PMA", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READTOC_FMT_PMA))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READTOC_FMT_ATIP", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READTOC_FMT_ATIP))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "READTOC_FMT_CDTEXT", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_READTOC_FMT_CDTEXT))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "R_W_ERROR_PAGE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_R_W_ERROR_PAGE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "WRITE_PARMS_PAGE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_WRITE_PARMS_PAGE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CDR_PARMS_PAGE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_CDR_PARMS_PAGE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "AUDIO_CTL_PAGE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_AUDIO_CTL_PAGE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "POWER_PAGE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_POWER_PAGE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FAULT_FAIL_PAGE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FAULT_FAIL_PAGE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "TO_PROTECT_PAGE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_TO_PROTECT_PAGE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "CAPABILITIES_PAGE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_CAPABILITIES_PAGE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "ALL_PAGES", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_ALL_PAGES))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GET_CONF_ALL_FEATURES", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GET_CONF_ALL_FEATURES))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GET_CONF_CURRENT_FEATURES", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GET_CONF_CURRENT_FEATURES))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "GET_CONF_NAMED_FEATURE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_GET_CONF_NAMED_FEATURE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROFILE_LIST", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROFILE_LIST))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_CORE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_CORE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_MORPHING", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_MORPHING))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_REMOVABLE_MEDIUM", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_REMOVABLE_MEDIUM))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_WRITE_PROTECT", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_WRITE_PROTECT))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_RANDOM_READABLE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_RANDOM_READABLE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_MULTI_READ", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_MULTI_READ))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_CD_READ", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_CD_READ))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_DVD_READ", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_DVD_READ))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_RANDOM_WRITABLE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_RANDOM_WRITABLE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_INCR_WRITE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_INCR_WRITE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_SECTOR_ERASE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_SECTOR_ERASE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_FORMATABLE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_FORMATABLE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_DEFECT_MGMT", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_DEFECT_MGMT))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_WRITE_ONCE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_WRITE_ONCE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_RESTRICT_OVERW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_RESTRICT_OVERW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_CD_RW_CAV", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_CD_RW_CAV))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_MRW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_MRW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_ENHANCED_DEFECT", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_ENHANCED_DEFECT))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_DVD_PRW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_DVD_PRW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_DVD_PR", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_DVD_PR))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_RIGID_RES_OVERW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_RIGID_RES_OVERW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_CD_TAO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_CD_TAO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_CD_SAO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_CD_SAO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_DVD_R_RW_WRITE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_DVD_R_RW_WRITE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_CD_RW_MEDIA_WRITE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_CD_RW_MEDIA_WRITE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_DVD_PR_2_LAYER", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_DVD_PR_2_LAYER))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_POWER_MGMT", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_POWER_MGMT))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_CDDA_EXT_PLAY", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_CDDA_EXT_PLAY))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_MCODE_UPGRADE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_MCODE_UPGRADE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_TIME_OUT", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_TIME_OUT))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_DVD_CSS", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_DVD_CSS))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_RT_STREAMING", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_RT_STREAMING))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_LU_SN", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_LU_SN))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_FIRMWARE_DATE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_FIRMWARE_DATE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_NON_REMOVABLE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_NON_REMOVABLE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_REMOVABLE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_REMOVABLE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_MO_ERASABLE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_MO_ERASABLE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_MO_WRITE_ONCE", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_MO_WRITE_ONCE))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_AS_MO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_AS_MO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_CD_ROM", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_CD_ROM))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_CD_R", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_CD_R))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_CD_RW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_CD_RW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_DVD_ROM", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_DVD_ROM))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_DVD_R_SEQ", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_DVD_R_SEQ))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_DVD_RAM", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_DVD_RAM))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_DVD_RW_RO", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_DVD_RW_RO))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_DVD_RW_SEQ", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_DVD_RW_SEQ))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_DVD_PRW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_DVD_PRW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_DVD_PR", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_DVD_PR))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_DDCD_ROM", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_DDCD_ROM))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_DDCD_R", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_DDCD_R))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_DDCD_RW", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_DDCD_RW))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_PROF_NON_CONFORM", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_PROF_NON_CONFORM))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_INTERFACE_UNSPECIFIED", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_INTERFACE_UNSPECIFIED))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_INTERFACE_SCSI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_INTERFACE_SCSI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_INTERFACE_ATAPI", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_INTERFACE_ATAPI))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_INTERFACE_IEEE_1394", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_INTERFACE_IEEE_1394))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_INTERFACE_IEEE_1394A", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_INTERFACE_IEEE_1394A))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; /*@SWIG:/usr/share/swig3.0/perl5/perltypemaps.swg,65,%set_constant@*/ do { SV *sv = get_sv((char*) SWIG_prefix "FEATURE_INTERFACE_FIBRE_CH", TRUE | 0x2 | GV_ADDMULTI); sv_setsv(sv, SWIG_From_long SWIG_PERL_CALL_ARGS_1((long)(CDIO_MMC_FEATURE_INTERFACE_FIBRE_CH))); SvREADONLY_on(sv); } while(0) /*@SWIG@*/; ST(0) = &PL_sv_yes; XSRETURN(1); } Device-Cdio-v2.0.0/MANIFEST000444001750001750 303713222226267 14710 0ustar00rockyrocky000000000000Build.PL COPYING ChangeLog Changes GNUmakefile MANIFEST This list of files META.json META.yml # Will be created by "make dist" Makefile.PL README.md THANKS configure data/cdda.bin # A CDDA bin/ data/cdda.cue # cue image data/cdda.toc # Sample CDRDAO image data/cdtext-test.toc # CDRDAO image used in testing data/cdtext.cdt # Raw CDText data data/copying.iso # An ISO 9660 images data/isofs-m1.bin # An ISO9660 bin/ data/isofs-m1.cue # cue image examples/.gitignore examples/README examples/audio.pl examples/cd-read.pl examples/cdchange.pl examples/cdtext.pl examples/cdtext-raw.pl examples/checkcd.pl examples/device.pl examples/drives.pl examples/eject.pl examples/iso0.pl examples/iso1.pl examples/iso2.pl examples/iso3.pl examples/tracks.pl lib/Device/Cdio.pm lib/Device/Cdio/Device.pm lib/Device/Cdio/ISO9660.pm lib/Device/Cdio/ISO9660/FS.pm lib/Device/Cdio/ISO9660/IFS.pm lib/Device/Cdio/Track.pm lib/Device/Cdio/Util.pm lib/perlcdio.pm lib/perliso9660.pm lib/perlmmc.pm perlcdio_wrap.c perliso9660_wrap.c perlmmc_wrap.c swig/audio.swg swig/cdtext.swg swig/device.swg swig/device_const.swg swig/disc.swg swig/perlcdio.swg swig/perliso9660.swg swig/perlmmc.swg swig/read.swg swig/track.swg swig/types.swg t/00.load.t t/01.pod-coverage.t t/01.pod.t t/02.default.t t/05.ops.t t/06.bincue.t t/06.image.t t/06.toc.t t/07.iso.t t/07.iso1.t t/07.iso2.t t/07.iso3.t t/10.cdda.t t/10.cdtext.t t/10.read.t t/11.dev.t SIGNATURE Added here by Module::Build Device-Cdio-v2.0.0/Makefile.PL000444001750001750 45213222226267 15507 0ustar00rockyrocky000000000000# Note: this file was auto-generated by Module::Build::Compat version 0.4214 use Module::Build::Compat 0.02; use lib '_build/lib'; Module::Build::Compat->run_build_pl(args => \@ARGV); require MyModuleBuild; Module::Build::Compat->write_makefile(build_class => 'MyModuleBuild'); Device-Cdio-v2.0.0/GNUmakefile000444001750001750 757513222226267 15644 0ustar00rockyrocky000000000000# Copyright (C) 2008, 2011, 2017 Rocky Bernstein # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # PREREQ_PM => { Test::More=>q[0], version=>q[0], ExtUtils::PkgConfig=>q[1.03] } # Note: remake (GNU make with debugging) has a --tasks option which # will show important targets. In remake, to give a target a # user-friendly description, one starts a comment line with #: GIT2CL ?= git2cl #: Build everything all: ./Build perl ./Build --makefile_env_macros 1 #: Build program, e.g. compile C programs build: ./Build perl ./Build --makefile_env_macros 1 build #: Create Perl Build program via Module::Build ./Build: ./Build.PL perl ./Build.PL #: create Makefile from Makefile.PL Makefile: Makefile.PL perl Makefile.PL #: create Makefile.PL from Build Makefile: Build #: Remove automatically generated files clean: rm *.o *.so *.c || true perl ./Build --makefile_env_macros 1 clean code: perl Build --makefile_env_macros 1 code config_data: perl ./Build --makefile_env_macros 1 config_data diff: perl ./Build --makefile_env_macros 1 diff #: Create distribution tarball dist: perl ./Build --makefile_env_macros 1 dist distcheck: Makefile perl ./Build --makefile_env_macros 1 distcheck distclean: perl ./Build --makefile_env_macros 1 distclean distdir: perl ./Build --makefile_env_macros 1 distdir distmeta: perl ./Build --makefile_env_macros 1 distmeta distsign: perl ./Build --makefile_env_macros 1 distsign disttest: perl ./Build --makefile_env_macros 1 disttest #: Create documentation (in blib/libdoc) via perlpod docs: perl ./Build --makefile_env_macros 1 docs fakeinstall: perl ./Build --makefile_env_macros 1 fakeinstall #: Show help help: perl ./Build --makefile_env_macros 1 help html: perl ./Build --makefile_env_macros 1 html #: Install this puppy install: perl ./Build --makefile_env_macros 1 install #: Install other Perl packages that this package needs installdeps: perl ./Build --makefile_env_macros 1 installdeps #: Make a MANIFEST file manifest: perl ./Build --makefile_env_macros 1 manifest #: Generate manual pages manpages: perl ./Build --makefile_env_macros 1 manpages ppd: perl ./Build --makefile_env_macros 1 ppd ppmdist: perl ./Build --makefile_env_macros 1 ppmdist prereq_report: perl ./Build --makefile_env_macros 1 prereq_report pure_install: perl ./Build --makefile_env_macros 1 pure_install skipcheck : perl ./Build --makefile_env_macros 1 skipcheck #: Same as "test". "check" is the usual autoconf name check: test #: Run all unit tests test: Build perl ./Build --makefile_env_macros 1 test #: Check code coverage testcover: perl ./Build --makefile_env_macros 1 testcover #: Remove change log: ChangeLog rmChangeLog: rm ChangeLog || true #: Create a ChangeLog from git via git log and git2cl ChangeLog: rmChangeLog git log --pretty --numstat --summary | $(GIT2CL) >$@ #: Calling perl debugger (perldb) on each test testdb: perl ./Build --makefile_env_macros 1 testdb testpod: perl ./Build --makefile_env_macros 1 testpod testpodcoverage: perl ./Build --makefile_env_macros 1 testpodcoverage versioninstall: perl ./Build --makefile_env_macros 1 versioninstall .EXPORT: INC PREFIX DESTDIR VERBINST INSTALLDIRS TEST_VERBOSE LIB UNINST INSTALL_BASE POLLUTE .PHONY: all realclean build clean check test testcover testdb testpod testpodcoverage Device-Cdio-v2.0.0/README.md000444001750001750 1024513222226267 15055 0ustar00rockyrocky000000000000[![Travis Build Status](https://travis-ci.org/rocky/Perl-Device-Cdio.svg?branch=master)](https://travis-ci.org/rocky/Perl-Device-Cdio) [![CircleCI Build Status](https://circleci.com/gh/rocky/Perl-Device-Cdio.svg?style=shield&circle-token=:circle-token)](https://circleci.com/gh/rocky/Perl-Device-Cdio) Device::Cdio - Perl bindings for libcdio (CD Input and Control library) ============================================================================ This adds Perl bindings for the GNU CD Input and Control library (`libcdio`) and it's ISO 9660 library (`libiso9660`) which are written in C. The library encapsulates CD-ROM reading and control and ISO 9660 handling. Perl programs wishing to be oblivious of the OS- and device-dependent properties of a CD-ROM can use this library. The encapsulation is done in two parts. The lower-level Perl interface creates _perlcdio_, _perliso9660_ and _perlmmc_ libraries; these are generated by SWIG. There are also object-oriented modules that use _perlcdio_ and _perliso9660_ (but not yet _perlmmc_). Although _perlcdio_ and `perliso9660 are perfectly usable on there own, it is expected that the _Device::Cdio..._ modules are what most people will use. As _perlcdio_ and _perliso9660_ more closely model the C interface, it is conceivable (if unlikely) that die-hard _libcdio_ or _libiso9660_ C users who are very familiar with that interface may use that. It may also be possible to change the SWIG in such a way to combine the low-level and Object-Oriented pieces. However there are the problems. First, I'm not that much of a SWIG expert. Second it looks as though the resulting SWIG code would be more complex. Third the separation makes translation very straight forward to understand and maintain: first we get what's in C into Perl as a one-to-one translation. Then we implement some nice Perl abstraction off of that. The abstraction can be modified without having to redo the underlying translation. (But the reverse is generally not true: usually changes to the C-to-Perl translation, _perlcdio_ or _perliso9660_, do result in small, but obvious and straightforward changes to the abstraction layer cdio.) GNU CD Input and Control Library is rather large, and yet may yet grow a bit. (Any volunteers for adding UDF support?) So what is here is incomplete; over time it may grow to completion, depending on various factors: e.g. whether others will help out (hint). Some of the incompleteness is due to my lack of understanding of how to get SWIG to accomplish wrapping various return values. If you know how to do better, please let me know. Likewise suggestions on how to improve classes or Perl interaction are more than welcome. Sections of _libcdio_ that have been left out wholesale is the the cdparanoia library and almost all of the MMC library. About 1/2 of the ISO-9660 library has been done. Of the audio controls, I put in those things that didn't require any thought. But Jerry G. Geiger added more audio and CD-Text support There is much to be done - you want to help out, please do so! Standalone documentation via _perlpod_. See also the programs in the example directory. INSTALLATION ------------ To install this module, run the following commands: perl Build.PL ./Build ./Build test ./Build install For compatibility, the older idiom is tolerated: perl Makefile.PL make make test make install DEPENDENCIES ------------ * libcdio and development headers * C compiler * SWIG (optional) COPYRIGHT AND LICENSE --------------------- Copyright (C) 2006, 2008, 2011, 2017 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Device-Cdio-v2.0.0/data000755001750001750 013222226267 14330 5ustar00rockyrocky000000000000Device-Cdio-v2.0.0/data/isofs-m1.bin000444001750001750 255324013222226267 16710 0ustar00rockyrocky000000000000ÿÿÿÿÿÿÿÿÿÿÅh+÷õR5¸}õô—&ÐVA-.±H²DeÂæCECù8¬åkÊee¯æCÖÞ|œ6Æ=Á­ÿÿÿÿÿÿÿÿÿÿv½Ø…÷õšÚu’õôìg­A¿5—/¢¯eÙÂvæCg°Ž¸§âNê­ØÁuÿÿÿÿÿÿÿÿÿÿ‚…* ÷óõ›’~õ÷ôTA(&÷…Ü`ÉeÊÂCæC+ èÔz=ÁGÿÿÿÿÿÿÿÿÿÿàºh÷õ5=Ó¸õô&ÝiÐA -9ëtãD%ìevšæC³Eù³(bøêuÁŸÿÿÿÿÿÿÿÿÿÿ N Æ÷õýÒWõô]œ‘A›šgU„TìCe¯ÂìæC‘É$~¼Ç pG­Áêÿÿÿÿÿÿÿÿÿÿ1+š£÷ñõS}³øõöôbV)[AºT ý &eÂ5æC §ÖÚ‡!q\×åÁ2ÿÿÿÿÿÿÿÿÿÿK?íg÷ûõÝA*©õóô–~ÇÎAuÀØ#ÍŽe‰Â†æCõ¡N¬[ðôzÁŽÿÿÿÿÿÿÿÿÿÿ ÚZ}÷õsî‡õô©´úA9~¶½ Šhje5Â_æCD|Sê4J#Üd2ÁVÿÿÿÿÿÿÿÿÿÿÙJb²÷ëõvÞ¦Ëõûô¯”ÄyA¶ì¾ a•3eÂæCÔ^|?’Æ:§õôÁÿÿÿÿÿÿÿÿÿÿH/ò×÷õØq dõô^ù³A—çÍЈâÒÕ{e³ÂÈæCe0Ž›© B‹e¼ÁÙÿÿÿÿÿÿÿÿÿÿûBy÷õžÆ‹õôë„òAÅn\©…ÂÔej¾æCG¼SV=é)ÈdÁ¬ÿÿÿÿÿÿÿÿÿÿjäÒ÷éõ¾1k$õúôÔÕ¹8A$Π2…ú±eÖÂgæCöÒ¡òQ/X,ÁtÿÿÿÿÿÿÿÿÿÿžÜ ”÷õ¿y`¡õ ô!¥@5A³ÝÚ MI$´—eÅÂRæC“I$]²ÉÁFÿÿÿÿÿÿÿÿÿÿ¹°ñ÷íõÖÍõøôo}ÿA’ÖNåÊcRòey‹æC"'Öù‰ã}=ÁžÿÿÿÿÿÿÿÿÿÿCD001LINUX CDROM @@"g.ð MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING 2003042012291800ð2003042012291800ð00000000000000002003042012291800ð E)5…_©,Ü‚ŽÃHʼnõZ™\—qÖ…$tYîÃàî{îœYà{š¸“š}bÞ¶ïkJ}à†K»2ìÿ Nq8„=Öx¸Ü/TÎê Ö¾ìMJýZÍyšƒ]¾'ݵôð§Ø=EtKK« Ë3‹ö{šªî²/ª-ª¼²?ÛìÝÉO91–áTÄThO·±ìa¡hY\Laˉ:Žž|öÎî’GOñ$£*àqYè­é*< „ü]EöûÇnv°Õ9Ãr“ª*ð霖¶0”Mó¡¢ þßêB§hÒ`ÇáÒ š~ˆ‡Ô»˜BDËfh¤1 §¨µ3¡]l®ÿ‰ÞÜ#½ÞÂú ¥¸MafÿÿÿÿÿÿÿÿÿÿÿCD001£‘¸•÷õª‰x Õõø®Õ¢õ ôUÊ<äô[?m7Awâ2–3KGºÃqÆLŽ-Ët$æCÏwD¥›ªxOÖvµ`ä…"943ÿÿÿÿÿÿÿÿÿÿMKI Sun Apr 20 12:29:18 2003 mkisofs 1.15a22 -R -o cdimage.raw /tmp/cdio-test §dÏ÷õvr…Ëb­¿Ë~«\Ë× ËÕ×,×.,ÕÛË× " ½¹N©JD©ËÕ4Õ&µ××Ë6—Ë6JËB³N½µ±F4\µZËÁX½«ÁB³U¾šF©Xõô;9Ìë1ØÑë?Û.ëåëäååäãëåÐÒ'Ú%"ÚëääÔååëÅë%ë!×'ÐÔÖ#.Ô-ëî,ÐÛî!×5vÓ¯#Ú,ÿ0c÷³YLEOïLy€ïm¿ eÃ2Ëâ…aÛÕn:(•˜ÝÁ¾Ð[&ÐÁ+9O^u¦jþÄ3Dí ÔeÍtø^¿…\¤(C\¡Ûºr§öå<^iüÃHÎ,NuRÿÿÿÿÿÿÿÿÿÿDOCÈ_æ÷åõõõõx‰E6á7õüôô ôô<ÎÊ$¾ÑAô¼r„ÿÆ]˜êf’ñ]lƒeVÂNæC«ZÒ¡¶ ZrZ)˜©w{«ÁWÿÿÿÿÿÿÿÿÿÿ þ¡©÷Ëõþæõëôá_þOAGŸ6é’Üãªõõõõx‰£e\ õôô ôô<ÎÊÂFhËA˜šLi¤+ô[?ºrœ9Kº›„H¥}eÎÂûæC¬qøjÝ1–‰”³p„8HOuˆ½²·ÐÁÚÿÿÿÿÿÿÿÿÿÿ"Üj_b÷<õy¾á¦õô¥Ô¾ÄAô¶[ 8´…öe{ÂæC«ÔfÇÜBQÊeÁ¯ÿÿÿÿÿÿÿÿÿÿ#ˆg.ðSP¾ïRRPX$ýAAýËËËËTFg.ðg ðg.ðCEíífg.ðRRPX$ýAAýËËËËTFg.ðg ðg.ð|HFFHf'5ð COPYING.;1RR‰NM COPYINGPX$¤¤ËËËËTFf'5ðg ðg ðpg 5ðDOCRR‰NMdocPX$ýAAýËËËËTFg 5ðg ðg 5ðÔ¡± ˜[š?hâøöP¯s»÷ɃŒå‡ˆR¾ÜÉCëƒ09ÉõåõJý É´ª‡¥MåTÅëj&fÖ$~õëŸúpíù;*iQÄköÌá®:íQŠbÓr¿àû…P¡h߸‚”ÔÚéJýÑ×Åç%¶¯d€Ê7Åèõ²¯¬¿ü/™Í$Cús&<&ý½4i0;y&9ò±nñÀ ù:`‡jÜè¥vù­þb_xϹ,(·,­îôPl:ï\(´Ïé?¿ÊKÔz–—Öd®hUJ¼!”9j5~ñÐiÆÑÆ®eô•Á¥}áXˆ“•Ô]&÷Jç¢V ߨn’кy2¤Ó´3!4šo9´…!6ªV_&™ß>CMÿÿÿÿÿÿÿÿÿÿ$fg 5ðRRPX$ýAAýËËËËTFg 5ðg ðg 5ðfg.ðRRPX$ýAAýËËËËTFg.ðg ðg.ð€##ˆˆg 5ð README.TXT;1RR‰NMreadme.txtPX$´´ËËËËTFg 5ðg ðg 5ðÂúÜFU5k‚q> ¯Q5'£4qËÆrÄÏúCZ¾ÿ‰ É€Ÿl¬è²×b޼,òU¯&²;BV´¿ÃLÁE»gky€8Þù!£ïNÇn%ïÔ窠ô´)Í,)¢ ì˜!–ÞFS,×béX"»êRÛÏi˜Æ›±œ¬ª°Á4ˆ%™‘R&ÙD°ñØÜá ©Û°¬s¡N}”5Ç zÏá¶Å‚c¹K¡ýùü–³g@ÖéÝ÷û»E%vVülEºëäo™ô¬@Ä…Hp'˜Ú»3ÜÚ­/U­¾N4ñ¾…Ý)}Vˆ„ÿ,¯=p$ÀдoŒºšo*.ôKÏü‹ðMú%ÄÍ&Øíeàã“>ÿÿÿÿÿÿÿÿÿÿ%ERí T‡RRIP_1991ATHE ROCK RIDGE INTERCHANGE PROTOCOL PROVIDES SUPPORT FOR POSIX FILE SYSTEM SEMANTICSPLEASE CONTACT DISC PUBLISHER FOR SPECIFICATION SOURCE. SEE PUBLISHER IDENTIFIER IN PRIMARY VOLUME DESCRIPTOR FOR CONTACT INFORMATION.ÙåŠ47Qø› †ÏÒ˜5jšKž¨œ’˜‰DÉMú³Gi~v¬ ANñ±Ò‚Æû´r¶ÄˆiA­ K7¡+ó^{ý9œÂ>o÷mò÷°}H4¯zz„"é2"ÎÙ÷–Οv!4À \"ò¦¡JÄÁõݹúf71FI{YÌôÌÓï2ä–»2ÿ<_-öyº>¬aÉãGòpãægÂ&ÊyžN浂âÆà± ¦¤rˆ°I)åeè(•ØÕ]í$Ò‘¢C—­ Ô!iñ'GEÂÚwàiOUº)Ê¿€ë³X¬[Kÿ$ÏÉgwMÞS_šOO1˜P-­;­‘‘Ñ Eˆ·ó˜ 3Mÿÿÿÿÿÿÿÿÿÿ& GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for eacjx†§øYuœ\k Ü~ %862‡L8®ÛS´n3Iƒýô¡WÆópealqrX0‹‚ˆ-“ÑÞM ¼ªñ¶ [©ø€C²éBˆ…WD³dOô0†ò1*ü’¯mySUí];o? #•j2#‡Ñê>3&Ã’ôÐMÊáSIsPvt ‘)êÔK‹m…¯3aÌp˜®¡O ªˆæ/†¥5”D`m81'yÂ2¡ÊVV@î_¶šá©Ø>­•ÅfGÛ*KÚ-ÚEÁ-îæÒa%çwáÐÒ%½Á µQì{åë9è9½5ðÔn‡ëè;Ò5…Òœ?‡Z`÷s_^Ü9zŸãEÕ3ªT8•jHQ3pŠù@÷Ýâ<ùõÇÿÿÿÿÿÿÿÿÿÿ'h author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuou¯Ê®a_xÁl™3ø¡›ÔX®í÷8²i$Õà ?8ŒLo™ñ^âÂð4c¤äª ƒk)»c¶\CÆ¥xfóQ\Y>x~S Ìš¡ÕìD)]æÄΜ¶žP) Õ({Úoî:šú¶†g†ÌŒI¦z0üÖkÓ.*’S ®×lo•ÓSv%•Ϩe•Dyý`«_'Úí^IF{fî8Q~L$$àÀ¼¢§yœÑìXÇáÐû[H/mêB~ºÑã4jÀƃK',…|NŽùWÇmõ\Àr$$kNW\Çä/j‚”ÅD¾ Ü©ó 5Ëú50€"Ú½aß‹XÞy–üÑû—úzœañõâ·FÁZ…IÐP{³t©°­­ÿÔ–™Q‰ÿÿÿÿÿÿÿÿÿÿ(sly and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute thèJ?ѳ’vµ°Õ77¶¡¼iÕÖœ:¾.Üs¸CÈ ½[óft´ð)„¨à0š^E°µ ð{ÂÎ% àøÀ`Ï—g¼u=À½Å;G€‡ôÓU­#°ÿg;a±åºØí«™Œ¦ø§ÜE¼5QÝQ9‰ ìò÷c³ATò˜#†°ú6KŠa¨Úï%®€*AE&Æ«Œ^· Ü=¢qM6‚¹ÞEW‡Ø¢¶ÜqÑ:ÐwSKÉVƦàÄãO]‡.C±‡Ú§Ü¯'4oðþ¬qÁ$©%+ˆÄÆv¿ í´GŒv®H½€“U!Fƒêµ*Nõ—ÔfpÑ7zP"G}¶Õ©šÃ“Üìß³Š8†òš¼M´HX÷ ‰ÙBú&ÿÿÿÿÿÿÿÿÿÿ)em as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executar¨|D³ÑÌ‘ªùL Fé$ J7lžŸFK¨Æ\kSÿÛ€è›xŽº[Uæn(Vø òº¿cOýJñüOãuõƒª0ù8ˆëÃWI^žW‰CX^ÇæÀÜ ˆ oµáHnJu(Q­xuC:/ÈõU á£b;ÕŠ¸ÂêRƳJå0T…i£©ŽfQñLñ\¦ÈcLØ·\§WÝ®¶X-Á”nY™WWûÊúò€Be¢mÇÒÞîÊ€šÄ‚‹ÕøÁ>zQ³:üM×óáã8शfÊÜ<|qT"4›ó´9d³F¾—‘|>ëˆÁ>P0¥nPkjÓ®¬!0–âÙ4¸ Ð0mB¤Øÿÿÿÿÿÿÿÿÿÿ0ble work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may n2 XáQuÒ„.Fݱè 4è ;Úˆ ï9vü&b9½ÞWÚ8Ð:Þ9h=“D¨fÊ«þ=:ìØÊm‡ñmRÙ@t@U”a&ñ]”â…<ž}¿ÇU;Ùª‚ +¶Â`yêÇî W³A…Ý€š•]W~ÿcaï…t+‘2ËÅ[N.(š þyŽÿøyFp݃äY!‘Õj!Þ}I\A ÄOª\܉Ó<£ý3IžÊðx0)‡.Ÿ'×6*>“EÆ&Jë@õm¶`¦­ããÌ£«32'û²c °.^ï:`!o+žÞ·ßV÷/j_§ñ4 )ªµQíˆó—’)åŽÎÜQQí•ø2ÚíLZÎ9t1ý+0üKÿÿÿÿÿÿÿÿÿÿ1ot impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents E’æMÂ$W¸Ì–ääx¡ôï ç4 ï© ànUÝuÏ€px7š;×ﺩ+,ñ¥ðì=Å‚(Á”§Ps;Ó”K¡h³n5/ð¡Ï°àxó¨YZðd<˜b¡v=˜šà½¤ouÛÙlÁvÞ6}è_¦ +Ü'väu–€)Iã1®ðÂà_<–øä/ÛØ1ÌgíÐ7kã*”ê¶lø1aëõÁÀ±úŸ8`Ô¸ —öŽsºÆdpœ»ÌpJàZÜGÖë¨ß·ütz•Ïú¡`6 Ö¶ØBQý®Záu¤¬í€A”}ÉZ–û¬<ímñ¨£IÒÃêlW?Æ1b7ç¡ÓÄ?É1f•« ¦WQ‰#i8G­ÿÿÿÿÿÿÿÿÿÿ2or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANÐ÷Õ,¿T·B1úêýĵÏÞ:ô~'n˜Òa5ÍÇes=ê#Û;ì€yéd'›kºØ6¹ÛöDÑ•§O‹É9NñQÔqUÑJ÷;Q:TœzW¾³´Xˆ$Uds¡$;³ºÃ¥š°ÿ›„KÜ ^w Ñý9x¾bD'N¶Î9©‹/µpY„ ýòI¾©ãKÔ °Ñ¨ÏŠZXøZåb«˜ãúÿ&Qëu<—ä´*ü‹õf?\Ìg•m© ¢Îc `"Ÿë½ZmíÉù%O’JC?M|²ÐÉi@¿ì©"y‘§v9‹-4;àF*Í?÷Ú1S·ãäv*–ý‡Æ2Õ\º.úªyzkÑòBÿ¾ˆÿÿÿÿÿÿÿÿÿÿ3CE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License alonˆ¾v™æd­ß> ¯|òñ1[i,QA†ù×t”F½”•5ŽM fŸúf¡$`i–G—Á []7ÉÇ p‘&²·ÎºÕ¸²È £Á }8ðLq3Š‘lÚ³PqþZᯠ.KWQ*âæ»lúÿ‘§‚jŒÞf-á¥/Ö1/í@šœ9eZ5“þrlbJ5êO‡^¦ºXÑÅSšˆ½r“·í¦<(¿Q@nߘÀ+¨lºOvÔÄY¼9(4»èÀ‰j?"õ™îg³É~™ð3f,&ïÿ\j»lˆ¹j#7 ᕤ0 y’*³o™ÜO©çÎ?¸§Šk]ÖÏ}ÓvnÊ~ì©^äL:mZTÆ’uYÞÿÿÿÿÿÿÿÿÿÿ4g with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. µ„²·ó#.lÝ$økò Çe—ðÁ¸Û«ÎpKöƒ³îö[xÁïÄ/ùW¶8,Ù¢è‡?`Ýc³aiùÕè34ÜÌDš|—Vø€DLáäýhçK.'}i?ë†w$òD†Wš…€áÕĽ¿÷gƒû•ÄZ0ŠÿœhGǶ*vÛß)ƒ³š ùkI4š¾Gb©úé ã0çSƒNß 2È)øa‹¼N3EWg”{&Õß忢ÝMç±oM³0[üªÊËXÊñ7eÃRÕÒxJnK¸Eæ¹lŒ¿qðÆeë;]WF8\þ4øs„ŒÓñAÊÊYMt뙘˜>&¶Ueu8+¾7'Ÿ\Î5ù¡ ÿÿÿÿÿÿÿÿÿÿ5This library is to encapsulate CD-ROM reading and control. Applications wishing to be oblivious of the OS- and device-dependant properties of a CD-ROM can use this library. Some support for disk image types like BIN/CUE and NRG is available, so applications that use this library also have the ability to read disc images as though they were CD's. Immediate uses are VCDImager, a navigation-capable Video CD plugin and CD-DA plugin for the media player xine. A sample utility, cdinfo, is included which displayings CD info. If libcddb (http://libcddb.sourceforge.net) is available, the cdinfo program will display CDDB matches on CD-DA discs. £Úö’©@?í8i?‡]´”T,Õž¾ZÝ1 XzkñZ€™Ò-,LФA´MN\šMmdE•§u2”¥êQŽ^më†Ì‡ÅܬõQÅ4kÅ*ð|GÿÚ35OÞC a!U×âÅ|AûƒáP^ÏD?QyKÛkë¦ ¾s4mÊÄIõlO6MΔ–6\²§²G ì’ÅÄðNó®‚1Á©.–°çô>?Ù]|níšGÓV~OûñÑdxI«Û;× mä[Ñ·§ÅñWXþ[~ÈÏ•ëä¬AȨ¥gWÐ qʲ»êu;ËËûnp£Tm{2ÈC=qfôì¯Û±?ζ¥D ´åûXð;Êÿÿÿÿÿÿÿÿÿÿ6‡¥Ý÷$õ”ò9zõôW.§Aj|¯0ç9"uae¾ÂßæC}¡ï]l1"E¬Áéÿÿÿÿÿÿÿÿÿÿ7À‡¸÷Ñõ:]”Õõæô,mAKwa^Oºe“eÂæCÌÏãKfŠIÕäÁ1ÿÿÿÿÿÿÿÿÿÿ8lÔð|÷Ûõ´a „õãôصýøAéõ§ž»-e˜ÂµæCz”ßîc¢ö{Áÿÿÿÿÿÿÿÿÿÿ9ý±`÷.õΠ+õôçÀ2AÈ ;áüñHe$ÂlæC¨f{ÕáŽf3ÁUÿÿÿÿÿÿÿÿÿÿ@°wDŸ÷‹õ͙̼õËô}îˆ#A‡y¥•€\xe<ÂDæCÃæanÐ:r²ó÷ÁÿÿÿÿÿÿÿÿÿÿA!Ôú÷~õc6aõ?ôB$µéA¦rÓË=Hºe€ÂæCrˆ“ÊëÜ žc¿ÁÜÿÿÿÿÿÿÿÿÿÿB’¼dT÷|õ«Ù¬üõ>ô9eȨA4PpGdXs²eYÂëæCPNaÎgÁ©ÿÿÿÿÿÿÿÿÿÿCÙô1÷‰õvSõÊô¯õbA[¾)´ç•×eåÂ2æCáj¼£Dó:^/ÁqÿÿÿÿÿÿÿÿÿÿD÷á¹÷xõ> Öõ<ôóß oA‚HÄ;ø¨¾ÛñeöÂæC„ñ9 ðùM‰ÊÁCÿÿÿÿÿÿÿÿÿÿEf„–Ü÷õª‘§yõÈôÌ1¥A£C UP+ù=”eJÂÞæC5ŸË¨Ë5(‚Á›ÿÿÿÿÿÿÿÿÿÿFÕ*&r÷õb~j–õÉô·TLäA1a©ÙqLéô;e“¨æCe_Ö^ ´ZÁîÿÿÿÿÿÿÿÿÿÿGDO¶÷zõÌÑÇ9õ=ôˆžq.Ajg·ÙÏ®^e/ÂqæC¦}äÁd0&Œ$Á6ÿÿÿÿÿÿÿÿÿÿH>[ÁÓ÷põBí^hõ8ô|¶Ÿ»A²óf1ëp–weµÂÂæCsÈ“Uì½ ÁŠÿÿÿÿÿÿÿÿÿÿI¯>Q¶÷…õìBóÇõÌôC|¢qA“=™h7pe ÂæC¦añ×[t —ÅÁRÿÿÿÿÿÿÿÿÿÿP¬.N÷`õérÒ õ0ôE\œ A‚0©(+fe3ÂUæCR„N$q×mwÁÿÿÿÿÿÿÿÿÿÿQ=KÞc÷•õGÝ¥õÄôz–¡ÆA=‰þn¬*oÍeÂŒæCãê¼€J1[–KÁÝÿÿÿÿÿÿÿÿÿÿRŽånÍ÷—õ2²JõÅô×܇A¯«]âM¬eVÂúæCÁfaMÞø~Ó;“Á¨ÿÿÿÿÿÿÿÿÿÿS€þ¨÷bõ!åõ1ô>áMAŽ “Œ%Î8âÉeêÂ#æCp“éåÿ«ÛÁpÿÿÿÿÿÿÿÿÿÿTë¸ ÷“õ Õ`õÇôËm@A³éži™¬ïeùÂæC“FQRÁ|>ÁBÿÿÿÿÿÿÿÿÿÿUzÝœE÷fõŽz¹Ïõ3ôô§%ŠA8¸'ðÁÞJŠeEÂÏæC¤ýäâjò*íìvÁšÿÿÿÿÿÿÿÿÿÿVÉs,ë÷dõF•t õ2ôæXËAªš„|àe΃%eœÂ¹æC†q9/þ;AeA®ÁïÿÿÿÿÿÿÿÿÿÿWX¼Ž÷‘õè:ÙõÆô°,eA‹‘JHæ‰e@e Â`æC7Ë‹ÅÝ9IÑæÁ7ÿÿÿÿÿÿÿÿÿÿX"ËJ÷›õf@ÞõÃôD‹”A)àÞàÂWáieºÂÓæC⪼MPåòyÁ‹ÿÿÿÿÿÿÿÿÿÿY³g[/÷nõÈ©íqõ7ô{ζ^Aë­A e æCSÄN»v¶kÉb1ÁSÿÿÿÿÿÿÿÿÿÿ`‹ÅS÷@õ€Rõ'õ ô —¦:AíñW¶^²De"ÂfæC¾ì{µ|U%Áÿÿÿÿÿÿÿÿÿÿa Ãx÷µõ.ýXˆõÔô4]›ðAÌúË9—T!ežÂ¿æC‚‰«š- ”JÁÞÿÿÿÿÿÿÿÿÿÿb©sÖ÷·õæ•gõÕôOæ±A^Øhµ?ð ŽeGÂÉæC-TÜ?SF9’Á«ÿÿÿÿÿÿÿÿÿÿc8kã³÷BõH½8Èõ!ôpÖÛ{AÓ¦Û—sN{ëeûÂæCœ`¦xµ>­©ÚÁsÿÿÿÿÿÿÿÿÿÿdÌS;÷³õIõ3Mõ×ô…¦"vAèÀÜÉÛ<ï5ÍeèÂ%æCùû#×°¿j“~?ÁAÿÿÿÿÿÿÿÿÿÿe]6^÷FõçZžâõ#ôºl¼AÉ˧s¿¨Ó¨eTÂüæCH•Ñs‹Y¿îwÁ™ÿÿÿÿÿÿÿÿÿÿfî˜1ð÷Dõ/µS õ"ôÁ-býA[é±+RظeŠæCj ¾y7C¯Áìÿÿÿÿÿÿÿÿÿÿgý¡•÷±õþ¢õÖôþç_7AzâEú[ÿübe1ÂSæCÛwþ$vÓçÁ4ÿÿÿÿÿÿÿÿÿÿhéÖQ÷»õ&góõÓô ϱ¢AØ“ë”!xKe«ÂàæCÂ‰Ž¬û+·ðxÁˆÿÿÿÿÿÿÿÿÿÿi”ŒF4÷Nõ¡‰Ê\õ'ô5ŒhAù˜%úºüfž.eÂ9æC¿¬{*—S›`0ÁPÿÿÿÿÿÿÿÿÿÿp—œY„÷«õ¤¹ë‘õÛô3%²Av (ò'=yÅZe-ÂwæC/ŽTÿ1‘JàñöÁÿÿÿÿÿÿÿÿÿÿqùÉá÷^õ F>õ/ô ïßAW朾>#?e‘®æCžà¦[ w2Ìa¾ÁßÿÿÿÿÿÿÿÿÿÿrµWyO÷\õÂù‹Ñõ.ôw®òžAÅ#E®Ù.êeHÂØæC¼l{–ž¾YDÌfÁªÿÿÿÿÿÿÿÿÿÿs$2é*÷©õlV&~õÚôHdÏTAä(‹~Zi õeôÂæC ‰2¥X!h\.ÁrÿÿÿÿÿÿÿÿÿÿtÐ ¢÷Xõm-ûõ,ô½6YAs;ñlJÈBÓeçÂ4æCh™ RuV‹ËÁ@ÿÿÿÿÿÿÿÿÿÿ¡œúõþ6¹ô_$%éï8r˪ºeýw줈ÊTÜõž wÿÿÿÿÿÿÿÿÿÿ0w ŸõõP™¼ôô`î#ïyÓ¥'€í\ee¼ýÙwìæ÷no:²H ØwÿÿÿÿÿÿÿÿÿÿƒÙ¼1÷õ˜vÙSõô¯ebï‹[p)çý•Êeeý¯wì7j*£ûóæ:= ­wÿÿÿÿÿÿÿÿÿÿ¼,Tõ6Ùtüô$eX¨ïªP¾G®dºs¯eÙývwì†ØÀž­Ø uwÿÿÿÿÿÿÿÿÿÿæ„ÞÜóõ7‘y÷ôÑ¡¥ï=CÄUâ+=‰eÊýCwìãŸ]¨tÊ(z= GwÿÿÿÿÿÿÿÿÿÿwáN¹õ™>ÒÖôîßœoïH ;J¨\ÛìevýšwìRñ¯ Où²êu ŸwÿÿÿÿÿÿÿÿÿÿÄOþõQÑ9ô•žá.ïŽj©·kÏLCe¯ýìwìp}rÁÛ0ÙŒG­ êwÿÿÿÿÿÿÿÿÿÿU*nrñõÿ~²–öôªTÜäï¯agÙÃL ô&eý5wìÁ€eàÖ¡ ×å 2wÿÿÿÿÿÿÿÿÿÿ/>¶ûõqB+Çóô^|2qï ó+hÕpe‰ý†wì¦÷ñh[‹ ôz Žwÿÿÿÿÿÿÿÿÿÿ ¾[‰Óõßí†hôa¶»ï,=fƒë’–je5ý_wì¥ÈUS½ó d2 Vwÿÿÿÿÿÿÿÿÿÿ½K–cëõÚݧ¥ûôg–1Æï£‰0n*Íeýwì5ê*€õ1ê[õô wÿÿÿÿÿÿÿÿÿÿ,.õtr ôX\ ï‚‚þ¶©Ê+{e³ýÈwì„„Ø$Î×’we¼ ÙwÿÿÿÿÿÿÿÿÿÿŸ€¶¨õ¼Çåô#qMï ]Œ—ÎÚâÔejý¾wì¦éZùÿÈd ¬wÿÿÿÿÿÿÿÿÿÿå&Íéõ2jJúô×L‡ï1«“â?M±eÖýgwìf÷MaøÓX, twÿÿÿÿÿÿÿÿÿÿúÝÔEõzaÏ ôé§µŠï¦¸éðsõR-'ô—6:ïsñËW¼²Ye¢ýûwìhìíµ/|ª%g½ Úwÿÿÿÿÿÿÿÿÿÿ"¸k«³<õÕ½àÈômÖK{ïáÓhÛ%s¬{öe{ýwìJ`0x»µÁ­Êe ¯wÿÿÿÿÿÿÿÿÿÿ#);ÖÉõ{MgêôRv±ïÀئµðë“eÇýTwìûÂÜ€S¹Z- wwÿÿÿÿÿÿÿÿÿÿ$Ý6É^8õzZFâô§l¼ïWËܧÁ¿JÓµeÔýawìž•Gs4Yí¿È Ewÿÿÿÿÿÿÿÿÿÿ%LSY;ÍõÔõëMèô˜¦²vïvÀÉi< 5Ðehý¸wì/ûµ×¿•“€ wÿÿÿÿÿÿÿÿÿÿ&ÿýé•Ïõ&¢éôãçÏ7ïäâ±EH[üe±ýÎwì wh›vþ°X èwÿÿÿÿÿÿÿÿÿÿ'n˜yð:õ²µ‹ ôÜ-òýïÅé+àØZe ýw켚¾ †7  0wÿÿÿÿÿÿÿÿÿÿ(Œ40õ<‰\ô(hïg˜ëúü„ž3e—ý¤wìi¬í*(¬› Œwÿÿÿÿÿÿÿÿÿÿ)…éžQÅõ’&¿óìôÏ!¢ïF“%” ÃxVe+ý}wìØÂŽûÔ·“Ç Twÿÿÿÿÿÿÿÿÿÿ0†ùá õ—ž>ôïßïÉ(œ=¾Ü#"eý3wìHà0[µwÍÌ wÿÿÿÿÿÿÿÿÿÿ1œ„Õõ9¹3‘äô.%"ïè æò•=›ÅGe­ýêwìùŽÂÿŽ‘µà’I Ûwÿÿÿÿÿÿÿÿÿÿ2¤2¡*×õñVþ~åôUd_Tïz(E~´Z‹ èetýœwìÛ2XÞh?‘ ®wÿÿÿÿÿÿÿÿÿÿ35W1O"õ_ùSÑôj®bžï[#‹ÙÌêeÈýEwìjlí–!¾¦D¯Ù vwÿÿÿÿÿÿÿÿÿÿ4ÁoÃÇÓõ^±XTçôŸÞ›“ïÌ0ñP–m¤«eÛýpwì÷h9•´òzx< Dwÿÿÿÿÿÿÿÿÿÿ5P S¢&õðõûô ¦Yïí;?lø*BÎegý©wì¾™š®RŠVèt œwÿÿÿÿÿÿÿÿÿÿ6ã¤ã $õ8ñ8ôÛUÛïœàÙr:‹ae¾ýßwìœGP:›áÞE¬ éwÿÿÿÿÿÿÿÿÿÿ7rÁsiÑõ–^•»æôäŸæÒï^RŽqñ}meýwì-{µô}™òÕä 1wÿÿÿÿÿÿÿÿÿÿ8Õ­Ûõb êãô·GïücÆ_™Õ£é-e˜ýµwìøÎÂ`‰ð³^ö{ wÿÿÿÿÿÿÿÿÿÿ9™°”È.õ¶Í¡Eô/}5ïÝh11VäHe$ýlwìI 0IJËrf3 Uwÿÿÿÿÿÿÿÿÿÿ@Ôv°N‹õašÍÒËôµì}œï’.u«Ë¢xe<ýDwì"R7Ñ·Í¢Nó÷ wÿÿÿÿÿÿÿÿÿÿAE +~õÏ5`}?ôŠ&@Vï³àHPDe€ýwì“<ÅuŒ+Úbc¿ ÜwÿÿÿÿÿÿÿÿÿÿBö½…|õÚ­’>ôñg=ï!5C—"/@²eYýëwì±°¸â±êÎg ©wÿÿÿÿÿÿÿÿÿÿCgØà‰õ©u=ÊôέÝï>ùЬk×eåý2wìÞê#ÉÆ^/ qwÿÿÿÿÿÿÿÿÿÿD“àòhxõ¨= ¸<ô;ÝùÐï—-÷ëÆã¦%ñeöýwìeEo³—ø‰Ê CwÿÿÿÿÿÿÿÿÿÿE…b õ’¦ÈôÄï¶&9…n`áÔeJýÞwìÔ+¬èåÔ‚ ›wÿÿÿÿÿÿÿÿÿÿF±+Ò£õÎ}køÉôV¹[ï$š Oñ ;e“ý¨wìö§@Ú8!Ž\´Z îwÿÿÿÿÿÿÿÿÿÿG NBÆzõ`ÒÆW=ô@œ„‘ïTgç„¶ì^e/ýqwìGɲ~Çöp$ 6wÿÿÿÿÿÿÿÿÿÿHZZ5põîî_8ô´´jï§~À¶ hhweµýÂwì’|Åê‹JÜÜ ŠwÿÿÿÿÿÿÿÿÿÿIË?¥g…õ@Aò©Ìô‹~WÎï†uا#/Že ýwì#7N°¬¤ð—Å RwÿÿÿÿÿÿÿÿÿÿPÈ/º×`õEqÓd0ô^i³ï çÐ:â0Õfe3ýUwì³0› ½‹ wÿÿÿÿÿÿÿÿÿÿQYJ*²•õëÞ~ËÄô²”Tyï(ì;’aw3eýŒwì^ê?-ÆÅ§–K ÝwÿÿÿÿÿÿÿÿÿÿRêäš—õ#1³$ÅôÉÕ)8ïºÎn2³gú¬eVýúwì Ò7ò¹®/;“ ¨wÿÿÿÿÿÿÿÿÿÿS{ ybõž‹1ôöòï›Å \… Éeêý#w쑼ÅV‚éÖ«Û pwÿÿÿÿÿÿÿÿÿÿT¹øñ“õŒÖÇôoíÿï ÖÚNWÊRïeùýwìô'@ù6ã‚=|> BwÿÿÿÿÿÿÿÿÿÿUÜh”fõ"y¸¡3ô<¥Ð5ï-Ý ÿIÆ´ŠeEýÏwìEI²] úìv šwÿÿÿÿÿÿÿÿÿÿV­rØ:dõê–uN2ôGä­tï¿ÿ·¬Þ.Ö}%eœý¹wìgÅo™Ì‘™A® ïwÿÿÿÿÿÿÿÿÿÿW<H_‘õD9ØáÆôx.¾ïžôyÂv­‘›@e ý`wìÖ«4¢*éµÑæ 7wÿÿÿÿÿÿÿÿÿÿXF?››õÊA°ÃôŒ~+ï<…힉OieºýÓwìê *§Ãòy ‹wÿÿÿÿÿÿÿÿÿÿY×f¯þnõdªì7ô³ÌCáïŽ#}6 ù eý wì²pA»5b1 Swÿÿÿÿÿÿÿÿÿÿ`ïħÌ@õ,QôI ôÕS…ïø”6‡ˆ_FLDe"ýfwì_X- ÷‹…Ù wÿÿÿÿÿÿÿÿÿÿa~¡7©µõ‚þYæÔôü_nOïÙŸøé ܪ!ežý¿wìî6ß®Ìmýõ”J Þwÿÿÿÿÿÿÿÿÿÿb͇·õJ” Õô‡ïK½[e»cŽeGýÉwì̺cX¤–}9’ «wÿÿÿÿÿÿÿÿÿÿc\jbBõä¾9¦!ô¸Ô.Äïj¶• ©8V…ëeûýwì}ÔðÇcBîQ©Ú swÿÿÿÿÿÿÿÿÿÿd¨Råê³õåö2#×ôM¤×Éïý¥ïåw÷ËÍeèý%wìOuh×Hºo~? Awÿÿÿÿÿÿÿÿÿÿe97uFõKYŸŒ#ôrnêïÜ®!wMô°-¨eTýüwì©!‡Ìì®ÂCîw ™wÿÿÿÿÿÿÿÿÿÿfŠ™Å!Dõƒ¶Rc"ô /—BïNŒ‚ûl“ äeýŠwì‹­Zxg©ËC¯ ìwÿÿÿÿÿÿÿÿÿÿgüUD±õ-ÿÌÖô6媈ïo‡L•Äçbe1ýSwì:è¥CÑçÓç 4wÿÿÿÿÿÿÿÿÿÿhaè"€»õ£%fÓôÂÍDïÍöØD,49†Ke«ýàwìïvß1Ë ûKðx ˆwÿÿÿÿÿÿÿÿÿÿið²åNõ ŠË2'ôýy×ïìý*„·~`.eý9wì^-•ðêƒg`0 Pwÿÿÿÿÿÿÿÿÿÿpó­U«õºêÿÛôû'Gªïco"va;Ze-ýwwìÎ:@Vfšñö wÿÿÿÿÿÿÿÿÿÿqbø=0^õ¦GP/ôÄíz`ïBdÕL±õ&Ý?e‘ý®wìTðäm€â0a¾ ßwÿÿÿÿÿÿÿÿÿÿrÑVž\õnúŠ¿.ô¿¬!ïÐFvÀ’6eHýØwì]Ø-)ùI‰¸Ìf ªwÿÿÿÿÿÿÿÿÿÿs@3û©õÀU'Úô€f:ëïñM¸®8qòõeôýwìì¶ß¯ñ”\. rwÿÿÿÿÿÿÿÿÿÿt´ ïsXõÁ,•,ôuÃæïf^¼t^мÓeçý4wì‰-Z"v¥¥ª‹Ë @wÿÿÿÿÿÿÿÿÿÿ˜Uóõµ<ÿ!÷ô-(ª>‚o¼ÎÉÅ„e@§†:ÛûÖÇ7¬GQÿÿÿÿÿÿÿÿÿÿ qÅzóõõ“RŽ÷ôôâ—ô‚N„r aF]bee¼@Ù§†‹þ)_í!O€HGØQÿÿÿÿÿÿÿÿÿÿºßuÔó÷õÓ|Ÿa÷õôi£êµ‚ܦÑ,@!M«Êee@¯§†©rô’yè$=G­Qÿÿÿÿÿÿÿÿÿÿ+ºå±óõ}Ó2Î÷ôViׂý­Bè¢ M¯eÙ@v§†6B\$­ØGuQÿÿÿÿÿÿÿÿÿÿß‚9óóõ|›9K÷÷ô£.r‚j¾eP¤í«‰eÊ@C§†}‡ƒ™öz=GGQÿÿÿÿÿÿÿÿÿÿNç‡\óõÒ4”ä÷ôœÓ¸‚Kµ«> nìåìev@š§†Ìéq=Íâp6êuGŸQÿÿÿÿÿÿÿÿÿÿýI7òóõÛY ÷ôç’nù‚Ù—²- ü,Ce¯@짆îe¬ðY+¾G­GêQÿÿÿÿÿÿÿÿÿÿl,§—óñõ´tô¤÷öôØXS3‚øœÆÜ…Š»Ê&e@5§†_ ^TbÍc’×åG2Qÿÿÿÿÿÿÿÿÿÿ8ÐSóûõ:Hmõ÷óô,p½¦‚ZíR m®eNe‰@†§†Š¾)Àê@I>ôzGŽQÿÿÿÿÿÿÿÿÿÿ ‡]@6óõ”çÀZ÷ôº€l‚{æœcÅ-"¨je5@_§†;ÐÛdѦ1d2GVQÿÿÿÿÿÿÿÿÿÿ„M_†óëõ‘×á—÷ûôš¾‚ôt‘kXì=óe@§†«òô±w*(iõôGQÿÿÿÿÿÿÿÿÿÿ(Ïãóõ?xL8÷ô*PƒÛ‚Õ_ðoz{e³@ȧ†œLÌPEe¼GÙQÿÿÿÿÿÿÿÿÿÿ¦†Móõ÷—×÷ôQþš‚G]ü‰ÑjÜÔej@¾§†8ÛØØ;ÍÈdG¬Qÿÿÿÿÿÿÿÿÿÿ7ãï(óéõY8,x÷úônÛÃP‚fV2çy‹-:±eÖ@g§†‰~)|ããCáX,GtQÿÿÿÿÿÿÿÿÿÿÃÛ óõXp'ý÷ ô›«:]‚ñEHõ5ÄŒt—eÅ@R§†ìå¬ÓWéßÉGFQÿÿÿÿÿÿÿÿÿÿR¾ÅóíõöߊR÷øô¤a—‚ÐN†›GË’òey@‹§†]‹^wloóGžQÿÿÿÿÿÿÿÿÿÿá=kóïõ>0G½÷ùôß zÖ‚Bl%¼ Û[]e @ý§†ƒºøÆ{²YGëQÿÿÿÿÿÿÿÿÿÿpu­óõŸê÷ ôàêG‚cgëy£œ½8e@$§†Îiqà |W"G3Qÿÿÿÿÿÿÿÿÿÿ aÚÊóõ£sC÷ô©‰‚Á¨ü‡B9e†@—§†ÜŠK­VûŽGQÿÿÿÿÿÿÿÿÿÿ›J¯óåõ° Þì÷üô+”C‚à±ÆTßte:@N§†ª²ô.pK.בÆGWQÿÿÿÿÿÿÿÿÿÿ £¦BóËõø÷ƺ÷ëô[Q„'‚¤<êQKjõVXk÷ôd›¹í‚$ jRBÒ ŒYe¢@û§†öô3„­ghg½GÚQÿÿÿÿÿÿÿÿÿÿ"mbVó<õž·¦ú÷ôÚĬ‚¶.ÉÞcµEöe{@§†ÔxîI9®ŸÊeG¯Qÿÿÿÿÿÿÿÿÿÿ#ò3óÉõ0 U÷êô ùf‚—%°Ë6[£“eÇ@T§†eíH{³Z-GwQÿÿÿÿÿÿÿÿÿÿ$ä0»ó8õ1PÐ÷ôÕ`k‚6}¢‡yúíµeÔ@a§†™B¶B/ÈGEQÿÿÿÿÿÿÿÿÿÿ%uUÞóÍõŸÿ­÷èôêª=¡‚!=³Ì/ú½ Ðeh@¸§†±ãkæ¤W¡€GQÿÿÿÿÿÿÿÿÿÿ&Æû póÏõW`÷éô‘ë@à‚³@­Âe±@Χ†“o¶+m<)°XGèQÿÿÿÿÿÿÿÿÿÿ'Wž°ó:õù¿Í?÷ô®!}*‚’Þ.¦ê$e @§†"D"‹D G0Qÿÿÿÿÿÿÿÿÿÿ(-ŠÇÑó0õwƒTn÷ôZ “¿‚0eJÿN:4 3e—@¤§†÷´3ªn©GŒQÿÿÿÿÿÿÿÿÿÿ)¼ïW´óÅõÙ,ùÁ÷ìôeîu‚n„‘æ¹sFVe+@}§†FÚÁ¿‘à…“ÇGTQÿÿÿÿÿÿÿÿÿÿ0¿ÿHó õÜØ ÷ôcゞü‰™{xl"e@3§†Öøîj7lþGQÿÿÿÿÿÿÿÿÿÿ1.šØaóÕõr³u£÷äô\)­Â‚¿÷G÷Óû+ûGe­@꧆g–Î ŠwÒ’IGÛQÿÿÿÿÿÿÿÿÿÿ24hÏó×õº\¸L÷åô'hЃ‚-Õä{òœ;2èet@œ§†EÁ˜CZ?‘G®Qÿÿÿÿÿÿÿÿÿÿ3 Qøªó"õóã÷ô¢íI‚ Þ*Z|ÔeÈ@E§†ôt3§£¥dv¯ÙGvQÿÿÿÿÿÿÿÿÿÿ4øi "óÓõ»f÷çôíÒD‚›ÍPPÝš«eÛ@p§†‘ﶯ0Hxôƒk²À‚vÈâ’déð³²eY@맆/¨Æ‰šùsØÎgG©QÿÿÿÿÿÿÿÿÿÿC^ÞÉó‰õâF÷Êô¼¡ ‚WÃ,üÌj·U×eå@2§†žÆ4-¡ ô^/GqQÿÿÿÿÿÿÿÿÿÿDªæ;óxõã7MŠ÷<ôIÑv‚ÀÐVî€%ñeö@§†û]±‚_ʉÊGCQÿÿÿÿÿÿÿÿÿÿE;ƒ«èóõM˜à%÷ÈôvKÍ‚áÛ˜€(¦Qý”eJ@Þ§†J3C&.ó'æ‚G›QÿÿÿÿÿÿÿÿÿÿFˆ-Fóõ…w-Ê÷Éô Z6Œ‚sù; ÁA4;e“@¨§†h¿žëº:Ln´ZGîQÿÿÿÿÿÿÿÿÿÿGH‹#ózõ+Ø€e÷=ô2 F‚Ròõb¡BÒ^e/@q§†ÙÑlOÜ4B$G6QÿÿÿÿÿÿÿÿÿÿHc\üçópõ¥ä4÷8ôƸåÓ‚ðƒa³IfØVweµ@§† dÛ QîGŠQÿÿÿÿÿÿÿÿÿÿIò9l‚ó…õ K´›÷ÌôùrØ‚ш¯Ýá埰e @§†½ é2·f—ÅGRQÿÿÿÿÿÿÿÿÿÿPñ)s2ó`õ{•V÷0ôÿRæd‚^¢Õ|$€ëfe3@U§†-(ƪ”;¹GQÿÿÿÿÿÿÿÿÿÿQ`LãWó•õ Ô8ù÷ÄôÀ˜Û®‚l»Ô§Ç e@Œ§†œF4¯Ý•–KGÝQÿÿÿÿÿÿÿÿÿÿRÓâSùó—õh;õ÷Åô»Ù¦ï‚í3Ï7õÀ×ĬeV@ú§†¾ÊéÃ;l;“G¨QÿÿÿÿÿÿÿÿÿÿSB‡ÃœóbõÆ”X¹÷1ô„›%‚Ì8Y]C"Éeê@#§†¤gò1«ÛGpQÿÿÿÿÿÿÿÿÿÿT¶¿1ó“õÇÜS<÷Çôqcb(‚[+{K 1lïeù@§†j?žÈ´ø@|>GBQÿÿÿÿÿÿÿÿÿÿU'Ú¡qófõisþ“÷3ôN©_â‚z µ%¹vŠŠeE@ϧ†ÛQll8#ìvGšQÿÿÿÿÿÿÿÿÿÿV”tßódõ¡œ3|÷2ô5è"£‚詘èfC%eœ@¹§†ùݱ¡×S«A®GïQÿÿÿÿÿÿÿÿÿÿWºó‘õ3žÓ÷Æô "i‚É ØÇ0k!¥@e @`§†H³C 1+‡ÑæG7QÿÿÿÿÿÿÿÿÿÿXö~ó›õ‚÷Ãôþ ñü‚kxLØOÿ!ieº@Ó§†4‘¨¼+òyG‹QÿÿÿÿÿÿÿÿÿÿYî`fónõ/ ª-÷7ôÁÀÌ6‚Js‚xpÌ¸Ç e@ §†,hÆ5“Zyb1GSQÿÿÿÿÿÿÿÿÿÿ`ÖÂn)ó@õg[²{÷ ô±™ÜR‚¯i—‚ΙörDe"@f§†Á@ó;uGëGQÿÿÿÿÿÿÿÿÿÿaG§þLóµõÉôÔ÷ÔôŽSᘂŽbYìf±”!ež@¿§†p.ŸNv?Ç”JGÞQÿÿÿÿÿÿÿÿÿÿbô Nâó·õÒ;÷ÕôõœÙ‚@ú`G}¡]ŽeG@ɧ†R¢ÜRÚ¿TO9’G«QÿÿÿÿÿÿÿÿÿÿcelÞ‡óBõ¯´”÷!ôÊØ¡‚=K4ïþæ»ëeû@§†ãÌ.öáY,c©ÚGsQÿÿÿÿÿÿÿÿÿÿd‘T,ó³õ®üt÷×ô?¨X‚ªXN£±GõÍeè@%§††W«YUSx]~?GAQÿÿÿÿÿÿÿÿÿÿe1¼jóFõSÙ¾÷#ôbeÔ‚‹S€r 2¨eT@ü§†79YýnµqîwG™Qÿÿÿÿÿÿÿÿÿÿf³Ÿ ÄóDõȼQ÷"ô{#•‚q#þ*UÚe@Ч†µ„0ú|kùC¯GìQÿÿÿÿÿÿÿÿÿÿg"úœ¡ó±õf¹þ÷ÖôDé%_‚8zí‚ÖW<be1@S§†¤Ûv”ÁšÕÓçG4QÿÿÿÿÿÿÿÿÿÿhXîëeó»õè/ ¯÷Óô°ÁËÊ‚š yAjò‰¸Ke«@৆qnI9yðxGˆQÿÿÿÿÿÿÿÿÿÿiÉ‹{óNõF€÷'ô ö‚»·/ÂqÎ^.e@9§†Àó¤rñAU`0GPQÿÿÿÿÿÿÿÿÿÿpÊ›d°ó«õC°¬Í÷Ûô‰+È}‚4’º'_°ÑZe-@w§†P"ÜqÔ}X.ñöGQÿÿÿÿÿÿÿÿÿÿq[þôÕó^õíb÷/ô¶áõ·‚™tI÷3–ã?e‘@®§†áL.Õï› a¾GßQÿÿÿÿÿÿÿÿÿÿrèPD{ó\õ%ðÌ÷.ôÍ ˆö‚‡»×ÅÖT†*eH@ا†ÃÀó{RKŠÌfGªQÿÿÿÿÿÿÿÿÿÿsy5Ôó©õ‹_a"÷Úôòjµ<‚¦°«~×ÁÌõeô@§†r®¼@´3¦\.GrQÿÿÿÿÿÿÿÿÿÿt &–óXõŠj§÷,ôL1‚1£c¹2˜`‚Óeç@4§†5„ô¾g˜‹ËG@Qÿÿÿÿÿÿÿÿÿÿü¡Îõ?þOôå*_,zê÷Žze6)Û$D±0çP4ÿÿÿÿÿÿÿÿÿÿmp1«õõ·SàôôÚàbK,[áAp_ Eœee¼Ù6)jJàŠÖŸ|HØ4ÿÿÿÿÿÿÿÿÿÿÞÞ÷õžõô¡¡ ,ÉÃâü~jUUÊee¯6)HÆ¢-ôô=­4ÿÿÿÿÿÿÿÿÿÿO»`õÑÐ3 ôžk"À,èÈ,’Ö鳯eÙv6)ù¨P‰%ùŒØ­Øu4ÿÿÿÿÿÿÿÿÿÿ»ƒãèóõИ8%÷ôkÛÍ,ÛV€š¦³ý‰eÊC6)œ3Õ&‘óØæz=G4ÿÿÿÿÿÿÿÿÿÿ*æsõ~7•ŠôTÑæ,^Иî2%ôìevš6)-]'‚ª ÊêuŸ4ÿÿÿÿÿÿÿÿÿÿ™HÃ#õ¶ØXeô/›F,Ìò;bBäÒCe¯ì6)ÑúO>ÜËBG­ê4ÿÿÿÿÿÿÿÿÿÿ-SFñõwõÊöôZ¦Œ,íùõ »Á£4&e56)¾¿ë:³n×å24ÿÿÿÿÿÿÿÿÿÿr9$‚ûõ–Kl›óôärH,OˆaÝSå}°e‰†6)k ·™ÂôzŽ4ÿÿÿÿÿÿÿÿÿÿ ã\´çõ8äÁ4ôÛ¸uÓ,nƒ¯³ûf:Vje5_6)ÚdÛ¶Qáîd2V4ÿÿÿÿÿÿÿÿÿÿàL«Wëõ=ÔàùûôݘK®,ᢻf§% e6)JF¢Ýø•õô4ÿÿÿÿÿÿÿÿÿÿq);2õ“{MVôâRvd,ÀlÕÎ$bë{e³È6)û(Pª+;€¹e¼Ù4ÿÿÿÿÿÿÿÿÿÿ‡‹œõ[”€¹ô™ %,R8ÏYïCr"Ôej¾6)Ù¤g¿òë1Èd¬4ÿÿÿÿÿÿÿÿÿÿSâùéõõ;-úô¦Ù6ï,s37GÀ5ıeÖg6)hÊÄ“X,t4ÿÿÿÿÿÿÿÿÿÿ§Úéqõôs&“ ôS©Ïâ,ä {% ”Š—eÅR6) Qúl0Ç#ÉF4ÿÿÿÿÿÿÿÿÿÿ6¿yíõZÜ‹<øôlcò(,Å+µK£ Ólòey‹6)¼?È ø¿ž4ÿÿÿÿÿÿÿÿÿÿ…ɺïõ’3FÓùô"i,W Ç‚kÃ¥]e ý6)ž³ÕŸ1Ô‡²Yë4ÿÿÿÿÿÿÿÿÿÿtYßõ<œë| ô(è²£,vØ©*è„C8e$6)/Ý'¡¤×¬«"34ÿÿÿÿÿÿÿÿÿÿn`.õ² r-ôÜÀ\6,ÔsLxÂÌZÇe†—6)úhP5,Z†Ž4ÿÿÿÿÿÿÿÿÿÿÿ¾~åõß‚üôã aü,õx‚jO!te:N6)K¢‘¼þ+‘ÆW4ÿÿÿÿÿÿÿÿÿÿ ǧ¶LËõTôÇÔëô“Sq˜,b—ìÔS”õú[j{ô¬™LR,1iY‚|™rYe¢û6)@e;ʸëg½Ú4ÿÿÿÿÿÿÿÿÿÿ"ål–‡<õ2´§”ôר1,£Kú]þ»öe{6)5̸ö^YÓcÊe¯4ÿÿÿÿÿÿÿÿÿÿ#t âÉõœ ;êôè Ù,‚@4`õ}C]“eÇT6)„¢JRe¿«OZ-w4ÿÿÿÿÿÿÿÿÿÿ$€1ôj8õS¾ôbõÔ,SNr¹2âµeÔa6)á9ÏýѵÿqÈE4ÿÿÿÿÿÿÿÿÿÿ%TdÍõ3ü¬èô"¨È,4X€±¥õÐeh¸6)PW=YêS‡]€4ÿÿÿÿÿÿÿÿÿÿ&¢úÔ¡ÏõûaþéôYéµ_,¦z#0Öµ<e±Î6)rÛà”~šìÕ°Xè4ÿÿÿÿÿÿÿÿÿÿ'3ŸDÄ:õU¼ÌQôf#ˆ•,‡qíþ˜UòÚe 6)õ0E|”ù 04ÿÿÿÿÿÿÿÿÿÿ(I‹30õÛ€Uô’ f,%y/pq,^3e—¤6)e¤Íñ¾UŒ4ÿÿÿÿÿÿÿÿÿÿ)Øî£eÅõu/ø¯ìô­Á[Ê, ·AØòk¸Ve+}6)§n—öÆy“ÇT4ÿÿÿÿÿÿÿÿÿÿ0Ûþ¼Õ õpÙbô«áe·,‹™ºIE3tã"e36)7L¸ÕP›ß4ÿÿÿÿÿÿÿÿÿÿ1J›,°ÕõÞ°tÍäô”+X},ª’t'í°3Ge­ê6)†"Jqk}§.’IÛ4ÿÿÿÿÿÿÿÿÿÿ2ù5œ×õ_¹"åôïj%<,8°×«Ì×#Ìèetœ6)¤®—¼ÿ´Ì¦?‘®4ÿÿÿÿÿÿÿÿÿÿ3hP {"õ¸ðôРö,»ÅdTd*eÈE6)ÀeÄR´Š¯Ùv4ÿÿÿÿÿÿÿÿÿÿ4œhþóÓõ¹¸çô%Ðáû,ލc×(Åd«eÛp6)p[à·pXà´x,ñrÎ{Åø„e€6)ìMûiÇȬc¿Ü4ÿÿÿÿÿÿÿÿÿÿB«º­±|õàÓêÎ>ôKiG,c­ÑBZ¢èM²eYë6)Î6ý£$Îg©4ÿÿÿÿÿÿÿÿÿÿC:ß=Ô‰õN|GaÊôt£zµ,B¦,ò!¯«×eå26)rb’ÆèÛ^/q4ÿÿÿÿÿÿÿÿÿÿDÎçÏ\xõO4Lä<ôÓƒ¸,Õµe>¾nåñeö6)éç=râ6‰ÊC4ÿÿÿÿÿÿÿÿÿÿE_‚_9õá›áKÈô¾¾r,ô¾«PíI”eJÞ6)«‡™I÷‚›4ÿÿÿÿÿÿÿÿÿÿFì,ï—õ)t,¤ÉôÅXÃ3,fœÜ7ŠYÊ;e“¨6)‰ ÈTÝÍœ’´Zî4ÿÿÿÿÿÿÿÿÿÿG}Iòzõ‡Û =ôú’þù,G—ƲŸ ,^e/q6)8e:ðæ+ä¾$64ÿÿÿÿÿÿÿÿÿÿH]6põ çZ8ôºl,åæRcw-À¨weµÂ6)íÐMdn¦ÎŠ4ÿÿÿÿÿÿÿÿÿÿI–8˜S…õ§HµõÌô1p-¦,Äíœ ß®‡Ne 6)\¾¿ÀU@¶>—ÅR4ÿÿÿÿÿÿÿÿÿÿP•(‡ã`õ¢x”80ô7PÛ,K‘Bo˜fe3U6)Ìœó̯E4ÿÿÿÿÿÿÿÿÿÿQM†•õ ×9—Äôš.,jt_kêìßóeŒ6)}òb±È*×i–KÝ4ÿÿÿÿÿÿÿÿÿÿR·ã§(—õÄ8ôxÅôsÛSP,øVüçË‹Ï:¬eVú6)_~¿|\ã¼á;“¨4ÿÿÿÿÿÿÿÿÿÿS&†7Mbõj—Y×1ôLnš,Ù]2‰cˆÜÉeê#6)îMØgÄÍ«Ûp4ÿÿÿÿÿÿÿÿÿÿTÒ¾ÅÅ“õkßRRÇô¹a——,NNH›/G)’ïeù6)‹‹ÈwÓó|>B4ÿÿÿÿÿÿÿÿÿÿUCÛU fõÅpÿý3ô†«ª],oE†õ‡ÄntŠeEÏ6):å:Óèéèßìvš4ÿÿÿÿÿÿÿÿÿÿVðuådõ Ÿ22ôýê×,ýg%y¦£~½%eœ¹6)iç| ƒWA®ï4ÿÿÿÿÿÿÿÿÿÿWauk‘õ£0Ÿ½Æô êÖ,Ülë 9[@e `6)©ºGÆû{Ñæ74ÿÿÿÿÿÿÿÿÿÿX¯›õ- ìÃô6C,~ÆæçßieºÓ6)|²b.ÏKÑ×òy‹4ÿÿÿÿÿÿÿÿÿÿYŠa’Ênõƒ£«C7ô Â9‰,_±¨N‡ 9 e 6)ÍÜŠô­©ûb1S4ÿÿÿÿÿÿÿÿÿÿ`²Ãšø@õËX³ ôy›)í,º ¤RðÒîŒDe"f6) ô¥„g—4ÿÿÿÿÿÿÿÿÿÿa#¦ µõe÷ºÔôFQ',›ju,nJ‘T¹‘FKe«à6)ÚW¿.àé…ðxˆ4ÿÿÿÿÿÿÿÿÿÿi­ŠÑNõꃌn'ôG ¿,®e„ÿü:Ö .e96)!´¥‘©`0P4ÿÿÿÿÿÿÿÿÿÿp®ša«õï³­£ÛôA)=Â,!÷‰÷aûÉûZe-w6)±–ŠÎ³ŠˆÒñö4ÿÿÿÿÿÿÿÿÿÿq?ÿ^õA /ô~ã,üG™ÉxŽ?e‘®6)øxjˆlðþa¾ß4ÿÿÿÿÿÿÿÿÿÿrŒQ°ª\õ‰óÍã.ô¢}I,’ÞäèžÔeHØ6)"t¥§¥›vÌfª4ÿÿÿÿÿÿÿÿÿÿs4 Ï©õ'\`LÚô:h@ƒ,³Õ*{@œÙ2õeô6)“W'CãZ\.r4ÿÿÿÿÿÿÿÿÿÿté ÒGXõ&kÉ,ôϹŽ,$ÆPi Óx|Óeç46)öÒ¬“I·d‹Ë@4ÿÿÿÿÿÿÿÿÿÿS¾ õõ:ßô¦,aÃõ–—Vë5ee>˜ÅK•ÂÉ“IΛÿÿÿÿÿÿÿÿÿÿÂs.iõõ[•r»ôô™æ\ÒÃÔXùþhrƒee¼>Ù˜Åú{è1ù/ëeHÎØ›Device-Cdio-v2.0.0/data/cdda.bin000444001750001750 255324013222226267 16145 0ustar00rockyrocky000000000000ðÿðÿãÿðÿãÿðÿØÿãÿØÿãÿßÿèÿßÿèÿõÿüÿõÿüÿ    ( (   éÿúÿéÿúÿÕÿòÿÕÿòÿµÿÛÿµÿÛÿœÿÈÿœÿÈÿ©ÿÉÿ©ÿÉÿÄÿÚÿÄÿÚÿêÿøÿêÿøÿ>#>#k1k1;;vBvBa6a6>+>+êÿûÿêÿûÿËÿéÿËÿéÿ²ÿÚÿ²ÿÚÿÎÿÞÿÎÿÞÿåÿñÿåÿñÿøÿøÿ   æÿòÿæÿòÿÇÿÝÿÇÿÝÿ®ÿÌÿ®ÿÌÿŠÿ¿ÿŠÿ¿ÿnÿµÿnÿµÿ™ÿÎÿ™ÿÎÿÐÿãÿÐÿãÿ€>€>ÚlÚlB©B©)›)›ÐmÐmq5q5dÿ¿ÿdÿ¿ÿçþ†ÿçþ†ÿ§þYÿ§þYÿ˜þGÿ˜þGÿ±þKÿ±þKÿêþqÿêþqÿ\ÿ¢ÿ\ÿ¢ÿÎÿëÿÎÿëÿ<&<&”U”UÙyÙy½d½d£Q£Q_0_0üÿüÿ øÿ øÿCCj0j0ˆ>ˆ>ŽHŽH`/`/éÿùÿéÿùÿˆÿÍÿˆÿÍÿ;ÿšÿ;ÿšÿìþrÿìþrÿÒþcÿÒþcÿÿyÿÿyÿ+ÿŒÿ+ÿŒÿƒÿ½ÿƒÿ½ÿüÿõÿüÿõÿ^2^2¬b¬bè‡è‡‚‚ØkØkVVjCjC>">"êÿïÿêÿïÿäÿìÿäÿìÿßÿéÿßÿéÿ»ÿæÿ»ÿæÿžÿÓÿžÿÓÿwÿÄÿwÿÄÿ9ÿ¨ÿ9ÿ¨ÿÿ’ÿÿ’ÿ"ÿ‘ÿ"ÿ‘ÿ\ÿ±ÿ\ÿ±ÿÍÿìÿÍÿìÿu<u<ŒŒ‹Ê‹ÊçùçùÚûÚûd¸d¸ŠEŠE’ÿÄÿ’ÿÄÿŽþLÿŽþLÿ¦ýÍþ¦ýÍþ ýzþ ýzþ!ýŒþ!ýŒþýÒþýÒþ³þgÿ³þgÿ00èèèèEE0!0!$$O¢O¢¸ϸÏäÿäÿäÿäÿºý×þºý×þüþüþ`û«ý`û«ý^ûœý^ûœý2üþ2üþÕýÇþÕýÇþ˜é˜éÔ‹Ô‹êêØüØüH*H*!! þÿ þÿ†ü5þ†ü5þ¬ûÃý¬ûÃýÀûÝýÀûÝýµü@þµü@þFþ2ÿFþ2ÿÊÿùÿÊÿùÿ8š8š\\£Z£ZvJvJõõ‘‘`3`3­ÿåÿ­ÿåÿNÿ¦ÿNÿ¦ÿÿ”ÿÿ”ÿPÿ§ÿPÿ§ÿÿÇÿÿÇÿ÷ÿ÷ÿ@ @ **¡ÿÎÿ¡ÿÎÿfÿ¥ÿfÿ¥ÿ(ÿ…ÿ(ÿ…ÿùþlÿùþlÿ&ÿŠÿ&ÿŠÿÿ´ÿÿ´ÿõÿ÷ÿõÿ÷ÿ¡M¡M*‘*‘ÍåÍåÜ÷Ü÷„Ç„ǪXªX˜ÿÔÿ˜ÿÔÿ‘þGÿ‘þGÿÁý×þÁý×þ ýþ ýþVýœþVýœþþ÷þþ÷þúþ‡ÿúþ‡ÿ66¼Ô¼Ô„Q„Qðð Q Qø ø Ã_Ã_ÄÿÑÿÄÿÑÿõþ^ÿõþ^ÿžþTÿžþTÿèþfÿèþfÿQÿ¡ÿQÿ¡ÿ©ÿÒÿ©ÿÒÿqÿºÿqÿºÿEÿ”ÿEÿ”ÿœþCÿœþCÿðýôþðýôþýÈþýÈþ"þÿ"þÿ4ÿ„ÿ4ÿ„ÿ††¥U¥UdWdW½ô½ô=©=©=%=%ˆ݈ÝÂþQÿÂþQÿ üÙý üÙýâù°üâù°ü:ø÷û:ø÷ûùüùüHû\ýHû\ýÂýÿÂýÿxÁxÁv^v^Ò¤Ò¤ÕÿÕÿÁ|Á|£[£[ÔÔ„ÿÿ„ÿÿÔü_þÔü_þûpýûpýVú4ýVú4ýIû}ýIû}ý!üþ!üþ³ýíþ³ýíþaÿÐÿaÿÐÿ‰‰rr·b·bä€ä€[,[,âãâãM¤M¤ÎnÎn§W§W„B„Be/e/îÿþÿîÿþÿWÿ¦ÿWÿ¦ÿ–þ?ÿ–þ?ÿ¿ýÎþ¿ýÎþývþývþü4þü4þ§üEþ§üEþ;ý’þ;ý’þŠþMÿŠþMÿl7l7¨]¨]¤e¤e.1.1SQSQUÅUÅŠÁŠÁònònÜýïþÜýïþbû¼ýbû¼ý²ùËü²ùËüàøDüàøDüíøcüíøcüUú2ýUú2ýlüIþlüIþñþŠÿñþŠÿ±Þ±Þ55/!/!5»5»ááههNÌNÌãzãzŽaŽa9ýwþ9ýwþúïüúïüª÷¼ûª÷¼ûÏõÓúÏõÓúnõeúnõeú»ö+û»ö+ûÆùÛüÆùÛüþýÜþþýÜþoJoJã¶ã¶Ê žÊ ž¼ ¶¼ ¶= X= Xd *d *ïïThThøûôýøûôý­÷û­÷ûQôÌùQôÌù}óvù}óvùŽôæùŽôæùq÷·ûq÷·û’û°ý’û°ýxxq q 4›4›íCíC`K`K¥H¥H@@ÔdÔdgÿ¯ÿgÿ¯ÿÿ™ÿÿ™ÿ[ÿ­ÿ[ÿ­ÿÍÿßÿÍÿßÿ**“ÿÁÿ“ÿÁÿÓþiÿÓþiÿ½ýíþ½ýíþäütþäütþ@üþ@üþÉûÓýÉûÓý ûÄý ûÄýbü þbü þTý²þTý²þÝþeÿÝþeÿŽCŽCëöëöV¼V¼ä™ä™YBYBnÏnÏû"û"¥¥\E\E[Ô[Ô9*9*öûÆýöûÆý øÝû øÝûýô`úýô`ú¬ò@ù¬ò@ù3ó%ù3ó%ùKõhúKõhúÉùÂüÉùÂüÿvÿÿvÿžå#TÆŸk ë| î ò²‡²‡• • O <O <è}¬+pÛÿîýÈþlû·ýkù·ük÷¹ûk÷¹ûóõîúóõîúáöEûáöEû‹ùmü‹ùmüÜü_þÜü_þúÿúÿ¯H¯H?¤?¤¿€¿€|¤|¤Xÿ·ÿXÿ·ÿýÆþýÆþ>üþ>üþ³ûÁý³ûÁýðücþðücþ11'Q'Qå%å%Ï ÒÏ Ò– +– +í Bí Bgvgvn€n€‘û ý‘û ýÒöéúÒöéúUòÈøUòÈøHðÔ÷HðÔ÷÷ñªø÷ñªø‹ôîù‹ôîù}ù½ü}ù½ü3ÿ“ÿ3ÿ“ÿÿÈÿÈÈ WÈ WZ ùZ ù¯ :¯ :å vå v' ù' ùNÇNÇÅiÅi­ü=þ­ü=þ²øJü²øJü“õÃú“õÃú$õFú$õFúIö)ûIö)ûøôûøôû û_ý û_ýýáþýáþ**; ; ßìßì$Š$ŠEÓEÓJ³J³ÊkÊk»è»èK?K?˜˜ÐÿãÿÐÿãÿjþ,ÿjþ,ÿMýšþMýšþèüXþèüXþîüiþîüiþ‡ý¶þ‡ý¶þ þ ÿ þ ÿêþrÿêþrÿÀÿØÿÀÿØÿ8+8+8877g2g2¢L¢L©_©_$üÿ$üÿÿ…ÿÿ…ÿþÿþÿWýŸþWýŸþýlþýlþ§ý»þ§ý»þÈþHÿÈþHÿ;;œeœe”e”eÈ'È'—ú—úIIçfçf¯þÿ¯þÿüØýüØýÓù¿üÓù¿üøçûøçû´÷˜û´÷˜û øáû øáûcùžücùžüñûÍýñûÍýŽþCÿŽþCÿ ˜ ˜2ª2ª%0%0ïï'¨'¨½½ÆsÆs¾d¾d(’(’­é­énCnC››lÜlÜU¹U¹T1T1}I}Iüþ‹ÿüþ‹ÿÇýÔþÇýÔþÔüDþÔüDþ…ü1þ…ü1þ°üCþ°üCþàüXþàüXþýoþýoþiý™þiý™þþÿþÿŸþDÿŸþDÿêþmÿêþmÿÿ€ÿÿ€ÿûþqÿûþqÿèþgÿèþgÿBÿ‘ÿBÿ‘ÿ88ÿ~ÿ~Œ^Œ^\:\:à à ϦϦ!¹!¹ÇüÇüvÖvÖ„4„4ªý¬þªý¬þûúEýûúEý˜ù|ü˜ù|ü‡ù¸ü‡ù¸üû;ýû;ýºü,þºü,þþþeÿþþeÿÙeÙe^¯^¯æsæs€@€@ÿzÿÿzÿÓýÛþÓýÛþãü^þãü^þ ýsþ ýsþFþÿFþÿÛkÛkîîÏ{Ï{ Õ Õÿ "ÿ "gpgpuÉuÉBåÿBåÿ7ûŒý7ûŒý½õcú½õcúrñJørñJøñøñøòÙøòÙøLö ûLö ûîü«þîü«þ¬¬c Zc Zl= l= ñP ñP   ¢ v¢ v,|,|Óû"þÓû"þõªùõªùÑïöÑïöÉìöÉìö,ï÷,ï÷»õ8ú»õ8ú†ü(þ†ü(þbb£û£û  Ü ÄÜ Ä á áe+e+¯O¯O  ý3þý3þÄúýÄúýúÚüúÚüÁû­ýÁû­ýAý¦þAý¦þAÿuÿAÿuÿãUãUO©O©””n4n4«ÿåÿ«ÿåÿMþ-ÿMþ-ÿ7ýšþ7ýšþ_ý¤þ_ý¤þÛýÖþÛýÖþ ÿ¨ÿ ÿ¨ÿëˆëˆ——¾¾û6û6“ “ Ô´Ô´cScS›þbÿ›þbÿŽûÐýŽûÐý%ùAü%ùAüK÷SûK÷SûÌ÷¤ûÌ÷¤û‡ùÛü‡ùÛüµý°þµý°þýéýéoéoé%}%}› Ü› ÜãIãI| | Þ Þ æþŽÿæþŽÿ€üIþ€üIþ½û­ý½û­ý3üþ3üþþý½þþý½þªþHÿªþHÿþÿþÿlý‡þlý‡þ#ûký#ûký[ùŽü[ùŽüAùDüAùDü€û5ý€û5ýáþ)ÿáþ)ÿ¢"¢"Ð ìÐ ì®Ø®Ø!p !p m=m=… A… A - -{úµü{úµü$òPø$òPø”ëÜô”ëÜôêè>óêè>óbìLõbìLõßòNùßòNù_û£ý_û£ýjïjïIùIù*> *> ´Ù ´Ù Lë Lë  Û ÛÞÞÉûÈýÉûÈý õú õúðé÷ðé÷¸ð{÷¸ð{÷LòùLòù ÷û ÷û ûAý ûAý?ÿ€ÿ?ÿ€ÿrºrºÍ‚Í‚+F+FyÿyÿJvJvTPTPªWªWý ý hÉhÉ2³2³³ÿËÿ³ÿËÿìýãþìýãþÞû¸ýÞû¸ý±ùŠü±ùŠüø¢ûø¢û÷*û÷*û÷|û÷|ûVùuüVùuüný¤þný¤þ‰Y‰Y4X4X® µ® µ……ÝdÝd¼ ¼ ššs\s\ÆùãüÆùãürô¸ùrô¸ù›ï>÷›ï>÷ÇíMöÇíMöTï÷Tï÷|ó(ù|ó(ùlù$ülù$üÿ®ÿÿ®ÿ‹/‹/º ûº ûÅ(Å(^[ ^[ ”g ”g ššw )w )‹u‹u§ÿ§ÿeøßûeøßûñøñøqëõqëõ¾çÕò¾çÕòÊçóÊçóœëmõœëmõó,ùó,ùýZþýZþxfxf›É ›É ¢¢c|c|¼â¼âMè Mè ? d? dnÿŸÿnÿŸÿ4ó:ù4ó:ùxé#ôxé#ô×ä¡ñ×ä¡ñpåÂñpåÂñ°è?ó°è?óéï@÷éï@÷øKüøKüô0ô0 % %–G–Gù ù á1á1 y yݘݘ­§­§3º3ºëþlÿëþlÿ—þVÿ—þVÿËþFÿËþFÿÈÿÈÿÞÿçÿÞÿçÿ¨þhÿ¨þhÿOývþOývþáú9ýáú9ýüøBüüøBüJøÊûJøÊû„÷\û„÷\ûP÷cûP÷cûÚøüÚøü¼úfý¼úfý°þ@ÿ°þ@ÿëÄëădƒd%Ú%ÚÇ ÇÇ Ç @ @›U›UB¬B¬ÐêÐê8 8 ƒ ƒ qþóþqþóþìõªúìõªú(ïÕö(ïÕö,éyó,éyóæøñæøñ èÑò èÑò÷ìõ÷ìõ"õ(ú"õ(ú”õÿ”õÿB ÙB Ù  Z0Z0LÐLÐ   ¸ ¸ ð1ð1†ÿŠÿ†ÿŠÿŸöœúŸöœúˆï°öˆï°ö[íóõ[íóõÞîùöÞîùöÕôéùÕôéùGûúüGûúü––ãýãý@>@>~e~e*8*8þ ÿþ ÿ«úêü«úêü øáû øáû¬øõû¬øõû¯ûÜý¯ûÜý¦¦ÒˆÒˆýýÃn Ãn Ÿ Ÿ øÂøÂåçåçk¶ÿk¶ÿï÷èúï÷èúPîŽöPîŽöÅæ*óÅæ*óÁæLòÁæLòöèÒóöèÒóeî ÷eî ÷€÷äú€÷äú«ù«ùç æç æpÎ pÎ } } ÕM ÕM ³r ³r ñªñª[J[Jå$å$ ù^ü ù^üÅò[ùÅò[ùMï÷Mï÷JïïöJïïöÓñ#øÓñ#øyõ>úyõ>úÓù}üÓù}ütýÅþtýÅþï¤ï¤¿&¿&ùùV¾V¾>>œ-œ-êàêà••¡ù¡ùÁ Á þÿíÿþÿíÿÓýÔþÓýÔþüÞýüÞý#ûjý#ûjýûXýûXýËû³ýËû³ýÃüBþÃüBþ=þ ÿ=þ ÿwÿÉÿwÿÉÿx<x<\2\2C)C)¹{¹{¡¡¶a¶a?ÿ¤ÿ?ÿ¤ÿ¯ýµþ¯ýµþüÑýüÑýâúBýâúBýûPýûPý•ü8þ•ü8þÿ‡ÿÿ‡ÿ·×·×j÷j÷Ó¥Ó¥u =u =  )  )ž Xž XaœaœG±G±®ÿîÿ®ÿîÿiûWýiûWýˆ÷Fûˆ÷Fûƒô«ùƒô«ùó´øó´øóäøóäøqô©ùqô©ù ÷Jû ÷Jûƒû~ýƒû~ýÉÿ Éÿ ººss¯«¯«““ * *C'C'ƌƌw­w­õõ×ר‡¨‡† † ÀÀtjtjõõcÿÿcÿÿ4ýTþ4ýTþyûfýyûfýgúÝügúÝüÏúGýÏúGý8û¨ý8û¨ý ûÆý ûÆýTüþTüþ:ý•þ:ý•þ=þýþ=þýþÿUÿÿUÿ6ÿŸÿ6ÿŸÿÏþlÿÏþlÿ€þ#ÿ€þ#ÿEþÿEþÿôþwÿôþwÿÐÿüÿÐÿüÿÍøÍøÌÌvŽvކ±†±Å bÅ bR -R -#Ú#Ú@ @ qÿÿqÿÿÒû¦ýÒû¦ýñøüñøüø…ûø…ûäøüäøüû7ýû7ýÇý¸þÇý¸þþÿõÿþÿõÿ"ˆ"ˆ“9“9.ÿƒÿ.ÿƒÿ;ý‰þ;ý‰þòú9ýòú9ýÔù®üÔù®ü4ú¶ü4ú¶üü©ýü©ýóÿóÿ"Á"Á¨ Õ¨ Õú=ú=£¹ £¹ 7ò7ò€ X€ X‰ñ‰ñ¤úý¤úýóùóù í’õ í’õëêfôëêfôâëíôâëíô„ðu÷„ðu÷è÷ûè÷û€€7 †7 †èP èP FFŸ… Ÿ… € ê€ êâþ@âþ@¦ôÒù¦ôÒù‚ì±ô‚ì±ô2ænñ2ænñìæIòìæIò+ë=ô+ë=ôDö²úDö²úoÿoÿäZäZºÌºÌÜy Üy p‹ p‹ (³(³ø ‚ø ‚ÉÔÉÔßý]ÿßý]ÿIøüIøüëôRúëôRú"öÓú"öÓúhø`ühø`ücû±ýcû±ýáýÌþáýÌþïÿ¶ÿïÿ¶ÿßußuN$N$ÖÿáÿÖÿáÿuÿ«ÿuÿ«ÿ°þIÿ°þIÿþüþþüþ~ÿÉÿ~ÿÉÿ>p>p·â·â%M%Msâsâ0 ©0 ©°¬°¬MËMËiyiyºü.þºü.þîõ´úîõ´úðö÷ðö÷iïÚöiïÚöŸð“÷Ÿð“÷<õ/ú<õ/ú.û‡ý.û‡ý¹Î¹Î› ´› ´ÈÈPk Pk .ý.ýa ¶a ¶‚â‚â”ÿöÿ”ÿöÿ$ùü$ùü=õ:ú=õ:ú‡õ}ú‡õ}úÝùIüÝùIü{ý@þ{ý@þfÿxÿfÿxÿþÿþÿgûeýgûeýø¹ûø¹ûDönúDönúpö³úpö³ú•ú4ý•ú4ýþÀþÀY –Y –™ ™ è蜜q q ÊôÊô«€«€yó\ùyó\ù"èÙò"èÙòJßÃíJßÃí±Ýªì±Ýªìã2ðã2ðßðB÷ßðB÷_üOþ_üOþý =ý = a aó!@ó!@5M5M} } ý†ý†ÉKÉKŸú5üŸú5üBó"øBó"øëòôëòô*ë§ó*ë§ókíÑõkíÑõ£ô‰ù£ô‰ù­ú¨ü­ú¨üªÿ>ÿªÿ>ÿ¸¸ô5ô5x jx j´ê´êñnñnÆ9Æ9ë1ë1}é}é˜ê˜êŸãŸã[3[3tÿ¯ÿtÿ¯ÿ„ü)þ„ü)þœøãûœøãûõúõú:ó¾ø:ó¾ø©ò€ø©ò€øôOùôOùø©ûø©ûæþ;ÿæþ;ÿy y DwDwYì Yì · · ~… ~… øjøjŠnŠnIüïýIüïý!òBø!òBøêÄóêÄóûäLñûäLñ åMñ åMñMê¨óMê¨ó<ð¬÷<ð¬÷ ùÆü ùÆü§þ§þ7 7 á) á) ËFËFMDMD< < WÜ WÜ 7 7 ÑàÑà›úý›úýnïönïöhå”ðhå”ð­Ýïì­ÝïìÜÙÏêÜÙÏêˆÜKìˆÜKì)æ¦ñ)æ¦ñ‡ò‡ø‡ò‡øMM†T †T ß Pß P7*ƒ7*ƒ±*Ʊ*Æ­"Q­"QNNû û ù7üù7ü êÝó êÝó(Ü(ì(Ü(ìÒÖ1éÒÖ1é1Ûœë1ÛœëwäQïwäQï¾îkö¾îkö•ý þ•ý þ­ W­ W‚ ‚ hh. . e e ‘›‘› ÿ ÿŠüŠü´ÿÿ´ÿÿ·üþ·üþüÀýüÀýÅýÐþÅýÐþ:ÿ±ÿ:ÿ±ÿ›þÿ›þÿ~ü4þ~ü4þÔú*ýÔú*ýc÷ûc÷û¹ô…ù¹ô…ùZóýøZóýø‹óBù‹óBùàõúàõúùüùüúýäþúýäþ˜†˜†àñàñ? Ø? ؽ Ƚ ÈÅ; Å; øt øt uH uH á+ á+ Æv Æv F ÅF Å¥ ¥ Ó÷ìúÓ÷ìúYî8õYî8õåÀðåÀðÚÝ>ìÚÝ>ì¢Ûãê¢Ûãêéßµíéßµíêóêó_ùDü_ùDüVqVqÁR ÁR Ž"WŽ"WÚ)Ú)<(Ã<(Ãf­f­š× š× ''ˆ÷éûˆ÷éûhí&öhí&öxå²ðxå²ð;äÐï;äÐïhéQóhéQóhñŒ÷hñŒ÷®ù.ü®ù.üãõãõ†Ò†ÒŽ XŽ XÖkÖkäºäº›› ý­þ ý­þFùUüFùUüé÷«ûé÷«ûü¨ýü¨ý&ü&ü ï ïÈÜ ÈÜ Ìå Ìå Gq Gq ×F ×F úqúqÀû¸ýÀû¸ýéï›öéï›öŠæùðŠæùðpà÷ípà÷íùàÊîùàÊîå®ðå®ð•îàõ•îàõúMüúMüUU@Ê @Ê Ø Ø AnAnÁvÁvµË µË ¨ ¨ «æ«æzü3þzü3þFóÊøFóÊøþëôþëôoçòoçò­êüó­êüó¤íOö¤íOö^ôú^ôúÒûýÒûýð­ÿð­ÿl\l\+€+€E °E °Ñ Ñ  £ £zËzËLŸLŸààdd5þ¦þ5þ¦þuüþuüþ‡û†ý‡û†ýŸû”ýŸû”ývüþvüþý–þý–þ©þ4ÿ©þ4ÿžÿ·ÿžÿ·ÿ/"/"sDsDÌÿÔÿÌÿÔÿEÿyÿEÿyÿ”ÿÕÿ”ÿÕÿz z \\ ïÿ ïÿµý‚þµý‚þwúýwúýê÷×ûê÷×ûµöóúµöóúÝ÷QûÝ÷QûBúäüBúäüssyy  KE KE   õð õð ô° ô°  ’’Ïù#üÏù#ümñö÷mñö÷×ê±ô×ê±ôæè¸òæè¸ò†é"ó†é"ó±íLõ±íLõYó(ùYó(ùÐúúüÐúúüÁ(Á(ˆˆs 3s 3É ¨É ¨¯ ¯ ÓûÓûßzßzÍþkÿÍþkÿgüSþgüSþ²ýÿþ²ýÿþ°x°xöö³³‘÷‘÷r Tr TB;B;|Ú|Ú••±üYþ±üYþ”ù“ü”ù“üHø¹ûHø¹ûßøÏûßøÏûvùñûvùñû¢ùü¢ùü<úÏü<úÏüvûmývûmý‡üþ‡üþrýpþrýpþOýnþOýnþ÷üDþ÷üDþ»üþ»üþ<ýkþ<ýkþÿÐÿÿÐÿRQRQšƒšƒô !ô !Q(Q(Ó­ Ó­ Ñ Ñ Ÿ ‰Ÿ ‰)=)=ÿ~ÿÿ~ÿ(÷û(÷ûÓð˜÷Óð˜÷RîøõRîøõ'ð÷'ð÷-ôªù-ôªù¶úü¶úü66N,N,s ‡s ‡®®»ê»ê¹£¹£%þ ÿ%þ ÿtúóütúóüŠ÷KûŠ÷Kûø ûø ûû<ýû<ý ÿ ÿ ÿ ÿdÒdÒ1 ¢1 ¢¶¬ ¶¬ é é ñ ñÀºÀºhý þhý þõ0ùõ0ù;íÜô;íÜô5èÑò5èÑòÝéKóÝéKó"ïXö"ïXöãösúãösú‰~‰~üüBBôô@n@np½ p½ ƸƸ°ûý°ûýGíÉõGíÉõÜá¢ïÜá¢ïAßDíAßDí^á0ï^á0ïçëiôçëiôÆôÙùÆôÙùTTõõ  ppŸ Ÿ r r ªuªuîî¡ú\ý¡ú\ý—õqú—õqúÒóøøÒóøø‚ôUù‚ôUùØ÷ ûØ÷ ûuûýuûývþÊþvþÊþM1M1<}<}|X|XÞÿâÿÞÿâÿ’þ5ÿ’þ5ÿ‰ý«þ‰ý«þÿýºþÿýºþ¬E¬E——•Û•Û… °… °Ù Ù e xe x# ª# ª*l*l¶ÿ´ÿ¶ÿ´ÿ«÷û«÷ûmðP÷mðP÷ÈêüóÈêüóâépóâépóµìõµìõõcùõcùüäýüäý¦Í¦ÍÄW ÄW Õ­Õ­  j j Ž9Ž9]üçý]üçýÂõ(úÂõ(úIò)øIò)øõ=ùõ=ù–÷Âû–÷ÂûeûßýeûßýþÿþÿýÖþýÖþŽùAüŽùAü°õ6ú°õ6ú´ò¤ø´ò¤øÒô]ùÒô]ùÝúÝüÝúÝüVVÒ ¿Ò ¿Ía Ía Y ¿Y ¿o!Eo!E¬ ¬ ¢ €¢ €3pÿ3pÿ|ðÔö|ðÔö%ãÙî%ãÙîÁØ¡èÁØ¡èØsèØsè”Þþì”Þþìèï&öèï&ö<þÕ<þÕ[  [  ncnc×"×"ð$¹ð$¹ÕþÕþ3 3 >ó>óqóûqóûësõësõÓæòÓæòêžóêžóíõíõ&ó­÷&ó­÷KøöúKøöú¨¡ÿ¨¡ÿpmpm ¯ ¯' ' ¹ÿ¹ÿll????1‡1‡@M@Mìoìo € €x«x«µÿ·ÿµÿ·ÿ¿û»ý¿û»ý’÷û’÷ûÚóùÚóùño÷ño÷kð ÷kð ÷ÌòhøÌòhø÷;û÷;û³þÿ³þÿ: C: C¢Š ¢Š /©/©¶“¶“ÚÅ ÚÅ e.e.nnùüùü°îö°îöƒæzñƒæzñ†áîí†áîívâ(ïvâ(ï½ç¹ñ½ç¹ñ?ñ‹÷?ñ‹÷ütýütýùKùKq¸q¸ôÍ ôÍ ‚¶‚¶± ȱ Èÿ·ÿ·R!R!p p t²t²ø‚ûø‚ûlêólêó¬ß.í¬ß.íq×Wèq×WèÔêæÔêædÚýédÚýéÿâdïÿâdï/ò¢ø/ò¢ø__pž pž È#VÈ#Và.à.(.å(.åÙ&_Ù&_7f7f±r±r•òg÷•òg÷ âÀí âÀí8Õ1æ8Õ1æÒÔ"çÒÔ"ç+ÕIè+ÕIè8ä—ï8ä—ïáð”÷áð”÷qÿÐÿqÿÐÿH H ¹# ¹# üüÜ Ü ±ê ±ê ÒåÒåèèö­ö­áÿZÿáÿZÿü2þü2þ5ý”þ5ý”þÆýéþÆýéþ—ÿ·ÿ—ÿ·ÿ²þúþ²þúþìüúýìüúý¨ø¶û¨ø¶ûNõïùNõïù„óúø„óúøñò©øñò©øéóÔøéóÔøüõ/úüõ/úIú´üIú´ü§þ2ÿ§þ2ÿ I I<Â<ÂÙ ±Ù ±ååõ‹ õ‹ fé fé Õ Õ ) ) þ þ Ž ¸Ž ¸šxšx]ôBù]ôBù™êó™êóUàríUàrí|Ø…é|Ø…éØ6éØ6é1ßí1ßí”éøò”éøòŒûYýŒûYý7 Ò7 Ò;·;·¡(‚¡(‚¥.ú¥.ú5+ç5+ç1#'1#'ø. ø. ضضô·ùô·ù«æ°ñ«æ°ñsáuísáuíqâîqâîùçòùçò¬ð¤ö¬ð¤öDú)ýDú)ý-€-€] ] º –º –| É| ɳM³Mé;é;=ýÈþ=ýÈþ¬ø$ü¬ø$ü÷§ú÷§ú–úEý–úEýjpÿjpÿd Íd ÍUá Uá ÕÕ‡c ‡c ?Z ?Z ''’û·ý’û·ýfð÷fð÷çÚñçÚñÃàÐíÃàÐíSâðîSâðî*æ~ñ*æ~ñ_ïCö_ïCö5ü›ý5ü›ý8š8šÙ6 Ù6 d›d›·Í·Í»š»š. . > e> eŽÌŽÌßù{üßù{üUñŽ÷UñŽ÷Ÿê¯óŸê¯óÒé×òÒé×òxìàôxìàôæò5øæò5øSø ûSø ûëýŸþëýŸþh¤h¤ãiãi X XÚ ¡Ú ¡ m mD@D@ªôªôz^z^©©Òþ-ÿÒþ-ÿHþ)ÿHþ)ÿlþ)ÿlþ)ÿPþ,ÿPþ,ÿXÿ¬ÿXÿ¬ÿ1919àŠàŠ˜Y˜Y¸ÿÐÿ¸ÿÐÿÿjÿÿjÿKþëþKþëþþìþþìþÎþmÿÎþmÿÆÿØÿÆÿØÿF/F/ ÿŒÿ ÿŒÿ û­ý û­ýÙø1üÙø1ü³ö®ú³ö®úõˆùõˆù{÷¹ú{÷¹úäû'ýäû'ý££ Ô ÔØ  Ø  ê[ê[Œ÷Œ÷a-a-,^ ,^ y2y2ˆüUþˆüUþâòÈøâòÈø?ëbô?ëbôNæýðNæýðèæ7ñèæ7ñ"é‚ò"é‚òëî"öëî"ö öðù öðùæþ§ÿæþ§ÿMMÝ TÝ T÷ ÷ † $† $¨ õ¨ õ#T#T–ÿWÿ–ÿWÿåûdýåûdý-üðý-üðývüjþvüjþVÿkÿVÿkÿ:Ö:ÖVÅVÅÃHÃHîJîJrÚrÚõgõgGþÿGþÿPûýPûýúøáûúøáû8ùúû8ùúû…ùü…ùüÝùJüÝùJü=úºü=úºü€ûYý€ûYý˜üäý˜üäý‰ý]þ‰ý]þËü)þËü)þ=üþ=üþØûŸýØûŸý–ûTý–ûTýÚüþÚüþÚ]Ú]ÞÞX cX cx Yx Yœ@ œ@ Nä Nä x àx àÞMÞM¤8¤8òùüòùü™ôÊø™ôÊø;ï†õ;ï†õZîˆõZîˆõÅñ1÷Åñ1÷÷®ú÷®ú™ýÊþ™ýÊþÜ%Ü%ãQãQ˜ …˜ …Ï {Ï {nTnTÉûÉû§üþ§üþˆøPûˆøPûLõëùLõëù´öEú´öEúuú·üuú·ü²þiÿ²þiÿ ` ` ‹ ‹¡ ¡ tÄtÄû iû iàýàý”û¥ý”û¥ýÌóÜøÌóÜø¬ìô¬ìô¿ê5ó¿ê5ó¥ë4ô¥ë4ôzñó÷zñó÷ûàüûàüøøËß Ëß ODODÛaÛaîOîO' ' "æ"æŠøûŠøûfìôfìô×â”î×â”îgáígáíüåãðüåãðmðs÷mðs÷ïüüýïüüý$I$IRV RV ºK ºK %9%9%¦ %¦ ÈaÈaÏϰ ° èù@üèù@ü}ô;ù}ô;ùÒò›øÒò›øõó>ùõó>ù&øµû&øµû­ûÆý­ûÆý›þ|ÿ›þ|ÿCpCpðjðjàcàcG[G[Éÿ Éÿ cÿËÿcÿËÿ÷w÷woOoOvÅvÅÇ Ç ¿ À¿ À1n1nd ;d ;£†£†ºJºJ¹ùü¹ùüòà÷òà÷Ùì™ôÙì™ôèlñèlñ5êÅò5êÅò.ðŠö.ðŠöùõûùõûhhººTO TO BB~ç~çÔy Ôy F ±F ±±ÿ³ÿ±ÿ³ÿ©ôú©ôú½ïšö½ïšövïôõvïôõ(ôAø(ôAø(ø û(ø û‡ûaý‡ûaýVþRÿVþRÿ ü þ ü þúüúü÷™ú÷™ú¯ôtù¯ôtù"ø@û"ø@ûÈüZþÈüZþÏiÏiÙC ÙC &&ë"Œë"Œ Û Û$$/ z/ zRû—ûRû—ûçécòçécòÜëÜëòÓŠæòÓŠæHÙyéHÙyéÑáZîÑáZîêòqöêòqöéWéWCø Cø ;!š;!šñ$ñ$¸!ð¸!ðììV gV g¡ÿ¡ÿ­ó4ù­ó4ùŸë´óŸë´ó¥êKó¥êKóÁë(óÁë(óÊïöÊïö–ôxù–ôxùÌùÓüÌùÓü*™ÿ*™ÿU’U’ ò ò² ¦² ¦qqJ’J’=¨=¨Á:Á:}}ë¥ë¥T¦T¦\Ù\Ù|ý‡þ|ý‡þùêûùêûžõ¡ùžõ¡ùFòß÷Fòß÷Åï‘öÅï‘öçï¿öçï¿öÔôCùÔôCù!ü£ý!ü£ýíŽíŽA JA JñÑ ñÑ ÙÑÙÑææf f p àp à¤ÿéÿ¤ÿéÿåô˜ùåô˜ùëçóëçóqãwïqãwï±á°í±á°í&ãßî&ãßî,êVò,êVò¨ó´ø¨ó´øýýýýýýö/ö/uò uò ÿ9ÿ9ƒ!Aƒ!A°"¾°"¾Í™Í™Nì Nì d ‰d ‰óÿóÿ¹ñçö¹ñçöæä‘ïæä‘ï‘Ùõè‘Ùõè'Òòã'ÒòãDÓ^åDÓ^åJÛ«èJÛ«èêîñêîñû‰ûû‰û l lJÂJ *Ü *ÜD2›D2›g-­g-­µ$æµ$æ4 4 ¢ÿVÿ¢ÿVÿ¡íƒó¡íƒóªÜêªÜê"Ôæ"ÔæRÖyçRÖyçÍÝ¡ëÍÝ¡ë8ëÚó8ëÚó{ø¸ú{ø¸úÛEÛEö ö {ï{ï((¹¨ ¹¨ û§ û§ ™ )™ )é9é966cü~ýcü~ýÒûÅýÒûÅý*üþ*üþÔýDþÔýDþžþ|þžþ|þŸü0þŸü0þ4ú1ü4ú1üÐö¡úÐö¡úáôqùáôqù{ó”ø{ó”ø¢óÀø¢óÀøçõúçõúùüùüÒý—þÒý—þõõ£õ£õQ ÀQ À= = ý ý ˆ ˆ ×  ×  Ÿõ Ÿõ wi wi À EÀ ERR³üæý³üæý]òø]òøßçùñßçùñ¹ß”ì¹ß”ìwÛDêwÛDêfÞãëfÞãëLã ïLã ï«ð³ö«ð³ö þýÿ þýÿ‘ ‘ D2D2ƒ&ñƒ&ñ«(ª«(ª #ñ #ñÂÂÁÁÁÁIýóþIýóþ"ï ö"ï öåãÒïåãÒïfá îfá îã¯îã¯îÀêºòÀêºòfõ#ùfõ#ù7þsþ7þsþãŽãŽ  Ü ‘Ü ‘@ š@ šD6D6nOnOÐûŠýÐûŠý øSû øSûü÷8ûü÷8ûYüÉýYüÉý»‹»‹  G™ G™ V V 6: 6: Ø Ø qŠqŠf÷¨úf÷¨ú¿íUô¿íUô0æFð0æFð£äÔî£äÔîOæÐðOæÐðqë†óqë†óøôÉùøôÉù}þøþ}þøþ• ƒ• ƒ>‰ >‰ HH--³” ³” ÍE ÍE °g°g]þ‘ÿ]þ‘ÿ ÷‹ú ÷‹úð‹öð‹öëpóëpópì}ópì}ó…ï‘ö…ï‘ö?õú?õú»üÁý»üÁýÜxÜxËvËv̸̸y (y ( ˆ ˆDŠDŠk›k›í®í®þÿþÿ«üþ«üþ,ý^þ,ý^þ ý þ ý þáþ*ÿáþ*ÿK)K)tstsÝyÝy””lÉlÉÍÍ•ÿýÿ•ÿýÿþÈþþÈþäüÑýäüÑý²üíý²üíýþÿþÿÃÿÃÿÀÿôÿÀÿôÿþ¹þþ¹þYú›üYú›üb÷ðúb÷ðúõ©ùõ©ùªôþøªôþøA÷AúA÷AúýBþýBþ߉߉+ |+ |„3 „3 *Ö*Ö„¿„¿rrKÅKÅ55û/üû/ü]ñ‰ö]ñ‰ö³éò³éòÒã²îÒã²î äaï äaïÃèòÃèòiï6öiï6özùÿûzùÿûÁqÁq¢ ×¢ ×âR âR Ú† Ú† å°å°ˆ -ˆ -”¨”¨ãüõýãüõýGúAüGúAüåú£üåú£üý‰þý‰þHHˆ/ˆ/¯Ø¯Ø# !# !( ( ¿ ¿ âAâA‘ýšþ‘ýšþHùwüHùwüEøXûEøXûFøûFøû©ù)ü©ù)üâú(ýâú(ýrûJýrûJýùûÂýùûÂýÞü,þÞü,þ¤ý‰þ¤ý‰þUýfþUýfþÕüþÕüþõû‰ýõû‰ývüéývüéý ÿ„ÿ ÿ„ÿ : :®¬®¬å áå áö` ö` Ç9 Ç9 PÓ PÓ ® (® (;;ÿDÿÿDÿ½öú½öú)ðñõ)ðñõëDóëDóQí’ôQí’ô„ñ ø„ñ øáøûáøû¥+¥+ñ]ñ]ò ´ò ´i Yi Y: þ: þ:´:´AZAZÎûýÎûýq÷qúq÷qúôeøôeøpô=ùpô=ù‹øŸû‹øŸûJÅÿJÅÿ”Ȕȕ û• ûwx wx – – r r p-p-ûÐýûÐýlóšølóšøtí{ôtí{ô ëqó ëqóPìôPìô±ó.ø±ó.øóûìýóûìýpªpª† † uu-ƒ-ƒåæ åæ nÃn÷ÿå·ÿåSñåøSñåø[éò[éò<ã…í<ã…í‡á4í‡á4í5è]ñ5è]ñÓô¬øÓô¬ø@ÿ¹þ@ÿ¹þ ¤ ¤È, È, /±/±g¿ g¿ ~Ÿ ~Ÿ ! ª! ª*i*iœþÿœþÿð÷Óúð÷Óú¤òø¤òøóòbøóòbø¹ônù¹ônù´øû´øû üƒý üƒýÕþ”ÿÕþ”ÿÏÏiûiûñ`ñ`íÿàÿíÿàÿÿxÿÿxÿnÿ©ÿnÿ©ÿxùxù(Â(£&£&$ $ ̫̫MñMñÈ ÎÈ Îãöãöùþ§ÿùþ§ÿ÷'ú÷'úJïÆõJïÆõGé`òGé`òùæ°ðùæ°ð}ê¦ò}ê¦òàðMöàðMöwýcþwýcþ»û»ûóB óB 8b8b‚‚×}×}Î Î  ô ôîÿîÿIöùIöùvîövîö™î ö™î ö’ôÐø’ôÐøšù-ûšù-ûÊý+ýÊý+ý‡þÔþ‡þÔþñý|þñý|þ@ú±ü@ú±üW÷ÔúW÷ÔúúõÎùúõÎù°ù£û°ù£û[þóþ[þóþÀÐÀЛd ›d "Ž"ŽJ »J »ðìðìÛ Û mKmK¿õKú¿õKúèAñèAñ¿Ûöè¿Ûöè¿ÖÍæ¿ÖÍæ¼Ü|ê¼Ü|ê˜èÖð˜èÖðbø§ûbø§ûí‚í‚n n EÙEÙé#°é#°~b~b  $ /$ /ˆþ*ÿˆþ*ÿüóDøüóDøšëÈòšëÈòÑéhòÑéhòñìyóñìyóÇïœöÇïœö›ôNù›ôNùÃûCýÃûCý¤…¤…’(’(­?­?h Sh S¸-¸-6)6) E E°ô°ô“»“»ÁÁäÿ¾ÿäÿ¾ÿ”ûfý”ûfý ÷æú ÷æú‹ôòø‹ôòø7òw÷7òw÷Gñ×öGñ×ö¼òÞ÷¼òÞ÷r÷¼úr÷¼ú†ýIþ†ýIþLÁLÁvôvôÞ Þ ¿%¿%ççtQ tQ ÃÃÔýþÔýþ0ñ÷0ñ÷&çñ&çñmâ£ímâ£íjàìjàì-äFï-äFïšêÔòšêÔòðVölõØù°ú½üôÿ£ÿ¥ V uh× h× uÓuÓÁ ÖÁ Ö·"™Ç „Øq‘8K oH ” ” ûÆýûÆýðíÚõðíÚõ°á)î°á)î5Ø0è5Ø0è Ñ´ã Ñ´ãDÓ™åDÓ™åÝÌêÝÌêaî.õaî.õ]ÿ‡ÿ]ÿ‡ÿê ê ´ H´ H.´.´o1²o1²#+…#+…öwöw] ] ‹÷”ú‹÷”ú"ååî"ååîpÙ@çpÙ@çÓBäÓBäÎ׿Î׿Áá†ìÁá†ìÆìÌôÆìÌô¨üëü¨üëü Ä ÄýÝ ýÝ éÄéÄ8´8´µ© µ© 9 9 ~ L~ L   ÿƒÿ ÿƒÿ÷ûeý÷ûeý3ü¯ý3ü¯ý?ý‹þ?ý‹þÛþCÿÛþCÿäþbÿäþbÿwûaýwûaýÀøÊûÀøÊû¨öú¨öúõùõùô„øô„øÉôùÉôùïöªúïöªú6ûÇü6ûÇüyÿÇÿyÿÇÿ9•9•ÒÒt t E àE à Ñ Ñq q ~Z ~Z Yí Yí q5 q5  f fˆðˆðüjýüjý(ñÃö(ñÃö‡è€ñ‡è€ñâáÜìâáÜìïÝøêïÝøê‡à˜ì‡à˜ìfèÿñfèÿñyõúyõú&œ&œÍ Í **Ä%Ä%¤%ͤ%Íó$úó$ú£– £– § ާ Ž¿½¿½%õbø%õbø¶è¶ñ¶è¶ñ¬ä÷í¬ä÷íïæïïæïÁíÿôÁíÿô´÷Yû´÷Yûêÿ”êÿ”–Ñ–Ñç /ç / * *Š 9Š 9%q%q²ÿTÿ²ÿTÿ[úÏü[úÏüàöÏúàöÏúVø#ûVø#ûhüEþhüEþ»»m çm ç°¶ °¶ Í; Í; ‡j ‡j D ðD ð µ µìö¥úìö¥úÆîêôÆîêôPçnðPçnðžå)ïžå)ïçððçððìíæôìíæô7÷Wú7÷Wúo°o° | | e e êlêlé¼ é¼ ø´ ø´ ä ¾ä ¾°/°/*þœþ*þœþ€öú€öúkð‡ökð‡öôìÅóôìÅóJîfôJîfôJòíöJòíöøÄúøÄú þ´þ þ´þßìßìÁÁEzEzÿ<ÿ<jjí_í_YëYë;ÿkÿ;ÿkÿ…ý{þ…ý{þ“ýxþ“ýxþéþWÿéþWÿcOcO””ééS¹S¹G³G³¿ß¿ßu·u·“ÿÃÿ“ÿÃÿ þýþ þýþ×üþ×üþçûwýçûwýÀüæýÀüæýþàþþàþƒÿ¯ÿƒÿ¯ÿ¬þ'ÿ¬þ'ÿ°üùý°üùý[ù¯û[ù¯ûÀöäùÀöäùÇô‡øÇô‡øMöÎùMöÎù¶ù~ü¶ù~ü44»»wž wž I;I;r%r%• • q¿ q¿ Y ÿY ÿ±ÿÇÿ±ÿÇÿiõùiõùÛëÉóÛëÉóhäÕîhäÕî,ãî,ãîŽækïŽækïàê/óàê/óýó“øýó“øCýúþCýúþY1Y1¡ \¡ \³ ³ a a  ÿ ÿ²-²-"{"{˜üxý˜üxý¥úPü¥úPüjûNýjûNýxýÀþxýÀþôPôP–!–!o`o`åuåuiÊiʺþ—ÿºþ—ÿÀûÏýÀûÏýeùeüeùeüMøMûMøMûwùüwùüû¾üû¾ü|üXý|üXý6ýßý6ýßýØýUþØýUþdþ ÿdþ ÿ‡þÿ‡þÿÅý¢þÅý¢þý?þdüÝýúûýûEýÿûýoüÜý·ÿ¿ÿ·ÿ¿ÿb±b±®X®X· ÂD ¯Ó u* ¹ (  ˜ ˜{n{nDãDãÓýÀþcúžüâô²øâô²øUòŸõÈïŸõÃîLõÃîLõ£ñ÷£ñ÷G÷vúG÷vú×ýÎþ×ýÎþÐAÐ{ p{ î< m< mY …Y …šPšPâ£â£®û‹ý®û‹ýµöAúµöAú ômø ômøAôkøAôkø“ø÷ú“ø÷ú…ý×ý…ý×ýñ-ñ-( @( @ v v 8 8 Ž ’Ž ’¿¨¿¨£ýþ£ýþôÅøôÅø“ìøó“ìøóQêúñQêúñöê£òöê£ò¨ïÙõ¨ïÙõVøÔúVøÔú¥A¥AN N SãSã‡W‡Wóó$ $ ‰³‰³ãû¤üãû¤üšîiôšîiôäçíäçí¦à­ë¦à­ëöãXîöãXîÏíÅôÏíÅôúŒüúŒü5ë5ëV V 3ó 3ó [h[h>J >J   ·~·~œœˆúÕüˆúÕü‡ôÿø‡ôÿøóé÷óé÷õàøõàøÄöIúÄöIútûçütûçüUÿ}ÿUÿ}ÿÒ{Ò{DDïjïj > >SÿbÿSÿbÿ¿þ±þ¿þ±þ•ÿvÿ•ÿvÿ.q.qynyn´ m´ mz Âz ÂtÀ tÀ ± ¯± ¯ß –ß –4V4V4üJý4üJý`ò%÷`ò%÷šêJòšêJònæªïnæªïPèÃðPèÃðvíàóvíàóNö(úNö(ú‘j‘j \ \&¯&¯4 4 ºÁºÁÃÃû hû h.ï.ïNù–ûNù–û’ðö’ðöšïæõšïæõšò–öšò–öÕöúÕöúÕûçüÕûçügýþgýþ“ýŸþ“ýŸþ²ûîü²ûîüdøûdøûÓõ¦ùÓõ¦ùùƒûùƒûÙûýÙûý‡ê‡êk ˜k ˜%Ù %Ù ã¶ã¶ÆCÆC™Â™Âv jv jÉý3þÉý3þ¸ì÷ó¸ì÷ó'ßÖë'ßÖëÜ׋åÜ׋å;Ûâæ;ÛâæSäìSäìUñõUñõÉ?É?‚ ‚ ÒíÒí$“$“È!ðÈ!ðCC· ™ · ™ ^^ìö¨úìö¨ú+íãó+íãóÄéñÄéñiì‰óiì‰óÝî¹õÝî¹õ×ó©÷×ó©÷Jù‡ûJù‡ûêþµÿêþµÿ{{îÑîÑ ‰ ‰ e e« « eéeé¼Î¼Î¿>¿>F¼F¼uGuGx.x.AýxþAýxþ™ø—û™ø—ûîôÞøîôÞøòÄöòÄö ñ£ö ñ£ö0ò÷0ò÷üõŠùüõŠùürýürýLLÏ 'Ï '†È †È *Ò*Ò··Cj Cj í àí àù®ù®,ö6ú,ö6úŒíhôŒíhôÓæMïÓæMï¹âòì¹âòìPãíPãíeèŸðeèŸðÜñ‘öÜñ‘öÅù•üÅù•üùOùO—„ —„ ñeñeR R t#pt#pK! K!   Æ* Æ* ¢¢²õù²õù¨çað¨çað¡Ü7é¡Ü7é8ÔÀã8ÔÀã5Ò$â5Ò$â·ØMæ·ØMæ æ7ï æ7ï¹õÊù¹õÊù› › híhí (& (&»2< »2< Ê/NÊ/N¿%±¿%±±‚ ±‚ í}í}vîüôvîüôëÞBêëÞBêÒÔ©äÒÔ©ä†ÔGä†ÔGäwÛÞèwÛÞè‚ç÷ð‚ç÷ðéö-úéö-ú"Ó"Ó¼ ¼ h3h3ûóŽ´a~t jù 8 |8 |ÒˆÒˆËwËwâû'ýÍûý¹ûý@üoýÉüÎý=ýþ²ýpþ²ýpþxþùþxþùþýRþýRþúWüúWüœ÷Éúœ÷ÉúWõ5ùWõ5ùµô»øµô»øÖôÄøÖôÄø^öú^öú£ùÉû£ùÉû/þÅþ/þÅþè6è6ÜÜú;ú;^ @^ @ ›É ÷i v ÷qL Ø£   'Ï 'Ï J J H ݬARülý”ø™ú£ó\÷²î ô²î ôïæ ïïæ ïá1ëá1ëïàêëïàêënæïnæïÚïïôÚïïô6ýfþ6ýfþ½ ½ :• :• ŠpŠp¸"Ù¸"Ùò!†ò!†7Â7Â4Ÿ 4Ÿ LúLúÆ÷ ùÆ÷ ù†íÚò†íÚòçïçï2èyð2èyðøìLôøìLôQô²øQô²øäûaýäûaý99SS Æ Æƒ ƒ p¦p¦œZœZ©ý¦þ©ý¦þ|úyü|úyü…ø@û…ø@û`úúü`úúü¬¬“.“.â oâ oÊò Êò ; ; y y».».MüpýMüpýóÒ÷óÒ÷¦ìbó¦ìbó@èùï@èùï&éñ&éñ‹ë5ó‹ë5óÖôBùÖôBùüGþüGþŒ— Œ— +‡ +‡ ¤(¤(”V ”V à Çà Çp/p/Ó¬6*Õüþtùü÷õ¤ùzò5÷ºíXôºíXôœî5õœî5õ¥ò÷¥ò÷Ýø‹ûqûaýþ8ÿ°·[7ü¾žGžG ~ ~W PW Pˆ£ˆ£GÆGÆ  šüŒýšüŒýÛù#üÛù#ü_ùßû_ùßû ûîü ûîüªý9þªý9þZUZU  †ª†ª|í|í3Àë•Jù«_åw ‘6ÿ»ÿ6ÿ»ÿÛü>þÛü>þýúýýúý*üZý«üàý-ýgþûýÖþÊþGÿtÿ¢ÿÿÿÿÿÉþ6ÿÉþ6ÿHü·ýHü·ýù_ûù_ûäõ2ùäõ2ù‚ó×÷‚ó×÷þôÇøþôÇø¯ù›û¯ù›û”ÿP”ÿP· :· :Ì Ì ®Ó®Ó?Ö?Öaaü6ü6) û) ûdêÿdêÿ~ô<ø~ô<øëòëòŸã[íŸã[íWâìWâìßæ‹ïßæ‹ïî7ôî7ôvõùvõùbÿÿbÿÿtÏtÏä  ä    ² ² æ æ È)È)¼ÿæÿ¼ÿæÿ£û?ý£û?ý€üÊý€üÊýAýCþAýCþ9Î9ÎmÛmÛõzõzç¹ç¹3F3FKÆKÆÿdÿÿdÿ¸ú¦ü¸ú¦üQ÷óùQ÷óùmõÉømõÉø²ö ú²ö ú©ø&û©ø&ûÉû¸üÉû¸üÿÿÿÿ©©Ç¡Ç¡¸ø¸øÐfÐfœþKÿœþKÿMûýMûý¯øaû¯øaû™ùõû™ùõû_û}ü_û}üdÿµÿdÿµÿjj ‹ ‹b? b? À¨ À¨ þb þb ¬ ƒ¬ ƒÖ©Ö©ù‰ûù‰û@ñ ö@ñ öëÈòëÈòwêíñwêíñï'õï'õðõ-ùðõ-ùBþÃþBþÃþ3O3OŽ ¿Ž ¿—Ÿ —Ÿ Õ Õ   žžxýþxýþO÷húO÷húpò÷pò÷–ñÚö–ñÚöLö‚ùLö‚ùüâýüâýÌkÌk ê êAu Au ¬ ¬ Œ  Œ  0…0…áüüþáüüþ›ó)ø›ó)øCì¼òCì¼ò£ç`ï£ç`ïÖésñÖésñ°ïàô°ïàô³ùéû³ùéûk k þÔ þÔ RæRæðËðËääôp ôp jjLõ}ùLõ}ù€é†ñ€é†ñDàGëDàGëÞ.êÞ.ê„åî„åîÛîôÛîôæû”üæû”ü³³5 5 ——DPDP—p—p£( £( ShShþªÿþªÿK÷ÅúK÷Åú#óÎ÷#óÎ÷ò2÷ò2÷*õù*õùüøfûüøfû2üYý2üYýÝþùþÝþùþ<Ôÿ<Ôÿ*ÿ<ÿ*ÿ<ÿNþÃþNþÃþ¢ýeþ¢ýeþýþýþÿKÿÿKÿ3Ž3ޱ‡±‡Õ 7Õ 7˜ ˜ [` [` Yó Yó ) Š) ŠŠºŠº‘ýþ‘ýþ&ô ø&ô ø®ìCó®ìCóéæ’ïéæ’ï0æóî0æóîêåñêåñëóŽ÷ëóŽ÷ûþÿûþÿt èt è!ß !ß ±T±TM!M!*b*b¿h ¿h ã®ã®«úåü«úåüAñÎõAñÎõ®ësó®ësóî£ôî£ôOòƒ÷Oòƒ÷»÷Áú»÷ÁúCü*þCü*þWWwâÿwâÿ9ü…ý9ü…ýÕø£ûÕø£ûm÷,úm÷,ú-ûÏü-ûÏüˆZˆZKyKyÀ À bbININ Ú ÚÖÐ ÖÐ Ô`Ô`¿÷×ú¿÷×úêéñêéñkÜékÜé×zå×zåÜéÜéÈé¥ñÈé¥ñâùüâùüI I §½§½ô"òô"ò…#1…#1Ù «Ù «é{é{XÖXÖœø ûœø û`îô`îôUæîUæî–åï–åïžèñžèñËïƒõËïƒõ-÷_ú-÷_úOýhþOýhþyƒyƒ š š¡ ¡ …¤ …¤ d ™d ™××ÑüÑüD2D2$µ$µþ˜þþ˜þ û€ü û€ü¤øÚú¤øÚúTö—ùTö—ù™ôbø™ôbø^ó…÷^ó…÷šô‚øšô‚ø÷õù÷õùFû¨üFû¨üƚƚüÐüÐq (q (ö ö øÝøÝÇeÇeè× è× s ÷s ÷›Åÿ›Åÿ„÷íù„÷íùKïEõKïEõßèçðßèçðÊä—íÊä—í_å1î_å1î^çëï^çëïYïõYïõøiûøiûMÿ«Mÿ«™ l™ lhŠ hŠ L LÉ"àÉ"à!$ç!$çê Uê U33- á- á8ÿsÿ8ÿsÿñ·õñ·õÞáìÞáìÖ›äÖ›ä)Ðnà)ÐnàÊÐÞàÊÐÞàñÚ çñÚ ç¼æÙï¼æÙï^û]ý^û]ý4 b4 b||ù+ÿù+ÿ/3"/3"ß-¸ß-¸†%µ†%µC C Ãþ“ÿÃþ“ÿïîŸôïîŸôWâæëWâæëþÕ åþÕ åÓGáÓGáhÖ-ähÖ-äÔàêÔàêì'óì'ók÷aúk÷aúÑVÑV P P ü üú 7 ú 7   Â`§`§NÞNÞ¾_¾_¢ÿ"¢ÿ"ìýÿìýÿü½ýü½ýƒû*ýƒû*ý>úGü>úGü÷_ú÷_úÿôŠøÿôŠøó*÷ó*÷bó«÷bó«÷Ïõ'ùÏõ'ùð÷ãúð÷ãúëû"ýëû"ý ³ ³V–V–/ à/ à* * ü X ü X >; >; h h xt xt 3Í3ÍVzVz””ÙZÙZQË QË Ì™Ì™-û³ü-û³üñíÉòñíÉò¼áïê¼áïêJØâäJØâä5تä5تäýÚ£çýÚ£çÓé‹ðÓé‹ð9úíû9úíû: ¾: ¾Z)Z)G.èG.èâ,Ëâ,ËÁ$øÁ$øíkík¤¤þ÷+úþ÷+ú´éðð´éððUãÖìUãÖìvä•ívä•íPé½ðPé½ðTò–öTò–öGûdüGûdüŸ)Ÿ)¯ z¯ z6 ¹6 ¹T {T {'k'kªüªüþiþþiþŸù‡ûŸù‡û ûCü ûCüôýÖþôýÖþê‰ê‰Û Û O¡ O¡ _· _· ¦ ¦ ÙÛÙÛ[ûÿü[ûÿüKîúóKîúóôãÖìôãÖìýÛUçýÛUçÖ5äÖ5äØŽåØŽåCÞ"éCÞ"ééðéðjõBøjõBølÿlÿó úó úL„L„•» •» 9% 9% Ñ ÂÑ Â±ÿåÿ±ÿåÿ²õ¡ø²õ¡ø%ì¸ñ%ì¸ñDãSìDãSìœá×ëœá×ëUåèíUåèíåìºóåìºóÎõ¥øÎõ¥øjÿÜÿjÿÜÿ;¹;¹w w …É …É e½ e½ Ñ· Ñ· þä þä ˆ Gˆ Gâ˜â˜?-?-mÿ]ÿmÿ]ÿþðþþðþ¤ÿ×ÿ¤ÿ×ÿ¾ ¾ ì ì  { {, , † † -2 -2 |Î |Î œ£ œ£ é ¡é ¡ Ü Ü# D# D‰ Љ Š é é  ? U? U×e×eÀÀ:®:®fÿšÿfÿšÿΥΥå"å"FåFå± Õ± Õ    f f d  d  ÐGÐG0éÿ0éÿÀ÷¼úÀ÷¼ú¿ïgõ¿ïgõé<ñé<ñÅäîÅäîöåeîöåeîÎè´ïÎè´ïÌìÍóÌìÍóõ'øõ'øøûŽüøûŽü¢Ú¢Ú5T5TÍzÍzááh™h™^ÿ®ÿ^ÿ®ÿ6ûÛü6ûÛüè÷œúè÷œúÅöøùÅöøù,ù‚û,ù‚û;ûÔü;ûÔüÌþÿÌþÿ¶…¶…ÈqÈq‹‡‹‡³–³–¬ã¬ã¿õ¿õ€'€'....Š`Š`ßßräräŬŬïÿÃÿïÿÃÿµûýµûýWøÔúWøÔú-ôÝ÷-ôÝ÷úð”õúð”õÈí‹óÈí‹óxëòxëò<ìó<ìóVðKõVðKõµ÷;úµ÷;úöþDÿöþDÿòàòà"§ "§ höhöÁÊÁʈ‡ˆ‡â â ?6?6øúøú¬çð¬çð¸ÚËå¸ÚËåiÏåÝiÏåݦʽۦʽÛÍïÜÍïÜ"ÕÍã"ÕÍãœâ‡ëœâ‡ëæï0õæï0õTþ”þTþ”þ : :wW wW WW ) )„Ì„Ìy Ñy Ñî¬î¬íúœüíúœüàòÐöàòÐöë?òë?ò¯ç~ï¯ç~ï é+ð é+ðÖí"ôÖí"ô÷öpù÷öpù…þÿ…þÿZ ÏZ ÏÍ™ Í™ ++\~\~ÒsÒs˜˜íívbvb¯×¯×Ö'Ö'öWöWÀé Àé §Ë §Ë  ¶ ¶ÀæÀæ Ó Ó•ã•ãÍ DÍ D„4 „4 _Ò_Ò¿K¿K!¹!¹á!‡á!‡$h$hxx b b TeTeIý&þIý&þúõùúõù±îô±îôí÷òí÷òFí óFí óÍî6ôÍî6ô?ò£ö?ò£ö öÁø öÁø§ø–ú§ø–ú¼ø±ú¼ø±úKøÜúKøÜúø¯úø¯ú}÷Fú}÷FúEöiùEöiùnõÏønõÏø3ôò÷3ôò÷ò‚öò‚öï¹ôï¹ôëê¢ñëê¢ñ{åüí{åüíà±êà±êjÛAçjÛAçÍ×[äÍ×[ä~ÕÞâ~ÕÞâË×täË×tä¢Ü„è¢Ü„èRå”íRå”í î:ó î:ó®÷?ú®÷?ú¢ÿ ¢ÿ IóIó_2_2U8U8r§r§ëú~üëú~ü±õ*ù±õ*ù›ñö›ñö‚íó‚íóCìKòCìKòøíÎóøíÎó‡ò÷‡ò÷ùûùûøÿÙÿøÿÙÿ›¾›¾ Ù Ù– C – C ¶ ¶ M< M< †r †r r6 r6 Ø Ø ãê ãê ²p ²p ¯ ¯ $³ $³ ê® ê® çï çï ” [ ” [  k kÎFÎFc c [[vívíPáPáò÷ò÷9Ñ9Ñ1v1vqîqî¿G¿G¾h¾h?ã?ã2ÿhÿ2ÿhÿýÌýýÌýgû†ügû†üú üú üzúGüzúGü¦û ý¦û ý«ü·ý«ü·ý|þúþ|þúþ‰r‰r-4-4ÛðÛððpðpÍÍêqêq>>´Æ´ÆTþÕþTþÕþ^ù¥û^ù¥ûpõùpõù*ó-÷*ó-÷Žów÷Žów÷öýøöýøýûmýýûmý   Ê Ê±T ±T ”Ö”Ö¦ ¦ ®m®mÜš Üš ! €! €à:à:ïüèýïüèý'ømú'ømú}ø÷ú}ø÷úàø{ûàø{ûÐûèüÐûèü…Êÿ…ÊÿU"U"ttsÙsÙ*I*I—P—PMþÿMþÿ§ûSý§ûSý‘ùëû‘ùëûÎøÖúÎøÖú ù&û ù&û°ùÏû°ùÏûúÑûúÑû¼øû¼øû3ö%ù3ö%ù^ò·ö^ò·öQî›óQî›óEêäðEêäðÜæëîÜæëîåä•íåä•íÕäíÕäíˆæ`îˆæ`îãé±ðãé±ð`î®ó`î®ó$ó÷$ó÷—÷Nú—÷Nú­ûý­ûýtþÿþtþÿþ/"/"ÜŸÜŸeeÎNÎN˜8˜8¢r¢rÿaÿÿaÿšüÁýšüÁý/úÉû/úÉû‹÷ ú‹÷ ú‡õºø‡õºø\ôø\ôø;õˆø;õˆøKøúúKøúú‚ý¶ý‚ý¶ý ù ùÕ 3Õ 3\? \? d'd' a a› › ³³à à ` ™` ™ddëþëÿëþëÿùûýùûýjühýjühý˜þTÿ˜þTÿġġ>q>q t t¼> ¼> »! »! « Ÿ« Ÿ' "' "-­-­ý¸ý¸’ýNþ’ýNþ‘üý‘üý“þCÿ“þCÿþjþjR€R€r ïr ï¢ Y ¢ Y Þ/ Þ/ ‘ „‘ „t£t£$÷$÷óýeþóýeþùûùû!õZø!õZø~ôå÷~ôå÷FöùFöùgúFügúFüIIÌÂÌ Q Q@ @ fD fD Pz Pz “ Ë“ ËÛÏÛÏžžßúüßúü°õþø°õþø+òö+òöÜòóöÜòóöèõëøèõëø–úªü–úªüOÂÿOÂÿô^ô^¦?¦?àLàLW‹W‹ûûVLVL¡ú ü¡ú üöËøöËø‡ò2ö‡ò2öfð0õfð0õUñÐõUñÐõQòÛöQòÛöôØ÷ôØ÷—õÆø—õÆø÷¤ù÷¤ùÖ÷3úÖ÷3úH÷«ùH÷«ùÅõ§øÅõ§øýó£÷ýó£÷iò«öiò«öÇðŠõÇðŠõ°ïÉô°ïÉôòïìôòïìô3ñ¸õ3ñ¸õáó—÷áó—÷>ö=ù>ö=ùPø®úPø®ú[ù[û[ù[û÷ùúû÷ùúûúPüúPüû¤üû¤üýþýþ2W2Wâ,â,N ˜N ˜<© <© ÐÌ ÐÌ 9€9€¡¡† † ‹5‹5Ö Ö 3# 3# B FB FåÕåÕ„„\\ø áø áLš Lš   WWðð¥ Ù¥ Ù Ë Ë7*7*··/ / v Êv Ê»»ø¯ø¯©~©~<€<€¥þIÿ¥þIÿ<ü>ý<ü>ýKø­úKø­úÚóŒ÷ÚóŒ÷6ï!ô6ï!ô'ë<ñ'ë<ñ±çï±çï"æäí"æäíÕærîÕærîBè—ïBè—ï3êÆð3êÆð¿ë¢ñ¿ë¢ñþêVñþêVñéÞïéÞïå1íå1íÞÞ¶èÞÞ¶èOÚoåOÚoå]Õqâ]ÕqâÒÎßÒÎß4Òòß4Òòß³Õ'â³Õ'â Ý¿ç Ý¿çõä«ìõä«ìþíóþíóõ`øõ`ø÷ûÙü÷ûÙüôýPþôýPþ©ý5þ©ý5þÛúaüÛúaü÷^ù÷^ù0ô÷0ô÷Þó^÷Þó^÷‘ö ù‘ö ùpüýpüýaxaxÝ vÝ v Ž  Ž ‡ ‡ÓÁÓÁù"Ùù"ÙË%ùË%ù~'ò~'ò*|*|ñ+üñ+ü´.« ´.« Y1¦"Y1¦"½3c$½3c$;6"&;6"&h7ô&h7ô&Ä6ˆ&Ä6ˆ&Ä3$Ä3$|/!|/!á)¢á)¢m#Äm#ÄBlBlZZŒ²Œ²²]²]3"3"ÛMÛMOZOZ±Ü±Ü}²}²Ì  Ì  ““Jó’÷Jó’÷Aæ(ïAæ(ï±Ùbå±ÙbåÐÛÝÐÛÝÉEØÉEØ#ÄäÕ#ÄäÕ¸Å]׸Å]× ÌªÛ ÌªÛÒ¹ßҹ߫Ø/䫨/ä²Þ>è²Þ>è£ßFé£ßFé{ß é{ß éÜ}æÜ}æ~×"ã~×"ã[ѳÞ[ѳÞiɰÙiɰÙÎÃYÕÎÃYÕ0ÀBÓ0ÀBÓÀóÒÀóÒ{Â¥Ô{Â¥ÔLÈëØLÈëØ¿ÎªÝ¿ÎªÝ ×>ã ×>ãÐßIéÐßIé èï èïï`ôï`ôöçøöçøû±üû±ü]þšþ]þšþ¹,¹, Ä ÄöRöRQ ×Q ×|Y |Y ÷r÷r¼¼É!ŠÉ!Šm&dm&d**<-Ð<-е.· µ.· |.ï |.ï m/h!m/h!0["0["°1=#°1=#F2±#F2±#%3$%3$ 3·# 3·#M0"M0"O-»O-»`'’`'’ ! !Âcc¥ ¥ ¤~ ¤~   6 Ð6 Ð' º' º²²¯8¯8ýáýýáý÷øéú÷øéúdõ“ødõ“ø‡ô²÷‡ô²÷¡ô0ø¡ô0ø÷«ù÷«ùHùŠûHùŠû$ûàü$ûàü–ú2ü–ú2ü÷©ù÷©ùîoóîoóåíåí´ØTä´ØTä<Ï Ý<Ï ÝÒÆ©×ÒÆ©×àÀqÓàÀqÓ-ÄËÕ-ÄËÕŽÌÚŽÌÚrØ0ärØ0䑿Úì‘æÚìoòÒõoòÒõIüDýIüDýX[X[֌֌{={=²ûZý²ûZý?ölù?ölùøñTöøñTö­ï÷ó­ï÷óîîÝóîîÝó;óäö;óäöú>ûú>û55( ¼( ¼¢ ¢ ¦¦ffB\B\0‹0‹ú¥ú¥Û Û SÍ SÍ à ò à ò  æ æK ºK ºC k C k × Õ × Õ Á Á Ò  Ò  y Xy Xg~g~22BöBöÍÿ½ÿÍÿ½ÿyÿ“ÿyÿ“ÿ{/{/±±¦Ù¦ÙÈ6È6CC9ýþ9ýþÂùÈûÂùÈûðõÜøðõÜø­ñæõ­ñæõoî¦óoî¦óì½ñì½ñìÜñìÜñÁì©òÁì©òmïóómïóóÛñõõÛñõõþôøþôøúøÝúúøÝúRü3ýRü3ýoÿ ÿoÿ ÿFšFšsjsjºçºç””ÆþÑþÆþÑþÜúyüÜúyüD÷µùD÷µù ôŽ÷ ôŽ÷šñðõšñðõNò¿öNò¿ösöÜøsöÜøûý4þûý4þU¾U¾ˆI ˆI “a“a½½H"H"ÛêÛê‡Ý‡Ý“j “j  ö öXlXlýâýýâýùûùûÞøâúÞøâú#ýþ#ýþ¦—¦—7a7ao / o / zh zh é é 3§ 3§ t  t   Á Á ¿ ¿§ § ’D’DææfÖfÖoÁoÁøÿøÿŸüâýŸüâý6ø…ú6ø…ú¿ôß÷¿ôß÷3ñdõ3ñdõŒîŠóŒîŠóªì:òªì:òhìòhìòòíñòòíñòfðªôfðªôvó)÷vó)÷B÷™ùB÷™ùzúëûzúëû-ýÝý-ýÝýiÿzÿiÿzÿy÷y÷VOVOœ]œ]æpæpB3B3=ª=ª›ÿˆÿ›ÿˆÿêúFüêúFü.÷:ù.÷:ùÂòröÂòröð³ôð³ôðÅôðÅôióôöióôö4ù»ú4ù»úh h œ² œ² £ £ %b%b]V]Vñ ñ 6 Š6 Š]é]é°ûúü°ûúü„õ3ø„õ3øªòˆöªòˆö@ó2÷@ó2÷ò÷úò÷ú+ýþ+ýþÂfÂf F FN N aQ aQ ón ón á ·á ·™×™×ððþ¬þþ¬þ,ú ü,ú ü¡ùZû¡ùZû¿ûïü¿ûïüDþíþDþíþÿÿ2g2gîcîcƒƒ‚6‚6ûTüûTüÁö;ùÁö;ù`óÑö`óÑöÓðÿôÓðÿôÎï4ôÎï4ôõïªôõïªôLò öLò ö•õnø•õnøïø&ûïø&û<üný<ünýùþRÿùþRÿÖ Ö ª@ª@OOüoüoù¸ù¸€ÿ™ÿ€ÿ™ÿ_ýþ_ýþ®ûÚü®ûÚü_úéû_úéû–ú8ü–ú8üšûßüšûßüƒýþƒýþãÿãÿ ^ ^ªÃªÃ"Ú"Ú>­>­‡©‡©Z“Z“nn.b.bſſppÊÊbûbû~ ~ ””¿I¿I¾S¾Sll{s{s®®ÕäÕä9ò9òÿYÿÿYÿýþýþ;üBý;üBýÑû ýÑû ýYûüYûüZúìûZúìû úšû úšû—ú"ü—ú"üŽûÝüŽûÝü]ý&þ]ý&þ{ÿšÿ{ÿšÿyyÊ`Ê`Ñ–Ñ–h ‚h ‚  Âç šç š‘ §‘ §%7%7@'@'ÔmÔmFÿ›ÿFÿ›ÿ5ý!þ5ý!þ’ûõü’ûõüýþýýþýVÿ‡ÿVÿ‡ÿàøàøƒƒº A º A š“ š“ ItItx1x1PQPQgŒ gŒ ô  ô  l ël ë—9—9™a™aì•ì•== ð ð¥ÿÿ¥ÿÿbüGýbüGýjøªújøªútóìötóìö„î{ó„î{óÆêfðÆêfðÛåGíÛåGíDâ¦êDâ¦êqà0éqà0ésß[èsß[è&ß è&ß èÞzçÞzçåÝPçåÝPç–Ýç–ÝçåÜŸæåÜŸæôÛýåôÛýå¨Úìä¨ÚìäãØÞããØÞãØsãØsãZØŽãZØŽãÛ(åÛ(åÕÝŽçÕÝŽç_ãë_ãëQè ïQè ï´ì,ò´ì,ò‘ðïô‘ðïô®òQö®òQöxóùöxóùöNô¥÷Nô¥÷žõøžõøàøíúàøíú”ýuþ”ýuþX-X-¡ ™¡ ™UUú¤ú¤#5#5)U)UÁ- !Á- !a1í#a1í#3³%3³%ä4&ä4&/6+'/6+'P7?(P7?(9@)9@) ;Ç* ;Ç*c=‘,c=‘,s@Æ.s@Æ.îAÕ/îAÕ/Bñ/Bñ/§@—.§@—.û;‡+û;‡+á4…&á4…&“-C!“-C!%æ%æðNðNkmkm­ô ­ô û› û› *f *f ý ý œ œ æ L æ L ¤v¤v;þZÿ;þZÿœóéöœóéö!çî!çîÁÙnäÁÙnäQÍ}ÚQÍ}ÚÂÿÒÂÿÒž»HΞ»HιÔ˹ÔË'¼lÎ'¼lÎ*ÁMÑ*ÁMÑ7ƆÕ7ƆÕ8ËžÙ8ËžÙЋÝЋÝ;ÑñÝ;ÑñݧÏÎܧÏÎÜ2ͤÚ2ͤÚgɪØgɪØfÆ<ÖfÆ<Ö*ÄéÔ*ÄéÔHÃÔHÃÔŸÄÚÔŸÄÚÔ È0× È0×ÎËÛÎËÛÕÂàÕÂàÂÜÞåÂÜÞåÏåíÏåíAî4óAî4óžö%ùžö%ùþÁþþÁþ·T·Ts ‰s ‰ Í Í äóäóRžRžÄ!Ä!q'™q'™o+Ïo+Ïy.ë!y.ë!.ž!.ž! -Ø -Ø +³+³a'Âa'Âi#ëi#ëc!lc!lÊ êÊ êš"eš"eh%úh%úž)Ÿž)Ÿ¦.ï!¦.ï!2$2$ò3H%ò3H%Š2%Š2%·, ·, ü%cü%c˜A˜AEäEäN ‹ N ‹ Ô<Ô<í˜í˜iþôþiþôþdü¢ýdü¢ý0ùû0ùû@õü÷@õü÷€ðaô€ðaôYëßðYëßð{çAî{çAî.çíí.çíí$èéî$èéîÃêiðÃêið‰îkó‰îkó¡óúö¡óúöéö˜ùéö˜ù_÷÷ù_÷÷ù¤õ—ø¤õ—ø¸ïlô¸ïlôé)ðé)ðâ)éâ)éÛÔãÛÔã-×÷á-×÷áÆØ¦ãÆØ¦ã)Ýç)ÝçÐæííÐæííÑðíôÑðíôÄúÔûÄúÔûî€î€„ ë„ ëm öm öu su såNåNÂIÂIŽýºýŽýºý-úÞú-úÞú¥ù9û¥ù9ûCú]üCú]üFþ¼þFþ¼þMMëëÂzÂzP æP æº º ö ö Hì Hì ¦ß ¦ß Û` Û` òŽ òŽ ï  ï  * * ëßëß00ÍuÍuýÌýýÌýFúçûFúçû°ø¢ú°ø¢ú=ø<ú=ø<úùüúùüúÝúTüÝúTü;þ¦þ;þ¦þš@š@höhöiiH €H €„̄̚åšå2þ¦þ2þ¦þ"÷`ù"÷`ù°ð]ô°ð]ôîêyðîêyð”æí”æíàå§ìàå§ìççYîççYîåëFñåëFñaò)öaò)öËø÷úËø÷úŸÉŸÉ8 š8 šg³ g³ ÇtÇt ¦ ¦&„&„KËKËKkKk—? —? êèêè§çÃîúÁûîúÁû‹õÀ÷‹õÀ÷ƒô¬÷ƒô¬÷æö¶øæö¶ø‡ýþ‡ýþÛÂÛ¿ ¿ ±é±é"%¿"%¿«,Ý «,Ý r,I!r,I!÷'6÷'6;2;2‰ ‰ •a•a)ögù)ögùÎìfñÎìfñèÏíèÏíÜç—íÜç—í'íò'íò¿ñÙõ¿ñÙõ—øFú—øFúDþÿDþÿ½ý½ý\\»üÖý»üÖý¶øú¶øúó÷ó÷§îó§îóUé+ïUé+ï]å9ì]å9ìŽâ…êŽâ…êPáxéPáxéÈà÷èÈà÷èèß^èèß^èÌÜPæÌÜPæÔÙQäÔÙQä;Ö+á;Ö+áõÓßõÓßÌÒpÞÌÒpÞ{ÔÖß{ÔÖßfÙ%ãfÙ%ãéÞÈçéÞÈç]æÓì]æÓìíÔòíÔò¥õdø¥õdøaüýaüýÜuÜu|<|<ǿǿt „t „šš šš ºí ºí ù˜ù˜Ô>Ô>œäœäQAQA&³ &³ © © $7 $7 +O+Oðsðs “ “œ*ºœ*º¼3'¼3'˜>4.˜>4.*EJ3*EJ3ÿEº3ÿEº3ˆCi2ˆCi2¸=u-¸=u-¼4Þ&¼4Þ&¢*?¢*?üÒüÒÕjÕj¿ï ¿ï ó ó Ù  Ù  4 § 4 § O° O° æø æø K. K. Þ ìÞ ì¿˜¿˜¤þ¡þ¤þ¡þÝöÀøÝöÀø$îúò$îúòUçþíUçþí/âÇé/âÇéwÞçwÞç³Þç³Þçhßwçhßwç}à'è}à'èÜá‰éÜá‰éñàúèñàúèóÜIæóÜIæÙ¹ãÙ¹ãKÓ›ÞKÓ›ÞXÎøÚXÎøÚ_ɘ×_ɘ×/Æ{Õ/Æ{ÕáÅmÔáÅmÔgÈgÖgÈgÖnÌòÙnÌòÙüÒ“ÞüÒ“ÞaÛgäaÛgäÅâ}êÅâ}êÝéÄïÝéÄïhïïóhïïó©óØö©óØöóõÁøóõÁø'÷[ù'÷[ù-÷¡ù-÷¡ù÷cù÷cùoö ùoö ùößøößøíö=ùíö=ùÒø²úÒø²úÄûýÄûýbÿ’ÿbÿ’ÿ55v‹v‹ð òð ò¶C ¶C °°¸¸B}B}å’å’GëGë!¯!¯ñœñœÚ|Ú|ÈiÈiFFììa…a…mßmß=â=âáÈáÈ…¹…¹FçFçüüDeDe-j-jkrkrO>O>óG óG ²™ ²™  ¥  ¥ è 轇½‡hJhJá«á«  í ‡ í ‡ °7 °7 w1w1ßß´ ´ å óå ó<J<JÙûiüÙûiüÍò6öÍò6ö ê#ð ê#ð=åûë=åûëâdéâdéþâžêþâžê åòë åòëïç@îïç@îÈì8ñÈì8ññ˜ôñ˜ô ôÛö ôÛö@ó~ö@ó~öƒñòôƒñòôîœòîœò«é>ï«é>ïƒåÄëƒåÄëÁáAéÁáAé,ß‘ç,ß‘çÜÞ§çÜÞ§ç±ßè±ßèbá ébá é<ã‘ê<ã‘ê0åì0åì1çfí1çfí‘ç°í‘ç°í®æ!í®æ!íjåìjåìÍähëÍähëºä~ëºä~ëoæÉìoæÉì8è"î8è"îë8ðë8ðÂîóÂîóŽòøõŽòøõ÷lù÷lù]û˜ü]û˜üšÿ³ÿšÿ³ÿ : :<Þ<Þí#í# Ô Ô    pX pX ÈÈŸžŸž–!ù–!ùè%è%Ó(=Ó(=_)+_)+w(Ow(O(&Í(&ͯ#Ó¯#Ó›!›!ì ­ì ­l!gl!g>"˜>"˜ #| #|1$"1$"l$<l$<p#žp#ž!»!»Þ…Þ…mm÷ý÷ý} } Î s Î s / Õ/ Õ÷÷WÒWÒ»€»€%Ö%Öšðšð=M=Mgû>ügû>ü õÜ÷ õÜ÷íÝñíÝñúåeìúåeì àAè àAè ÜBå ÜBåˆÙ=ãˆÙ=ãfÚãfÚãÝÄåÝÄå¦á-é¦á-é×å­ì×å­ì&êÒï&êÒï5ìñ5ìñë}ðë}ð(çXí(çXíá@éá@éÚÑãÚÑãŠÓ_ÞŠÓ_ÞîÎ ÛîÎ ÛÐþÛÐþÛ±Õà±ÕàuÞ^æuÞ^æGéäîGéäî_óö_óöÅûüÅûü¨»¨»Ê³Ê³rvrv¶¶RDRDƒƒ8þ ÿ8þ ÿçþÿçþÿ::¦`¦`ÉdÉdT ýT ý ý ýy y ƒƒ ƒƒ m- m- é† é† 8X 8X gÄ gÄ Éô Éô Gk Gk ))ZZ6‚6‚MüMüñ‚ñ‚––p¿p¿“õ “õ • å• åþÿþÿ³ÿ¾ÿ³ÿ¾ÿ–E–Eü±ü±F 5F 5_ _ ¼Ö¼Öêåêåãaãa+ + ÀâÀâ‰ÿ‰ÿ¦û2ü¦û2üÌøºúÌøºúù ûù û³û£ü³û£üáýýýáýýýâ§â§;ä;äT£T£§M§MÄþ5ÿÄþ5ÿ@ý þ@ý þ…þòþ…þòþdSdSOÊOÊ W Wü ü ÅôÅôknknáö áö eeNü ýNü ýZó<öZó<öFìÙðFìÙðÔæµìÔæµìè¦íè¦í6ë_ñ6ë_ñfô÷fô÷ üÒü üÒüPŒPŒ^(^(þ ìþ ìÛ'Û's ÿs ÿŠø÷ùŠø÷ù§ð­ó§ð­ó{êÂî{êÂîÍå¿ëÍå¿ë®ä‰ë®ä‰ë7å®ë7å®ëåç©íåç©íDëðDëðTî—òTî—ò¿ñCõ¿ñCõ¾ô™÷¾ô™÷Èõ$øÈõ$øaõ;øaõ;ø óPö óPö~ñçô~ñçô4ïTó4ïTó#î?ò#î?ò€îŠò€îŠòïüòïüòï*óï*óDï‚óDï‚óî¿òî¿òÇíUòÇíUòzí5òzí5òcîòcîò,ððó,ððó@ó#ö@ó#ößö/ùßö/ùüÃüüÃü—€—€ÛëÛëY ò Y ò   ==X× X× ¦ h ¦ h ˆ 0ˆ 0 u u`½`½]ÿâÿ]ÿâÿÖÿÀÿÖÿÀÿÜrÜrå å ÚÃÚÃÓÝÓÝ:'~:'~p-š!p-š!Ï0j$Ï0j$È2!&È2!& 2ë% 2ë%–.Y#–.Y#Î) Î) #Î #ÎËËámámù  ù  ààKK< < b? b? ;O;O‚ }‚ }[)®[)®å/7$å/7$0?$90I$.#ð+Ô!ß%ÏUt<t<Ð Ð iúDûiúDû›ïÃñWëÛîçõë0æìMåìÈäSìEä‹ìEä‹ìùèlîùèlî'íRñ'íRñ×ðçó×ðçóô0öô0öuòÑõuòÑõµîÔòµîÔòŽéçîŽéçî…â±é…â±éYÛpäYÛpäÖüßÖüß´ÑPÜ´ÑPÜ,ÎãÙ,ÎãÙÌØÌØ0Ë6×0Ë6×JË×JË×mÊ×mÊ×úÈöÕúÈöÕ=ÇÊÔ=ÇÊÔrÅTÓrÅTÓçÄÖÒçÄÖÒbÅ$ÓbÅ$ÓèÇ2ÕèÇ2ÕËÝ×ËÝ×¤ÐØÛ¤ÐØÛHÖZàHÖZà4Ü‚ä4Ü‚äÎâpéÎâpéãçËíãçËí¸ìñ¸ìñò{õò{õj÷€ùj÷€ùxü€ýxü€ýs*s*·u·uàêàê‰ #‰ #Ð ^Ð ^Þ lÞ l7 «7 «Ì Å Ì Å ç ç ÿùÿù Ç ÇP+!P+! 7Y* 7Y*CÁ3CÁ3_L–:_L–:ºR8?ºR8?™V²B™V²B&VöA&VöAmPQ=mPQ=.I•8.I•8ó@;2ó@;2,8Ö*,8Ö* 1t% 1t%[,="[,="m,°!m,°!U-2#U-2#"0Z%"0Z%¨1…&¨1…&2E&2E&µ/ï$µ/ï$4+ã 4+ã ¦#‘¦#‘ýtýt¼R¼R` 5` 5ŸPŸPêûðüêûðüùšúùšú¿öÉø¿öÉøõ»÷õ»÷§ò¢õ§ò¢õkî[òkî[òØçNíØçNíÒßçÒßç%ÖPß%ÖPßÊéÖÊéÖúÁîÏúÁîÏù»Ëù»Ë·ÖÇ·ÖÇJ´"ÆJ´"Æ·µ0Ç·µ0ÇŒ¹ØÉŒ¹ØÉ¿}ο}ÎàÅ ÓàÅ Ó.Ën×.Ën×ÙÎÚÙÎÚhÐiÛhÐiÛÑÔÛÑÔÛÑýÛÑýۢЯۢЯÛÐÛÐÛèÏôÚèÏôÚ‡ÐgÛ‡ÐgÛÓÐÝÓÐÝfØPáfØPá~ßáæ~ßáæ0èðí0èðíñ˜ôñ˜ôuúçûuúçû,ç,çh¿h¿Eý Eý ϢϢ’]’]FOFO÷b÷b>r>rÏ -Ï -## ## Û&ÄÛ&ÄE)ëE)ë ," ,"@.#@.#R/B$R/B$s/$s/$Ð.÷#Ð.÷#-ê"-ê"Õ+ƒ!Õ+ƒ!½); ½); I(I(¾&Þ¾&Þ%»%»o#[o#[’ ’ ŒŒžž‚‚å„ å„ é @é @€½€½h6h6UzUzÞ¯Þ¯99áŽáŽç)ç)ÿfÿÿfÿ!ùÏú!ùÏú#ð¹ó#ð¹óé(îé(îüßñçüßñçÙDãÙDãÕßÕßOÔ°ÝOÔ°Ý&ÕøÞ&ÕøÞð×áð×áhÝYåhÝYåcâ8écâ8é忏ì忏ìóêÝïóêÝïxíÉñxíÉñXí˜ñXí˜ñˆí©ñˆí©ñìÐðìÐðì\ðì\ðí•ñí•ñEðšóEðšó­ó'ö­ó'öÊøLúÊøLúýÀýýÀý%—%—÷ë÷ëýýkkÖˆÖˆAøAøâ â GG„[„[%%L pL p Ñ Ñ¬ ÿ ¬ ÿ Ï Ì Ï Ì „G „G Ý} Ý} ¥[ ¥[ < < …8 …8 †ê †ê ü. ü. çç!5!5e… e… fÿ fÿ ©  ©  >b>bfefe´úü´úüÅô­÷Åô­÷›ïó›ïóªëðªëðCë×ïCë×ïêìñêìñÈð^ôÈð^ôÓô;÷Óô;÷xùÍúxùÍúXýÈýXýÈý þæþ þæþúý:þúý:þòû;ýòû;ýüøÂúüøÂúGöÔøGöÔø:ôëö:ôëö¾ò‚õ¾ò‚õêòúõêòúõXõÐ÷XõÐ÷àø—úàø—úzüFýzüFýllaùaù¹‹¹‹%w%w. . þ|þþ|þý„ýý„ý€þ®þ€þ®þcLcLÙ‰Ù‰Ñ Æ Ñ Æ tŒtŒ¦¾¦¾ £ £r!œr!œ××çsçsÎÎþ l þ l ÉHÉHÚþ|ÿÚþ|ÿ>þŒþ>þŒþ,ÿÆÿ,ÿÆÿr¨r¨q q 0u 0u Ô© Ô© H2 H2 ± Þ ± Þ Ù0Ù0]]•û˜ü•û˜üœõõ÷œõõ÷ëðPôëðPôWíˆñWíˆñ¹êï¹êïëðëðîìÜðîìÜð¿î=ò¿î=ò}ð’ó}ð’óÆðüóÆðüólð¾ólð¾ó¥ï ó¥ï óðî¯òðî¯òuíÆñuíÆñ=íAñ=íAñ–îYò–îYò¯ðáó¯ðáóôò±õôò±õ–õ«÷–õ«÷ã÷gùã÷gùzøúzøú2÷Kù2÷Kù»õCø»õCø³ó>ö³ó>öäð]ôäð]ôqîTòqîTò¹ìãð¹ìãðÞíÝñÞíÝñ$ò|õ$ò|õª÷_ùª÷_ùÁþmÿÁþmÿ¿0¿0I I ¬¬}}ŽŽWcWcЦ Ц  a a ³ ³MBMB·?·?¢µ¢µ× t× tv ½ v ½ • ¡ • ¡ w Íw ͪkªkrara¾§¾§MMâîâî ð ðð Ô ð Ô ³Ñ ³Ñ ÏÏ9š9š¾S ¾S **þÿþÿ9÷ù9÷ùÊñaôÊñaô˜í~ñ˜í~ñ!ñ(ô!ñ(ôsö$øsö$øçþèÿçþèÿ“7“7€> €> æ&æ&c"c"ÈÈJ J  ç çBÀBÀQûüQûüøÙùøÙùÔøúÔøú•úÇû•úÇû»üÖý»üÖý??oo]K]KJîJîuJuJAaAarrÓÿÚÿÓÿÚÿºýAþºýAþUüAýUüAý¿û¹ü¿û¹üûWüûWüù¿úù¿ú™÷ù™÷ùfô—öfô—öºðûóºðûóûí òûí òìfðìfðÀêMïÀêMï@ë›ï@ë›ï³ì©ð³ì©ððzóðzó¿óŒö¿óŒö ø·ù ø·ù.üÜü.üÜüÀýžþÀýžþÛüjýÛüjý2ú’û2ú’û,õ´÷,õ´÷`ï<ó`ï<óêîêîæëêæëêKãcéKãcéããæéããæéºç*íºç*íÙíÈñÙíÈñuõA÷uõA÷ü.ýü.ýÌ×Ì׸ Î ¸ Î ÀKÀKí£í£í í ——/2/2ÔGÔGÛ \ Û \ û4û4II×û‚ü×û‚ü ù û ù ûÄûãüÄûãü"t"tEøEøàSàSnþnþÚ$¬Ú$¬+¢"+¢"Ü,S#Ü,S#þ''þ''—œ—œÖ„Ö„±x±xOý4þOý4þô¦öô¦öï4òï4ò&îCò&îCòKñ óKñ óI÷áøI÷áøJüBýJüBýëëg¬g¬4 ì4 ìgÄgÄ  –ýþ–ýþiø7úiø7úæòÒõæòÒõŸîhòŸîhò íæð íæð½íSñ½íSñ…îæñ…îæñmï•òmï•ò¯ïXó¯ïXó:îóñ:îóñÝìßðÝìßðëËïëËï¸ê+ï¸ê+ï½ê0ï½ê0ïì+ðì+ð3îêñ3îêñkñ–ôkñ–ô\õ—÷\õ—÷¶ù û¶ù ûîý.þîý.þcÂcÂà«à«v¶v¶>  >  û  û  .Ô .Ô ÚN ÚN ~E ~E   èèÑõÑõkËkË¢þ±þ¢þ±þ þ‚þ þ‚þ“m“m˜n˜n] Y] YC®C®¹¤¹¤a)a)/!Â/!ÂÁ !Á !00‘ǑLj ± ˆ ± ||9û—ü9û—üøôÚ÷øôÚ÷}ñ˜ô}ñ˜ôòõòõÑó‰öÑó‰ö)ø±ù)ø±ùÏûZüÏûZüÖþ‘þÖþ‘þ¬þÿ¬þÿÅýhþÅýhþ¨ûPü¨ûPü½ø5ú½ø5úYõX÷YõX÷¾ñiô¾ñiô•î5ò•î5òí…ñí…ñ»î?ò»î?ò»ñ¢ô»ñ¢ôèô@÷èô@÷øƒùøƒùoúsûoúsûoù”úoù”úœ÷ùœ÷ùBó¯õBó¯õïbòïbò ëKï ëKï è í è íèüìèüì½êÿî½êÿîQïzòQïzòÇõá÷Çõá÷«ü&ý«ü&ý¥Ó¥ÓA dA d" q " q Á Á ² ² +s +s ’ © ’ © ÷  ÷  ­Ö­Ö®F®F Ï ÏQóQóñ èñ è™Î ™Î "‹"‹n n ÆÒÆÒ¼¼ÀÀyoyoMM@Ë @Ë T_ T_ Í 8 Í 8  Ç  Ç ° D ° D 3 ´3 ´v v h €h €_ë_ë7-7-Y Y ¬ÿ³ÿ¬ÿ³ÿ®üHý®üHýÐùåúÐùåú]÷ù]÷ùFö\øFö\øþõî÷þõî÷ëõ´÷ëõ´÷“ôöö“ôöö•òGõ•òGõ6ð«ó6ð«óîÓñîÓñ©ìŒð©ìŒð#ìTð#ìTð.î¯ñ.î¯ñÛð=ôÛð=ô?õ™÷?õ™÷)úqû)úqû>þíþ>þíþººyyëýþëýþ'ùaú'ùaúóòaõóòaõî{ñî{ñ&éùí&éùíyååêyååêþä‰êþä‰ê†çÀì†çÀìtëïtëïMð»óMð»óàöføàöfø[üÆü[üÆüÝ`Ý`ðKðKOIOIì:ì:ä´ä´5p5pFÿgÿFÿgÿ˜ÿ˜ÿ0•0•DDŒÞŒÞ‹ O ‹ O Ì % Ì % # # ‰z ‰z á ­ á ­ ˆ gˆ gõpõpÁÁÁÁ··ŽÍŽÍ^’^’Á)Á)F—F—ââ±D±DTSTSóÏóÏ*T*TvâvâííéØéØGØGØülülŽ šŽ š® ©® ©³ –³ – p p­­¤7¤7‚ýßý‚ýßý6ùFú6ùFúÓõp÷Óõp÷/õx÷/õx÷ö\øö\ø¹ùƒú¹ùƒúÈü„ýÈü„ýç„ç„<ñ<ñ=Ý=Ý|y|yÉ|É|MŽM޲ÿöÿ²ÿöÿ•ýÎý•ýÎýçûxüçûxüøü€ýøü€ý«þÿ«þÿå2å2HAHA± ¨± ¨O î O î >Ÿ >Ÿ g ´ g ´ 4  4  ååIÎIέÿÿ­ÿÿ¿üý¿üýjüTýjüTý0ÿ§ÿ0ÿ§ÿ\\C 7C 7é  é  x x 88~-~-' I' I^^¨ùû¨ùûTñPôTñPôÊê ïÊê ïçìçìéç¼ìéç¼ìíðíð’ñ‰ô’ñ‰ôöUøöUø¾ú‰û¾ú‰û:þ5þ:þ5þåý{þåý{þÀûýÀûý7ùLú7ùLúnóâõnóâõìîtòìîtò†ëàï†ëàïêîêîWèÐìWèÐìè—ìè—ìüèŒíüèŒíVë\ïVë\ï‘íñ‘íñ'ïmò'ïmòÊïêòÊïêò&ðFó&ðFó°ðó°ðóµð˜óµð˜óöðýóöðýóøò‰õøò‰õSõª÷Sõª÷Ïø(úÏø(ú–üeý–üeýë:ë:¬$¬$:[:[ä6ä6¼g¼g™ý+þ™ý+þûaüûaüüÏüüÏü þmþ þmþ÷ó÷ó  ˆè ˆè OO²1²1‚#Â#æ%‹¦%‹ÿ"†ÿ"†þ{þ{ë ë —O—Oä™ ä™ ( ( • • ()()Á Á IŽIŽ:û:û­ÿ­ÿOÇ OÇ ‚ Æ ‚ Æ =  =  Íà Íà nt nt ¯†¯†ÑÂÑÂýGýGèè÷—÷—9 ^9 ^5ÿLÿ5ÿLÿSõÑ÷SõÑ÷víñvíñ\çþê\çþêÉânèÉânèXæíêXæíê¢é¹î¢é¹î»ð©ô»ð©ô¼ö©ù¼ö©ùÁûÒýÁûÒýæÿ`ÿæÿ`ÿªüQýªüQýú÷²øú÷²øðDóðDó¬ê@î¬ê@î¾äé¾äéYàåYàå Ü]â Ü]âiÜ+ãiÜ+ã@ÞEä@ÞEä(áç(áç•åbê•åbê—éjí—éjí2í*ð2í*ðÙï¥òÙï¥òAòÞôAòÞô‚óö‚óö¸ôèö¸ôèöáõµ÷áõµ÷ö÷ùö÷ù]ú+û]ú+ûgüÕügüÕüáý;þáý;þ}þðþ}þðþþƒþþƒþÉý0þÉý0þ“ýóý“ýóý¬ý þ¬ý þþ×þþ×þbUbUG†G†oPoP[ ý [ ý ''··gg0x0x¬˜¬˜’`’`& ¹ & ¹ u†u†ë6ë6-ý°ý-ý°ý@üÔü@üÔüÌü[ýÌü[ý‚ÿhÿ‚ÿhÿ_q_qAªAªi ‡ i ‡ c€ c€ XÊXÊð2ð2:Œ:Œúúí“í“­ a ­ a ° °õúwûõúwûÍòÚôÍòÚôaì§ïaì§ïÉæ®ëÉæ®ëåxêåxê{èÞì{èÞìŠîÁòŠîÁò\öÕø\öÕø‘ϑϥ  ¥  ÚŽÚŽK‚K‚}y}y£X £X »/»/EýþEýþÐô—÷Ðô—÷î°ðî°ðóèÝìóèÝì-ê4î-ê4îƒë‘ïƒë‘ï~ôæõ~ôæõ÷û°ü÷û°üE—E—æ W æ W õ–õ–¥é¥éY Y     a a ³³€‹€‹ØtØt$$9-9-uõuõé“é“_]_]ÿ_ÿÿ_ÿšýþšýþöû ýöû ýûAüûAü-ûü-ûüRû9üRû9ü¦üKý¦üKýþuþþuþóÿóÿpqpq#É#É››HÑHÑt!t!fäfä ª ª<ø<ø‹ÿªÿ‹ÿªÿüÃüüÃü³øÃù³øÃù’ó-ö’ó-ö˜ïNò˜ïNòõë_ïõë_ïPé?íPé?í’èœì’èœì+ëâî+ëâîpð³òpð³ò÷ù÷ùäþSþäþSþ–C–Cð  ð  y Ä y Ä á B á B NNu†u†îýVþîýVþ¨ø%ú¨ø%ú|ô:ö|ô:öòÐôòÐô5óÂõ5óÂõŸøŽùŸøŽù"ý½ü"ý½üÖÖ ò ò, ˆ, ˆ]  ]  [ á [ á l  l  Ô ÛÔ ÛÊøÊøzSzSáÎáÎ_1_1É ÝÉ Ý\ Õ \ Õ   þ±þ±--æp æp 4 Â4 ÂnÕnÕgÿ ÿgÿ ÿ\úZû\úZûYöó÷Yöó÷Éô¯öÉô¯öÃõ§÷Ãõ§÷3ùÅú3ùÅú×übý×übý,º,º¬n¬né’é’¶ˆ¶ˆ»æ»æœœöýþöýþ ùWú ùWú®ô€ö®ô€öÞð‡óÞð‡óîNñîNñ îEñ îEñ¾ïòò¾ïòò=ódõ=ódõÕöUøÕöUøåù×úåù×úzüõüzüõüÕý+þÕý+þ‹ýóý‹ýóýXýÍýXýÍýü«üü«ürú}ûrú}ûäøSúäøSúIøµùIøµùù)úù)úKúaûKúaû]üý]üý¸þûþ¸þûþ3Þ3ÞpÝpÝ3p3pÈÅÈÅ{^{^òøòø@•@•žžSªSªè0è055r{r{YOYO³’³’¥â¥â  y~y~ÀÿäÿÀÿäÿþÿþÿÔíÔíÁýÁý> Š> а € "v ö âwý‘­™P™Pù ù @ 2@ 2Á—Jjþþýïû#üuùIú~÷Òøˆõ\÷ˆõ\÷õ.÷õ.÷Y÷ùY÷ù³øúú,ûƒüýøþ÷þùÎú§ã"ã"• Ý• ÝK  K  ø ñ òêÙI¡¨jö&EãEã;;XiXi00öJöJ[L[Lkk4s4s&Œ&ŒiÿÿiÿÿaüüaüüZøúZøú2õ÷2õ÷ró˜õró˜õŒô‘öŒô‘öžõ÷žõ÷¦öeø¦öeø/ø<ù/ø<ùùúùúÃúºûÃúºûÕùûÕùûŠøtùŠøtùçõÔ÷çõÔ÷êóÎõêóÎõòQôòQôˆñôóˆñôóÍòõÍòõ¢ó»õxôoö4öÝ÷ð÷Mùhù„úáú¼ûYýÇýYýÇýeÿxÿeÿxÿkþ±þkþ±þûìûAù/ú‚÷rø»ôƒöõñ•ôÏï×òªíñªíñvêƒîvêƒîíêUîíêUîCíñðCíñð_òßô_òßô|ø¦ù|ø¦ù‘ýCþ‘ýCþ#š#šºº - -µ÷µ÷oo·ÿÙÿ·ÿÙÿúü¿ýúü¿ý…üý…üý¿ý*þ¿ý*þŸˆŸˆ&§&§ í í~¸ ~¸ ܞܞ^=^=V›V›j& j& ü Zü Zj"j"ÉÉ=3=3®w®w9í9í; Ê; ÊæÎæÎÙFÙFOfOf–p–pêKêKºÝºÝ°4 °4 ÛñÛñ–þöþ–þöþ³øú³øúDöv÷Döv÷rø'ùrø'ùý.ýý.ýô¢ô¢EEó ¼ ó ¼ ±‡ ±‡ šŽ šŽ ? ? ÇpÇp=©=©ÏüGýÏüGýrøÂùrøÂùõþöõþöRô>öRô>öƒô1öƒô1ö\õ÷\õ÷6öØ÷6öØ÷÷¢ø÷¢øéö~øÄö[øcöý÷ö¡÷Çõe÷Œõ+÷UõîöUõîöRõ÷Rõ÷ˆöøˆöøù7úvúIûíû]ü$ý•ý]þÎþ†ÿÎÿ°Î°Îjjßß?ÿ\ÿ?ÿ\ÿ¤û¸ü¤û¸ü*ø‡ù*ø‡ùBóõBóõÏî¤ñÏî¤ñ¤ìð¤ìðXînñXînñò7ôò7ôTöý÷Töý÷Lý%þLý%þ,,i i ¥ å ¥ å ® ® Z ¨ Z ¨ xxJnJnoûÙûoûÙû¿ö0ø¿ö0ø7ôõõ7ôõõcõ÷cõ÷SøðùSøðù¥ûWü¥ûWüiþYþiþYþ^ÿ^ÿûþ ÿûþ ÿ¢ýJþ¢ýJþ“üý“üýÄû#üÄû#ü¬üfý¬üfýAÿ¤ÿAÿ¤ÿ  Ò/Ò/“ F “ F ­H ­H _ü _ü Î Ú > ¹ üûº?>ÿ0ÿÃû"ücô9÷cô9÷“îåñ“îåñŽëïŽëïØïÖñ¼òyô¡õ÷Ñú;ûZÿ9Fp2p2£t £t ´S´SI…I…¦;¦;ô ‘ ô ‘ ùùÐâÐâ÷ûü÷ûüûö>øûö>ø ÷©ø ÷©øjøùjøùÙü~ýÙü~ýtt,ý,ý¦ (¦ (" j " j   ý¢ ý¢ ô  ô   ø  ø Ö &Ö &ÜŠÜŠI[I[»+»+œ[œ[’þšþ’þšþ©ü2ý©ü2ý)ûü)ûüàú¤ûàú¤û|û3ü|û3üôüBýôüBý»þãþ»þãþ%ß%ߨ ¨ %F%Fäyäyûûá>á>|åÿ|åÿÜùúÜùú’ôKö’ôKösðüòsðüòXíðXíðë·îë·îÛë©îÛë©îîæðîæðò'ôò'ôïõ…÷ïõ…÷3ûÔû3ûÔû @ @¤8¤8²`²`Ú Ó Ú Ó ` K ` K m ¥ m ¥ ÈßÈßæ¶æ¶úçúúçúëò£ôëò£ôWí¹ïWí¹ï1æ¦ê1æ¦êÉàÛæÉàÛæ½â`ç½â`ç§æë§æëDï³òDï³òøùøù¯¯ãã ãã ñnñnÓ¡Ó¡Y÷Y÷$Ä$Äé é uDuD$÷“ù$÷“ù:ñ<ô:ñ<ô¦ìð¦ìð­ëŸï­ëŸï~îñ~îñócõócõnú¿únú¿ú‰¶‰¶|‹|‹k Ãk Ãw # w # ±  ±   _  _ Ï : Ï : Í Í……ßß]Ü]ÜËËöâöâ  çýFþçýFþîû…üîû…üŸúlûŸúlûâúÐûâúÐû–û2ü–û2ü÷ü˜ý÷ü˜ýËþÄþËþÄþäŽäŽ”ÿ”ÿbb‘–‘–P|P|TTµÜµÜ-n-nÃÃ} ½} ½} i} iýý”†”†§ÿŸÿ§ÿŸÿãøBúãøBúàðóàðóšê6îšê6îÖå0êÖå0êãä éãä éÑé.ìÑé.ì+î–ñ+î–ñwøÄúwøÄúãNãN Ø Ø œœPÔPÔæ*æ*žÓžÓ£» £» ôôÇŠÿÇŠÿÕùUúÕùUú(õ÷(õ÷nõh÷nõh÷Oø ùOø ùýèýýèýÛÖÛÖ] Ì] Ì è  è a A a A G X G X › å› å……nÀnÀÙÆÙÆ4.4.Þ‡Þ‡”Ñ”ÑR&R&k îk ît Ë t Ë …/…/N•N•šü­üšü­ü õùö õùöîÄðîÄð½èõë½èõë…å é…å éæ êæ ê¢èSì¢èSì î/ð î/ðeõ½öeõ½ö‰û5ü‰û5ü˜µ˜µ — —¾u¾uAhAh¾ûÇü¾ûÇüêõA÷êõA÷VðçòVðçò&ëÞî&ëÞîBç:ëBç:ë¦æGê¦æGê~è]ì~è]ìDíùïDíùï]ò™ô]ò™ôŒ÷.ùŒ÷.ùäûýäûý{ÿ*{ÿ*g¹g¹4„4„££ / /¿c¿cõÿõÿ}ÿ‰ÿ}ÿ‰ÿ“þ¡þ“þ¡þŒÿ¢ÿŒÿ¢ÿì ì ’:’: å å d dë ë H H ªmªmþ„þ„Á\Á\à” à” é» é» »‡ »‡ ®b ®b 4Þ 4Þ "h"hðKðKýÒ ýÒ + l + l {  {  ´ à´ àï n ï n à O à O Ò ` Ò ` /ü /ü  cca a § Ö § Ö ¯Ê¯ÊÀIÀI—û™ü—û™ü§ödø§ödø|ôåõ|ôåõëóvõëóvõô!öô!övö—÷vö—÷ãø˜ùãø˜ùKûðûKûðû0þsþ0þsþ  óÿóÿ7þ¹þ7þ¹þ[ûÆû[ûÆû8øqù8øqù›ôŽö›ôŽöÙñ[ôÙñ[ôñ0óñ0óÊñœóÊñœóAó×ôAó×ôðôRöðôRö¾öò÷¾öò÷ødùødù·øÏù·øÏù‘ø¼ù‘ø¼ùVø‹ùVø‹ùøIùøIùø÷.ùø÷.ù{ø…ù{ø…ùùuúùuú‰úNû‰úNûiûüiûü±ûYü±ûYüûÐûûÐûËùãúËùãú‘ø¸ù‘ø¸ùøö6øøö6ø-õ·ö-õ·öãó¤õãó¤õ2óõ2óõßóÁõßóÁõ¾öø¾öø¤úû¤úûpopoªªªªü § ü § êGêG!!ã1ã1>S >S ÊnÊnT@T@²ö±÷²ö±÷3îÞð3îÞð“çÕê“çÕêÚå,êÚå,êÍçHëÍçHëGíðGíðó+õó+õ¾ûXü¾ûXüÚ;Ú;˜ ~˜ ~ìr ìr dndnññZj Zj ­ ­ S¾S¾¨þçþ¨þçþúüúúüúoöa÷oöa÷ôîõôîõÁôöÁôö÷’ø÷’øKûüKûüºYºY¶ï¶ï0 •0 •ª i ª i ܇ ܇ Hì Hì ´± ´± üþ üþ *8 *8 À à À à ž Õ ž Õ  l  l û h û h á k á k H ïH ï^r^r²ÿ²ÿ––Œ Œ QMQM| 4 | 4 ýå ýå SSUU=}=}jûjû] ] ^  ^  ¡†¡†äÿ(äÿ( ü›ü ü›üløÆùløÆù÷}ø÷}øi÷Íøi÷Íøêøãùêøãù úÜú úÜú÷ú§û÷ú§ûXû÷ûXû÷ûGûâûGûâûû¥ûû¥ûpú6ûpú6û úÀú úÀúqùMúqùMúùõùùõù‘ø•ù‘ø•ù¡÷àø¡÷àøFõéöFõéöïòäôïòäô§ïéñ§ïéñÒë\îÒë\îÁçòêÁçòêÔä€èÔä€èŽã…çŽã…çåÐèåÐè9è]ë9è]ëíÎïíÎïóäôóäôºø¿ùºø¿ùeýÉýeýÉýd¨d¨QfQf@@=ýâý=ýâý1úšú1úšú;÷ø;÷ørô örô ö\ò—ô\ò—ôˆò<ôˆò<ôßó“õßó“õ`÷«ø`÷«øÇûeüÇûeüøÿøÿPPQúQúÑ Ñ ß š ß š Ž á Ž á í ó í ó ¿  ¿  ­ 3 ­ 3 ç Q ç Q P µ P µ £ þ £ þ ³ ³ ì ì Ø - Ø - „  „  »“»“û û O“O“þmþm - -ll““V V ß ß d±d±!h!hVV88Oþ{þOþ{þJüÍüJüÍüÙú|ûÙú|ûfú$ûfú$û†ú!û†ú!ûmûümûü:üÞü:üÞü ý“ý ý“ýÂþÔþÂþÔþododµtµtQÞQÞŽ0Ž0ßßÀþÐþÀþÐþ‘ûü‘ûü ùÇù ùÇùÂöÂ÷ÂöÂ÷»ô>ö»ô>öæô_öæô_öÙöÉ÷ÙöÉ÷‡úû‡úûYÿHÿYÿHÿÕèÕè6 '6 's y s y Oý Oý ¸× ¸× þß þß – ¢ – ¢ ÅÕÅÕÄÛÄÛ|þ&þ|þ&þ×ûúû×ûúû#ûþû#ûþûâû”üâû”üSÿdÿSÿdÿ!¯!¯_…_…ŠŠr‘r‘llóhóh±ƒ±ƒÐîÐîEÿ¡ÿEÿ¡ÿþ“þþ“þ9þaþ9þaþiþ‡þiþ‡þ–þ«þ–þ«þ2þYþ2þYþmüäümüäü ûYû ûYû¬øpù¬øpùöV÷öV÷ôÃõôÃõó¤ôó¤ôàò™ôàò™ôôó\õôó\õšõ÷šõ÷&øáø&øáø÷úÆû÷úÆû›ý0þ›ý0þÉÿÍÿÉÿÍÿùvùv»?»?Ô[Ô[ÙdÙdÍ]Í]ËËÊÿÎÿÊÿÎÿFýÓýFýÓýEûÁûEûÁûzù#úzù#úøêøøêøä÷äøä÷äøcùYúcùYúLüëüLüëü ™ ™EEõõE º E º ò  ò  @ @ ¸ € ¸ € ìÿìÿR R  þ[þ þ[þ¾úaû¾úaûøùøù"ø'ù"ø'ù½ù£ú½ù£úÈû€üÈû€ü©þÿ©þÿ88ëìëìÂÆÂÆ—I—I++jý¥ýjý¥ý½ú¹û½ú¹û¥øÚù¥øÚù1øoù1øoù¤ù³ú¤ù³úˆüÅüˆüÅüjÿÊÿjÿÊÿŸ>Ÿ>/3/3}}MM··|þŒþ|þŒþæúûæúûø5ùø5ù«öÆ÷«öÆ÷p÷jøp÷jøPùúPùúðü…ýðü…ý‡ä‡ä“¥“¥– ‹– ‹² ) ² ) ý ÿ ý ÿ ù ( ù ( × ‚ × ‚ ô÷ô÷(Ú(Úüümþ£þmþ£þ[üÀü[üÀüdü¢üdü¢ü±þêþ±þêþè†è†HH¥ ¥ g · g · V Ó V Ó l 0 l 0 èèqqÙzÙzΡΡQþNþQþNþýRýýRý=ýXý=ýXývý£ývý£ý®ýéý®ýéýäý*þäý*þþfþþfþIþxþIþxþØýþØýþÈüýÈüý‡ûü‡ûübú ûbú û^ù ú^ù ú~øQù~øQùæ÷ñøæ÷ñøcøUùcøUù1ùòù1ùòùóùµúóùµúmúûmúû|úû|úûoú&ûoú&ûPúûPúû—úAû—úAû¬ûü¬ûüdý¾ýdý¾ýúÿúÿ-É-Éa«a«, ", "L  L  ¬ W ¬ W O j O j å åýýPžPž°k°k‡ÿ›ÿ‡ÿ›ÿ€ÿWÿ€ÿWÿôÿôÿ˜˜±#±#DXDX Õ Õ ’ Q ’ Q Ò$Ò$•´ •´ i ú i ú g Ög Öß%ß%årårj2j2  7ÿXÿ7ÿXÿŽþÏþŽþÏþ þdþ þdþÎü;ýÎü;ýÚú”ûÚú”û(øøø(øøø`õõö`õõö÷òªô÷òªô5ñúò5ñúò‚ðqò‚ðqòñÇòñÇòòÁóòÁóAó½ôAó½ôôƒõôƒõ·óõ·óõçòvôçòvôÄðEòÄðEò2îð2îðñê†íñê†í2è;ë2è;ë¸æ±é¸æ±é¢çRê¢çRêeêÿìeêÿìóíðóíðNóªôNóªôÚ÷ŸøÚ÷Ÿø¬ûóû¬ûóû×þ·þ×þ·þï‘ï‘d4d4…þ¹þ…þ¹þbüýbüý´ú2û´ú2ûqúûqúû™üëü™üëü!ÿ®ÿ!ÿ®ÿ΋΋S–S–C C xxââÝËÝË”î”îšÄšÄh¿h¿ñÂñÂ&å&å¸=¸=%¥%¥\ È\ È× A× A· .· .%˜%˜w%w%¿¿]$]${¡{¡ Œ  Œ = ô = ô ñ Óñ Ó Ê  Ê ¼ k ¼ k ˆ  ˆ  hª hª Í Í í x í x *C*CF.F.íù²úíù²ú.ðò.ðò‚èPë‚èPë¤â'å¤â'åUÞqáUÞqá?Üyà?ÜyàLÞ•áLÞ•á}à7ä}à7äxäéçxäéç"èIë"èIë{ëYî{ëYîçíçïçíçïfíBïfíBï¤êÖì¤êÖìñç…êñç…êä=çä=çšàíãšàíã2Ý6á2Ý6áøÚßøÚß1Ú7Þ1Ú7Þ–Ü_à–Ü_àßžâßžâãœåãœålç\êlç\ê‚ìŽî‚ìŽîñð¿òñð¿ò?õ[ö?õ[öéøÙùéøÙùÿûiüÿûiüäý8þäý8þvÿlÿvÿlÿ¾h¾hççEêEêNxNx ¼ ¼Æ 9 Æ 9  µ µ~N~N„%„%ÒWÒW†þ†þæéæé ô ôqq{|{|––ÏŽÏŽV1V1JHJH;-;-ñúñú7À7À]+]+îý îý … ï … ï ¹ ¹yÉyÉvævæ#ˆ#ˆûû¥þäþ¥þäþîû~üîû~üÉù™úÉù™ú•ùDú•ùDú„ùuú„ùuú¢û ü¢û ükýÉýkýÉýèþ=ÿèþ=ÿŒþÔþŒþÔþqûôûqûôû÷ ø÷ øxïXñxïXñ-èöê-èöêiáåiáådܯàdܯà×ÙtÞ×ÙtÞ¸Üêà¸Üêàÿà˜äÿà˜äðéKìðéKìŒñÛòŒñÛò¢ú°ú¢ú°ú""å€å€)®)®×È×Èÿfÿÿfÿ ûû ûûþöª÷þöª÷SõëöSõëöÎö˜÷Îö˜÷ÀùRúÀùRú­ýÙý­ýÙý0Ù0Ù‹‹Ê A Ê A   7 7ê ê ÐÐËo Ëo     › y › y ã üã üÓêÓ겫²«tYtY^^îDîDêIêISåSå]]_F_F»ÿÓÿ»ÿÓÿ8ÿiÿ8ÿiÿ¢ÿ‘ÿ¢ÿ‘ÿuXuXøø¢v¢vþìþìlÿŽÿlÿŽÿëüýëüýÔù¯úÔù¯úÂö¨÷Âö¨÷‡óûô‡óûôñúòñúòÑïñÑïñÜï–ñÜï–ñ!ñ´ò!ñ´òúòUôúòUô®ôÖõ®ôÖõ-÷ ø-÷ øžù4úžù4ú³ûDü³ûDüåýÿýåýÿýRÿnÿRÿnÿ¡ÿ°ÿ¡ÿ°ÿÿJÿÿJÿgý›ýgý›ýRû×ûRû×ûSøìøSøìøö©öö©öêó÷ôêó÷ôºò!ôºò!ôôKõôKõZ÷ƒøZ÷ƒø±ü!ý±ü!ý’œ’œ¤¤;¦ ;¦ XXBÑBÑ+C+Cãóãóx ` x ` ""’’×ýîý×ýîýü“üü“üýfýýfý_ÿÈÿ_ÿÈÿý¸ý¸­u­u ` ` • • r¿ r¿ Îò Îò     ¸ ù ¸ ù ™™ppP“P“ÝOÝO¥¥`¯`¯"œ"œß–ß–Kÿ‘ÿKÿ‘ÿ“üý“üýkú÷úkú÷ú€ø%ù€ø%ù÷Å÷÷Å÷löZ÷löZ÷îöÕ÷îöÕ÷PøõøPøõøÍù…úÍù…úûûZüûûZüÐýåýÐýåýÿÿÿÿòÿòÿÑÊÑʬ”¬” å åϛϛùÔùÔ3ÿEÿ3ÿEÿ±üý±üýù¼ùù¼ùÇõöÇõöÇòôÇòôôðOòôðOòpð×ñpð×ñòÄóòÄóØö›÷Øö›÷“ü¸ü“ü¸üHzHzUÎUÎ"  "  p å p å ! ! ñXñXz³z³·þ^ÿ·þ^ÿ ú û ú ûZö›÷Zö›÷{ô~õ{ô~õÉõföÉõföã÷øã÷øüýüýJ)J)öyöy­­ÿNÿNL¶L¶#Ï#ÏI—I—Š6Š6ÂþËþÂþËþ„üØü„üØüÖü*ýÖü*ýÏýþÏýþjdjdÁÁ'¡'¡jûjû‹j‹jvþ¨þvþ¨þUûÚûUûÚûGøùGøùêõ÷êõ÷ö©öö©ö=öE÷=öE÷øåøøåøûƒûûƒûÞýþÞýþ•{•{v(v(ª;ª;Õ›Õ›¯A¯Aèè†U†UÁÿÂÿÁÿÂÿ"þQþ"þQþ®üý®üýûüûüšûðûšûðû£üý£üýŸþÁþŸþÁþA$A$“Œ“Œ#ë#ë[ü[üGÉGÉ““wówóLÁLÁ¡¡RØRØoñoñ” ” › › ŠöŠö±&±&¹8¹8¨1¨1 ˜ ˜QßQß>ï>ï¶œ¶œp[p[eÿwÿeÿwÿÿ;ÿÿ;ÿÚþ ÿÚþ ÿ`þˆþ`þˆþ—ýçý—ýçýýüRýýüRýßü(ýßü(ý7ýuý7ýuýýý9þýý9þqÿsÿqÿsÿåÌå̉V‰V¬;¬;U´U´”Ï”ÏeeŒŒvïvïHÃHà ÿüþ ÿüþÑüýÑüýû–ûû–û\úÏú\úÏú¾úDû¾úDûlüülüü©þÖþ©þÖþ™ž™žEþEþ+¨+¨e ³ e ³ l c l c *  *  TOTOˆ<ˆ<,,4%4%k[k[&_&_C`C`Y_Y_šÿ¥ÿšÿ¥ÿIþmþIþmþ0ü…ü0ü…üˆù"úˆù"ú’ö}÷’ö}÷ ôþô ôþô+ò"ó+ò"óÝðòÝðò ðOñ ðOñHï¬ðHï¬ðÇîBðÇîBð£î*ð£î*ðËî;ðËî;ð”îð”îðEîÈïEîÈïÁíkïÁíkï#í¹î#í¹î^ì5î^ì5î ìÞí ìÞí±ì7î±ì7îÞíbïÞíbïãïOñãïOñ„ò¿ó„ò¿óLõMöLõMöë÷‡øë÷‡ø¨ùMú¨ùMú@ú¼ú@ú¼ú6úÂú6úÂúEúÛúEúÛúhúûhúû?û‚û?û‚ûWýýWýýtKtKoÜoÜe ~e ~3 ú 3 ú eieiÁÁÏ)Ï)ŸÄŸÄ±²±²$$jøjøÏ˜Ï˜ÅYÅY´´ÆÆ"ð"ðS#ûS#ûÓ#T Ó#T # # _ —_ —ÊuÊu[C[C“µ“µÏ ¾ Ï ¾ ¸ R ¸ R ©ß©ß¶¶º×º×nÒnÒh çh ç’ è’ ègygyÊÒÊÒ«ÿŽÿŒüKü6øŒøàóÎôrðYñíäíœäÂæœäÂæ5Þà5ÞàˆÙ¸ÜˆÙ¸Ü•ØtÛØÙ­ÜÛçÝmÜ)ß¿ÝlàÍßâÝáËãÝáËã­å¸ç­å¸ç/éIë/éIëÀèëêÀèëêÂèòêÂèòêææ'éææ'éÇåçÇåçzãÍåzãÍå?ácä?ácäêßúâêßúâûßHâûßHâGâfäGâfä¥å6ç¥å6ç¸éªë¸éªë4î™ï4î™ïÝòôÝòô„÷0ø„÷0ø¹ûü¹ûü½ÿ½ÿ>->-?´?´† ¢† ¢¡ ¾ ¡ ¾ HÛHÛjji®i®,3,3·«·«uSuSÕªÕªyºyº0202•Ö•Ö,å,åô–ô–0!0!€)€)͢͢äÌäÌ[çÓtµiÂ@n²õ²õFF  ¬ önÓ0°òê´$7ÿ°ÿºý=þºý=þ+ýVý+ýVý6ü¤ü6ü¤üúœúúœúx÷#øx÷#ø½ôØõ½ôØõò óò óþïúðþïúðnï¯ðnï¯ð¯ð·ñ¯ð·ñññdóññdóÈõ—öÈõ—öùVùùVùÔû«ûÔû«û\ûáû\ûáû8úû8úûeö3÷eö3÷¥ñó¥ñóhìèíhìèítèþétèþé›å'ç›å'çæèæè…éë…éëðŒñðŒñŒ÷÷Œ÷÷ÉýÒüÉýÒüã†ã†üüHH{Ô{Ô"‘"‘YÜYÜTþ¥þTþ¥þæû?üæû?ü)ûuû)ûuûºüYýºüYý þìþ þìþbëbë''0 0 áLáLí ÿ í ÿ ý Ñ ý Ñ H P H P S ‰ S ‰ Û ÷ Û ÷ J T J T i ¦ i ¦ ã"ã" ˆ ˆ=é=éÀÀËóËóúþDÿúþDÿÌýèýÌýèýýPýýPýaý“ýaý“ýjþ~þjþ~þ¯t¯tüÖüÖ¤¤uuD µD µG–G–ŠŠççÇüƒýÇüƒý.ø£ø.ø£ø ôÊô ôÊôàðÖñàðÖñ0ð4ñ0ð4ñÞðMòÞðMòoó<ôoó<ôO÷Ø÷O÷Ø÷‹ûü‹ûü.+.+½Á½Áö c ö c È ó È ó «¤«¤ppÖ±Ö±l . l . X&X&iiþ'þþ'þBù/úBù/úÛõ ÷Ûõ ÷%õ³õ%õ³õD÷øD÷øfûOûfûOûŒŒ$Œ$ŒŒYŒYùcùcÙùÙù3-3-±&±& š šÛ9 Û9 ÈÿAÈÿAiøöøiøöøŠò%óŠò%óÌîîïÌîîïöîëïöîëïÿñDòÿñDòxõGöxõGöHûbûHûbûšÿšÿ±­±­ðIðI³ÿ&ÿ³ÿ&ÿ‚ü]ý‚ü]ýQùdúQùdú=ö]÷=ö]÷]óiô]óiôÁð1òÁð1òßîšðßîšð»îÿï»îÿïâî(ðâî(ðîtïîtïœìÛíœìÛíÃêìÃêì¼è˜ê¼è˜ê2çé2çéçÍèçÍèÜçféÜçfé.ê†ë.ê†ëCímîCímîùñøòùñøòöÝööÝöûCûûCûKÿèþKÿèþGâGâFEFEÔËÔËíŽíŽ™ ° ™ ° š ‚ š ‚ ¾ Î ¾ Î ® ³ ® ³ C € C € ë  ë  «D«Dÿ«ÿ«ÖjÖj°g°g j j &n&n¸¸—°—°A%â"A%â"F)&F)&Z*ã'Z*ã'€(ú%€(ú%‚$R"‚$R" É É ; ;)¹)¹7 , 7 , ªZªZô­ô­||ÐÖÐÖ—V—Væ l æ l „ ”„ ”†I†Iõõsœsœ&ûnû&ûnûêöJ÷êöJ÷9òjó9òjó îvð îvðíMîíMîî ïî ï7ïð7ïð`ðñ`ðññòñò/ðñ/ðñ¯îÚï¯îÚïêÁëêÁëŒç½èŒç½èˆã¦åˆã¦å¶à¦â¶à¦âèÞ«àèÞ«àBÝŒßBÝŒßVÞpàVÞpàøáfãøáfãæÏçæÏç’ë*í’ë*í^ðÏñ^ðÏñ‚ôÍõ‚ôÍõ ø4ù ø4ùçùJúçùJú€ûBû€ûBûû–ûû–û³ú÷ú³ú÷úùùúùùúûø ùûø ùHønøHønø:øåø:øåøµù4úµù4úØûüØûüþPþþPþÓêÓêd=d=;ã;ãd ¬d ¬Ï  Ï  – ½ – ½ Ññ Ññ •³•³õòõò±«±«‚¢‚¢]€]€UbUbC[C[O]O]88´á ´á %B %B V ‹ V ‹ ˆ Ä ˆ Ä Î # Î # ' s ' s ²  ²  ­ ) ­ )  X  X ø T ø T  s  s ‰‰ö~ö~’’__[[ñ©ñ©VúVúQ×Q×£  £  › â › â W ’ W ’ " n " n ùƒùƒjjþ<þþ<þ=ø²ø=ø²øåò©óåò©óÁîÃïÁîÃïÜííîÜííî¼îÁï¼îÁïNð<ñNð<ñhó(ôhó(ôö·öö·ö{øðø{øðøƒúÚúƒúÚúŒú–úŒú–ú•ùÒù•ùÒùt÷)øt÷)øÿôëõÿôëõgòäògòäò)ð¢ð)ð¢ðäîÃïäîÃï¬î¡ï¬î¡ï»ï¤ð»ï¤ðØð³ñØð³ñüñÈòüñÈò!óÝó!óÝówôõwôõrôüôrôüô,ôô,ôôZóóóZóóóáò¤óáò¤ó³ò•ó³ò•óÂòºóÂòºó½ó—ô½ó—ô'õ·õ'õ·õ ÷r÷ ÷r÷<ù’ù<ù’ùºûéûºûéûÑýþÑýþ  ®’®’¾‘¾‘UU©d©d‹T‹T²1²1@ © @ © òKòKssP½P½ÒËÒËJáJáÖmÖmãñãñ##7k7kÅ Å ëPëP"_"_ÞýÞýççv´v´  »³»³ã ã ® $ ® $ ÷¼÷¼žWžW==gQgQ½†½†¿š¿šûÜûÜ# # ÍÍl|l|þìýþìý#ùªù#ùªùGõ™õGõ™õmñÓñmñÓñ»íúî»íúîëíìëíìÄéëÄéëÏêöëÏêöë…í@î…í@îwð‰ñwð‰ñëónôëónôéöl÷éöl÷Óø(ùÓø(ù%øø%øøõõnöõõnö.ñò.ñò•ìËí•ìËí&éšê&éšê·æWè·æWè}æŽç}æŽç#é]ê#é]ê‘îïî‘îïîàõiöàõiöøû¢üøû¢üûÍûÍ , , Ø Ø3á3áÌ–Ì–*ç*çÅyÅyEEEE™¨™¨O-O-DDrr%P%PmÞmÞYYF ÔF Ôá X á X » 4 » 4  ” ”PïPï¢ñ¢ñr ( r ( D D — í — í ø 7 ø 7 â c â c s ¹ s ¹ G ˆ G ˆ ” ”   ÕÕ‰ÿ–ÿ‰ÿ–ÿÝüÃüÝüÃü™ü‘ü™ü‘üþkþþkþTTÜÜÒÒk  k  Ì Ì M M {ê{ê9 9 ²Õ²Õ¹üÃü¹üÃüú'úú'ú°ùÞù°ùÞù™ûÏû™ûÏû7ýsý7ýsý’þÒþ’þÒþ±ÿóÿ±ÿóÿ(l(lSÿ4ÿSÿ4ÿ”ý¿ý”ý¿ýÖüýÖüýµýýýµýýýÏÿ¶ÿÏÿ¶ÿ$½$½@›@›y  y  í ¼ í ¼ W ¢ W ¢ / š / š ÿ±ÿ±cý×ýcý×ý>÷;ø>÷;øbòËóbòËó¥î`ð¥î`ðsïcðsïcðÈórôÈórôƒøì÷ƒøì÷cý ýcý ýÜ7Ü7”L”L€$€$“â“âîoîoÒü ýÒü ýÄ÷)øÄ÷)øÉóQôÉóQô½ð`ñ½ð`ñ/ï.ð/ï.ð¢ð0ñ¢ð0ñ òÁò òÁòô²ôô²ô÷G÷÷G÷¢ùáù¢ùáùâúûâúûûÚûûÚû û5û û5û úVú úVúùVùùVùøIøøIøU÷Û÷U÷Û÷Š÷è÷Š÷è÷Ö÷PøÖ÷Pø4øŒø4øŒøá÷Gøá÷GøF÷©÷F÷©÷µö"÷µö"÷5ö´ö5ö´öHö½öHö½ö\÷¦÷\÷¦÷¨øù¨øùÛú ûÛú ûDþ>þDþ>þ  ø…ø…t B t B " Š " Š Ž Ø Ž Ø µ µ ª ª°­°­Ý¾Ý¾†P†PþUþþUþþ;þþ;þÙÿÙÿu?u?¥N¥N¯ L ¯ L  ? ?ÕÿÕÿS•S•$$ý½ý½êÂêÂ&K&KÙXÙX¡¡] W ] W ‡R‡R{ { #ªÿ#ªÿhÿ‚ÿhÿ‚ÿz3z3NÎNÎ m  m V¡V¡¬0¬0ssÑѼ¼4Q4Qw £ w £ /g/gÓú’ûÓú’ûLóvôLóvôHîÝîHîÝî·í³í·í³í‚îæî‚îæî(ñÍñ(ñÍñõ õõ õvø©øvø©ø±úsú±úsú^úbú^úbú3ø~ø3ø~ø_õìõ_õìõñíññíñâíæîâíæîfê ëfê ëçç@èçç@èËåXæËåXæ}ä—å}ä—åÛãcåÛãcåÇãSåÇãSåFãMäFãMä‡âæã‡âæã­áÓâ­áÓâÖàâÖàâtà•átà•á¢à¬á¢à¬áiáwâiáwâlãªälãªämæ9çmæ9çÐéêÐéê£í?î£í?îñyññyñô‰ôô‰ôÍö3÷Íö3÷øù0úøù0ú£ü´ü£ü´ü·ÿ²ÿ·ÿ²ÿ8!8!77ŕŕݵݵٸٸjqjqŒŒñÓñÓ? Ô? Ôô Å ô Å s¹s¹€þ€þ$#$#Å*)Å*)ƒ/I-ƒ/I-É10É10š0I/š0I/Ý,T+Ý,T+ë'¦&ë'¦&2"Ö 2"Ö ‡™‡™yéyéKÂKÂ|}|}ýý…Š…Š1414#)#)ä䢴¢´ÆvÆv“Þ“Þ‘ ë ‘ ë ÛÛªªèýóýèýóý,üfü,üfüûûüûûüãûÇûãûÇû£úÄú£úÄú<øtø<øtøõõõõ”ï=ð”ï=ð/êë/êë äqä äqäŠÞ†ßŠÞ†ß—ÚPÛ—ÚPÛ5×vØ5×vØÆÕÃÖÆÕÃÖךØ×šØæÙˆÛæÙˆÛ<Þ7ß<Þ7ßHâ¸âHâ¸âæ›ææ›æèéèéäè¢éäè¢éˆégêˆégêéÝééÝéàçßèàçßèíæŸçíæŸç;æüæ;æüææÛææÛæRçÿçRçÿçåéÒêåéÒêjîøîjîøîóƒóóƒó¦÷5ø¦÷5ø,ý;ý,ý;ý´Z´Z[A[A=W=WÎ · Î · ¸ z ¸ z ¶ ¶ ô©ô©á}á}.±.±®.®.sËsËÑ5Ñ5zÂzÂuáu᜜?¥?¥ÆûÆûÕÕ±ô±ô¬¬ðð¾<¾<Ð\Ð\ç\ç\‚‚=Ä =Ä × a × a Ó§Ó§ùùŽŽ)")"ЄЄª­ª­…c…cgwgw  AxAxZYZY˜üöü˜üöü÷û÷÷û÷ òò òò|íeí|íeíáèaéáèaéåxæåxæåÐååÐåGæÜæGæÜæ¯è%é¯è%éêë—ìêë—ì¬ïð¬ïðúò óúò óÝõÑõÝõÑõæö÷æö÷j÷®÷j÷®÷¹ö›ö¹ö›öõáõõáõÈôrõÈôrõ6õBõ6õBõ÷C÷÷C÷ùùùùüCüüCü#ÿóþ#ÿóþ­&­&¶R¶RNN: : ¦–¦–ÌÌAA  ʣʣÀ¹À¹«‡«‡µpµpžaža<<›m›mŞŞ©s©sW.W.qAqAŠ + Š + H  H   ³  ³ ‰  ‰  u  u  | [ | [ «w«wɫɫ%ö%öþþþþ(úLú(úLú~ö¥ö~ö¥ö+ôdô+ôdô ô„ô ô„ô8õfõ8õfõN÷^÷N÷^÷oúŽúoúŽúý:ýý:ý–ÿpÿ–ÿpÿ·Ž·Ž@8@8‘þ×þ‘þ×þrülürülüÇúƒúÇúƒú1ù ù1ù ù¼÷õ÷¼÷õ÷"øKø"øKøúûùúûùªûÕûªûÕûšþÆþšþÆþ..òò\R\R¥§¥§!!ÿÿÿÿ1ý7ý1ý7ýTü=üTü=üÿüýÿüý{þ²þ{þ²þ¸ë¸ëš™š™d s d s ¢:¢:ÙÙð¦ð¦L'L'55Ñ Ñ L$L$ŽŽÞüØüÞüØü¡û#ü¡û#ü¼üÃü¼üÃüÀcÀcSS”¨”¨‘v‘v Ï Ï“r“r¼¼ü=ü=²ý7þ²ý7þ´ù7ú´ù7úŽö÷Žö÷$ô ô$ô ô†óìó†óìóçóôçóôõ,õõ,õöEööEö÷P÷÷P÷©÷­÷©÷­÷F÷÷F÷÷÷÷÷÷Šö¥öŠö¥ö<ö;ö<ö;ö#ö ö#ö öÉöõöÉöõö$ø%ø$ø%øùù úùù úŽû±ûŽû±ûèüàüèüàü5ýOý5ýOý¦üü¦üüÿûäûÿûäûøù\úøù\úâ÷ä÷â÷ä÷ÖõöÖõöTô¢ôTô¢ô.õ<õ.õ<õ>÷^÷>÷^÷6ûû6ûûÌÿœÿÌÿœÿÖ¹Ö¹¦ ™ ¦ ™ dddd  ¾ò¾òi - i - ÿ É ÿ É ààððõçõçüÑüÑŃŃù›ù›«8«8ž$ž$HeHe“ª“ª¥º¥º  ––4+4+óóɕɕ¶ l ¶ l … … · a · a  7  7 cËcËDþ…þDþ…þQù‰ùQù‰ùfõ–õfõ–õèòóèòóeôoôeôoô øÂ÷ øÂ÷/þNþ/þNþ¦¦ÚîÚî‘ H ‘ H Ô Ô X X W % W % <ž<žÿ³ÿÿ³ÿçúµûçúµûù‡øù‡øÉùgùÉùgùpú7úpú7ú±üÃü±üÃü“þáþ“þáþ++,ë,ë^¶^¶1B1BÿÿÿÿBþJþBþJþÏý­ýÏý­ýzý6ýzý6ýGütüGütüÿúôúÿúôúù8ùù8ùM÷b÷M÷b÷~õŒõ~õŒõ/ô7ô/ô7ôƒóóƒóó¶óöó¶óöó6õQõ6õQõa÷L÷a÷L÷Qú„úQú„úý7ýý7ýgÿsÿgÿsÿÌÞÌÞ2Ùÿ2ÙÿjþMþjþMþ­ú#û­ú#û÷èö÷èö•óœó•óœóúðñúðñïTïïTï¸îßî¸îßîññññôëóôëósùõùsùõù÷ýõþ÷ýõþ2 2 ‹ ‹ ø0ø0ppž<ž<ê:ê:Û ó Û ó mmS¢S¢þ²þþ²þªúûªúû°øÿø°øÿøpùNùpùNùúý€ýúý€ýë:ë: z  z æ@æ@ülül‘‘{{‡¶‡¶FçFçà ð à ð UUý‹ýý‹ý«ö@÷«ö@÷óóôóóôôôóôôó%öýõ%öýõAú¿úAú¿úÿ±þÿ±þæêæêÿ7ÿ7ø?ø?¸¸$$Iý;ýIý;ýSú„úSú„ú­÷³÷­÷³÷ˆöwöˆöwöEönöEönö­öÊö­öÊö&÷9÷&÷9÷|÷…÷|÷…÷çöÜöçöÜöêõöêõö®ô¿ô®ô¿ôÚóÎóÚóÎóÖóôóÖóôómôzômôzôÑõØõÑõØõú÷Ë÷ú÷Ë÷aúQúaúQúãüðüãüðü.ÿÿ.ÿÿåå7/7/þþ¿ ¿ EGEG` } ` } à Πà Π ° °ÌºÌºÔÌÔÌèýèý„þ\þ„þ\þ<ü?ü<ü?üfû¢ûfû¢ûÉüýÉüý**ÜÊÜÊ , , ë 2ë 2˜˜NDNDZrZrTT Ö  Ö „`„`üü´ûÆû´ûÆûu÷›÷u÷›÷sõŸõsõŸõSöáõSöáõâ÷È÷â÷È÷&ûHû&ûHûàý2þàý2þŸÿÿŸÿÿ²ÿåÿ²ÿåÿ[ÿ»ÿ[ÿ»ÿ^þŽþ^þŽþNücüNücü¯ú®ú¯ú®ú»÷¼÷»÷¼÷uõxõuõxõºõªõºõªõ°öŠö°öŠö±ùeù±ùeù;üÑû;üÑûZþÙýZþÙýÿˆÿÿˆÿeþTþeþTþ¥ü`ý¥ü`ýÚùUúÚùUúÓöB÷ÓöB÷‚ôGô‚ôGôwò òwò òîñèñîñèñ óXó óXó€ö®ö€ö®ö(ú*ú(ú*úOÿVÿOÿVÿŒŒÛéÛéx ˆ x ˆ q ƒ q ƒ Ú Ê Ú Ê 3  3  ï¥ï¥¼Ô¼ÔaBaBeeÛåÛåaa:æ:æ=h=hÒ « Ò « à ¨ à ¨ '  '  ² Í ² Í • … • … ] P ] P . # . # ™ ™ 22öíöíGYGYÒÓÒÓ……0$0$ÖÅÖÅÑÚÑÚooÕºÕº ÿEÿ ÿEÿ”ý”ý”ý”ý üïû üïûßú©úßú©úúúúúúúúúúñùúñùYùUùYùUùøô÷øô÷ÇöªöÇöªö5õúô5õúôôÇóôÇó3ô<ô3ô<ôƒõ4õƒõ4õ­÷¤÷­÷¤÷eú1úeú1úëýîýëýîýÐÿÐÿt t 44ÿÿ­ÿÿÿ­ÿnü´ünü´üˆøåøˆøåøõ õõ õåñ·ñåñ·ñ•ï:ï•ï:ïQïQïQïQï”ðDð”ðDð©ó|ó©ó|óïöôöïöôöÄú€úÄú€úöýþýöýþýÜÜt,t,»|»|×Ç×Ç™À™Àãã¶ÿ…ÿ¶ÿ…ÿ´ÿÜÿ´ÿÜÿ™™µnµn]Ÿ]ŸjTjTúéúé    DqDqqRqR0q0qFsFsªÆªÆ_L_Lºµºµýý+:+:G]G]¶Ç¶Ç99ÊÀÊÀdgdg3H3H1:1:òñòñK)K)NFNF=C=C‚u‚uDWDW&w&wwSwStþJþtþJþüÙûüÙûúíùúíùƒùtùƒùtù¥ú[ú¥ú[ú(ü>ü(ü>üÍþÈþÍþÈþ÷Ý÷Ý  h‰h‰úú¨¨ƒ¥ƒ¥tÿ€ÿtÿ€ÿÊýÃýÊýÃýý&ýý&ýPýaýPýaýüþ×þüþ×þÕ%Õ%OO‹Ï‹Ï}»}»·ë·ë¬Ô¬Ôh.h.µòµò % %þÝýþÝýXüküXükü?üNü?üNüÅýÆýÅýÆýlqlq¤R¤Rþmþm. ¡ . ¡ Š Ñ Š Ñ œ  œ  ü›ü›ccü üü ünöøönöøöòƒòòƒòÐðuðÐðuð»ð?ð»ð?ðÕó&ôÕó&ôy÷÷y÷÷ú\úú\ú¨þÞþ¨þÞþŒŒGGN9N9„ýòü„ýòüRúTúRúTúÐ÷R÷Ð÷R÷!õõ!õõóNóóNóNòòNòòÛñûñÛñûñ3ó3ó3ó3ó}ôcô}ôcô·õˆõ·õˆõßöŸößöŸö£÷L÷£÷L÷‹÷Y÷‹÷Y÷™÷†÷™÷†÷Å÷Ì÷Å÷Ì÷ øì÷ øì÷Aù%ùAù%ù úú úúÎü¢üÎü¢üëþÿëþÿé&é&ƒ”ƒ”',',…ª…ª÷5÷5×ÿÜÿ×ÿÜÿþôýþôýEüoüEüoüªûÉûªûÉûý:ýý:ý & &,‘,‘Ì ì Ì ì 6«6«CÉCÉDÖDÖ¸e¸eE›E›‘!‘!L L n e n e ï®ï®Ê+Ê+ÿËÿË‘ ¹ ‘ ¹ ± # ± # p  p  Õ 9 Õ 9 µ â µ â ÐÙÐÙ&l&l±¹±¹±Ú±Ú’ û ’ û Š ¿ Š ¿ ÁËÁËR9R9¯á¯áO Ý O Ý ó2ó2Rÿ®ÿRÿ®ÿ£øÄø£øÄøRóBóRóBó2ïûî2ïûîsî‡ísî‡íœïÆïœïÆï%ôòó%ôòóùeùùeù1ýìý1ýìý“¢“¢‹˜‹˜ªéªéþ\ýþ\ýöø’øöø’øôô6ôôô6ôHðUðHðUð»ì~ì»ì~ìÈêêÈêêÏësëÏësëõì‰ìõì‰ìjï ïjï ï«ñZñ«ñZñ¹ósó¹ósóöÓõöÓõ øé÷ øé÷vùZùvùZùfúIúfúIú?û"û?û"ûÃûŸûÃûŸûwüTüwüTü{ýcý{ýcýXþIþXþIþÿ ÿÿ ÿCÿ5ÿCÿ5ÿñþòþñþòþþþþþAþ+þAþ+þíýÔýíýÔýþþþþÿKÿÿKÿòò¼¼¼¼¼ß¼ßo o F ¿ F ¿ _v_vll’ ’ & = & =  ô ô#R#RÉÿQÉÿQý/ýý/ýDûKûDûKû5ûîú5ûîúþýªýþýªýIìÿIìÿÖ…Ö…©c©c‡ S ‡ S Q 3 Q 3 <›<›ààd ¿ d ¿ © ô © ô ºîºî " "¶û«û¶û«û¢ö{ö¢ö{ö§òjò§òjòöî¤îöî¤îîíîíïÏîïÏî˜óúó˜óúó“øhù“øhùÔ¸Ô¸…¦…¦Ö  Ö  ÷[÷[Ò ¼Ò ¼Ü a Ü a ;;Ôý³þÔý³þøøøøróßòróßòêïÒîêïÒî;ñð;ñð‡òò‡òò÷öUö÷öUöýˆýýˆýôkôkJ%J%² ý ² ý t ’ t ’ É * É * ˜Ë˜Ë<º<º8r8rƒ…ƒ…êêuNuNopop\\Œ«Œ«àÿãÿàÿãÿ¶þÚþ¶þÚþÉý¬ýÉý¬ýOýýOýý-ý-ý-ý-ý¯ýý¯ýýyþZþyþZþqÿkÿqÿkÿȥȥÛÉÛÉkiki–£–£®Ç®Ç¶Ù¶ÙÇÜÇܶÁ¶Á&@&@ÿÿÿÿEüGüEüGüù¥øù¥øõaõõaõ·òƒò·òƒòGñ»ðGñ»ð´ñYñ´ñYñ#ó¯ò#ó¯ò5÷¶ö5÷¶ö“ûÿú“ûÿúÙæÙæ®®ÙÙï * ï * X “ X “ ϳϳîÔîÔ8ÿ£ÿ8ÿ£ÿMûSûMûSû0øä÷0øä÷áöœöáöœöí÷_÷í÷_÷ùœùùœùTýOýTýOýnãnã‘Ç‘Ç}Ô}Ô/p/pkwkw²’²’SS¨Ü¨Üü÷ü÷þþÙ"Ù"?I?I i  i l ý l ý Q … Q … èŽèŽe…e…ÈýÂýÈýÂýáú¼úáú¼ú™ø\ø™ø\ø øØ÷ øØ÷ù¶øù¶ø…û?û…û?û,þíý,þíýÖÖj­j­°ì°ìžÐžÐ¹¹ŒiŒiêþÿêþÿìû¤ûìû¤û ùëø ùëøÌöÑöÌöÑöõáôõáô6õÎô6õÎôSööSööøøøøÒú úÒú ú¾üÕü¾üÕü þ¬þ þ¬þsÿˆÿsÿˆÿ{ÿtÿ{ÿtÿðþïþðþïþÿýèýÿýèýõü¼üõü¼ü)üÕû)üÕû±û˜û±û˜ûüÛûüÛûõüÐüõüÐüöýÝýöýÝý¥ÿÿ¥ÿÿ11—¶—¶ÔÔ6K6KÈÈ_k_ku•u•­Ü­Ü²Â²ÂAAÍûÍû|¯|¯#2#2ë ë Ñ÷Ñ÷ŸrŸre0e0dÿ)ÿdÿ)ÿ©ÿšÿ©ÿšÿšÏšÏõJõJV´V´ ›  › Û   Û    ·  · û Ó û Ó d d 3‚3‚Ö Ö CþñýCþñýïú£úïú£úOø øOø øøñ÷øñ÷-ùŸø-ùŸø0ûüú0ûüú¹þþ¹þþ××l…l…¢ý¢ý‹é‹éÆÍÆÍ6Ë6˿ҿҳ\³\RÿtÿRÿtÿÍÿµÿÍÿµÿ1[1[uEuEvXvX<.<.ÊúÊúÆÇÆÇÓÿåÿÓÿåÿ˜ý”ý˜ý”ý‡ûCû‡ûCûëùtùëùtù´øtø´øtøGùèøGùèøÙùÆùÙùÆùÚú“úÚú“ú¿ûžû¿ûžûŠüˆüŠüˆü<ýý<ýý·ü¹ü·ü¹ü¬ûvû¬ûvûJú4úJú4ú·øvø·øvøŒ÷)÷Œ÷)÷’÷K÷’÷K÷8øß÷8øß÷Âù^ùÂù^ù+üü+üü/þBþ/þBþÙÿÙÿ³å³åDKDK|þTþ|þTþÈûrûÈûrû"øœ÷"øœ÷JõŸôJõŸô%ó^ò%ó^òóšòóšòëôÅôëôÅô)øÂ÷)øÂ÷Øû»ûØû»ûPÿrÿPÿrÿ$x$x55cUcU‚‚y¸y¸ËÿÖÿËÿÖÿnþOþnþOþXýýXýý˜ý‹ý˜ý‹ýÇÿšÿÇÿšÿŽÆŽÆM¼M¼BÜB܈ B ˆ B ¨ ã ¨ ã g ­ g ­ ''rrNENE·ÿŽÿ·ÿŽÿÀþÒþÀþÒþXÿ+ÿXÿ+ÿÞòÞò‰ÿ‰ÿ ]  ] €r€rÔŠÔŠbWbW $ $ ÞdÞdxqxqeþCþeþCþKúúKúúËø‰øËø‰øÃùùÃùùÀý‰ýÀý‰ýÚÚsTsT''8 * 8 * Ð i Ð i .³.³--»»}þ[þ}þ[þàûYûàûYûÐùNùÐùNùùïøùïø2ù¾ø2ù¾øú¦ùú¦ùáú{úáú{ú<û>û<û>ûCû ûCû ûÃú±úÃú±úoú@úoú@úiúûùiúûùzú úzú ú8ûû8ûûxümüxümüfþUþfþUþCCÅÀÅÀÀáÀá))»{»{êý¸ýêý¸ý¨û‚û¨û‚û“øø“øø/öjõ/öjõeôjóeôjóªôôªôô‰öýõ‰öýõøù~ùøù~ùoþ„þoþ„þ==¶¶8 ~ 8 ~ i  i  C}C}ÂRÂRêèêèBýNýBýNýÞù»ùÞù»ù øŠ÷ øŠ÷Dù¥øDù¥ø^ú‰ú^ú‰ú$ü(ü$ü(ü¤ýˆý¤ýˆýåþQÿåþQÿ\ÿ¥ÿ\ÿ¥ÿ¹þdþ¹þdþOýeýOýeýœü üœü üýýýý@ÿÿ@ÿÿ2a2a{›{›z°z° ' ¶ ' ¶ övöv__,ý1ý,ý1ý5ù ø5ù øUõ!ôUõ!ôóÊñóÊñõ¦ôõ¦ô;ù´ø;ù´øÛýýÛýý‘1‘1¾ [ ¾ [ …/…/\\Ž sŽ sz   z   ŽŽ¦¦Jü¥ûJü¥ûvùîøvùîø›ùù›ùùëûKûëûKûÜýÅýÜýÅý–Z–ZJgJgâAâAåyåyg Ì g Ì 3 Ë 3 Ë   ¦¦á$á$;o;oÓúÓúlqlqžþ…þžþ…þvýPývýPý²üü²üüºü}üºü}ü/ýúü/ýúüñýÚýñýÚýYÿ^ÿYÿ^ÿ¾Ý¾Ý¹ü¹üJ©J©~ò~òúwúwAAÞ Þ O)O)üoüüoüwù¢øwù¢øœö¨õœö¨õoô»óoô»óØò[òØò[ò~óƒò~óƒòÄôôÄôô÷ö¼ö÷ö¼ö:ú°ù:ú°ù]ýgý]ýgý©Ó©Ó¥—¥—[[×€×€ˆ0 ˆ0 Ã<Ã<k˜k˜…Í…Í0ýÔü0ýÔüª÷,÷ª÷,÷Nó7òNó7òiïgîiïgîì”ëì”ë‰íì‰íì¸ï_ï¸ï_ï‹õ•ô‹õ•ô“û û“û ûšošo 2  2 )‡)‡—Ô—ÔZKZKK ú K ú µWµW@z@zˆûäúˆûäúôönöôönö_óúñ_óúñzò3ñzò3ñ˜ó'ó˜ó'óž÷ ÷ž÷ ÷äû›ûäû›ûmÿ`ÿmÿ`ÿóóßÎß΋¡‹¡EEï^ï^&V&Vff<„<„}ž}ž×Ø×ØH/H/ºÿÄÿºÿÄÿwþžþwþžþvý8ývý8ýfü üfü üÜü£üÜü£üHýýHýýþïýþïýžÿ`ÿžÿ`ÿëâëâõõÿNÿNË<Ë<MM$I$IP²P²ÂÂÏÏ’’RÌRÌ]É]É~Ý~ݬÿ¬ÿ"ü´û"ü´û;÷Õö;÷Õöbóròbóròtðšïtðšï$ð`ï$ð`ïÆññÆññ@ö¥õ@ö¥õþûuûþûuûxàxàzÛzÛ9 G9 GßußuR0R0oo î  î ÒMÒM•ÿÖÿ•ÿÖÿUûeûUûeû¤øÛ÷¤øÛ÷nøønøø˜ú!ú˜ú!úÃýšýÃýšýö4ö4ŠhŠh–,–,.Ž.Ž\\ÓAÓAózóze”e”þÿÄÿþÿÄÿôôŠÓŠÓãÆãƷзÐìhìhå7å7ǀǀZý5ýZý5ý>ùóø>ùóøõ÷óõ÷óÀñðÀñð·ï†î·ï†îð¯îð¯îÆñ§ðÆñ§ðeõÕôeõÕôùgøùgøPýmýPýmýŌŌ²D²D«+«+ÂvÂvþAþþAþ÷úòú÷úòú.÷Fö.÷Fö=ô¡ò=ô¡òòmðòmðÄðÝïÄðÝïêñlñêñlñeôqóeôqó_ø¤÷_ø¤÷¸û.û¸û.ûþ!þþ!þÊÊA‚A‚h“h“übübLlLl¶ ¶ eŸeŸQÿcÿQÿcÿéþ¹þéþ¹þ¡ÿcÿ¡ÿcÿ‹¥‹¥'J'JónónH™H™zzg Þ g Þ U × U × % Õ % Õ Õ y Õ y  °  ° 2å2åææ‹Õ‹ÕF F ¸ Œ ¸ Œ a ï a ï x x *°*°ý{ý{tðtðØ4Ø4­­…#…#’E ’E J J º ƒ º ƒ æš æš rrIMIM+áÿ+áÿøüýøüýjúªùjúªùlø…÷lø…÷Ý÷âöÝ÷âöaøÒ÷aøÒ÷ ú}ù ú}ù€ûJû€ûJû”ü]ü©ýqýþUþsÿ:ÿ-éîËËËËÓÿ¥ÿÓÿ¥ÿ‚ýXý‚ýXýªû„ûòúŸú;ú»ùRù¹økø¸÷øg÷¸÷÷¸÷÷(ø€÷(ø€÷åø3øåø3ø{ùÚøú‚ù²úFúSû ûÞûžûjü2ü³üSü³üSüûü|üûü|üeü'üeü'üùûñûóûâûïûÕû)üüeü,ü´üüýÖüýÖü‘ýlý‘ýlý þðý þðýþïýþïý×ý®ýžýný<ýýÛü—üæûŒûæûŒûžú)úžú)ú{ùîø{ùîø¨ø ø`ø½÷øp÷Nø«÷„øç÷^ùÖø8úÆù8úÆùãü±üãü±ü+F+FiiÉÆÉÆÚ  Ú  Å å Å å ø Ñ ø Ñ ± û ± û w'w'&¼ÿ&¼ÿßùÎøßùÎøÝôIóÝôIó÷ðÿî÷ðÿî\ïší\ïší°ð}ï°ð}ïmó&òmó&òdø¦÷dø¦÷‹ü?ü‹ü?üV¶V¶55Ò› Ò› ¢ ¯ ¢ ¯ ,  ,  • • CCêê&þãý&þãýû}úû}ú»øÐ÷»øÐ÷¡÷÷¡÷÷|øÕ÷|øÕ÷ÐùCùÐùCùÕügüÕügüâÿ¢ÿâÿ¢ÿÛaÛa^^¦% ¦% à Û à Û g ÿ g ÿ L L ¹‘ ¹‘ èÒèÒê‡ê‡Ë'Ë'\æ\æä‘ä‘fåfåtÝtÝwÓwӗΗÎT„T„Ý=Ý=@»@»å¸å¸3 ü 3 ü í ! í ! ( y ( y u o u o %  %  ÿü ÿü L¡L¡GNGNDýýDýý?û¹ú?û¹ú™úú™úúùúrúùúrú[ûÎú[ûÎú+üÅû+üÅûãüžüãüžü„ý[ý„ý[ýtý'ýtý'ýCýýCýý&ýúü&ýúüõüÇüõüÇü™üPü™üPü[üþû[üþûüËûüËûû6ûû6û3úÍù3úÍù‹øø‹øøröŠõröŠõôêòôêòéòŸñ¶ñTðØðfïûïxî•ïî1ïÁíÌïeîÌïeîÚñÚðÚñÚð…ô£ó…ô£óšø”÷Qúwùü[ûtýìüáþþ Èÿ55â2â2ûÓûÓaÿ²ÿaÿ²ÿTýDýTýDý]û§ú]û§ú:ùœø:ùœøÞ÷÷Þ÷÷Û÷ìöÛ÷ìö×øCø×øCø û¤ú û¤úPýýPýý‘ÿ–ÿ‘ÿ–ÿ<< Y Y›ÿ›ÿÇ=Ç=ËrËr³³¼k¼k¨=¨=ÕfÕf,É,ÉVúVúZZ?æ?æÄdÄdeô„ôùeW¶! õ õßߙʙÊÑö6=wc¥‹Õ¥õÀÀ°ù°ùIIRRùÿùÿÍþ®þÍþ®þÞý›ýÞý›ý ýÅü ýÅü€ü>ü€ü>ü©üiü©üiüýÈüýÈü]ý"ý]ý"ýþâýþâýÿæþÿæþúÿõÿúÿõÿ÷÷ÀñÀñ 7 7‰³‰³ÓÈÓÈ„ÿfÿ„ÿfÿgý.ýgý.ý¹ûkû¹ûkûlúúlúúsù ùsù ù<ù•ø<ù•ø¤ú÷ù¤ú÷ù^üLü^üLü,ÿ?ÿ,ÿ?ÿ««wwJ J â Ä â Ä À × À × H H =á=á××ùFùF þ›þ þ›þ1ý%ý1ý%ýJý<ýJý<ý9þþ9þþ_ÿtÿ_ÿtÿö)ö)†Ê†ÊÀÀ: : ƒ¸ƒ¸àìàìºÖºÖ““€ÿŠÿ€ÿŠÿÿúþÿúþûþÇþûþÇþ9ÿÿ9ÿÿ“ÿ€ÿ“ÿ€ÿ8ÿ-ÿ8ÿ-ÿ!þþ!þþÉü‹üÉü‹ü‡ûû‡ûûÏùAùÏùAù‚øÚ÷‚øÚ÷Å÷ ÷Å÷ ÷ø<÷ø<÷Žø¾÷Žø¾÷®ù ù®ù ù5û«ú5û«úúü­üúü­ü™þ[þ™þ[þ!*!*ËêËêFF<‡<‡H…H…(f(f¥Ý¥Ýóó¶ÿ²ÿ¶ÿ²ÿEþþEþþîü¤üîü¤üãû„ûãû„ûû«úû«úû¡úû¡úüÂûüÂûöýuýöýuýZ(Z(  jÍjÍ@å@åììÖ¦Ö¦=Ø=Ø Ï ÏÒÖÒÖZÿÿZÿÿ[ý¿ü[ý¿üÆûóúÆûóúuû)ûuû)ûžüðûžüðû þþ þþ›ÿÏÿ›ÿÏÿâ;â;è]è]o£o£œ¹œ¹‡ ‡ óþ‘þóþ‘þ_ýêü_ýêü!üžû!üžûlû-ûlû-ûlüXülüXüÍýYýÍýYýÞÿðÿÞÿðÿŒ Œ A¶A¶›Ä›ÄôaôaTZTZ\ÿ'ÿ\ÿ'ÿ~ý`ý~ý`ýÄûŒûÄûŒû¥ú!ú¥ú!úýúmúýúmú¼û)û¼û)ûÌýIýÌýIýUZUZ œ œX3X344ââ—S—S±)±)ÐФԤÔ]o]oþ'þþ'þýéüýéü¨ý„ý¨ý„ýÔþÿÔþÿæÚæÚ‘°‘°RãRã­˜­˜°F°F'¢'¢á^á^o¯o¯œÀœÀÖÿìÿÖÿìÿeþpþeþpþáýýáýýÞýŸýÞýŸý:þÛý:þÛý‹þ@þ‹þ@þÒþ™þÒþ™þÿæþÿæþÿêþÿêþ»þ þ»þ þ(þñý(þñýoýýoýý£ü]ü£ü]üøû‘ûøû‘û]ûâú]ûâúAûÄúAûÄúoûöúoûöúèûzûèûzûmü ümü üÅünüÅünüÙü{üÙü{üâü“üâü“üäüˆüäüˆü"ýÅü"ýÅüÏýzýÏýzýÖþ·þÖþ·þZJZJ5b5b>‘>‘Ô€Ô€øø|M|MÍXÍXÉsÉs>²>²^¦^¦ÎñÎñ…ÿŠÿ…ÿŠÿuÿ]ÿuÿ]ÿ$$    Ñ6Ñ6hhÖŠÖŠc' c' „ Q „ Q ] { ] { 6 6 ïïI±I±wËwËò4ò4²ÿäÿ²ÿäÿwÿOÿwÿOÿIÿÿIÿÿñþ­þñþ­þ þ þ þ þÕü|üÕü|üpûéúpûéú„ùù„ùùø_÷ø_÷;÷"ö;÷"ö²ö½õ²ö½õ+÷2ö+÷2öê÷çöê÷çö¥øÈ÷¥øÈ÷,ùzø,ùzøùbøùbøRø¦÷Rø¦÷íööíöö õ!ô õ!ô—óqò—óqòçñgðçñgðÀðýîÀðýî:ñ¾ï:ñ¾ï¦ò*ñ¦ò*ñõóõó4ø{÷4ø{÷#ûÎú#ûÎúÙý–ýÙý–ýâÿâÿáüáüŠ}Š}cÿAÿcÿAÿ3þåý3þåýýÒüýÒü¿üJü¿üJüÙý|ýÙý|ý6ÿÿ6ÿÿH&H&½8½87!7!œ Ð œ Ð g Ò g Ò ® @® @ß ‚ß ‚ŸIŸI©©’b’b<<KKêêH H (e(eé é ž_ž_.À.Àú _ ú _ ² ø ² ø °°,ú,úÒÒbbC@C@Šw Šw q M q M 4 E 4 E §¡§¡¹9¹9â£â£üÞûüÞûÄöJõÄöJõ#òð#òð—î&ì—î&ìúë=éúë=éëŽèëŽè$ìé$ìé/îMì/îMì†ð×î†ð×îªò+ñªò+ñœôJóœôJóÌõˆôÌõˆôeõ2ôeõ2ô7ô§ò7ô§òˆò½ðˆò½ðTïXíTïXíñì¬êñì¬ê<ëÅè<ëÅè,ê†ç,ê†çÆé$çÆé$ç<ê¼ç<ê¼çüëÓéüëÓéÉî´ìÉî´ì¥ñ¸ï¥ñ¸ïÁônóÁônót÷¤öt÷¤öúeùúeù)ü¼û)ü¼ûùý³ýùý³ýÿôþÿôþÝÿÒÿÝÿÒÿ‡‡99ZZ ÷ ÷?Þ?Þèèû û  a  a { { { { ÊÊYY­­öö¹£¹£Œ¡Œ¡!$!$|£|£€»€»¢•¢•z[z[ ¸ ¸ò X ò X ªÕ ªÕ ¬K¬K=»=»ÆwÆwRÖRÖxõxõ[ª[ªììtÿjÿtÿjÿáý­ýáý­ý¢üLü¢üLübüõûbüõûöüªüöüªüèýýèýýÿÿÿÿHH¢ÿ¾ÿ¢ÿ¾ÿÕþ»þÕþ»þëúQúëúQúÑ÷•õÑ÷•õQôåñQôåñ«ï"í«ï"íAë«èAë«èaêÿæaêÿæoëãèoëãè,ï~ì,ï~ì<óò<óòøj÷øj÷ÏüŒüÏüŒü­Å­ÅP²P²2]2]X(X([Y[Yœýsýœýsýjûújûú™úäù™úäùkúúkúúËûûËûûCþ¶ýCþ¶ýTT??SŒSŒÈÈ2 u 2 u î G î G 9 l 9 l   q[q[v>v>99¾L¾L¥$¥$¯"¯"¤ ¤ ˆäˆäöhöhóQóQï.ï.±Þ±Þ«ÿÉÿ«ÿÉÿYÿ.ÿYÿ.ÿAÿNÿAÿNÿäÿÌÿäÿÌÿh3h3ž…ž…@9@9Rÿ-ÿRÿ-ÿþÔýþÔý‚üü‚üüÀúúÀúú;ùAø;ùAøøÛöøÛö+÷Üõ+÷ÜõÊö•õÊö•õ]÷Hö]÷Hö6øC÷6øC÷>ùmø>ùmøÈúúÈúúü‘ûü‘ûiý%ýiý%ýÇþþÇþþÉÿ³ÿÉÿ³ÿÞÿèÿÞÿèÿ¯ÿeÿ¯ÿeÿ¦þ”þ¦þ”þý7ýý7ýüûüûËúþùËúþù„ù¯ø„ù¯ø”ø¼÷”ø¼÷øø øøø ø,û^ú,û^úšý£ýšý£ý"~"~ã£ã£¬Ø ¬Ø œ  œ  „ p„ på ¢ å ¢ „ = „ = aa··`£`££þyþ£þyþÁýHýÁýHýAþ/þAþ/þ½ÿ}ÿ½ÿ}ÿ2‚2‚ææÚÚ ¢  ¢ x¯ x¯ 5’ 5’ UUææ. . Z€Z€œðœð˜û˜û†ô†ô=’=’1h1h((Dÿ+ÿDÿ+ÿÑýýÑýý8üÉû8üÉûúúhúúúhúgúÇùgúÇùWú‹ùWú‹ùÌúúÌúúŸûûŸûû“ü/ü“ü/üÊýýÊýýÏþšþÏþšþ§ÿ…ÿ§ÿ…ÿ@E@E»Ç»Ç - -7W7W33–±–±–ÿÿ–ÿÿ:þ.þ:þ.þTü×ûTü×û”úú”úú=ù:ø=ù:ø øèö øèöÁ÷‘öÁ÷‘öËøøËøøëúhúëúhúþÚýþÚý'‰'‰XCXCÞÞÞÞŸòŸò    ……ÉîÉîŸÿâÿŸÿâÿ§ü<ü§ü<üJúTùJúTùùNøùNøòùùòùùLûûLûûþýýþýý:¸:¸qíqí3¬3¬;Æ;ÆÐÐ „ „ l l‡®‡®8ÿ@ÿ8ÿ@ÿ*þþ*þþÛýrýÛýrý“þVþ“þVþ¼ÿ‹ÿ¼ÿ‹ÿíñíñáámðmðùùzxzx@ÿÿ@ÿÿýçüýçühû%ûhû%ûgúÊùgúÊù8úTù8úTù¤úú¤úúûøúûøúÕüTüÕüTü{þ.þ{þ.þ×ÿëÿ×ÿëÿÏöÏöWwWw¥Ù¥Ù•ß•ßW…W…ÅçÅç÷ÿðÿ÷ÿðÿÿÿÿÿYþþYþþÀý\ýÀý\ý²ýYý²ýYý{þKþ{þKþhÿÿhÿÿ*J*JüCüC¢¢MŸMŸÎÎ+„+„ìjìjÚYÚYçUçU˜˜CÀCÀXÑXÑ[â[â`à`à††–#–#„„'“'“•ý•ýá#á#÷÷5E5E¬ÿ“ÿ¬ÿ“ÿdÿHÿdÿHÿ+ÿ ÿ+ÿ ÿÿàþÿàþ±þþ±þþfþ#þfþ#þOþþOþþ“þ[þ“þ[þÿçþÿçþ·ÿµÿ·ÿµÿ©Å©ÅÜÜ««¤¤EÜEÜþÒþÒ*¨*¨ºûºûˆ–ˆ–-ÿ,ÿ-ÿ,ÿëýýëýýÇüIüÇüIüLüÞûLüÞûÈünüÈünüÇýyýÇýyýÿÿÿÿ;;îvîvqq÷÷Q7Q7ÁIÁIHÉHÉÁÁ|¡|¡((ÉÿÅÿÉÿÅÿ  B5B5àÿìÿàÿìÿ>ÿÿ>ÿÿ þÄý þÄýjüæûjüæû'ûrú'ûrúù´øù´ø@øf÷@øf÷Š÷yöŠ÷yö÷Þõ÷ÞõÝöˆõÝöˆõö.õö.õwöõôwöõônöòônöòôŒöõŒöõRöéôRöéô!ö–ô!ö–ô”õèó”õèóKõ‹óKõ‹ó:õqó:õqóWõ±óWõ±óíõsôíõsô%÷Åõ%÷Åõwø÷wø÷Óù ùÓù ù-ûfú-ûfúYü´ûYü´ûßüRüßüRüéüfüéüfüÜü`üÜü`üÁüIüÁüIü:ýÑü:ýÑütþTþtþTþ}E}EoÄoÄÈ’È’‘»‘»¶ ) ¶ ) M 7 M 7  # #XvXv"G"G77 j jK¶K¶§§gþgþ+¹+¹AAÙÀÙÀ;;=Ü=ܹY¹YÁ!Á! Ö ÖX í X í     L’L’^6^6ÛzÛz66íeíemømø))©9©9‹‹ÿýËýÿýËýõùïøõùïø­ôäò­ôäòð/îð/îtí£êtí£ê8ëè8ëè êUç êUç¯ë^è¯ë^è”í¶ê”í¶êgïòìgïòìmñ\ïmñ\ïLóNñLóNñnókñnókñ0ó¼ñ0ó¼ñ8ò&ð8ò&ð6ñï6ñï<ðøí<ðøíWïÕìWïÕìîÄëîÄë4î7ë4î7ëfïÙìfïÙìñïñï˜ó’ñ˜ó’ñáõNôáõNôpø÷pø÷û>úû>ú^ýàü^ýàüžÿ¢ÿžÿ¢ÿŸáŸá9¬9¬(â(âÜÔÜÔæ\ æ\ ¤ A ¤ A K 6K 6Ÿ ÚŸ Ú|ï|ïA°A°Ø :Ø :² ±² ± ñ ñ ƒ Q ƒ Q ‰ ‰ tò tò Õy Õy  ¾  ¾ Æ Ë Æ Ë š šÈ%È%Œ!Œ!‹#‹#ì ì ß ß ,Û ,Û A Ah:h:;·;·Úþ©þÚþ©þþòýþòýƒýeýƒýeýýœüýœüÇûûÇûû4ú2ù4ú2ùÀø÷Àø÷®÷Xö®÷XöZ÷ïõZ÷ïõÅ÷öÅ÷öºø÷ºø÷|ú‹ù|ú‹ùÿûAûÿûAûIý·üIý·üéýtýéýtýËüOüËüOü±úú±úúƒø2÷ƒø2÷^õçó^õçóúòjñúòjñ<ñ0ï<ñ0ïÓñŽïÓñŽï¨óðñ¨óðñ^÷»õ^÷»õûóùûóùÊþÈþÊþÈþɹɹ1Ö1Öˆ>ˆ>ÐcÐcW£W£¼á¼áÿéþÿéþÂýSýÂýSý‚ýý‚ýýKþöýKþöý‡ÿEÿ‡ÿEÿ‰›‰›Ì&Ì&3È3È¥j¥j¿§¿§ECEC˜¤˜¤ÁÔÁÔcscsýý’v’v±‡±‡9þÃv:¿² Zu­;E;E:ÿÿ:ÿÿ’þNþ’þNþSþ þnþ*þŠþJþÑþ©þÿÿ¥ÿ¥ÿ2B2BÊÊ¥¥º^[‡Lµ_ ¼àcàchhdþ'þdþ'þtû¹úKú^ù#ùølø/÷¶÷Zö‚÷öN÷äõN÷äõñ÷Vöñ÷VöRù øRù ø£û›ú£û›ú–ýiý–ýiýq’q’áᓺ“ºÅïÅïn à n à u ü u ü õ@ õ@ **¨¨èIèIÿøþÿøþ®üJü®üJüÕú+úÕú+úIú1ùIú1ù=ûßù=ûßùWý×üWý×ü–É–ÉNN… … R TR T““.}.}E æE æL S L S ˆ‰ˆ‰–½–½1ü^û1ü^û®ø÷®ø÷[÷{õ[÷{õÖöeõÖöeõsø]÷sø]÷zú¨ùzú¨ù¿üü¿üü¤þ þ¤þ þ3¯3¯P0P0¶ÿÈÿ¶ÿÈÿþý…ýþý…ýBü¸ûBü¸ûèúRúèúRúMùYøMùYøøsöøsö÷õ÷õxöÁôxöÁô]ö¯ô]ö¯ôCö‰ôCö‰ôQõfóQõfó_ôJò_ôJò*óìð*óìðbò½ïbò½ïõñ“ïõñ“ïyò.ðyò.ðÞóÇñÞóÇñÞõôÞõôøÇöøÇöÚúñùÚúñù4ý›ü4ý›ü(ÿÒþ(ÿÒþÁ£Á£ F F ‘ ‘üÕüÕ>%>%.S.Sþ+þ+%P%P°È°ÈÍÅÍÅÞ´Þ´#Þ#Þ"Ù"ÙôÁôÁ".".Ú Í Ú Í V žV žÏçÏç    +_+_@0@0/5/5„ S„ S# â # â ;;ƒßƒß…Ú…Ú„ö„ö9â9âõõ¯¼¯¼‹ž‹ž_þ_þ{${$¥Æ¥Æýý¿ýýý¿ý ûYú ûYúßø¬÷ßø¬÷&÷^õ&÷^õãõôãõôõõTôõõTôröõröõ<÷¹õ<÷¹õøwöøwö4÷Ïõ4÷Ïõ¯ö÷ô¯ö÷ôÖôÇòÖôÇò’ò4ð’ò4ðððèíððèíïRìïRìÜíúêÜíúêpí6êpí6êìíêìíêï–ìï–ì³ñï³ñïnôMònôMòÔöõÔöõùð÷ùð÷ûZúûZú÷û>û÷û>û½ü ü½ü ü¼ü!ü¼ü!ü”üýû”üýûSü±ûSü±ûüMûüMû­ûÝú­ûÝúØûûØûû{üÔû{üÔû²ý*ý²ý*ý·þ‚þ·þ‚þ22µèµè ¹ ¹ºŒºŒôôÛ/Û/·' ·' JË JË r r pü pü ]ì ]ì l÷ l÷ |þ |þ gÛ gÛ t÷ t÷ \å \å '® '® ÛA ÛA mÃmÃõ9õ9w§w§!!ââßûßûÛÕÛÕÓÖÓÖOSOSΰΰÙrÙr]]GžGž,¤,¤Ž7Ž7‘(‘(‘{‘{¸Ö¸Ö¿þ¿þû:û:ççÏÏYjYjnþ2þnþ2þwûoúwûoúÚøv÷Úøv÷×ö-õ×ö-õ5öNô5öNô›öýô›öýôÁ÷öÁ÷ö8ùÙ÷8ùÙ÷±ú³ù±ú³ù!üMû!üMû[ýêü[ýêüdýÄüdýÄüý²üý²üˆûÜúˆûÜúWúrùWúrùùé÷ùé÷2øÊö2øÊö•÷ö•÷ö7÷Œõ7÷ŒõG÷¢õG÷¢õø¯öø¯öù®÷ù®÷äùžøäùžøFúMùFúMù,úù,úùúÄøúÄøœù]øœù]ø]ù'ø]ù'øDùé÷Dùé÷JùøJùøõùÒøõùÒø˜ú—ù˜ú—ù†û¢ú†û¢ú£üüû£üüûÚýeýÚýeýüþÌþüþÌþ  ÜÜs¦s¦ÅÅP¼P¼4å4å|w|w,F,F©. ©. R  R  † p † p V Y V Y " 2 " 2 ” £ ” £ ” ` ” ` q, q, b b :¬:¬BèBèåŽ åŽ € € Û Û  â  â û½ û½ FÑ FÑ héhéHHxfxf"È"Èÿhÿh(h(h¨Ø¨Ø°¼°¼³ó³óÒÒËãËã‘þLþ‘þLþ‹üü‹üüµú ùµú ù§ø÷§ø÷èö7õèö7õ¡õ˜ó¡õ˜ó5õó5õó·õ°ó·õ°óîöõîöõpø÷pø÷óùèøóùèøEû~úEû~ú$üJû$üJûðûúúðûúú¿úÅù¿úÅùø÷ø÷„öòô„öòô¨ôRò¨ôRòRófðRófðúògðúògð˜ô:ò˜ô:ò>÷Wõ>÷Wõú¹ùú¹ùÌýaýÌýaývcvcž:ž:ªgªg)÷)÷oëoëyy_Î_ÎtÍtÍ%øÿ%øÿ}s}s--è]è]©J©Jyýyý/ì/첚²š    ­¥­¥e=e=~Z~ZæÝæÝDUDUý%ý%¤¤““ k k)o)oÑÓÑÓò˜ò˜,z,zXÿKÿXÿKÿþ‡ýþ‡ýþUýþUý³þrþ³þrþÓ5Ó5‰n‰nS.S.uu¿ï¿ïš²š²••••X”X”æýýæýýwüðûwüðûÂüüÂüü~ý¼ü~ý¼ü‡þfþ‡þfþÀÿÆÿÀÿÆÿmLmLe/e/ÚÿÙÿÚÿÙÿiÿ'ÿiÿ'ÿÛþ™þÛþ™þöþ×þöþ×þÝÿÚÿÝÿÚÿ\Þ\Þ¯;¯;ƒlƒl—Ì—Ì8l8l#"#" « «ÄþCþÄþCþüµúüµúrùæ÷rùæ÷_÷¾õ_÷¾õ²÷£õ²÷£õÃùbøÃùbø ü»ú ü»ú×þPþ×þPþ#?#?XœXœÍSÍSöÎöÎÛÛOþÿýOþÿýˆûêúˆûêúXù}øXù}ø«÷¢ö«÷¢ö¾÷5ö¾÷5öî÷nöî÷nöõø‚÷õø‚÷æù„øæù„ø\ûZú\ûZúžüîûžüîûtý ýtý ýÀýXýÀýXý¦ýý¦ýýýŽüýŽüŒü¾ûŒü¾û'ü&û'ü&ûäûùúäûùúòûûòûû üLû üLû2üqû2üqû ü*û ü*ûÃûûÃûû‚û±ú‚û±ú_ûƒú_ûƒúUûsúUûsúÏûôúÏûôúŽüãûŽüãûàý_ýàý_ýgÿ@ÿgÿ@ÿ7‰7‰W W J€J€rÒrÒú8ú8 † †î¶î¶ßßRXRXZÿÿZÿÿ;ÿ*ÿ;ÿ*ÿìÿéÿìÿéÿ£ £ ´´`©`©ÿ ÿ ? ¹ ? ¹ æ £æ £ ò ò¿¾¿¾™w™w† d† dI ã I ã J  J  ‰Å‰Åœƒœƒ-Ë-˦ÿŽÿ¦ÿŽÿrÿ†ÿrÿ†ÿ™±™±²9²9¿"¿"öÄ öÄ Í Í ì ƒì ƒ=m=m~ S~ S¾ ž ¾ ž W¢W¢5r5rýeüýeü¨ùXø¨ùXø÷,õ÷,õ÷/õ÷3õ3÷JõM÷cõø‡öµø¬÷uú¨ùuú¨ù÷û^û÷û^û@ýÔü@ýÔüEýdü©ü½ûüû7û&ú`ú6ùùøÁøüöÁøüö¢ö˜ô¢ö˜ôõÔòõÔòuóñuóñZò‹ïZò‹ïªñ˜îªñ˜î¬ñ€î¬ñ€îæñ²îæñ²î{ñRî{ñRîñ îñ îÅð¡íÅð¡íðÅìðÅìÌï_ìÌï_ìÎïZìÎïZì7ðÕì7ðÕìzñaîzñaîñò/ðñò/ð·ô#ò·ô#òö•ôö•ôBø¿öBø¿öÍù¦øÍù¦ø&ûOú&ûOú½üü½üüþ—ýþ—ý†ÿnÿ†ÿnÿææooÊ{Ê{ë’ë’ÒZÒZNâNâ–"–"r'r'\\êo êo  p  p ÛøÛøâ´â´Ü1Ü1ïï>">"å å ¸Ã¸Ã˜Þ˜Þ¯—¯—  O ýO ýÒ ü Ò ü  7  7  â  â q qq qQ wQ wÑ Ñ O [O [ Á Á „  „ Æ@ Æ@ 's'sÀhÀh•á•áÏþÏþÏþÏþîýbýîýbýhýåühýåü)ý‹ü)ý‹üáüOüáüOüÒûýúÒûýú^úù^úùÏ÷öÏ÷övôàñvôàñëñ­îëñ­îõîRëõîRëÑìuèÑìuè`ëæ`ëæëgæëgæ™ë ç™ë çýìØèýìØèÊîìêÊîìê°ð,í°ð,ídòcïdòcïló¥ðló¥ðôdñôdñ6ôñ6ôñ>ô¨ñ>ô¨ñÉóñÉóñdó¦ðdó¦ðDóHðDóHð1ó:ð1ó:ðÆó%ñÆó%ñ;õûò;õûò÷.õ÷.õùù¸øùù¸øcüµûcüµû¾þ3þ¾þ3þ¬¬ÆxÆxpSpS¸¿¸¿««U U šl šl ùÌ ùÌ ƒv ƒv s ™ s ™ F • F • ( ( Þ ŸÞ Ÿh 6h 6¦ š¦ š¥ ¬¥ ¬‹ {‹ {O  Ä \p ô  ƒ ¼   ]  ] µ ç µ ç K p K p Ïá ja â 9 ø‘Dµ‘Ú‘Ú4040èèÎGÎGùDùDÆéÆé™Â™ÂNN†ñ†ñçmçmÀÀH|H|þ˜ýþ˜ýÏûªúÏûªúÿøC÷ÿøC÷Òö¢ôÒö¢ô ô;ò ô;òóðóðÑòªïÑòªïfóðfóðNô´ñNô´ñGö!ôGö!ôøIöøIö”ù0ø”ù0ø4ûÚù4ûÚù¥ûÀú¥ûÀúÉûÕúÉûÕú¶ûŒú¶ûŒú ûú ûúúùúùûúÌùûúÌùÔûÙúÔûÙúÆü6üÆü6üþÂýþÂý…ÿdÿ…ÿdÿ­á­áØ6Ø6¨B¨Bž6ž6‹‹ · ·šš¯7¯7"{"{vvËcËc4ê4ꦆ¦†ôòôò##(( é éãÀãÀûû‡‰‡‰ïïHuHu‘ç‘ç£ú£úMMV/V/((,!,! ÿ•þ ÿ•þ ýEü ýEüzû6úzû6úDú øDú øõùøõùø|úWù|úWùüûüûPý‹üPý‹ü³þ”þ³þ”þAAŒ“Œ“||àÿÖÿàÿÖÿ¹þ„þ¹þ„þÎýwýÎýwýýqüýqüfüªûfüªûpü—ûpü—ûý-üý-üþ’ýþ’ý"ÿÿ"ÿÿ(2(2ü^ü^¤¤oÐoÐÂÿÂÿ22‹ÿRÿ‹ÿRÿÿ·þÿ·þÿîþÿîþÍÿºÿÍÿºÿ t tÍÍQ{Q{FÂF¿Р¿Ð ó ó 6 6 ®®S©S©cãcãiGiGÌþ'þÌþ'þËýlýËýlýÑþšþÑþšþªÿ”ÿªÿ”ÿuìuìäËäËAAu>u>X'X'c›c›r>r>†þþ†þþ¯ü¥û¯ü¥ûøúÌùøúÌù§ùdø§ùdøPùÃ÷PùÃ÷´ùø´ùøú¬øú¬ø‹úDù‹úDùûÚùûÚù…ûlú…ûlúkûSúkûSúhûUúhûUú/ûú/ûúûñùûñùûïùûïùƒûeúƒûeú-ü/û-ü/ûýJüýJüÛý>ýÛý>ý…þþ…þþâþ©þâþ©þ²þ‹þ²þ‹þ0þÄý0þÄýwýÁüwýÁü,ü?û,ü?û.ûú.ûúÜú£ùÜú£ùiûeúiûeú]üqû]üqûþ6þþ6þÔÔýý––ŠçŠçj j 2â 2â ,9 ,9 ˜ ˜ Ù'Ù'^"^"¸)¸)ÞLÞLɃɃ|q|qÿ ÿ YSYSˆoˆoÐZÐZàkàkddç'ç'cÛcÛ·F·F((››Ô®Ô®³ö³ö[·[·ª&ª&sÿ7ÿsÿ7ÿÖü#üÖü#üeúùeúù'ùÎ÷'ùÎ÷MúìøMúìøRûŠúRûŠúþþþþïï9ñ9ñBBžží í e‹e‹`ÿ ÿ`ÿ ÿ¾ý ý¾ý ýsüÄûsüÄûªü¤ûªü¤ûäü[üäü[üÏýpýÏýpýåþÁþåþÁþËÿ×ÿËÿ×ÿ†¹†¹JJ-]-]ÞúÞúLeLe±ÿ–ÿ±ÿ–ÿ4ÿïþ4ÿïþ"ÿïþ"ÿïþÿóþÿóþåþ¬þåþ¬þgþþgþþÏý8ýÏý8ýøü)üøü)ü8ü<û8ü<û]û:ú]û:ú½úù½úùxúùxúù«úcù«úcùUûúUûúQü…ûQü…û¸ýý¸ýýÿçþÿçþRwRw§Þ§Þ{¢{¢‘ÿvÿ‘ÿvÿìý\ýìý\ýYüYûYüYû¦úzù¦úzùYùÈ÷YùÈ÷eøˆöeøˆöiø…öiø…ö#ùk÷#ùk÷ûÞùûÞùý~üý~ü–ÿ*ÿ–ÿ*ÿî7î7gngnWôWôÐá Ðá ­¾ ­¾ MŒ MŒ ‘] ‘] ÉüÉüŠŠ:g:gDÿÔþDÿÔþvýÁüvýÁünü ûnü ûàü"üàü"üõþkþõþkþ*b*bIµIµµ µ u R u R ¦ ¦ Î ZÎ Z_ Ü _ Ü 7 ž 7 ž #É#ɾç¾çôþçýôþçýü¯úü¯úßù&øßù&øúføúføÉú_ùÉú_ù}üü}üüFÿÁþFÿÁþŒvŒv££/Ù/Ù´‚´‚‚ø‚øÕÿœÿÕÿœÿEþ²ýEþ²ýý-üý-üüûüûTûúTûúOûúOûú©û‹ú©û‹úüûúüûú ü"û ü"û«û•ú«û•ú]ûøù]ûøùÔúùÔúùyú"ùyú"ùiúùiúùÒúnùÒúnùtû_útû_úmü‹ûmü‹ûœý ýœý ýÏþtþÏþtþäÿÚÿäÿÚÿÅýÅý¼!¼!‘9‘9U&U&öýöýx—x—Ÿ½Ÿ½,?,?--&&¯Ø¯ØNÿ:ÿNÿ:ÿYþþYþþGþÌýGþÌýäþ þäþ þ]J]J)€)€h‹h‹¥V¥V[y [y ; · ; · ð ð ê ê p¿p¿BBë¥ë¥ŠþÚýŠþÚý7ü$û7ü$ûÁúoùÁúoùOû úOû ú\ü;û\ü;ûEýÏüEýÏüyþ$þyþ$þyÿ@ÿyÿ@ÿôÿÇÿôÿÇÿ Ýÿ ÝÿIÿÿIÿÿ3þÈý3þÈý!ý“ü!ý“üMü7ûMü7ûƒû/úƒû/úûóùûóù¤ûvú¤ûvúnü€ûnü€ûœýýœýýšþ]þšþ]þmÿGÿmÿGÿ>ÿ÷þ>ÿ÷þŽþþŽþþJý™üJý™üßûîúßûîúÈúeùÈúeùúù@øúù@ø¸ùø¸ùøú ùú ù¨ûwú¨ûwúzýóüzýóüÄÿgÿÄÿgÿ¡¡AAvðvðý>ý> d d¡å¡åàðàðàà••,},}LL¬ ¬ „*„*°À°À•ö•ö¥ ¥ LÏLÏNN6æ6æÑSÑSRRGgGg’’ëëà«à«×‚ׂ¹p¹p¥U¥UŠ1Š1 † †xðxðŒÂŒÂÊÿÉÿÊÿÉÿÿÒþÿÒþHþ¾ýHþ¾ý•ýæü•ýæü5ý€ü5ý€üGýŒüGýŒü`ý£ü`ý£üýEüýEüƒü‰ûƒü‰ûòûÝúòûÝúRûúRûúÈúhùÈúhùÈúmùÈúmùHû&úHû&úBü5ûBü5ûÚý,ýÚý,ý.ÿÐþ.ÿÐþzyzyVÐVÐ1k1kE—E—”þ,þ”þ,þ«ü·û«ü·û­úRù­úRù#ùz÷#ùz÷0øö0øö9ø&ö9ø&öÇøíöÇøíö=úÂø=úÂøÌû­úÌû­úbýáübýáü*ÿ÷þ*ÿ÷þŸ­Ÿ­oÛoÛEºEº˜˜„Ö„ÖÑÿ§ÿÑÿ§ÿ@ÿñþ@ÿñþqÿAÿqÿAÿýÿ ýÿ ò%ò%ÜpÜp’s’s:7:7µÅµÅz_z_ܸܸ%«%«aÅażԼÔoŠoŠbpbpƒ¼ƒ¼›ö›öÎ!Î!ô?ô?ffooPPï!ï!ÈöÈöååjÑjÑÐZÐZ$ò$òqqyiyiìÉìÉõ`õ`Þ1Þ1\ÿBÿ\ÿBÿ$þ²ý$þ²ý-ývü-ývü ý1ü ý1ü…ý ý…ý ýmþþmþþ›ÿ”ÿ›ÿ”ÿÑ Ñ ånånYYssüzüzj­j­œœÁÿžÿÁÿžÿ]ÿÿ]ÿÿYÿ.ÿYÿ.ÿÆÿÍÿÆÿÍÿ«Ï«ÏÝ[Ý[ΓΓ¦·¦·*b*b¼Û¼Ûãfãfí í ìÿ°ÿìÿ°ÿÿÌþÿÌþòþÓþòþÓþ²ÿ…ÿ²ÿ…ÿ™ß™ßà༻¼»**iÍiÍ®®NNã7ã7~þìý~þìý2üÝú2üÝúcúuøcúuøùóöùóöQùY÷QùY÷úÀøúÀøôûØúôûØú†ý ü†ý üÖþ þÖþ þëÿ­ÿëÿ­ÿÔÿØÿÔÿØÿ.ÿÿ.ÿÿ&þÄý&þÄý¥üÂû¥üÂûDû1úDû1ú8ú¼ø8ú¼øuùª÷uùª÷ðøìöðøìö$ù9÷$ù9÷ùš÷ùš÷$úrø$úrø³ú?ù³ú?ù<û×ù<û×ùvû#úvû#ú¢ûxú¢ûxúÅû›úÅû›úÒû›úÒû›úíûÆúíûÆúsüoûsüoûNý|üNý|ü&þ¨ý&þ¨ý@ÿÿþ@ÿÿþ(3(3ã,ã,yy)a)a·Þ·Þ ôÿ ôÿ÷þÇþ÷þÇþBþ×ýBþ×ýdþçýdþçý+ÿËþ+ÿËþ”º”ºŸ Ÿ  < <-" -"  X  X Y I Y I ›  ›  Ú Ä Ú Ä › › î îvÓvÓÏÉÏÉýýÒNÒNFFòòÔ|Ô|4»4»Q‹Q‹‡}‡}¦©¦©°º°º¥¥¤\¤\ŸVŸVPN PN ¹”¹”ÓÓlAlA¼ÿšÿ¼ÿšÿ¡üÏû¡üÏû(úkø(úkø=øÈõ=øÈõà÷Hõà÷Hõbøuöbøuö"úgø"úgøüÜúüÜú=þý=þýÉÿãÿÉÿãÿE^E^¼ÿsÿ¼ÿsÿ{þðý{þðýFüûFüû&ú¹ø&ú¹øƒø{öƒø{öýöÎôýöÎôpöžópöžóŸöãóŸöãó!÷šô!÷šôø¢õø¢õù÷ù÷útøútøû¨ùû¨ùúûçúúûçúÄüþûÄüþûEýdüEýdü£ýÅü£ýÅüøýDýøýDýeþöýeþöýãþŽþãþŽþMÿ(ÿMÿ(ÿ¥ÿ’ÿ¥ÿ’ÿÍÿ°ÿÍÿ°ÿ®ÿ–ÿ®ÿ–ÿƒÿbÿƒÿbÿbÿ:ÿbÿ:ÿIÿÿIÿÿ—ÿwÿ—ÿwÿð4ð4¿¿„„ŽŽYY?= ?=   c,c,zz@@ÀòÀò < <Çþ›þÇþ›þBþ·ýBþ·ý•þ þ•þ þÿÚþÿÚþ[q[q__    ŸÞŸÞÓAÓA€D€Dáá6ì6ì°°ÆÆáìáìàý9ýàý9ýwûBúwûBú“ùð÷“ùð÷#øÕõ#øÕõ£÷ƒõ£÷ƒõ’ø„ö’ø„öšúùšúùýbüýbüEEçÔçÔSÙSÙŸ…Ÿ…££àÌàÌÉÉ¥ÿ{ÿ¥ÿ{ÿºüáûºüáûhúùhúù›øÌö›øÌöjù!÷jù!÷,ú¹ø,ú¹ø*ü¹û*ü¹ûÿþ´þÿþ´þP’P’,à,ࢢ&&««Õ0Õ0¥Ž¥Ž£,£,ÊÊFSFS/>/>AbAbp}p}”¼”¼zžzžïÿ÷ÿïÿ÷ÿ~ÿoÿ~ÿoÿ$ÿÿ$ÿÿÿÍþÿÍþÿÂþÿÂþ!ÿðþ!ÿðþ’ÿqÿ’ÿqÿïÿÜÿïÿÜÿˆ¦ˆ¦GGddvveeQQý;ý;å$å$½ì½ìIZIZSÿ!ÿSÿ!ÿ[þæý[þæýèü üèü ü’ûSú’ûSúúÈøúÈøÎùøÎùøÛùø÷Ûùø÷ªú2ùªú2ù3üû3üûûýrýûýrýýhýhŽŽ8R8RÏ Ï ÊÊX‘X‘ÿ¼ÿÿ¼ÿþ¤ýþ¤ý÷üùû÷üùûQü*ûQü*ûzüqûzüqû™ýý™ýý#ÿ¸þ#ÿ¸þf}f}§=§=Û Û ipipx“x“ÍÍwwúúXÄXÄQQdÿdÿ,„,„ßßòéòé’­’­p¿p¿Š­Š­RRé#é#<ÿÿ<ÿÿâýýâýýÑüÀûÑüÀû{üxû{üxû×ü¿û×ü¿û²ýÑü²ýÑüâþmþâþmþ÷ÿ÷ÿ77¢ ¢ qÒqÒ › ›L_L_)ÿ¾þ)ÿ¾þïýpýïýpý²ü°û²ü°û½ûUú½ûUúû‚ùû‚ùûtùûtù”ûlú”ûlúüKûüKû±ýåü±ýåüÉþ>þÉþ>þ“ÿ]ÿ“ÿ]ÿœÿ„ÿœÿ„ÿ¤ÿ¥ÿ¤ÿ¥ÿ}ÿYÿ}ÿYÿ ÿÁþ ÿÁþ‘þ!þ‘þ!þ1þ¦ý1þ¦ýþkýþký5þµý5þµýºþ<þºþ<þ_ÿAÿ_ÿAÿþÿþÿãã™™&Á&ÁGùGù.Ï.ÏÚuÚuŽüŽü:‘:‘SS,‹,‹‹þ‹þÒuÒu6é6é&Ó&Ó¨¨{{ŠÇŠÇ  ~~}õ}õºRºR22$á$áÀ~À~OêOêMlMljMjM× × ÿÁþÿÁþŒý¹üŒý¹üdüKûdüKûqüEûqüEûÕü üÕü üþýeýþýeý4ÿÿ4ÿÿŸÂŸÂóóÿ÷ÿ÷4"4"˞˞Ê[Ê[òKòK33©ÿ}ÿ©ÿ}ÿ¶ÿ“ÿ¶ÿ“ÿûÿØÿûÿØÿghgh½½ÿXÿXì;ì;œÍœÍÐÿ°ÿÐÿ°ÿøþÉþøþÉþþ’ýþ’ýNýfüNýfüÑü³ûÑü³ûÕüæûÕüæûPýTüPýTü¾ýëü¾ýëü þrý þrýwþþwþþÃþRþÃþRþ€þþý€þþýOþÁýOþÁýýËüýËüùüüùüüŒü†ûŒü†ûfü(ûfü(û¸ü§û¸ü§û^ýü^ýüqþèýqþèýVÿ ÿVÿ ÿùÿùÿjujuFÿÝþFÿÝþäýIýäýIýVüEûVüEû!û´ù!û´ù9ú‡ø9ú‡øeú›øeú›ø%û©ù%û©ùÄü©ûÄü©û"þZý"þZýÃÿàÿÃÿàÿNíNí%«%«ööÖpÖp::;n;njÿXÿjÿXÿ"ÿÄþ"ÿÄþ"ÿúþ"ÿúþÔÿËÿÔÿËÿÛ5Û5ÈÈmmuuÊuÊuVÉVɲ&²&e=e=L¢L¢bMbMÎÿâÿÎÿâÿ%%Ñ)Ñ)v(v(ÂÂ\J\J“ó“óuâ uâ ÄÊÄÊ«/«/ммi¿i¿YÿJÿYÿJÿ®ýîü®ýîüØü¹ûØü¹û€ý—ü€ý—üîþ‰þîþ‰þ##cc«š«šX’X’@@gšg𢢡ý¡ýJÿ?ÿJÿ?ÿþýþý ýü ýü×ü˜û×ü˜ûåü÷ûåü÷û"ýTü"ýTüý®üý®üØýýØýýóýUýóýUýÌýýÌýýµýìüµýìü«ý×ü«ý×ü¬ýòü¬ýòüþhýþhý³þOþ³þOþoÿ_ÿoÿ_ÿ#>#>ÊÊN¸N¸,x,x  !ÿÿ!ÿÿeþÕýeþÕýýüýüÑûúÑûúÜúLùÜúLù7û»ù7û»ùHüûHüû„ý§ü„ý§ücÿkÿcÿkÿ§§w?w?””¥¥g„g„<4<4ZZ]þþ]þþùü+üùü+üÐü£ûÐü£û»ü¯û»ü¯û¯ýçü¯ýçü~þEþ~þEþnÿhÿnÿhÿøÿÎÿøÿÎÿÉÿ§ÿÉÿ§ÿtÿRÿtÿRÿÝþþÝþþfþÙýfþÙýòþdþòþdþgÿ6ÿgÿ6ÿšÖšÖ ü üi®i®PP²ò²ò``‡è‡èŸþ4þŸþ4þ”ülû”ülûøú;ùøú;ù\ú†ø\ú†ø<ûÌù<ûÌùåüûåüûvÿŠÿvÿŠÿæÓæÓÙsÙs¥¥ Þ Þi…i…Æ>Æ>ÄÀÄÀ®®Áþ‰þÁþ‰þ¬ýÐü¬ýÐü÷ýIý÷ýIýžþ(þžþ(þwÿLÿwÿLÿ¸¸¥&¥&¢ˆ¢ˆe™e™õdõdii¢û¢û1d1d k kü“ü“nÙnÙÙ!Ù!DZDZŸÿ}ÿŸÿ}ÿÿËþÿËþÁþOþÁþOþ­þAþ­þAþâþ‡þâþ‡þJÿÿJÿÿöÿ÷ÿöÿ÷ÿœºœºPÍPÍÈÈ“ˆ“ˆª©ª©NNLÄLÄ;1;1ŒþþŒþþ3ýü3ýü%ü•ú%ü•ú(ûlù(ûlùÅúïøÅúïø×úù×úù†ûéù†ûéùOüùúOüùúmýžümýžüÿþ¬þÿþ¬þII€€ž™ž™{¢{¢Ã à LpLpîîõõ„þþ„þþŽü*ûŽü*ûúø÷úø÷øõøõm÷^ôm÷^ô¬÷éô¬÷éô8ù÷8ù÷NûdùNûdù^þÚý^þÚýD‚D‚ñ0ñ0  ¾ ¾ «Õ«Õ T T™Á™ÁõÿõÿCý‘üCý‘ü[û»ù[û»ùOúøOúøPúqøPúqøûmùûmùdü>ûdü>û:þœý:þœý,M,MŽ'Ž'§Ÿ§Ÿäùäù ö öʮʮŠdŠd Æ Æ›:›:9¿9¿ä7ä7›Ã›Ã]a]aÉÿ«ÿÉÿ«ÿ1ÿùþ1ÿùþ¸þ6þ¸þ6þZþÎýZþÎý®þþ®þþ÷þˆþ÷þˆþdÿÿdÿÿèÿÜÿèÿÜÿwŸwŸ Y Y{{¸X¸X¶S¶S­E­EÀ`À`èœèœ`2`2¸Ÿ¸Ÿôéôéͻͻò¶ò¶rŸrŸÂþŒþÂþŒþÈü–ûÈü–û û?ù û?ù³ùs÷³ùs÷“ù[÷“ù[÷pú„øpú„øAüãúAüãú¶þtþ¶þtþF×F×ddB1B1.¬ .¬ ]Õ ]Õ ÅòÅòbIbI¤²¤²5‚5‚9þèý9þèýý<üý<ü%ý ü%ý üæý?ýæý?ýÿ©þÿ©þŽßŽßó§ó§  a¥a¥"h"hy`y`Æ|Æ|÷P÷P))ùÿÜÿùÿÜÿ11*}*} Ü Ü·í·íòéòéà à ù'ù'Ùþ8þÙþ8þºüÜûºüÜû ûù ûùpùÕöpùÕöÐø]öÐø]ö­ø"ö­ø"öùU÷ùU÷û-ùû-ù¿üÃû¿üÃûiþíýiþíýÉÿ·ÿÉÿ·ÿ»ð»ðk¬k¬((¤þþ¤þþnýlünýlüÌûcúÌûcú‰úxø‰úxø˜ù÷˜ù÷+ùÔö+ùÔöÉùË÷ÉùË÷äúJùäúJùŒüeûŒüeû&þ¥ý&þ¥ýzÿMÿzÿMÿ>J>JÜÜ8·8·))ÿdÿd–á–á+J+JÂÿªÿÂÿªÿÿiÿÿiÿðÿúÿðÿúÿYoYo4€4€ Á ÁóóÄÄ^Þ^Þ±b±b·\·\s s )–)–Ü"Ü"Î&Î&ÿdÿdBÆBÆzzQßQßöuöu‹Ñ‹Ñ¬©¬©É¿É¿!H!HŸÎŸÎmmb÷b÷xxtt--ªFªF"7"7”þþ”þþyýŸüyýŸü¼üvû¼üvû€ü.û€ü.û½üû½üû3ý;ü3ý;üþcýþcýßþ†þßþ†þ¥ÿœÿ¥ÿœÿ(( üÿ üÿ›ÿ‡ÿ›ÿ‡ÿöþþöþþìýýìýýýäûýäû~üû~üû*ü´ú*ü´úFüÿúFüÿú³ürû³ürû-ýü-ýü­ýÖü­ýÖüþ_ýþ_ýAþ®ýAþ®ýdþÓýdþÓýBþ©ýBþ©ý-þwý-þwý#þný#þnýRþ©ýRþ©ýŽþþŽþþäþuþäþuþÿÖþÿÖþÿÉþÿÉþõþ£þõþ£þŽþýýŽþýý%þ~ý%þ~ý¿ýùü¿ýùü`ývü`ývüùüúûùüúûÑü¥ûÑü¥ûýüéûýüéû±ýîü±ýîüÓþ‚þÓþ‚þ;o;oê¹ê¹’ú’úܺܺt‡t‡1þ1þ[[õ¥õ¥ ÿ=ÿ ÿ=ÿ.ý#ü.ý#ü<û^ù<û^ùºù8÷ºù8÷/ùÒö/ùÒöµùi÷µùi÷ ûù ûù´ülû´ülûôþ‚þôþ‚þÌ\Ì\¼§¼§D·D·¹a¹a`ÿ`ÿsÝsÝL8L8·à·àÿ§þÿ§þºýÞüºýÞü®üwû®üwûAüÓúAüÓúŸüWûŸüWû0ý"ü0ý"ü«þ4þ«þ4þäÿéÿäÿéÿ(¯(¯¦É¦ÉÑÑð”ð”ùÜùÜð‘𑪠ª b‹b‹77ñ'ñ'à à ÆàÆàE E Ý’Ý’##pðpð».».K;K;Ó&Ó&§6§6/ú/ú¤p¤pïcïc¶‘¶‘ÁÁÏÿÏÿ¾þ\þ¾þ\þþ>ýþ>ýÏýäüÏýäüùýCýùýCý:þ›ý:þ›ý‰þìý‰þìýÏþZþÏþZþ ÿ¹þ ÿ¹þÿ·þÿ·þøþˆþøþˆþ×þgþ×þgþ°þ,þ°þ,þ…þòý…þòýgþËýgþËýUþ¤ýUþ¤ýþ]ýþ]ý‡ý­ü‡ý­üñüËûñüËûûûxúûûxúóúùóúù úá÷ úá÷JùàöJùàöüøVöüøVöPùåöPùåöûùÇ÷ûùÇ÷jû§ùjû§ùêüäûêüäûkþÆýkþÆýªÿ”ÿªÿ”ÿ~Ÿ~Ÿ§â§âSS§ÿˆÿ§ÿˆÿàþuþàþuþôý-ýôý-ý%ý-ü%ý-üœülûœülû±ü}û±ü}ûýøûýøûìýýìýý÷þ’þ÷þ’þ ýÿ ýÿqqřř]`]`¿Ù¿ÙãûãûôôæþæþÏçÏçáôáôôô// < <%%ëëŽƒŽƒ%õ%õ¶_¶_4¢4¢Åŧè§è²ô²ôÉ%É%èHèHý_ý_ l lÀÀg¤g¤ñÿÎÿñÿÎÿXÿ ÿXÿ ÿÞþ–þÞþ–þþ þþ þtþÙýtþÙý„þèý„þèý–þþ–þþÊþ^þÊþ^þÿÃþÿÃþlÿ:ÿlÿ:ÿÁÿ­ÿÁÿ­ÿ';';‰½‰½¶ó¶ów«w«AGAG¤ÿŽÿ¤ÿŽÿãþþãþþ-þfý-þfý†ýŠü†ýŠüýüýü:ýü:ýü¸ýÑü¸ýÑü®þ(þ®þ(þÑÿ°ÿÑÿ°ÿ0«0«ŒxŒxœàœà6Å6Å/Ë/ËÐ.Ð.ÓõÓõÇSÇS¹ö¹ö²ÿˆÿ²ÿˆÿÿ¦þÿ¦þÿ­þÿ­þNÿõþNÿõþØÿØÿŸóŸó]Õ]Õñ…ñ…õ õ //7Ê7ÊÐ Ð MoMoáÿìÿáÿìÿÞÿÆÿÞÿÆÿÜÿÐÿÜÿÐÿÚÿØÿÚÿØÿíÿïÿíÿïÿØÿÁÿØÿÁÿgÿ*ÿgÿ*ÿíþfþíþfþ:þgý:þgý}ý„ü}ý„üíü¿ûíü¿ûªü]ûªü]û‘üGû‘üGûêü¿ûêü¿û^ýYü^ýYüþý*ýþý*ýºþ<þºþ<þƒÿWÿƒÿWÿ(?(?z¦z¦º÷º÷Û4Û4Ò'Ò'ÇǺºœÒœÒAeAeãÿÑÿãÿÑÿBÿóþBÿóþÂþBþÂþBþFþ›ýFþ›ýèýýèýýÚýýÚýýGþ®ýGþ®ýòþ®þòþ®þ  , , MM%W%WMM’¯’¯€3€3›¯›¯~ÿqÿ~ÿqÿ˜þþ˜þþþAýþAýþ3ýþ3ý—þõý—þõýÿØþÿØþÖÿÌÿÖÿÌÿq“q“í2í2Ú9Ú9¥ó¥ó`ÿ:ÿ`ÿ:ÿ±þ.þ±þ.þ(þ[ý(þ[ýóý#ýóý#ý@þ›ý@þ›ý÷þhþ÷þhþõÿðÿõÿðÿÃ.Ã.gígíss.”.”‘Ï‘Ï×ÿ¶ÿ×ÿ¶ÿ'ÿÒþ'ÿÒþoþÀýoþÀýßýýßýýéý ýéý ý!þzý!þzýÿ™þÿ™þ÷ÿ÷ÿ‘‘5ÿ5ÿlÍlÍ.}.}¤¢¤¢ç¤ç¤(•(•:R:RØÿÎÿwÿJÿFÿÿÿÂþ+ÿâþAÿÿ¶ÿ¥ÿ¶ÿ¥ÿ\Š\Š>Â> ÞY:©—®­µÄ£´’¥’¥ÜÜ‹-‹-Ð4Ð4 lÿÿlÿÿÿÃþÿÃþÿ¾þÿ¾þ6ÿÙþ6ÿÙþ]ÿ#ÿ]ÿ#ÿÿbÿÿbÿ¬ÿ—ÿ¬ÿ—ÿ±ÿ“ÿ±ÿ“ÿ–ÿqÿ–ÿqÿQÿÿQÿÿ ÿ›þ ÿ›þ¥þþ¥þþWþ©ýWþ©ýþTýþTý÷ý)ý÷ý)ýþQýþQýGþýGþýþÜýþÜý²þ#þ²þ#þÀþ4þÀþ4þÀþ9þÀþ9þÅþDþÅþDþÍþSþÍþSþÿ¥þÿ¥þ{ÿLÿ{ÿLÿÒ4Ò4¹l¹lm_m_áá**­Æ­Æ^+^+¤R¤RjjddÞÿ¾ÿÞÿ¾ÿ¶ÿ’ÿ¶ÿ’ÿÒÿ»ÿÒÿ»ÿ`©`©!g!gÿ²ÿ²éêéê¶¶¯¯öˆöˆmËm˧¦§¦»c»cØ4Ø499ÚÿÌÿÚÿÌÿ¤ÿÿ¤ÿÿÿaÿÿaÿÿ=ÿÿ=ÿ2ÿÖþ2ÿÖþ¹þ.þ¹þ.þ(þ^ý(þ^ýyýzüyýzüÎü’ûÎü’û`üøú`üøúUüßúUüßú€üû€üûÁüyûÁüyûýßûýßûOý1üOý1ü;ýü;ýüýâûýâû]üÝú]üÝú¸ûú¸ûúûùûùGúøGúø°ùM÷°ùM÷ðùu÷ðùu÷rú>ørú>ø±ûðù±ûðùÅühûÅühûåý9ýåý9ý1ÿ½þ1ÿ½þýÿýÿll1@1@Ûÿ­ÿÛÿ­ÿSÿøþSÿøþÊþ2þÊþ2þ­þ+þ­þ+þ ÿ°þ ÿ°þÊÿ½ÿÊÿ½ÿÄ"Ä"üºüºffç°ç°¸Á¸ÁNƒNƒ²²ìIìI””JîJîL L ëÙ ëÙ RF RF œÏ œÏ ¹ù ¹ù ±Ø ±Ø ;- ;- ¥Z ¥Z ¸¸ÆÊÆÊ×e×eOO£µ£µ~‘~‘µáµá77|ð|ðÇrÇr¨9¨9QQÿ¿ÿ¿J…J…"þZý"þZý.üÑú.üÑúsúøsúøóøöõóøöõ×÷gô×÷gô ÷#ô ÷#ôøÕôøÕôßøößøöãùK÷ãùK÷ìúÒøìúÒø×û,ú×û,úüŠúüŠúÙûúÙûúaû˜ùaû˜ù¥úlø¥úløùÓöùÓözøqõzøqõ•÷Gô•÷GôüöUóüöUóéö>óéö>óZ÷ÊóZ÷Êó)øìô)øìô ùOö ùOöCúÚ÷CúÚ÷ ûÑù ûÑùÍü‚ûÍü‚ûÎýóüÎýóü§þ+þ§þ+þ6ÿÌþ6ÿÌþœÿSÿœÿSÿðÿÝÿðÿÝÿ$6$6M}M}­ø­øDÐDÐå å †„†„uéué)÷)÷ͺͺ?=?=†¶†¶©ù©ùÃÃå]å])°)°€0 €0 ¬s ¬s Õµ Õµ Ú­ Ú­ ‚3 ‚3 úiúi  8ô8ô>š>šnnèèŔŔˆEˆEPûPûÝ4Ý4VVÕÿ»ÿÕÿ»ÿ<ÿñþ<ÿñþÂþQþÂþQþ“þîý“þîýÒþ?þÒþ?þ ÿ»þ ÿ»þ©ÿ€ÿ©ÿ€ÿ " "æÿÍÿæÿÍÿbÿ@ÿbÿ@ÿ'þPý'þPý üGû üGûñúÌøñúÌøoù}öoù}öøÂôøÂôU÷ÙóU÷Ùóæ÷¹ôæ÷¹ô6ùö6ùöûîøûîøàü^ûàü^û®þIþ®þIþe®e®^í^ífûfû.r.r ÿÚþ ÿÚþHþªýHþªý¯ý÷ü¯ý÷üþEýþEýsþ þsþ þqÿ'ÿqÿ'ÿu¥u¥¢0¢0¹Ý¹ÝlÁlÁï†ï†ÙÙÑuÑuw w  y yªÈªÈ?)?)ï¹ï¹æ¡æ¡ê°ê°å±å±Ù§Ù§—D—D+¸+¸¾ý¾ýBNBNÜÿ¾ÿÜÿ¾ÿ™ÿjÿ™ÿjÿ”ÿhÿ”ÿhÿ±ÿŽÿ±ÿŽÿÙÿÐÿÙÿÐÿúÿúÿäÿÑÿäÿÑÿ‚ÿFÿ‚ÿFÿÿŸþÿŸþqþÑýqþÑýÈýÄüÈýÄüýÓûýÓûüûüû-ü ú-ü ú.ü–ú.ü–údüâúdüâú¯üFû¯üFûýÚûýÚûšý’üšý’ü,þUý,þUý©þþ©þþ3ÿèþ3ÿèþ¦ÿ€ÿ¦ÿ€ÿÄÿ­ÿÄÿ­ÿ¤ÿnÿ¤ÿnÿiÿ ÿiÿ ÿÛþbþÛþbþLþ¥ýLþ¥ý¦ý¨ü¦ý¨ü(ýü(ýüùü°ûùü°û=ýü=ýüþ5ýþ5ý*ÿ¤þ*ÿ¤þŒ§Œ§óÄóÄqàqà™ƒ™ƒ99ÞìÞì33qq§‡§‡x´x´žÿiÿžÿiÿZÿÿZÿÿ…ÿDÿ…ÿDÿ5050øóøóé+é+¡¡ 2 2eÝeÝ'„'„¤å¤å/6/6ǚǚǃǃ¿f¿f±D±D‰‰,­,­‹Å‹ÅíÿÙÿíÿÙÿVÿòþVÿòþ·þþ·þþ:þlý:þlýÛýëüÛýëüÖýîüÖýîüþýþýLþýLþý°þþ°þþ&ÿÍþ&ÿÍþ‰ÿjÿ‰ÿjÿÛÿØÿÛÿØÿ!!C[C[PhPhYpYpNtNt²ÿ‡ÿ²ÿ‡ÿ$ÿÁþ$ÿÁþhþ¨ýhþ¨ý©ý¦ü©ý¦üý¾ûý¾û¼üPû¼üPûžü$ûžü$ûý»ûý»ûÓýñüÓýñü ÿ’þ ÿ’þ^ž^ž’E’E…“…“ÔÔÈÈï×ï×óvóvæÿ¡ÿæÿ¡ÿ¡þ%þ¡þ%þžý÷üžý÷ü)ý ü)ý üŽýqüŽýqüéý'ýéý'ýÚþbþÚþbþ::B¸B¸ø°ø°! ! âÆâƧ[§[ýnýnJ~J~·ÿ•ÿ·ÿ•ÿ@ÿÙþ@ÿÙþûþ˜þûþ˜þ5ÿåþ5ÿåþ­ÿœÿ­ÿœÿ.2.2±±èEèE½½3:3:¥ÿŠÿ¥ÿŠÿÿ˜þÿ˜þ|þÙý|þÙýþFýþFýûýüüûýüüýý ýýý ýNþ¦ýNþ¦ý«þ.þ«þ.þUÿïþUÿïþáÿÔÿáÿÔÿ:R:Rkk~À~À‹Å‹ÅƒÅƒÅJaJa  Åÿ®ÿÅÿ®ÿmÿ/ÿmÿ/ÿ7ÿáþ7ÿáþNÿòþNÿòþ‰ÿ\ÿ‰ÿ\ÿËÿ´ÿËÿ´ÿ!*!*v±v±ÉÉ | |8Ä8ÄI×I×QßQßRÞRÞMÕMÕCÆCÆEâEâaarrzzz"z"„2„2†6†600VòVò§§Ú3Ú3pŸpŸ$$àÿßÿàÿßÿÓÿ·ÿÓÿ·ÿÉÿ—ÿÉÿ—ÿ±ÿ~ÿ±ÿ~ÿŽÿ[ÿŽÿ[ÿsÿ1ÿsÿ1ÿ_ÿ"ÿ_ÿ"ÿqÿ9ÿqÿ9ÿ¡ÿ~ÿ¡ÿ~ÿéÿèÿéÿèÿ3N3NžßžßòdòdRìRìšBšBnn$¸$¸«î«î%%ƒÿGÿƒÿGÿüþ•þüþ•þ’þ þ’þ þþÜýþÜý²þþ²þþÿþÿþ¥ÿƒÿ¥ÿƒÿKXKXiiϛϛSaSaUhUh·p·p … …{£{£÷ÿëÿ÷ÿëÿìÿÙÿìÿÙÿãÿÊÿãÿÊÿïÿÙÿïÿÙÿùÿåÿùÿåÿ±ÿ†ÿ±ÿ†ÿEÿøþEÿøþÄþ1þÄþ1þþHýþHýŒý~üŒý~ü'ýÓû'ýÓûàüXûàüXû²ü&û²ü&û™üû™üû‚üåú‚üåúmüÓúmüÓúzüéúzüéú‚üïú‚üïúvüØúvüØúZü©úZü©ú1ühú1ühúþûúþûúäûðùäûðùÿû&úÿû&ú4ü|ú4ü|úžüûžüû1ýëû1ýëû³ýµü³ýµüEþvýEþvý²þþ²þþÏþ:þÏþ:þÅþYþÅþYþ°þ4þ°þ4þ¤þþ¤þþßþ_þßþ_þ_ÿÿ_ÿÿ xxÑÍÑͱ±˜>˜>jojoð2ð2I³I³Œ Œ ¬5¬5¯4¯4ÊbÊbè—è—(÷(÷‰ ‰ Þø Þø E E %r %r W W ‹™ ‹™ À‚À‚Ì Ì ÙœÙœ[[JDJDܰܰ«c«c̪̪ßÙßÙæóæóäÖäÖc c |¸|¸2ÿãþ2ÿãþ…ýMü…ýMüüAúüAúQú»÷Qú»÷ùÏõùÏõ;ø¨ô;ø¨ôøôøô“øõ“øõFù*öFù*öòù6÷òù6÷·ú2ø·ú2øNûùNûùYû:ùYû:ùKû,ùKû,ù ûÉø ûÉøiúü÷iúü÷üùH÷üùH÷™ù°ö™ù°öbùYöbùYöiùWöiùWöÎùèöÎùèötúâ÷túâ÷fû=ùfû=ù=üqú=üqú*ýõû*ýõû4þbý4þbýÿ³þÿ³þûÿäÿûÿäÿ·ó·óLóLóïÝïݫ߫ßLìLìôÈôȜœÂrr]ã]ãDÃDɉ°Û°ÛúúŠ+Š+)°)°-˜-˜CêCêÓ¤Ó¤dvdv––µaµa¾¾¸€¸€ww) ) ]]ÈÀÈÀÃ;Ã;ëÿúÿëÿúÿ‹ÿXÿ‹ÿXÿUÿÿUÿÿ+ÿÁþ+ÿÁþÈþ(þÈþ(þTþ}ýTþ}ý¸ý´ü¸ý´ü.ýÞû.ýÞûÉü@ûÉü@û³ü"û³ü"ûîühûîühû=ýõû=ýõûÝýÖüÝýÖügþ™ýgþ™ýÝþ[þÝþ[þÿuþÿuþ¸þ4þ¸þ4þñýýñýýýŠûýŠû#ü^ú#ü^ú:ûþø:ûþø­úü÷­úü÷ÑúNøÑúNø¦ûUù¦ûUùÆümûÆümû@þ2ý@þ2ýzÿKÿzÿKÿ{{I$I$šbšbu(u(Å@Å@2J2J¹ÿ€ÿ¹ÿ€ÿWÿÝþWÿÝþ)ÿÉþ)ÿÉþrÿ=ÿrÿ=ÿÏÿÄÿÏÿÄÿSvSvÕ"Õ"Q÷Q÷ÜÜdd˜Å˜Å—Η΋¶‹¶g“g“0808Ú±Ú±|(|( € €—Ñ—Ñ//ÀÿªÿÀÿªÿyÿOÿyÿOÿaÿ'ÿaÿ'ÿÿIÿÿIÿ¹ÿ ÿ¹ÿ ÿ)=)=© © 0°0°˜C˜CÆŸÆŸt_t_aa9ÿ«þ9ÿ«þ<þ…ý<þ…ýuýxüuýxüøü«ûøü«ûÎüSûÎüSû÷üŠû÷üŠû~ýHü~ýHüIþcýIþcý&ÿ¹þ&ÿ¹þ--FÜFÜ1212ç;ç;oo“9“9*»*» Ý Ý¼•¼•žäžä³ÿ€ÿ³ÿ€ÿÅþ7þÅþ7þþ2ýþ2ýâýéüâýéü7þxý7þxý#ÿªþ#ÿªþL{L{ïï<Þ<ބ„Â]]UØUØÍÚÍÚ[÷[÷ˆ|ˆ|êÿêÿþ˜ýþ˜ý.ý¿û.ý¿ûÚü:ûÚü:ûÛü,ûÛü,ûNýüûNýüûþ-ýþ-ýÿeþÿeþÏÿ—ÿÏÿ—ÿ==þÿ þÿ ¢ÿ£ÿ¢ÿ£ÿÿ²þÿ²þwþÄýwþÄýÉý·üÉý·üDýéûDýéûâüQûâüQûžüûžüûtüÛútüÛú`ü¶ú`ü¶ú.ü]ú.ü]úäûæùäûæùhû9ùhû9ùüú‰øüú‰ø¸úø¸úø»ú"ø»ú"øôútøôútøvû@ùvû@ù=ülú=ülúý¶ûý¶ûþ'ýþ'ýÿwþÿwþªÿŽÿªÿŽÿ3L3L¡å¡åu/u/ØÉØÉAZAZ נ×t˜t˜&0&0Þ½Þ½œdœd¯‚¯‚×)×)àÔàÔ1‘1‘€´ €´ šI šI `d `d §å §å Zf Zf †. †. wv wv ––ɧɧ¶þ¶þæÎæÎ}M}MŠUŠUКК''TpTp1919ϨϨ#¥#¥APAP@ÿñþ@ÿñþ3þXý3þXýMýüMýüœüþúœüþúIüˆúIüˆúTürúTürú~ü»ú~ü»ú®üû®üûâüPûâüPû¸ü û¸ü ûCü„úCü„úžûùžûù÷ú•ø÷ú•øWú˜÷Wú˜÷²ùœö²ùœöEùôõEùôõù²õù²õMùöõMùöõßùÍößùÍöšúì÷šúì÷“û[ù“û[ùoüŸúoüŸú0ý»û0ý»ûØý²üØý²üIþsýIþsý‹þÖý‹þÖý¦þóý¦þóý¡þðý¡þðý‚þÅý‚þÅýnþšýnþšýdþ€ýdþ€ýbþ¤ýbþ¤ý¶þ þ¶þ þÿþþÿþþjÿ;ÿjÿ;ÿüÿþÿüÿþÿƒÂƒÂ¢¢ªyªy"?"?šâšâñVñV ’ ’°°µµ¦¦··±±.¹.¹2¼2¼(«(«ššõyõyÐ,Ð,–Ü–Ül›l›@W@W#B#B2S2S5S5S.E.Eÿüÿü°„°„ii)§)§àDàDÑ>Ñ>ñfñfGîGî­w­w,X,XŠÜŠÜœÔœÔ - -‚‚z¡z¡UÿåþUÿåþ%þ*ý%þ*ý5ýÍû5ýÍû}üÂú}üÂúhü”úhü”ú‰ü³ú‰ü³úñü_ûñü_û‰ýGü‰ýGü'þ3ý'þ3ýÄþþÄþþ"ÿÃþ"ÿÃþÿ°þÿ°þäþnþäþnþrþ«ýrþ«ýÜýéüÜýéüjý üjý üýbûýbûâüIûâüIûàüGûàüGû ýˆû ýˆûGýãûGýãûƒýOüƒýOüÍýµüÍýµüþýþýþýþýþþüþþüàýÄüàýÄü½ýŽü½ýŽü©ý€ü©ý€üÂý¢üÂý¢üïýÛüïýÛü+þEý+þEýƒþÆýƒþÆýðþgþðþgþLÿÿLÿÿ¹ÿ ÿ¹ÿ ÿ##ZŒZŒ“ϓϯ¯ÓGÓG¹¹’m’m$O$OÅ-Å-LþLþ¼“¼“èäèäÜÎÜÎ’k’k7â7âàOàOÆÆo§o§|¿|¿¬û¬ûØ4Ø4}}¦¦÷÷Ã0Ã0m­m­ýóýóz=z=  ©û©ûHnHn##**!/!/%2%2×ÿ¼ÿ×ÿ¼ÿfÿ ÿfÿ ÿÊþþÊþþþýüþýüUýìûUýìûÑüûÑüûrüŸúrüŸúCü_úCü_úkü‘úkü‘úÒü3ûÒü3ûeý üeý üæýðüæýðügþ¥ýgþ¥ý¶þþ¶þþ›þãý›þãý þý þývý!üvý!ü¡üû¡üûüúüúŽûCùŽûCùžû`ùžû`ù(üJú(üJúGýúûGýúûnþªýnþªýcÿÿcÿÿT¢T¢äägg€[€[MçMçæeæeŽÜŽÜDSDS,A,A9O9Or§r§¾0¾0šš@ú@úx@x@ŸŸ¸¨¸¨Å¾Å¾¸”¸”–g–g”h”h¼Ÿ¼ŸåçåçHHc™c™‘Ì‘ÌL†L† ? ?”l”lûŠûŠ8W8W˜ÿ\ÿ˜ÿ\ÿJÿïþJÿïþ]ÿÿ]ÿÿ¹ÿ|ÿ¹ÿ|ÿ\…\…’’º˜º˜:b:bDƒDƒòò__ŽÛŽÛÈÿšÿÈÿšÿ(ÿ–þ(ÿ–þ¼þþ¼þþ¾þþ¾þþÿºþÿºþwÿ=ÿwÿ=ÿÈÿªÿÈÿªÿ  //ïÿîÿïÿîÿÈÿœÿÈÿœÿ˜ÿZÿ˜ÿZÿ¢ÿ‚ÿ¢ÿ‚ÿûÿõÿûÿõÿŽÊŽÊ/å/åÓÃÓÃ.N.N//ee›Â›ÂjÿÿjÿÿUþ‚ýUþ‚ýzý>üzý>üý|ûý|û*ý´û*ý´ûÓý üÓý ü¯þ þ¯þ þ©ÿ’ÿ©ÿ’ÿ’Ó’Ó°°&¼&¼¿%¿%(K(K<ÿÐþ<ÿÐþ^þ ý^þ ý°ý²ü°ý²üEýýûEýýû&ý¥û&ý¥û@ýãû@ýãû¤ýHü¤ýHüþýæüþýæü`þý`þýÆþþÆþþ ÿ›þ ÿ›þ:ÿÐþ:ÿÐþ!ÿ¯þ!ÿ¯þýþ€þýþ€þÒþ3þÒþ3þ³þûý³þûýŸþæýŸþæý¤þýý¤þýý­þþ­þþ¹þþ¹þþ·þþ·þþšþÕýšþÕýˆþµýˆþµýþ¤ýþ¤ý}þ¯ý}þ¯ý±þþ±þþðþ^þðþ^þgÿÿgÿÿðÿóÿðÿóÿ££EðEðåÙåÙ?v?vOO77ŸvŸv¬¬‰â‰â»ÿ˜ÿ»ÿ˜ÿÇÿ©ÿÇÿ©ÿ  ··r"r"R“R“!ß!ßúúšýšý ¬ ¬:þ:þÒÒ¤¤û!û! ½ ½"<"<+Ô+Ô]¨]¨ØÿËÿØÿËÿÌÿ¹ÿÌÿ¹ÿ#P#Püü(ê(ê3g3gû‚û‚ý¶ý¶o¹o¹Y Y èÒèÒh¡h¡ ÿ˜þ ÿ˜þõýöüõýöüý®ûý®ûæü8ûæü8ûý`ûý`û}ýBü}ýBüþýþý›þ´ý›þ´ýõþHþõþHþãþRþãþRþ~þ±ý~þ±ýãýÉüãýÉü?ýèû?ýèû°üéú°üéúüàùüàù‰û!ù‰û!ù6û¡ø6û¡øûVøûVøñú7øñú7øôú<øôú<øÚúøÚúø©úÄ÷©úÄ÷vúˆ÷vúˆ÷RúM÷RúM÷Kú?÷Kú?÷\úV÷\úV÷€ú‹÷€ú‹÷ãúøãúøgûôøgûôøüÙùüÙù³ü÷ú³ü÷úNýÝûNýÝûÖý¨üÖý¨üMþZýMþZýÄþ%þÄþ%þIÿáþIÿáþÇÿ®ÿÇÿ®ÿ>e>eçhçhÿÿþŠþŠénénÔQÔQÿ„ÿ„V V ýýâFâF[[OTOTÍ Í °Å °Å ‡/ ‡/ ¿¤ ¿¤ °^ °^ ý\ ý\   N’ N’ DDVÑVÑ H Hç+ç+,Z,Zuçuç¼=¼=â‡â‡¿K¿K+{+{ƒƒ¶)¶)ÔõÔõ||+C+CÿCÿÿCÿ>ÿÃþ>ÿÃþÿþÿþîþfþîþfþÆþþÆþþjþ’ýjþ’ýÆý˜üÆý˜ü ývû ývûüìùüìùãú(øãú(øúØöúØöZùÂõZùÂõáø õáø õ›øžô›øžô×øõ×øõ>ù§õ>ù§õÚùöÚùö…úš÷…úš÷%û‚ø%û‚øŠû&ùŠû&ù½ûfù½ûfù×û˜ù×û˜ùÌûùÌûù³û_ù³û_ùŸû,ùŸû,ùûùûù•û,ù•û,ùÚû“ùÚû“ùbü_úbü_ú*ý“û*ý“ûíýÁüíýÁüßþ?þßþ?þ¾ÿ|ÿ¾ÿ|ÿtÁtÁÆÆ—’—’ø-ø-NžNžŠëŠë°°ÄMÄMù¦ù¦HH«®«®ìì1~1~xäx䟟Œ Œ jÑjÑ<†<†õ.õ.«Í«ÍpfpfRR,ë,믯À;À;Q›Q›ÍÚÍÚZZçeçe…Ã…ÃC\C\66+F+FFqFqzÂzÂ’ð’ðc¡c¡ïÿìÿïÿìÿ#ÿ¯þ#ÿ¯þ]þ|ý]þ|ýeýüûeýüûŠü©úŠü©úåûªùåûªùoûôøoûôø{ûôø{ûôø²ûVù²ûVù!üþù!üþù¶üïú¶üïúbýßûbýßûøýÇüøýÇüjþ~ýjþ~ýŒþ¼ýŒþ¼ýšþ×ýšþ×ýfþ…ýfþ…ýBþLýBþLý+þ(ý+þ(ýOþdýOþdý“þÍý“þÍýïþgþïþgþ^ÿ ÿ^ÿ ÿêÿÕÿêÿÕÿ\‹\‹··þ}þ}ó…ó…æ_æ_×:×:··ªªÌPÌPäyäy””(Ó(ÓAþAþPPV$V$U%U%NNSSa)a)–v–vºªºªàëàë÷÷ñ ñ ÄÃÄÃh/h/çcçcJ_J_yÿ<ÿyÿ<ÿÑþ;þÑþ;þMþ]ýMþ]ýèýÄüèýÄüóýÄüóýÄüþýþý’þÕý’þÕýÿ‘þÿ‘þ§ÿcÿ§ÿcÿ/L/L/M/M  ¯ÿ‰ÿ¯ÿ‰ÿdÿÿdÿÿÿ˜þÿ˜þÝþ2þÝþ2þÑþþÑþþ ÿþ ÿþPÿÿþPÿÿþ½ÿ‹ÿ½ÿ‹ÿ]‘]‘…օփ΃Î_‘_‘0=0= ÷ÿ ÷ÿéÿÎÿéÿÎÿÿÿýÿÿÿýÿ # #šÛšÛÕյƵÆE~E~°)°)éƒéƒ”ö”ö00I I ˜˜ÿGÿÿGÿWÿìþWÿìþ‡ÿKÿ‡ÿKÿ€Æ€Æãaãa/Ù/Ù5Ó5Óårår‡¹‡¹àÿÈÿàÿÈÿ$ÿ·þ$ÿ·þŽþ°ýŽþ°ýþãüþãü°ýHü°ýHüƒý(üƒý(ü˜ý6ü˜ý6üÂý|üÂý|üýýÕüýýÕü4þ)ý4þ)ýWþhýWþhýZþuýZþuýcþyýcþyý`þfý`þfýTþPýTþPýPþHýPþHýsþœýsþœýµþéýµþéýÿþqþÿþqþ?ÿåþ?ÿåþ†ÿGÿ†ÿGÿ¡ÿiÿ¡ÿiÿˆÿ6ÿˆÿ6ÿeÿÿeÿÿÿ›þÿ›þÐþ(þÐþ(þˆþºýˆþºýcþ}ýcþ}ý›þÌý›þÌýÿþÿþÄÿ»ÿÄÿ»ÿ®®‡Q‡QK—K—á‘á‘'å'åþ¾þ¾š#š#VVQQ‹‹ÌLÌLëvëvÌÌe$e$ŠbŠbvv^'^'¨¨º"º"r°r°u¼u¼ˆÂˆÂêcêcPPµ™µ™ëûëûDzDz$ð$ðq–q–“ÿAÿ“ÿAÿ¿þûý¿þûýþúüþúü°ý]ü°ý]üïý½üïý½ü†þ¤ý†þ¤ý/ÿåþ/ÿåþ%%ÏYÏYU!U!qEqE?ð?ð²'²'55qÿ-ÿqÿ-ÿæþYþæþYþ¡þçý¡þçýÃþþÃþþãþNþãþNþ1ÿ¦þ1ÿ¦þˆÿ:ÿˆÿ:ÿÐÿµÿÐÿµÿ  *9*92Q2Q**ðÿçÿðÿçÿÐÿ°ÿÐÿ°ÿ¶ÿ„ÿ¶ÿ„ÿ¢ÿ‚ÿ¢ÿ‚ÿ£ÿ‚ÿ£ÿ‚ÿ¥ÿsÿ¥ÿsÿˆÿ9ÿˆÿ9ÿRÿìþRÿìþÿþÿþÌþ þÌþ þ“þ¸ý“þ¸ýjþlýjþlýOþHýOþHý_þuý_þuý’þÉý’þÉýñþZþñþZþbÿÿbÿÿÐÿ¼ÿÐÿ¼ÿ*G*Gb–b–=c=cìÿìÿgÿ%ÿgÿ%ÿéþJþéþJþgþPýgþPýèýüèýü¡ý;ü¡ý;ü¯ýIü¯ýIüùýÇüùýÇüþ¶ýþ¶ý$ÿ¦þ$ÿ¦þúÿòÿúÿòÿÁ&Á&vava+W+Wµ,µ,ê˜ê˜ÙtÙtoáoáÝÝÀÀA‰A‰ŽÿfÿŽÿfÿþþ{þþþ{þÍþþÍþþõþaþõþaþÿlÿÿlÿS‚S‚jjpìpìQQú4ú43È3Ȩ²¨²¸¹¸¹¸…¸…‰°‰°iÿ0ÿiÿ0ÿþûýþûýþýþýþýÎüþýÎü]þVý]þVýÿhþÿhþ¨ÿzÿ¨ÿzÿZ‚Z‚éVéVó€ó€³³^¢^¢ãÿ×ÿãÿ×ÿhÿÿhÿÿòþQþòþQþ–þ½ý–þ½ý€þ­ý€þ­ý„þ©ý„þ©ýþÈýþÈý¶þêý¶þêý¯þçý¯þçýžþÊýžþÊýuþ‹ýuþ‹ýYþQýYþQýHþ<ýHþ<ýAþ6ýAþ6ýbþlýbþlý“þÂý“þÂýðþPþðþPþOÿÝþOÿÝþ¾ÿ˜ÿ¾ÿ˜ÿ11b¬b¬› › æwæwÇÇHHdCdCucuc\3\3··± ± ?d?dÑÿºÿÑÿºÿˆÿ@ÿˆÿ@ÿ~ÿ/ÿ~ÿ/ÿ§ÿoÿ§ÿoÿ.J.JÎIÎI|c|c#W#W¢%¢%Þ•Þ•ÃfÃfiÞiÞŸ±Ÿ±ôzôzRÿÆþRÿÆþ®þºý®þºý^þuý^þuýwþ™ýwþ™ýÃþþÃþþ1ÿ¨þ1ÿ¨þÿ0ÿÿ0ÿÈÿ¡ÿÈÿ¡ÿèÿÒÿèÿÒÿÒÿ®ÿÒÿ®ÿ ÿfÿ ÿfÿhÿÿhÿÿ ÿyþ ÿyþµþãýµþãýsþqýsþqýSþ^ýSþ^ýþ¥ýþ¥ýÞþ*þÞþ*þ8ÿÃþ8ÿÃþ„ÿDÿ„ÿDÿÃÿŸÿÃÿŸÿÇÿšÿÇÿšÿ{ÿ3ÿ{ÿ3ÿ?ÿ¨þ?ÿ¨þÏþþÏþþeþvýeþvýþ ýþ ýþýþýMþTýMþTý¯þçý¯þçýCÿÞþCÿÞþ÷ÿûÿ÷ÿûÿ‰â‰âýšýšW)W)š”š”š¡š¡ƒkƒkJJ––º(º(yÊyÊrºrºšöšöèzèzCùCù§§ññKKXXEEÙøÙøŸŸY+Y+ÒÒò’ò’ÝwÝwèkèkí{í{í‚í‚ééâzâz¸.¸.ƒØƒØ5J5JôÿÕÿôÿÕÿŸÿeÿŸÿeÿ[ÿüþ[ÿüþ&ÿªþ&ÿªþÿŒþÿŒþÿ‰þÿ‰þÿŒþÿŒþ ÿ”þ ÿ”þöþ@þöþ@þ¸þþ¸þþŠþŸýŠþŸýjþXýjþXýVþTýVþTýŒþ§ýŒþ§ýãþ5þãþ5þPÿèþPÿèþËÿ°ÿËÿ°ÿ/S/S¶¶^“^“}ÿ&ÿ}ÿ&ÿáþ:þáþ:þPþ3ýPþ3ýÍýhüÍýhü|ýùû|ýùû„ýü„ýüºýQüºýQü2þý2þý®þÃý®þÃý:ÿ½þ:ÿ½þ¾ÿ«ÿ¾ÿ«ÿ:m:mm¬m¬d¦d¦;V;VþÿþÿÎÿ¶ÿÎÿ¶ÿŸÿ|ÿŸÿ|ÿºÿŽÿºÿŽÿäÿ×ÿäÿ×ÿ(E(E~Í~ÍÁ8Á8ôŠôŠÆÆŸŸËFËF‹â‹âTT&4&4** ! !**$@$@+P+P0[0[3b3bDfDfPgPgHfHf0S0SKrKro¹o¹šÿšÿÚSÚS ± ±,æ,æ2Ù2Ù——¶¶5e5eËÿ¹ÿËÿ¹ÿŸÿiÿuÿÿRÿÜþ1ÿžþ&ÿþÿþNÿáþNÿáþ²ÿpÿ²ÿpÿv¶£ôÐ3âbõ“ñ†ïzïzÖ_Ö_ž ž ~Í^()()ûÿúÿûÿúÿæÿäÿæÿäÿ""`ž`ž››Bè„„"é"éL#L#8ù8ùµµâtÂ4žóz³S|-GýÿîÿýÿîÿæÿåÿæÿåÿZ”™îØH š;í`+†k†kŒŒJJÖIÖI::SÿùþSÿùþ¯þÛý¯þÛý/þûü/þûüàýüàýüèý üèý üBþýBþý¨þîý¨þîýÿ¤þÿ¤þmÿ"ÿmÿ"ÿ¨ÿsÿ¨ÿsÿ©ÿcÿ©ÿcÿkÿ ÿkÿ ÿÿˆþÿˆþ¯þÕý¯þÕýBþ ýBþ ýðý˜üðý˜üµý7üµý7üŽýüŽýü˜ýü˜ýü¹ýEü¹ýEüÜýüÜýüþØüþØü'þý'þýMþGýMþGýrþoýrþoývþyývþyýþ‹ýþ‹ýŒþ£ýŒþ£ý¼þïý¼þïýÿeþÿeþYÿëþYÿëþÿlÿÿlÿõÿ÷ÿõÿ÷ÿ<h<hHmTrMuFx7c)Oðÿàÿðÿàÿ±ÿ†ÿ±ÿ†ÿÿ>ÿÿ>ÿˆÿJÿ´ÿŒÿáÿÎÿ,[Š·¬¬ÚâÚ⊊֠"'Y‰ì•å›Þ\‰\‰ùÕùÕ\á\áÓ °Ìއ~oŸ¬Ÿ¬ÐîÐî00XXXXÙÙ•£•£WHWH_4_4sSsSŸ¦Ÿ¦ìì"|"|55ûIûIŠwŠw±*±*Õÿ¼ÿÕÿ¼ÿÿþCþÿþCþ6þôü6þôü™ýðû™ýðûkýÏûkýÏû£ý0ü£ý0ü þîü þîü“þ¿ý“þ¿ý@ÿ½þ@ÿ½þœÿnÿœÿnÿ¸ÿˆÿ¸ÿˆÿÿYÿÿYÿ#ÿ{þ#ÿ{þ¢þÌý¢þÌýòý¡üòý¡üký»ûký»ûôüûôüûÒüÁúÒüÁúãüÚúãüÚú ý@û ý@ûZýÀûZýÀû£ý9ü£ý9üþ¿üþ¿ü`þJý`þJý®þÅý®þÅýÈþúýâþ1þùþOþÿoþÿŠþ)ÿ§þPÿÙþPÿÙþ‚ÿ6ÿ‚ÿ6ÿ¬ÿ„ÿ¬ÿ„ÿÏÿÅÿÝÿ×ÿìÿêÿ÷ÿñÿøÿûÿõÿõÿóÿõÿóÿéÿßÿéÿßÿßÿÏÿßÿÏÿçÿÒÿçÿÒÿýÿõÿýÿõÿ.Q.QuÀuÀÜlÜl< < µÏµÏvvQËQË< < üNüNžªžªÏÏœÿœÿ2R2RÛÿÄÿÛÿÄÿ¤ÿaÿ¤ÿaÿ¨ÿcÿ¨ÿcÿÜÿËÿÜÿËÿ&=&=ææø™ø™d8d8¶Ò¶Òñ3ñ3 E EÔÔhThTènèn,G,G`ÿÞþ`ÿÞþþ½ýþ½ýìýüìýüoýÀûoýÀûcý­ûcý­û®ýü®ýü6þý6þý ÿaþ ÿaþöÿÌÿöÿÌÿÏkÏk|“|“ÆýÆý¦³¦³4è4èrÆrÆšÿKÿšÿKÿÓþþÓþþ6þý6þýöýüöýüþâüþâüeþ3ýeþ3ýÿzþÿzþ©ÿ‰ÿ©ÿ‰ÿu­u­——tNtNxwxwb6b6ÑÑÕTÕT°Œém»NŽ<g*A,@,@,P,P;[;[Fb9T-F!2ôÿíÿôÿíÿ×ÿÅÿ×ÿÅÿÐÿµÿÐÿµÿÍÿ¶ÿËÿ¹ÿÐÿºÿ×ÿ½ÿãÿÖÿñÿñÿ++3Y3YIŒIŒY“VŒT†QNyBj7\7\#C#C"-"- * *ýÿöÿýÿöÿÐÿ›ÿÐÿ›ÿ|ÿ"ÿ|ÿ"ÿÿƒþÿƒþ¼þáý¼þáýuþeýuþeýAþýAþý=þ(ý=þ(ý€þŠý€þŠýõþ;þõþ;þzÿÿzÿÿ  ‹î‹îó¤ó¤#Ñ#ÑÎÎÕTÕT]ˆ]ˆçÿÃÿçÿÃÿvÿ#ÿvÿ#ÿÿþÿþÿhþÿhþ(ÿ•þ(ÿ•þgÿÿgÿÿÌÿºÿÌÿºÿ>n>n™þ™þàoàoÅÅÃÃþ§þ§àgàg¤¤pÌpÌd—d—xÉxɦ¦èyèyããN1N1CC¾¾ž ž 7Y7YÂÿ’ÿÂÿ’ÿcÿòþcÿòþÿtþÿtþîþ5þîþ5þÿXþÿXþ2ÿ­þ2ÿ­þ}ÿ9ÿ}ÿ9ÿËÿÀÿËÿÀÿ . .>f>fFaFa++çÿÎÿçÿÎÿÿCÿÿCÿEÿÂþEÿÂþíþ+þíþ+þ©þ·ý©þ·ýwþaýwþaýtþeýtþeý§þÑý§þÑýõþOþõþOþHÿ¼þHÿ¼þŽÿ0ÿŽÿ0ÿÈÿ‘ÿÈÿ‘ÿØÿ®ÿØÿ®ÿÕÿ¶ÿÕÿ¶ÿÃÿÿÃÿÿ¥ÿ]ÿ¥ÿ]ÿ~ÿ(ÿ~ÿ(ÿ`ÿÿ`ÿÿZÿóþZÿóþwÿÿwÿÿ ÿ`ÿ ÿ`ÿâÿÉÿâÿÉÿ(?(?`­`­œœÊTÊTÜpÜp×a×a¿/¿/˜˜u×u×fÁfÁx¼x¼”õ”õ¨¨ÅMÅMÉ=É=© © |¾|¾ElEl''!>!>HH†÷†÷æyæyP1P1 ½ ½ºÛºÛ˜¨˜¨66¨4¨4!C!C¢ÿbÿ¢ÿbÿ<ÿ­þ<ÿ­þìþ5þìþ5þïþ&þïþ&þÿyþÿyþdÿöþdÿöþÑÿ¤ÿÑÿ¤ÿ*F*FÙÙÅMÅMÙVÙVÅ>Å>qÍqÍ*S*SïÿîÿïÿîÿÏÿ°ÿÏÿ°ÿÅÿ ÿÅÿ ÿÝÿÔÿÝÿÔÿþÿþÿ115Y5Y6X6X%%ÙÿºÿÙÿºÿ˜ÿ>ÿ˜ÿ>ÿTÿÜþTÿÜþÿþÿþÿhþÿhþÿ}þÿ}þ7ÿ´þ7ÿ´þTÿåþTÿåþnÿÿnÿÿ…ÿ8ÿ…ÿ8ÿ™ÿJÿ™ÿJÿŠÿ;ÿŠÿ;ÿ_ÿñþ_ÿñþ>ÿ¹þ>ÿ¹þÿnþÿnþéþ'þéþ'þèþ4þèþ4þ ÿkþ ÿkþ;ÿÀþ;ÿÀþ…ÿ:ÿ…ÿ:ÿÓÿ°ÿÓÿ°ÿ&/&/Èÿ˜ÿÈÿ˜ÿXÿèþXÿèþìþ)þìþ)þ˜þ•ý˜þ•ýYþ:ýYþ:ý\þPý\þPý•þ¢ý•þ¢ýÿfþÿfþ|ÿ1ÿ|ÿ1ÿþÿûÿþÿûÿgŸgŸªª½)½)©©vÀvÀ:b:bßÿµÿßÿµÿÎÿ¶ÿÎÿ¶ÿ;m;múúêŠêŠ$ø$øN9N9J$J$ÑÑÎSÎS”ç”çb‹b‹7N7N3[3[n°n°ÂJÂJ6õ6õÑÑÿSÿS¼ø¼ø^B^Bðzðz`…`…Óÿ»ÿÓÿ»ÿaÿùþaÿùþJÿÇþJÿÇþbÿÿbÿÿÌÿžÿÌÿžÿ=_=_—ú—úÝtÝtÑѶ¶Û]Û]ƒÛƒÛ??²ÿƒÿ²ÿƒÿ_ÿÛþ_ÿÛþÿ‡þÿ‡þ ÿhþ ÿhþÿuþÿuþ(ÿ¥þ(ÿ¥þ>ÿÑþ>ÿÑþRÿéþRÿéþdÿÿdÿÿeÿöþeÿöþhÿòþhÿòþlÿòþlÿòþqÿöþqÿöþwÿ-ÿwÿ-ÿ®ÿlÿ®ÿlÿëÿáÿëÿáÿ@@CŒCŒa·a·W—W—ÍÿµÿÍÿµÿ|ÿ/ÿ|ÿ/ÿÿ€þÿ€þÑþ÷ýÑþ÷ý¨þ±ý¨þ±ý¼þáý¼þáýÿpþÿpþlÿÿlÿÿüÿüÿ…Ë…Ëòò6 6 88ô™ô™’ ’ MMŸÿXÿŸÿXÿ9ÿ­þ9ÿ­þ ÿlþ ÿlþÿyþÿyþRÿÞþRÿÞþ†ÿ4ÿ†ÿ4ÿ²ÿ}ÿ²ÿ}ÿÖÿºÿÖÿºÿãÿÈÿãÿÈÿÎÿ¤ÿÎÿ¤ÿ­ÿhÿ­ÿhÿ“ÿIÿ“ÿIÿ¯ÿrÿ¯ÿrÿçÿÎÿçÿÎÿ$L$LuÑuÑÄYÄYñ’ñ’ázáz""‰ÿ&ÿ‰ÿ&ÿûþ\þûþ\þ›þ¾ý›þ¾ý‚þvý‚þvý³þØý³þØý?ÿ”þ?ÿ”þÑÿ¶ÿÑÿ¶ÿ|É|ÉÈÈppޡޡpypy¶¶‰ã‰ã  «ÿ]ÿ«ÿ]ÿlÿðþlÿðþ{ÿ"ÿ{ÿ"ÿœÿNÿœÿNÿÚÿÀÿÚÿÀÿ,?,?}Ã}üE¼Eü©ü©,ó,ó>>'ê'êÿ«ÿ«ÚqÚq¸,¸,‰ß‰ßPŒPŒ F Føÿüÿøÿüÿ×ÿ¿ÿ×ÿ¿ÿ¼ÿžÿ¼ÿžÿ·ÿ”ÿ·ÿ”ÿÄÿÿÄÿÿïÿåÿïÿåÿ>o>op¾p¾– – ÂEÂEÂ?Â?žž^ž^ž’ÿLÿ’ÿLÿ3ÿ¶þ3ÿ¶þéþ0þéþ0þ±þÊý±þÊýˆþýˆþýœþ¨ýœþ¨ý±þØý±þØý÷þKþ÷þKþDÿÃþDÿÃþ¥ÿ\ÿ¥ÿ\ÿ  R—R—ŸŸÛŠÛб±ØyØy”ú”ú66ŒÿGÿŒÿGÿéþ+þéþ+þXþ0ýXþ0ýèýoüèýoü¥ý ü¥ý üÇý3üÇý3üþ«üþ«üÂþÙýÂþÙýÿÿÿÿLL»»“©“©ÁÁ¦É¦É4 4 œøœøîÿÖÿîÿÖÿKÿÏþKÿÏþÉþþýÉþþýtþ\ýtþ\ýuþgýuþgý¡þ§ý¡þ§ýÿ\þÿ\þ~ÿÿ~ÿÿìÿÓÿìÿÓÿE†E†ŒŒ³0³0¿A¿A¥¥ûûwÊwÊcŸcŸAiAi$K$K11ìÿØÿìÿØÿÌÿ¢ÿÌÿ¢ÿ²ÿwÿ²ÿwÿžÿVÿžÿVÿŸÿ]ÿŸÿ]ÿÁÿ•ÿÁÿ•ÿÝÿÄÿÝÿÄÿ  3T3TXŽXŽtºtºˆÚˆÚ†Ð†Ð‚Ä‚Ä|Ç|ÇuÆuÆ®.®.ÆMÆMÆPÆP’í’í5X5X¸ÿ‰ÿ¸ÿ‰ÿCÿÉþCÿÉþÖþþÖþþ‚þ€ý‚þ€ýƒþrýƒþrýÂþÜýÂþÜý-ÿzþ-ÿzþÇÿ¨ÿÇÿ¨ÿ~Ö~ÖÈÈ¢±¢±òcòcûZûZšÊšÊD%D%Á6Á6:R:RËÿ—ÿËÿ—ÿqÿÿqÿÿÿÿÿÿŒÿJÿŒÿJÿøÿõÿøÿõÿO€O€” ” É{É{ðžðžì“é‰Óa¿;£‰æJmJmùÿõÿùÿõÿ 59`Nd£tÄ…ç…çúú^¥^¥Žÿ>ÿŽÿ>ÿÿjþÿjþ²þÄý²þÄýHþýHþýþ¤üþ¤ü þ¦ü þ¨üþÇü5þæüYþ-ý~þtýßþþßþþRÿÙþRÿÙþ²ÿtÿ²ÿtÿáÿÄÿÛÿ¼ÿ×ÿµÿÂÿ•ÿ¯ÿwÿ†ÿ2ÿ_ÿîþ_ÿîþÿhþÿhþ³þ¼ý³þ¼ý\þ%ý\þ%ýþÆüþÆüþÅüþÅüFþ ýFþ ýžþ¢ýžþ¢ýûþAþûþAþZÿáþZÿáþ©ÿgÿ©ÿgÿêÿèÿêÿèÿ119[9[=[=[/9/9  úÿçÿúÿçÿæÿÉÿæÿÉÿÖÿÁÿÖÿÁÿùÿûÿùÿûÿ5c5ctÆtƵCµCö³ö³66e_e_u€u€lplp_Y_Y>,>,þþ//8)8)JEJESRSRUSUSQ:Q:(ì(ì´´ïŸïŸû§û§ÖÖ,,>1>1GLGLYXYX22í¢í¢ææ'.'.­ÿÿ­ÿÿKÿÝþKÿÝþÿþÿþ ÿ\þ ÿ\þ!ÿtþ!ÿtþEÿ½þEÿ½þuÿÿuÿÿžÿnÿžÿnÿÐÿ²ÿÐÿ²ÿùÿêÿùÿêÿúÿçÿúÿçÿÊÿ”ÿÊÿ”ÿ“ÿ9ÿ“ÿ9ÿHÿÆþHÿÆþ ÿZþ ÿZþàþþàþþÏþíýÏþíýÕþÿýÕþÿýîþ%þîþ%þÿ[þÿ[þÿþÿþCÿ»þCÿ»þdÿåþdÿåþqÿûþqÿûþmÿÿmÿÿlÿøþlÿøþmÿõþmÿõþpÿÿpÿÿ„ÿ'ÿ„ÿ'ÿ–ÿUÿ–ÿUÿ¦ÿ}ÿ¦ÿ}ÿ´ÿÿ´ÿÿ°ÿrÿ°ÿrÿžÿIÿžÿIÿ€ÿ*ÿ€ÿ*ÿiÿôþiÿôþXÿÌþXÿÌþ<ÿ°þ<ÿ°þ8ÿžþ8ÿžþGÿÔþGÿÔþ†ÿ*ÿ†ÿ*ÿÛÿ·ÿÛÿ·ÿ0R0R””»»WKWKvvvvYCYCü¸ü¸†ò†òñÿÚÿñÿÚÿXÿ÷þXÿ÷þÞþþÞþþþ^ýþ^ýgþGýgþGý™þyý™þyýÚþþÚþþhÿôþhÿôþÝÿÊÿÝÿÊÿTTƒé³CàˆÏ!ë5 ßß؃؃ŠðŠð(éÿÖÿ»ÿ„ÿÿ/ÿ`ÿÚþ<ÿ—þÿTþÿTþÿ=þÿ=þÿcþÿcþSÿÊþSÿÊþªÿ[ÿªÿ[ÿi°i°»7»7úŸúŸ Í Í»»ö•ö•ÙoÙo¾:¾:¥ ¥ ™Žþ‹÷‰ð…è‚àzßzßÚÚ„Ò„ÒtÈlÂe¼mÅwÏ„ì“ “ ÇgÇgî¬î¬Ìí'78 :&ççö™ö™§ § T‰1J òÿÙÿÖÿ¦ÿ¿ÿ}ÿ¨ÿTÿ¨ÿTÿ„ÿ4ÿ„ÿ4ÿˆÿ=ÿˆÿ=ÿÿWÿÿWÿ¯ÿnÿ¯ÿnÿ¾ÿ’ÿ¾ÿ’ÿËÿ°ÿËÿ°ÿÖÿ¹ÿÖÿ¹ÿßÿ±ÿßÿ±ÿÆÿ›ÿÆÿ›ÿ²ÿŠÿ²ÿŠÿ²ÿ~ÿ²ÿ~ÿ³ÿfÿ³ÿfÿ¥ÿTÿ¥ÿTÿ›ÿHÿ›ÿHÿtÿÿtÿÿFÿ¸þFÿ¸þÿdþÿdþÝþöýÝþöý¥þ”ý¥þ”ý|þNý|þNý`þý`þý_þ4ý_þ4ý¤þý¤þýôþþôþþJÿ¹þJÿ¹þ’ÿLÿ’ÿLÿÞÿÆÿÞÿÆÿ**#>#>  óÿòÿóÿòÿÊÿ”ÿÊÿ”ÿ‰ÿ6ÿ‰ÿ6ÿVÿØþVÿØþ/ÿšþ/ÿšþ2ÿœþ2ÿœþWÿ×þWÿ×þ‡ÿ4ÿ‡ÿ4ÿ¿ÿ‘ÿ¿ÿ‘ÿýÿþÿýÿþÿ?k?ksØsØ››¹2¹2»@¾O¾M¿L½J¼I¶6¶6®#®#¤0¤0¹=¿CÇJÂP¿W¹MµDµDª!ª!ŽþŽþÜu»a™Nx=^-E!2!2<< Y!W"V"L#C"9#0#0  óÿÚÿóÿÚÿÚÿ§ÿÚÿ§ÿÆÿtÿÆÿtÿ¶ÿaÿ¶ÿaÿªÿNÿªÿNÿ¡ÿ;ÿ¡ÿ;ÿ›ÿHÿ›ÿHÿ§ÿeÿ§ÿeÿ²ÿ‚ÿ²ÿ‚ÿ¼ÿÿ¼ÿÿÕÿ¬ÿÕÿ¬ÿéÿÙÿéÿÙÿùÿùÿÿÿ# ! ÷ÿíÿâÿºÿâÿºÿÁÿ‡ÿÁÿ‡ÿ—ÿ4ÿ—ÿ4ÿfÿáþ[ÿÏþPÿ¾þPÿÌþPÿÛþaÿòþrÿ ÿrÿ ÿ¯ÿnÿ¯ÿnÿñÿñÿñÿñÿ26tY­}ç  ÄZêêååÍjÍjÍjÍjÍjÍjÍjd¨üÿçÿüÿçÿåÿÑÿåÿÑÿâÿ»ÿâÿ»ÿâÿ»ÿâÿ»ÿâÿ»ÿâÿ»ÿâÿ»ÿ,MŸMŸcÑcÑsÃsÃ^¢T‘KBp:`2O+?+?,,;;JJ))ýÿøÿýÿøÿãÿ·ÿãÿ·ÿ®ÿfÿ®ÿfÿ„ÿÿ„ÿÿcÿÔþcÿÔþJÿÃþJÿÃþHÿÂþHÿÂþYÿÑþYÿÑþyÿÿyÿÿ¥ÿ_ÿ¥ÿ_ÿÊÿ®ÿÊÿ®ÿèÿýÿèÿýÿ,,0K0K9Z9Z?Y?Y2X2X&W&WVV55óÿóÿÙÿÂÿÙÿÂÿ¹ÿ‘ÿ¹ÿ‘ÿ ÿ`ÿ ÿ`ÿÿ?ÿÿ?ÿÿ.ÿÿ.ÿ¢ÿ]ÿ¢ÿ]ÿÂÿŒÿÂÿŒÿìÿîÿìÿîÿPPV¢V¢‚ä‚ä“ö“öŽøŽøgºgº5i5i  Øÿ¥ÿØÿ¥ÿŸÿCÿŸÿCÿ‚ÿ!ÿ‚ÿ!ÿ|ÿ%ÿ|ÿ%ÿ™ÿKÿ™ÿKÿÂÿ‘ÿÂÿ‘ÿäÿ×ÿäÿ×ÿ33'9'9ôÿõÿôÿõÿÚÿ«ÿÚÿ«ÿ¥ÿaÿ¥ÿaÿ{ÿ'ÿ{ÿ'ÿzÿÿzÿÿ‹ÿ3ÿ‹ÿ3ÿªÿyÿªÿyÿÔÿ¿ÿÔÿ¿ÿöÿöÿ!K!KCaCa=g=g'='=óÿóÿ×ÿ©ÿ×ÿ©ÿ³ÿoÿ³ÿoÿ–ÿUÿ–ÿUÿ ÿKÿ ÿKÿ©ÿqÿ©ÿqÿÑÿ·ÿÑÿ·ÿ  9c9cd¹d¹……55®+®+™™u·u·EmEm##úÿéÿúÿéÿîÿßÿîÿßÿäÿåÿäÿåÿ  ,a,aU§U§„í„í¨¨¢¢ŠÿŠÿtÕtÕP‹P‹1A1A÷ÿ÷ÿäÿÍÿäÿÍÿØÿ³ÿØÿ³ÿÞÿÉÿÞÿÉÿãÿßÿãÿßÿ÷ÿõÿ÷ÿõÿ  !!    óÿóÿìÿÉÿìÿÉÿÛÿŸÿÛÿŸÿ½ÿuÿ½ÿuÿ¥ÿKÿ¥ÿKÿ’ÿAÿ’ÿAÿ”ÿGÿ”ÿGÿ§ÿmÿ§ÿmÿ·ÿ“ÿ·ÿ“ÿÅÿ™ÿÅÿ™ÿÑÿŸÿÑÿŸÿËÿ•ÿËÿ•ÿÆÿ‹ÿÆÿ‹ÿÂÿÿÂÿÿ¿ÿ—ÿ¿ÿ—ÿÝÿ½ÿÝÿ½ÿõÿóÿõÿóÿ99DDfÅfÅ€û€û“ñ“ñ€ç€ç^ª^ª@m@m&0&0óÿóÿáÿÆÿáÿÆÿØÿ¹ÿØÿ¹ÿáÿÌÿáÿÌÿøÿÿÿøÿÿÿ*R*RQ¥Q¥øø¢;¢;»N»N¼A¼A™™zÇzÇNzNzíÿðÿíÿðÿÙÿÃÿÙÿÃÿÙÿÆÿÙÿÆÿÙÿÉÿÙÿÉÿÙÿ¼ÿÙÿ¼ÿÙÿ¯ÿÙÿ¯ÿÉÿ¢ÿÉÿ¢ÿ¬ÿeÿ¬ÿeÿ•ÿ(ÿ•ÿ(ÿsÿëþsÿëþYÿÞþYÿÞþVÿÑþVÿÑþfÿäþfÿäþuÿÿuÿÿƒÿ*ÿƒÿ*ÿÿ=ÿÿ=ÿœÿ@ÿœÿ@ÿ‡ÿ3ÿ‡ÿ3ÿwÿöþwÿöþLÿ¹þLÿ¹þ+ÿlþ+ÿlþÿ/þÿ/þæþþæþþòþþòþþÿNþÿNþJÿ©þJÿ©þ|ÿ$ÿ|ÿ$ÿ¶ÿŸÿ¶ÿŸÿöÿúÿöÿúÿ%%&@&@++åÿÑÿåÿÑÿÈÿ¬ÿÈÿ¬ÿÁÿ—ÿÁÿ—ÿÜÿ²ÿÜÿ²ÿòÿýÿòÿýÿHHO“O“}î}î°I°IÖtÖtñŸñŸÊÊ å åððûû))/'/'/2/2*-*-!!ããæžæž¼Y¼Y––tßtßfÊfÊiÅiÅyàyà„û„ûŠŠœ!œ!˜˜‚ׂ×NN´ÿ{ÿ´ÿ{ÿeÿáþeÿáþÿGþÿGþÛþíýÛþíý¾þ¹ý¾þ¹ý»þ¸ý»þ¸ýÍþ×ýÍþ×ýðþþðþþ ÿeþ ÿeþJÿ´þJÿ´þnÿÿnÿÿ}ÿÿ}ÿÿ{ÿÿ{ÿÿkÿ×þkÿ×þ@ÿ þ@ÿ þÿYþÿYþÜþòýÜþòý¶þ›ý¶þ›ýœþtýœþtýŒþ]ýŒþ]ý”þfý”þfý°þ¯ý°þ¯ýÜþøýÜþøýÿRþÿRþEÿ¼þEÿ¼þÿ&ÿÿ&ÿ¼ÿÿ¼ÿÿáÿÊÿáÿÊÿÿÿôÿÿÿôÿþÿþÿ  ÷ÿüÿ÷ÿüÿïÿöÿïÿöÿ::;t;tc®c®èè—"—"¦L¦L¿f¿fÐpÐpÚzÚzÞ„Þ„ÝŽÝŽè¨è¨í²í²í¬í¬é¦é¦â â ØzØz¬4¬4…î…îc¨c¨E‚E‚;l;l1f1f(`(` J J44  öÿâÿöÿâÿäÿ¼ÿäÿ¼ÿÕÿ¶ÿÕÿ¶ÿÙÿ°ÿÙÿ°ÿìÿÚÿìÿÚÿûÿûÿ÷ÿòÿ÷ÿòÿÒÿ¬ÿÒÿ¬ÿ¤ÿFÿ¤ÿFÿ`ÿÐþ`ÿÐþÿZþÿZþæþþæþþÏþîýÏþîýáþþýáþþýÿcþÿcþQÿÈþQÿÈþ¥ÿ]ÿ¥ÿ]ÿêÿòÿêÿòÿ"?"?NŒNŒP‘P‘PP.M.M  ÜÿÅÿÜÿÅÿÎÿ¡ÿÎÿ¡ÿÓÿ­ÿÓÿ­ÿ×ÿ¹ÿ×ÿ¹ÿêÿåÿêÿåÿ11>}>}[¹[¹õõ!!¡¡¡¡ŽõŽõ|Ñ|Ñk­k­[™[™L…L…>q>qAmAmByByA…A…?q?q<]<](9(9ìÿñÿìÿñÿÖÿÍÿÖÿÍÿÔÿ¹ÿÔÿ¹ÿÓÿµÿÓÿµÿÒÿ±ÿÒÿ±ÿÑÿ½ÿÑÿ½ÿàÿÉÿàÿÉÿÜÿµÿÜÿµÿÉÿ‘ÿÉÿ‘ÿºÿmÿºÿmÿ®ÿIÿ®ÿIÿ•ÿ5ÿ•ÿ5ÿ‚ÿ!ÿ‚ÿ!ÿtÿ ÿtÿ ÿjÿùþjÿùþdÿõþdÿõþaÿñþaÿñþqÿýþqÿýþ€ÿÿ€ÿÿŽÿ5ÿŽÿ5ÿ›ÿaÿ›ÿaÿ·ÿÿ·ÿÿÎÿ©ÿÎÿ©ÿáÿÅÿáÿÅÿàÿÁÿàÿÁÿßÿ½ÿßÿ½ÿÎÿ©ÿÎÿ©ÿÀÿ…ÿÀÿ…ÿµÿaÿµÿaÿ­ÿMÿ­ÿMÿ—ÿ9ÿ—ÿ9ÿ–ÿEÿ–ÿEÿ¦ÿqÿ¦ÿqÿÔÿ½ÿÔÿ½ÿ 5u5ugágᎎ«9«9¯5¯5ŸŸÝÝS‰S‰-5-5     EE>q>qW­W­yéyé’’””“ý“ýééyÕyÕeÁeÁS­S­S™S™Q¥Q¥^±^±WWOyOy7U7U!!óÿíÿóÿíÿÚÿ¹ÿÚÿ¹ÿÆÿ•ÿÆÿ•ÿ¶ÿÿ¶ÿÿºÿÿºÿÿ¾ÿ™ÿ¾ÿ™ÿÂÿ¥ÿÂÿ¥ÿÖÿÁÿÖÿÁÿæÿÝÿæÿÝÿóÿùÿóÿùÿýÿýÿ ÿÿ ÿÿ õÿõÿõÿõÿíÿáÿíÿáÿæÿÍÿæÿÍÿàÿ¹ÿàÿ¹ÿÛÿ¥ÿÛÿ¥ÿÇÿ‘ÿÇÿ‘ÿ·ÿmÿ·ÿmÿ«ÿIÿ«ÿIÿ¢ÿ5ÿ¢ÿ5ÿœÿ!ÿœÿ!ÿ˜ÿMÿ˜ÿMÿ¦ÿyÿ¦ÿyÿÒÿ¥ÿÒÿ¥ÿöÿñÿöÿñÿ==*i*i<u<u9a9a%M%M  éÿÅÿéÿÅÿÃÿÿÃÿÿ¥ÿ]ÿ¥ÿ]ÿžÿIÿžÿIÿ©ÿeÿ©ÿeÿ³ÿÿ³ÿÿÜÿ½ÿÜÿ½ÿýÿùÿýÿùÿ55+a+a:}:}EyEy<u<u#A#A  üÿÙÿüÿÙÿÝÿµÿÝÿµÿÔÿ¡ÿÔÿ¡ÿÍÿ­ÿÍÿ­ÿØÿ¹ÿØÿ¹ÿáÿÕÿáÿÕÿøÿñÿøÿñÿ íÿíÿðÿÉÿðÿÉÿáÿµÿáÿµÿÕÿ±ÿÕÿ±ÿËÿ­ÿËÿ­ÿÓÿ¹ÿÓÿ¹ÿÚÿÅÿÚÿÅÿàÿÑÿàÿÑÿåÿÝÿåÿÝÿéÿéÿéÿéÿìÿõÿìÿõÿîÿñÿîÿñÿïÿíÿïÿíÿ  !!  ÿÿõÿÿÿõÿùÿñÿùÿñÿôÿýÿôÿýÿ  !!==IIEEAA==II(U(U2Q2Q9M9M=I=I?U?U?a?a>}>}<‰<‰9u9u5a5a0M0M+I+I&E&E!1!1 úÿùÿúÿùÿëÿåÿëÿåÿïÿñÿïÿñÿòÿýÿòÿýÿôÿ ôÿ õÿõÿõÿñÿõÿñÿõÿÝÿõÿÝÿõÿéÿõÿéÿõÿõÿ)) 5 5$A$A--  ÷ÿáÿ÷ÿáÿßÿ­ÿßÿ­ÿÌÿ™ÿÌÿ™ÿ½ÿ…ÿ½ÿ…ÿ±ÿÿ±ÿÿ¸ÿÿ¸ÿÿÎÿ©ÿÎÿ©ÿàÿÅÿàÿÅÿïÿñÿïÿñÿ - -!I!I2U2U/a/a+M+M'9'9ñÿñÿôÿÍÿôÿÍÿèÿÙÿèÿÙÿîÿåÿîÿåÿóÿáÿóÿáÿ÷ÿÝÿ÷ÿÝÿúÿÙÿúÿÙÿüÿåÿüÿåÿýÿñÿýÿñÿýÿíÿýÿíÿíÿÉÿíÿÉÿàÿ¥ÿàÿ¥ÿÕÿ‘ÿÕÿ‘ÿÌÿÿÌÿÿÅÿ‰ÿÅÿ‰ÿÀÿ…ÿÀÿ…ÿ¼ÿÿ¼ÿÿ¹ÿ}ÿ¹ÿ}ÿ·ÿ‰ÿ·ÿ‰ÿ¶ÿ•ÿ¶ÿ•ÿÆÿ¡ÿÆÿ¡ÿÃÿÿÃÿÿÁÿyÿÁÿyÿÀÿeÿÀÿeÿÀÿaÿÀÿaÿÁÿmÿÁÿmÿÂÿyÿÂÿyÿÃÿ…ÿÃÿ…ÿÄÿ‘ÿÄÿ‘ÿÅÿ­ÿÅÿ­ÿÖÿÉÿÖÿÉÿäÿÕÿäÿÕÿïÿáÿïÿáÿøÿÝÿøÿÝÿïÿÙÿïÿÙÿçÿÕÿçÿÕÿàÿÑÿàÿÑÿêÿÝÿêÿÝÿòÿéÿòÿéÿAA&]&]?y?yR•R•`±`±iÍiÍnÉnÉpÅpÅoÁoÁlÍlÍgÙgÙqåqåwáwázÝzÝzÙzÙxÕxÕtátánínígÙgÙ_µ_µW‘W‘OmOm7Y7Y"E"E Q Q-]-]6Y6Y<U<U/Q/Q#M#Mþÿåÿþÿåÿèÿ±ÿèÿ±ÿÆÿ}ÿÆÿ}ÿ«ÿIÿ«ÿIÿ†ÿÿ†ÿÿyÿÿyÿÿpÿýþpÿýþzÿ ÿzÿ ÿ„ÿ%ÿ„ÿ%ÿŽÿAÿŽÿAÿ§ÿ]ÿ§ÿ]ÿ¼ÿyÿ¼ÿyÿ¾ÿ…ÿ¾ÿ…ÿÀÿÿÀÿÿ²ÿmÿ²ÿmÿ§ÿYÿ§ÿYÿŸÿEÿŸÿEÿŠÿ1ÿŠÿ1ÿzÿÿzÿÿÿ ÿÿ ÿ…ÿÿ…ÿÿ‹ÿ!ÿ‹ÿ!ÿ¡ÿMÿ¡ÿMÿ´ÿyÿ´ÿyÿÄÿ•ÿÄÿ•ÿÑÿ±ÿÑÿ±ÿÜÿÍÿÜÿÍÿõÿùÿõÿùÿ % %AA%]%].i.i4u4uHHWWa©a©gµgµZ±Z±NNC‰C‰9u9u/a/a&M&M.I.I3U3U6a6a7}7}V™V™mµmµmÑmÑk½k½W©W©E…E…5a5a--þÿùÿþÿùÿéÿÕÿéÿÕÿèÿÑÿèÿÑÿçÿÍÿçÿÍÿæÿÙÿæÿÙÿåÿåÿåÿåÿäÿáÿäÿáÿãÿÍÿãÿÍÿÒÿ©ÿÒÿ©ÿÄÿ…ÿÄÿ…ÿ¹ÿÿ¹ÿÿÁÿÿÁÿÿÈÿ™ÿÈÿ™ÿÎÿ¥ÿÎÿ¥ÿÓÿ±ÿÓÿ±ÿ×ÿÍÿ×ÿÍÿêÿéÿêÿéÿéÿÕÿéÿÕÿèÿÁÿèÿÁÿ×ÿ­ÿ×ÿ­ÿÉÿ™ÿÉÿ™ÿ¾ÿuÿ¾ÿuÿ¶ÿaÿ¶ÿaÿ°ÿ]ÿ°ÿ]ÿ¬ÿyÿ¬ÿyÿÊÿ•ÿÊÿ•ÿãÿ±ÿãÿ±ÿ÷ÿÝÿ÷ÿÝÿ  %%AA"-"-  øÿýÿøÿýÿðÿùÿðÿùÿùÿõÿùÿõÿñÿñÿýÿýÿ  % %AA(M(M1Y1Y7e7e;q;q=m=m=i=i,U,UAA--))%%  þÿýÿþÿýÿôÿéÿôÿéÿüÿõÿüÿõÿ    ! !==99%% ýÿ ýÿøÿéÿøÿéÿçÿÕÿçÿÕÿÙÿÁÿÙÿÁÿÎÿ­ÿÎÿ­ÿÅÿ™ÿÅÿ™ÿÎÿ¥ÿÎÿ¥ÿÖÿ±ÿÖÿ±ÿÝÿ½ÿÝÿ½ÿãÿÙÿãÿÙÿøÿõÿøÿõÿ ! !== Y Y'e'e<q<q<m<m;Y;Y)E)E!! ýÿ ýÿÿÿÙÿÿÿÙÿåÿÅÿåÿÅÿÐÿ±ÿÐÿ±ÿßÿÍÿßÿÍÿëÿéÿëÿéÿõÿõÿ11=]=]V‰V‰X¥X¥X¡X¡FF6i6i(E(E  õÿÝÿõÿÝÿâÿ©ÿâÿ©ÿÓÿ¥ÿÓÿ¥ÿÇÿ¡ÿÇÿ¡ÿÞÿ½ÿÞÿ½ÿñÿÙÿñÿÙÿõÿõÿüÿüÿøÿýÿøÿýÿôÿùÿôÿùÿðÿåÿðÿåÿíÿÑÿíÿÑÿêÿ½ÿêÿ½ÿçÿ¹ÿçÿ¹ÿäÿµÿäÿµÿÒÿ±ÿÒÿ±ÿÄÿ­ÿÄÿ­ÿÉÿ©ÿÉÿ©ÿÍÿ¥ÿÍÿ¥ÿÑÿ‘ÿÑÿ‘ÿÄÿ}ÿÄÿ}ÿºÿiÿºÿiÿ²ÿeÿ²ÿeÿ¬ÿaÿ¬ÿaÿ¨ÿ]ÿ¨ÿ]ÿ¦ÿYÿ¦ÿYÿµÿeÿµÿeÿÂÿ‘ÿÂÿ‘ÿÍÿ½ÿÍÿ½ÿæÿéÿæÿéÿúÿõÿúÿõÿ      þÿþÿúÿúÿ  %%11==IIEEAA==99&U&U/q/qEEU©U©`Å`ÅgágákÝkÝlÙlÙkÅkÅX±X±GG8i8i*E*EAA==995511==IIUUAA--  óÿåÿóÿåÿæÿÁÿæÿÁÿÛÿ­ÿÛÿ­ÿÒÿ™ÿÒÿ™ÿËÿ•ÿËÿ•ÿÆÿ¡ÿÆÿ¡ÿÒÿ­ÿÒÿ­ÿÜÿ¹ÿÜÿ¹ÿäÿµÿäÿµÿÚÿ±ÿÚÿ±ÿÒÿ­ÿÒÿ­ÿÌÿ™ÿÌÿ™ÿÇÿ…ÿÇÿ…ÿÃÿqÿÃÿqÿÀÿmÿÀÿmÿ¾ÿiÿ¾ÿiÿ­ÿeÿ­ÿeÿ ÿaÿ ÿaÿ¦ÿmÿ¦ÿmÿ¼ÿyÿ¼ÿyÿÎÿ…ÿÎÿ…ÿÝÿ¡ÿÝÿ¡ÿÙÿ­ÿÙÿ­ÿÖÿ¹ÿÖÿ¹ÿÔÿµÿÔÿµÿÓÿÁÿÓÿÁÿâÿÍÿâÿÍÿîÿÙÿîÿÙÿøÿåÿøÿåÿðÿáÿðÿáÿéÿÝÿéÿÝÿãÿÙÿãÿÙÿîÿåÿîÿåÿ÷ÿñÿ÷ÿñÿþÿíÿþÿíÿéÿéÿõÿõÿ   - -99*E*E#A#A==99EE$Q$Q(M(M*I*I*E*E)Q)Q'M'M$I$I!E!EAA==))%%!!-- 9 9 5 5!!  ýÿýÿ  ))%%!!  ))55íÿíÿëÿÉÿëÿÉÿãÿÅÿãÿÅÿÜÿÁÿÜÿÁÿÖÿ½ÿÖÿ½ÿÑÿ¹ÿÑÿ¹ÿÍÿµÿÍÿµÿÚÿÁÿÚÿÁÿåÿÍÿåÿÍÿîÿéÿîÿéÿõÿõÿúÿúÿþÿ þÿ   ñÿñÿïÿÞÿïÿÞÿëÿØÿëÿØÿìÿàÿìÿàÿíÿàÿíÿàÿîÿàÿîÿàÿïÿðÿïÿðÿðÿðÿðÿðÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿDevice-Cdio-v2.0.0/data/cdda.cue000444001750001750 26013222226267 16034 0ustar00rockyrocky000000000000TITLE "Join us now we have the software" CATALOG 0000010271955 PERFORMER "Richard Stallman" FILE "BOING.BIN" BINARY TRACK 01 AUDIO FLAGS DCP INDEX 01 00:00:00 Device-Cdio-v2.0.0/data/cdtext-test.toc000444001750001750 173613222226267 17453 0ustar00rockyrocky000000000000CD_DA // global CD-TEXT data CD_TEXT { // Mapping from language number (0..7) used in 'LANGUAGE' statements // to language code. /// LANGUAGE_MAP { /// 0 : EN // 9 is the code for ENGLISH, /// // I don't know any other language code, yet /// } // Language number should always start with 0 LANGUAGE 0 { // Required fields - at least all CD-TEXT CDs I've seen so far have them. TITLE "CD Title" PERFORMER "Performer" DISC_ID "XY12345" UPC_EAN "" // usually empty // Further possible items, all of them are optional ARRANGER "" SONGWRITER "" MESSAGE "" GENRE "" // I'm not sure if this should be really ascii data } } TRACK AUDIO // track specific CD-TEXT data CD_TEXT { LANGUAGE 0 { // if an item is defined for one track it should be defined for all tracks TITLE "Track Title" PERFORMER "Performer" ISRC "US-XX1-98-01234" ARRANGER "" SONGWRITER "" MESSAGE "" } } SILENCE 1:0:0 Device-Cdio-v2.0.0/data/cdtext.cdt000444001750001750 330113222226267 16451 0ustar00rockyrocky000000000000€Joyful Nightð÷€ sSong of JoC€ yHumpty DumCù€ ptyMee Owww$r€wn¯United Cat O0, rchestraFelv÷ix and The PîurrsCatwalkj  BeautiesMi— a Kitten²Ã‚ Various Songz¸‚ writersFrie¹ ‚ drich Schillá‚erMother GoÆ ‚ oseMia Kitt`ÿ‚en™ûƒVarious Comp%àƒ osersLudwig⢃ van Beethov¡8ƒenunknownMÕåƒia Kitten*„Tom CatTom {#„CatTom Catâ„Mia Kittenlƒ…For all our X… fansFritz až …nd Louie onc¤Ð…e were punks¡…Pluck the gÐE… ooseT†1234567890˜‡ Feline cla#À‡! ssic music¾3"This is not *È# to be shown ÜO$by CD playerÓß%s•‹Ž&123456789012䚎' 3XYBLG11012¶Ž( 34XYBLG1100 àŽ) 005XYBLG110CìŽ*0006ë+bB,-1;!- ù‰€Freudvolle Nÿ€ächteLied d½©€er FreudeRul{€bbeldiekatz«Ç€Mie auu¼0Vereinigtes zKatzenorchesBterFelix unuÍd Die Schnuráà rerKatzengaêœ ng SchönheitâF enMia KätzcDò henOÆ‚ Verschiedenerr‚ Liedschreib ‚erFriedrichjÒ‚ SchillerMu Þ‚tter GansMip ‚a Kätzchen—6ƒVerschiedeneü­ƒ Komponisten4QƒLudwig van óîƒBeethovenunu—ƒbekanntMia –8ƒKätzchen®¶„Tom CatTom öú„CatTom Catôù„Mia Kätzchen•A„\…Für alle unsôá…ere FansFri …tz und LouieÝ•…  waren einmaîå…!l PunksRupfºÃ…"t die GansÕŒ†#1234567890EÚ‡$Katzenhaft¯‡%e Klassik+;&Dies solltenA' CD-Spieler É;(nicht anzeig™N)en.³Ž*123456789012äàŽ+3XYBLG11012¶õŽ,34XYBLG1100àñŽ-005XYBLG110¨ýŽ.0006/Q0-1ý¬1 ?Device-Cdio-v2.0.0/data/isofs-m1.cue000444001750001750 11213222226267 16573 0ustar00rockyrocky000000000000FILE "ISOFS-M1.BIN" BINARY TRACK 01 MODE1/2352 INDEX 01 00:00:00 Device-Cdio-v2.0.0/data/cdda.toc000444001750001750 46213222226267 16051 0ustar00rockyrocky000000000000// $Id$ // Language number should always start with 0 LANGUAGE 0 { // Required fields - at least all CD-TEXT CDs I've seen so far have them. TITLE "Join us now we have the software" PERFORMER "Richard Stallman" } CATALOG "0000010271955" CD_DA TRACK AUDIO COPY FILE "cdda.bin" 00:00:00 00:00:00 Device-Cdio-v2.0.0/data/copying.iso000444001750001750 40000013222226267 16703 0ustar00rockyrocky000000000000CD001LINUX CDROM @@ "E ì MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING 2006010516501900ì2006010516501900ì00000000000000002006010516501900ì ÿCD001MKI Thu Jan 5 16:50:19 2006 mkisofs 1.15a40 -o copying-new.iso COPYING"j2ì"j2ì,RFFRj.ì COPYING.;1 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. Device-Cdio-v2.0.0/swig000755001750001750 013222226267 14370 5ustar00rockyrocky000000000000Device-Cdio-v2.0.0/swig/read.swg000444001750001750 1155313222226267 16207 0ustar00rockyrocky000000000000/* -*- c -*- Copyright (C) 2006, 2008, 2011 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* See for more extensive documentation. */ %constant long int READ_MODE_AUDIO = CDIO_READ_MODE_AUDIO; %constant long int READ_MODE_M1F1 = CDIO_READ_MODE_M1F1; %constant long int READ_MODE_M1F2 = CDIO_READ_MODE_M1F2; %constant long int READ_MODE_M2F1 = CDIO_READ_MODE_M2F1; %constant long int READ_MODE_M2F2 = CDIO_READ_MODE_M2F2; typedef int cdio_read_mode_t; %inline %{ typedef long int my_ssize_t; %} %apply my_ssize_t *OUTPUT { my_ssize_t *pi_size }; %rename cdio_lseek lseek; off_t cdio_lseek(const CdIo_t *p_cdio, off_t offset, int whence=SEEK_SET); %newobject read_cd; // free malloc'd return value char *read_cd(const CdIo_t *p_cdio, my_ssize_t i_size, /*out*/ my_ssize_t *pi_size); %inline %{ char * read_cd(const CdIo_t *p_cdio, my_ssize_t i_size, /*out*/ my_ssize_t *pi_size) { char *p_buf = calloc(1, i_size); *pi_size = cdio_read(p_cdio, p_buf, i_size); return p_buf; } %} typedef char * buf_t; %typemap(out) buf_t { /* $1 is of type buf_t */ ST(argvi) = sv_newmortal(); if (result) { /* I don't yet know how to pick up arg4 another way. THIS MEANS ARG4 MUST ALWAYS BE THE SIZE. */ sv_setpvn((SV*)ST(argvi++), (char *) result, arg4); /* Don't leak memory. return value was malloc'd by libcdio. */ free(result); } else { sv_setsv((SV*)ST(argvi++), &PL_sv_undef); } } %apply long int *OUTPUT { long int *drc }; /* NOTE: arg 4 *must* be the size of the buf for the buf_t typemap. */ buf_t read_sectors(const CdIo_t *p_cdio, lsn_t i_lsn, cdio_read_mode_t read_mode, my_ssize_t i_size, /*out*/ my_ssize_t *pi_size, /*out*/ long int *drc); %inline %{ typedef char *buf_t; /* NOTE: arg 4 *must* be the size of the buf for the buf_t typemap. */ buf_t read_sectors(const CdIo_t *p_cdio, lsn_t i_lsn, cdio_read_mode_t read_mode, my_ssize_t i_size, /*out*/ my_ssize_t *pi_size, /*out*/ long int *drc) { char *p_buf; uint32_t i_blocks; uint16_t i_blocksize; switch (read_mode) { case CDIO_READ_MODE_AUDIO: i_blocksize = CDIO_CD_FRAMESIZE_RAW; break; case CDIO_READ_MODE_M1F1: i_blocksize = M2RAW_SECTOR_SIZE; break; case CDIO_READ_MODE_M1F2: i_blocksize = M2RAW_SECTOR_SIZE; break; case CDIO_READ_MODE_M2F1: i_blocksize = CDIO_CD_FRAMESIZE; break; case CDIO_READ_MODE_M2F2: i_blocksize = M2F2_SECTOR_SIZE; break; default: pi_size = NULL; *drc = DRIVER_OP_BAD_PARAMETER; return NULL; } p_buf = calloc(1, i_size); i_blocks = i_size / i_blocksize; *drc = cdio_read_sectors(p_cdio, p_buf, i_lsn, read_mode, i_blocks); if (*drc < 0) { pi_size = NULL; return NULL; } *pi_size = i_size; return p_buf; } %} /* NOTE: arg 4 *must* be the size of the buf for the buf_t typemap. */ buf_t read_data_bytes(const CdIo_t *p_cdio, lsn_t i_lsn, int16_t i_blocksize, my_ssize_t i_size, /*out*/ my_ssize_t *pi_size, long int *drc); %inline %{ /* NOTE: arg 4 *must* be the size of the buf for the buf_t typemap. */ buf_t read_data_bytes(const CdIo_t *p_cdio, lsn_t i_lsn, int16_t i_blocksize, my_ssize_t i_size, /*out*/ my_ssize_t *pi_size, /*out*/ long int *drc) { uint32_t i_blocks = i_size / i_blocksize; char *p_buf; switch (i_blocksize) { case CDIO_CD_FRAMESIZE: case CDIO_CD_FRAMESIZE_RAW: case M2F2_SECTOR_SIZE: case M2RAW_SECTOR_SIZE: break; default: /* Don't know about these block sizes */ pi_size = NULL; *drc = DRIVER_OP_BAD_PARAMETER; return NULL; } p_buf = calloc(1, i_size); #if DEBUGGING printf("p_cdio: %x, i_size: %d, lsn: %d, blocksize %d, blocks %d\n", p_cdio, i_size, i_lsn, i_blocksize, i_blocks); #endif *drc = cdio_read_data_sectors (p_cdio, p_buf, i_lsn, i_blocksize, i_blocks); #if DEBUGGING printf("drc: %d\n", drc); #endif if (*drc < 0) { pi_size = NULL; return NULL; } *pi_size = i_size; return p_buf; } %} iso9660_pvd_t *cdio_read_pvd ( const CdIo_t *p_cdio ); %inline %{ iso9660_pvd_t *cdio_read_pvd ( const CdIo_t *p_cdio ) { static iso9660_pvd_t pvd; int rc = cdio_read_data_sectors( p_cdio, &pvd, ISO_PVD_SECTOR, ISO_BLOCKSIZE, 1); if (rc < 0) return NULL; return &pvd; } %} Device-Cdio-v2.0.0/swig/device.swg000444001750001750 3265513222226267 16541 0ustar00rockyrocky000000000000/* -*- c -*- Copyright (C) 2006, 2008, 2011, 2012 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* See for more extensive documentation. */ %include "device_const.swg" /* Set up to allow functions to return device lists of type "char *". We'll use a typedef so we can make sure to isolate this. I *don't think we need to in this program, but it I think it makes *thing clearer. */ %inline %{ typedef char ** DeviceList_t; %} %typemap(out) DeviceList_t { /* char ** to array SVp*/ /* AV *myav; SV **svs; int i = 0,len = 0; */ /* Figure out how many elements we have */ /* while ($1[len]) len++; svs = (SV **) malloc(len*sizeof(SV *)); for (i = 0; i < len ; i++) { svs[i] = sv_newmortal(); sv_setpv((SV*)svs[i],$1[i]); //svs[i] = sv_2mortal((SV*)newSVpv($1[i], 0)); }; myav = av_make(len,svs); free(svs); $result = newRV_noinc((SV*)myav); sv_2mortal($result); */ // or: shorter version AV *myav; int i =0; myav = newAV(); char **p = $1; while (*p) { av_store(myav, i, (SV*)newSVpv(*p, 0)); i++;p++; } $result = newRV_noinc((SV*)myav); sv_2mortal($result); argvi++; cdio_free_device_list($1); } /* close_tray(drive=undef, driver_id=DRIVER_UNKNOWN) -> [status, driver_id] close media tray in CD drive if there is a routine to do so. */ %apply driver_id_t *OUTPUT { driver_id_t *p_out_driver_id }; driver_return_code_t close_tray(const char *psz_drive, driver_id_t p_driver_id, driver_id_t *p_out_driver_id); %inline %{ driver_return_code_t close_tray(const char *psz_drive, driver_id_t p_driver_id, driver_id_t *p_out_driver_id) { *p_out_driver_id = p_driver_id; return cdio_close_tray(psz_drive, p_out_driver_id); } %} %rename cdio_destroy close; /* destroy(p_cdio) ree resources associated with p_cdio. Call this when done using sing CD reading/control operations for the current device. */ void cdio_destroy(CdIo_t *p_cdio); /* cdio_driver_errmsg first appears in 0.77 code */ %rename cdio_driver_errmsg driver_errmsg; /*! @param drc the return code you want interpreted. @return the string information about drc */ const char *cdio_driver_errmsg(driver_return_code_t drc); /* eject_media(cdio)->return_code Eject media in CD drive if there is a routine to do so. */ driver_return_code_t eject_media (CdIo_t *p_cdio); %inline %{ driver_return_code_t eject_media (CdIo_t *p_cdio) { /* libcdio routines uses a Cdio_t **p_cdio, so we have to pass in something it can clobber. */ CdIo_t **pp_cdio = &p_cdio; return cdio_eject_media (pp_cdio); } %} %rename cdio_eject_media_drive eject_media_drive; /* eject_media_drive(drive=None)->return_code Eject media in CD drive if there is a routine to do so. psz_drive: the name of the device to be acted upon. The operation status is returned. */ driver_return_code_t cdio_eject_media_drive (const char *psz_drive=NULL); %rename cdio_get_arg get_arg; /* get_arg(p_cdio, key)->string Get the value associatied with key. */ const char *cdio_get_arg (const CdIo_t *p_cdio, const char key[]); %newobject cdio_get_default_device; // free malloc'd return value %rename cdio_get_default_device get_device; /* get_device(cdio)->str Get the CD device associated with cdio. If cdio is NULL (we haven't initialized a specific device driver), then find a suitable one and return the default device for that. In some situations of drivers or OS's we can't find a CD device if there is no media in it and it is possible for this routine to return None even though there may be a hardware CD-ROM. */ char *cdio_get_default_device (const CdIo_t *p_cdio=NULL); %newobject get_default_device_driver; // free malloc'd return value /* get_default_device_driver(driver_id=None)->[device, driver] Return a string containing the default CD device if none is specified. if p_driver_id is DRIVER_UNKNOWN or DRIVER_DEVICE then find a suitable one set the default device for that. undef is returned as the device if we couldn't get a default device. */ char *get_default_device_driver (driver_id_t p_driver_id, driver_id_t *p_out_driver_id); %inline %{ char * get_default_device_driver(driver_id_t driver_id, driver_id_t *p_out_driver_id) { *p_out_driver_id = driver_id; return cdio_get_default_device_driver(p_out_driver_id); } %} //%rename cdio_get_devices get_devices; /*! Return an array of device names. If you want a specific devices for a driver, give that device. If you want hardware devices, give DRIVER_DEVICE and if you want all possible devices, image drivers and hardware drivers give DRIVER_UNKNOWN. NULL is returned if we couldn't return a list of devices. In some situations of drivers or OS's we can't find a CD device if there is no media in it and it is possible for this routine to return NULL even though there may be a hardware CD-ROM. */ DeviceList_t cdio_get_devices (driver_id_t driver_id); DeviceList_t get_devices(driver_id_t driver_id); %inline %{ DeviceList_t get_devices(driver_id_t driver_id) { return cdio_get_devices(driver_id); } %} /* Like cdio_get_devices, but we may change the p_driver_id if we were given DRIVER_DEVICE or DRIVER_UNKNOWN. This is because often one wants to get a drive name and then *open* it afterwards. Giving the driver back facilitates this, and speeds things up for libcdio as well. */ DeviceList_t get_devices_ret (driver_id_t driver_id, driver_id_t *p_out_driver_id); %inline %{ DeviceList_t get_devices_ret (driver_id_t driver_id, driver_id_t *p_out_driver_id) { *p_out_driver_id = driver_id; return cdio_get_devices_ret (p_out_driver_id); } %} /* Get an array of device names in search_devices that have at least the capabilities listed by the capabities parameter. If "b_any" is set false then every capability listed in the extended portion of capabilities (i.e. not the basic filesystem) must be satisfied. If "any" is set true, then if any of the capabilities matches, we call that a success. To find a CD-drive of any type, use the mask CDIO_FS_MATCH_ALL. The array of device names is returned or NULL if we couldn't get a default device. It is also possible to return a non NULL but after dereferencing the the value is NULL. This also means nothing was found. */ DeviceList_t get_devices_with_cap (unsigned int capabilities, bool b_any); %inline %{ DeviceList_t get_devices_with_cap (unsigned int capabilities, bool b_any) { return cdio_get_devices_with_cap (NULL, (cdio_fs_anal_t) capabilities, b_any); } %} %apply driver_id_t *OUTPUT { driver_id_t *p_out_driver_id }; /* Like cdio_get_devices_with_cap but we return the driver we found as well. This is because often one wants to search for kind of drive and then *open* it afterwards. Giving the driver back facilitates this, and speeds things up for libcdio as well. */ DeviceList_t get_devices_with_cap_ret (unsigned int capabilities, bool b_any, driver_id_t *p_out_driver_id); %inline %{ DeviceList_t get_devices_with_cap_ret (unsigned int capabilities, bool b_any, driver_id_t *p_out_driver_id) { return cdio_get_devices_with_cap_ret (NULL, (cdio_fs_anal_t) capabilities, b_any, p_out_driver_id); } %} %rename cdio_get_drive_cap get_drive_cap; %feature("autodoc", "get_drive_cap()->(read_cap, write_cap, misc_cap) Get drive capabilities of device. In some situations of drivers or OS's we can't find a CD device if there is no media in it. In this situation capabilities will show up as empty even though there is a hardware CD-ROM."); %apply uint32_t *OUTPUT { uint32_t *p_read_cap, uint32_t *p_write_cap, uint32_t *p_misc_cap }; void cdio_get_drive_cap (const CdIo_t *p_cdio, uint32_t *p_read_cap, uint32_t *p_write_cap, uint32_t *p_misc_cap); %rename cdio_get_drive_cap_dev get_drive_cap; %feature("autodoc", "get_drive_cap_dev()->(read_cap, write_cap, misc_cap) Get drive capabilities of device. In some situations of drivers or OS's we can't find a CD device if there is no media in it. In this situation capabilities will show up as empty even though there is a hardware CD-ROM."); void cdio_get_drive_cap_dev(const char *device=NULL, uint32_t *p_read_cap, uint32_t *p_write_cap, uint32_t *p_misc_cap); %rename cdio_get_driver_name get_driver_name; %feature("autodoc", "get_driver_name(cdio)-> string return a string containing the name of the driver in use. "); const char *cdio_get_driver_name (const CdIo_t *p_cdio); %rename cdio_get_driver_id get_driver_id; %feature("autodoc", "get_driver_id(cdio)-> int Return the driver id of the driver in use. if cdio has not been initialized or is None, return pycdio.DRIVER_UNKNOWN."); driver_id_t cdio_get_driver_id (const CdIo_t *p_cdio); %rename cdio_get_last_session get_last_session; %apply int32_t *OUTPUT { lsn_t *i_last_session }; driver_return_code_t cdio_get_last_session (CdIo_t *p_cdio, lsn_t *i_last_session); %feature("autodoc", "have_driver(driver_id) -> int Return 1 if we have driver driver_id, 0 if not."); %inline %{ int have_driver (unsigned int driver_id) { if (cdio_have_driver(driver_id)) return 1; return 0; } %} %feature("autodoc", "have_ATAPI(CdIo_t *p_cdio)->bool return True if CD-ROM understand ATAPI commands."); %inline %{ /*! True if CD-ROM understand ATAPI commands. */ bool have_ATAPI (CdIo_t *p_cdio) { return cdio_have_atapi(p_cdio) == yep; } %} %newobject cdio_is_binfile; // free malloc'd return value %rename cdio_is_binfile is_binfile; char *cdio_is_binfile(const char *bin_name); %newobject cdio_is_cuefile; // free malloc'd return value %rename cdio_is_cuefile is_cuefile; char *cdio_is_cuefile(const char *cue_name); %rename cdio_is_device is_device; bool cdio_is_device(const char *psz_source, driver_id_t driver_id=DRIVER_UNKNOWN); %rename cdio_is_nrg is_nrg; bool cdio_is_nrg(const char *nrg_name); %rename cdio_is_tocfile is_tocfile; %feature("autodoc", "is_tocfile(tocfile_name)->bool Determine if tocfile_name is a cdrdao CD disc image"); bool cdio_is_tocfile(const char *tocfile_name); %rename cdio_get_media_changed get_media_changed; %feature("autodoc", "get_media_changed(cdio) -> int Find out if media has changed since the last call. Return 1 if media has changed since last call, 0 if not. Error return codes are the same as driver_return_code_t"); int cdio_get_media_changed(CdIo_t *p_cdio); /* Set up to allow returning hardware info. We'll use a typedef so we can make sure to isolate this. */ %inline %{ typedef char ** HWInfo_t; %} %typemap(out) HWInfo_t { /* char ** to array SVp*/ AV *myav; SV **svs; int i = 0,len = 0; /* no test if(!$1) { $result = newSV(0); } */ /* Figure out how many elements we have */ while ($1[len]) len++; svs = (SV **) malloc(len*sizeof(SV *)); for (i = 0; i < len ; i++) { svs[i] = sv_newmortal(); sv_setpv((SV*)svs[i],$1[i]); }; myav = av_make(len,svs); free(svs); $result = newRV_noinc((SV*)myav); sv_2mortal($result); argvi++; } /* get_hwinfo(p_cdio)->[vendor, model, release] Get the CD-ROM hardware info via a SCSI MMC INQUIRY command. An exception is raised if we had an error. */ %apply int *OUTPUT { int *drc }; const HWInfo_t get_hwinfo ( const CdIo_t *p_cdio, int *drc); %inline %{ static cdio_hwinfo_t hw_info; const HWInfo_t get_hwinfo ( const CdIo_t *p_cdio, int *drc) { static const char *hwinfo[4] = { hw_info.psz_vendor, hw_info.psz_model, hw_info.psz_revision, NULL }; bool b_got_hwinfo = cdio_get_hwinfo(p_cdio, &hw_info); *drc = b_got_hwinfo; return (const HWInfo_t) hwinfo; } %} #include %inline %{ extern int mmc_get_tray_status(const CdIo_t *p_cdio); %} %rename mmc_get_tray_status get_tray_status; %rename cdio_set_blocksize set_blocksize; %feature("autodoc", "set_blocksize(cdio, blocksize)->return_status Set the blocksize for subsequent reads."); driver_return_code_t cdio_set_blocksize ( const CdIo_t *p_cdio, int i_blocksize ); %rename cdio_set_speed set_speed; %feature("autodoc", "cdio_set_speed(cdio, speed)->return_status Set the drive speed."); driver_return_code_t cdio_set_speed ( const CdIo_t *p_cdio, int i_speed ); /**** Using the name open() conflicts with some C routine. So we use open_cd() instead. ***/ %rename cdio_open_am open_cd; %feature("autodoc", "open_cd(source=NULL, driver_id=None, access_mode=None) Sets up to read from place specified by source, driver_id and access mode. This should be called before using any other routine except those that act on a CD-ROM drive by name. If None is given as the source, we'll use the default driver device. If None is given as the driver_id, we'll find a suitable device driver. Return the a pointer than can be used in subsequent operations or None on error or no device."); CdIo_t *cdio_open_am(const char *psz_source=NULL, driver_id_t driver_id=DRIVER_UNKNOWN, const char *psz_access_mode=NULL); Device-Cdio-v2.0.0/swig/device_const.swg000444001750001750 1563713222226267 17750 0ustar00rockyrocky000000000000/* -*- c -*- Copyright (C) 2006, 2008, 2011-2012, 2017 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* See for more extensive documentation. */ /**** ALL OF THESE ARE CONSTANTS *** */ %immutable; /* Drive types returned by cdio_get_drive_cap() */ %constant long int DRIVE_CAP_ERROR = CDIO_DRIVE_CAP_ERROR; %constant long int DRIVE_CAP_UNKNOWN = CDIO_DRIVE_CAP_UNKNOWN; %constant long int DRIVE_CAP_MISC_CLOSE_TRAY = CDIO_DRIVE_CAP_MISC_CLOSE_TRAY; %constant long int DRIVE_CAP_MISC_EJECT = CDIO_DRIVE_CAP_MISC_EJECT; %constant long int DRIVE_CAP_MISC_LOCK = CDIO_DRIVE_CAP_MISC_LOCK ; %constant long int DRIVE_CAP_MISC_SELECT_SPEED = CDIO_DRIVE_CAP_MISC_SELECT_SPEED; %constant long int DRIVE_CAP_MISC_SELECT_DISC = CDIO_DRIVE_CAP_MISC_SELECT_DISC; %constant long int DRIVE_CAP_MISC_MULTI_SESSION = CDIO_DRIVE_CAP_MISC_MULTI_SESSION; %constant long int DRIVE_CAP_MISC_MEDIA_CHANGED = CDIO_DRIVE_CAP_MISC_MEDIA_CHANGED; %constant long int DRIVE_CAP_MISC_RESET = CDIO_DRIVE_CAP_MISC_RESET; %constant long int DRIVE_CAP_MISC_FILE = CDIO_DRIVE_CAP_MISC_FILE; /* Reading masks.. */ %constant long int DRIVE_CAP_READ_AUDIO = CDIO_DRIVE_CAP_READ_AUDIO; %constant long int DRIVE_CAP_READ_CD_DA = CDIO_DRIVE_CAP_READ_CD_DA; %constant long int DRIVE_CAP_READ_CD_G = CDIO_DRIVE_CAP_READ_CD_G; %constant long int DRIVE_CAP_READ_CD_R = CDIO_DRIVE_CAP_READ_CD_R; %constant long int DRIVE_CAP_READ_CD_RW = CDIO_DRIVE_CAP_READ_CD_RW; %constant long int DRIVE_CAP_READ_DVD_R = CDIO_DRIVE_CAP_READ_DVD_R; %constant long int DRIVE_CAP_READ_DVD_PR = CDIO_DRIVE_CAP_READ_DVD_PR; %constant long int DRIVE_CAP_READ_DVD_RAM = CDIO_DRIVE_CAP_READ_DVD_RAM; %constant long int DRIVE_CAP_READ_DVD_ROM = CDIO_DRIVE_CAP_READ_DVD_ROM; %constant long int DRIVE_CAP_READ_DVD_RW = CDIO_DRIVE_CAP_READ_DVD_RW; %constant long int DRIVE_CAP_READ_DVD_RPW = CDIO_DRIVE_CAP_READ_DVD_RPW; %constant long int DRIVE_CAP_READ_C2_ERRS = CDIO_DRIVE_CAP_READ_C2_ERRS; %constant long int DRIVE_CAP_READ_MODE2_FORM1 = CDIO_DRIVE_CAP_READ_MODE2_FORM1; %constant long int DRIVE_CAP_READ_MODE2_FORM2 = CDIO_DRIVE_CAP_READ_MODE2_FORM2; %constant long int DRIVE_CAP_READ_MCN = CDIO_DRIVE_CAP_READ_MCN; %constant long int DRIVE_CAP_READ_ISRC = CDIO_DRIVE_CAP_READ_ISRC; /* Writing masks.. */ %constant long int DRIVE_CAP_WRITE_CD_R = CDIO_DRIVE_CAP_WRITE_CD_R; %constant long int DRIVE_CAP_WRITE_CD_RW = CDIO_DRIVE_CAP_WRITE_CD_RW; %constant long int DRIVE_CAP_WRITE_DVD_R = CDIO_DRIVE_CAP_WRITE_DVD_R; %constant long int DRIVE_CAP_WRITE_DVD_PR = CDIO_DRIVE_CAP_WRITE_DVD_PR; %constant long int DRIVE_CAP_WRITE_DVD_RAM = CDIO_DRIVE_CAP_WRITE_DVD_RAM; %constant long int DRIVE_CAP_WRITE_DVD_RW = CDIO_DRIVE_CAP_WRITE_DVD_RW ; %constant long int DRIVE_CAP_WRITE_DVD_RPW = CDIO_DRIVE_CAP_WRITE_DVD_RPW; %constant long int DRIVE_CAP_WRITE_MT_RAINIER = CDIO_DRIVE_CAP_WRITE_MT_RAINIER; %constant long int DRIVE_CAP_WRITE_BURN_PROOF = CDIO_DRIVE_CAP_WRITE_BURN_PROOF; /*** Masks derived from above... ***/ /* Has some sort of CD writer ability. */ %constant long int DRIVE_CAP_WRITE_CD = CDIO_DRIVE_CAP_WRITE_CD; /* Has some sort of DVD writer ability */ %constant long int DRIVE_CAP_WRITE_DVD = CDIO_DRIVE_CAP_WRITE_DVD; %constant long int DRIVE_CAP_WRITE = CDIO_DRIVE_CAP_WRITE; /*! Size of fields returned by an INQUIRY command */ %constant long int MMC_HW_VENDOR_LEN = CDIO_MMC_HW_VENDOR_LEN; %constant long int MMC_HW_MODEL_LEN = CDIO_MMC_HW_MODEL_LEN; %constant long int MMC_HW_REVISION_LEN = CDIO_MMC_HW_REVISION_LEN; /**! Flags specifying the category of device to open or is opened. */ %constant long int SRC_IS_DISK_IMAGE_MASK = CDIO_SRC_IS_DISK_IMAGE_MASK; %constant long int SRC_IS_DEVICE_MASK = CDIO_SRC_IS_DEVICE_MASK; %constant long int SRC_IS_SCSI_MASK = CDIO_SRC_IS_SCSI_MASK; %constant long int SRC_IS_NATIVE_MASK = CDIO_SRC_IS_NATIVE_MASK; /* driver_id_t enums. */ %constant long int DRIVER_UNKNOWN = DRIVER_UNKNOWN; %constant long int DRIVER_AIX = DRIVER_AIX; %constant long int DRIVER_FREEBSD = DRIVER_FREEBSD; %constant long int DRIVER_LINUX = DRIVER_LINUX; %constant long int DRIVER_SOLARIS = DRIVER_SOLARIS; %constant long int DRIVER_WIN32 = DRIVER_WIN32; %constant long int DRIVER_CDRDAO = DRIVER_CDRDAO; %constant long int DRIVER_BINCUE = DRIVER_BINCUE; %constant long int DRIVER_NRG = DRIVER_NRG; %constant long int DRIVER_DEVICE = DRIVER_DEVICE; %constant long int DRIVER_OP_SUCCESS = DRIVER_OP_SUCCESS; %constant long int DRIVER_OP_ERROR = DRIVER_OP_ERROR; %constant long int DRIVER_OP_UNSUPPORTED = DRIVER_OP_UNSUPPORTED; %constant long int DRIVER_OP_UNINIT = DRIVER_OP_UNINIT; %constant long int DRIVER_OP_NOT_PERMITTED = DRIVER_OP_NOT_PERMITTED; %constant long int DRIVER_OP_BAD_PARAMETER = DRIVER_OP_BAD_PARAMETER; %constant long int DRIVER_OP_BAD_POINTER = DRIVER_OP_BAD_POINTER; %constant long int DRIVER_OP_NO_DRIVER = DRIVER_OP_NO_DRIVER; %constant unsigned int FS_AUDIO = CDIO_FS_AUDIO; %constant unsigned int FS_HIGH_SIERRA = CDIO_FS_HIGH_SIERRA; %constant unsigned int FS_ISO_9660 = CDIO_FS_ISO_9660; %constant unsigned int FS_INTERACTIVE = CDIO_FS_INTERACTIVE; %constant unsigned int FS_HFS = CDIO_FS_HFS; %constant unsigned int FS_UFS = CDIO_FS_UFS; %constant unsigned int FS_EXT2 = CDIO_FS_EXT2; %constant unsigned int FS_ISO_HFS = CDIO_FS_ISO_HFS; %constant unsigned int FS_ISO_9660_INTERACTIVE = CDIO_FS_ISO_9660_INTERACTIVE; %constant unsigned int FS_3DO = CDIO_FS_3DO; %constant unsigned int FS_XISO = CDIO_FS_XISO; %constant unsigned int FS_UDFX = CDIO_FS_UDFX; %constant unsigned int FS_UDF = CDIO_FS_UDF; %constant unsigned int FS_ISO_UDF = CDIO_FS_ISO_UDF; %constant unsigned int FS_ANAL_XA = CDIO_FS_ANAL_XA; %constant unsigned int FS_ANAL_MULTISESSION = CDIO_FS_ANAL_MULTISESSION; %constant unsigned int FS_ANAL_PHOTO_CD = CDIO_FS_ANAL_PHOTO_CD; %constant unsigned int FS_ANAL_HIDDEN_TRACK = CDIO_FS_ANAL_HIDDEN_TRACK; %constant unsigned int FS_ANAL_CDTV = CDIO_FS_ANAL_CDTV; %constant unsigned int FS_ANAL_BOOTABLE = CDIO_FS_ANAL_BOOTABLE; %constant unsigned int FS_ANAL_VIDEOCD = CDIO_FS_ANAL_VIDEOCD; %constant unsigned int FS_ANAL_ROCKRIDGE = CDIO_FS_ANAL_ROCKRIDGE; %constant unsigned int FS_ANAL_JOLIET = CDIO_FS_ANAL_JOLIET; %constant unsigned int FS_ANAL_SVCD = CDIO_FS_ANAL_SVCD; %constant unsigned int FS_ANAL_CVD = CDIO_FS_ANAL_CVD; %constant unsigned int FS_ANAL_XISO = CDIO_FS_ANAL_XISO; %constant unsigned int FS_MATCH_ALL = CDIO_FS_MATCH_ALL; %constant unsigned int FS_UNKNOWN = CDIO_FS_UNKNOWN; %mutable; Device-Cdio-v2.0.0/swig/types.swg000444001750001750 372713222226267 16424 0ustar00rockyrocky000000000000/* -*- c -*- Copyright (C) 2006, 2008, 2011 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Various typedef's "constant"s/variables Many of these are documented more fully in libcdio's I'm not sure why, but including that directly will not allow SWIG to understand say that a lsn_t is an int. */ %include "inttypes.i" #ifdef NEED_LONG #define LONG long #else #define LONG #endif #define uint32_t LONG unsigned int #define uint16_t LONG unsigned int #define int32_t LONG int #define uint8_t unsigned char typedef long int my_ssize_t; typedef unsigned int driver_id_t; typedef int lsn_t; typedef int lba_t; typedef unsigned int track_t; typedef long int driver_return_code_t; typedef long int ssize_t; typedef unsigned int cdio_drive_read_cap_t; typedef unsigned int cdio_drive_write_cap_t; typedef unsigned int cdio_drive_misc_cap_t; %constant long int VERSION_NUM = LIBCDIO_VERSION_NUM; %constant long int INVALID_LBA = CDIO_INVALID_LBA; %constant long int INVALID_LSN = CDIO_INVALID_LSN; /* More documentation on the below is in cdio/sector.h */ %constant long int CD_FRAMESIZE = CDIO_CD_FRAMESIZE; %constant long int CD_FRAMESIZE_RAW = CDIO_CD_FRAMESIZE_RAW; %constant long int ISO_BLOCKSIZE = CDIO_CD_FRAMESIZE; %constant long int M2F2_SECTOR_SIZE = M2F2_SECTOR_SIZE; %constant long int M2RAW_SECTOR_SIZE = M2RAW_SECTOR_SIZE; Device-Cdio-v2.0.0/swig/perliso9660.swg000444001750001750 11655313222226267 17324 0ustar00rockyrocky000000000000/* -*- c -*- See end for copyright and license. */ %define DOCSTRING "A Perl wrapper for The CD Input and Control library's ISO-9660 library See also the ISO-9660 specification. The freely available European equivalant standard is called ECMA-119." %enddef %module(docstring=DOCSTRING) perliso9660 %{ /* Includes the header in the wrapper code */ #include #include #include #include %} #include #include #include /* Various libcdio constants and typedefs */ %include "types.swg" %include "typemaps.i" typedef uint8_t iso_extension_mask_t; %constant long int ISO_BLOCKSIZE = CDIO_CD_FRAMESIZE; %constant long int PVD_SECTOR = ISO_PVD_SECTOR ; %constant long int EVD_SECTOR = ISO_EVD_SECTOR ; %constant long int LEN_ISONAME = LEN_ISONAME; %constant long int MAX_SYSTEM_ID = ISO_MAX_SYSTEM_ID ; %constant long int MAX_ISONAME = MAX_ISONAME; %constant long int MAX_PREPARER_ID = ISO_MAX_PREPARER_ID ; %constant long int MAX_ISOPATHNAME = MAX_ISOPATHNAME; %constant long int FILE = ISO_FILE; %constant long int EXISTENCE = ISO_EXISTENCE; %constant long int DIRECTORY = ISO_DIRECTORY; %constant long int ASSOCIATED = ISO_ASSOCIATED; %constant long int RECORD = ISO_RECORD; %constant long int PROTECTION = ISO_PROTECTION; %constant long int DRESERVED1 = ISO_DRESERVED1; %constant long int DRESERVED2 = ISO_DRESERVED2; %constant long int MULTIEXTENT = ISO_MULTIEXTENT; %constant long int VD_BOOT_RECORD = ISO_VD_BOOT_RECORD; %constant long int VD_PRIMARY = ISO_VD_PRIMARY; %constant long int VD_SUPPLEMENTARY = ISO_VD_SUPPLEMENTARY; %constant long int VD_PARITION = ISO_VD_PARITION; %constant long int VD_END = ISO_VD_END; %constant long int MAX_PUBLISHER_ID = ISO_MAX_PUBLISHER_ID; %constant long int MAX_APPLICATION_ID = ISO_MAX_APPLICATION_ID; %constant long int MAX_VOLUME_ID = ISO_MAX_VOLUME_ID; %constant long int MAX_VOLUMESET_ID = ISO_MAX_VOLUMESET_ID; %constant long int STANDARD_ID = ISO_STANDARD_ID; %constant long int NOCHECK = ISO9660_NOCHECK; %constant long int SEVEN_BIT = ISO9660_7BIT; %constant long int ACHARS = ISO9660_ACHARS; %constant long int DCHARS = ISO9660_DCHARS; %constant long int EXTENSION_JOLIET_LEVEL1 = ISO_EXTENSION_JOLIET_LEVEL1; %constant long int EXTENSION_JOLIET_LEVEL2 = ISO_EXTENSION_JOLIET_LEVEL2; %constant long int EXTENSION_JOLIET_LEVEL3 = ISO_EXTENSION_JOLIET_LEVEL3; %constant long int EXTENSION_ROCK_RIDGE = ISO_EXTENSION_ROCK_RIDGE; %constant long int EXTENSION_HIGH_SIERRA = ISO_EXTENSION_HIGH_SIERRA; %constant long int EXTENSION_ALL = ISO_EXTENSION_ALL; %constant long int EXTENSION_NONE = ISO_EXTENSION_NONE; %constant long int EXTENSION_JOLIET = ISO_EXTENSION_JOLIET; /* Set up to allow functions to return stat lists of type "stat *". We'll use a typedef so we can make sure to isolate this. */ %inline %{ typedef CdioList_t IsoStatList_t; typedef iso9660_stat_t IsoStat_t; %} typedef CdioList_t IsoStatList_t; typedef iso9660_stat_t IsoStat_t; %typemap(out) IsoStat_t *{ // $1 is of type IsoStatList_t iso9660_stat_t *p_statbuf = result; if (!result) goto out; PPCODE: /* Have Perl compute the length of the string using strlen() */ XPUSHs(sv_2mortal(newSVpv(p_statbuf->filename, 0))); XPUSHs(sv_2mortal(newSViv(p_statbuf->lsn))); XPUSHs(sv_2mortal(newSViv(p_statbuf->size))); XPUSHs(sv_2mortal(newSViv(p_statbuf->secsize))); XPUSHs(sv_2mortal(newSViv(p_statbuf->type))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_sec))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_min))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_hour))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mon))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_year))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_wday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_yday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_isdst))); argvi += 16; free (p_statbuf); out: ; } %typemap(out) IsoStatList_t *{ // $1 is of type IsoStatList_t CdioISO9660FileList_t *p_entlist = result; CdioListNode_t *p_entnode; unsigned int num = 0; if (!result) goto out; PPCODE: /* For each element in the array of strings, create a new * mortalscalar, and stuff it into the above array. */ _CDIO_LIST_FOREACH (p_entnode, p_entlist) { iso9660_stat_t *p_statbuf = (iso9660_stat_t *) _cdio_list_node_data (p_entnode); /* Have perl compute the length of the string using strlen() */ XPUSHs(sv_2mortal(newSVpv(p_statbuf->filename, 0))); XPUSHs(sv_2mortal(newSViv(p_statbuf->lsn))); XPUSHs(sv_2mortal(newSViv(p_statbuf->size))); XPUSHs(sv_2mortal(newSViv(p_statbuf->secsize))); XPUSHs(sv_2mortal(newSViv(p_statbuf->type))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_sec))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_min))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_hour))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_mon))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_year))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_wday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_yday))); XPUSHs(sv_2mortal(newSViv(p_statbuf->tm.tm_isdst))); num += 14; } iso9660_filelist_free(p_entlist); argvi += num + 2; out: ; } /*! Open an ISO 9660 image for reading. Maybe in the future we will have a mode. NULL is returned on error. */ %rename iso9660_open open_iso; iso9660_t *iso9660_open (const char *psz_path /*flags, mode */); /*! Open an ISO 9660 image for reading allowing various ISO 9660 extensions. Maybe in the future we will have a mode. NULL is returned on error. */ %rename iso9660_open_ext open_ext; iso9660_t *iso9660_open_ext (const char *psz_path, iso_extension_mask_t iso_extension_mask); /*! Open an ISO 9660 image for reading with some tolerence for positioning of the ISO9660 image. We scan for ISO_STANDARD_ID and use that to set the eventual offset to adjust by (as long as that is <= i_fuzz). Maybe in the future we will have a mode. NULL is returned on error. @see iso9660_open */ %rename iso9660_open_fuzzy open_fuzzy; iso9660_t *iso9660_open_fuzzy (const char *psz_path /*flags, mode */, uint16_t i_fuzz); /*! Open an ISO 9660 image for reading with some tolerence for positioning of the ISO9660 image. We scan for ISO_STANDARD_ID and use that to set the eventual offset to adjust by (as long as that is <= i_fuzz). Maybe in the future we will have a mode. NULL is returned on error. @see iso9660_open */ %rename iso9660_open_fuzzy open_fuzzy_ext; iso9660_t *iso9660_open_fuzzy_ext (const char *psz_path, iso_extension_mask_t iso_extension_mask, uint16_t i_fuzz /*flags, mode */); /*! Read the Super block of an ISO 9660 image but determine framesize and datastart and a possible additional offset. Generally here we are not reading an ISO 9660 image but a CD-Image which contains an ISO 9660 filesystem. */ %rename iso9660_ifs_fuzzy_read_superblock ifs_fuzzy_read_superblock; bool iso9660_ifs_fuzzy_read_superblock (iso9660_t *p_iso, iso_extension_mask_t iso_extension_mask, uint16_t i_fuzz); /*! Close previously opened ISO 9660 image. True is unconditionally returned. If there was an error false would be returned. */ %rename iso9660_close close; bool iso9660_close (iso9660_t * p_iso); %typemap(out) buf_t { /* $1 is of type buf_t */ ST(argvi) = sv_newmortal(); if (result) { /* I don't yet know how to pick up arg4 another way. THIS MEANS ARG3 MUST ALWAYS BE THE SIZE. */ sv_setpvn((SV*)ST(argvi++), (char *) result, *arg4); /* Don't leak memory. return value was malloc'd by libcdio. */ /* free(result); */ } else { sv_setsv((SV*)ST(argvi++), &PL_sv_undef); } } %inline %{ typedef long int my_ssize_t; %} %apply my_ssize_t *OUTPUT { my_ssize_t *pi_size }; /*! Seek to a position and then read n bytes. (buffer, size) are returned. */ %newobject seek_read; // free malloc'd return value typedef char *buf_t; buf_t seek_read (const iso9660_t *p_iso, lsn_t start, long int i_size, /*out*/ my_ssize_t *pi_size); %inline %{ typedef char *buf_t; buf_t seek_read (const iso9660_t *p_iso, lsn_t start, long int i_size, /*out*/ my_ssize_t *pi_size) { char *p_buf = calloc(ISO_BLOCKSIZE, i_size); *pi_size = iso9660_iso_seek_read(p_iso, p_buf, start, i_size); return p_buf; } %} /*! Read the Primary Volume Descriptor for a CD. True is returned if read, and false if there was an error. */ iso9660_pvd_t *fs_read_pvd ( const CdIo_t *p_cdio ); %inline %{ iso9660_pvd_t *fs_read_pvd ( const CdIo_t *p_cdio ) { static iso9660_pvd_t pvd; bool b_ok = iso9660_fs_read_pvd ( p_cdio, &pvd ); if (!b_ok) return NULL; return &pvd; } %} /*! Read the Primary Volume Descriptor for an ISO 9660 image. True is returned if read, and false if there was an error. */ iso9660_pvd_t *ifs_read_pvd ( const iso9660_t *p_iso ); %inline %{ iso9660_pvd_t *ifs_read_pvd ( const iso9660_t *p_iso ) { static iso9660_pvd_t pvd; bool b_ok = iso9660_ifs_read_pvd ( p_iso, &pvd ); if (!b_ok) return NULL; return &pvd; } %} /*! Read the Super block of an ISO 9660 image. This is the Primary Volume Descriptor (PVD) and perhaps a Supplemental Volume Descriptor if (Joliet) extensions are acceptable. */ %rename iso9660_fs_read_superblock fs_read_superblock; bool iso9660_fs_read_superblock (CdIo_t *p_cdio, iso_extension_mask_t iso_extension_mask); /*! Read the Super block of an ISO 9660 image. This is the Primary Volume Descriptor (PVD) and perhaps a Supplemental Volume Descriptor if (Joliet) extensions are acceptable. */ %rename iso9660_ifs_read_superblock ifs_read_superblock; bool iso9660_ifs_read_superblock (iso9660_t *p_iso, iso_extension_mask_t iso_extension_mask); /*==================================================== Time conversion ====================================================*/ /*! Set time in format used in ISO 9660 directory index record from a Unix time structure. */ iso9660_dtime_t * set_dtime ( int tm_sec, int tm_min, int tm_hour, int tm_mday, int tm_mon, int tm_year); %inline %{ iso9660_dtime_t * set_dtime ( int tm_sec, int tm_min, int tm_hour, int tm_mday, int tm_mon, int tm_year) { struct tm tm = { tm_sec, tm_min, tm_hour, tm_mday, tm_mon, tm_year, 0, 0, 0 }; static iso9660_dtime_t dtime; iso9660_set_dtime (&tm, &dtime); return &dtime; } %} /*! Set "long" time in format used in ISO 9660 primary volume descriptor from a Unix time structure. */ iso9660_ltime_t * set_ltime ( int tm_sec, int tm_min, int tm_hour, int tm_mday, int tm_mon, int tm_year); %inline %{ iso9660_ltime_t * set_ltime ( int tm_sec, int tm_min, int tm_hour, int tm_mday, int tm_mon, int tm_year) { struct tm tm = { tm_sec, tm_min, tm_hour, tm_mday, tm_mon, tm_year, 0, 0, 0 }; static iso9660_ltime_t ldate; iso9660_set_ltime (&tm, &ldate); return &ldate; } %} /*! Get Unix time structure from format use in an ISO 9660 directory index record. Even though tm_wday and tm_yday fields are not explicitly in dtime, they are calculated from the other fields. If tm is to reflect the localtime, set "use_localtime" true, otherwise tm will reported in GMT. */ %apply int *OUTPUT { int *tm_sec, int *tm_min, int *tm_hour, int *tm_mday, int *tm_mon, int *tm_year, int *tm_wday, int *tm_yday, int *tm_isdst }; bool get_dtime (const iso9660_dtime_t *dtime, bool use_localtime, int *tm_sec, int *tm_min, int *tm_hour, int *tm_mday, int *tm_mon, int *tm_year, int *tm_wday, int *tm_yday, int *tm_isdst); %inline %{ bool get_dtime (const iso9660_dtime_t *dtime, bool use_localtime, int *tm_sec, int *tm_min, int *tm_hour, int *tm_mday, int *tm_mon, int *tm_year, int *tm_wday, int *tm_yday, int *tm_isdst) { struct tm tm; bool b_okay = iso9660_get_dtime (dtime, use_localtime, &tm); if (b_okay) { *tm_sec = tm.tm_sec; *tm_min = tm.tm_min; *tm_hour = tm.tm_hour; *tm_mon = tm.tm_mon; *tm_mday = tm.tm_mday; *tm_year = tm.tm_year; *tm_wday = tm.tm_wday; *tm_yday = tm.tm_yday; *tm_isdst = tm.tm_isdst; } return b_okay; } %} /*! Get "long" time in format used in ISO 9660 primary volume descriptor from a Unix time structure. */ bool get_ltime (const iso9660_ltime_t *dtime, int *tm_sec, int *tm_min, int *tm_hour, int *tm_mday, int *tm_mon, int *tm_year, int *tm_wday, int *tm_yday, int *tm_isdst); %inline %{ bool get_ltime (const iso9660_ltime_t *p_ldate, int *tm_sec, int *tm_min, int *tm_hour, int *tm_mday, int *tm_mon, int *tm_year, int *tm_wday, int *tm_yday, int *tm_isdst) { struct tm tm; bool b_okay = iso9660_get_ltime (p_ldate, &tm); if (b_okay) { *tm_sec = tm.tm_sec; *tm_min = tm.tm_min; *tm_hour = tm.tm_hour; *tm_mon = tm.tm_mon; *tm_mday = tm.tm_mday; *tm_year = tm.tm_year; *tm_wday = tm.tm_wday; *tm_yday = tm.tm_yday; *tm_isdst = tm.tm_isdst; } return b_okay; } %} /*======================================================== Characters used in file and directory and manipulation =======================================================*/ /*! Return true if c is a DCHAR - a character that can appear in an an ISO-9600 level 1 directory name. These are the ASCII capital letters A-Z, the digits 0-9 and an underscore. */ %rename iso9660_isdchar is_dchar; bool iso9660_isdchar (int c); /*! Return true if c is an ACHAR - These are the DCHAR's plus some ASCII symbols including the space symbol. */ %rename iso9660_isachar is_achar; bool iso9660_isachar (int c); /*! Convert an ISO-9660 file name that stored in a directory entry into what's usually listed as the file name in a listing. Lowercase name, and remove trailing ;1's or .;1's and turn the other ;'s into version numbers. @param psz_oldname the ISO-9660 filename to be translated. @param psz_newname returned string. The caller allocates this and it should be at least the size of psz_oldname. @return length of the translated string is returned. */ %newobject name_translate; char * name_translate(const char *psz_oldname); %inline %{ char * name_translate(const char *psz_oldname) { char *psz_newname=calloc(sizeof(char), strlen(psz_oldname)+1); iso9660_name_translate(psz_oldname, psz_newname); return psz_newname; } %} /*! Convert an ISO-9660 file name that stored in a directory entry into what's usually listed as the file name in a listing. Lowercase name if no Joliet Extension interpretation. Remove trailing ;1's or .;1's and turn the other ;'s into version numbers. @param psz_oldname the ISO-9660 filename to be translated. @param psz_newname returned string. The caller allocates this and it should be at least the size of psz_oldname. @param i_joliet_level 0 if not using Joliet Extension. Otherwise the Joliet level. @return length of the translated string is returned. It will be no greater than the length of psz_oldname. */ %newobject name_translate_ext; char * name_translate_ext(const char *psz_oldname, uint8_t i_joliet_level); %inline %{ char * name_translate_ext(const char *psz_oldname, uint8_t i_joliet_level) { char *psz_newname=calloc(sizeof(char), strlen(psz_oldname)+1); iso9660_name_translate_ext(psz_oldname, psz_newname, i_joliet_level); return psz_newname; } %} /*! Pad string src with spaces to size len and copy this to dst. If len is less than the length of src, dst will be truncated to the first len characters of src. src can also be scanned to see if it contains only ACHARs, DCHARs, 7-bit ASCII chars depending on the enumeration _check. In addition to getting changed, dst is the return value. Note: this string might not be NULL terminated. */ %newobject strncpy_pad; // free malloc'd return value char *strncpy_pad(const char src[], size_t len, enum strncpy_pad_check _check); %inline %{ char * strncpy_pad(const char src[], size_t len, enum strncpy_pad_check _check) { char *dst = calloc(sizeof(char), len+1); return iso9660_strncpy_pad(dst, src, len, _check); } %} /*===================================================================== Files and Directory Names ======================================================================*/ /*! Check that psz_path is a valid ISO-9660 directory name. A valid directory name should not start out with a slash (/), dot (.) or null byte, should be less than 37 characters long, have no more than 8 characters in a directory component which is separated by a /, and consist of only DCHARs. True is returned if psz_path is valid. */ %rename iso9660_dirname_valid_p dirname_valid_p; bool iso9660_dirname_valid_p (const char psz_path[]); /*! Take psz_path and a version number and turn that into a ISO-9660 pathname. (That's just the pathname followed by ";" and the version number. For example, mydir/file.ext -> MYDIR/FILE.EXT;1 for version 1. The resulting ISO-9660 pathname is returned. */ %rename iso9660_pathname_isofy pathname_isofy; %newobject iso9660_pathname_isofy; // free malloc'd return value char *iso9660_pathname_isofy (const char psz_path[], uint16_t i_version); /*! Check that psz_path is a valid ISO-9660 pathname. A valid pathname contains a valid directory name, if one appears and the filename portion should be no more than 8 characters for the file prefix and 3 characters in the extension (or portion after a dot). There should be exactly one dot somewhere in the filename portion and the filename should be composed of only DCHARs. True is returned if psz_path is valid. */ %rename iso9660_pathname_valid_p pathname_valid_p; bool iso9660_pathname_valid_p (const char psz_path[]); /* ... */ /*! Given a directory pointer, find the filesystem entry that contains lsn and return information about it. Returns stat_t of entry if we found lsn, or NULL otherwise. */ %rename iso9660_fs_find_lsn fs_find_lsn; IsoStat_t *iso9660_fs_find_lsn(CdIo_t *p_cdio, lsn_t i_lsn); /*! Given a directory pointer, find the filesystem entry that contains lsn and return information about it. Returns stat_t of entry if we found lsn, or NULL otherwise. */ %rename iso9660_ifs_find_lsn ifs_find_lsn; IsoStat_t *iso9660_ifs_find_lsn(iso9660_t *p_iso, lsn_t i_lsn); /*! Return file status for psz_path. NULL is returned on error. */ %rename iso9660_fs_stat fs_stat; IsoStat_t *iso9660_fs_stat (CdIo_t *p_cdio, const char psz_path[]); /*! Return file status for path name psz_path. NULL is returned on error. pathname version numbers in the ISO 9660 name are dropped, i.e. ;1 is removed and if level 1 ISO-9660 names are lowercased. The b_mode2 parameter is not used. */ %rename iso9660_fs_stat_translate fs_stat_translate; IsoStat_t *iso9660_fs_stat_translate (CdIo_t *p_cdio, const char psz_path[]); /*! Return file status for pathname. NULL is returned on error. */ %rename iso9660_ifs_stat ifs_stat; IsoStat_t *iso9660_ifs_stat (iso9660_t *p_iso, const char psz_path[]); /*! Return file status for path name psz_path. NULL is returned on error. pathname version numbers in the ISO 9660 name are dropped, i.e. ;1 is removed and if level 1 ISO-9660 names are lowercased. */ %rename iso9660_ifs_stat_translate ifs_stat_translate; IsoStat_t *iso9660_ifs_stat_translate (iso9660_t *p_iso, const char psz_path[]); /*! Read psz_path (a directory) and return a list of iso9660_stat_t pointers for the files inside that directory. The caller must free the returned result. */ %newobject fs_readdir; // free malloc'd return value IsoStatList_t *fs_readdir (CdIo_t *p_cdio, const char psz_path[]); %inline %{ IsoStatList_t *fs_readdir (CdIo_t *p_cdio, const char psz_path[]) { CdioList_t *p_statlist = iso9660_fs_readdir (p_cdio, psz_path); return p_statlist; } %} /*! Read psz_path (a directory) and return a list of iso9660_stat_t pointers for the files inside that directory. The caller must free the returned result. */ %newobject ifs_readdir; // free malloc'd return value IsoStatList_t *ifs_readdir (iso9660_t *p_iso, const char psz_path[]); %inline %{ IsoStatList_t *ifs_readdir (iso9660_t *p_iso, const char psz_path[]) { CdioList_t *p_statlist = iso9660_ifs_readdir (p_iso, psz_path); return p_statlist; } %} /*! Return the PVD's application ID. NULL is returned if there is some problem in getting this. */ %rename iso9660_get_application_id get_application_id; char * iso9660_get_application_id(iso9660_pvd_t *p_pvd); /*! Get the application ID. Return NULL if there is some problem in getting this. */ %newobject get_application_id; // free malloc'd return value char *ifs_get_application_id(iso9660_t *p_iso); %inline %{ char * ifs_get_application_id(iso9660_t *p_iso) { char *psz; bool ok = iso9660_ifs_get_application_id(p_iso, &psz); if (!ok) return NULL; return psz; } %} /*! Return the Joliet level recognized for p_iso. */ %rename iso9660_ifs_get_joliet_level get_joliet_level; uint8_t iso9660_ifs_get_joliet_level(iso9660_t *p_iso); %rename iso9660_get_dir_len get_dir_len; uint8_t iso9660_get_dir_len(const iso9660_dir_t *p_idr); /*! Return the directory name stored in the iso9660_dir_t */ %rename iso9660_get_to_name get_to_name; %newobject iso9660_dir_to_name; // free malloc'd return value char * iso9660_dir_to_name (const iso9660_dir_t *p_iso9660_dir); /*! Returns a POSIX mode for a given p_iso_dirent. */ %rename iso9660_get_posix_filemode get_posix_filemode; mode_t iso9660_get_posix_filemode(const iso9660_stat_t *p_iso_dirent); /*! Return a string containing the preparer id with trailing blanks removed. */ %rename iso9660_get_preparer_id get_preparer_id; char *iso9660_get_preparer_id(const iso9660_pvd_t *p_pvd); /*! Get the preparer ID. Return NULL if there is some problem in getting this. */ %newobject ifs_get_preparer_id; // free malloc'd return value char *ifs_get_preparer_id(iso9660_t *p_iso); %inline %{ char * ifs_get_preparer_id(iso9660_t *p_iso) { char *psz; bool ok = iso9660_ifs_get_preparer_id(p_iso, &psz); if (!ok) return NULL; return psz; } %} /*! Return a string containing the PVD's publisher id with trailing blanks removed. */ %rename iso9660_get_publisher_id get_publisher_id; char *iso9660_get_publisher_id(const iso9660_pvd_t *p_pvd); /*! Get the publisher ID. return NULL if there is some problem in getting this. */ %newobject ifs_get_publisher_id; // free malloc'd return value char *ifs_get_publisher_id(iso9660_t *p_iso); %inline %{ char * ifs_get_publisher_id(iso9660_t *p_iso) { char *psz; bool ok = iso9660_ifs_get_publisher_id(p_iso, &psz); if (!ok) return NULL; return psz; } %} %rename iso9660_get_pvd_type get_pvd_type; uint8_t iso9660_get_pvd_type(const iso9660_pvd_t *p_pvd); %rename iso9660_get_pvd_id get_pvd_id; const char * iso9660_get_pvd_id(const iso9660_pvd_t *p_pvd); %rename iso9660_get_pvd_space_size get_pvd_space_size; int iso9660_get_pvd_space_size(const iso9660_pvd_t *p_pvd); %rename iso9660_get_pvd_block_size get_pvd_block_size; int iso9660_get_pvd_block_size(const iso9660_pvd_t *p_pvd) ; /*! Return the primary volume id version number (of pvd). If there is an error 0 is returned. */ %rename iso9660_get_pvd_version get_pvd_version; int iso9660_get_pvd_version(const iso9660_pvd_t *pvd) ; /*! Return a string containing the PVD's system id with trailing blanks removed. */ %rename iso9660_get_system_id get_system_id; char *iso9660_get_system_id(const iso9660_pvd_t *p_pvd); /*! Get the system ID. return NULL if there is some problem in getting this. */ %newobject ifs_get_system_id; // free malloc'd return value char *ifs_get_system_id(iso9660_t *p_iso); %inline %{ char * ifs_get_system_id(iso9660_t *p_iso) { char *psz; bool ok = iso9660_ifs_get_system_id(p_iso, &psz); if (!ok) return NULL; return psz; } %} /*! Return the LSN of the root directory for pvd. If there is an error CDIO_INVALID_LSN is returned. */ %rename iso9660_get_root_lsn get_root_lsn; lsn_t iso9660_get_root_lsn(const iso9660_pvd_t *p_pvd); /*! Return the PVD's volume ID. */ %rename iso9660_get_volume_id get_volume_id; char *iso9660_get_volume_id(const iso9660_pvd_t *p_pvd); /*! Get the system ID. return NULL if there is some problem in getting this. */ %newobject ifs_get_volume_id; // free malloc'd return value char *ifs_get_volume_id(iso9660_t *p_iso); %inline %{ char * ifs_get_volume_id(iso9660_t *p_iso) { char *psz; bool ok = iso9660_ifs_get_volume_id(p_iso, &psz); if (!ok) return NULL; return psz; } %} /*! Return the PVD's volumeset ID. NULL is returned if there is some problem in getting this. */ %rename iso9660_get_volumeset_id get_volumeset_id; char *iso9660_get_volumeset_id(const iso9660_pvd_t *p_pvd); /*! Get the volumeset ID. return NULL if there is some problem in getting this. */ %newobject ifs_get_volumeset_id; // free malloc'd return value char *ifs_get_volumeset_id(iso9660_t *p_iso); %inline %{ char * ifs_get_volumeset_id(iso9660_t *p_iso) { char *psz; bool ok = iso9660_ifs_get_volumeset_id(p_iso, &psz); if (!ok) return NULL; return psz; } %} /* ================= pathtable ================== */ /*! Zero's out pathable. Do this first. */ %rename iso9660_pathtable_init pathtable_init; void iso9660_pathtable_init (void *pt); %rename iso9660_pathtable_get_size pathtable_get_size; unsigned int iso9660_pathtable_get_size (const void *pt); %rename iso9660_pathtable_l_add_entry pathtable_l_add_entry; uint16_t iso9660_pathtable_l_add_entry (void *pt, const char name[], uint32_t extent, uint16_t parent); %rename iso9660_pathtable_m_add_entry pathtable_m_add_entry; uint16_t iso9660_pathtable_m_add_entry (void *pt, const char name[], uint32_t extent, uint16_t parent); /*====================================================================== Volume Descriptors ========================================================================*/ #ifdef FINSHED void iso9660_set_pvd (void *pd, const char volume_id[], const char application_id[], const char publisher_id[], const char preparer_id[], uint32_t iso_size, const void *root_dir, uint32_t path_table_l_extent, uint32_t path_table_m_extent, uint32_t path_table_size, const time_t *pvd_time); #endif /*FINISHED*/ %rename iso9660_set_evd set_evd; void iso9660_set_evd (void *pd); /*! Return true if ISO 9660 image has extended attrributes (XA). */ %rename iso9660_ifs_is_xa is_xa; bool iso9660_ifs_is_xa (const iso9660_t * p_iso); %perlcode %{ import Device::Cdio::VERSION; $VERSION = $Device::Cdio::VERSION; use strict; =pod =head1 NAME perliso9660 - lower-level wrapper to libiso9660, the ISO 9660 library of the CD Input and Control package =head1 SYNOPSIS This is fairly straight-forward wrapper around the C library libiso9660 Although this is perfectly usable on its own, it is expected that the Object-Oriented interface L is what most people will want to use. There are various constants that are defined here. =head1 DESCRIPTION Encapsulation is done in two parts. The lower-level Perl interface is called perliso9660 (this file) and is generated via SWIG. =head1 CONSTANTS =over 4 =item ISO_BLOCKSIZE Number of bytes in an ISO 9660 block (2048) =item PVD_SECTOR "Primary Volume Descriptor" sector (16) =item EVD_SECTOR "End Volume Descriptor" sector (17) =item LEN_ISONAME Size in bytes of the filename portion + null byte (31) =item MAX_SYSTEM_ID Maximum number of characters in a system id (32) =item MAX_ISONAME Size in bytes of the filename portion + null byte. (37) =item MAX_PREPARER_ID Maximum number of characters in a preparer id. (128) =item MAX_ISOPATHNAME Maximum number of characters in the entire ISO 9660 filename. (255) =item MAX_PUBLISHER_ID Maximum number of characters in a publisher id. =item MAX_APPLICATION_ID Maximum number of characters in an application id. =item MAX_VOLUME_ID Maximum number of characters in a volume id. =item MAX_VOLUMESET_ID Maximum number of characters in a volume-set id. =item STANDARD_ID String inside frame which identifies an ISO 9660 filesystem. This string is the "id" field of an iso9660_pvd_t or an iso9660_svd_t. =item EXTENSION_JOLIET_LEVEL1 Use Joliet Level 1. =item EXTENSION_JOLIET_LEVEL2 Use Joliet Level 2. =item EXTENSION_JOLIET_LEVEL3 Use Joliet Level 3 =item EXTENSION_ROCK_RIDGE Use Rock-Ridge Extensions. =item EXTENSION_HIGH_SIERRA Use High-Sierra Extensions. =item EXTENSION_ALL Use any of the above extensions. =item EXTENSION_NONE Use none of the above extensions. =item EXTENSION_JOLIET Use any Joliet Extension available. =back =head2 Directory Flags =over 4 =item FILE Not really a flag but the lack of one. =item EXISTENCE Do not make existence known (hidden). =item DIRECTORY This file is a directory. =item ASSOCIATED This file is an associated file =item RECORD Record format is in extended attribute if not set. =item PROTECTION No read/execute permission in extended attribute. =item DRESERVED1 Reserved bit 5. =item DRESERVED2 Reserved bit 6 =item MULTIEXTENT Not the final entry of a multi-extent file. =back =head2 Volume Descriptor Types =over 4 =item VD_BOOT_RECORD CD is bootable =item VD_PRIMARY Primary Volume descriptor which must be in any ISO-9660 =item VD_SUPPLEMENTARY (optional) Supplimentary Volume Descriptor. But used by Joliet, for example. =item VD_PARITION Indicates a partition of a CD. =item VD_END =back =head2 Flags for strncpy =over 4 =item NOCHECK Enumeration meaning don not check in strncpy_pad. =item SEVEN_BIT Enumeration in strncpy_pad for checking entry has only 7-bit characters. =item ACHARS Enumeration in strncpy_pad for checking entry has only ACHARs. =item DCHARS Enumeration in strncpy_pad for checking entry has only DCHARs. =back =head1 SUBROUTINES =head2 Input Output =head3 open_iso Open an ISO 9660 image for reading. Maybe in the future we will have mode. undef is returned on error. =head3 open_ext Open an ISO 9660 image for reading allowing various ISO 9660 extensions. Maybe in the future we will have a mode. undef is eturned on error. =head3 open_fuzzy Open an ISO 9660 image for reading with some tolerence for positioning of the ISO9660 image. We scan for $perliso9660::ISO_STANDARD_ID and use that to set he eventual offset to adjust by (as long as that is <= i_fuzz). Maybe in the future we will have a mode. undef is returned on error. See also open_iso =head3 open_fuzzy_ext Open an ISO 9660 image for reading with some tolerence for positioning of the ISO9660 image. We scan for ISO_STANDARD_ID and use that to set the eventual offset to adjust by (as long as that is <= i_fuzz). Maybe in the future we will have a mode. undef is returned on error. =head3 ifs_fuzzy_read_superblock Read the Super block of an ISO 9660 image but determine framesize and datastart and a possible additional offset. Generally here we are not reading an ISO 9660 image but a CD-Image which contains an ISO 9660 filesystem. =head3 close Close previously opened ISO 9660 image. 1 is unconditionally returned. If there was an error 0 would be returned. =head3 seek_read Seek to a position and then read n bytes. (buffer, size) are is returned. =head3 fs_read_pvd Read the Primary Volume Descriptor for a CD. 1 is returned if read, and 0 if there was an error. =head3 ifs_read_pvd Read the Primary Volume Descriptor for an ISO 9660 image. 1 is returned if read, and 0 if there was an error. =head3 _fs_read_superblock Read the Super block of an ISO 9660 image. This is the Primary Volume Descriptor (PVD) and perhaps a Supplemental Volume Descriptor if (Joliet) extensions are acceptable. =head3 ifs_read_superblock Read the Super block of an ISO 9660 image. This is the Primary Volume Descriptor (PVD) and perhaps a Supplemental Volume Descriptor if (Joliet) extensions are acceptable. =head2 Time Conversion =head3 set_dtime Set time in format used in ISO 9660 directory index record from a Unix time structure. =head3 set_ltime Set "long" time in format used in ISO 9660 primary volume descriptor from a Unix time structure. =head3 get_dtime Get Unix time structure from format use in an ISO 9660 directory index record. Even though tm_wday and tm_yday fields are not explicitly in dtime, they are calculated from the other fields. If tm is to reflect the localtime, set "use_localtime" 1, otherwise tm will reported in GMT. =head3 get_ltime Get "long" time in format used in ISO 9660 primary volume descriptor from a Unix time structure. =head2 Character Classification and String Manipulation =head3 is_dchar Return 1 if c (an int) is a DCHAR - a character that can appear in an an ISO-9600 level 1 directory name. These are the ASCII capital letters A-Z, the digits 0-9 and an underscore. =head3 is_achar =head3 name_translate Convert an ISO-9660 file name that stored in a directory entry into what is usually listed as the file name in a listing. wercase name, and remove trailing ;1's or .;1's and turn the others into version numbers. =head3 name_translate_ext Convert an ISO-9660 file name that stored in a directory entry into what is usually listed as the file name in a listing. Lowercase name if no Joliet Extension interpretation. Remove trailing ;1's or .;1's and turn the others into version numbers. =head3 strncpy_pad Pad string src with spaces to size len and copy this to dst. If len is less than the length of src, dst will be truncated to the first len characters of src. src can also be scanned to see if it contains only ACHARs, DCHARs, 7-bit ASCII chars depending on the enumeration _check. In addition to getting changed, dst is the return value. Note: this string might not be undef terminated. =head2 File and Directory Names =head3 dirname_valid_p Check that psz_path is a valid ISO-9660 directory name. A valid directory name should not start out with a slash (/), dot (.) or null byte, should be less than 37 characters long, have no more than 8 characters in a directory component which is separated by a /, and consist of only DCHARs. 1 is returned if psz_path is valid. =head3 pathname_isofy Take psz_path and a version number and turn that into a ISO-9660 pathname. (That is just the pathname followed by ";" and the version number. For example, mydir/file.ext -> MYDIR/FILE.EXT;1 for version 1. The resulting ISO-9660 pathname is returned. =head3 pathname_valid_p Check that psz_path is a valid ISO-9660 pathname. A valid pathname contains a valid directory name, if one appears and the filename portion should be no more than 8 characters for the file prefix and 3 characters in the extension (or portion after a dot). There should be exactly one dot somewhere in the filename portion and the filename should be composed of only DCHARs. 1 is returned if psz_path is valid. =head3 fs_find_lsn Given a directory pointer, find the filesystem entry that contains lsn and return information about it. Returns stat_t of entry if we found lsn, or undef otherwise. =head3 ifs_find_lsn Given a directory pointer, find the filesystem entry that contains lsn and return information about it. Returns stat_t of entry if we found lsn, or undef otherwise. =head3 fs_stat Return file status for psz_path. undef is returned on error. =head3 fs_stat_translate Return file status for path name psz_path. undef is returned on error. pathname version numbers in the ISO 9660 name are dropped, i.e. ;1 is removed and if level 1 ISO-9660 names are lowercased. =head3 ifs_stat Return file status for pathname. undef is returned on error. =head3 ifs_stat_translate Return file status for path name psz_path. undef is returned on error. pathname version numbers in the ISO 9660 name are dropped, i.e. ;1 is removed and if level 1 ISO-9660 names are lowercased. =head3 fs_readdir Read psz_path (a directory) and return a list of iso9660_stat_t pointers for the files inside that directory. The caller must free the returned result. =head3 ifs_readdir Read psz_path (a directory) and return a list of iso9660_stat_t pointers for the files inside that directory. The caller must free the returned result. =head3 get_dir_len Return the directory name stored in the iso9660_dir_t A string is allocated: the caller must deallocate. =head3 dir_to_name =head3 get_posix_filemode Returns a POSIX mode for a given p_iso_dirent. =head2 Primary Volume Descriptor Routines =head3 get_application_id Return the PVD's application ID. undef is returned if there is some problem in getting this. =head3 ifs_get_application_id Get the application ID. psz_app_id is set to undef if there is some problem in getting this and 0 is returned. =head3 get_preparer_id Return a string containing the preparer id with trailing blanks removed. =head3 ifs_get_preparer_id Get the preparer ID. psz_preparer_id is set to undef if there is some problem in getting this and 0 is returned. =head3 get_publisher_id Return a string containing the PVD's publisher id with trailing blanks removed. =head3 ifs_get_publisher_id Get the publisher ID. psz_publisher_id is set to undef if there is some problem in getting this and 0 is returned. =head3 get_pvd_type =head3 get_pvd_id =head3 get_pvd_space_size =head3 get_pvd_block_size =head3 get_pvd_version Return the primary volume id version number (of pvd). If there is an error 0 is returned. =head3 get_system_id Return a string containing the PVD's system id with trailing blanks removed. =head3 ifs_get_system_id Get the system ID. psz_system_id is set to undef if there is some problem in getting this and 0 is returned. =head3 get_root_lsn Return the LSN of the root directory for pvd. If there is an error CDIO_INVALID_LSN is returned. =head3 get_volume_id Return the PVD's volume ID. =head3 ifs_get_volume_id Get the system ID. psz_system_id is set to undef if there s some problem in getting this and 0 is returned. =head3 get_volumeset_id Return the PVD's volumeset ID. undef is returned if there is some problem in getting this. =head3 ifs_get_volumeset_id Get the systemset ID. psz_systemset_id is set to undef if there is some problem in getting this and 0 is returned. =head2 Path Table Routines =head3 iso9660_pathtable_init Zero out pathable. Do this first. =head3 pathtable_get_size =head3 pathtable_l_add_entry =head3 pathtable_m_add_entry =head3 set_evd =head2 Miscellaneous =head3 get_joliet_level Return the Joliet level recognized for p_iso. =head3 ifs_is_xa Return 1 if ISO 9660 image has extended attrributes (XA). =head1 METHODS =head2 this This seems to be an artifact of SWIG. =head1 SEE ALSO L has documentation on libcdio including the a manual and the API via doxygen. =head1 AUTHORS Rocky Bernstein C<< >>. =head1 COPYRIGHT Copyright (C) 2006, 2008, 2011, 2017 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . =cut %} Device-Cdio-v2.0.0/swig/track.swg000444001750001750 1623613222226267 16403 0ustar00rockyrocky000000000000/* -*- c -*- Copyright (C) 2006, 2008, 2011 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* See For more extensive documentation */ %constant long int TRACK_FORMAT_AUDIO = TRACK_FORMAT_AUDIO; %constant long int TRACK_FORMAT_CDI = TRACK_FORMAT_CDI; %constant long int TRACK_FORMAT_XA = TRACK_FORMAT_XA; %constant long int TRACK_FORMAT_DATA = TRACK_FORMAT_DATA; %constant long int TRACK_FORMAT_PSX = TRACK_FORMAT_PSX; %constant long int CDIO_TRACK_FLAG_FALSE = CDIO_TRACK_FLAG_FALSE; %constant long int CDIO_TRACK_FLAG_TRUE = CDIO_TRACK_FLAG_TRUE; %constant long int CDIO_TRACK_FLAG_ERROR = CDIO_TRACK_FLAG_ERROR; %constant long int CDIO_TRACK_FLAG_UNKNOWN = CDIO_TRACK_FLAG_UNKNOWN; %constant long int CDIO_CDROM_LBA = CDIO_CDROM_LBA; %constant long int CDIO_CDROM_MSF = CDIO_CDROM_MSF; %constant long int CDIO_CDROM_DATA_TRACK = CDIO_CDROM_DATA_TRACK; %constant long int CDIO_CDROM_CDI_TRACK = CDIO_CDROM_CDI_TRACK; %constant long int CDIO_CDROM_XA_TRACK = CDIO_CDROM_XA_TRACK; %constant long int AUDIO = AUDIO; %constant long int MODE1 = MODE1; %constant long int MODE1_RAW = MODE1_RAW; %constant long int MODE2 = MODE2; %constant long int MODE2_FORM1 = MODE2_FORM1; %constant long int MODE2_FORM2 = MODE2_FORM2; %constant long int MODE2_FORM_MIX = MODE2_FORM_MIX; %constant long int MODE2_RAW = MODE2_RAW; %constant long int INVALID_TRACK = CDIO_INVALID_TRACK; %constant long int CDROM_LEADOUT_TRACK = 0xAA; typedef int track_flag_t; %rename cdio_get_first_track_num get_first_track_num; %feature("autodoc", "get_first_track_num(p_cdio) -> int Get the number of the first track. return the track number or $perlcdio.INVALID_TRACK if there was a problem."); track_t cdio_get_first_track_num(const CdIo_t *p_cdio); %rename cdio_get_last_track_num get_last_track_num ; %feature("autodoc", "get_last_track_num Return the last track number. $perlcdio.INVALID_TRACK is if there was a problem."); track_t cdio_get_last_track_num (const CdIo_t *p_cdio); %rename cdio_get_track get_track; %feature("autodoc", "cdio_get_track(lsn)->int Find the track which contains lsn. $perlcdio.INVALID_TRACK is returned if the lsn outside of the CD or if there was some error. If the lsn is before the pregap of the first track, 0 is returned. Otherwise we return the track that spans the lsn."); track_t cdio_get_track(const CdIo_t *p_cdio, lsn_t lsn); %rename cdio_get_track_channels get_track_channels; %feature("autodoc", "get_track_channels(cdio, track)->int Return number of channels in track: 2 or 4; -2 if implemented or -1 for error. Not meaningful if track is not an audio track."); int cdio_get_track_channels(const CdIo_t *p_cdio, track_t i_track); %rename cdio_get_track_copy_permit get_track_copy_permit; %feature("autodoc", "get_copy_permit(cdio, track)->int Return copy protection status on a track. Is this meaningful not an audio track? "); track_flag_t cdio_get_track_copy_permit(const CdIo_t *p_cdio, track_t i_track); %feature("autodoc", "get_track_format(cdio, track)->format Get the format (audio, mode2, mode1) of track. "); const char *get_track_format(const CdIo_t *p_cdio, track_t i_track); %rename cdio_get_track_green is_track_green; %feature("autodoc", "is_track_green(cdio, track) -> bool Return True if we have XA data (green, mode2 form1) or XA data (green, mode2 form2). That is track begins: sync - header - subheader 12 4 - 8 FIXME: there's gotta be a better design for this and get_track_format?"); bool cdio_get_track_green(const CdIo_t *p_cdio, track_t i_track); %rename cdio_get_track_last_lsn get_track_last_lsn; %feature("autodoc", "cdio_get_track_last_lsn(cdio, track)->lsn Return the ending LSN for track number track in cdio. CDIO_INVALID_LSN is returned on error."); lsn_t cdio_get_track_last_lsn(const CdIo_t *p_cdio, track_t i_track); %rename cdio_get_track_lba get_track_lba; %feature("autodoc", "cdio_get_track_lba Get the starting LBA for track number i_track in p_cdio. Track numbers usually start at something greater than 0, usually 1. The 'leadout' track is specified either by setting i_track to $perl::CDIO_CDROM_LEADOUT_TRACK or one more than the number of tracks. @param p_cdio object to get information from @param i_track the track number we want the LSN for @return the starting LBA or CDIO_INVALID_LBA on error."); lba_t cdio_get_track_lba(const CdIo_t *p_cdio, track_t i_track); %rename cdio_get_track_lsn get_track_lsn; %feature("autodoc", "cdio_get_track_lsn (cdio, track)->int Return the starting LSN for track number. Track numbers usually start at something greater than 0, usually 1. The 'leadout' track is specified either by using i_track CDROM_LEADOUT_TRACK or the total tracks+1. $perlcdio::INVALID_LSN is returned on error."); lsn_t cdio_get_track_lsn(const CdIo_t *p_cdio, track_t i_track); %feature("autodoc", "get_track_msf(cdio,track)->string Return the starting MSF (minutes/secs/frames) for track number track. Track numbers usually start at something greater than 0, usually 1. The 'leadout' track is specified either by using i_track $perlcdio::CDROM_LEADOUT_TRACK or the total tracks+1. @return string mm:ss:ff if all good, or string 'error' on error."); const char *get_track_msf(const CdIo_t *p_cdio, track_t i_track); %inline %{ const char *get_track_msf(const CdIo_t *p_cdio, track_t i_track) { msf_t msf; char *psz_msf; if (!cdio_get_track_msf( p_cdio, i_track, &msf )) { return "error"; } psz_msf = cdio_msf_to_str( &msf ); return psz_msf; } %} %rename cdio_get_track_preemphasis get_track_preemphasis; %feature("autodoc", "cdio_get_track_preemphasis(cdio, track) Get linear preemphasis status on an audio track. This is not meaningful if not an audio track? "); track_flag_t cdio_get_track_preemphasis(const CdIo_t *p_cdio, track_t i_track); %rename cdio_get_track_sec_count get_track_sec_count; %feature("autodoc", "get_track_sec_count(cdio, track)->int Get the number of sectors between this track an the next. This includes any pregap sectors before the start of the next track. Track numbers usually start at something greater than 0, usually 1. 0 is returned if there is an error."); unsigned int cdio_get_track_sec_count(const CdIo_t *p_cdio, track_t i_track); %inline %{ const char *get_track_format(const CdIo_t *p_cdio, track_t i_track) { track_format_t track_format = cdio_get_track_format(p_cdio, i_track); return track_format2str[track_format]; } %} char * cdio_get_track_isrc(const CdIo_t *p_cdio, track_t i_track); Device-Cdio-v2.0.0/swig/audio.swg000444001750001750 1710513222226267 16374 0ustar00rockyrocky000000000000/* -*- c -*- Copyright (C) 2006, 2008, 2011, 2017 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /** NOTE: This is most of the easily-converted subset of libcdio's . For more, feel free to dig in and add. **/ /* See for more extensive documentation. */ %rename cdio_audio_pause audio_pause; %feature("autodoc", "audio_pause(cdio)->status Pause playing CD through analog output."); driver_return_code_t cdio_audio_pause (CdIo_t *p_cdio); %feature("autodoc", "audio_play_track_index(cdio, start_track, start_index, end_track, end_index)->status Playing CD through analog output at the desired start track and index, to the end track and index. Tracks should be in the valid CD track range 0..99. Just as a track number is burned into the CD, so is a an index for a track. It gives a position within the track. Use 0 for the beginning. "); driver_return_code_t audio_play_track_index (CdIo_t *p_cdio, int start_track, int start_index, int end_track, int end_index); %inline %{ #ifndef CLAMP # define CLAMP(val, min_value, max_value) \ ( (val < min_value ? min_value : \ ((val > max_value) ? max_value : val)) ) #endif driver_return_code_t audio_play_track_index(CdIo_t *p_cdio, int start_track, int start_index, int end_track, int end_index) { cdio_track_index_t track_index; track_index.i_start_track = (uint8_t) (CLAMP(start_track, 0, 99)); track_index.i_start_index = (uint8_t) (CLAMP(start_index, 0, 255)); track_index.i_start_track = (uint8_t) (CLAMP(end_track, 0, 99)); track_index.i_end_track = (uint8_t) (CLAMP(end_index, 0, 99)); return cdio_audio_play_track_index(p_cdio, &track_index); } %} %feature("autodoc", "auto_play_lsn(cdio, start_lsn, end_lsn)->status Playing CD through analog output at the given lsn to the ending lsn"); driver_return_code_t audio_play_lsn (CdIo_t *p_cdio, lsn_t start_lsn, lsn_t end_lsn); %inline %{ driver_return_code_t audio_play_lsn (CdIo_t *p_cdio, lsn_t start_lsn, lsn_t end_lsn) { msf_t start_msf; msf_t end_msf; cdio_lsn_to_msf (start_lsn, &start_msf); cdio_lsn_to_msf (end_lsn, &end_msf); return cdio_audio_play_msf(p_cdio, &start_msf, &end_msf); } %} %rename cdio_audio_resume audio_resume; %feature("autodoc", "audio_resume(cdio)->status Resume playing an audio CD."); driver_return_code_t cdio_audio_resume (CdIo_t *p_cdio); %rename cdio_audio_stop audio_stop; %feature("autodoc", "audio_stop(cdio)->status Stop playing an audio CD."); driver_return_code_t cdio_audio_stop (CdIo_t *p_cdio); %feature("autodoc", "return audio volume levels array"); %typemap(out) uint8_t,int { $result = sv_newmortal(); sv_setiv($result,(IV) $1); argvi++; } %typemap(out) uint8_t*,int* { AV *myav; SV **svs; if ($1) { svs = (SV **) malloc(4*sizeof(SV *)); svs[0] = sv_newmortal(); sv_setiv((SV*) svs[0],$1[0]); svs[1] = sv_newmortal(); sv_setiv((SV*) svs[1],$1[1]); svs[2] = sv_newmortal(); sv_setiv((SV*) svs[2],$1[2]); svs[3] = sv_newmortal(); sv_setiv((SV*) svs[3],$1[3]); myav = av_make(4,svs); free(svs); $result = newRV_noinc((SV*)myav); sv_2mortal($result); argvi++; } } %apply int *OUTPUT { int *rc }; uint8_t *audio_get_volume_levels (CdIo_t *p_cdio, int *rc); %inline %{ uint8_t *audio_get_volume_levels (CdIo_t *p_cdio, int *rc) { static uint8_t _volume[4]; driver_return_code_t drc; drc = cdio_audio_get_volume (p_cdio, (cdio_audio_volume_t*)&_volume); *rc = drc; return _volume; } %} %feature("autodoc", "audio_set_volume_levels(cdio, channel0, channel1, channel2, channel3)->status Set volume levels for playing CD through analog output. For strereo CDROM devices's (which is most of them) only channel0 and channel1 are used. 0 is the smallest volume and 255 is the largest valume. Values above 255 will be pegged at 255 and values below 0 will be pegged at 0. "); int audio_set_volume_levels(CdIo_t *p_cdio, int channel_vol1, int channel_vol2, int channel_vol3, int channel_vol4); %inline %{ #ifndef CLAMP # define CLAMP(val, min_value, max_value) \ ( (val < min_value ? min_value : \ ((val > max_value) ? max_value : val)) ) #endif int audio_set_volume_levels(CdIo_t *p_cdio, int channel_vol1, int channel_vol2, int channel_vol3, int channel_vol4) { static cdio_audio_volume_t audio_volume; audio_volume.level[0] = CLAMP(channel_vol1, 0, 255); audio_volume.level[1] = CLAMP(channel_vol2, 0, 255); audio_volume.level[2] = CLAMP(channel_vol3, 0, 255); audio_volume.level[3] = CLAMP(channel_vol4, 0, 255); return cdio_audio_set_volume(p_cdio, &audio_volume); } %} %apply int *OUTPUT { int *drc }; SV * audio_get_status ( CdIo_t *p_cdio, int *drc); %inline %{ extern uint8_t cdio_from_bcd8(uint8_t p); //static cdio_subchannel_t cdio_subchannel; SV * audio_get_status ( CdIo_t *p_cdio, int *drc) { static cdio_subchannel_t sub; driver_return_code_t rc; HV * audio_st; char *a_s_t; rc = cdio_audio_read_subchannel(p_cdio, &sub); *drc = rc; audio_st = newHV(); /* unsigned int msf_seconds(msf_t *msf) or * */ switch(sub.audio_status) { case 0x00: a_s_t = "INVALID"; break; case 0x11: a_s_t = "playing"; break; case 0x12: a_s_t = "paused"; break; case 0x13: a_s_t = "completed"; break; case 0x14: a_s_t = "ERROR"; break; case 0x15: a_s_t = "NO_STATUS"; break; default: a_s_t = "UNKNOWN"; } hv_store(audio_st, "format", 6, newSVuv(sub.format), 0); hv_store(audio_st, "audio_status", 12, newSVuv(sub.audio_status), 0); hv_store(audio_st, "status_text", 11, newSVpv(a_s_t, 0), 0); hv_store(audio_st, "address", 7, newSVuv(sub.address), 0); hv_store(audio_st, "control", 7, newSVuv(sub.control), 0); hv_store(audio_st, "track", 5, newSVuv(sub.track), 0); hv_store(audio_st, "index", 5, newSVuv(sub.index), 0); hv_store(audio_st, "abs_m", 5, newSVuv(cdio_from_bcd8(sub.abs_addr.m)), 0); hv_store(audio_st, "abs_s", 5, newSVuv(cdio_from_bcd8(sub.abs_addr.s)), 0); hv_store(audio_st, "abs_f", 5, newSVuv(cdio_from_bcd8(sub.abs_addr.f)), 0); hv_store(audio_st, "disk_s", 6, newSVuv(cdio_audio_get_msf_seconds(&sub.abs_addr)),0); hv_store(audio_st, "rel_m", 5, newSVuv(cdio_from_bcd8(sub.rel_addr.m)), 0); hv_store(audio_st, "rel_s", 5, newSVuv(cdio_from_bcd8(sub.rel_addr.s)), 0); hv_store(audio_st, "rel_f", 5, newSVuv(cdio_from_bcd8(sub.rel_addr.f)), 0); hv_store(audio_st, "track_s", 7, newSVuv(cdio_audio_get_msf_seconds(&sub.rel_addr)),0); return newRV_noinc(sv_2mortal((SV*)audio_st)); } %} Device-Cdio-v2.0.0/swig/perlcdio.swg000444001750001750 2414313222226267 17074 0ustar00rockyrocky000000000000/* -*- c -*- Copyright (C) 2006, 2008, 2011, 2012 Rocky Bernstein See end for license. */ %define DOCSTRING "This is a wrapper for The CD Input and Control library (libcdio) which encapsulates CD-ROM reading and control. Python programs wishing to be oblivious of the OS- and device-dependent properties of a CD-ROM can use this library." %enddef %module(docstring=DOCSTRING) perlcdio %{ /* Includes the header in the wrapper code */ #include #include #include #include #include %} %include "typemaps.i" /*%include "cstring.i"*/ /* Various libcdio constants and typedefs */ %include "types.swg" %feature("autodoc", 1); %include "audio.swg" %include "read.swg" %include "track.swg" %include "cdtext.swg" /* In the presence of the exception handling, the order is important. The below use %exception. */ %include "device.swg" %include "disc.swg" /* Encapsulation is done in two parts. The lower-level Perl interface is called perlcdio (this file) and is generated via SWIG. The more object-oriented module is Device::Cdio; it is a Perl class that uses perlcdio. Although perlcdio is perfectly usable on its own, it is expected that cdio is what most people will use. As pycdio more closely models the C interface, it is conceivable (if unlikely) that diehard libcdio C users who are very familiar with that interface could prefer that. It is probably possible to change the SWIG in such a way to combine these pieces. However there are the problems. First, I'm not that much of a SWIG expert. Second it looks as though the resulting SWIG code would be more complex. Third the separation makes translation very straight forward to understand and maintain: first get what's in C into Python as a one-to-one translation. Then we implement some nice abstraction off of that. The abstraction can be modified without having to redo the underlying translation. (But the reverse is generally not true: usually changes to the C-to-python translation, pycdio, do result in small, but obvious and straightforward changes to the abstraction layer cdio.) */ %feature("autodoc", "Returns the libcdio version string, i.e. the library Device::Cdio is currently using."); %inline %{ const char * cdio_version() { return CDIO_VERSION; } %} %perlcode %{ import Device::Cdio::VERSION; $VERSION = $Device::Cdio::VERSION; use strict; =pod =head1 NAME perlcdio - lower-level wrapper to libcdio, the CD Input and Control library =head1 SYNOPSIS This is fairly straight-forward wrapper around the C library libcdio. Although this is perfectly usable on its own, it is expected that the Object-Oriented interface L is what most people will want to use. There are various constants that are defined here. =head1 DESCRIPTION Encapsulation is done in two parts. The lower-level Perl interface is called perlcdio (this file) and is generated via SWIG. =head1 CONSTANTS =head2 Driver ID's =over 4 =item DRIVER_UNKNOWN Use when you don't know what kind of driver and you don't care if it is an CD image driver or a real CD-ROM driver. See also DRIVER_DEVICE which doesn't include image drivers. =item DRIVER_AIX Driver for IBM's AIX. =item DRIVER_BSDI Driver for BSDI. =item DRIVER_FREEBSD Driver for Free BSD =item DRIVER_LINUX Driver for GNU/LINUX =item DRIVER_SOLARIS Driver for Solaris =item DRIVER_OSX Driver for Apple's OS X. =item DRIVER_WIN32 Driver for Microsoft Windows =item DRIVER_CDRDAO Image Driver for cdrdao =item DRIVER_BINCUE Image driver for CDRWin BIN/CUE =item DRIVER_NRG Image driver for Nero NRG =item DRIVER_DEVICE Use when you don't know what kind of driver but the driver must be a real CD-ROM driver. See also DRIVER_UNKNOWN which includes image drivers. =back =head2 Driver Return codes May driver operations return a status code. =over 4 =item DRIVER_OP_SUCCESS Driver operation was successful =item DRIVER_OP_ERROR Driver operation had an error of some sort =item DRIVER_OP_UNSUPPORTED Operation is not supported for this driver. For example ejecting a CD from an image driver. =item DRIVER_OP_UNINIT Source is not initialized for this operation. =item DRIVER_OP_NOT_PERMITTED Operation is not permitted =item DRIVER_OP_BAD_PARAMETER An invalid parameter was passed to the routine =item DRIVER_OP_BAD_POINTER A pointer somehow got corrupted. =item DRIVER_OP_NO_DRIVER No driver has been set. =back =head2 Device Capabilities =head3 Miscellaneous =over 4 =item DRIVE_CAP_ERROR =item DRIVE_CAP_UNKNOWN =item DRIVE_CAP_MISC_CLOSE_TRAY =item DRIVE_CAP_MISC_EJECT =item DRIVE_CAP_MISC_LOCK =item DRIVE_CAP_MISC_SELECT_SPEED =item DRIVE_CAP_MISC_SELECT_DISC =item DRIVE_CAP_MISC_MULTI_SESSION =item DRIVE_CAP_MISC_MEDIA_CHANGED =item DRIVE_CAP_MISC_RESET =item DRIVE_CAP_MISC_FILE =back =head3 Read Capabilities =over 4 =item DRIVE_CAP_READ_AUDIO =item DRIVE_CAP_READ_CD_DA =item DRIVE_CAP_READ_CD_G =item DRIVE_CAP_READ_CD_R =item DRIVE_CAP_READ_CD_RW =item DRIVE_CAP_READ_DVD_R =item DRIVE_CAP_READ_DVD_PR =item DRIVE_CAP_READ_DVD_RAM =item DRIVE_CAP_READ_DVD_ROM =item DRIVE_CAP_READ_DVD_RW =item DRIVE_CAP_READ_DVD_RPW =item DRIVE_CAP_READ_C2_ERRS =item DRIVE_CAP_READ_MODE2_FORM1 =item DRIVE_CAP_READ_MODE2_FORM2 =item DRIVE_CAP_READ_MCN =item DRIVE_CAP_READ_ISRC =back =head2 Writing masks =over 4 =item DRIVE_CAP_WRITE_CD_R =item DRIVE_CAP_WRITE_CD_RW =item DRIVE_CAP_WRITE_DVD_R =item DRIVE_CAP_WRITE_DVD_PR =item DRIVE_CAP_WRITE_DVD_RAM =item DRIVE_CAP_WRITE_DVD_RW =item DRIVE_CAP_WRITE_DVD_RPW =item DRIVE_CAP_WRITE_MT_RAINIER =item DRIVE_CAP_WRITE_BURN_PROOF =back =head3 Derived Capabilities =over 4 =item DRIVE_CAP_WRITE_CD Has some sort of CD writer ability =item DRIVE_CAP_WRITE_DVD Has some sort of DVD writer ability =item DRIVE_CAP_WRITE Has some sort of writer ability =back =head2 Filesystem type constants These constants are used in getting drive capabilities: =over 4 =item FS_AUDIO audio only - not really a filesystem =item FS_HIGH_SIERRA High-Sierra Filesystem =item FS_ISO_9660 ISO-9660 filesystem =item FS_INTERACTIVE =item FS_HFS file system used on the Macintosh system in MacOS 6 through MacOS 9 and deprecated in OSX =item FS_UFS Generic Unix file system derived from the Berkeley fast file system. =item FS_EXT2 EXT2 was the GNU/Linux native filesystem for early kernels. Newer GNU/Linux OS's may use EXT3 which EXT2 with a journal. =item FS_ISO_HFS both HFS & ISO-9660 filesystem =item FS_ISO_9660_INTERACTIVE both CD-RTOS and ISO filesystem =item FS_3DO The 3DO is, technically, a set of specifications created by the 3DO company. These specs are for making a 3DO Interactive Multiplayer which uses a CD-player. Panasonic in the early 90's was the first company to manufacture and market a 3DO player. =item FS_XISO Microsoft X-BOX CD =item FS_UDFX =item FS_UDF =item FS_ISO_UDF =item FS_ANAL_XA eXtended Architecture format =item FS_ANAL_MULTISESSION CD has multisesion =item FS_ANAL_PHOTO_CD Is a Kodak Photo CD =item FS_ANAL_HIDDEN_TRACK Hidden track at the beginning the CD =item FS_ANAL_CDTV =item FS_ANAL_BOOTABLE CD is bootable =item FS_ANAL_VIDEOCD VCD 1.1 =item FS_ANAL_ROCKRIDGE Has Rock Ridge Extensions to ISO 9660 =item FS_ANAL_JOLIET Microsoft Joliet extensions to ISO 9660 =item FS_ANAL_SVCD Super VCD or Choiji Video CD =item FS_ANAL_CVD Choiji Video CD =item FS_ANAL_XISO XBOX CD determined by some analysis =item FS_MATCH_ALL bitmask which can be used to specify matching any sort of CD =back =head2 Sector size constants =over 4 =item CD_FRAMESIZE =item CD_FRAMESIZE_RAW Size of a Philip Red book CD-DA block. It is also the maximum CD sector size possible: 2352 bytes. =item ISO_BLOCKSIZE Size of an ISO 9660 block. Also the size of the data portion in CD data reads: 2048 bytes. =item M2F2_SECTOR_SIZE Mode 2 Form 2 Data size: 2328 bytes. =item M2RAW_SECTOR_SIZE Mod1 Form 1 Data size: 2336 bytes. =back =head2 Reading Modes =over 4 =item READ_MODE_AUDIO audio mode (CD-DA) read. Blocksize is a multiple of $perlcdio::CD_FRAMESIZE_RAW (2352) bytes. =item READ_MODE_M1F1 Mode 1 Form 1 read. Blocksize is a multiple of $perlcdio::CD_FRAMESIZE (2048) bytes. =item READ_MODE_M1F2 Mode 1 Form 2 read. Blocksize is a multiple of $perlcdio::M2RAW_SECTIOR_SIZE (2336) bytes. =item READ_MODE_M2F1 Mode 2 Form 1 read. Blocksize is a multiple of $perlcdio::CD_FRAMESIZE (2048) bytes. =item READ_MODE_M2F2 Mode 2 Form 1 read. Blocksize is a multiple of (2328) bytes. =back =head2 Miscellaneous =over 4 =item VERSION_NUM libcdio version that is getting used =item INVALID_LBA Canonical value used for an invalid LBA. =item INVALID_LSN Canonical value used for an invalid LSN. =item INVALID_TRACK Canonical value used for an invalid track number. (Valid range is 0 to 99.) =item LEADOUT_TRACK Canonical value for the "leadout" or track just after the last track. So again this value is outside the range 0 to 99. The leadout track is often used to get the last LSN or LBA. The libcdio routines also allow the last actual track plus one as a synonym for the leadout track. =back =head1 METHODS =head2 cdio_version perlcdio::cdio_version Returns the libcdio version string Device::Cdio is currently linked with. =head2 this This seems to be an artifact of SWIG. =head1 SEE ALSO L has documentation on libcdio including the a manual and the API via doxygen. =head1 AUTHORS Rocky Bernstein C<< >>. =head1 COPYRIGHT Copyright (C) 2006, 2008, 2011 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . =cut %} Device-Cdio-v2.0.0/swig/perlmmc.swg000444001750001750 5300513222226267 16731 0ustar00rockyrocky000000000000/* -*- c -*- Copyright (C) 2006, 2008, 2011 Rocky Bernstein See end for license. */ %define DOCSTRING "A Perl wrapper for The CD Input and Control library's ISO-9660 library's MultiMedia Commands (MMC)." %enddef %module(docstring=DOCSTRING) perlmmc /* See for more extensive documentation. */ %{ /* Includes the header in the wrapper code */ #include #include %} #include #include %include "types.swg" typedef long int cdio_mmc_level_t; %constant long int GPCMD_INQUIRY = CDIO_MMC_GPCMD_INQUIRY; %constant long int GPCMD_MODE_SELECT_6 = CDIO_MMC_GPCMD_MODE_SELECT_6; %constant long int GPCMD_MODE_SENSE_6 = CDIO_MMC_GPCMD_MODE_SENSE_6; %constant long int GPCMD_START_STOP = CDIO_MMC_GPCMD_START_STOP; %constant long int GPCMD_ALLOW_MEDIUM_REMOVAL = CDIO_MMC_GPCMD_ALLOW_MEDIUM_REMOVAL; /** Group 2 Commands (CDB's here are 10-bytes) */ %constant long int CDIO_MMC_GPCMD_READ_10 = CDIO_MMC_GPCMD_READ_10; %constant long int GPCMD_READ_SUBCHANNEL = CDIO_MMC_GPCMD_READ_SUBCHANNEL; %constant long int GPCMD_READ_HEADER = CDIO_MMC_GPCMD_READ_HEADER; %constant long int GPCMD_PLAY_AUDIO_10 = CDIO_MMC_GPCMD_PLAY_AUDIO_10; %constant long int GPCMD_GET_CONFIGURATION = CDIO_MMC_GPCMD_GET_CONFIGURATION; %constant long int GPCMD_PLAY_AUDIO_MSF = CDIO_MMC_GPCMD_PLAY_AUDIO_MSF; %constant long int GPCMD_PLAY_AUDIO_TI = CDIO_MMC_GPCMD_PLAY_AUDIO_TI; %constant long int GPCMD_PLAY_TRACK_REL_10 = CDIO_MMC_GPCMD_PLAY_TRACK_REL_10; %constant long int GPCMD_GET_EVENT_STATUS = CDIO_MMC_GPCMD_GET_EVENT_STATUS; %constant long int GPCMD_PAUSE_RESUME = CDIO_MMC_GPCMD_PAUSE_RESUME; %constant long int GPCMD_READ_DISC_INFO = CDIO_MMC_GPCMD_READ_DISC_INFO; %constant long int GPCMD_MODE_SELECT_10 = CDIO_MMC_GPCMD_MODE_SELECT_10; %constant long int GPCMD_MODE_SENSE_10 = CDIO_MMC_GPCMD_MODE_SENSE_10; %constant long int GPCMD_PLAY_AUDIO_12 = CDIO_MMC_GPCMD_PLAY_AUDIO_12; %constant long int GPCMD_LOAD_UNLOAD = CDIO_MMC_GPCMD_LOAD_UNLOAD; %constant long int GPCMD_READ_12 = CDIO_MMC_GPCMD_READ_12; %constant long int GPCMD_PLAY_TRACK_REL_12 = CDIO_MMC_GPCMD_PLAY_TRACK_REL_12; %constant long int GPCMD_READ_DVD_STRUCTURE= CDIO_MMC_GPCMD_READ_DVD_STRUCTURE; %constant long int GPCMD_READ_MSF = CDIO_MMC_GPCMD_READ_MSF; %constant long int GPCMD_SET_SPEED = CDIO_MMC_GPCMD_SET_SPEED; %constant long int GPCMD_READ_CD = CDIO_MMC_GPCMD_READ_CD; /** Vendor-unique Commands */ %constant long int GPCMD_CD_PLAYBACK_STATUS= CDIO_MMC_GPCMD_CD_PLAYBACK_STATUS; %constant long int GPCMD_PLAYBACK_CONTROL = CDIO_MMC_GPCMD_PLAYBACK_CONTROL; %constant long int GPCMD_READ_CDDA = CDIO_MMC_GPCMD_READ_CDDA; %constant long int GPCMD_READ_CDXA = CDIO_MMC_GPCMD_READ_CDXA; %constant long int GPCMD_READ_ALL_SUBCODES = CDIO_MMC_GPCMD_READ_ALL_SUBCODES; /** Read Subchannel states */ %constant long int READ_SUB_ST_INVALID = CDIO_MMC_READ_SUB_ST_INVALID; %constant long int READ_SUB_ST_PLAY = CDIO_MMC_READ_SUB_ST_PLAY; %constant long int READ_SUB_ST_PAUSED = CDIO_MMC_READ_SUB_ST_PAUSED; %constant long int READ_SUB_ST_COMPLETED = CDIO_MMC_READ_SUB_ST_COMPLETED; %constant long int READ_SUB_ST_ERROR = CDIO_MMC_READ_SUB_ST_ERROR; %constant long int READ_SUB_ST_NO_STATUS = CDIO_MMC_READ_SUB_ST_NO_STATUS; %constant long int READ_TYPE_ANY = CDIO_MMC_READ_TYPE_ANY; %constant long int READ_TYPE_CDDA = CDIO_MMC_READ_TYPE_CDDA; %constant long int READ_TYPE_MODE1 = CDIO_MMC_READ_TYPE_MODE1; %constant long int READ_TYPE_MODE2 = CDIO_MMC_READ_TYPE_MODE2; %constant long int READ_TYPE_M2F1 = CDIO_MMC_READ_TYPE_M2F1; %constant long int READ_TYPE_M2F2 = CDIO_MMC_READ_TYPE_M2F2; /*! Format values for READ_TOC */ %constant long int READTOC_FMT_TOC = CDIO_MMC_READTOC_FMT_TOC; %constant long int READTOC_FMT_SESSION = CDIO_MMC_READTOC_FMT_SESSION; %constant long int READTOC_FMT_FULTOC = CDIO_MMC_READTOC_FMT_FULTOC; %constant long int CDIO_MMC_READTOC_FMT_PMA= CDIO_MMC_READTOC_FMT_PMA; %constant long int READTOC_FMT_PMA = CDIO_MMC_READTOC_FMT_PMA; %constant long int READTOC_FMT_ATIP = CDIO_MMC_READTOC_FMT_ATIP; %constant long int READTOC_FMT_CDTEXT = CDIO_MMC_READTOC_FMT_CDTEXT; /* Page codes for MODE SENSE and MODE SET. */ %constant long int R_W_ERROR_PAGE = CDIO_MMC_R_W_ERROR_PAGE; %constant long int WRITE_PARMS_PAGE = CDIO_MMC_WRITE_PARMS_PAGE; %constant long int CDR_PARMS_PAGE = CDIO_MMC_CDR_PARMS_PAGE; %constant long int AUDIO_CTL_PAGE = CDIO_MMC_AUDIO_CTL_PAGE; %constant long int POWER_PAGE = CDIO_MMC_POWER_PAGE; %constant long int FAULT_FAIL_PAGE = CDIO_MMC_FAULT_FAIL_PAGE; %constant long int TO_PROTECT_PAGE = CDIO_MMC_TO_PROTECT_PAGE; %constant long int CAPABILITIES_PAGE = CDIO_MMC_CAPABILITIES_PAGE; %constant long int ALL_PAGES = CDIO_MMC_ALL_PAGES; /* Return type codes for GET_CONFIGURATION. */ %constant long int GET_CONF_ALL_FEATURES = CDIO_MMC_GET_CONF_ALL_FEATURES; %constant long int GET_CONF_CURRENT_FEATURES= CDIO_MMC_GET_CONF_CURRENT_FEATURES; %constant long int GET_CONF_NAMED_FEATURE = CDIO_MMC_GET_CONF_NAMED_FEATURE; /* FEATURE codes used in GET CONFIGURATION. */ %constant long int FEATURE_PROFILE_LIST = CDIO_MMC_FEATURE_PROFILE_LIST; %constant long int FEATURE_CORE = CDIO_MMC_FEATURE_CORE; %constant long int FEATURE_MORPHING = CDIO_MMC_FEATURE_MORPHING; %constant long int FEATURE_REMOVABLE_MEDIUM= CDIO_MMC_FEATURE_REMOVABLE_MEDIUM; %constant long int FEATURE_WRITE_PROTECT = CDIO_MMC_FEATURE_WRITE_PROTECT; %constant long int FEATURE_RANDOM_READABLE = CDIO_MMC_FEATURE_RANDOM_READABLE; %constant long int FEATURE_MULTI_READ = CDIO_MMC_FEATURE_MULTI_READ; %constant long int FEATURE_CD_READ = CDIO_MMC_FEATURE_CD_READ; %constant long int FEATURE_DVD_READ = CDIO_MMC_FEATURE_DVD_READ; %constant long int FEATURE_RANDOM_WRITABLE = CDIO_MMC_FEATURE_RANDOM_WRITABLE; %constant long int FEATURE_INCR_WRITE = CDIO_MMC_FEATURE_INCR_WRITE; %constant long int FEATURE_SECTOR_ERASE = CDIO_MMC_FEATURE_SECTOR_ERASE; %constant long int FEATURE_FORMATABLE = CDIO_MMC_FEATURE_FORMATABLE; %constant long int FEATURE_DEFECT_MGMT = CDIO_MMC_FEATURE_DEFECT_MGMT; %constant long int FEATURE_WRITE_ONCE = CDIO_MMC_FEATURE_WRITE_ONCE; %constant long int FEATURE_RESTRICT_OVERW = CDIO_MMC_FEATURE_RESTRICT_OVERW; %constant long int FEATURE_CD_RW_CAV = CDIO_MMC_FEATURE_CD_RW_CAV; %constant long int FEATURE_MRW = CDIO_MMC_FEATURE_MRW; %constant long int FEATURE_ENHANCED_DEFECT = CDIO_MMC_FEATURE_ENHANCED_DEFECT; %constant long int FEATURE_DVD_PRW = CDIO_MMC_FEATURE_DVD_PRW; %constant long int FEATURE_DVD_PR = CDIO_MMC_FEATURE_DVD_PR; %constant long int FEATURE_RIGID_RES_OVERW = CDIO_MMC_FEATURE_RIGID_RES_OVERW; %constant long int FEATURE_CD_TAO = CDIO_MMC_FEATURE_CD_TAO; %constant long int FEATURE_CD_SAO = CDIO_MMC_FEATURE_CD_SAO; %constant long int FEATURE_DVD_R_RW_WRITE = CDIO_MMC_FEATURE_DVD_R_RW_WRITE; %constant long int FEATURE_CD_RW_MEDIA_WRITE= CDIO_MMC_FEATURE_CD_RW_MEDIA_WRITE; %constant long int FEATURE_DVD_PR_2_LAYER = CDIO_MMC_FEATURE_DVD_PR_2_LAYER; %constant long int FEATURE_POWER_MGMT = CDIO_MMC_FEATURE_POWER_MGMT; %constant long int FEATURE_CDDA_EXT_PLAY = CDIO_MMC_FEATURE_CDDA_EXT_PLAY; %constant long int FEATURE_MCODE_UPGRADE = CDIO_MMC_FEATURE_MCODE_UPGRADE; %constant long int FEATURE_TIME_OUT = CDIO_MMC_FEATURE_TIME_OUT; %constant long int FEATURE_DVD_CSS = CDIO_MMC_FEATURE_DVD_CSS; %constant long int FEATURE_RT_STREAMING = CDIO_MMC_FEATURE_RT_STREAMING; %constant long int FEATURE_LU_SN = CDIO_MMC_FEATURE_LU_SN; %constant long int FEATURE_FIRMWARE_DATE = CDIO_MMC_FEATURE_FIRMWARE_DATE; /* Profile profile codes used in GET_CONFIGURATION - PROFILE LIST. */ %constant long int FEATURE_PROF_NON_REMOVABLE = CDIO_MMC_FEATURE_PROF_NON_REMOVABLE; %constant long int FEATURE_PROF_REMOVABLE = CDIO_MMC_FEATURE_PROF_REMOVABLE; %constant long int FEATURE_PROF_MO_ERASABLE= CDIO_MMC_FEATURE_PROF_MO_ERASABLE; %constant long int FEATURE_PROF_MO_WRITE_ONCE= CDIO_MMC_FEATURE_PROF_MO_WRITE_ONCE; %constant long int FEATURE_PROF_AS_MO = CDIO_MMC_FEATURE_PROF_AS_MO; %constant long int FEATURE_PROF_CD_ROM = CDIO_MMC_FEATURE_PROF_CD_ROM; %constant long int FEATURE_PROF_CD_R = CDIO_MMC_FEATURE_PROF_CD_R; %constant long int FEATURE_PROF_CD_RW = CDIO_MMC_FEATURE_PROF_CD_RW; %constant long int FEATURE_PROF_DVD_ROM = CDIO_MMC_FEATURE_PROF_DVD_ROM; %constant long int FEATURE_PROF_DVD_R_SEQ = CDIO_MMC_FEATURE_PROF_DVD_R_SEQ; %constant long int FEATURE_PROF_DVD_RAM = CDIO_MMC_FEATURE_PROF_DVD_RAM; %constant long int FEATURE_PROF_DVD_RW_RO = CDIO_MMC_FEATURE_PROF_DVD_RW_RO; %constant long int FEATURE_PROF_DVD_RW_SEQ = CDIO_MMC_FEATURE_PROF_DVD_RW_SEQ; %constant long int FEATURE_PROF_DVD_PRW = CDIO_MMC_FEATURE_PROF_DVD_PRW; %constant long int FEATURE_PROF_DVD_PR = CDIO_MMC_FEATURE_PROF_DVD_PR; %constant long int FEATURE_PROF_DDCD_ROM = CDIO_MMC_FEATURE_PROF_DDCD_ROM; %constant long int FEATURE_PROF_DDCD_R = CDIO_MMC_FEATURE_PROF_DDCD_R; %constant long int FEATURE_PROF_DDCD_RW = CDIO_MMC_FEATURE_PROF_DDCD_RW; %constant long int FEATURE_PROF_DVD_PR = CDIO_MMC_FEATURE_PROF_DVD_PR; %constant long int FEATURE_PROF_NON_CONFORM= CDIO_MMC_FEATURE_PROF_NON_CONFORM; %constant long int FEATURE_INTERFACE_UNSPECIFIED = CDIO_MMC_FEATURE_INTERFACE_UNSPECIFIED; %constant long int FEATURE_INTERFACE_SCSI = CDIO_MMC_FEATURE_INTERFACE_SCSI; %constant long int FEATURE_INTERFACE_ATAPI = CDIO_MMC_FEATURE_INTERFACE_ATAPI; %constant long int FEATURE_INTERFACE_IEEE_1394= CDIO_MMC_FEATURE_INTERFACE_IEEE_1394; %constant long int FEATURE_INTERFACE_IEEE_1394A= CDIO_MMC_FEATURE_INTERFACE_IEEE_1394A; %constant long int FEATURE_INTERFACE_FIBRE_CH= CDIO_MMC_FEATURE_INTERFACE_FIBRE_CH; %feature("autodoc", "Read Audio Subchannel information param p_cdio the CD object to be acted upon. param p_subchannel place for returned subchannel information ."); %rename mmc_audio_read_subchannel audio_read_subchannel; %feature("autodoc", "Return a string containing the name of the audio state as returned from the Q_SUBCHANNEL. "); %rename mmc_audio_state2str audio_state2str; /*! Eject using MMC commands. If CD-ROM is "locked" we'll unlock it. Command is not "immediate" -- we'll wait for the command to complete. For a more general (and lower-level) routine, @see mmc_start_stop_media. */ //%rename mmc_eject_media eject_media; int mmc_eject_media(const CdIo_t *p_cdio); %inline %{ extern int mmc_eject_media(const CdIo_t *p_cdio); %} /*! Return a string containing the name of the given feature */ %rename mmc_feature2str feature2str; /*! Return a string containing the name of the given feature */ %rename mmc_feature_profile2str feature_profile2str; /*! Return the length in bytes of the Command Descriptor Buffer (CDB) for a given MMC command. The length will be either 6, 10, or 12. */ %rename mmc_get_cmd_len get_cmd_len; /*! Get the block size used in read requests, via MMC. @return the blocksize if > 0; error if <= 0 */ %rename mmc_get_blocksize get_blocksize; /*! Get the lsn of the end of the CD @return the lsn. On error return CDIO_INVALID_LSN. */ %rename mmc_get_disc_last_lsn get_lsn; /*! Return the discmode as reported by the MMC Read (FULL) TOC command. Information was obtained from Section 5.1.13 (Read TOC/PMA/ATIP) pages 56-62 from the MMC draft specification, revision 10a at http://www.t10.org/ftp/t10/drafts/mmc/mmc-r10a.pdf See especially tables 72, 73 and 75. */ %rename mmc_get_discmode get_discmode; /*! Get drive capabilities for a device. @return the drive capabilities. */ %rename mmc_get_drive_cap get_drive_cap; /*! Get the MMC level supported by the device. */ %rename mmc_get_drive_mmc_cap get_drive_mmc_cap; /*! Get the DVD type associated with cd object. @return the DVD discmode. */ %rename mmc_get_dvd_struct_physical get_dvd_struct_physical; /*! Get the CD-ROM hardware info via an MMC INQUIRY command. @return true if we were able to get hardware info, false if we had an error. */ %rename mmc_get_hwinfo get_hwinfo; /*! Find out if media has changed since the last call. @param p_cdio the CD object to be acted upon. @return 1 if media has changed since last call, 0 if not. Error return codes are the same as driver_return_code_t */ %rename mmc_get_media_changed get_media_changed; /*! Get the media catalog number (MCN) from the CD via MMC. @return the media catalog number r NULL if there is none or we don't have the ability to get it. Note: string is malloc'd so caller has to free() the returned string when done with it. */ %rename mmc_get_mcn get_mcn; /** Get the output port volumes and port selections used on AUDIO PLAY commands via a MMC MODE SENSE command using the CD Audio Control Page. */ %rename mmc_audio_get_volume audio_get_volume; /*! Report if CD-ROM has a praticular kind of interface (ATAPI, SCSCI, ...) Is it possible for an interface to have serveral? If not this routine could probably return the single mmc_feature_interface_t. @return true if we have the interface and false if not. */ %rename mmc_have_interface have_interface; /*! Run a MODE_SENSE command (6- or 10-byte version) and put the results in p_buf @return DRIVER_OP_SUCCESS if we ran the command ok. */ %rename mmc_mode_sense mode_sense; /*! Run a MODE_SENSE command (10-byte version) and put the results in p_buf @return DRIVER_OP_SUCCESS if we ran the command ok. */ %rename mmc_mode_sense_10 mode_sense_10; /*! Run a MODE_SENSE command (6-byte version) and put the results in p_buf @return DRIVER_OP_SUCCESS if we ran the command ok. */ %rename mmc_mode_sense_6 mode_sense_6; /*! Issue a MMC READ_CD command. @param p_cdio object to read from @param p_buf Place to store data. The caller should ensure that p_buf can hold at least i_blocksize * i_blocks bytes. @param i_lsn sector to read @param expected_sector_type restricts reading to a specific CD sector type. Only 3 bits with values 1-5 are used: 0 all sector types 1 CD-DA sectors only 2 Mode 1 sectors only 3 Mode 2 formless sectors only. Note in contrast to all other values an MMC CD-ROM is not required to support this mode. 4 Mode 2 Form 1 sectors only 5 Mode 2 Form 2 sectors only @param b_digital_audio_play Control error concealment when the data being read is CD-DA. If the data being read is not CD-DA, this parameter is ignored. If the data being read is CD-DA and DAP is false zero, then the user data returned should not be modified by flaw obscuring mechanisms such as audio data mute and interpolate. If the data being read is CD-DA and DAP is true, then the user data returned should be modified by flaw obscuring mechanisms such as audio data mute and interpolate. b_sync_header return the sync header (which will probably have the same value as CDIO_SECTOR_SYNC_HEADER of size CDIO_CD_SYNC_SIZE). @param header_codes Header Codes refer to the sector header and the sub-header that is present in mode 2 formed sectors: 0 No header information is returned. 1 The 4-byte sector header of data sectors is be returned, 2 The 8-byte sector sub-header of mode 2 formed sectors is returned. 3 Both sector header and sub-header (12 bytes) is returned. The Header preceeds the rest of the bytes (e.g. user-data bytes) that might get returned. @param b_user_data Return user data if true. For CD-DA, the User Data is CDIO_CD_FRAMESIZE_RAW bytes. For Mode 1, The User Data is ISO_BLOCKSIZE bytes beginning at offset CDIO_CD_HEADER_SIZE+CDIO_CD_SUBHEADER_SIZE. For Mode 2 formless, The User Data is M2RAW_SECTOR_SIZE bytes beginning at offset CDIO_CD_HEADER_SIZE+CDIO_CD_SUBHEADER_SIZE. For data Mode 2, form 1, User Data is ISO_BLOCKSIZE bytes beginning at offset CDIO_CD_XA_SYNC_HEADER. For data Mode 2, form 2, User Data is 2 324 bytes beginning at offset CDIO_CD_XA_SYNC_HEADER. @param b_sync @param b_edc_ecc true if we return EDC/ECC error detection/correction bits. The presence and size of EDC redundancy or ECC parity is defined according to sector type: CD-DA sectors have neither EDC redundancy nor ECC parity. Data Mode 1 sectors have 288 bytes of EDC redundancy, Pad, and ECC parity beginning at offset 2064. Data Mode 2 formless sectors have neither EDC redundancy nor ECC parity Data Mode 2 form 1 sectors have 280 bytes of EDC redundancy and ECC parity beginning at offset 2072 Data Mode 2 form 2 sectors optionally have 4 bytes of EDC redundancy beginning at offset 2348. @param c2_error_information If true associate a bit with each sector for C2 error The resulting bit field is ordered exactly as the main channel bytes. Each 8-bit boundary defines a byte of flag bits. @param subchannel_selection subchannel-selection bits 0 No Sub-channel data shall be returned. (0 bytes) 1 RAW P-W Sub-channel data shall be returned. (96 byte) 2 Formatted Q sub-channel data shall be transferred (16 bytes) 3 Reserved 4 Corrected and de-interleaved R-W sub-channel (96 bytes) 5-7 Reserved @param i_blocksize size of the a block expected to be returned @param i_blocks number of blocks expected to be returned. */ %rename mmc_read_cd read_cd; /*! Read just the user data part of some sort of data sector (via mmc_read_cd). @param p_cdio object to read from @param p_buf place to read data into. The caller should make sure this location can store at least CDIO_CD_FRAMESIZE, M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE depending on the kind of sector getting read. If you don't know whether you have a Mode 1/2, Form 1/ Form 2/Formless sector best to reserve space for the maximum, M2RAW_SECTOR_SIZE. @param i_lsn sector to read @param i_blocksize size of each block @param i_blocks number of blocks to read */ %rename mmc_read_data_sectors read_data_sectors; /*! Read sectors using SCSI-MMC GPCMD_READ_CD. Can read only up to 25 blocks. */ %rename mmc_read_sectors read_sectors; /*! Run a Multimedia command (MMC). @param p_cdio CD structure set by cdio_open(). @param i_timeout_ms time in milliseconds we will wait for the command to complete. @param p_cdb CDB bytes. All values that are needed should be set on input. We'll figure out what the right CDB length should be. @param e_direction direction the transfer is to go. @param i_buf Size of buffer @param p_buf Buffer for data, both sending and receiving. @return 0 if command completed successfully. */ %rename mmc_run_cmd run_cmd; /*! Set the block size for subsequest read requests, via MMC. */ %rename mmc_set_blocksize set_blocksize; /*! Set the drive speed. */ %rename mmc_set_speed set_speed; /*! Load or Unload media using a MMC START STOP command. @param p_cdio the CD object to be acted upon. @param b_eject eject if true and close tray if false @param b_immediate wait or don't wait for operation to complete @param power_condition Set CD-ROM to idle/standby/sleep. If nonzero eject/load is ignored, so set to 0 if you want to eject or load. @see mmc_eject_media or mmc_close_tray */ %rename mmc_start_stop_unit stop_media; int mmc_start_stop_unit (const CdIo_t *p_cdio); %feature("autodoc", "mmc_start_stop_unit cmd, a more general (and lower-level) routine to eject media / open tray. mmc_eject_media sometimes does not work."); int mmc_close_tray(CdIo_t *p_cdio); extern char * mmc_get_isrc(CdIo_t *p_cdio, track_t track); %inline %{ extern int mmc_close_tray(CdIo_t *p_cdio); extern int mmc_start_stop_unit (const CdIo_t *p_cdio); extern char *mmc_get_track_isrc (const CdIo_t *p_cdio, track_t i_track); char * mmc_get_isrc(CdIo_t *p_cdio, track_t track) { return mmc_get_track_isrc (p_cdio, track); } %} %perlcode %{ import Device::Cdio::VERSION; $VERSION = $Device::Cdio::VERSION; use strict; =pod =head1 NAME perlmmc - lower-level wrapper to MMC from libcdio, the ISO 9660 library of the CD Input and Control package =head1 SYNOPSIS This is fairly straight-forward wrapper around the MultiMedia commands from the C library libcdio. Although this is perfectly usable on its own, it is expected that the interfaces L or L is what most people will want to use. There are various constants that are defined here. =head1 METHODS =head2 this This seems to be an artifact of SWIG. =head1 SEE ALSO L has documentation on libcdio including the a manual and the API via doxygen. =head1 AUTHORS Rocky Bernstein C<< >>. =head1 COPYRIGHT Copyright (C) 2006, 2008, 2011 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . =cut %} Device-Cdio-v2.0.0/swig/disc.swg000444001750001750 1360313222226267 16214 0ustar00rockyrocky000000000000/* -*- c -*- Copyright (C) 2006, 2008, 2011, 2012 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* See for more extensive documentation. */ %constant long int DISC_MODE_CD_DA = CDIO_DISC_MODE_CD_DA; %constant long int DISC_MODE_CD_DATA = CDIO_DISC_MODE_CD_DATA; %constant long int DISC_MODE_CD_XA = CDIO_DISC_MODE_CD_XA; %constant long int DISC_MODE_CD_MIXED = CDIO_DISC_MODE_CD_MIXED; %constant long int DISC_MODE_DVD_ROM = CDIO_DISC_MODE_DVD_ROM; %constant long int DISC_MODE_DVD_RAM = CDIO_DISC_MODE_DVD_RAM; %constant long int DISC_MODE_DVD_R = CDIO_DISC_MODE_DVD_R; %constant long int DISC_MODE_DVD_RW = CDIO_DISC_MODE_DVD_RW; %constant long int DISC_MODE_DVD_PR = CDIO_DISC_MODE_DVD_PR; %constant long int DISC_MODE_DVD_PRW = CDIO_DISC_MODE_DVD_PRW; %constant long int DISC_MODE_DVD_OTHER = CDIO_DISC_MODE_DVD_OTHER; %constant long int DISC_MODE_NO_INFO = CDIO_DISC_MODE_NO_INFO; %constant long int DISC_MODE_ERROR = CDIO_DISC_MODE_ERROR; %constant long int DISC_MODE_CD_I = CDIO_DISC_MODE_CD_I; %rename cdio_get_disc_last_lsn get_disc_last_lsn; %feature("autodoc", "get_disc_last_lsn(cdio)->lsn Get the LSN of the end of the CD. perlcdio.INVALID_LSN is returned on error."); lsn_t cdio_get_disc_last_lsn(const CdIo_t *p_cdio); %feature("autodoc", "get_disc_mode(p_cdio) -> str Get disc mode - the kind of CD (CD-DA, CD-ROM mode 1, CD-MIXED, etc. that we've got. The notion of 'CD' is extended a little to include DVD's."); const char *get_disc_mode (CdIo_t *p_cdio); %rename cdio_get_joliet_level get_joliet_level; %feature("autodoc", "get_joliet_level(cdio)->int Return the Joliet level recognized for cdio. This only makes sense for something that has an ISO-9660 filesystem."); int cdio_get_joliet_level(const CdIo_t *p_cdio); /*! Get the media catalog number (MCN) from the CD. @return the media catalog number or NULL if there is none or we don't have the ability to get it. Note: string is malloc'd so caller has to free() the returned string when done with it. */ %rename cdio_get_mcn get_mcn; %newobject cdio_get_mcn; // free malloc'd return value char * cdio_get_mcn (const CdIo_t *p_cdio); %rename cdio_get_num_tracks get_num_tracks; %feature("autodoc", "get_num_tracks(p_cdio)->int Return the number of tracks on the CD. On error $perlcdio::INVALID_TRACK is returned."); track_t cdio_get_num_tracks (const CdIo_t *p_cdio); /*========================INLINE======================================*/ %inline %{ const char * get_disc_mode (CdIo_t *p_cdio) { discmode_t discmode = cdio_get_discmode(p_cdio); if (CDIO_DISC_MODE_ERROR == discmode) return (const char *)newSV(0); return discmode2str[discmode]; } %} /* SV * get_cdtext (CdIo_t *p_cdio); */ /* %inline %{ */ /* SV * get_cdtext (CdIo_t *p_cdio) */ /* { */ /* HV * cdtext_hash; */ /* cdtext_t *cdtext; const char *str; int num; unsigned int l=0; */ /* cdtext = cdio_get_cdtext (p_cdio); */ /* if(!cdtext) */ /* return newSV(0); //we return undef if there is no cdtext on the disk */ /* cdtext_hash = newHV(); */ /* for (num=0; num Copyright (C) 2012, 2017 Rocky Bernstein rocky@cpan.org This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* See For more extensive documentation */ %feature("autodoc",1); %constant int CDTEXT_FIELD_TITLE = CDTEXT_FIELD_TITLE; %constant int CDTEXT_FIELD_PERFORMER = CDTEXT_FIELD_PERFORMER; %constant int CDTEXT_FIELD_SONGWRITER = CDTEXT_FIELD_SONGWRITER; %constant int CDTEXT_FIELD_COMPOSER = CDTEXT_FIELD_COMPOSER; %constant int CDTEXT_FIELD_MESSAGE = CDTEXT_FIELD_MESSAGE; %constant int CDTEXT_FIELD_ARRANGER = CDTEXT_FIELD_ARRANGER; %constant int CDTEXT_FIELD_ISRC = CDTEXT_FIELD_ISRC; %constant int CDTEXT_FIELD_UPC_EAN = CDTEXT_FIELD_UPC_EAN; %constant int CDTEXT_FIELD_GENRE = CDTEXT_FIELD_GENRE; %constant int CDTEXT_FIELD_DISCID = CDTEXT_FIELD_DISCID; %constant int CDTEXT_FIELD_INVALID = CDTEXT_FIELD_INVALID; %constant int CDTEXT_GENRE_UNUSED = CDTEXT_GENRE_UNUSED; %constant int CDTEXT_GENRE_UNDEFINED = CDTEXT_GENRE_UNDEFINED; %constant int CDTEXT_GENRE_ADULT_CONTEMP = CDTEXT_GENRE_ADULT_CONTEMP; %constant int CDTEXT_GENRE_ALT_ROCK = CDTEXT_GENRE_ALT_ROCK; %constant int CDTEXT_GENRE_CHILDRENS = CDTEXT_GENRE_CHILDRENS; %constant int CDTEXT_GENRE_CLASSIC = CDTEXT_GENRE_CLASSIC; %constant int CDTEXT_GENRE_CHRIST_CONTEMP = CDTEXT_GENRE_CHRIST_CONTEMP; %constant int CDTEXT_GENRE_COUNTRY = CDTEXT_GENRE_COUNTRY; %constant int CDTEXT_GENRE_DANCE = CDTEXT_GENRE_DANCE; %constant int CDTEXT_GENRE_EASY_LISTENING = CDTEXT_GENRE_EASY_LISTENING; %constant int CDTEXT_GENRE_EROTIC = CDTEXT_GENRE_EROTIC; %constant int CDTEXT_GENRE_FOLK = CDTEXT_GENRE_FOLK; %constant int CDTEXT_GENRE_GOSPEL = CDTEXT_GENRE_GOSPEL; %constant int CDTEXT_GENRE_HIPHOP = CDTEXT_GENRE_HIPHOP; %constant int CDTEXT_GENRE_JAZZ = CDTEXT_GENRE_JAZZ; %constant int CDTEXT_GENRE_LATIN = CDTEXT_GENRE_LATIN; %constant int CDTEXT_GENRE_MUSICAL = CDTEXT_GENRE_MUSICAL; %constant int CDTEXT_GENRE_NEWAGE = CDTEXT_GENRE_NEWAGE; %constant int CDTEXT_GENRE_OPERA = CDTEXT_GENRE_OPERA; %constant int CDTEXT_GENRE_OPERETTA = CDTEXT_GENRE_OPERETTA; %constant int CDTEXT_GENRE_POP = CDTEXT_GENRE_POP; %constant int CDTEXT_GENRE_RAP = CDTEXT_GENRE_RAP; %constant int CDTEXT_GENRE_REGGAE = CDTEXT_GENRE_REGGAE; %constant int CDTEXT_GENRE_ROCK = CDTEXT_GENRE_ROCK; %constant int CDTEXT_GENRE_RYTHMANDBLUES = CDTEXT_GENRE_RYTHMANDBLUES; %constant int CDTEXT_GENRE_SOUNDEFFECTS = CDTEXT_GENRE_SOUNDEFFECTS; %constant int CDTEXT_GENRE_SOUNDTRACK = CDTEXT_GENRE_SOUNDTRACK; %constant int CDTEXT_GENRE_SPOKEN_WORD = CDTEXT_GENRE_SPOKEN_WORD; %constant int CDTEXT_GENRE_WORLD_MUSIC = CDTEXT_GENRE_WORLD_MUSIC; %constant int CDTEXT_LANGUAGE_UNKNOWN = CDTEXT_LANGUAGE_UNKNOWN; %constant int CDTEXT_LANGUAGE_ALBANIAN = CDTEXT_LANGUAGE_ALBANIAN; %constant int CDTEXT_LANGUAGE_BRETON = CDTEXT_LANGUAGE_BRETON; %constant int CDTEXT_LANGUAGE_CATALAN = CDTEXT_LANGUAGE_CATALAN; %constant int CDTEXT_LANGUAGE_CROATIAN = CDTEXT_LANGUAGE_CROATIAN; %constant int CDTEXT_LANGUAGE_WELSH = CDTEXT_LANGUAGE_WELSH; %constant int CDTEXT_LANGUAGE_CZECH = CDTEXT_LANGUAGE_CZECH; %constant int CDTEXT_LANGUAGE_DANISH = CDTEXT_LANGUAGE_DANISH; %constant int CDTEXT_LANGUAGE_GERMAN = CDTEXT_LANGUAGE_GERMAN; %constant int CDTEXT_LANGUAGE_ENGLISH = CDTEXT_LANGUAGE_ENGLISH; %constant int CDTEXT_LANGUAGE_SPANISH = CDTEXT_LANGUAGE_SPANISH; %constant int CDTEXT_LANGUAGE_ESPERANTO = CDTEXT_LANGUAGE_ESPERANTO; %constant int CDTEXT_LANGUAGE_ESTONIAN = CDTEXT_LANGUAGE_ESTONIAN; %constant int CDTEXT_LANGUAGE_BASQUE = CDTEXT_LANGUAGE_BASQUE; %constant int CDTEXT_LANGUAGE_FAROESE = CDTEXT_LANGUAGE_FAROESE; %constant int CDTEXT_LANGUAGE_FRENCH = CDTEXT_LANGUAGE_FRENCH; %constant int CDTEXT_LANGUAGE_FRISIAN = CDTEXT_LANGUAGE_FRISIAN; %constant int CDTEXT_LANGUAGE_IRISH = CDTEXT_LANGUAGE_IRISH; %constant int CDTEXT_LANGUAGE_GAELIC = CDTEXT_LANGUAGE_GAELIC; %constant int CDTEXT_LANGUAGE_GALICIAN = CDTEXT_LANGUAGE_GALICIAN; %constant int CDTEXT_LANGUAGE_ICELANDIC = CDTEXT_LANGUAGE_ICELANDIC; %constant int CDTEXT_LANGUAGE_ITALIAN = CDTEXT_LANGUAGE_ITALIAN; %constant int CDTEXT_LANGUAGE_LAPPISH = CDTEXT_LANGUAGE_LAPPISH; %constant int CDTEXT_LANGUAGE_LATIN = CDTEXT_LANGUAGE_LATIN; %constant int CDTEXT_LANGUAGE_LATVIAN = CDTEXT_LANGUAGE_LATVIAN; %constant int CDTEXT_LANGUAGE_LUXEMBOURGIAN = CDTEXT_LANGUAGE_LUXEMBOURGIAN; %constant int CDTEXT_LANGUAGE_LITHUANIAN = CDTEXT_LANGUAGE_LITHUANIAN; %constant int CDTEXT_LANGUAGE_HUNGARIAN = CDTEXT_LANGUAGE_HUNGARIAN; %constant int CDTEXT_LANGUAGE_MALTESE = CDTEXT_LANGUAGE_MALTESE; %constant int CDTEXT_LANGUAGE_DUTCH = CDTEXT_LANGUAGE_DUTCH; %constant int CDTEXT_LANGUAGE_NORWEGIAN = CDTEXT_LANGUAGE_NORWEGIAN; %constant int CDTEXT_LANGUAGE_OCCITAN = CDTEXT_LANGUAGE_OCCITAN; %constant int CDTEXT_LANGUAGE_POLISH = CDTEXT_LANGUAGE_POLISH; %constant int CDTEXT_LANGUAGE_PORTUGUESE = CDTEXT_LANGUAGE_PORTUGUESE; %constant int CDTEXT_LANGUAGE_ROMANIAN = CDTEXT_LANGUAGE_ROMANIAN; %constant int CDTEXT_LANGUAGE_ROMANSH = CDTEXT_LANGUAGE_ROMANSH; %constant int CDTEXT_LANGUAGE_SERBIAN = CDTEXT_LANGUAGE_SERBIAN; %constant int CDTEXT_LANGUAGE_SLOVAK = CDTEXT_LANGUAGE_SLOVAK; %constant int CDTEXT_LANGUAGE_SLOVENIAN = CDTEXT_LANGUAGE_SLOVENIAN; %constant int CDTEXT_LANGUAGE_FINNISH = CDTEXT_LANGUAGE_FINNISH; %constant int CDTEXT_LANGUAGE_SWEDISH = CDTEXT_LANGUAGE_SWEDISH; %constant int CDTEXT_LANGUAGE_TURKISH = CDTEXT_LANGUAGE_TURKISH; %constant int CDTEXT_LANGUAGE_FLEMISH = CDTEXT_LANGUAGE_FLEMISH; %constant int CDTEXT_LANGUAGE_WALLON = CDTEXT_LANGUAGE_WALLON; %constant int CDTEXT_LANGUAGE_ZULU = CDTEXT_LANGUAGE_ZULU; %constant int CDTEXT_LANGUAGE_VIETNAMESE = CDTEXT_LANGUAGE_VIETNAMESE; %constant int CDTEXT_LANGUAGE_UZBEK = CDTEXT_LANGUAGE_UZBEK; %constant int CDTEXT_LANGUAGE_URDU = CDTEXT_LANGUAGE_URDU; %constant int CDTEXT_LANGUAGE_UKRAINIAN = CDTEXT_LANGUAGE_UKRAINIAN; %constant int CDTEXT_LANGUAGE_THAI = CDTEXT_LANGUAGE_THAI; %constant int CDTEXT_LANGUAGE_TELUGU = CDTEXT_LANGUAGE_TELUGU; %constant int CDTEXT_LANGUAGE_TATAR = CDTEXT_LANGUAGE_TATAR; %constant int CDTEXT_LANGUAGE_TAMIL = CDTEXT_LANGUAGE_TAMIL; %constant int CDTEXT_LANGUAGE_TADZHIK = CDTEXT_LANGUAGE_TADZHIK; %constant int CDTEXT_LANGUAGE_SWAHILI = CDTEXT_LANGUAGE_SWAHILI; %constant int CDTEXT_LANGUAGE_SRANANTONGO = CDTEXT_LANGUAGE_SRANANTONGO; %constant int CDTEXT_LANGUAGE_SOMALI = CDTEXT_LANGUAGE_SOMALI; %constant int CDTEXT_LANGUAGE_SINHALESE = CDTEXT_LANGUAGE_SINHALESE; %constant int CDTEXT_LANGUAGE_SHONA = CDTEXT_LANGUAGE_SHONA; %constant int CDTEXT_LANGUAGE_SERBO_CROAT = CDTEXT_LANGUAGE_SERBO_CROAT; %constant int CDTEXT_LANGUAGE_RUTHENIAN = CDTEXT_LANGUAGE_RUTHENIAN; %constant int CDTEXT_LANGUAGE_RUSSIAN = CDTEXT_LANGUAGE_RUSSIAN; %constant int CDTEXT_LANGUAGE_QUECHUA = CDTEXT_LANGUAGE_QUECHUA; %constant int CDTEXT_LANGUAGE_PUSHTU = CDTEXT_LANGUAGE_PUSHTU; %constant int CDTEXT_LANGUAGE_PUNJABI = CDTEXT_LANGUAGE_PUNJABI; %constant int CDTEXT_LANGUAGE_PERSIAN = CDTEXT_LANGUAGE_PERSIAN; %constant int CDTEXT_LANGUAGE_PAPAMIENTO = CDTEXT_LANGUAGE_PAPAMIENTO; %constant int CDTEXT_LANGUAGE_ORIYA = CDTEXT_LANGUAGE_ORIYA; %constant int CDTEXT_LANGUAGE_NEPALI = CDTEXT_LANGUAGE_NEPALI; %constant int CDTEXT_LANGUAGE_NDEBELE = CDTEXT_LANGUAGE_NDEBELE; %constant int CDTEXT_LANGUAGE_MARATHI = CDTEXT_LANGUAGE_MARATHI; %constant int CDTEXT_LANGUAGE_MOLDAVIAN = CDTEXT_LANGUAGE_MOLDAVIAN; %constant int CDTEXT_LANGUAGE_MALAYSIAN = CDTEXT_LANGUAGE_MALAYSIAN; %constant int CDTEXT_LANGUAGE_MALAGASAY = CDTEXT_LANGUAGE_MALAGASAY; %constant int CDTEXT_LANGUAGE_MACEDONIAN = CDTEXT_LANGUAGE_MACEDONIAN; %constant int CDTEXT_LANGUAGE_LAOTIAN = CDTEXT_LANGUAGE_LAOTIAN; %constant int CDTEXT_LANGUAGE_KOREAN = CDTEXT_LANGUAGE_KOREAN; %constant int CDTEXT_LANGUAGE_KHMER = CDTEXT_LANGUAGE_KHMER; %constant int CDTEXT_LANGUAGE_KAZAKH = CDTEXT_LANGUAGE_KAZAKH; %constant int CDTEXT_LANGUAGE_KANNADA = CDTEXT_LANGUAGE_KANNADA; %constant int CDTEXT_LANGUAGE_JAPANESE = CDTEXT_LANGUAGE_JAPANESE; %constant int CDTEXT_LANGUAGE_INDONESIAN = CDTEXT_LANGUAGE_INDONESIAN; %constant int CDTEXT_LANGUAGE_HINDI = CDTEXT_LANGUAGE_HINDI; %constant int CDTEXT_LANGUAGE_HEBREW = CDTEXT_LANGUAGE_HEBREW; %constant int CDTEXT_LANGUAGE_HAUSA = CDTEXT_LANGUAGE_HAUSA; %constant int CDTEXT_LANGUAGE_GURANI = CDTEXT_LANGUAGE_GURANI; %constant int CDTEXT_LANGUAGE_GUJURATI = CDTEXT_LANGUAGE_GUJURATI; %constant int CDTEXT_LANGUAGE_GREEK = CDTEXT_LANGUAGE_GREEK; %constant int CDTEXT_LANGUAGE_GEORGIAN = CDTEXT_LANGUAGE_GEORGIAN; %constant int CDTEXT_LANGUAGE_FULANI = CDTEXT_LANGUAGE_FULANI; %constant int CDTEXT_LANGUAGE_DARI = CDTEXT_LANGUAGE_DARI; %constant int CDTEXT_LANGUAGE_CHURASH = CDTEXT_LANGUAGE_CHURASH; %constant int CDTEXT_LANGUAGE_CHINESE = CDTEXT_LANGUAGE_CHINESE; %constant int CDTEXT_LANGUAGE_BURMESE = CDTEXT_LANGUAGE_BURMESE; %constant int CDTEXT_LANGUAGE_BULGARIAN = CDTEXT_LANGUAGE_BULGARIAN; %constant int CDTEXT_LANGUAGE_BENGALI = CDTEXT_LANGUAGE_BENGALI; %constant int CDTEXT_LANGUAGE_BIELORUSSIAN = CDTEXT_LANGUAGE_BIELORUSSIAN; %constant int CDTEXT_LANGUAGE_BAMBORA = CDTEXT_LANGUAGE_BAMBORA; %constant int CDTEXT_LANGUAGE_AZERBAIJANI = CDTEXT_LANGUAGE_AZERBAIJANI; %constant int CDTEXT_LANGUAGE_ASSAMESE = CDTEXT_LANGUAGE_ASSAMESE; %constant int CDTEXT_LANGUAGE_ARMENIAN = CDTEXT_LANGUAGE_ARMENIAN; %constant int CDTEXT_LANGUAGE_ARABIC = CDTEXT_LANGUAGE_ARABIC; %constant int CDTEXT_LANGUAGE_AMHARIC = CDTEXT_LANGUAGE_AMHARIC; %constant int MIN_CDTEXT_FIELD = MIN_CDTEXT_FIELD; %constant int MAX_CDTEXT_FIELDS = MAX_CDTEXT_FIELDS; typedef int cdtext_field_t; typedef int cdtext_lang_t; typedef int cdtext_genre_t; const char *cdtext_field2str (cdtext_field_t i); const char *cdtext_lang2str (cdtext_lang_t i); const char *cdtext_genre2str (cdtext_genre_t i); %inline %{ typedef uint8_t cdtext_data_bytes_t[9220]; %} %typemap(in) cdtext_data_bytes_t { /* SVpv to uint8_t * */ cdtext_data_bytes_t wdata = {0,}; STRLEN len; char *ptr; ptr = SvPV($input, len); memcpy(wdata, ptr, len); $1=wdata; } %rename cdio_cdtext_init cdtext_init; cdtext_t *cdtext_init (void); int cdtext_data_init(cdtext_t *p_cdtext, cdtext_data_bytes_t wdata, size_t i_data); void cdtext_destroy (cdtext_t *p_cdtext); char *cdtext_get (const cdtext_t *p_cdtext, cdtext_field_t key, track_t track); cdtext_lang_t cdtext_get_language (const cdtext_t *p_cdtext); %rename cdio_cdtext_select_language cdtext_select_language; bool cdtext_select_language(cdtext_t *p_cdtext, cdtext_lang_t lang); cdtext_lang_t *cdtext_list_languages (const cdtext_t *p_cdtext); void cdtext_set (cdtext_t *p_cdtext, cdtext_field_t key, const uint8_t *value, track_t track, const char *charset); cdtext_t *cdio_get_cdtext (CdIo_t *p_cdio); %rename cdio_cdtext_get cdtext_get; char *cdio_cdtext_get (const cdtext_t *p_cdtext, cdtext_field_t key, track_t track); %rename get_track_cdtext cdtext_get_const; const char *cdtext_get_const (const cdtext_t *p_cdtext, cdtext_field_t key, track_t track); Device-Cdio-v2.0.0/examples000755001750001750 013222226267 15235 5ustar00rockyrocky000000000000Device-Cdio-v2.0.0/examples/cdtext-raw.pl000444001750001750 476413222226267 20024 0ustar00rockyrocky000000000000#!/usr/bin/perl -w # Example demonstrating the parsing of raw CD-Text files # # Copyright (C) 2017 Rocky Bernstein # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # use Enbugger; Enbugger->load_debugger('trepan'); Enbugger->stop; use strict; use lib '../blib/lib'; use lib '../blib/arch'; use perlcdio; use Device::Cdio; use Device::Cdio::Device; sub print_cdtext_track_info($$) { my ($cdtext_ref, $t) = @_; if ($t != 0) { printf("Track #%2d\n", $t); } else { printf "CD-Text title for Disc\n"; } foreach my $field (sort keys %{$cdtext_ref}) { printf "\t%s: %s\n", $Device::Cdio::CDTEXT_FIELD_by_id{$field}, $cdtext_ref->{$field} if defined($cdtext_ref->{$field}); } } sub print_cdtext_info($) { my $cdtext = shift; my $cdtext_fields = {}; for (my $field=$perlcdio::MIN_CDTEXT_FIELD; $field <= $perlcdio::MAX_CDTEXT_FIELDS; $field++) { $cdtext_fields->{$field} = perlcdio::cdtext_get_const($cdtext, $field, 0); } print_cdtext_track_info($cdtext_fields, 0); } sub read_cdtext($) { my ($path) = @_; if (!open(FP, "<:raw", $path)) { print STDERR "cannot open $path for input: $!"; exit(3); } my $size = read FP, my $cdt_data, 9220; close(FP); if ($size < 5) { print STDERR sprintf("file `%s' is too small to contain CD-TEXT\n", $path); exit(1); } # Truncate header when it is too large. The standard is ambiguous here $size -= 4 if ord(substr($cdt_data, 0, 1)) > 0x80; # ignore trailing 0 $size -= 1 if (1 == $size % 18); # init cdtext */ my $cdt = perlcdio::cdtext_init(); my $rc = Device::Cdio::Device::cdtext_data_init($cdt, $cdt_data, $size); if ($rc !=0 ) { printf STDERR "failed to parse CD-Text file `%s'\n", $path; return undef; } return $cdt; } die "usage: $0 cdtext.data" if @ARGV != 1; my $cdt_path=$ARGV[0]; my $cdt = read_cdtext($cdt_path); print_cdtext_info($cdt) if $cdt; Device-Cdio-v2.0.0/examples/drives.pl000555001750001750 353113222226267 17230 0ustar00rockyrocky000000000000#!/usr/bin/perl -w # Copyright (C) 2006, 2008, 2011 Rocky Bernstein # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Program to read CD blocks. See read-cd from the libcdio distribution # for a more complete program. use strict; BEGIN { chdir 'example' if -d 'example'; use lib '../lib'; eval "use blib"; # if we fail keep going - maybe we have installed Cdio } use Device::Cdio; use Device::Cdio::Device; use Device::Cdio::Track; use vars qw($0 $program $pause %opts); sub print_drive_class($$$) { my ($msg, $bitmask, $any) = @_; my @cd_drives = Device::Cdio::get_devices_with_cap($bitmask, $any); print "$msg...\n"; foreach my $drive (@cd_drives) { print "Drive $drive\n"; } print "-----\n"; } my @cd_drives = Device::Cdio::get_devices($perlcdio::DRIVER_DEVICE); foreach my $drive (@cd_drives) { print "Drive $drive\n"; } print "-----\n"; print_drive_class("All CD-ROM drives (again)", $perlcdio::FS_MATCH_ALL, 0); print_drive_class("All CD-DA drives...", $perlcdio::FS_AUDIO, 0); print_drive_class("All drives with ISO 9660...", $perlcdio::FS_ISO_9660, 0); print_drive_class("VCD drives...", ($perlcdio::FS_ANAL_SVCD|$perlcdio::FS_ANAL_CVD| $perlcdio::FS_ANAL_VIDEOCD|$perlcdio::FS_UNKNOWN), 1); Device-Cdio-v2.0.0/examples/iso0.pl000444001750001750 616413222226267 16610 0ustar00rockyrocky000000000000#!/usr/bin/perl -w # # Copyright (C) 2006, 2011 Rocky Bernstein # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # A simple program to show using libiso9660 to list files in a directory of # an ISO-9660 image. # # If a single argument is given, it is used as the ISO 9660 image to # use in the listing. Otherwise a compiled-in default ISO 9660 image # name (that comes with the libcdio distribution) will be used. use strict; BEGIN { chdir 'example' if -d 'example'; use lib '../lib'; eval "use blib"; # if we fail keep going - maybe we have installed Cdio } use Device::Cdio; use Device::Cdio::Device; use Device::Cdio::ISO9660; use Device::Cdio::ISO9660::FS; use File::Spec; # The default ISO 9660 cue/bin file if none given my $ISO9660_IMAGE_PATH="../data"; my $ISO9660_cd=File::Spec->catfile($ISO9660_IMAGE_PATH, "isofs-m1.cue"); my $cd_image_fname = $ISO9660_cd; $cd_image_fname = $ARGV[0] if @ARGV >= 1; my $iso = Device::Cdio::ISO9660::FS->new(-source=>$cd_image_fname); if (!defined($iso)) { printf "Sorry, couldn't open %s as an ISO-9660 image.\n", $cd_image_fname; exit 1; } my $path = '/'; my @file_stats = $iso->readdir($path); my $id = $iso->read_superblock(); printf "Super block: %s\n", $id if defined($id); my $pvd = $iso->read_pvd(); printf "Super block: %s\n", $pvd if defined($pvd); $id = perliso9660::get_application_id($pvd); printf "Application ID: %s\n", $id if defined($id); $id = perliso9660::get_preparer_id($pvd); printf "Preparer ID: %s\n", $id if defined($id); $id = perliso9660::get_publisher_id($pvd); printf "Publisher ID: %s\n", $id if defined($id); $id = perliso9660::get_system_id($pvd); printf "System ID: %s\n", $id if defined($id); $id = perliso9660::get_volume_id($pvd); printf "Volume ID: %s\n", $id if defined($id); $id = perliso9660::get_volumeset_id($pvd); printf "Volumeset ID: %s\n", $id if defined($id); print "\nfile_stats with ISO9660::name_translate\n"; foreach my $href (@file_stats) { printf "%s [LSN %6d] %8d %s%s\n", $href->{is_dir} ? "d" : "-", $href->{LSN}, $href->{size}, $path, Device::Cdio::ISO9660::name_translate($href->{filename}); } print "readdir \"/\"\n"; my @iso_stat = $iso->readdir ("/"); foreach my $i (@iso_stat) { #while(my ($k,$v) = each (%$i)) { # print " $k => \"$v\","; #} printf "%s [LSN %6d] [secs %4d] %9d ", $i->{is_dir}?'d':' ',$i->{LSN},$i->{sec_size},$i->{size}; print $i->{filename},"\n"; } $iso->close(); exit 0; Device-Cdio-v2.0.0/examples/audio.pl000555001750001750 1474413222226267 17065 0ustar00rockyrocky000000000000#!/usr/bin/perl -w # Copyright (C) 2006, 2008, 2011 Rocky Bernstein # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Program to read CD blocks. See read-cd from the libcdio distribution # for a more complete program. use strict; BEGIN { chdir 'example' if -d 'example'; use lib '../lib'; eval "use blib"; # if we fail keep going - maybe we have installed Cdio } use Device::Cdio; use Device::Cdio::Device; use Device::Cdio::Track; use vars qw($0 $program $pause %opts); sub init() { use File::Basename; $program = basename($0); # Who am I today, anyway? $opts{close}=undef; $opts{eject}=0; $opts{pause}=0; $opts{play}=0; $opts{resume}=0; $opts{stop}=0; $opts{get_audio_volume}=0; $opts{set_audio_volume}=''; $opts{set_audio}=0; } # Show the CVS version id string and quit. sub show_version() { print "$program version $Device::Cdio::VERSION\n"; exit 1; } sub usage { my($full_help) = @_; print " usage: $program [options] [device] Issue analog audio CD controls - like playing options: --help -- print this help and exit --version -- show a CVS version string and exit --eject DEVICE -- eject disc from DEVICE --close DEVICE -- close CD tray of DEVICE -P | --pause -- pause playing --play -- play entire CD --resume -- resume playing --stop -- stop playing --track=N -- play track N --volume -- get audio volume levels --set-volume=s -- set audio volume levels "; exit 100; } # The bane of programming. sub process_options() { use Getopt::Long; my(@opt_cf); $Getopt::Long::autoabbrev = 1; my($help, $long_help, $show_version); my $result = &GetOptions ( 'help' => \$help, 'close' => \$opts{close}, 'eject' => \$opts{eject}, 'version' => \$opts{show_version}, 'P|pause' => \$opts{pause}, 'play' => \$opts{play}, 'resume' => \$opts{resume}, 'stop' => \$opts{stop}, 'volume' => \$opts{get_audio_volume}, 'track=n' => \$opts{track}, 'set-volume=s' => \$opts{set_audio_volume}, ); show_version() if $show_version; usage(0) unless $result || @ARGV > 1; usage(1) if $help; } init(); process_options(); my ($drc, $device_name); # Handle closing the CD-ROM tray if that was specified. if ($opts{close}) { $device_name = $opts{close}; $drc = Device::Cdio::close_tray(-drive=>$opts{close}); if ($drc) { printf "Error closing: %s\n", perlcdio::driver_errmsg($drc) ; exit $drc; } } my $d; if ($ARGV[0]) { $d = Device::Cdio::Device->new($ARGV[0]); exit(1) if !defined($d); } else { # For audio any *has* to be set false. my @drives = Device::Cdio::get_devices_with_cap(-capabilities=> $perlcdio::FS_AUDIO, -any=>0); if (@drives >= 1) { $d = Device::Cdio::Device->new($drives[0]); if (!defined($d)) { print "Sorry having trouble opening $drives[0]\n"; exit(1); } } else { print "Could not automatically find a CD-ROM with an audio CD in it\n"; print "Please specify a device name\n"; exit(1); } } $device_name = $d->get_device(); if ($opts{play}) { if ($d->get_disc_mode() ne 'CD-DA') { printf "The disc on %s I found was not CD-DA, but CD is %s\n", $device_name, $d->get_disc_mode(); print "I have bad feeling about trying to play this...\n"; } my $start_lsn = $d->get_first_track()->get_lsn(); my $end_lsn=$d->get_disc_last_lsn(); printf "Playing entire CD on %s\n", $device_name; $drc = $d->audio_play_lsn($start_lsn, $end_lsn); printf "Error playing CD: %s\n", perlcdio::driver_errmsg($drc) if ($drc); } elsif ($opts{track}) { if ($d->get_disc_mode() ne 'CD-DA') { printf "The disc on %s I found was not CD-DA, but CD is %s\n", $device_name, $d->get_disc_mode(); print "I have bad feeling about trying to play this...\n"; } if ($opts{track} > $d->get_last_track()->{track}) { printf "Requested track %d but CD only has %d tracks\n", $opts{track}, $d->get_last_track()->{track}; exit(2); } if ($opts{track} < $d->get_first_track()->{track}) { printf "Requested track %d but first track on CD is %d\n", $opts{track}, $d->get_first_track()->{track}; exit(2); } printf("Playing track %d on %s\n", $opts{track}, $device_name); my $start_lsn = $d->get_track($opts{track})->get_lsn(); my $end_lsn = $d->get_track($opts{track}+1)->get_lsn(); $drc = $d->audio_play_lsn($start_lsn, $end_lsn); printf "Error closing: %s\n", perlcdio::driver_errmsg($drc) if ($drc); } elsif ($opts{get_audio_volume}) { my($vol, $rc) = $d->audio_get_volume(); printf "Audio volume levels: %s\n", join(', ', @$vol); } elsif ($opts{set_audio_volume}) { my @levels=split(/,\s*/, $opts{set_audio_volume}); # $d->audio_set_volume(@levels); $d->audio_set_volume($levels[0], $levels[1], $levels[2], $levels[3]); my($vol, $rc) = $d->audio_get_volume(); printf "Audio volume levels are now: %s\n", join(', ', @$vol); } elsif ($opts{pause}) { printf "Pausing playing in drive %s\n", $device_name; $drc = $d->audio_pause(); printf "Error pausing: %s\n", perlcdio::driver_errmsg($drc) if ($drc); } elsif ($opts{resume}) { printf "Resuming playing in drive %s\n", $device_name; $drc = $d->audio_resume(); printf "Error resuming: %s\n", perlcdio::driver_errmsg($drc) if ($drc); } elsif ($opts{stop}) { printf "Stopping playing in drive %s\n", $device_name; $drc = $d->audio_stop(); printf("Stopping failed on drive %s: %s\n", $device_name, perlcdio::driver_errmsg($drc)) if $drc; } elsif ($opts{eject}) { print "Ejecting CD in CD-ROM drive $device_name\n"; $drc = $d->eject_media(); printf("Eject failed on drive %s: %s\n", $device_name, perlcdio::driver_errmsg($drc)) if $drc; exit $drc; } $d->close(); Device-Cdio-v2.0.0/examples/cdtext.pl000555001750001750 453413222226267 17233 0ustar00rockyrocky000000000000#!/usr/bin/perl -w # Program to show cdtext, similar to examples/cdtext.c # # Copyright (C) 2012, 2017 Rocky Bernstein # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # use Enbugger; Enbugger->load_debugger('trepan'); Enbugger->stop; use strict; use lib '../blib/lib'; use lib '../blib/arch'; use perlcdio; use Device::Cdio; use Device::Cdio::Device; sub print_cdtext_track_info($$) { my ($cdtext_ref, $t) = @_; if ($t != 0) { printf("Track #%2d\n", $t); } else { printf "CD-Text title for Disc\n"; } foreach my $field (sort keys %{$cdtext_ref}) { printf "\t%s: %s\n", $Device::Cdio::CDTEXT_FIELD_by_id{$field}, $cdtext_ref->{$field} if defined($cdtext_ref->{$field}); } } my $drive_name; my $d; if ($ARGV[0]) { $drive_name = $ARGV[0]; $d = Device::Cdio::Device->new($drive_name); if (!$d) { print "Problem opening CD-ROM: $drive_name\n"; exit 1; } } else { $d = Device::Cdio::Device->new(undef, $perlcdio::DRIVER_UNKNOWN); if ($d) { $drive_name = $d->get_device(); } else { print "Problem finding a CD-ROM\n"; exit 1; } } my $i_tracks = $d->get_num_tracks(); my $first_track = $d->get_first_track; my $last_track = $d->get_last_track(); $perlcdio::VERSION_NUM >= 10100 or die "Your version of libcdio is too old\n"; my $langs = $d->cdtext_list_languages(); if ($langs) { foreach my $lang (@$langs) { if ($lang != $perlcdio::CDTEXT_LANGUAGE_UNKNOWN) { printf "Language: %s\n", $Device::Cdio::CDTEXT_LANGUAGE_by_id{$lang}; my $text = $d->get_disc_cdtext(); print_cdtext_track_info($text, 0); for (my $track=$first_track->{track}; $track <= $last_track->{track}; $track++) { my $text = $d->get_track_cdtext($track); print_cdtext_track_info($text, $track); } } } } Device-Cdio-v2.0.0/examples/tracks.pl000555001750001750 476713222226267 17237 0ustar00rockyrocky000000000000#!/usr/bin/perl -w # Copyright (C) 2006, 2008, 2011 Rocky Bernstein # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ### Program to show CD information BEGIN { chdir 'example' if -d 'example'; use lib '../lib'; eval "use blib"; # if we fail keep going - maybe we have installed Cdio } use Device::Cdio; use Device::Cdio::Device; if ($ARGV[0]) { $drive_name=$ARGV[0]; $d = Device::Cdio::Device->new(-source=>$drive_name); if (!defined($drive_name)) { print "Problem opening CD-ROM: $drive_name\n"; exit(1); } } else { $d = Device::Cdio::Device->new(-driver_id=>$perlcdio::DRIVER_DEVICE); $drive_name = $d->get_device(); if (!defined($drive_name)) { print "Problem finding a CD-ROM\n"; exit(1); } } my $t = $d->get_first_track(); if (!defined($t)) { print "Problem getting first track.\n"; exit(2); } my $first_track = $t->{track}; my $num_tracks = $d->get_num_tracks(); my $last_track = $first_track+$num_tracks-1; my ($drc, $last_session) = $d->get_last_session(); if ($drc == $perlcdio::DRIVER_OP_SUCCESS) { printf("CD-ROM %s has %d track(s) and %d session(s).\n", $drive_name, $d->get_num_tracks(), $last_session); } elsif ($drc == $perlcdio::DRIVER_OP_UNSUPPORTED) { printf("CD-ROM %s has %d track(s).\n", $drive_name, $d->get_num_tracks()); } else { print "Error in getting last session\n"; } printf("Track format is %s.\n", $d->get_disc_mode()); my $mcn = $d->get_mcn(); printf "Media Catalog Number: %s\n", $mcn if $mcn; printf "%3s: %-6s %-6s %s\n", "#", "LSN", "MSF", "Format"; for (my $i=$first_track; $i <= $last_track; $i++) { my $t = $d->Device::Cdio::Device::get_track($i); printf("%3d: %06lu %-6s %s\n", $t->{track}, $t->get_lsn(), $t->get_msf(), $t->get_format()) if defined($t); } printf("%3X: %06lu leadout\n", $perlcdio::CDROM_LEADOUT_TRACK, $d->get_disc_last_lsn()); $d->close(); Device-Cdio-v2.0.0/examples/checkcd.pl000555001750001750 2126113222226267 17340 0ustar00rockyrocky000000000000#!/usr/bin/perl -w # Copyright (C) 2011 jerry geiger # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # If you don't have received a copy of the GNU General Public License # along with this program see . # use strict; use Device::Cdio; use Device::Cdio::Device; use Device::Cdio::Track; use Device::Cdio::ISO9660::FS; use perlmmc; use File::Basename; use Encode; use vars qw($0 $program $VERSION); my $VERSION = "0.0"; my $program = basename $0; my $device_name; # = '/dev/cdrom'; my $drc; # Device::Cdio:: return value my $dev; # Device::Cdio::Device if ($ARGV[0]) { $device_name = shift; } print $program,"-$VERSION", ' Device::Cdio::VERSION ',$Device::Cdio::VERSION, "\n using libcdio vers $perlcdio::VERSION_NUM: ", perlcdio::cdio_version,"\n"; if (not $device_name) { $device_name = ''; my @devices = find_devices(); print scalar @devices, " device(s) found:\n"; foreach my $d (@devices) { print " $d\n"; if(! $dev) { #try to open $device_name = $d; $dev = Device::Cdio::Device->new($d); warn "$program: Can't open device $device_name \n" if not $dev; } } if(not $dev) { #libcdio's Device::Cdio::get_devices routines don't work #on mounted drives, so we need to try default as well. #try default device: set with Build ?? print " try default device\n"; $device_name = "/dev/cdrom"; } } if(not $dev) { $dev = Device::Cdio::Device->new($device_name); } if(not $dev) { die "$program: Can't open device $device_name \n"; } my @hwinfo = $dev->get_hwinfo; if (!$hwinfo[3]) { print "$program: ",perlcdio::driver_errmsg($hwinfo[3]),"\n"; } else { printf("$program: device %s %s (rev %s) %s (%s)\n", $hwinfo[0], $hwinfo[1], $hwinfo[2], $device_name, $dev->get_driver_name()); } if($dev->is_tray_open) { print " tray is open?\n"; # missing tray is open? -> close tray perlmmcc::mmc_close_tray($dev->{cd}); #Device::Cdio::close_tray($device_name); } # my $dmode = $dev->get_disc_mode(); if(!$dmode) { warn "no medium in drive?\n"; #perlmmcc::mmc_eject_media($dev->{cd}); perlmmcc::stop_media($dev->{cd}); ##$dev->eject_media; exit 0; } my $mcn = $dev->get_mcn; printf "disk %s mcn %s\n", $dmode?$dmode:'?', $mcn?$mcn:'not availabale'; my $ntracks = $dev->get_num_tracks; if($ntracks == $perlcdio::INVALID_TRACK) { if(!$dmode) { print 'No medium found?', "\n"; } exit 0; } my ($rc, $last_session) = $dev->get_last_session(); print perlcdio::driver_errmsg($rc),"\n" if $rc; printf " %d track(s), %s-session\n", $ntracks, $last_session?'multi':'single'; my $start_lsn = $dev->get_first_track()->get_lsn(); my $end_lsn = $dev->get_disc_last_lsn(); my $fst_track = $dev->get_first_track; my $fst_audio_trackno = undef; my %tracks; for (my $i =1; $i<=$ntracks; $i++) { $tracks{$fst_track->set_track($i)->get_format}++; if(not defined $fst_audio_trackno) { $fst_audio_trackno = $i if $fst_track->set_track($i)->get_format eq 'audio'; } } foreach my $m (keys %tracks) { printf " %d %s track(s)\n",$tracks{$m}, $m; } if(! $tracks{'audio'}) { warn "no audio tracks found - maybe not playable\n"; } my $hasisopvd; print "guess cd type: (time duration values are guessed approx.)\n"; for (my $i =1; $i<=$ntracks; $i++) { my $lsn = $fst_track->set_track($i)->get_lsn; printf "track %2d lsn: %6d msf: %s %s",$i, $lsn, $fst_track->set_track($i)->get_msf, $fst_track->set_track($i)->get_format; my $hash = $dev->guess_cd_type($lsn,$i); #while(my($k,$v) = each(%$hash)) { # print " $k=>$v\n"; #} if($hash->{cdio_fs_t}==1) { # CDIO_FS_AUDIO #time, ISRC flags my $secs = $fst_track->set_track($i+1)->get_lba - $fst_track->set_track($i)->get_lba; $secs = int($secs/75); my $ctrack = $fst_track->set_track($i); printf " (%d:%02d)\n %d channels, %s, copy: %s, ISRC: %s\n", int($secs/60),$secs%60, $ctrack->get_audio_channels, $ctrack->get_preemphasis, $ctrack->get_copy_permit?'yes':'no', $ctrack->get_track_isrc; } next if $hash->{cdio_fs_t}==1; printf " %s ISRC: %s\n", $fst_track->set_track($i)->is_track_green, $fst_track->set_track($i)->get_track_isrc; foreach my $k ('cdio_fs_t','isofs_size', 'iso_label','UDFVerMajor', 'UDFVerMinor') { print " $i $k=>", $hash->{$k},"\n"; } foreach my $k ('cdio_fs_cap_t','joliet_level') { printf " %d %s %0x\n",$i,$k, $hash->{$k}; } $hasisopvd = 1 if $hash->{'cdio_fs_t'} == 3; $hasisopvd = 1 if $hash->{'cdio_fs_t'} == 8; $hasisopvd = 1 if $hash->{'cdio_fs_t'} == 9; $hasisopvd = 1 if $hash->{'cdio_fs_t'} == 14; } if($hasisopvd && (my $pvd = $dev->read_pvd) ) { print "ISO-9660 Primary Volume Descriptor:\n"; print 'type: ',perliso9660::get_pvd_type($pvd), "\n"; print 'id: ', perliso9660::get_pvd_id($pvd), "\n"; print 'version: ', perliso9660::get_pvd_version($pvd), "\n"; print 'system_id: ', perliso9660::get_system_id($pvd), "\n"; print 'volume_id: ', perliso9660::get_volume_id($pvd), "\n"; print ' volume_space_size? ', perliso9660::get_pvd_space_size($pvd), "\n"; print ' logical_block_size? ', perliso9660::get_pvd_block_size($pvd), "\n"; print ' root_lsn? ', perliso9660::get_root_lsn($pvd), "\n"; print 'volume_set_id: ', perliso9660::get_volumeset_id($pvd), "\n"; print 'publisher_id: ', perliso9660::get_publisher_id($pvd), "\n"; print 'preparer_id: ', perliso9660::get_preparer_id($pvd), "\n"; print 'application_id: ', perliso9660::get_application_id($pvd), "\n"; print "\n"; } # disk size: # lsn for Leadout (total time) perlcdio::LEADOUT_TRACK # play time : find last audio track - audio tracks are mostly in first session # (except CD-i and mixed mode) and usually there is only one audio session. # on mixed mode cds there might be an undetectable session gap between # last audio sample and begin of next data track. my $natracks = $tracks{'audio'}; if($natracks) { my $start_audio_lsn = $fst_track->set_track($fst_audio_trackno)->get_lsn; my $track = $fst_track->set_track($natracks+1); my $end_audio_lsn = $track->get_lsn; my $diskmsf = $track->get_msf; my $asecs = ($end_audio_lsn-$start_audio_lsn)/75; printf "CD has %d audio tracks approx: %d:%02d (%s?) total play time)\n", $natracks, int($asecs/60),$asecs%60, $diskmsf; } else { my $diskmsf = $fst_track->set_track($ntracks+1)->get_msf; printf "data disk %d tracks, %s (%d SECs)\n", $ntracks, $diskmsf, $dev->get_disc_last_lsn; } my $cdtext = $dev->get_disk_cdtext; my $cddbid = undef; if($tracks{'audio'}) { if(!$cdtext) { $cddbid = $dev->get_cddb_discid; printf "no cdtext, try cddb: %08x\n", $cddbid; #$cdtext = cddb2cdtext($cddbid); } if($cdtext) { print "disk: "; print_cdtext($cdtext, ' '); print "\n"; } my ($state, $rcs) = $dev->audio_get_status; #print int($state->{disk_s}/60),':',$state->{disk_s}%60,,' ', $state->{track_s},"\n"; #foreach my $y ($state) { # while(my ($k,$v) = each (%$y)) { # print " $k -> $v\n"; # } #} # $state->{audio_status} 0x11 0x12 0x13 printf "player: %s track %d (%d) %d:%02d (%d:%02d)\n", $state->{status_text}, $state->{track}, $state->{index}, $state->{rel_m},$state->{rel_s},$state->{abs_m},$state->{abs_s}; if($state->{audio_status} == 0x11) { printf "\nsome information not available cause cd is playing: %0x\n", $state->{audio_status}; print "stop player to get full disc info\n" } } $dev->close; exit 0; sub print_cdtext { my $text = shift; my $nl = shift; return if !$text; foreach my $k (keys %$text) { my $t = $text->{$k}; Encode::from_to($t,"iso-8859-1", "utf8"); print $k,': ',$t, $nl if defined $t; } } sub cddb2cdtext { return undef; } # find devices (if device_name is undefined) sub find_devices { # $cap = shift my $drives = Device::Cdio::get_devices_with_cap( -capabilities => $perlcdio::FS_AUDIO, -any=>0); unless ($drives && @$drives > 0) { warn("Could not find a CD-ROM device\n"); return (); } return @$drives; } Device-Cdio-v2.0.0/examples/iso2.pl000555001750001750 607313222226267 16614 0ustar00rockyrocky000000000000#!/usr/bin/perl -w # Copyright (C) 2006, 2008, 2011 Rocky Bernstein # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Simple program to show using Device::Cdio::ISO9660 to extract a file # from an CD image. # # If a single argument is given, it is used as the ISO 9660 image to # use in the extraction. Otherwise a compiled in default ISO 9660 # image name (that comes with the libcdio distribution) will be used. use strict; BEGIN { chdir 'example' if -d 'example'; use lib '../lib'; eval "use blib"; # if we fail keep going - maybe we have installed Cdio } use POSIX; use IO::Handle; use Device::Cdio; use Device::Cdio::Device; use Device::Cdio::ISO9660; use Device::Cdio::ISO9660::FS; use Device::Cdio::Device; use File::Spec; # The default CD image if none given my $cd_image_path="../data"; my $cd_image_fname=File::Spec->catfile($cd_image_path, "isofs-m1.cue"); # File to extract if none given. my $iso9660_path="/"; my $local_filename="COPYING"; if (@ARGV >= 1) { $cd_image_fname = $ARGV[0]; if (@ARGV >= 2) { $local_filename = $ARGV[1]; if (@ARGV >= 3) { print " usage: $0 [CD-ROM-or-image [filename]] Extracts filename from CD-ROM-or-image. "; exit 1; } } } my $cd = Device::Cdio::ISO9660::FS->new(-source=>$cd_image_fname); if (!defined($cd)) { printf "Sorry, couldn't open %s as a CD image\n", $cd_image_fname; exit 1; } my $statbuf = $cd->stat (File::Spec->catfile($iso9660_path, $local_filename)); if (!defined($statbuf)) { printf "Could not get ISO-9660 file information for file %s in %s\n", $local_filename, $cd_image_fname; $cd->close(); exit 2; } open OUTPUT, ">$local_filename" or die "Can't open $local_filename for writing: $!"; binmode OUTPUT; # Copy the blocks from the ISO-9660 filesystem to the local filesystem. my $blocks = POSIX::ceil($statbuf->{size} / $perlcdio::ISO_BLOCKSIZE); for (my $i = 0; $i < $blocks; $i++) { my $lsn = $statbuf->{LSN} + $i; my $buf = $cd->read_data_blocks ($lsn); if (!defined($buf)) { printf "Error reading ISO 9660 file %s at LSN %d\n", $local_filename, $lsn; exit 4; } syswrite OUTPUT, $buf, $perlcdio::ISO_BLOCKSIZE; } OUTPUT->autoflush(1); # Make sure the file size has the exact same byte size. Without the # truncate below, the file will a multiple of ISO_BLOCKSIZE. truncate OUTPUT, $statbuf->{size}; printf "Extraction of file '%s' from %s successful.\n", $local_filename, $cd_image_fname; close OUTPUT; $cd->close(); exit 0; Device-Cdio-v2.0.0/examples/device.pl000555001750001750 1442113222226267 17213 0ustar00rockyrocky000000000000#!/usr/bin/perl -w # # Copyright (C) 2006, 2008, 2011 Rocky Bernstein # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Program to read CD blocks. See read-cd from the libcdio distribution # for a more complete program. BEGIN { chdir 'example' if -d 'example'; use lib '../lib'; eval "use blib"; # if we fail keep going - maybe we have installed Cdio } use Device::Cdio; use Device::Cdio::Device; use vars qw($0 $program $pause %opts); use strict; # Prints out drive capabilities sub print_drive_capabilities($$$) { my ($i_read_cap, $i_write_cap, $i_misc_cap) = @_; if ($i_misc_cap->{DRIVE_CAP_ERROR}) { printf("Error in getting drive hardware properties\n"); } else { printf("Hardware : %s\n", $i_misc_cap->{DRIVE_CAP_MISC_FILE} ? "Disk Image" : "CD-ROM or DVD"); printf("Can eject : %s\n", $i_misc_cap->{DRIVE_CAP_MISC_EJECT} ? "Yes" : "No"); printf("Can close tray : %s\n", $i_misc_cap->{DRIVE_CAP_MISC_CLOSE_TRAY} ? "Yes" : "No"); printf("Can disable manual eject : %s\n", $i_misc_cap->{DRIVE_CAP_MISC_LOCK} ? "Yes" : "No"); printf("Can select juke-box disc : %s\n\n", $i_misc_cap->{DRIVE_CAP_MISC_SELECT_DISC} ? "Yes" : "No"); printf("Can set drive speed : %s\n", $i_misc_cap->{DRIVE_CAP_MISC_SELECT_SPEED} ? "Yes" : "No"); # Don't think this bit is set accurately. # printf("Can detect if CD changed : %s\n", # $i_misc_cap->{DRIVE_CAP_MISC_MEDIA_CHANGED} # ? "Yes" : "No"); printf("Can read multiple sessions : %s\n", $i_misc_cap->{DRIVE_CAP_MISC_MULTI_SESSION} ? "Yes" : "No"); printf("Can hard reset device : %s\n\n", $i_misc_cap->{DRIVE_CAP_MISC_RESET} ? "Yes" : "No"); } if ($perlcdio::DRIVE_CAP_ERROR == $i_read_cap) { printf("Error in getting drive reading properties\n"); } else { printf("Reading....\n"); printf(" Can play audio : %s\n", $i_read_cap->{DRIVE_CAP_READ_AUDIO} ? "Yes" : "No"); printf(" Can read CD-DA : %s\n", $i_read_cap->{DRIVE_CAP_READ_CD_DA} ? "Yes" : "No"); printf(" Can read CD+G : %s\n", $i_read_cap->{DRIVE_CAP_READ_CD_G} ? "Yes" : "No"); printf(" Can read CD-R : %s\n", $i_read_cap->{DRIVE_CAP_READ_CD_R} ? "Yes" : "No"); printf(" Can read CD-RW : %s\n", $i_read_cap->{DRIVE_CAP_READ_CD_RW} ? "Yes" : "No"); printf(" Can read DVD-R : %s\n", $i_read_cap->{DRIVE_CAP_READ_DVD_R} ? "Yes" : "No"); printf(" Can read DVD+R : %s\n", $i_read_cap->{DRIVE_CAP_READ_DVD_PR} ? "Yes" : "No"); printf(" Can read DVD-RAM : %s\n", $i_read_cap->{DRIVE_CAP_READ_DVD_RAM} ? "Yes" : "No"); printf(" Can read DVD-ROM : %s\n", $i_read_cap->{DRIVE_CAP_READ_DVD_RW} ? "Yes" : "No"); printf(" Can read DVD-ROM : %s\n", $i_read_cap->{DRIVE_CAP_READ_DVD_RPW} ? "Yes" : "No"); printf(" Can read DVD+RW : %s\n", $i_read_cap->{DRIVE_CAP_READ_DVD_ROM} ? "Yes" : "No"); printf(" Can read C2 Errors : %s\n", $i_read_cap->{DRIVE_CAP_READ_C2_ERRS} ? "Yes" : "No"); printf(" Can read MODE 2 FORM 1 : %s\n", $i_read_cap->{DRIVE_CAP_READ_MODE2_FORM1} ? "Yes" : "No"); printf(" Can read MODE 2 FORM 2 : %s\n", $i_read_cap->{DRIVE_CAP_READ_MODE2_FORM2} ? "Yes" : "No"); printf(" Can read MCN : %s\n", $i_read_cap->{DRIVE_CAP_READ_MCN} ? "Yes" : "No"); printf(" Can read ISRC : %s\n", $i_read_cap->{DRIVE_CAP_READ_ISRC} ? "Yes" : "No"); } if ($perlcdio::DRIVE_CAP_ERROR == $i_write_cap) { printf("Error in getting drive writing properties\n"); } else { printf("\nWriting....\n"); printf(" Can write CD-RW : %s\n", $i_read_cap->{DRIVE_CAP_WRITE_CD_RW} ? "Yes" : "No"); printf(" Can write DVD-R : %s\n", $i_write_cap->{DRIVE_CAP_WRITE_DVD_R} ? "Yes" : "No"); printf(" Can write DVD-RAM : %s\n", $i_write_cap->{DRIVE_CAP_WRITE_DVD_RAM} ? "Yes" : "No"); printf(" Can write DVD-RW : %s\n", $i_write_cap->{DRIVE_CAP_WRITE_DVD_RW} ? "Yes" : "No"); printf(" Can write DVD-R+W : %s\n", $i_write_cap->{DRIVE_CAP_WRITE_DVD_RPW} ? "Yes" : "No"); printf(" Can write Mt Rainier : %s\n", $i_write_cap->{DRIVE_CAP_WRITE_MT_RAINIER}? "Yes" : "No"); printf(" Can write Burn Proof : %s\n", $i_write_cap->{DRIVE_CAP_WRITE_BURN_PROOF}? "Yes" : "No"); } } my ($d, $drive_name); if ($ARGV[0]) { $drive_name=$ARGV[0]; $d = Device::Cdio::Device->new(-source=>$drive_name); if (!defined($drive_name)) { print "Problem opening CD-ROM: $drive_name\n"; exit(1); } } else { $d = Device::Cdio::Device->new(-driver_id=>$perlcdio::DRIVER_DEVICE); $drive_name = $d->get_device(); if (!defined($drive_name)) { print "Problem finding a CD-ROM\n"; exit(1); } } my ($vendor, $model, $release, $drc) = $d->get_hwinfo(); print "drive: $drive_name, vendor: $vendor, " . "model: $model, release: $release\n"; my ($i_read_cap, $i_write_cap, $i_misc_cap) = $d->get_drive_cap(); print_drive_capabilities($i_read_cap, $i_write_cap, $i_misc_cap); print "\nDriver Availabiliity...\n"; foreach my $driver_name (sort keys(%Device::Cdio::drivers)) { print "Driver $driver_name is installed.\n" if Device::Cdio::have_driver($driver_name) and $driver_name !~ m{device|Unknown}; } $d->close(); Device-Cdio-v2.0.0/examples/cdchange.pl000555001750001750 350013222226267 17464 0ustar00rockyrocky000000000000#!/usr/bin/perl -w # $Id$ # # Copyright (C) 2006, 2008 Rocky Bernstein # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## Program to show CD media changing use strict; BEGIN { chdir 'example' if -d 'example'; use lib '../lib'; eval "use blib"; # if we fail keep going - maybe we have installed Cdio } use Device::Cdio; use Device::Cdio::Device; my $sleep_time = 15; my ($d, $drive_name); if ($ARGV[0]) { $drive_name=$ARGV[0]; $d = Device::Cdio::Device->new(-source=>$drive_name); if (!defined($drive_name)) { print "Problem opening CD-ROM: $drive_name\n"; exit(1); } } else { $d = Device::Cdio::Device->new(-driver_id=>$perlcdio::DRIVER_DEVICE); $drive_name = $d->get_device(); if (!defined($drive_name)) { print "Problem finding a CD-ROM\n"; exit(1); } } $sleep_time = $ARGV[1] if defined($ARGV[1]); if ($d->get_media_changed()) { print "Initial media status: changed\n"; } else { print "Initial media status: not changed\n"; } print "Giving you $sleep_time seconds to change CD if you want to do so.\n"; sleep($sleep_time); if ($d->get_media_changed()) { print "Media status: changed\n"; } else { print "Media status: not changed\n"; } $d->close(); Device-Cdio-v2.0.0/examples/README000444001750001750 305613222226267 16256 0ustar00rockyrocky000000000000A description of the example programs. audio.pl show mostly audio (analog) controls. Can be used to play a CD. Because libcdio supports Disc Images as well as a real CD-ROM, a CDRWIN (BIN/CUE), cdrdao (TOC) or Nero NRG disc image can be played as well. Run --help to get a list of options cdchange.pl: A program to test if a CD has been changed since the last change test. checkcd.pl: A program to show properties of a CD such as the CD type (audio CD, ISO 9660, UDF). device.pl A program to show drive capabilities.. Various drives on various OS/s may or may not report information correctly. (Perhaps someday libcdio will figure out enough work arounds. voluneteers welcome!) drives.pl: A program list CD-ROMs and CD properties in the drives. Various drives on various OS/s may or may not report information correctly. (Perhaps someday libcdio will figure out enough work arounds. voluneteers welcome!) eject.pl A program to eject a CD from a CD-ROM drive and then close the door again. iso1.pl: A program to show using Device::Cdio::ISO9660 to list files in a directory of an ISO-9660 image. iso2.pl: A program to show using Device::Cdio::ISO9660 to extract a file from a CDRWIN cue/bin CD image. iso3.pl: A program to show using Device::Cdio::ISO9660 to extract a file from an ISO-9660 image. tracks.pl A program to list track numbers and logical sector numbers of a Compact Disc Device-Cdio-v2.0.0/examples/iso1.pl000555001750001750 535113222226267 16611 0ustar00rockyrocky000000000000#!/usr/bin/perl -w # Copyright (C) 2006, 2008, 2017 Rocky Bernstein # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # A simple program to show using libiso9660 to list files in a directory of # an ISO-9660 image. # # If a single argument is given, it is used as the ISO 9660 image to # use in the listing. Otherwise a compiled-in default ISO 9660 image # name (that comes with the libcdio distribution) will be used. use strict; BEGIN { chdir 'example' if -d 'example'; use lib '../lib'; eval "use blib"; # if we fail keep going - maybe we have installed Cdio } use Device::Cdio; use Device::Cdio::Device; use Device::Cdio::ISO9660; use Device::Cdio::ISO9660::IFS; use File::Spec; sub tm2str($) { my $tm = shift; return sprintf("%s %02d %s %s:%s:%s", qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec")[$tm->{mon}-1], $tm->{mday}, $tm->{year}, $tm->{hour}, $tm->{min}, $tm->{sec}); } # The default ISO 9660 image if none given my $ISO9660_IMAGE_PATH="../data"; my $ISO9660_IMAGE=File::Spec->catfile($ISO9660_IMAGE_PATH, "copying.iso"); my $iso_image_fname = $ISO9660_IMAGE; $iso_image_fname = $ARGV[0] if @ARGV >= 1; my $iso = Device::Cdio::ISO9660::IFS->new(-source=>$iso_image_fname); if (!defined($iso)) { printf "Sorry, couldn't open %s as an ISO-9660 image.\n", $iso_image_fname; exit 1; } my $path = '/'; my @file_stats = $iso->readdir($path); my $id = $iso->get_application_id(); printf "Application ID: %s\n", $id if defined($id); $id = $iso->get_preparer_id(); printf "Preparer ID: %s\n", $id if defined($id); $id = $iso->get_publisher_id(); printf "Publisher ID: %s\n", $id if defined($id); $id = $iso->get_system_id(); printf "System ID: %s\n", $id if defined($id); $id = $iso->get_volume_id(); printf "Volume ID: %s\n", $id if defined($id); $id = $iso->get_volumeset_id(); printf "Volumeset ID: %s\n", $id if defined($id); foreach my $href (@file_stats) { printf "%s [LSN %6d] %8d %s %s%s\n", $href->{is_dir} ? "d" : "-", $href->{LSN}, $href->{size}, tm2str($href->{tm}), $path, Device::Cdio::ISO9660::name_translate($href->{filename}); } $iso->close(); exit 0; Device-Cdio-v2.0.0/examples/iso3.pl000555001750001750 603613222226267 16614 0ustar00rockyrocky000000000000#!/usr/bin/perl -w # Copyright (C) 2006, 2008 Rocky Bernstein # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Simple program to show using Device::Cdio::ISO9660 to extract a file # from an ISO-9660 image. # # If a single argument is given, it is used as the ISO 9660 image to # use in the extraction. Otherwise a compiled in default ISO 9660 # image name (that comes with the libcdio distribution) will be used. use strict; BEGIN { chdir 'example' if -d 'example'; use lib '../lib'; eval "use blib"; # if we fail keep going - maybe we have installed Cdio } use POSIX; use IO::Handle; use Device::Cdio; use Device::Cdio::Device; use Device::Cdio::ISO9660; use Device::Cdio::ISO9660::IFS; use File::Spec; # The default ISO 9660 image if none given my $ISO9660_IMAGE_PATH="../data"; my $ISO9660_IMAGE=File::Spec->catfile($ISO9660_IMAGE_PATH, "copying.iso"); # File to extract if none given. my $local_filename="copying"; my $iso_image_fname = $ISO9660_IMAGE; if (@ARGV >= 1) { $iso_image_fname = $ARGV[0]; if (@ARGV >= 2) { $local_filename = $ARGV[1]; if (@ARGV >= 3) { print " usage: $0 [ISO9660-image.ISO [filename]] Extracts filename from ISO9660-image.ISO. "; exit 1; } } } my $iso = Device::Cdio::ISO9660::IFS->new(-source=>$iso_image_fname); if (!defined($iso)) { printf "Sorry, couldn't open %s as an ISO-9660 image\n.", $iso_image_fname; exit 1; } my $statbuf = $iso->stat ($local_filename, 1); if (!defined($statbuf)) { printf "Could not get ISO-9660 file information for file %s\n", $local_filename; $iso->close(); exit 2; } open OUTPUT, ">$local_filename" or die "Can't open $local_filename for writing: $!"; binmode OUTPUT; # Copy the blocks from the ISO-9660 filesystem to the local filesystem. my $blocks = POSIX::ceil($statbuf->{size} / $perlcdio::ISO_BLOCKSIZE); for (my $i = 0; $i < $blocks; $i++) { my $lsn = $statbuf->{LSN} + $i; my $buf = $iso->seek_read ($lsn); if (!defined($buf)) { printf "Error reading ISO 9660 file %s at LSN %d\n", $local_filename, $lsn; exit 4; } syswrite OUTPUT, $buf, $perlcdio::ISO_BLOCKSIZE; } OUTPUT->autoflush(1); # Make sure the file size has the exact same byte size. Without the # truncate below, the file will a multiple of ISO_BLOCKSIZE. truncate OUTPUT, $statbuf->{size}; printf "Extraction of file '%s' from %s successful.\n", $local_filename, $iso_image_fname; close OUTPUT; $iso->close(); exit 0; Device-Cdio-v2.0.0/examples/eject.pl000555001750001750 364013222226267 17027 0ustar00rockyrocky000000000000#!/usr/bin/perl -w # Copyright (C) 2006, 2008, 2011 Rocky Bernstein # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Program to Eject and close CD-ROM drive BEGIN { chdir 'example' if -d 'example'; use lib '../lib'; eval "use blib"; # if we fail keep going - maybe we have installed Cdio } use Device::Cdio; use Device::Cdio::Device; my $drive_name; my $d; if ($ARGV[0]) { $drive_name=$ARGV[0]; $d = Device::Cdio::Device->new(-source=>$drive_name); if (!defined($drive_name)) { print "Problem opening CD-ROM: $drive_name\n"; exit(1); } } else { $d = Device::Cdio::Device->new(-driver_id=>$perlcdio::DRIVER_DEVICE); $drive_name = $d->get_device(); if (!defined($drive_name)) { print "Problem finding a CD-ROM\n"; exit(1); } } print "Ejecting CD in drive $drive_name\n"; my $drc = $d->eject_media(); if ($drc == $perlcdio::DRIVER_OP_SUCCESS) { my ($drc, $driver_id) = Device::Cdio::close_tray($drive_name); if ($drc == $perlcdio::DRIVER_OP_SUCCESS) { print "Closed tray of CD-ROM drive $drive_name\n"; } else { print "Closing tray of CD-ROM drive $drive_name failed\n"; } } elsif ($drc= $perlcdio::DRIVER_OP_UNSUPPORTED) { print "Eject not supported for $drive_name\n"; } else { print "Eject of CD-ROM drive $drive_name failed\n"; } Device-Cdio-v2.0.0/examples/cd-read.pl000555001750001750 1042313222226267 17251 0ustar00rockyrocky000000000000#!/usr/bin/perl -w # # Copyright (C) 2006, 2008, 2011 Rocky Bernstein # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Program to read CD blocks. See read-cd from the libcdio distribution # for a more complete program. use strict; BEGIN { chdir 'example' if -d 'example'; use lib '../lib'; eval "use blib"; # if we fail keep going - maybe we have installed Cdio } use Device::Cdio; use Device::Cdio::Device; use vars qw($0 $program %opts $read_mode); my %read_modes = ( 'audio'=> $perlcdio::READ_MODE_AUDIO, 'm1f1' => $perlcdio::READ_MODE_M1F1, 'm1f2' => $perlcdio::READ_MODE_M1F2, 'm2f1' => $perlcdio::READ_MODE_M2F1, 'm2f2' => $perlcdio::READ_MODE_M2F2, 'data' => undef ); sub init() { use File::Basename; $program = basename($0); # Who am I today, anyway? $opts{start} = 1; $opts{number}= 1; $opts{mode} = undef; $read_mode = undef; } # Show the CVS version id string and quit. sub show_version() { print "$program version $Device::Cdio::VERSION\n"; exit 1; } sub usage { my($full_help) = @_; print " usage: $program --mode [mode] [other options] [device] Read blocks of a CD or CD image. options: --help -- print this help and exit --mode *name* -- CD Reading mode: audio, m1f1, m1f2, m2f1 or m2f2 --start *n* -- starting block number. Default 1. --number *n* -- Number fo block. Default 1. "; exit 100; } # The bane of programming. sub process_options() { use Getopt::Long; my(@opt_cf); $Getopt::Long::autoabbrev = 1; my($help, $long_help, $show_version); my $result = &GetOptions ( 'help' => \$help, 'mode=s' => \$opts{mode}, 'start=n' => \$opts{start}, 'number=n' => \$opts{number}, ); show_version() if $show_version; usage(0) unless $result || @ARGV > 1; usage(1) if $help; if (!$opts{mode} ) { print "Read mode option must given.\n"; exit 1 } $read_mode = $read_modes{$opts{mode}}; if (!defined($read_mode)) { print "Read mode must be one of audio, m1f1, m1f2, m1f2 or m1f2.\n"; exit 1; } } # Standard C library's isprint() in Ruby sub isprint($) { return $_[0] =~ m{^[: -~]$} ; } # Print a hex dump and string interpretation of buffer. # If just_hex is true, then show only the hex dump. sub hexdump ($) { my $buffer = $_[0]; foreach my $i (0 .. length($buffer) - 1) { printf "0x%04x: ", $i if $i % 16 == 0; printf "%02x", ord(substr($buffer, $i, 1)); printf " " if $i % 2 == 1; if ($i % 16 == 15) { printf " "; foreach my $j ($i-15 .. $i) { printf "%s", isprint(substr($buffer, $j, 1)) ? substr($buffer, $j, 1) : '.'; } print "\n"; } } print "\n"; } init(); process_options(); my ($drive_name, $d); if ($ARGV[0]) { $drive_name=$ARGV[0]; $d = Device::Cdio::Device->new(-source=>$drive_name); if (!defined($drive_name)) { print "Problem opening CD-ROM: $drive_name\n"; exit(1); } } else { $d = Device::Cdio::Device->new(-driver_id=>$perlcdio::DRIVER_DEVICE); $drive_name = $d->get_device(); if (!defined($drive_name)) { print "Problem finding a CD-ROM\n"; exit(1); } } ## All this setup just to issue this one of these commands. my ($data, $size, $drc); if (defined($read_mode)) { ($data, $size, $drc) = $d->read_sectors($opts{start}, $read_mode, $opts{number}); } else { ($data, $size, $drc) = $d->read_data_blocks($opts{start}, $opts{number}); } if ($perlcdio::DRIVER_OP_SUCCESS == $drc) { hexdump($data); } else { print "Error reading block $opts{start} mode $opts{mode} on $drive_name\n"; printf "Return code message: %s", Device::Cdio::driver_strerror($drc); } Device-Cdio-v2.0.0/examples/.gitignore000444001750001750 4513222226267 17321 0ustar00rockyrocky000000000000/*~ /.gdb_history /COPYING /copying Device-Cdio-v2.0.0/t000755001750001750 013222226267 13662 5ustar00rockyrocky000000000000Device-Cdio-v2.0.0/t/06.image.t000555001750001750 145713222226267 15524 0ustar00rockyrocky000000000000#!/usr/bin/env perl # Test that we have image drivers use strict; use warnings; use lib '../lib'; use blib; use Device::Cdio::Device; use Test::More; note "Test we have image drivers"; my $result = Device::Cdio::have_driver('CDRDAO'); ok($result, "Have cdrdrao driver via string"); $result = Device::Cdio::have_driver($perlcdio::DRIVER_CDRDAO); ok($result, "Have cdrdrao driver via driver_id"); $result = Device::Cdio::have_driver('NRG'); ok($result, "Have NRG driver via string"); $result = Device::Cdio::have_driver($perlcdio::DRIVER_NRG); ok($result, "Have NRG driver via driver_id"); $result = Device::Cdio::have_driver('BIN/CUE'); ok($result, "Have BIN/CUE driver via string"); $result = Device::Cdio::have_driver($perlcdio::DRIVER_BINCUE); ok($result, "Have BIN/CUE driver via driver_id"); done_testing(); Device-Cdio-v2.0.0/t/07.iso2.t000555001750001750 5135313222226267 15337 0ustar00rockyrocky000000000000#!/usr/bin/env perl # Test of some ISO9660::IFS routines # This is similar to example/iso2.pl use strict; use warnings; use Config; BEGIN { chdir 't' if -d 't'; use lib '../lib'; eval "use blib"; # if we fail keep going - maybe we have installed Cdio } use Device::Cdio; use Device::Cdio::Device; use Device::Cdio::ISO9660; use Device::Cdio::ISO9660::FS; use File::Spec; use POSIX; use Test::More tests => 5; note 'Test ISO9660::IFS routines'; # Use Canonic timezone in date testing $ENV{'TZ'} = 'UTC'; # The test CD image my $CD_IMAGE_PATH="../data"; my $cd_image_fname=File::Spec->catfile($CD_IMAGE_PATH, "isofs-m1.cue"); my $local_filename='COPYING'; my $cd = Device::Cdio::ISO9660::FS->new(-source=>$cd_image_fname); ok(defined($cd), "Open CD image $cd_image_fname") ; my $good_stat = { LSN=>26, 'filename'=>$local_filename, is_dir=>'', sec_size=>9, size=>17992, tm => { hour => 12, isdst => 0, mday => 29, min => 39, mon => 7, sec => 53, wday => 1, yday => 209, year => 2002, }, }; my $stat_href = $cd->find_lsn(26); is_deeply($stat_href, $good_stat, 'CD 9660 file stats: find_lsn(26)'); my $statbuf = $cd->stat (File::Spec->catfile("/", $local_filename)); is_deeply($statbuf, $good_stat, "CD 9660 file stats: stat('$local_filename)'"); my @iso_stat = $cd->readdir ("/"); my @good_stat = ( { LSN=>23, 'filename'=>'.', is_dir=>1, sec_size=>1, size=>2048, tm => { hour => 11, isdst => 0, mday => 20, min => 26, mon => 4, sec => 46, wday => 0, yday => 109, year => 2003, }, }, { LSN=>23, 'filename'=>'..', is_dir=>1, sec_size=>1, size=>2048, tm => { hour => 11, isdst => 0, mday => 20, min => 26, mon => 4, sec => 46, wday => 0, yday => 109, year => 2003, }, }, { LSN=>26, 'filename'=>'COPYING', is_dir=>'', sec_size=>9, size=>17992, tm => { hour => 12, isdst => 0, mday => 29, min => 39, mon => 7, sec => 53, wday => 1, yday => 209, year => 2002, }, }, { LSN=>24, 'filename'=>'doc', is_dir=>1, sec_size=>1, size=>2048, tm => { hour => 16, isdst => 0, mday => 20, min => 18, mon => 4, sec => 53, wday => 0, yday => 109, year => 2003, }, }, ); is_deeply(\@iso_stat, \@good_stat, "Read directory: readdir('/')"); # Get file my $buf =''; my $blocks = POSIX::ceil($statbuf->{size} / $perlcdio::ISO_BLOCKSIZE); for (my $i = 0; $i < $blocks; $i++) { my $lsn = $statbuf->{LSN} + $i; $buf .= $cd->read_data_blocks ($lsn); if (!defined($buf)) { printf "Error reading ISO 9660 file %s at LSN %d\n", $local_filename, $lsn; exit 4; } } my $file_contents= " GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The \"Program\", below, refers to any such program or work, and a \"work based on the Program\" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term \"modification\".) Each licensee is addressed as \"you\". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and \"any later version\", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the \"copyright\" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a \"copyright disclaimer\" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License "; my $len=$statbuf->{size}; ok(substr($file_contents, 0, $len) eq substr($file_contents, 0, $len), 'File contents comparison') ; $cd->close(); Device-Cdio-v2.0.0/t/01.pod-coverage.t000555001750001750 76013222226267 16764 0ustar00rockyrocky000000000000#!/usr/bin/perl -T use strict; BEGIN { chdir 't' if -d 't'; } use lib '../blib/lib', '../blib/arch'; use Test::More; note "Testing Perl POD documentation"; eval "use Test::Pod::Coverage 1.08"; plan skip_all => "Test::Pod::Coverage 1.08 required for testing POD coverage" if $@; # Don't know how to get this from perlcdio ignored. pod_coverage_ok( 'perlcdio', { also_private => [ qr/^.*$/ ], }, "Everything in perlcdio is private as it is auto-generated" ); done_testing(); Device-Cdio-v2.0.0/t/11.dev.t000444001750001750 414313222226267 15204 0ustar00rockyrocky000000000000#!/usr/bin/env perl # Test device operations # No assumption about the CD-ROM drives is made, so # we're just going to run operations and see that they # don't crash. use strict; use warnings; use lib '../lib'; use blib; use Device::Cdio; use Device::Cdio::Device; use Test::More; #should be imported from Build.PL or ... my $device = '/dev/cdrom'; note 'Test running audio device operations'; my $dev = Device::Cdio::Device->new(-driver_id=>$perlcdio::DRIVER_DEVICE); ok ( defined $dev , 'Device::Cdio::Device->new(-driver_id=>$perlcdio::DRIVER_DEVICE)'); my $drive_name = $dev->get_device(); note('Device->new(DRIVER_DEVICE)((i.e.:',$perlcdio::DRIVER_DEVICE,')) found: ',$drive_name); if ($ENV{'CI'}) { done_testing(); } else { #my @drives = Device::Cdio::get_devices_with_cap( # -capabilities => $perlcdio::FS_AUDIO, # -any=>0); my @drives = Device::Cdio::get_devices($perlcdio::DRIVER_DEVICE); SKIP : { my @hwinfo = $dev->get_hwinfo; ok ( $hwinfo[3] , 'Device::Cdio::Device->get_hwinfo'); note("Testing ", $device, ' ', $hwinfo[0],' ',$hwinfo[1]); my ($vols,$rcv) =$dev->audio_get_volume; ok ( $rcv == 0 , 'Device::Cdio::Device->audio_get_volume'); note('Volume was set to ',join(', ',@$vols)); $dev->audio_set_volume(-1,-1,-1,-1); my ($nvols, $mvols); ($nvols,$rcv) =$dev->audio_get_volume; is_deeply($vols, $nvols, "audio_set_volume keep values"); $dev->audio_set_volume(255,255); ($mvols,$rcv) =$dev->audio_get_volume; @$nvols[0] = 255; @$nvols[1] = 255; is_deeply($mvols, $nvols, "audio_set_volume 2 channels"); $dev->audio_set_volume(100,100,-1,255); ($mvols,$rcv) =$dev->audio_get_volume; @$nvols[0] = 100; @$nvols[1] = 100; @$nvols[3] = 255; my $c4 = eq_array ($mvols, $nvols) || note('4 channels are not supported: ',join(', ',@$mvols)); $dev->audio_set_volume(@$vols[0], @$vols[1], @$vols[2], @$vols[3]); ($mvols,$rcv) =$dev->audio_get_volume; is_deeply($mvols, $vols, "audio_set_volume reset"); SKIP2: { skip '4 volume channels are not supported', 1, unless $c4 ; is_deeply($mvols, $nvols, "audio_set_volume 4 channels"); } } done_testing(); } Device-Cdio-v2.0.0/t/10.cdtext.t000444001750001750 212513222226267 15716 0ustar00rockyrocky000000000000#!/usr/bin/env perl # Unit test for cdtext. use Test::More; # 'no_plan'; use strict; use warnings; use lib '../lib'; use blib; use File::Basename; use Device::Cdio::Device; use perlcdio; no warnings; is(perlcdio::cdtext_field2str($perlcdio::CDTEXT_FIELD_PERFORMER), "PERFORMER"); # Test getting CD-Text my $tocpath = File::Spec->catfile(dirname(__FILE__), '..', 'data', 'cdtext-test.toc'); my $device = Device::Cdio::Device->new($tocpath, $perlcdio::DRIVER_CDRDAO); ok($device, "Able to find CDRDAO driver for cdtext.toc"); my $langs = $device->cdtext_list_languages (); is(scalar(@$langs), 4, "Retrieving CD-Text languages"); is($langs->[0], $perlcdio::CDTEXT_LANGUAGE_ENGLISH, "First Language is English"); my $text = $device->get_disc_cdtext(); is($text->{$perlcdio::CDTEXT_FIELD_PERFORMER}, 'Performer'); is($text->{$perlcdio::CDTEXT_FIELD_DISCID}, 'XY12345'); $text = $device->cdtext_field_for_track($perlcdio::CDTEXT_FIELD_TITLE, 1); is($text, 'Track Title'); my $text = $device->cdtext_field_for_disc($perlcdio::CDTEXT_FIELD_TITLE); is($text, 'CD Title'); $device->close(); done_testing(); Device-Cdio-v2.0.0/t/00.load.t000555001750001750 42113222226267 15321 0ustar00rockyrocky000000000000#!/usr/bin/env perl use strict; use warnings; use lib '../lib'; use blib; use Test::More tests => 2; note( "Testing Device::Cdio $Device::Cdio::VERSION" ); BEGIN { use_ok( 'Device::Cdio' ); } ok(defined($Device::Cdio::VERSION), "\$Device::Cdio::VERSION number is set"); Device-Cdio-v2.0.0/t/10.read.t000555001750001750 211113222226267 15334 0ustar00rockyrocky000000000000#!/usr/bin/env perl # Test functioning of read routines use strict; use warnings; BEGIN { chdir 't' if -d 't'; } use lib '../lib'; use blib; use Device::Cdio::Device; use Test::More tests => 6; note "Test functioning of read routines"; use Cwd; my $cuefile= Cwd::abs_path("../data/isofs-m1.cue"); my $device = Device::Cdio::Device->new(-source=>$cuefile); # Read the ISO Primary Volume descriptor my($data, $size, $drc) = $device->read_sectors(16, $perlcdio::READ_MODE_M1F1); ok(substr($data, 1, 5) eq 'CD001' && $perlcdio::M2RAW_SECTOR_SIZE == length($data), "Mode 1 Format 1 reading"); ok(substr($data, 2328, 2) eq "\0\0", "Mode 1 Format 1 reading - null bytes"); my $data2 = $device->read_sectors(16, $perlcdio::READ_MODE_M1F1, 1); ok($data2 eq $data, "Mode 1 reading with block parameter"); my $data3 = $device->read_data_blocks(16, 1); ok($data2 eq $data, "Mode 1 reading matches data reading (block parameter)"); ($data, $size, $drc) = $device->read_data_blocks(26); ok(substr($data, 6, 26) eq 'GNU GENERAL PUBLIC LICENSE'); ok($size == $perlcdio::ISO_BLOCKSIZE); Device-Cdio-v2.0.0/t/01.pod.t000555001750001750 43113222226267 15166 0ustar00rockyrocky000000000000#!/usr/bin/perl -T use strict; use warnings; BEGIN { push @INC, ('../blib/lib', '../blib/arch'); } use Test::More; note("Test POD Documentation"); eval "use Test::Pod 1.14"; plan skip_all => "Test::Pod 1.14 required for testing POD" if $@; all_pod_files_ok(); done_testing(); Device-Cdio-v2.0.0/t/06.toc.t000555001750001750 361713222226267 15227 0ustar00rockyrocky000000000000#!/usr/bin/env perl #Test functioning of cdrdao image routines use strict; use warnings; use lib '../lib'; use blib; use Device::Cdio::Device; use Test::More tests => 12; note "Test cdrdao image routines"; ## TOC reading needs to be done in the directory where the ## TOC/BIN files reside. if (-d "data") { chdir "data" ; } elsif (-d "../data") { chdir "../data" ; } my $tocfile = "cdda.toc"; my $device = Device::Cdio::Device->new(-source=>$tocfile, -driver_id=>$perlcdio::DRIVER_CDRDAO); my ($vendor, $model, $revision, $drc) = $device->get_hwinfo(); ## FIXME: ## ok($perlcdio::DRIVER_OP_SUCCESS == $drc, "get_hwinfo ok"); ok(defined($vendor) && 'libcdio' eq $vendor, "get_hwinfo vendor"); ok(defined($model) && 'cdrdao' eq $model, "get_hwinfo cdrdao"); # Test known values of various access parameters: # access mode, driver name via string and via driver_id # and cue name my $result = $device->get_arg("access-mode"); ok($result eq 'image', 'get_arg("access_mode")'); $result = $device->get_driver_name(); ok(defined($result) && $result eq 'CDRDAO', 'get_driver_name'); $result = $device->get_driver_id(); ok(defined($result) && $result eq $perlcdio::DRIVER_CDRDAO, 'get_driver_id'); $result = $device->get_arg("source"); ok(defined($result) && $result eq $tocfile, 'get_arg("source")'); $result = $device->get_media_changed(); ok(!$result, "tocfile: get_media_changed"); # Test getting is_tocfile $result = Device::Cdio::is_tocfile($tocfile); ok(defined($result) && $result, "is_tocfile(tocfile)"); $result = Device::Cdio::is_nrg($tocfile); ok(defined($result) && !$result, "is_nrgfile(tocfile)"); $result = Device::Cdio::is_device($tocfile); ok(defined($result) && !$result, "is_device(tocfile)"); $drc = $device->set_blocksize(2048); ok($perlcdio::DRIVER_OP_UNSUPPORTED == $drc, "set blocksize"); $drc = $device->set_speed(5); ok($perlcdio::DRIVER_OP_UNSUPPORTED == $drc, "set speed"); $device->close(); Device-Cdio-v2.0.0/t/10.cdda.t000555001750001750 231013222226267 15315 0ustar00rockyrocky000000000000#!/usr/bin/env perl ##Test functioning CD-DA use strict; use warnings; BEGIN { chdir 't' if -d 't'; } use lib '../lib'; use blib; use Device::Cdio::Device; use Test::More tests => 10; note('Test functioning CD-DA'); my $cuefile = '../data/cdda.cue'; my $device = Device::Cdio::Device->new(-source=>$cuefile); $device->open($cuefile); my $result = $device->get_disc_mode(); ok(defined($result) && $result eq 'CD-DA', 'get_disc_mode'); ok($device->get_mcn() eq '0000010271955', 'get_mcn'); my $drc = $device->get_last_session(); # self.assertRaises(IOError, $device->get_joliet_level) $result = $device->get_num_tracks(); ok($result == 1, 'get_num_tracks'); my $disc_last_lsn = $device->get_disc_last_lsn(); ok($disc_last_lsn == 302, 'get_disc_last_lsn'); my $t=$device->get_last_track(); ok(defined($t) && $t->{track} == 1, 'get_last_track'); ok(defined($t) && $t->get_last_lsn() == 301, '(track) get_last_lsn'); ok($device->get_track_for_lsn($t->get_last_lsn())->{track} == $t->{track}, 'get_track_for_lsn'); $t=$device->get_first_track(); ok($t->{track} == 1, 'get_first_track'); ok($t->get_format() eq 'audio', 'get_track_format'); ok($t->get_msf() eq "00:02:00", "get_msf"); $device->close(); done_testing(); Device-Cdio-v2.0.0/t/07.iso1.t000555001750001750 412213222226267 15306 0ustar00rockyrocky000000000000#!/usr/bin/env perl # Test of some ISO9660::IFS routines # This is similar to example/iso1.pl use strict; use warnings; use Config; BEGIN { chdir 't' if -d 't'; use lib '../lib'; eval "use blib"; # if we fail keep going - maybe we have installed Cdio } use Device::Cdio; use Device::Cdio::Device; use Device::Cdio::ISO9660; use Device::Cdio::ISO9660::IFS; use File::Spec; use Test::More tests => 6; note 'Test ISO9660::IFS routines'; # Use Canonic timezone in date testing $ENV{'TZ'} = 'UTC'; # The test ISO 9660 image my $ISO9660_IMAGE_PATH="../data"; my $iso_image_fname=File::Spec->catfile($ISO9660_IMAGE_PATH, "copying.iso"); my $iso = Device::Cdio::ISO9660::IFS->new(-source=>$iso_image_fname); ok(defined($iso), "Open ISO 9660 image $iso_image_fname") ; ok($iso->get_application_id() eq "MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING", "get_application_id()"); ok($iso->get_system_id() eq "LINUX", "get_system_id() eq 'LINUX'"); ok($iso->get_volume_id() eq "CDROM", "get_volume_id() eq 'CDROM'"); my $path = '/'; my @file_stats = $iso->readdir($path); my @okay_stats = ( { LSN=>23, 'filename'=>'.', is_dir=>1, sec_size=>1, size=>2048, tm => { hour => 21, isdst => 0, mday => 5, min => 50, mon => 1, sec => 19, wday => 4, yday => 4, year => 2006, }, }, { LSN=>23, 'filename'=>'..', is_dir=>1, sec_size=>1, size=>2048, tm => { hour => 21, isdst => 0, mday => 5, min => 50, mon => 1, sec => 19, wday => 4, yday => 4, year => 2006, }, }, { LSN=>24, 'filename'=>'COPYING.;1', is_dir=>'', sec_size=>9, size=>18002, tm => { hour => 21, isdst => 0, mday => 5, min => 46, mon => 1, sec => 30, wday => 4, yday => 4, year => 2006, } }, ); is_deeply(\@file_stats, \@okay_stats, 'ISO 9660 file stats'); my $copy_stat = $iso->find_lsn(24); is_deeply($copy_stat, $okay_stats[2], "Finding stat for root (24)"); $iso->close(); Device-Cdio-v2.0.0/t/07.iso.t000555001750001750 1151213222226267 15246 0ustar00rockyrocky000000000000#!/usr/bin/env perl # Test some low-level ISO9660 routines # This is basically the same thing as libcdio's testiso9660.c use strict; use warnings; use Config; use lib '../lib'; use blib; use perliso9660; use Test::More tests => 15; note 'Test low-level ISO9660 routines'; sub is_eq($$) { my ($a_ref, $b_ref) = @_; return 0 if @$a_ref != @$b_ref; for (my $i=0; $i<@$a_ref; $i++) { if ($a_ref->[$i] != $b_ref->[$i]) { printf "position %d: %d != %d\n", $i, $a_ref->[$i], $b_ref->[$i]; return 0 ; } } return 1; } ################################### # Test ACHAR and DCHAR ################################### my @achars = ('!', '"', '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', '?', '<', '=', '>'); my $bad = 0; for (my $c=ord('A'); $c<=ord('Z'); $c++ ) { if (!perliso9660::is_dchar($c)) { printf "Failed iso9660_is_achar test on %c\n", $c; $bad++; } if (!perliso9660::is_achar($c)) { printf "Failed iso9660_is_achar test on %c\n", $c; $bad++; } } ok($bad==0, 'is_dchar & is_achar A..Z'); $bad=0; for (my $c=ord('0'); $c<=ord('9'); $c++ ) { if (!perliso9660::is_dchar($c)) { printf "Failed iso9660_is_dchar test on %c\n", $c; $bad++; } if (!perliso9660::is_achar($c)) { printf "Failed iso9660_is_achar test on %c\n", $c; $bad++; } } ok($bad==0, 'is_dchar & is_achar 0..9'); $bad=0; for (my $i=0; $i<=13; $i++ ) { my $c=ord($achars[$i]); if (perliso9660::is_dchar($c)) { printf "Should not pass is_dchar test on %c\n", $c; $bad++; } if (!perliso9660::is_achar($c)) { printf "Failed is_achar test on symbol %c\n", $c; $bad++; } } ok($bad==0, 'is_dchar & is_achar symbols'); my $dst; ##################################### # Test perliso9660::strncpy_pad ##################################### SKIP: { # skip("strncpy_pad broken too often. Volunteers for fixing?.", 2); # if 'cygwin' eq $Config{osname}; $dst = perliso9660::strncpy_pad("1_3", 5, $perliso9660::DCHARS); ok($dst eq "1_3 ", "strncpy_pad DCHARS"); $dst = perliso9660::strncpy_pad("ABC!123", 2, $perliso9660::ACHARS); ok($dst eq "AB", "strncpy_pad ACHARS truncation"); } ##################################### # Test perliso9660::dirname_valid_p ##################################### $bad=0; if ( perliso9660::dirname_valid_p("/NOGOOD") ) { printf("/NOGOOD should fail perliso9660::dirname_valid_p\n"); $bad++; } ok($bad==0, 'perliso9660::dirname_valid_p - invalid name - bad symbol'); $bad=0; if ( perliso9660::dirname_valid_p("LONGDIRECTORY/NOGOOD") ) { printf("LONGDIRECTORY/NOGOOD should fail perliso9660::dirname_valid_p\n"); $bad++; } ok($bad==0, 'perliso9660::dirname_valid_p - invalid long name'); $bad=0; if ( !perliso9660::dirname_valid_p("OKAY/DIR") ) { printf("OKAY/DIR should pass perliso9660::dirname_valid_p\n"); $bad++; } ok($bad==0, 'perliso9660::dirname_valid_p - valid with directory'); $bad=0; if ( perliso9660::dirname_valid_p("OKAY/FILE.EXT") ) { printf("OKAY/FILENAME.EXT should fail perliso9660::dirname_valid_p\n"); $bad++; } ok($bad==0, 'perliso9660::dirname_valid_p - invalid with .EXT'); ##################################### # Test perliso9660::pathname_valid_p ##################################### $bad=0; if ( !perliso9660::pathname_valid_p("OKAY/FILE.EXT") ) { printf("OKAY/FILE.EXT should pass perliso9660::dirname_valid_p\n"); $bad++; } ok($bad==0, 'perliso9660::pathname_valid_p - valid'); $bad=0; if ( perliso9660::pathname_valid_p("OKAY/FILENAMETOOLONG.EXT") ) { printf("OKAY/FILENAMETOOLONG.EXT should fail perliso9660::dirname_valid_p\n"); $bad++; } ok($bad==0, 'perliso9660::pathname_valid_p - invalid, long basename'); $bad=0; if ( perliso9660::pathname_valid_p("OKAY/FILE.LONGEXT") ) { printf("OKAY/FILE.LONGEXT should fail perliso9660::dirname_valid_p\n"); $bad++; } ok($bad==0, 'perliso9660::pathname_valid_p - invalid, long extension'); $bad=0; $dst = perliso9660::pathname_isofy("this/file.ext", 1); if ($dst ne "this/file.ext;1") { printf("Failed iso9660_pathname_isofy\n"); $bad++; } ok($bad==0, 'perliso9660::pathname_isofy'); my @tm = localtime(0); my $dtime = perliso9660::set_dtime($tm[0], $tm[1], $tm[2], $tm[3], $tm[4], $tm[5]); my ($bool, @new_tm) = perliso9660::get_dtime($dtime, 0); ok(is_eq(\@new_tm, \@tm), 'get_dtime(set_dtime())'); # @tm = gmtime(0); # my $ltime = perliso9660::set_ltime($tm[0], $tm[1], $tm[2], $tm[3], $tm[4], # $tm[5]); # ($bool, @new_tm) = perliso9660::get_ltime($ltime); # ok(is_eq(\@new_tm, \@tm), 'get_ltime(set_ltime())'); @tm = gmtime(); my $ltime = perliso9660::set_ltime($tm[0], $tm[1], $tm[2], $tm[3], $tm[4], $tm[5]); ($bool, @new_tm) = perliso9660::get_ltime($ltime); if($new_tm[8] =! $tm[8]) { #isdst flag diag(' isdst flags differ '. $new_tm[8]. ' '.$tm[8]); $new_tm[8] = $tm[8]; } ok(is_eq(\@new_tm, \@tm), 'get_ltime(set_ltime())'); Device-Cdio-v2.0.0/t/02.default.t000555001750001750 215613222226267 16057 0ustar00rockyrocky000000000000#!/usr/bin/env perl use strict; use warnings; BEGIN { push @INC, ('blib/lib', 'blib/arch'); } use lib '../lib'; use blib; use Device::Cdio::Device; use Test::More tests => 3; note 'Test getting a default device driver'; my $result1=Device::Cdio::get_default_device_driver($perlcdio::DRIVER_DEVICE); my $result2=Device::Cdio::get_default_device_driver(); ok (!defined($result1) || $result1 eq $result2, "get_default_device_driver with/without parameter" ); my $device = Device::Cdio::Device->new(); $result1= $device->get_device(); ok (!defined($result1) || $result1 eq $result2, 'get_default_device_driver() == $d->get_device()' ); if (defined($result2)) { # Now try using array return form my ($driver1, $driver2); ($result1, $driver1)=Device::Cdio::get_default_device_driver(); my $device = Device::Cdio::Device->new(-driver_id=>$driver1); $result2 = $device->get_device(); ok ($result1 eq $result2, "array form of get_default_device_driver" ); } else { # Didn't find any default device. So we have to skip this. ok(1, "get_default_device_driver array form skipped - no device"); } Device-Cdio-v2.0.0/t/07.iso3.t000555001750001750 4652213222226267 15342 0ustar00rockyrocky000000000000#!/usr/bin/env perl # Test of some ISO9660::IFS routines # This is similar to example/iso2.pl use strict; use warnings; use Config; BEGIN { chdir 't' if -d 't'; use lib '../lib'; eval "use blib"; # if we fail keep going - maybe we have installed Cdio } use Device::Cdio; use Device::Cdio::Device; use Device::Cdio::ISO9660; use Device::Cdio::ISO9660::IFS; use File::Spec; use POSIX; use Test::More tests => 3; note 'Test ISO9660::IFS routines'; # Use Canonic timezone in date testing $ENV{'TZ'} = 'UTC'; # The test CD image my $ISO9660_IMAGE_PATH="../data"; my $iso_image_fname=File::Spec->catfile($ISO9660_IMAGE_PATH, "copying.iso"); my $local_filename="copying"; my $iso = Device::Cdio::ISO9660::IFS->new(-source=>$iso_image_fname); ok(defined($iso), "Open ISO 9660 image $iso_image_fname") ; my $statbuf = $iso->stat ($local_filename, 1); my $good_stat = { LSN=>24, 'filename'=>'COPYING.;1', is_dir=>'', sec_size=>9, size=>18002, tm => { hour => 21, isdst => 0, mday => 5, min => 46, mon => 1, sec => 30, wday => 4, yday => 4, year => 2006, }, }; is_deeply($statbuf, $good_stat, 'CD 9660 file stats'); # Get file my $buf =''; my $blocks = POSIX::ceil($statbuf->{size} / $perlcdio::ISO_BLOCKSIZE); for (my $i = 0; $i < $blocks; $i++) { my $lsn = $statbuf->{LSN} + $i; $buf .= $iso->seek_read ($lsn); if (!defined($buf)) { printf "Error reading ISO 9660 file %s at LSN %d\n", $local_filename, $lsn; exit 4; } } my $file_contents= " GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The \"Program\", below, refers to any such program or work, and a \"work based on the Program\" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term \"modification\".) Each licensee is addressed as \"you\". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and \"any later version\", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the \"copyright\" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a \"copyright disclaimer\" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License "; my $len=$statbuf->{size}; ok(substr($file_contents, 0, $len) eq substr($file_contents, 0, $len), 'File contents comparison') ; $iso->close(); Device-Cdio-v2.0.0/t/05.ops.t000555001750001750 163313222226267 15236 0ustar00rockyrocky000000000000#!/usr/bin/env perl # Test running miscellaneous operations # No assumption about the CD-ROM drives is made, so # we're just going to run operations and see that they # don't crash. use strict; use warnings; use lib '../lib'; use blib; use Device::Cdio; use Device::Cdio::Device; use Test::More; note 'Test running miscellaneous operations'; plan skip_all => "Doesn't work in CI" if $ENV{'CI'}; my @drives = Device::Cdio::get_devices(); ok ( 1 , 'Device::Cdio::get_devices'); # @drives = Device::Cdio::get_devices_with_cap($perlcdio::FS_MATCH_ALL); # ok ( 1 , 'Device::Cdio::get_devices_with_cap(perlcdio::FS_MATCH_ALL)'); my $dev = Device::Cdio::Device->new(); ok ( 1 , 'Device::Cdio::Device->new()'); $dev->open(); ok ( 1 , 'Device::Cdio::Device::open'); $dev->have_ATAPI(); ok ( 1 , 'Device::Cdio::Device::have_ATAPI'); $dev->get_media_changed(); ok ( 1 , 'Device::Cdio::Device::get_media_changed'); done_testing(); Device-Cdio-v2.0.0/t/06.bincue.t000555001750001750 377613222226267 15715 0ustar00rockyrocky000000000000#!/usr/bin/env perl #Test functioning of BIN/CUE image routines use strict; use warnings; use lib '../lib'; use blib; use Device::Cdio::Device; use Test::More tests => 14; note "Test BIN/CUE image routines"; my $cuefile="data/cdda.cue"; $cuefile = '../data/cdda.cue' if ! -f $cuefile; my $device = Device::Cdio::Device->new(-source=>$cuefile); # Test known values of various access parameters: # access mode, driver name via string and via driver_id # and cue name my $result = $device->get_arg("access-mode"); ok(defined($result) && $result eq 'image', 'get_arg("access_mode")'); $result = $device->get_driver_name(); ok(defined($result) && $result eq 'BIN/CUE', 'get_driver_name'); $result = $device->get_driver_id(); ok($result == $perlcdio::DRIVER_BINCUE, 'get_driver_id'); $result = $device->get_arg("cue"); ok(defined($result) && $result eq $cuefile, 'get_arg("cue")'); $result = $device->get_device(); # Test getting is_binfile and is_$cuefile my $binfile = Device::Cdio::is_cuefile($cuefile); ok(defined($binfile), "is_cuefile($cuefile)"); ok(defined($result) && $result eq $binfile, "get_device(): $result == $binfile)"); my $cuefile2 = Device::Cdio::is_binfile($binfile); # Could check that $cuefile2 == $cuefile, but some OS's may # change the case of files ok(defined($cuefile2), "is_$cuefile(binfile)"); $result = Device::Cdio::is_tocfile($cuefile); ok(!$result, "is_tocfile(tocfile)"); my ($vendor, $model, $revision, $drc) = $device->get_hwinfo(); ## FIXME: ## ok($perlcdio::DRIVER_OP_SUCCESS == $drc, "get_hwinfo ok"); ok(defined($vendor) && 'libcdio' eq $vendor, "get_hwinfo vendor"); ok(defined($model) && 'CDRWIN' eq $model, "get_hwinfo model"); $result = Device::Cdio::is_device($cuefile); ok(!$result, "is_device(tocfile)"); $result = $device->get_media_changed(); ok(!$result, "bincue: get_media_changed"); $drc = $device->set_blocksize(2048); ok($perlcdio::DRIVER_OP_UNSUPPORTED == $drc, "set blocksize"); $drc = $device->set_speed(5); ok($perlcdio::DRIVER_OP_UNSUPPORTED == $drc, "set speed"); $device->close(); Device-Cdio-v2.0.0/lib000755001750001750 013222226267 14165 5ustar00rockyrocky000000000000Device-Cdio-v2.0.0/lib/perliso9660.pm000444001750001750 4734113222226267 16713 0ustar00rockyrocky000000000000# This file was automatically generated by SWIG (http://www.swig.org). # Version 3.0.10 # # Do not make changes to this file unless you know what you are doing--modify # the SWIG interface file instead. package perliso9660; use base qw(Exporter); use base qw(DynaLoader); package perliso9660c; bootstrap perliso9660; package perliso9660; @EXPORT = qw(); # ---------- BASE METHODS ------------- package perliso9660; sub TIEHASH { my ($classname,$obj) = @_; return bless $obj, $classname; } sub CLEAR { } sub FIRSTKEY { } sub NEXTKEY { } sub FETCH { my ($self,$field) = @_; my $member_func = "swig_${field}_get"; $self->$member_func(); } sub STORE { my ($self,$field,$newval) = @_; my $member_func = "swig_${field}_set"; $self->$member_func($newval); } sub this { my $ptr = shift; return tied(%$ptr); } # ------- FUNCTION WRAPPERS -------- package perliso9660; *imaxabs = *perliso9660c::imaxabs; *imaxdiv = *perliso9660c::imaxdiv; *strtoimax = *perliso9660c::strtoimax; *strtoumax = *perliso9660c::strtoumax; *open_iso = *perliso9660c::open_iso; *open_ext = *perliso9660c::open_ext; *open_fuzzy = *perliso9660c::open_fuzzy; *iso9660_open_fuzzy_ext = *perliso9660c::iso9660_open_fuzzy_ext; *ifs_fuzzy_read_superblock = *perliso9660c::ifs_fuzzy_read_superblock; *close = *perliso9660c::close; *seek_read = *perliso9660c::seek_read; *fs_read_pvd = *perliso9660c::fs_read_pvd; *ifs_read_pvd = *perliso9660c::ifs_read_pvd; *fs_read_superblock = *perliso9660c::fs_read_superblock; *ifs_read_superblock = *perliso9660c::ifs_read_superblock; *set_dtime = *perliso9660c::set_dtime; *set_ltime = *perliso9660c::set_ltime; *get_dtime = *perliso9660c::get_dtime; *get_ltime = *perliso9660c::get_ltime; *is_dchar = *perliso9660c::is_dchar; *is_achar = *perliso9660c::is_achar; *name_translate = *perliso9660c::name_translate; *name_translate_ext = *perliso9660c::name_translate_ext; *strncpy_pad = *perliso9660c::strncpy_pad; *dirname_valid_p = *perliso9660c::dirname_valid_p; *pathname_isofy = *perliso9660c::pathname_isofy; *pathname_valid_p = *perliso9660c::pathname_valid_p; *fs_find_lsn = *perliso9660c::fs_find_lsn; *ifs_find_lsn = *perliso9660c::ifs_find_lsn; *fs_stat = *perliso9660c::fs_stat; *fs_stat_translate = *perliso9660c::fs_stat_translate; *ifs_stat = *perliso9660c::ifs_stat; *ifs_stat_translate = *perliso9660c::ifs_stat_translate; *fs_readdir = *perliso9660c::fs_readdir; *ifs_readdir = *perliso9660c::ifs_readdir; *get_application_id = *perliso9660c::get_application_id; *ifs_get_application_id = *perliso9660c::ifs_get_application_id; *get_joliet_level = *perliso9660c::get_joliet_level; *get_dir_len = *perliso9660c::get_dir_len; *iso9660_dir_to_name = *perliso9660c::iso9660_dir_to_name; *get_posix_filemode = *perliso9660c::get_posix_filemode; *get_preparer_id = *perliso9660c::get_preparer_id; *ifs_get_preparer_id = *perliso9660c::ifs_get_preparer_id; *get_publisher_id = *perliso9660c::get_publisher_id; *ifs_get_publisher_id = *perliso9660c::ifs_get_publisher_id; *get_pvd_type = *perliso9660c::get_pvd_type; *get_pvd_id = *perliso9660c::get_pvd_id; *get_pvd_space_size = *perliso9660c::get_pvd_space_size; *get_pvd_block_size = *perliso9660c::get_pvd_block_size; *get_pvd_version = *perliso9660c::get_pvd_version; *get_system_id = *perliso9660c::get_system_id; *ifs_get_system_id = *perliso9660c::ifs_get_system_id; *get_root_lsn = *perliso9660c::get_root_lsn; *get_volume_id = *perliso9660c::get_volume_id; *ifs_get_volume_id = *perliso9660c::ifs_get_volume_id; *get_volumeset_id = *perliso9660c::get_volumeset_id; *ifs_get_volumeset_id = *perliso9660c::ifs_get_volumeset_id; *pathtable_init = *perliso9660c::pathtable_init; *pathtable_get_size = *perliso9660c::pathtable_get_size; *pathtable_l_add_entry = *perliso9660c::pathtable_l_add_entry; *pathtable_m_add_entry = *perliso9660c::pathtable_m_add_entry; *set_evd = *perliso9660c::set_evd; *is_xa = *perliso9660c::is_xa; ############# Class : perliso9660::imaxdiv_t ############## package perliso9660::imaxdiv_t; use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS); @ISA = qw( perliso9660 ); %OWNER = (); %ITERATORS = (); *swig_quot_get = *perliso9660c::imaxdiv_t_quot_get; *swig_quot_set = *perliso9660c::imaxdiv_t_quot_set; *swig_rem_get = *perliso9660c::imaxdiv_t_rem_get; *swig_rem_set = *perliso9660c::imaxdiv_t_rem_set; sub new { my $pkg = shift; my $self = perliso9660c::new_imaxdiv_t(@_); bless $self, $pkg if defined($self); } sub DESTROY { return unless $_[0]->isa('HASH'); my $self = tied(%{$_[0]}); return unless defined $self; delete $ITERATORS{$self}; if (exists $OWNER{$self}) { perliso9660c::delete_imaxdiv_t($self); delete $OWNER{$self}; } } sub DISOWN { my $self = shift; my $ptr = tied(%$self); delete $OWNER{$ptr}; } sub ACQUIRE { my $self = shift; my $ptr = tied(%$self); $OWNER{$ptr} = 1; } # ------- VARIABLE STUBS -------- package perliso9660; *VERSION_NUM = *perliso9660c::VERSION_NUM; *INVALID_LBA = *perliso9660c::INVALID_LBA; *INVALID_LSN = *perliso9660c::INVALID_LSN; *CD_FRAMESIZE = *perliso9660c::CD_FRAMESIZE; *CD_FRAMESIZE_RAW = *perliso9660c::CD_FRAMESIZE_RAW; *ISO_BLOCKSIZE = *perliso9660c::ISO_BLOCKSIZE; *M2F2_SECTOR_SIZE = *perliso9660c::M2F2_SECTOR_SIZE; *M2RAW_SECTOR_SIZE = *perliso9660c::M2RAW_SECTOR_SIZE; *PVD_SECTOR = *perliso9660c::PVD_SECTOR; *EVD_SECTOR = *perliso9660c::EVD_SECTOR; *LEN_ISONAME = *perliso9660c::LEN_ISONAME; *MAX_SYSTEM_ID = *perliso9660c::MAX_SYSTEM_ID; *MAX_ISONAME = *perliso9660c::MAX_ISONAME; *MAX_PREPARER_ID = *perliso9660c::MAX_PREPARER_ID; *MAX_ISOPATHNAME = *perliso9660c::MAX_ISOPATHNAME; *FILE = *perliso9660c::FILE; *EXISTENCE = *perliso9660c::EXISTENCE; *DIRECTORY = *perliso9660c::DIRECTORY; *ASSOCIATED = *perliso9660c::ASSOCIATED; *RECORD = *perliso9660c::RECORD; *PROTECTION = *perliso9660c::PROTECTION; *DRESERVED1 = *perliso9660c::DRESERVED1; *DRESERVED2 = *perliso9660c::DRESERVED2; *MULTIEXTENT = *perliso9660c::MULTIEXTENT; *VD_BOOT_RECORD = *perliso9660c::VD_BOOT_RECORD; *VD_PRIMARY = *perliso9660c::VD_PRIMARY; *VD_SUPPLEMENTARY = *perliso9660c::VD_SUPPLEMENTARY; *VD_PARITION = *perliso9660c::VD_PARITION; *VD_END = *perliso9660c::VD_END; *MAX_PUBLISHER_ID = *perliso9660c::MAX_PUBLISHER_ID; *MAX_APPLICATION_ID = *perliso9660c::MAX_APPLICATION_ID; *MAX_VOLUME_ID = *perliso9660c::MAX_VOLUME_ID; *MAX_VOLUMESET_ID = *perliso9660c::MAX_VOLUMESET_ID; *STANDARD_ID = *perliso9660c::STANDARD_ID; *NOCHECK = *perliso9660c::NOCHECK; *SEVEN_BIT = *perliso9660c::SEVEN_BIT; *ACHARS = *perliso9660c::ACHARS; *DCHARS = *perliso9660c::DCHARS; *EXTENSION_JOLIET_LEVEL1 = *perliso9660c::EXTENSION_JOLIET_LEVEL1; *EXTENSION_JOLIET_LEVEL2 = *perliso9660c::EXTENSION_JOLIET_LEVEL2; *EXTENSION_JOLIET_LEVEL3 = *perliso9660c::EXTENSION_JOLIET_LEVEL3; *EXTENSION_ROCK_RIDGE = *perliso9660c::EXTENSION_ROCK_RIDGE; *EXTENSION_HIGH_SIERRA = *perliso9660c::EXTENSION_HIGH_SIERRA; *EXTENSION_ALL = *perliso9660c::EXTENSION_ALL; *EXTENSION_NONE = *perliso9660c::EXTENSION_NONE; *EXTENSION_JOLIET = *perliso9660c::EXTENSION_JOLIET; import Device::Cdio::VERSION; $VERSION = $Device::Cdio::VERSION; use strict; =pod =head1 NAME perliso9660 - lower-level wrapper to libiso9660, the ISO 9660 library of the CD Input and Control package =head1 SYNOPSIS This is fairly straight-forward wrapper around the C library libiso9660 Although this is perfectly usable on its own, it is expected that the Object-Oriented interface L is what most people will want to use. There are various constants that are defined here. =head1 DESCRIPTION Encapsulation is done in two parts. The lower-level Perl interface is called perliso9660 (this file) and is generated via SWIG. =head1 CONSTANTS =over 4 =item ISO_BLOCKSIZE Number of bytes in an ISO 9660 block (2048) =item PVD_SECTOR "Primary Volume Descriptor" sector (16) =item EVD_SECTOR "End Volume Descriptor" sector (17) =item LEN_ISONAME Size in bytes of the filename portion + null byte (31) =item MAX_SYSTEM_ID Maximum number of characters in a system id (32) =item MAX_ISONAME Size in bytes of the filename portion + null byte. (37) =item MAX_PREPARER_ID Maximum number of characters in a preparer id. (128) =item MAX_ISOPATHNAME Maximum number of characters in the entire ISO 9660 filename. (255) =item MAX_PUBLISHER_ID Maximum number of characters in a publisher id. =item MAX_APPLICATION_ID Maximum number of characters in an application id. =item MAX_VOLUME_ID Maximum number of characters in a volume id. =item MAX_VOLUMESET_ID Maximum number of characters in a volume-set id. =item STANDARD_ID String inside frame which identifies an ISO 9660 filesystem. This string is the "id" field of an iso9660_pvd_t or an iso9660_svd_t. =item EXTENSION_JOLIET_LEVEL1 Use Joliet Level 1. =item EXTENSION_JOLIET_LEVEL2 Use Joliet Level 2. =item EXTENSION_JOLIET_LEVEL3 Use Joliet Level 3 =item EXTENSION_ROCK_RIDGE Use Rock-Ridge Extensions. =item EXTENSION_HIGH_SIERRA Use High-Sierra Extensions. =item EXTENSION_ALL Use any of the above extensions. =item EXTENSION_NONE Use none of the above extensions. =item EXTENSION_JOLIET Use any Joliet Extension available. =back =head2 Directory Flags =over 4 =item FILE Not really a flag but the lack of one. =item EXISTENCE Do not make existence known (hidden). =item DIRECTORY This file is a directory. =item ASSOCIATED This file is an associated file =item RECORD Record format is in extended attribute if not set. =item PROTECTION No read/execute permission in extended attribute. =item DRESERVED1 Reserved bit 5. =item DRESERVED2 Reserved bit 6 =item MULTIEXTENT Not the final entry of a multi-extent file. =back =head2 Volume Descriptor Types =over 4 =item VD_BOOT_RECORD CD is bootable =item VD_PRIMARY Primary Volume descriptor which must be in any ISO-9660 =item VD_SUPPLEMENTARY (optional) Supplimentary Volume Descriptor. But used by Joliet, for example. =item VD_PARITION Indicates a partition of a CD. =item VD_END =back =head2 Flags for strncpy =over 4 =item NOCHECK Enumeration meaning don not check in strncpy_pad. =item SEVEN_BIT Enumeration in strncpy_pad for checking entry has only 7-bit characters. =item ACHARS Enumeration in strncpy_pad for checking entry has only ACHARs. =item DCHARS Enumeration in strncpy_pad for checking entry has only DCHARs. =back =head1 SUBROUTINES =head2 Input Output =head3 open_iso Open an ISO 9660 image for reading. Maybe in the future we will have mode. undef is returned on error. =head3 open_ext Open an ISO 9660 image for reading allowing various ISO 9660 extensions. Maybe in the future we will have a mode. undef is eturned on error. =head3 open_fuzzy Open an ISO 9660 image for reading with some tolerence for positioning of the ISO9660 image. We scan for $perliso9660::ISO_STANDARD_ID and use that to set he eventual offset to adjust by (as long as that is <= i_fuzz). Maybe in the future we will have a mode. undef is returned on error. See also open_iso =head3 open_fuzzy_ext Open an ISO 9660 image for reading with some tolerence for positioning of the ISO9660 image. We scan for ISO_STANDARD_ID and use that to set the eventual offset to adjust by (as long as that is <= i_fuzz). Maybe in the future we will have a mode. undef is returned on error. =head3 ifs_fuzzy_read_superblock Read the Super block of an ISO 9660 image but determine framesize and datastart and a possible additional offset. Generally here we are not reading an ISO 9660 image but a CD-Image which contains an ISO 9660 filesystem. =head3 close Close previously opened ISO 9660 image. 1 is unconditionally returned. If there was an error 0 would be returned. =head3 seek_read Seek to a position and then read n bytes. (buffer, size) are is returned. =head3 fs_read_pvd Read the Primary Volume Descriptor for a CD. 1 is returned if read, and 0 if there was an error. =head3 ifs_read_pvd Read the Primary Volume Descriptor for an ISO 9660 image. 1 is returned if read, and 0 if there was an error. =head3 _fs_read_superblock Read the Super block of an ISO 9660 image. This is the Primary Volume Descriptor (PVD) and perhaps a Supplemental Volume Descriptor if (Joliet) extensions are acceptable. =head3 ifs_read_superblock Read the Super block of an ISO 9660 image. This is the Primary Volume Descriptor (PVD) and perhaps a Supplemental Volume Descriptor if (Joliet) extensions are acceptable. =head2 Time Conversion =head3 set_dtime Set time in format used in ISO 9660 directory index record from a Unix time structure. =head3 set_ltime Set "long" time in format used in ISO 9660 primary volume descriptor from a Unix time structure. =head3 get_dtime Get Unix time structure from format use in an ISO 9660 directory index record. Even though tm_wday and tm_yday fields are not explicitly in dtime, they are calculated from the other fields. If tm is to reflect the localtime, set "use_localtime" 1, otherwise tm will reported in GMT. =head3 get_ltime Get "long" time in format used in ISO 9660 primary volume descriptor from a Unix time structure. =head2 Character Classification and String Manipulation =head3 is_dchar Return 1 if c (an int) is a DCHAR - a character that can appear in an an ISO-9600 level 1 directory name. These are the ASCII capital letters A-Z, the digits 0-9 and an underscore. =head3 is_achar =head3 name_translate Convert an ISO-9660 file name that stored in a directory entry into what is usually listed as the file name in a listing. wercase name, and remove trailing ;1's or .;1's and turn the others into version numbers. =head3 name_translate_ext Convert an ISO-9660 file name that stored in a directory entry into what is usually listed as the file name in a listing. Lowercase name if no Joliet Extension interpretation. Remove trailing ;1's or .;1's and turn the others into version numbers. =head3 strncpy_pad Pad string src with spaces to size len and copy this to dst. If len is less than the length of src, dst will be truncated to the first len characters of src. src can also be scanned to see if it contains only ACHARs, DCHARs, 7-bit ASCII chars depending on the enumeration _check. In addition to getting changed, dst is the return value. Note: this string might not be undef terminated. =head2 File and Directory Names =head3 dirname_valid_p Check that psz_path is a valid ISO-9660 directory name. A valid directory name should not start out with a slash (/), dot (.) or null byte, should be less than 37 characters long, have no more than 8 characters in a directory component which is separated by a /, and consist of only DCHARs. 1 is returned if psz_path is valid. =head3 pathname_isofy Take psz_path and a version number and turn that into a ISO-9660 pathname. (That is just the pathname followed by ";" and the version number. For example, mydir/file.ext -> MYDIR/FILE.EXT;1 for version 1. The resulting ISO-9660 pathname is returned. =head3 pathname_valid_p Check that psz_path is a valid ISO-9660 pathname. A valid pathname contains a valid directory name, if one appears and the filename portion should be no more than 8 characters for the file prefix and 3 characters in the extension (or portion after a dot). There should be exactly one dot somewhere in the filename portion and the filename should be composed of only DCHARs. 1 is returned if psz_path is valid. =head3 fs_find_lsn Given a directory pointer, find the filesystem entry that contains lsn and return information about it. Returns stat_t of entry if we found lsn, or undef otherwise. =head3 ifs_find_lsn Given a directory pointer, find the filesystem entry that contains lsn and return information about it. Returns stat_t of entry if we found lsn, or undef otherwise. =head3 fs_stat Return file status for psz_path. undef is returned on error. =head3 fs_stat_translate Return file status for path name psz_path. undef is returned on error. pathname version numbers in the ISO 9660 name are dropped, i.e. ;1 is removed and if level 1 ISO-9660 names are lowercased. =head3 ifs_stat Return file status for pathname. undef is returned on error. =head3 ifs_stat_translate Return file status for path name psz_path. undef is returned on error. pathname version numbers in the ISO 9660 name are dropped, i.e. ;1 is removed and if level 1 ISO-9660 names are lowercased. =head3 fs_readdir Read psz_path (a directory) and return a list of iso9660_stat_t pointers for the files inside that directory. The caller must free the returned result. =head3 ifs_readdir Read psz_path (a directory) and return a list of iso9660_stat_t pointers for the files inside that directory. The caller must free the returned result. =head3 get_dir_len Return the directory name stored in the iso9660_dir_t A string is allocated: the caller must deallocate. =head3 dir_to_name =head3 get_posix_filemode Returns a POSIX mode for a given p_iso_dirent. =head2 Primary Volume Descriptor Routines =head3 get_application_id Return the PVD's application ID. undef is returned if there is some problem in getting this. =head3 ifs_get_application_id Get the application ID. psz_app_id is set to undef if there is some problem in getting this and 0 is returned. =head3 get_preparer_id Return a string containing the preparer id with trailing blanks removed. =head3 ifs_get_preparer_id Get the preparer ID. psz_preparer_id is set to undef if there is some problem in getting this and 0 is returned. =head3 get_publisher_id Return a string containing the PVD's publisher id with trailing blanks removed. =head3 ifs_get_publisher_id Get the publisher ID. psz_publisher_id is set to undef if there is some problem in getting this and 0 is returned. =head3 get_pvd_type =head3 get_pvd_id =head3 get_pvd_space_size =head3 get_pvd_block_size =head3 get_pvd_version Return the primary volume id version number (of pvd). If there is an error 0 is returned. =head3 get_system_id Return a string containing the PVD's system id with trailing blanks removed. =head3 ifs_get_system_id Get the system ID. psz_system_id is set to undef if there is some problem in getting this and 0 is returned. =head3 get_root_lsn Return the LSN of the root directory for pvd. If there is an error CDIO_INVALID_LSN is returned. =head3 get_volume_id Return the PVD's volume ID. =head3 ifs_get_volume_id Get the system ID. psz_system_id is set to undef if there s some problem in getting this and 0 is returned. =head3 get_volumeset_id Return the PVD's volumeset ID. undef is returned if there is some problem in getting this. =head3 ifs_get_volumeset_id Get the systemset ID. psz_systemset_id is set to undef if there is some problem in getting this and 0 is returned. =head2 Path Table Routines =head3 iso9660_pathtable_init Zero out pathable. Do this first. =head3 pathtable_get_size =head3 pathtable_l_add_entry =head3 pathtable_m_add_entry =head3 set_evd =head2 Miscellaneous =head3 get_joliet_level Return the Joliet level recognized for p_iso. =head3 ifs_is_xa Return 1 if ISO 9660 image has extended attrributes (XA). =head1 METHODS =head2 this This seems to be an artifact of SWIG. =head1 SEE ALSO L has documentation on libcdio including the a manual and the API via doxygen. =head1 AUTHORS Rocky Bernstein C<< >>. =head1 COPYRIGHT Copyright (C) 2006, 2008, 2011, 2017 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . =cut 1; Device-Cdio-v2.0.0/lib/perlcdio.pm000444001750001750 7262013222226267 16510 0ustar00rockyrocky000000000000# This file was automatically generated by SWIG (http://www.swig.org). # Version 3.0.10 # # Do not make changes to this file unless you know what you are doing--modify # the SWIG interface file instead. package perlcdio; use base qw(Exporter); use base qw(DynaLoader); package perlcdioc; bootstrap perlcdio; package perlcdio; @EXPORT = qw(); # ---------- BASE METHODS ------------- package perlcdio; sub TIEHASH { my ($classname,$obj) = @_; return bless $obj, $classname; } sub CLEAR { } sub FIRSTKEY { } sub NEXTKEY { } sub FETCH { my ($self,$field) = @_; my $member_func = "swig_${field}_get"; $self->$member_func(); } sub STORE { my ($self,$field,$newval) = @_; my $member_func = "swig_${field}_set"; $self->$member_func($newval); } sub this { my $ptr = shift; return tied(%$ptr); } # ------- FUNCTION WRAPPERS -------- package perlcdio; *imaxabs = *perlcdioc::imaxabs; *imaxdiv = *perlcdioc::imaxdiv; *strtoimax = *perlcdioc::strtoimax; *strtoumax = *perlcdioc::strtoumax; *audio_pause = *perlcdioc::audio_pause; *audio_play_track_index = *perlcdioc::audio_play_track_index; *audio_play_lsn = *perlcdioc::audio_play_lsn; *audio_resume = *perlcdioc::audio_resume; *audio_stop = *perlcdioc::audio_stop; *audio_get_volume_levels = *perlcdioc::audio_get_volume_levels; *audio_set_volume_levels = *perlcdioc::audio_set_volume_levels; *audio_get_status = *perlcdioc::audio_get_status; *cdio_from_bcd8 = *perlcdioc::cdio_from_bcd8; *lseek = *perlcdioc::lseek; *read_cd = *perlcdioc::read_cd; *read_sectors = *perlcdioc::read_sectors; *read_data_bytes = *perlcdioc::read_data_bytes; *cdio_read_pvd = *perlcdioc::cdio_read_pvd; *get_first_track_num = *perlcdioc::get_first_track_num; *get_last_track_num = *perlcdioc::get_last_track_num; *get_track = *perlcdioc::get_track; *get_track_channels = *perlcdioc::get_track_channels; *get_track_copy_permit = *perlcdioc::get_track_copy_permit; *get_track_format = *perlcdioc::get_track_format; *is_track_green = *perlcdioc::is_track_green; *get_track_last_lsn = *perlcdioc::get_track_last_lsn; *get_track_lba = *perlcdioc::get_track_lba; *get_track_lsn = *perlcdioc::get_track_lsn; *get_track_msf = *perlcdioc::get_track_msf; *get_track_preemphasis = *perlcdioc::get_track_preemphasis; *get_track_sec_count = *perlcdioc::get_track_sec_count; *cdio_get_track_isrc = *perlcdioc::cdio_get_track_isrc; *cdtext_field2str = *perlcdioc::cdtext_field2str; *cdtext_lang2str = *perlcdioc::cdtext_lang2str; *cdtext_genre2str = *perlcdioc::cdtext_genre2str; *cdtext_init = *perlcdioc::cdtext_init; *cdtext_data_init = *perlcdioc::cdtext_data_init; *cdtext_destroy = *perlcdioc::cdtext_destroy; *cdtext_get = *perlcdioc::cdtext_get; *cdtext_get_language = *perlcdioc::cdtext_get_language; *cdtext_select_language = *perlcdioc::cdtext_select_language; *cdtext_list_languages = *perlcdioc::cdtext_list_languages; *cdtext_set = *perlcdioc::cdtext_set; *cdio_get_cdtext = *perlcdioc::cdio_get_cdtext; *cdtext_get_const = *perlcdioc::cdtext_get_const; *close_tray = *perlcdioc::close_tray; *close = *perlcdioc::close; *driver_errmsg = *perlcdioc::driver_errmsg; *eject_media = *perlcdioc::eject_media; *eject_media_drive = *perlcdioc::eject_media_drive; *get_arg = *perlcdioc::get_arg; *get_device = *perlcdioc::get_device; *get_default_device_driver = *perlcdioc::get_default_device_driver; *cdio_get_devices = *perlcdioc::cdio_get_devices; *get_devices = *perlcdioc::get_devices; *get_devices_ret = *perlcdioc::get_devices_ret; *get_devices_with_cap = *perlcdioc::get_devices_with_cap; *get_devices_with_cap_ret = *perlcdioc::get_devices_with_cap_ret; *get_drive_cap = *perlcdioc::get_drive_cap; *get_driver_name = *perlcdioc::get_driver_name; *get_driver_id = *perlcdioc::get_driver_id; *get_last_session = *perlcdioc::get_last_session; *have_driver = *perlcdioc::have_driver; *have_ATAPI = *perlcdioc::have_ATAPI; *is_binfile = *perlcdioc::is_binfile; *is_cuefile = *perlcdioc::is_cuefile; *is_device = *perlcdioc::is_device; *is_nrg = *perlcdioc::is_nrg; *is_tocfile = *perlcdioc::is_tocfile; *get_media_changed = *perlcdioc::get_media_changed; *get_hwinfo = *perlcdioc::get_hwinfo; *mmc_get_tray_status = *perlcdioc::mmc_get_tray_status; *set_blocksize = *perlcdioc::set_blocksize; *set_speed = *perlcdioc::set_speed; *open_cd = *perlcdioc::open_cd; *get_disc_last_lsn = *perlcdioc::get_disc_last_lsn; *get_disc_mode = *perlcdioc::get_disc_mode; *get_joliet_level = *perlcdioc::get_joliet_level; *get_mcn = *perlcdioc::get_mcn; *get_num_tracks = *perlcdioc::get_num_tracks; *get_cddb_discid = *perlcdioc::get_cddb_discid; *cddb_dec_digit_sum = *perlcdioc::cddb_dec_digit_sum; *guess_cd_type = *perlcdioc::guess_cd_type; *cdio_version = *perlcdioc::cdio_version; ############# Class : perlcdio::imaxdiv_t ############## package perlcdio::imaxdiv_t; use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS); @ISA = qw( perlcdio ); %OWNER = (); %ITERATORS = (); *swig_quot_get = *perlcdioc::imaxdiv_t_quot_get; *swig_quot_set = *perlcdioc::imaxdiv_t_quot_set; *swig_rem_get = *perlcdioc::imaxdiv_t_rem_get; *swig_rem_set = *perlcdioc::imaxdiv_t_rem_set; sub new { my $pkg = shift; my $self = perlcdioc::new_imaxdiv_t(@_); bless $self, $pkg if defined($self); } sub DESTROY { return unless $_[0]->isa('HASH'); my $self = tied(%{$_[0]}); return unless defined $self; delete $ITERATORS{$self}; if (exists $OWNER{$self}) { perlcdioc::delete_imaxdiv_t($self); delete $OWNER{$self}; } } sub DISOWN { my $self = shift; my $ptr = tied(%$self); delete $OWNER{$ptr}; } sub ACQUIRE { my $self = shift; my $ptr = tied(%$self); $OWNER{$ptr} = 1; } # ------- VARIABLE STUBS -------- package perlcdio; *VERSION_NUM = *perlcdioc::VERSION_NUM; *INVALID_LBA = *perlcdioc::INVALID_LBA; *INVALID_LSN = *perlcdioc::INVALID_LSN; *CD_FRAMESIZE = *perlcdioc::CD_FRAMESIZE; *CD_FRAMESIZE_RAW = *perlcdioc::CD_FRAMESIZE_RAW; *ISO_BLOCKSIZE = *perlcdioc::ISO_BLOCKSIZE; *M2F2_SECTOR_SIZE = *perlcdioc::M2F2_SECTOR_SIZE; *M2RAW_SECTOR_SIZE = *perlcdioc::M2RAW_SECTOR_SIZE; *READ_MODE_AUDIO = *perlcdioc::READ_MODE_AUDIO; *READ_MODE_M1F1 = *perlcdioc::READ_MODE_M1F1; *READ_MODE_M1F2 = *perlcdioc::READ_MODE_M1F2; *READ_MODE_M2F1 = *perlcdioc::READ_MODE_M2F1; *READ_MODE_M2F2 = *perlcdioc::READ_MODE_M2F2; *TRACK_FORMAT_AUDIO = *perlcdioc::TRACK_FORMAT_AUDIO; *TRACK_FORMAT_CDI = *perlcdioc::TRACK_FORMAT_CDI; *TRACK_FORMAT_XA = *perlcdioc::TRACK_FORMAT_XA; *TRACK_FORMAT_DATA = *perlcdioc::TRACK_FORMAT_DATA; *TRACK_FORMAT_PSX = *perlcdioc::TRACK_FORMAT_PSX; *CDIO_TRACK_FLAG_FALSE = *perlcdioc::CDIO_TRACK_FLAG_FALSE; *CDIO_TRACK_FLAG_TRUE = *perlcdioc::CDIO_TRACK_FLAG_TRUE; *CDIO_TRACK_FLAG_ERROR = *perlcdioc::CDIO_TRACK_FLAG_ERROR; *CDIO_TRACK_FLAG_UNKNOWN = *perlcdioc::CDIO_TRACK_FLAG_UNKNOWN; *CDIO_CDROM_LBA = *perlcdioc::CDIO_CDROM_LBA; *CDIO_CDROM_MSF = *perlcdioc::CDIO_CDROM_MSF; *CDIO_CDROM_DATA_TRACK = *perlcdioc::CDIO_CDROM_DATA_TRACK; *CDIO_CDROM_CDI_TRACK = *perlcdioc::CDIO_CDROM_CDI_TRACK; *CDIO_CDROM_XA_TRACK = *perlcdioc::CDIO_CDROM_XA_TRACK; *AUDIO = *perlcdioc::AUDIO; *MODE1 = *perlcdioc::MODE1; *MODE1_RAW = *perlcdioc::MODE1_RAW; *MODE2 = *perlcdioc::MODE2; *MODE2_FORM1 = *perlcdioc::MODE2_FORM1; *MODE2_FORM2 = *perlcdioc::MODE2_FORM2; *MODE2_FORM_MIX = *perlcdioc::MODE2_FORM_MIX; *MODE2_RAW = *perlcdioc::MODE2_RAW; *INVALID_TRACK = *perlcdioc::INVALID_TRACK; *CDROM_LEADOUT_TRACK = *perlcdioc::CDROM_LEADOUT_TRACK; *CDTEXT_FIELD_TITLE = *perlcdioc::CDTEXT_FIELD_TITLE; *CDTEXT_FIELD_PERFORMER = *perlcdioc::CDTEXT_FIELD_PERFORMER; *CDTEXT_FIELD_SONGWRITER = *perlcdioc::CDTEXT_FIELD_SONGWRITER; *CDTEXT_FIELD_COMPOSER = *perlcdioc::CDTEXT_FIELD_COMPOSER; *CDTEXT_FIELD_MESSAGE = *perlcdioc::CDTEXT_FIELD_MESSAGE; *CDTEXT_FIELD_ARRANGER = *perlcdioc::CDTEXT_FIELD_ARRANGER; *CDTEXT_FIELD_ISRC = *perlcdioc::CDTEXT_FIELD_ISRC; *CDTEXT_FIELD_UPC_EAN = *perlcdioc::CDTEXT_FIELD_UPC_EAN; *CDTEXT_FIELD_GENRE = *perlcdioc::CDTEXT_FIELD_GENRE; *CDTEXT_FIELD_DISCID = *perlcdioc::CDTEXT_FIELD_DISCID; *CDTEXT_FIELD_INVALID = *perlcdioc::CDTEXT_FIELD_INVALID; *CDTEXT_GENRE_UNUSED = *perlcdioc::CDTEXT_GENRE_UNUSED; *CDTEXT_GENRE_UNDEFINED = *perlcdioc::CDTEXT_GENRE_UNDEFINED; *CDTEXT_GENRE_ADULT_CONTEMP = *perlcdioc::CDTEXT_GENRE_ADULT_CONTEMP; *CDTEXT_GENRE_ALT_ROCK = *perlcdioc::CDTEXT_GENRE_ALT_ROCK; *CDTEXT_GENRE_CHILDRENS = *perlcdioc::CDTEXT_GENRE_CHILDRENS; *CDTEXT_GENRE_CLASSIC = *perlcdioc::CDTEXT_GENRE_CLASSIC; *CDTEXT_GENRE_CHRIST_CONTEMP = *perlcdioc::CDTEXT_GENRE_CHRIST_CONTEMP; *CDTEXT_GENRE_COUNTRY = *perlcdioc::CDTEXT_GENRE_COUNTRY; *CDTEXT_GENRE_DANCE = *perlcdioc::CDTEXT_GENRE_DANCE; *CDTEXT_GENRE_EASY_LISTENING = *perlcdioc::CDTEXT_GENRE_EASY_LISTENING; *CDTEXT_GENRE_EROTIC = *perlcdioc::CDTEXT_GENRE_EROTIC; *CDTEXT_GENRE_FOLK = *perlcdioc::CDTEXT_GENRE_FOLK; *CDTEXT_GENRE_GOSPEL = *perlcdioc::CDTEXT_GENRE_GOSPEL; *CDTEXT_GENRE_HIPHOP = *perlcdioc::CDTEXT_GENRE_HIPHOP; *CDTEXT_GENRE_JAZZ = *perlcdioc::CDTEXT_GENRE_JAZZ; *CDTEXT_GENRE_LATIN = *perlcdioc::CDTEXT_GENRE_LATIN; *CDTEXT_GENRE_MUSICAL = *perlcdioc::CDTEXT_GENRE_MUSICAL; *CDTEXT_GENRE_NEWAGE = *perlcdioc::CDTEXT_GENRE_NEWAGE; *CDTEXT_GENRE_OPERA = *perlcdioc::CDTEXT_GENRE_OPERA; *CDTEXT_GENRE_OPERETTA = *perlcdioc::CDTEXT_GENRE_OPERETTA; *CDTEXT_GENRE_POP = *perlcdioc::CDTEXT_GENRE_POP; *CDTEXT_GENRE_RAP = *perlcdioc::CDTEXT_GENRE_RAP; *CDTEXT_GENRE_REGGAE = *perlcdioc::CDTEXT_GENRE_REGGAE; *CDTEXT_GENRE_ROCK = *perlcdioc::CDTEXT_GENRE_ROCK; *CDTEXT_GENRE_RYTHMANDBLUES = *perlcdioc::CDTEXT_GENRE_RYTHMANDBLUES; *CDTEXT_GENRE_SOUNDEFFECTS = *perlcdioc::CDTEXT_GENRE_SOUNDEFFECTS; *CDTEXT_GENRE_SOUNDTRACK = *perlcdioc::CDTEXT_GENRE_SOUNDTRACK; *CDTEXT_GENRE_SPOKEN_WORD = *perlcdioc::CDTEXT_GENRE_SPOKEN_WORD; *CDTEXT_GENRE_WORLD_MUSIC = *perlcdioc::CDTEXT_GENRE_WORLD_MUSIC; *CDTEXT_LANGUAGE_UNKNOWN = *perlcdioc::CDTEXT_LANGUAGE_UNKNOWN; *CDTEXT_LANGUAGE_ALBANIAN = *perlcdioc::CDTEXT_LANGUAGE_ALBANIAN; *CDTEXT_LANGUAGE_BRETON = *perlcdioc::CDTEXT_LANGUAGE_BRETON; *CDTEXT_LANGUAGE_CATALAN = *perlcdioc::CDTEXT_LANGUAGE_CATALAN; *CDTEXT_LANGUAGE_CROATIAN = *perlcdioc::CDTEXT_LANGUAGE_CROATIAN; *CDTEXT_LANGUAGE_WELSH = *perlcdioc::CDTEXT_LANGUAGE_WELSH; *CDTEXT_LANGUAGE_CZECH = *perlcdioc::CDTEXT_LANGUAGE_CZECH; *CDTEXT_LANGUAGE_DANISH = *perlcdioc::CDTEXT_LANGUAGE_DANISH; *CDTEXT_LANGUAGE_GERMAN = *perlcdioc::CDTEXT_LANGUAGE_GERMAN; *CDTEXT_LANGUAGE_ENGLISH = *perlcdioc::CDTEXT_LANGUAGE_ENGLISH; *CDTEXT_LANGUAGE_SPANISH = *perlcdioc::CDTEXT_LANGUAGE_SPANISH; *CDTEXT_LANGUAGE_ESPERANTO = *perlcdioc::CDTEXT_LANGUAGE_ESPERANTO; *CDTEXT_LANGUAGE_ESTONIAN = *perlcdioc::CDTEXT_LANGUAGE_ESTONIAN; *CDTEXT_LANGUAGE_BASQUE = *perlcdioc::CDTEXT_LANGUAGE_BASQUE; *CDTEXT_LANGUAGE_FAROESE = *perlcdioc::CDTEXT_LANGUAGE_FAROESE; *CDTEXT_LANGUAGE_FRENCH = *perlcdioc::CDTEXT_LANGUAGE_FRENCH; *CDTEXT_LANGUAGE_FRISIAN = *perlcdioc::CDTEXT_LANGUAGE_FRISIAN; *CDTEXT_LANGUAGE_IRISH = *perlcdioc::CDTEXT_LANGUAGE_IRISH; *CDTEXT_LANGUAGE_GAELIC = *perlcdioc::CDTEXT_LANGUAGE_GAELIC; *CDTEXT_LANGUAGE_GALICIAN = *perlcdioc::CDTEXT_LANGUAGE_GALICIAN; *CDTEXT_LANGUAGE_ICELANDIC = *perlcdioc::CDTEXT_LANGUAGE_ICELANDIC; *CDTEXT_LANGUAGE_ITALIAN = *perlcdioc::CDTEXT_LANGUAGE_ITALIAN; *CDTEXT_LANGUAGE_LAPPISH = *perlcdioc::CDTEXT_LANGUAGE_LAPPISH; *CDTEXT_LANGUAGE_LATIN = *perlcdioc::CDTEXT_LANGUAGE_LATIN; *CDTEXT_LANGUAGE_LATVIAN = *perlcdioc::CDTEXT_LANGUAGE_LATVIAN; *CDTEXT_LANGUAGE_LUXEMBOURGIAN = *perlcdioc::CDTEXT_LANGUAGE_LUXEMBOURGIAN; *CDTEXT_LANGUAGE_LITHUANIAN = *perlcdioc::CDTEXT_LANGUAGE_LITHUANIAN; *CDTEXT_LANGUAGE_HUNGARIAN = *perlcdioc::CDTEXT_LANGUAGE_HUNGARIAN; *CDTEXT_LANGUAGE_MALTESE = *perlcdioc::CDTEXT_LANGUAGE_MALTESE; *CDTEXT_LANGUAGE_DUTCH = *perlcdioc::CDTEXT_LANGUAGE_DUTCH; *CDTEXT_LANGUAGE_NORWEGIAN = *perlcdioc::CDTEXT_LANGUAGE_NORWEGIAN; *CDTEXT_LANGUAGE_OCCITAN = *perlcdioc::CDTEXT_LANGUAGE_OCCITAN; *CDTEXT_LANGUAGE_POLISH = *perlcdioc::CDTEXT_LANGUAGE_POLISH; *CDTEXT_LANGUAGE_PORTUGUESE = *perlcdioc::CDTEXT_LANGUAGE_PORTUGUESE; *CDTEXT_LANGUAGE_ROMANIAN = *perlcdioc::CDTEXT_LANGUAGE_ROMANIAN; *CDTEXT_LANGUAGE_ROMANSH = *perlcdioc::CDTEXT_LANGUAGE_ROMANSH; *CDTEXT_LANGUAGE_SERBIAN = *perlcdioc::CDTEXT_LANGUAGE_SERBIAN; *CDTEXT_LANGUAGE_SLOVAK = *perlcdioc::CDTEXT_LANGUAGE_SLOVAK; *CDTEXT_LANGUAGE_SLOVENIAN = *perlcdioc::CDTEXT_LANGUAGE_SLOVENIAN; *CDTEXT_LANGUAGE_FINNISH = *perlcdioc::CDTEXT_LANGUAGE_FINNISH; *CDTEXT_LANGUAGE_SWEDISH = *perlcdioc::CDTEXT_LANGUAGE_SWEDISH; *CDTEXT_LANGUAGE_TURKISH = *perlcdioc::CDTEXT_LANGUAGE_TURKISH; *CDTEXT_LANGUAGE_FLEMISH = *perlcdioc::CDTEXT_LANGUAGE_FLEMISH; *CDTEXT_LANGUAGE_WALLON = *perlcdioc::CDTEXT_LANGUAGE_WALLON; *CDTEXT_LANGUAGE_ZULU = *perlcdioc::CDTEXT_LANGUAGE_ZULU; *CDTEXT_LANGUAGE_VIETNAMESE = *perlcdioc::CDTEXT_LANGUAGE_VIETNAMESE; *CDTEXT_LANGUAGE_UZBEK = *perlcdioc::CDTEXT_LANGUAGE_UZBEK; *CDTEXT_LANGUAGE_URDU = *perlcdioc::CDTEXT_LANGUAGE_URDU; *CDTEXT_LANGUAGE_UKRAINIAN = *perlcdioc::CDTEXT_LANGUAGE_UKRAINIAN; *CDTEXT_LANGUAGE_THAI = *perlcdioc::CDTEXT_LANGUAGE_THAI; *CDTEXT_LANGUAGE_TELUGU = *perlcdioc::CDTEXT_LANGUAGE_TELUGU; *CDTEXT_LANGUAGE_TATAR = *perlcdioc::CDTEXT_LANGUAGE_TATAR; *CDTEXT_LANGUAGE_TAMIL = *perlcdioc::CDTEXT_LANGUAGE_TAMIL; *CDTEXT_LANGUAGE_TADZHIK = *perlcdioc::CDTEXT_LANGUAGE_TADZHIK; *CDTEXT_LANGUAGE_SWAHILI = *perlcdioc::CDTEXT_LANGUAGE_SWAHILI; *CDTEXT_LANGUAGE_SRANANTONGO = *perlcdioc::CDTEXT_LANGUAGE_SRANANTONGO; *CDTEXT_LANGUAGE_SOMALI = *perlcdioc::CDTEXT_LANGUAGE_SOMALI; *CDTEXT_LANGUAGE_SINHALESE = *perlcdioc::CDTEXT_LANGUAGE_SINHALESE; *CDTEXT_LANGUAGE_SHONA = *perlcdioc::CDTEXT_LANGUAGE_SHONA; *CDTEXT_LANGUAGE_SERBO_CROAT = *perlcdioc::CDTEXT_LANGUAGE_SERBO_CROAT; *CDTEXT_LANGUAGE_RUTHENIAN = *perlcdioc::CDTEXT_LANGUAGE_RUTHENIAN; *CDTEXT_LANGUAGE_RUSSIAN = *perlcdioc::CDTEXT_LANGUAGE_RUSSIAN; *CDTEXT_LANGUAGE_QUECHUA = *perlcdioc::CDTEXT_LANGUAGE_QUECHUA; *CDTEXT_LANGUAGE_PUSHTU = *perlcdioc::CDTEXT_LANGUAGE_PUSHTU; *CDTEXT_LANGUAGE_PUNJABI = *perlcdioc::CDTEXT_LANGUAGE_PUNJABI; *CDTEXT_LANGUAGE_PERSIAN = *perlcdioc::CDTEXT_LANGUAGE_PERSIAN; *CDTEXT_LANGUAGE_PAPAMIENTO = *perlcdioc::CDTEXT_LANGUAGE_PAPAMIENTO; *CDTEXT_LANGUAGE_ORIYA = *perlcdioc::CDTEXT_LANGUAGE_ORIYA; *CDTEXT_LANGUAGE_NEPALI = *perlcdioc::CDTEXT_LANGUAGE_NEPALI; *CDTEXT_LANGUAGE_NDEBELE = *perlcdioc::CDTEXT_LANGUAGE_NDEBELE; *CDTEXT_LANGUAGE_MARATHI = *perlcdioc::CDTEXT_LANGUAGE_MARATHI; *CDTEXT_LANGUAGE_MOLDAVIAN = *perlcdioc::CDTEXT_LANGUAGE_MOLDAVIAN; *CDTEXT_LANGUAGE_MALAYSIAN = *perlcdioc::CDTEXT_LANGUAGE_MALAYSIAN; *CDTEXT_LANGUAGE_MALAGASAY = *perlcdioc::CDTEXT_LANGUAGE_MALAGASAY; *CDTEXT_LANGUAGE_MACEDONIAN = *perlcdioc::CDTEXT_LANGUAGE_MACEDONIAN; *CDTEXT_LANGUAGE_LAOTIAN = *perlcdioc::CDTEXT_LANGUAGE_LAOTIAN; *CDTEXT_LANGUAGE_KOREAN = *perlcdioc::CDTEXT_LANGUAGE_KOREAN; *CDTEXT_LANGUAGE_KHMER = *perlcdioc::CDTEXT_LANGUAGE_KHMER; *CDTEXT_LANGUAGE_KAZAKH = *perlcdioc::CDTEXT_LANGUAGE_KAZAKH; *CDTEXT_LANGUAGE_KANNADA = *perlcdioc::CDTEXT_LANGUAGE_KANNADA; *CDTEXT_LANGUAGE_JAPANESE = *perlcdioc::CDTEXT_LANGUAGE_JAPANESE; *CDTEXT_LANGUAGE_INDONESIAN = *perlcdioc::CDTEXT_LANGUAGE_INDONESIAN; *CDTEXT_LANGUAGE_HINDI = *perlcdioc::CDTEXT_LANGUAGE_HINDI; *CDTEXT_LANGUAGE_HEBREW = *perlcdioc::CDTEXT_LANGUAGE_HEBREW; *CDTEXT_LANGUAGE_HAUSA = *perlcdioc::CDTEXT_LANGUAGE_HAUSA; *CDTEXT_LANGUAGE_GURANI = *perlcdioc::CDTEXT_LANGUAGE_GURANI; *CDTEXT_LANGUAGE_GUJURATI = *perlcdioc::CDTEXT_LANGUAGE_GUJURATI; *CDTEXT_LANGUAGE_GREEK = *perlcdioc::CDTEXT_LANGUAGE_GREEK; *CDTEXT_LANGUAGE_GEORGIAN = *perlcdioc::CDTEXT_LANGUAGE_GEORGIAN; *CDTEXT_LANGUAGE_FULANI = *perlcdioc::CDTEXT_LANGUAGE_FULANI; *CDTEXT_LANGUAGE_DARI = *perlcdioc::CDTEXT_LANGUAGE_DARI; *CDTEXT_LANGUAGE_CHURASH = *perlcdioc::CDTEXT_LANGUAGE_CHURASH; *CDTEXT_LANGUAGE_CHINESE = *perlcdioc::CDTEXT_LANGUAGE_CHINESE; *CDTEXT_LANGUAGE_BURMESE = *perlcdioc::CDTEXT_LANGUAGE_BURMESE; *CDTEXT_LANGUAGE_BULGARIAN = *perlcdioc::CDTEXT_LANGUAGE_BULGARIAN; *CDTEXT_LANGUAGE_BENGALI = *perlcdioc::CDTEXT_LANGUAGE_BENGALI; *CDTEXT_LANGUAGE_BIELORUSSIAN = *perlcdioc::CDTEXT_LANGUAGE_BIELORUSSIAN; *CDTEXT_LANGUAGE_BAMBORA = *perlcdioc::CDTEXT_LANGUAGE_BAMBORA; *CDTEXT_LANGUAGE_AZERBAIJANI = *perlcdioc::CDTEXT_LANGUAGE_AZERBAIJANI; *CDTEXT_LANGUAGE_ASSAMESE = *perlcdioc::CDTEXT_LANGUAGE_ASSAMESE; *CDTEXT_LANGUAGE_ARMENIAN = *perlcdioc::CDTEXT_LANGUAGE_ARMENIAN; *CDTEXT_LANGUAGE_ARABIC = *perlcdioc::CDTEXT_LANGUAGE_ARABIC; *CDTEXT_LANGUAGE_AMHARIC = *perlcdioc::CDTEXT_LANGUAGE_AMHARIC; *MIN_CDTEXT_FIELD = *perlcdioc::MIN_CDTEXT_FIELD; *MAX_CDTEXT_FIELDS = *perlcdioc::MAX_CDTEXT_FIELDS; *DRIVE_CAP_ERROR = *perlcdioc::DRIVE_CAP_ERROR; *DRIVE_CAP_UNKNOWN = *perlcdioc::DRIVE_CAP_UNKNOWN; *DRIVE_CAP_MISC_CLOSE_TRAY = *perlcdioc::DRIVE_CAP_MISC_CLOSE_TRAY; *DRIVE_CAP_MISC_EJECT = *perlcdioc::DRIVE_CAP_MISC_EJECT; *DRIVE_CAP_MISC_LOCK = *perlcdioc::DRIVE_CAP_MISC_LOCK; *DRIVE_CAP_MISC_SELECT_SPEED = *perlcdioc::DRIVE_CAP_MISC_SELECT_SPEED; *DRIVE_CAP_MISC_SELECT_DISC = *perlcdioc::DRIVE_CAP_MISC_SELECT_DISC; *DRIVE_CAP_MISC_MULTI_SESSION = *perlcdioc::DRIVE_CAP_MISC_MULTI_SESSION; *DRIVE_CAP_MISC_MEDIA_CHANGED = *perlcdioc::DRIVE_CAP_MISC_MEDIA_CHANGED; *DRIVE_CAP_MISC_RESET = *perlcdioc::DRIVE_CAP_MISC_RESET; *DRIVE_CAP_MISC_FILE = *perlcdioc::DRIVE_CAP_MISC_FILE; *DRIVE_CAP_READ_AUDIO = *perlcdioc::DRIVE_CAP_READ_AUDIO; *DRIVE_CAP_READ_CD_DA = *perlcdioc::DRIVE_CAP_READ_CD_DA; *DRIVE_CAP_READ_CD_G = *perlcdioc::DRIVE_CAP_READ_CD_G; *DRIVE_CAP_READ_CD_R = *perlcdioc::DRIVE_CAP_READ_CD_R; *DRIVE_CAP_READ_CD_RW = *perlcdioc::DRIVE_CAP_READ_CD_RW; *DRIVE_CAP_READ_DVD_R = *perlcdioc::DRIVE_CAP_READ_DVD_R; *DRIVE_CAP_READ_DVD_PR = *perlcdioc::DRIVE_CAP_READ_DVD_PR; *DRIVE_CAP_READ_DVD_RAM = *perlcdioc::DRIVE_CAP_READ_DVD_RAM; *DRIVE_CAP_READ_DVD_ROM = *perlcdioc::DRIVE_CAP_READ_DVD_ROM; *DRIVE_CAP_READ_DVD_RW = *perlcdioc::DRIVE_CAP_READ_DVD_RW; *DRIVE_CAP_READ_DVD_RPW = *perlcdioc::DRIVE_CAP_READ_DVD_RPW; *DRIVE_CAP_READ_C2_ERRS = *perlcdioc::DRIVE_CAP_READ_C2_ERRS; *DRIVE_CAP_READ_MODE2_FORM1 = *perlcdioc::DRIVE_CAP_READ_MODE2_FORM1; *DRIVE_CAP_READ_MODE2_FORM2 = *perlcdioc::DRIVE_CAP_READ_MODE2_FORM2; *DRIVE_CAP_READ_MCN = *perlcdioc::DRIVE_CAP_READ_MCN; *DRIVE_CAP_READ_ISRC = *perlcdioc::DRIVE_CAP_READ_ISRC; *DRIVE_CAP_WRITE_CD_R = *perlcdioc::DRIVE_CAP_WRITE_CD_R; *DRIVE_CAP_WRITE_CD_RW = *perlcdioc::DRIVE_CAP_WRITE_CD_RW; *DRIVE_CAP_WRITE_DVD_R = *perlcdioc::DRIVE_CAP_WRITE_DVD_R; *DRIVE_CAP_WRITE_DVD_PR = *perlcdioc::DRIVE_CAP_WRITE_DVD_PR; *DRIVE_CAP_WRITE_DVD_RAM = *perlcdioc::DRIVE_CAP_WRITE_DVD_RAM; *DRIVE_CAP_WRITE_DVD_RW = *perlcdioc::DRIVE_CAP_WRITE_DVD_RW; *DRIVE_CAP_WRITE_DVD_RPW = *perlcdioc::DRIVE_CAP_WRITE_DVD_RPW; *DRIVE_CAP_WRITE_MT_RAINIER = *perlcdioc::DRIVE_CAP_WRITE_MT_RAINIER; *DRIVE_CAP_WRITE_BURN_PROOF = *perlcdioc::DRIVE_CAP_WRITE_BURN_PROOF; *DRIVE_CAP_WRITE_CD = *perlcdioc::DRIVE_CAP_WRITE_CD; *DRIVE_CAP_WRITE_DVD = *perlcdioc::DRIVE_CAP_WRITE_DVD; *DRIVE_CAP_WRITE = *perlcdioc::DRIVE_CAP_WRITE; *MMC_HW_VENDOR_LEN = *perlcdioc::MMC_HW_VENDOR_LEN; *MMC_HW_MODEL_LEN = *perlcdioc::MMC_HW_MODEL_LEN; *MMC_HW_REVISION_LEN = *perlcdioc::MMC_HW_REVISION_LEN; *SRC_IS_DISK_IMAGE_MASK = *perlcdioc::SRC_IS_DISK_IMAGE_MASK; *SRC_IS_DEVICE_MASK = *perlcdioc::SRC_IS_DEVICE_MASK; *SRC_IS_SCSI_MASK = *perlcdioc::SRC_IS_SCSI_MASK; *SRC_IS_NATIVE_MASK = *perlcdioc::SRC_IS_NATIVE_MASK; *DRIVER_UNKNOWN = *perlcdioc::DRIVER_UNKNOWN; *DRIVER_AIX = *perlcdioc::DRIVER_AIX; *DRIVER_FREEBSD = *perlcdioc::DRIVER_FREEBSD; *DRIVER_LINUX = *perlcdioc::DRIVER_LINUX; *DRIVER_SOLARIS = *perlcdioc::DRIVER_SOLARIS; *DRIVER_WIN32 = *perlcdioc::DRIVER_WIN32; *DRIVER_CDRDAO = *perlcdioc::DRIVER_CDRDAO; *DRIVER_BINCUE = *perlcdioc::DRIVER_BINCUE; *DRIVER_NRG = *perlcdioc::DRIVER_NRG; *DRIVER_DEVICE = *perlcdioc::DRIVER_DEVICE; *DRIVER_OP_SUCCESS = *perlcdioc::DRIVER_OP_SUCCESS; *DRIVER_OP_ERROR = *perlcdioc::DRIVER_OP_ERROR; *DRIVER_OP_UNSUPPORTED = *perlcdioc::DRIVER_OP_UNSUPPORTED; *DRIVER_OP_UNINIT = *perlcdioc::DRIVER_OP_UNINIT; *DRIVER_OP_NOT_PERMITTED = *perlcdioc::DRIVER_OP_NOT_PERMITTED; *DRIVER_OP_BAD_PARAMETER = *perlcdioc::DRIVER_OP_BAD_PARAMETER; *DRIVER_OP_BAD_POINTER = *perlcdioc::DRIVER_OP_BAD_POINTER; *DRIVER_OP_NO_DRIVER = *perlcdioc::DRIVER_OP_NO_DRIVER; *FS_AUDIO = *perlcdioc::FS_AUDIO; *FS_HIGH_SIERRA = *perlcdioc::FS_HIGH_SIERRA; *FS_ISO_9660 = *perlcdioc::FS_ISO_9660; *FS_INTERACTIVE = *perlcdioc::FS_INTERACTIVE; *FS_HFS = *perlcdioc::FS_HFS; *FS_UFS = *perlcdioc::FS_UFS; *FS_EXT2 = *perlcdioc::FS_EXT2; *FS_ISO_HFS = *perlcdioc::FS_ISO_HFS; *FS_ISO_9660_INTERACTIVE = *perlcdioc::FS_ISO_9660_INTERACTIVE; *FS_3DO = *perlcdioc::FS_3DO; *FS_XISO = *perlcdioc::FS_XISO; *FS_UDFX = *perlcdioc::FS_UDFX; *FS_UDF = *perlcdioc::FS_UDF; *FS_ISO_UDF = *perlcdioc::FS_ISO_UDF; *FS_ANAL_XA = *perlcdioc::FS_ANAL_XA; *FS_ANAL_MULTISESSION = *perlcdioc::FS_ANAL_MULTISESSION; *FS_ANAL_PHOTO_CD = *perlcdioc::FS_ANAL_PHOTO_CD; *FS_ANAL_HIDDEN_TRACK = *perlcdioc::FS_ANAL_HIDDEN_TRACK; *FS_ANAL_CDTV = *perlcdioc::FS_ANAL_CDTV; *FS_ANAL_BOOTABLE = *perlcdioc::FS_ANAL_BOOTABLE; *FS_ANAL_VIDEOCD = *perlcdioc::FS_ANAL_VIDEOCD; *FS_ANAL_ROCKRIDGE = *perlcdioc::FS_ANAL_ROCKRIDGE; *FS_ANAL_JOLIET = *perlcdioc::FS_ANAL_JOLIET; *FS_ANAL_SVCD = *perlcdioc::FS_ANAL_SVCD; *FS_ANAL_CVD = *perlcdioc::FS_ANAL_CVD; *FS_ANAL_XISO = *perlcdioc::FS_ANAL_XISO; *FS_MATCH_ALL = *perlcdioc::FS_MATCH_ALL; *FS_UNKNOWN = *perlcdioc::FS_UNKNOWN; *hw_info = *perlcdioc::hw_info; *DISC_MODE_CD_DA = *perlcdioc::DISC_MODE_CD_DA; *DISC_MODE_CD_DATA = *perlcdioc::DISC_MODE_CD_DATA; *DISC_MODE_CD_XA = *perlcdioc::DISC_MODE_CD_XA; *DISC_MODE_CD_MIXED = *perlcdioc::DISC_MODE_CD_MIXED; *DISC_MODE_DVD_ROM = *perlcdioc::DISC_MODE_DVD_ROM; *DISC_MODE_DVD_RAM = *perlcdioc::DISC_MODE_DVD_RAM; *DISC_MODE_DVD_R = *perlcdioc::DISC_MODE_DVD_R; *DISC_MODE_DVD_RW = *perlcdioc::DISC_MODE_DVD_RW; *DISC_MODE_DVD_PR = *perlcdioc::DISC_MODE_DVD_PR; *DISC_MODE_DVD_PRW = *perlcdioc::DISC_MODE_DVD_PRW; *DISC_MODE_DVD_OTHER = *perlcdioc::DISC_MODE_DVD_OTHER; *DISC_MODE_NO_INFO = *perlcdioc::DISC_MODE_NO_INFO; *DISC_MODE_ERROR = *perlcdioc::DISC_MODE_ERROR; *DISC_MODE_CD_I = *perlcdioc::DISC_MODE_CD_I; import Device::Cdio::VERSION; $VERSION = $Device::Cdio::VERSION; use strict; =pod =head1 NAME perlcdio - lower-level wrapper to libcdio, the CD Input and Control library =head1 SYNOPSIS This is fairly straight-forward wrapper around the C library libcdio. Although this is perfectly usable on its own, it is expected that the Object-Oriented interface L is what most people will want to use. There are various constants that are defined here. =head1 DESCRIPTION Encapsulation is done in two parts. The lower-level Perl interface is called perlcdio (this file) and is generated via SWIG. =head1 CONSTANTS =head2 Driver ID's =over 4 =item DRIVER_UNKNOWN Use when you don't know what kind of driver and you don't care if it is an CD image driver or a real CD-ROM driver. See also DRIVER_DEVICE which doesn't include image drivers. =item DRIVER_AIX Driver for IBM's AIX. =item DRIVER_BSDI Driver for BSDI. =item DRIVER_FREEBSD Driver for Free BSD =item DRIVER_LINUX Driver for GNU/LINUX =item DRIVER_SOLARIS Driver for Solaris =item DRIVER_OSX Driver for Apple's OS X. =item DRIVER_WIN32 Driver for Microsoft Windows =item DRIVER_CDRDAO Image Driver for cdrdao =item DRIVER_BINCUE Image driver for CDRWin BIN/CUE =item DRIVER_NRG Image driver for Nero NRG =item DRIVER_DEVICE Use when you don't know what kind of driver but the driver must be a real CD-ROM driver. See also DRIVER_UNKNOWN which includes image drivers. =back =head2 Driver Return codes May driver operations return a status code. =over 4 =item DRIVER_OP_SUCCESS Driver operation was successful =item DRIVER_OP_ERROR Driver operation had an error of some sort =item DRIVER_OP_UNSUPPORTED Operation is not supported for this driver. For example ejecting a CD from an image driver. =item DRIVER_OP_UNINIT Source is not initialized for this operation. =item DRIVER_OP_NOT_PERMITTED Operation is not permitted =item DRIVER_OP_BAD_PARAMETER An invalid parameter was passed to the routine =item DRIVER_OP_BAD_POINTER A pointer somehow got corrupted. =item DRIVER_OP_NO_DRIVER No driver has been set. =back =head2 Device Capabilities =head3 Miscellaneous =over 4 =item DRIVE_CAP_ERROR =item DRIVE_CAP_UNKNOWN =item DRIVE_CAP_MISC_CLOSE_TRAY =item DRIVE_CAP_MISC_EJECT =item DRIVE_CAP_MISC_LOCK =item DRIVE_CAP_MISC_SELECT_SPEED =item DRIVE_CAP_MISC_SELECT_DISC =item DRIVE_CAP_MISC_MULTI_SESSION =item DRIVE_CAP_MISC_MEDIA_CHANGED =item DRIVE_CAP_MISC_RESET =item DRIVE_CAP_MISC_FILE =back =head3 Read Capabilities =over 4 =item DRIVE_CAP_READ_AUDIO =item DRIVE_CAP_READ_CD_DA =item DRIVE_CAP_READ_CD_G =item DRIVE_CAP_READ_CD_R =item DRIVE_CAP_READ_CD_RW =item DRIVE_CAP_READ_DVD_R =item DRIVE_CAP_READ_DVD_PR =item DRIVE_CAP_READ_DVD_RAM =item DRIVE_CAP_READ_DVD_ROM =item DRIVE_CAP_READ_DVD_RW =item DRIVE_CAP_READ_DVD_RPW =item DRIVE_CAP_READ_C2_ERRS =item DRIVE_CAP_READ_MODE2_FORM1 =item DRIVE_CAP_READ_MODE2_FORM2 =item DRIVE_CAP_READ_MCN =item DRIVE_CAP_READ_ISRC =back =head2 Writing masks =over 4 =item DRIVE_CAP_WRITE_CD_R =item DRIVE_CAP_WRITE_CD_RW =item DRIVE_CAP_WRITE_DVD_R =item DRIVE_CAP_WRITE_DVD_PR =item DRIVE_CAP_WRITE_DVD_RAM =item DRIVE_CAP_WRITE_DVD_RW =item DRIVE_CAP_WRITE_DVD_RPW =item DRIVE_CAP_WRITE_MT_RAINIER =item DRIVE_CAP_WRITE_BURN_PROOF =back =head3 Derived Capabilities =over 4 =item DRIVE_CAP_WRITE_CD Has some sort of CD writer ability =item DRIVE_CAP_WRITE_DVD Has some sort of DVD writer ability =item DRIVE_CAP_WRITE Has some sort of writer ability =back =head2 Filesystem type constants These constants are used in getting drive capabilities: =over 4 =item FS_AUDIO audio only - not really a filesystem =item FS_HIGH_SIERRA High-Sierra Filesystem =item FS_ISO_9660 ISO-9660 filesystem =item FS_INTERACTIVE =item FS_HFS file system used on the Macintosh system in MacOS 6 through MacOS 9 and deprecated in OSX =item FS_UFS Generic Unix file system derived from the Berkeley fast file system. =item FS_EXT2 EXT2 was the GNU/Linux native filesystem for early kernels. Newer GNU/Linux OS's may use EXT3 which EXT2 with a journal. =item FS_ISO_HFS both HFS & ISO-9660 filesystem =item FS_ISO_9660_INTERACTIVE both CD-RTOS and ISO filesystem =item FS_3DO The 3DO is, technically, a set of specifications created by the 3DO company. These specs are for making a 3DO Interactive Multiplayer which uses a CD-player. Panasonic in the early 90's was the first company to manufacture and market a 3DO player. =item FS_XISO Microsoft X-BOX CD =item FS_UDFX =item FS_UDF =item FS_ISO_UDF =item FS_ANAL_XA eXtended Architecture format =item FS_ANAL_MULTISESSION CD has multisesion =item FS_ANAL_PHOTO_CD Is a Kodak Photo CD =item FS_ANAL_HIDDEN_TRACK Hidden track at the beginning the CD =item FS_ANAL_CDTV =item FS_ANAL_BOOTABLE CD is bootable =item FS_ANAL_VIDEOCD VCD 1.1 =item FS_ANAL_ROCKRIDGE Has Rock Ridge Extensions to ISO 9660 =item FS_ANAL_JOLIET Microsoft Joliet extensions to ISO 9660 =item FS_ANAL_SVCD Super VCD or Choiji Video CD =item FS_ANAL_CVD Choiji Video CD =item FS_ANAL_XISO XBOX CD determined by some analysis =item FS_MATCH_ALL bitmask which can be used to specify matching any sort of CD =back =head2 Sector size constants =over 4 =item CD_FRAMESIZE =item CD_FRAMESIZE_RAW Size of a Philip Red book CD-DA block. It is also the maximum CD sector size possible: 2352 bytes. =item ISO_BLOCKSIZE Size of an ISO 9660 block. Also the size of the data portion in CD data reads: 2048 bytes. =item M2F2_SECTOR_SIZE Mode 2 Form 2 Data size: 2328 bytes. =item M2RAW_SECTOR_SIZE Mod1 Form 1 Data size: 2336 bytes. =back =head2 Reading Modes =over 4 =item READ_MODE_AUDIO audio mode (CD-DA) read. Blocksize is a multiple of $perlcdio::CD_FRAMESIZE_RAW (2352) bytes. =item READ_MODE_M1F1 Mode 1 Form 1 read. Blocksize is a multiple of $perlcdio::CD_FRAMESIZE (2048) bytes. =item READ_MODE_M1F2 Mode 1 Form 2 read. Blocksize is a multiple of $perlcdio::M2RAW_SECTIOR_SIZE (2336) bytes. =item READ_MODE_M2F1 Mode 2 Form 1 read. Blocksize is a multiple of $perlcdio::CD_FRAMESIZE (2048) bytes. =item READ_MODE_M2F2 Mode 2 Form 1 read. Blocksize is a multiple of (2328) bytes. =back =head2 Miscellaneous =over 4 =item VERSION_NUM libcdio version that is getting used =item INVALID_LBA Canonical value used for an invalid LBA. =item INVALID_LSN Canonical value used for an invalid LSN. =item INVALID_TRACK Canonical value used for an invalid track number. (Valid range is 0 to 99.) =item LEADOUT_TRACK Canonical value for the "leadout" or track just after the last track. So again this value is outside the range 0 to 99. The leadout track is often used to get the last LSN or LBA. The libcdio routines also allow the last actual track plus one as a synonym for the leadout track. =back =head1 METHODS =head2 cdio_version perlcdio::cdio_version Returns the libcdio version string Device::Cdio is currently linked with. =head2 this This seems to be an artifact of SWIG. =head1 SEE ALSO L has documentation on libcdio including the a manual and the API via doxygen. =head1 AUTHORS Rocky Bernstein C<< >>. =head1 COPYRIGHT Copyright (C) 2006, 2008, 2011 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . =cut 1; Device-Cdio-v2.0.0/lib/perlmmc.pm000444001750001750 2505313222226267 16344 0ustar00rockyrocky000000000000# This file was automatically generated by SWIG (http://www.swig.org). # Version 3.0.10 # # Do not make changes to this file unless you know what you are doing--modify # the SWIG interface file instead. package perlmmc; use base qw(Exporter); use base qw(DynaLoader); package perlmmcc; bootstrap perlmmc; package perlmmc; @EXPORT = qw(); # ---------- BASE METHODS ------------- package perlmmc; sub TIEHASH { my ($classname,$obj) = @_; return bless $obj, $classname; } sub CLEAR { } sub FIRSTKEY { } sub NEXTKEY { } sub FETCH { my ($self,$field) = @_; my $member_func = "swig_${field}_get"; $self->$member_func(); } sub STORE { my ($self,$field,$newval) = @_; my $member_func = "swig_${field}_set"; $self->$member_func($newval); } sub this { my $ptr = shift; return tied(%$ptr); } # ------- FUNCTION WRAPPERS -------- package perlmmc; *imaxabs = *perlmmcc::imaxabs; *imaxdiv = *perlmmcc::imaxdiv; *strtoimax = *perlmmcc::strtoimax; *strtoumax = *perlmmcc::strtoumax; *mmc_eject_media = *perlmmcc::mmc_eject_media; *stop_media = *perlmmcc::stop_media; *mmc_close_tray = *perlmmcc::mmc_close_tray; *mmc_get_isrc = *perlmmcc::mmc_get_isrc; *mmc_get_track_isrc = *perlmmcc::mmc_get_track_isrc; ############# Class : perlmmc::imaxdiv_t ############## package perlmmc::imaxdiv_t; use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS); @ISA = qw( perlmmc ); %OWNER = (); %ITERATORS = (); *swig_quot_get = *perlmmcc::imaxdiv_t_quot_get; *swig_quot_set = *perlmmcc::imaxdiv_t_quot_set; *swig_rem_get = *perlmmcc::imaxdiv_t_rem_get; *swig_rem_set = *perlmmcc::imaxdiv_t_rem_set; sub new { my $pkg = shift; my $self = perlmmcc::new_imaxdiv_t(@_); bless $self, $pkg if defined($self); } sub DESTROY { return unless $_[0]->isa('HASH'); my $self = tied(%{$_[0]}); return unless defined $self; delete $ITERATORS{$self}; if (exists $OWNER{$self}) { perlmmcc::delete_imaxdiv_t($self); delete $OWNER{$self}; } } sub DISOWN { my $self = shift; my $ptr = tied(%$self); delete $OWNER{$ptr}; } sub ACQUIRE { my $self = shift; my $ptr = tied(%$self); $OWNER{$ptr} = 1; } # ------- VARIABLE STUBS -------- package perlmmc; *VERSION_NUM = *perlmmcc::VERSION_NUM; *INVALID_LBA = *perlmmcc::INVALID_LBA; *INVALID_LSN = *perlmmcc::INVALID_LSN; *CD_FRAMESIZE = *perlmmcc::CD_FRAMESIZE; *CD_FRAMESIZE_RAW = *perlmmcc::CD_FRAMESIZE_RAW; *ISO_BLOCKSIZE = *perlmmcc::ISO_BLOCKSIZE; *M2F2_SECTOR_SIZE = *perlmmcc::M2F2_SECTOR_SIZE; *M2RAW_SECTOR_SIZE = *perlmmcc::M2RAW_SECTOR_SIZE; *GPCMD_INQUIRY = *perlmmcc::GPCMD_INQUIRY; *GPCMD_MODE_SELECT_6 = *perlmmcc::GPCMD_MODE_SELECT_6; *GPCMD_MODE_SENSE_6 = *perlmmcc::GPCMD_MODE_SENSE_6; *GPCMD_START_STOP = *perlmmcc::GPCMD_START_STOP; *GPCMD_ALLOW_MEDIUM_REMOVAL = *perlmmcc::GPCMD_ALLOW_MEDIUM_REMOVAL; *CDIO_MMC_GPCMD_READ_10 = *perlmmcc::CDIO_MMC_GPCMD_READ_10; *GPCMD_READ_SUBCHANNEL = *perlmmcc::GPCMD_READ_SUBCHANNEL; *GPCMD_READ_HEADER = *perlmmcc::GPCMD_READ_HEADER; *GPCMD_PLAY_AUDIO_10 = *perlmmcc::GPCMD_PLAY_AUDIO_10; *GPCMD_GET_CONFIGURATION = *perlmmcc::GPCMD_GET_CONFIGURATION; *GPCMD_PLAY_AUDIO_MSF = *perlmmcc::GPCMD_PLAY_AUDIO_MSF; *GPCMD_PLAY_AUDIO_TI = *perlmmcc::GPCMD_PLAY_AUDIO_TI; *GPCMD_PLAY_TRACK_REL_10 = *perlmmcc::GPCMD_PLAY_TRACK_REL_10; *GPCMD_GET_EVENT_STATUS = *perlmmcc::GPCMD_GET_EVENT_STATUS; *GPCMD_PAUSE_RESUME = *perlmmcc::GPCMD_PAUSE_RESUME; *GPCMD_READ_DISC_INFO = *perlmmcc::GPCMD_READ_DISC_INFO; *GPCMD_MODE_SELECT_10 = *perlmmcc::GPCMD_MODE_SELECT_10; *GPCMD_MODE_SENSE_10 = *perlmmcc::GPCMD_MODE_SENSE_10; *GPCMD_PLAY_AUDIO_12 = *perlmmcc::GPCMD_PLAY_AUDIO_12; *GPCMD_LOAD_UNLOAD = *perlmmcc::GPCMD_LOAD_UNLOAD; *GPCMD_READ_12 = *perlmmcc::GPCMD_READ_12; *GPCMD_PLAY_TRACK_REL_12 = *perlmmcc::GPCMD_PLAY_TRACK_REL_12; *GPCMD_READ_DVD_STRUCTURE = *perlmmcc::GPCMD_READ_DVD_STRUCTURE; *GPCMD_READ_MSF = *perlmmcc::GPCMD_READ_MSF; *GPCMD_SET_SPEED = *perlmmcc::GPCMD_SET_SPEED; *GPCMD_READ_CD = *perlmmcc::GPCMD_READ_CD; *GPCMD_CD_PLAYBACK_STATUS = *perlmmcc::GPCMD_CD_PLAYBACK_STATUS; *GPCMD_PLAYBACK_CONTROL = *perlmmcc::GPCMD_PLAYBACK_CONTROL; *GPCMD_READ_CDDA = *perlmmcc::GPCMD_READ_CDDA; *GPCMD_READ_CDXA = *perlmmcc::GPCMD_READ_CDXA; *GPCMD_READ_ALL_SUBCODES = *perlmmcc::GPCMD_READ_ALL_SUBCODES; *READ_SUB_ST_INVALID = *perlmmcc::READ_SUB_ST_INVALID; *READ_SUB_ST_PLAY = *perlmmcc::READ_SUB_ST_PLAY; *READ_SUB_ST_PAUSED = *perlmmcc::READ_SUB_ST_PAUSED; *READ_SUB_ST_COMPLETED = *perlmmcc::READ_SUB_ST_COMPLETED; *READ_SUB_ST_ERROR = *perlmmcc::READ_SUB_ST_ERROR; *READ_SUB_ST_NO_STATUS = *perlmmcc::READ_SUB_ST_NO_STATUS; *READ_TYPE_ANY = *perlmmcc::READ_TYPE_ANY; *READ_TYPE_CDDA = *perlmmcc::READ_TYPE_CDDA; *READ_TYPE_MODE1 = *perlmmcc::READ_TYPE_MODE1; *READ_TYPE_MODE2 = *perlmmcc::READ_TYPE_MODE2; *READ_TYPE_M2F1 = *perlmmcc::READ_TYPE_M2F1; *READ_TYPE_M2F2 = *perlmmcc::READ_TYPE_M2F2; *READTOC_FMT_TOC = *perlmmcc::READTOC_FMT_TOC; *READTOC_FMT_SESSION = *perlmmcc::READTOC_FMT_SESSION; *READTOC_FMT_FULTOC = *perlmmcc::READTOC_FMT_FULTOC; *CDIO_MMC_READTOC_FMT_PMA = *perlmmcc::CDIO_MMC_READTOC_FMT_PMA; *READTOC_FMT_PMA = *perlmmcc::READTOC_FMT_PMA; *READTOC_FMT_ATIP = *perlmmcc::READTOC_FMT_ATIP; *READTOC_FMT_CDTEXT = *perlmmcc::READTOC_FMT_CDTEXT; *R_W_ERROR_PAGE = *perlmmcc::R_W_ERROR_PAGE; *WRITE_PARMS_PAGE = *perlmmcc::WRITE_PARMS_PAGE; *CDR_PARMS_PAGE = *perlmmcc::CDR_PARMS_PAGE; *AUDIO_CTL_PAGE = *perlmmcc::AUDIO_CTL_PAGE; *POWER_PAGE = *perlmmcc::POWER_PAGE; *FAULT_FAIL_PAGE = *perlmmcc::FAULT_FAIL_PAGE; *TO_PROTECT_PAGE = *perlmmcc::TO_PROTECT_PAGE; *CAPABILITIES_PAGE = *perlmmcc::CAPABILITIES_PAGE; *ALL_PAGES = *perlmmcc::ALL_PAGES; *GET_CONF_ALL_FEATURES = *perlmmcc::GET_CONF_ALL_FEATURES; *GET_CONF_CURRENT_FEATURES = *perlmmcc::GET_CONF_CURRENT_FEATURES; *GET_CONF_NAMED_FEATURE = *perlmmcc::GET_CONF_NAMED_FEATURE; *FEATURE_PROFILE_LIST = *perlmmcc::FEATURE_PROFILE_LIST; *FEATURE_CORE = *perlmmcc::FEATURE_CORE; *FEATURE_MORPHING = *perlmmcc::FEATURE_MORPHING; *FEATURE_REMOVABLE_MEDIUM = *perlmmcc::FEATURE_REMOVABLE_MEDIUM; *FEATURE_WRITE_PROTECT = *perlmmcc::FEATURE_WRITE_PROTECT; *FEATURE_RANDOM_READABLE = *perlmmcc::FEATURE_RANDOM_READABLE; *FEATURE_MULTI_READ = *perlmmcc::FEATURE_MULTI_READ; *FEATURE_CD_READ = *perlmmcc::FEATURE_CD_READ; *FEATURE_DVD_READ = *perlmmcc::FEATURE_DVD_READ; *FEATURE_RANDOM_WRITABLE = *perlmmcc::FEATURE_RANDOM_WRITABLE; *FEATURE_INCR_WRITE = *perlmmcc::FEATURE_INCR_WRITE; *FEATURE_SECTOR_ERASE = *perlmmcc::FEATURE_SECTOR_ERASE; *FEATURE_FORMATABLE = *perlmmcc::FEATURE_FORMATABLE; *FEATURE_DEFECT_MGMT = *perlmmcc::FEATURE_DEFECT_MGMT; *FEATURE_WRITE_ONCE = *perlmmcc::FEATURE_WRITE_ONCE; *FEATURE_RESTRICT_OVERW = *perlmmcc::FEATURE_RESTRICT_OVERW; *FEATURE_CD_RW_CAV = *perlmmcc::FEATURE_CD_RW_CAV; *FEATURE_MRW = *perlmmcc::FEATURE_MRW; *FEATURE_ENHANCED_DEFECT = *perlmmcc::FEATURE_ENHANCED_DEFECT; *FEATURE_DVD_PRW = *perlmmcc::FEATURE_DVD_PRW; *FEATURE_DVD_PR = *perlmmcc::FEATURE_DVD_PR; *FEATURE_RIGID_RES_OVERW = *perlmmcc::FEATURE_RIGID_RES_OVERW; *FEATURE_CD_TAO = *perlmmcc::FEATURE_CD_TAO; *FEATURE_CD_SAO = *perlmmcc::FEATURE_CD_SAO; *FEATURE_DVD_R_RW_WRITE = *perlmmcc::FEATURE_DVD_R_RW_WRITE; *FEATURE_CD_RW_MEDIA_WRITE = *perlmmcc::FEATURE_CD_RW_MEDIA_WRITE; *FEATURE_DVD_PR_2_LAYER = *perlmmcc::FEATURE_DVD_PR_2_LAYER; *FEATURE_POWER_MGMT = *perlmmcc::FEATURE_POWER_MGMT; *FEATURE_CDDA_EXT_PLAY = *perlmmcc::FEATURE_CDDA_EXT_PLAY; *FEATURE_MCODE_UPGRADE = *perlmmcc::FEATURE_MCODE_UPGRADE; *FEATURE_TIME_OUT = *perlmmcc::FEATURE_TIME_OUT; *FEATURE_DVD_CSS = *perlmmcc::FEATURE_DVD_CSS; *FEATURE_RT_STREAMING = *perlmmcc::FEATURE_RT_STREAMING; *FEATURE_LU_SN = *perlmmcc::FEATURE_LU_SN; *FEATURE_FIRMWARE_DATE = *perlmmcc::FEATURE_FIRMWARE_DATE; *FEATURE_PROF_NON_REMOVABLE = *perlmmcc::FEATURE_PROF_NON_REMOVABLE; *FEATURE_PROF_REMOVABLE = *perlmmcc::FEATURE_PROF_REMOVABLE; *FEATURE_PROF_MO_ERASABLE = *perlmmcc::FEATURE_PROF_MO_ERASABLE; *FEATURE_PROF_MO_WRITE_ONCE = *perlmmcc::FEATURE_PROF_MO_WRITE_ONCE; *FEATURE_PROF_AS_MO = *perlmmcc::FEATURE_PROF_AS_MO; *FEATURE_PROF_CD_ROM = *perlmmcc::FEATURE_PROF_CD_ROM; *FEATURE_PROF_CD_R = *perlmmcc::FEATURE_PROF_CD_R; *FEATURE_PROF_CD_RW = *perlmmcc::FEATURE_PROF_CD_RW; *FEATURE_PROF_DVD_ROM = *perlmmcc::FEATURE_PROF_DVD_ROM; *FEATURE_PROF_DVD_R_SEQ = *perlmmcc::FEATURE_PROF_DVD_R_SEQ; *FEATURE_PROF_DVD_RAM = *perlmmcc::FEATURE_PROF_DVD_RAM; *FEATURE_PROF_DVD_RW_RO = *perlmmcc::FEATURE_PROF_DVD_RW_RO; *FEATURE_PROF_DVD_RW_SEQ = *perlmmcc::FEATURE_PROF_DVD_RW_SEQ; *FEATURE_PROF_DVD_PRW = *perlmmcc::FEATURE_PROF_DVD_PRW; *FEATURE_PROF_DVD_PR = *perlmmcc::FEATURE_PROF_DVD_PR; *FEATURE_PROF_DDCD_ROM = *perlmmcc::FEATURE_PROF_DDCD_ROM; *FEATURE_PROF_DDCD_R = *perlmmcc::FEATURE_PROF_DDCD_R; *FEATURE_PROF_DDCD_RW = *perlmmcc::FEATURE_PROF_DDCD_RW; *FEATURE_PROF_NON_CONFORM = *perlmmcc::FEATURE_PROF_NON_CONFORM; *FEATURE_INTERFACE_UNSPECIFIED = *perlmmcc::FEATURE_INTERFACE_UNSPECIFIED; *FEATURE_INTERFACE_SCSI = *perlmmcc::FEATURE_INTERFACE_SCSI; *FEATURE_INTERFACE_ATAPI = *perlmmcc::FEATURE_INTERFACE_ATAPI; *FEATURE_INTERFACE_IEEE_1394 = *perlmmcc::FEATURE_INTERFACE_IEEE_1394; *FEATURE_INTERFACE_IEEE_1394A = *perlmmcc::FEATURE_INTERFACE_IEEE_1394A; *FEATURE_INTERFACE_FIBRE_CH = *perlmmcc::FEATURE_INTERFACE_FIBRE_CH; import Device::Cdio::VERSION; $VERSION = $Device::Cdio::VERSION; use strict; =pod =head1 NAME perlmmc - lower-level wrapper to MMC from libcdio, the ISO 9660 library of the CD Input and Control package =head1 SYNOPSIS This is fairly straight-forward wrapper around the MultiMedia commands from the C library libcdio. Although this is perfectly usable on its own, it is expected that the interfaces L or L is what most people will want to use. There are various constants that are defined here. =head1 METHODS =head2 this This seems to be an artifact of SWIG. =head1 SEE ALSO L has documentation on libcdio including the a manual and the API via doxygen. =head1 AUTHORS Rocky Bernstein C<< >>. =head1 COPYRIGHT Copyright (C) 2006, 2008, 2011 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . =cut 1; Device-Cdio-v2.0.0/lib/Device000755001750001750 013222226267 15364 5ustar00rockyrocky000000000000Device-Cdio-v2.0.0/lib/Device/Cdio.pm000444001750001750 4263413222226267 16766 0ustar00rockyrocky000000000000package Device::Cdio; require 5.10.1; # # See end for copyright and license. =pod =head1 NAME Device::Cdio - Module for CD Input and Control library. =cut use version; $VERSION = qv('2.0.0'); =pod =head1 SYNOPSIS This encapsulates CD-ROM reading and control. Applications wishing to be oblivious of the OS- and device-dependent properties of a CD-ROM can use this library. use Device::Cdio; use Device::Cdio::Device; $cd_drives = Device::Cdio::get_devices($perlcdio::DRIVER_DEVICE); $cd_drives = Device::Cdio::get_devices_with_cap($perlcdio::FS_AUDIO, 0); foreach my $drive (@$cd_drives) { print "Drive $drive\n"; } foreach my $driver_name (sort keys(%Device::Cdio::drivers)) { print "Driver $driver_name is installed.\n" if Device::Cdio::have_driver($driver_name) and $driver_name !~ m{device|Unknown}; } =head1 DESCRIPTION This is an Perl Object-Oriented interface to the GNU CD Input and Control library, C, written in C. The library encapsulates CD-ROM reading and control. Perl programs wishing to be oblivious of the OS- and device-dependent properties of a CD-ROM can use this library. The encapsulation is done in two parts. The lower-level Perl interface is called L and is generated by SWIG. This module uses C. Actually, there are no objects in module, but there are in its sub modules L and L. Although C is perfectly usable on its own, it is expected that Cdio is what most people will use. As C more closely models the C interface C, it is conceivable (if unlikely) that die-hard libcdio C users who are very familiar with that interface could prefer that. =head2 CALLING ROUTINES Routines accept named parameters as well as positional parameters. For named parameters, each argument name is preceded by a dash. For example: Device::Cdio::have_driver(-driver_id=>'GNU/Linux') Each argument name is preceded by a dash. Neither case nor order matters in the argument list. C<-driver_id>, C<-Driver_ID>, and C<-DRIVER_ID> are all acceptable. In fact, only the first argument needs to begin with a dash. If a dash is present in the first argument, we assume dashes for the subsequent parameters. In the documentation below and elsewhere in this package the parameter name that can be used in this style of call is given in the parameter list. For example, for C the documentation below reads: close_tray(drive=undef, driver_id=$perlcdio::DRIVER_UNKNOWN) -> ($drc, $driver_id) So the parameter names are "drive", and "driver_id". Neither parameter is required. If "drive" is not specified, a value of "undef" will be used. And if "driver_id" is not specified, a value of $perlcdio::DRIVER_UNKNOWN is used. The older, more traditional style of positional parameters is also supported. So the C example from above can also be written: Device::Cdio::have_driver('GNU/Linux') Finally, since no parameter name can be confused with a an integer, negative values will not get confused as a named parameter. =cut use warnings; use strict; use perlcdio; use Carp; use vars qw($VERSION @EXPORT_OK @EXPORT @ISA %drivers); use Device::Cdio::Util qw( _check_arg_count _extra_args _rearrange ); @ISA = qw(Exporter); @EXPORT = qw(close_tray have_driver is_binfile is_cuefile is_nrg is_device is_tocfile convert_drive_cap_misc convert_drive_cap_read convert_drive_cap_write); @EXPORT_OK = qw(_rearrange drivers); # Note: the keys below match those the names returned by # cdio_get_driver_name() %Device::Cdio::drivers = ( 'Unknown' => $perlcdio::DRIVER_UNKNOWN, 'AIX' => $perlcdio::DRIVER_AIX, 'BSDI' => $perlcdio::DRIVER_BSDI, 'FreeBSD' => $perlcdio::DRIVER_FREEBSD, 'GNU/Linux' => $perlcdio::DRIVER_LINUX, 'Solaris' => $perlcdio::DRIVER_SOLARIS, 'OS X' => $perlcdio::DRIVER_OSX, 'WIN32' => $perlcdio::DRIVER_WIN32, 'CDRDAO' => $perlcdio::DRIVER_CDRDAO, 'BIN/CUE' => $perlcdio::DRIVER_BINCUE, 'NRG' => $perlcdio::DRIVER_NRG, 'device' => $perlcdio::DRIVER_DEVICE ); %Device::Cdio::read_mode2blocksize = ( $perlcdio::READ_MODE_AUDIO => $perlcdio::CD_FRAMESIZE_RAW, $perlcdio::READ_MODE_M1F1 => $perlcdio::M2RAW_SECTOR_SIZE, $perlcdio::READ_MODE_M1F2 => $perlcdio::CD_FRAMESIZE, $perlcdio::READ_MODE_M2F1 => $perlcdio::M2RAW_SECTOR_SIZE, $perlcdio::READ_MODE_M2F2 => $perlcdio::CD_FRAMESIZE ); =pod =head1 SUBROUTINES =head2 close_tray close_tray(drive=undef, driver_id=$perlcdio::DRIVER_UNKNOWN) -> ($drc, $driver_id) close media tray in CD drive if there is a routine to do so. In an array context, the driver return-code status and the name of the driver used are returned. In a scalar context, just the return code status is returned. =cut sub close_tray { my (@p) = @_; my($drive, $driver_id, @args) = _rearrange(['DRIVE','DRIVER_ID'], @p); return undef if _extra_args(@args); $driver_id = $perlcdio::DRIVER_UNKNOWN if !defined($driver_id); my ($drc, $found_driver_id) = perlcdio::close_tray($drive, $driver_id); ## Use wantarray to determine if we want one output or two. return wantarray ? ($drc, $found_driver_id) : $drc; } =pod =head2 driver_strerror driver_strerror(rc)->$errmsg Convert a driver return code into a string text message. =cut sub driver_strerror { my (@p) = @_; my($drc, @args) = _rearrange(['RC'], @p); return undef if _extra_args(@args); if ($drc == $perlcdio::DRIVER_OP_SUCCESS) { return "No error"; } if ($drc == $perlcdio::DRIVER_OP_ERROR) { return "Unspecified driver error"; } if ($drc == $perlcdio::DRIVER_OP_UNINIT) { return "driver not initialized"; } if ($drc == $perlcdio::DRIVER_OP_UNSUPPORTED) { return "Operation not supported on driver"; } if ($drc == $perlcdio::DRIVER_OP_NOT_PERMITTED) { return "Operation not permitted with this driver"; } if ($drc == $perlcdio::DRIVER_OP_BAD_PARAMETER) { return "Bad parameter passed in operation"; } if ($drc == $perlcdio::DRIVER_OP_BAD_POINTER) { return "Invalid internal pointer"; } if ($drc == $perlcdio::DRIVER_OP_NO_DRIVER) { return "No driver"; } return sprintf "Unclassifed driver return code %d", $drc; } =pod =head2 get_default_device_driver get_default_device_driver(driver_id=DRIVER_DEVICE)-> ($device, $driver) Return a string containing the default CD device if none is specified. if driver_id is DRIVER_UNKNOWN or DRIVER_DEVICE then find a suitable one set the default device for that. undef is returned as the driver if we couldn't get a default device. =cut sub get_default_device_driver { my (@p) = @_; my($driver_id, @args) = _rearrange(['DRIVER_ID'], @p); return undef if _extra_args(@args); $driver_id = $perlcdio::DRIVER_DEVICE if !defined($driver_id); my($drive, $out_driver_id) = perlcdio::get_default_device_driver($driver_id); return wantarray ? ($drive, $out_driver_id) : $drive; } =pod =head2 get_devices $revices = get_devices(driver_id=$Cdio::DRIVER_UNKNOWN); Return an array of device names. If you want a specific devices for a driver, give that device. If you want hardware devices, give $perlcdio::DRIVER_DEVICE and if you want all possible devices, image drivers and hardware drivers give $perlcdio::DRIVER_UNKNOWN. undef is returned if we couldn't return a list of devices. In some situations of drivers or OS's we can't find a CD device if there is no media in it and it is possible for this routine to return undef even though there may be a hardware CD-ROM. =cut sub get_devices { my (@p) = @_; my($driver_id, @args) = _rearrange(['DRIVER_ID'], @p); return undef if _extra_args(@args); $driver_id = $perlcdio::DRIVER_DEVICE if !defined($driver_id); my $ret = perlcdio::get_devices($driver_id); return wantarray ? @$ret : $ret; } =pod =head2 get_devices_ret get_devices_ret($driver_id)->(@devices, $driver_id) Like get_devices, but we may change the p_driver_id if we were given $perlcdio::DRIVER_DEVICE or $perlcdio::DRIVER_UNKNOWN. This is because often one wants to get a drive name and then I it afterwords. Giving the driver back facilitates this, and speeds things up for libcdio as well. =cut sub get_devices_ret { my (@p) = @_; my($driver_id, @args) = _rearrange(['DRIVER_ID'], @p); return undef if _extra_args(@args); $driver_id = $perlcdio::DRIVER_DEVICE if !defined($driver_id); my $ret = perlcdio::get_devices_ret($driver_id); return wantarray ? @$ret : $ret; } =pod =head2 get_devices_with_cap $devices = get_devices_with_cap($capabilities, $any); Get an array of device names in search_devices that have at least the capabilities listed by the capabilities parameter. If "any" is set false then ALL capabilities listed in the extended portion of capabilities (i.e. not the basic filesystem) must be satisfied. If "any" is set true, then if any of the capabilities matches, we call that a success. To find a CD-drive of any type, use the mask $perlcdio::FS_MATCH_ALL. The array of device names is returned or undef if we couldn't get a default device. It is also possible to return a () but after This means nothing was found. =cut sub get_devices_with_cap { my (@p) = @_; my($cap, $any, @args) = _rearrange(['CAPABILITIES', 'ANY'], @p); return undef if _extra_args(@args); $any = 1 if !defined($any); my $ret = perlcdio::get_devices_with_cap($cap, $any); return wantarray ? @$ret : $ret; } =pod =head2 get_devices_with_cap_ret Like get_devices_with_cap but we return the driver we found as well. This is because often one wants to search for kind of drive and then *open* it afterward. Giving the driver back facilitates this, and speeds things up for libcdio as well. =cut sub get_devices_with_cap_ret { my (@p) = @_; my($cap, $any, @args) = _rearrange(['CAPABILITIES', 'ANY'], @p); return undef if _extra_args(@args); $any = 1 if !defined($any); my $ret = perlcdio::get_devices_with_cap($cap, $any); return wantarray ? @$ret : $ret; } =pod =head2 have_driver have_driver(driver_id) -> bool Return 1 if we have driver driver_id. undef is returned if driver_id is invalid. driver_id can either be an integer driver name defined in perlcdio or a string as defined in the hash %drivers. =cut sub have_driver { my (@p) = @_; my($driver_id) = _rearrange(['DRIVER_ID'], @p); # driver_id can be an integer representing an enum value # or a string of the driver name in the drivers dictionary. return perlcdio::have_driver($driver_id) if $driver_id =~ m/^\d+$/; return perlcdio::have_driver($drivers{$driver_id}) if defined($drivers{$driver_id}); return undef; } =pod =head2 is_binfile is_binfile(binfile)->cue_name Determine if binfile is the BIN file part of a CDRWIN Compact Disc image. Return the corresponding CUE file if bin_name is a BIN file or undef if not a BIN file. =cut sub is_binfile { my (@p) = @_; my($file_name) = _rearrange(['BINFILE'], @p); return perlcdio::is_binfile($file_name); } =pod =head2 is_cuefile is_cuefile(cuefile)->bin_name Determine if cuefile is the CUE file part of a CDRWIN Compact Disc image. Return the corresponding BIN file if cue_name is a CUE file or undef if not a CUE file. =cut sub is_cuefile { my (@p) = @_; my($file_name) = _rearrange(['CUEFILE'], @p); return perlcdio::is_cuefile($file_name); } =pod =head2 is_device is_device(source, driver_id=$perlcdio::DRIVER_UNKNOWN)->bool Return True if source refers to a real hardware CD-ROM. =cut sub is_device { my (@p) = @_; my($source, $driver_id) = _rearrange(['SOURCE', 'DRIVER_ID'], @p); $driver_id=$perlcdio::DRIVER_UNKNOWN if !defined($driver_id); return perlcdio::is_device($source, $driver_id); } =pod =head2 is_nrg is_nrg(nrgfile)->bool Determine if nrgfile is a Nero NRG file disc image. =cut sub is_nrg { my (@p) = @_; my($file_name) = _rearrange(['NRGFILE'], @p); return perlcdio::is_nrg($file_name); } =pod =head2 is_tocfile is_tocfile(tocfile_name)->bool Determine if tocfile_name is a cdrdao CD disc image. =cut sub is_tocfile { my (@p) = @_; my($tocfile) = _rearrange(['TOCFILE'], @p); return perlcdio::is_tocfile($tocfile); } =pod =head2 convert_drive_cap_misc convert_drive_cap_misc(bitmask)->hash_ref Convert bit mask for miscellaneous drive properties into a hash reference of drive capabilities =cut sub convert_drive_cap_misc { my (@p) = @_; my($bitmask) = _rearrange(['BITMASK'], @p); my %result=(); $result{DRIVE_CAP_ERROR} = 1 if $bitmask & $perlcdio::DRIVE_CAP_ERROR; $result{DRIVE_CAP_UNKNOWN} = 1 if $bitmask & $perlcdio::DRIVE_CAP_UNKNOWN; $result{DRIVE_CAP_MISC_CLOSE_TRAY} = 1 if $bitmask & $perlcdio::DRIVE_CAP_MISC_CLOSE_TRAY; $result{DRIVE_CAP_MISC_EJECT} = 1 if $bitmask & $perlcdio::DRIVE_CAP_MISC_EJECT; $result{DRIVE_CAP_MISC_LOCK} = 1 if $bitmask & $perlcdio::DRIVE_CAP_MISC_LOCK; $result{DRIVE_CAP_MISC_SELECT_SPEED} = 1 if $bitmask & $perlcdio::DRIVE_CAP_MISC_SELECT_SPEED; $result{DRIVE_CAP_MISC_SELECT_DISC} = 1 if $bitmask & $perlcdio::DRIVE_CAP_MISC_SELECT_DISC; $result{DRIVE_CAP_MISC_MULTI_SESSION} = 1 if $bitmask & $perlcdio::DRIVE_CAP_MISC_MULTI_SESSION; $result{DRIVE_CAP_MISC_MEDIA_CHANGED} = 1 if $bitmask & $perlcdio::DRIVE_CAP_MISC_MEDIA_CHANGED; $result{DRIVE_CAP_MISC_RESET} = 1 if $bitmask & $perlcdio::DRIVE_CAP_MISC_RESET; $result{DRIVE_CAP_MISC_FILE} = 1 if $bitmask & $perlcdio::DRIVE_CAP_MISC_FILE; my $ref = \%result; return $ref; } =pod =head2 convert_drive_cap_read convert_drive_cap_read($bitmask)->hash_ref Convert bit mask for read drive properties into a hash reference of drive capabilities =cut sub convert_drive_cap_read { my (@p) = @_; my($bitmask) = _rearrange(['BITMASK'], @p); my %result=(); $result{DRIVE_CAP_READ_AUDIO} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_AUDIO; $result{DRIVE_CAP_READ_CD_DA} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_CD_DA; $result{DRIVE_CAP_READ_CD_G} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_CD_G; $result{DRIVE_CAP_READ_CD_R} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_CD_R; $result{DRIVE_CAP_READ_CD_RW} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_CD_RW; $result{DRIVE_CAP_READ_DVD_R} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_DVD_R; $result{DRIVE_CAP_READ_DVD_PR} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_DVD_PR; $result{DRIVE_CAP_READ_DVD_RAM} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_DVD_RAM; $result{DRIVE_CAP_READ_DVD_ROM} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_DVD_ROM; $result{DRIVE_CAP_READ_DVD_RW} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_DVD_RW; $result{DRIVE_CAP_READ_DVD_RPW} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_DVD_RPW; $result{DRIVE_CAP_READ_C2_ERRS} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_C2_ERRS; $result{DRIVE_CAP_READ_MODE2_FORM1} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_MODE2_FORM1; $result{DRIVE_CAP_READ_MODE2_FORM2} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_MODE2_FORM2; $result{DRIVE_CAP_READ_MCN} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_MCN; $result{DRIVE_CAP_READ_ISRC} = 1 if $bitmask & $perlcdio::DRIVE_CAP_READ_ISRC; my $ref = \%result; return $ref; } =pod =head2 convert_drive_cap_write convert_drive_cap_write($bitmask)->hash_ref =cut sub convert_drive_cap_write { my (@p) = @_; my($bitmask) = _rearrange(['BITMASK'], @p); my %result=(); $result{DRIVE_CAP_WRITE_CD_R} = 1 if $bitmask & $perlcdio::DRIVE_CAP_WRITE_CD_R; $result{DRIVE_CAP_WRITE_CD_RW} = 1 if $bitmask & $perlcdio::DRIVE_CAP_WRITE_CD_RW; $result{DRIVE_CAP_WRITE_DVD_R} = 1 if $bitmask & $perlcdio::DRIVE_CAP_WRITE_DVD_R; $result{DRIVE_CAP_WRITE_DVD_PR} = 1 if $bitmask & $perlcdio::DRIVE_CAP_WRITE_DVD_PR; $result{DRIVE_CAP_WRITE_DVD_RAM} = 1 if $bitmask & $perlcdio::DRIVE_CAP_WRITE_DVD_RAM; $result{DRIVE_CAP_WRITE_DVD_RW} = 1 if $bitmask & $perlcdio::DRIVE_CAP_WRITE_DVD_RW; $result{DRIVE_CAP_WRITE_DVD_RPW} = 1 if $bitmask & $perlcdio::DRIVE_CAP_WRITE_DVD_RPW; $result{DRIVE_CAP_WRITE_MT_RAINIER} = 1 if $bitmask & $perlcdio::DRIVE_CAP_WRITE_MT_RAINIER; $result{DRIVE_CAP_WRITE_BURN_PROOF} = 1 if $bitmask & $perlcdio::DRIVE_CAP_WRITE_BURN_PROOF; my $ref = \%result; return $ref; } 1; # Magic true value requred at the end of a module __END__ =pod =head1 SEE ALSO L for device objects and L for track objects and L for working with ISO 9660 filesystems. L is the lower-level interface to libcdio. L is documentation via doxygen for C. =head1 AUTHORS Rocky Bernstein =head1 COPYRIGHT Copyright (C) 2006, 2011 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut Device-Cdio-v2.0.0/lib/Device/Cdio000755001750001750 013222226267 16242 5ustar00rockyrocky000000000000Device-Cdio-v2.0.0/lib/Device/Cdio/Util.pm000444001750001750 1101413222226267 17667 0ustar00rockyrocky000000000000package Device::Cdio::Util; require 5.8.6; # # Copyright (C) 2006, 2008, 2017 Rocky Bernstein # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see L. # These are internal routines. Not all that useful for external consumption. use strict; use vars qw($VERSION @EXPORT_OK @ISA ); require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(_rearrange _make_attributes _check_arg_count _extra_args); $VERSION = $Device::Cdio::VERSION; # Check that we $count (the argument count of arguments passed has # between $min and $max arguments. sub _check_arg_count { my ($count, $min, $max) = @_; my $msg = undef; if (!defined($max)) { if ($count != $min) { $msg = sprintf("Need to supply exactly %d arguments. (got %d)", $min, $count); } } elsif ($count < $min) { $msg = sprintf("Need to supply at least %d arguments. (got %d)", $min, $count); } elsif ($count > $max) { $msg = sprintf("Need to supply no more than %d arguments. (got %d)", $max, $count); } if (defined($msg)) { my (undef, $file, $line, $called)= caller(1); print "$msg.\n\tCalled $called from file $file at line $line\n"; return 0; } return 1; } # Check that we $count (the argument count of arguments passed has # between $min and $max arguments. sub _extra_args { my @args = @_; if (@args != 0) { my (undef, $file, $line, $called)= caller(1); my $arg_count = @args; print "$arg_count extraneous parameter given in call\n"; print "\tCalled $called from file $file at line $line\n"; return 1; } return 0; } # Taken from CGI::Util sub _make_attributes { my $attr = shift; return () unless $attr && ref($attr) && ref($attr) eq 'HASH'; my $escape = shift || 0; my(@att); foreach (keys %{$attr}) { my($key) = $_; $key=~s/^\-//; # get rid of initial - if present # old way: breaks EBCDIC! # $key=~tr/A-Z_/a-z-/; # parameters are lower case, use dashes ($key="\L$key") =~ tr/_/-/; # parameters are lower case, use dashes my $value = $escape ? _simple_escape($attr->{$_}) : $attr->{$_}; push(@att,defined($attr->{$_}) ? qq/$key="$value"/ : qq/$key/); } return @att; } # Taken from CGI::Util # Smart rearrangement of parameters to allow named parameter # calling. We do the rearangement if: # the first parameter begins with a - sub _rearrange { my($order,@param) = @_; return () unless @param; if (ref($param[0]) eq 'HASH') { @param = %{$param[0]}; } else { return @param unless (defined($param[0]) && substr($param[0],0,1) eq '-' && $param[0] !~ m{\A-\d+}); } # map parameters into positional indices my ($i,%pos); $i = 0; foreach (@$order) { foreach (ref($_) eq 'ARRAY' ? @$_ : $_) { $pos{lc($_)} = $i; } $i++; } my (@result,%leftover); $#result = $#$order; # preextend while (@param) { my $key = lc(shift(@param)); $key =~ s/^\-//; if (exists $pos{$key}) { $result[$pos{$key}] = shift(@param); } else { $leftover{$key} = shift(@param); } } push (@result,_make_attributes(\%leftover,defined $CGI::Q ? $CGI::Q->{escape} : 1)) if %leftover; @result; } # Also from CGI::Util.pm sub _simple_escape { return unless defined(my $toencode = shift); $toencode =~ s{&}{&}gso; $toencode =~ s{<}{<}gso; $toencode =~ s{>}{>}gso; $toencode =~ s{\"}{"}gso; # Doesn't work. Can't work. forget it. # $toencode =~ s{\x8b}{‹}gso; # $toencode =~ s{\x9b}{›}gso; $toencode; } 1; # Magic true value required at the end of a module __END__ =head1 NAME Device::Cdio::Util - Internal utilities used by Cdio modules =head1 SYNOPSIS none =head1 DESCRIPTION no public subroutines =head1 AUTHOR INFORMATION Code taken from CGI::Util.pm which reads: Copyright 1995-1998, Lincoln D. Stein. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L =cut Device-Cdio-v2.0.0/lib/Device/Cdio/Track.pm000444001750001750 1736513222226267 20035 0ustar00rockyrocky000000000000package Device::Cdio::Track; require 5.8.6; # # See end for copyright and license. ### CD Input and control track class =pod =head1 NAME Device::Cdio::Track - Class for track aspects of Device::Cdio. =head1 SYNOPSIS use Device::Cdio::Device; use Device::Cdio::Track; $device = Device::Cdio::Device->new(-source=>'/dev/cdrom'); $track = $device->get_last_track(); print "track: %d, last lsn: %d\n", $track->{track}, track->get_last_lsn(); $track = $device->get_first_track(); $format = $rackt->get_format(); =cut use strict; use Exporter; use perlcdio; use perlmmc; use Device::Cdio::Util qw(_rearrange _check_arg_count _extra_args); use Device::Cdio; use Device::Cdio::Device; $Device::Cdio::Device::VERSION = $Device::Cdio::VERSION; =pod =head1 METHODS =cut =pod =head2 new new(device, track)->object Creates a new track object. =cut sub new { my($class,@p) = @_; my($device, $track, @args) = _rearrange(['DEVICE', 'TRACK'], @p); return undef if _extra_args(@args); my $self = {}; if ($track !~ m{\A\d+\Z}) { print "*** Expecting track to be an integer; got '$track'\n"; return undef; } elsif ($track < 0 || $track > 200) { print "*** Track number should be within 0 and 200; got '$track'\n"; return undef; } $self->{track} = $track; # See if the device parameter is a reference (a device object) or # a device name of which we will turn into a device object. if (ref($device)) { $self->{device} = $device; } else { $self->{device} = Device::Cdio::Device->new(-source=>$device); } bless ($self, $class); return $self; } =pod =head2 get_audio_channels get_audio_channels(cdio, track)->int Return number of channels in track: 2 or 4. Not meaningful if track is not an audio track. -1 is returned on error and -2 if the driver doesn't support the operation. =cut sub get_audio_channels { my($self,@p) = @_; return 0 if !_check_arg_count($#_, 0); return perlcdio::get_track_channels($self->{device}, $self->{track}); } =pod =head2 get_copy_permit get_copy_permit(cdio, track)->int Return copy protection status on a track. Is this meaningful not an audio track? =cut sub get_copy_permit { my ($self, @p) = @_; return 0 if !_check_arg_count($#_, 0); return perlcdio::get_track_copy_permit($self->{device}, $self->{track}); } sub get_cdtext { my($self, @p) = @_; return perlcdio::get_cdtext($self->{cd},$self->{track}); } =pod =head2 get_format get_format()->$format Get the format (e.g. 'audio', 'mode2', 'mode1') of track. =cut sub get_format { my ($self, @p) = @_; return 0 if !_check_arg_count($#_, 0); return perlcdio::get_track_format($self->{device}, $self->{track}); } =pod =head2 get_last_lsn get_last_lsn()->lsn Return the ending LSN for a track C<$perlcdio::INVALID_LSN> is returned on error. =cut sub get_last_lsn { my ($self, @p) = @_; return 0 if !_check_arg_count($#_, 0); return perlcdio::get_track_last_lsn($self->{device}, $self->{track}); } =pod =head2 get_lba get_lba()->lba Return the starting LBA for a track C<$perlcdio::INVALID_LBA> is returned on error. =cut sub get_lba { my ($self, @p) = @_; return 0 if !_check_arg_count($#_, 0); return perlcdio::get_track_lba($self->{device}, $self->{track}); } =pod =head2 get_lsn get_lsn()->lsn Return the starting LSN for a track C<$perlcdio::INVALID_LSN> is returned on error. =cut sub get_lsn { my ($self, @p) = @_; return 0 if !_check_arg_count($#_, 0); return perlcdio::get_track_lsn($self->{device}, $self->{track}); } =pod =head2 get_msf get_msf() Return the starting MSF (minutes/secs/frames) for track number track. Track numbers usually start at something greater than 0, usually 1. Returns string of the form mm:ss:ff if all good, or string 'error' on error. =cut sub get_msf { my ($self, @p) = @_; return 0 if !_check_arg_count($#_, 0); return perlcdio::get_track_msf($self->{device}, $self->{track}); } =pod =head2 get_preemphasis get_preemphasis()->result Get linear preemphasis status on an audio track. This is not meaningful if not an audio track? =cut sub get_preemphasis { my ($self, @p) = @_; return 0 if !_check_arg_count($#_, 0); my $rc = perlcdio::get_track_preemphasis($self->{device}, $self->{track}); if ($rc == $perlcdio::CDIO_TRACK_FLAG_FALSE) { return 'no pre-emphasis'; } elsif ($rc == $perlcdio::CDIO_TRACK_FLAG_TRUE) { return 'pre-emphasis'; } elsif ($rc == $perlcdio::CDIO_TRACK_FLAG_UNKNOWN) { return 'unknown'; } else { return 'invalid'; } } =pod =head2 get_track_sec_count item get_track_sec_count()->int Get the number of sectors between this track an the next. This includes any pregap sectors before the start of the next track. Track numbers usually start at something greater than 0, usually 1. C<$perlcdio::INVALID_LSN> is returned on error. =cut sub get_track_sec_count { my ($self, @p) = @_; return 0 if !_check_arg_count($#_, 0); return perlcdio::get_track_sec_count($self->{device}, $self->{track}); } =pod =head2 is_track_green is_track_green(cdio, track) -> bool Return True if we have XA data (green, mode2 form1) or XA data (green, mode2 form2). That is track begins: sync - header - subheader 12 4 - 8 =cut sub is_track_green { my ($self, @p) = @_; return 0 if !_check_arg_count($#_, 0); return perlcdio::is_track_green($self->{device}, $self->{track}); } =pod =head2 get_track_isrc $isrc = $track->get_track_isrc($insert_dashes=0); Returns an empty string or the International Standard Recording Code. Which is presented in 4 hyphen-separated substrings: "CC-XXX-YY-NNNNN" "CC" two-character ISO 3166-1 alpha-2 country code "XXX" is a three character alphanumeric registrant code "YY" is the last two digits of the year of registration (NB not necessarily the date the recording was made) "NNNNN" is a unique 5-digit number identifying the particular sound recording. =cut sub get_track_isrc { my ($self, @p) = @_; my $insert_dashes = defined $p[0] && $p[0]; my $isrc = perlcdioc::cdio_get_track_isrc($self->{device}, $self->{track}); if(!$isrc) { $isrc = perlmmcc::mmc_get_isrc($self->{device}, $self->{track}); } if ($isrc && $insert_dashes) { $isrc =~ s/(\w\w)(\w\w\w)(\w\w)(\w+)/$1-$2-$3-$4/; #"CC-XXX-YY-NNNNN" } return $isrc; } =pod =head2 set_track set_track(track_num) Set a new track number. =cut sub set_track { my($self,@p) = @_; my($track_num, @args) = _rearrange(['TRACK'], @p); return undef if _extra_args(@args); $self->{track} = $track_num; return $self; } 1; # Magic true value required at the end of a module __END__ =pod =head1 SEE ALSO L is the top-level module, L is a class device objects, and L for working with ISO9660 systems. L is the lower-level interface to libcdio. L is documentation via doxygen of C. =head1 AUTHORS Rocky Bernstein =head1 COPYRIGHT Copyright (C) 2006, 2012, 2017 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut Device-Cdio-v2.0.0/lib/Device/Cdio/ISO9660.pm000444001750001750 2613713222226267 17745 0ustar00rockyrocky000000000000package Device::Cdio::ISO9660; require 5.10.1; # # See end for copyright and license. =pod =head1 NAME Device::Cdio::ISO9660 - Module for ISO 9660 handling =head1 SYNOPSIS This encapsulates IS9660 filesystem handling. This library however needs to be used in conjunction with L, L and L. use Device::Cdio::ISO9660; $name = Device::Cdio::ISO9660::name_translate('COPYING.;1'); $bool = Device::Cdio::ISO9660::is_achar('A'); =head1 DESCRIPTION This is an Object-Oriented Perl interface to the GNU CD Input and Control library's ISO 9660 library, C. Encapsulation is done in two parts. The lower-level Perl interface is called L and is generated by SWIG. The more object-oriented package Device::Cdio::ISO9660 and uses C. Actually, there are no objects in Device::Cdio::ISO9660, but there are in its sub packages L, L (and in the future Device::Cdio::ISO9660::PVD). Although C is perfectly usable on its own, it is expected that these module and classes are what most people will use. As perliso9660 more closely models the C interface, it is conceivable (if unlikely) that die-hard C C users who are very familiar with that interface could prefer that. =head2 CALLING ROUTINES Routines accept named parameters as well as positional parameters. For named parameters, each argument name is preceded by a dash. For example: Device::Cdio::ISO9660::is_achar(-achar=>'M') Each argument name is preceded by a dash. Neither case nor order matters in the argument list. -achar, -AChar, and -ACHAR are all acceptable. In fact, only the first argument needs to begin with a dash. If a dash is present in the first argument, we assume dashes for the subsequent parameters. In the documentation below and elsewhere in this package the parameter name that can be used in this style of call is given in the parameter list. For example, for C the documentation below reads: name_translate(name, joliet_level=0) -> $str So the parameter names are "name" and "joliet_level". Only the "name" parameter is required. If "joliet_level" is not specified, a value of 0 will be used. The return value is a string. The older, more traditional style of positional parameters is also supported which is shown in the synopsis above. Finally, since no parameter name can be confused with a an integer, negative values will not get confused as a named parameter. =cut $Device::Cdio::ISO9660::VERSION = $Device::Cdio::VERSION; use warnings; use strict; use perliso9660; use Carp; use vars qw($VERSION $revision @EXPORT_OK @EXPORT @ISA %drivers); use Device::Cdio::Util qw( _check_arg_count _extra_args _rearrange ); @ISA = qw(Exporter); @EXPORT = qw( dirname_valid_p is_achar is_dchar pathame_valid_p name_translate strncpy_pad %check &stat_array_to_href); %Device::Cdio::ISO9660::check = ( 'nocheck' => $perliso9660::NOCHECK, '7bit' => $perliso9660::SEVEN_BIT, 'achars' => $perliso9660::ACHARS, 'dchars' => $perliso9660::DCHARS ); # Note: the keys below match those the names returned by # cdio_get_driver_name() =pod =head1 SUBROUTINES =head2 dirname_valid_p dirname_valid_p(path)->bool Check that path is a valid ISO-9660 directory name. A valid directory name should not start out with a slash (/), dot (.) or null byte, should be less than 37 characters long, have no more than 8 characters in a directory component which is separated by a /, and consist of only DCHARs. True is returned if path is valid. =cut sub dirname_valid_p { my (@p) = @_; my($path, @args) = _rearrange(['PATH'], @p); return 0 if _extra_args(@args); return perliso9660::dirname_valid($path); } =pod =head2 is_achar is_dchar(achar)->bool Return 1 if $achar is an ACHAR. $achar should either be a string of length one or the ord() of a string of length 1. These are the DCHAR's plus some ASCII symbols including the space symbol. =cut sub is_achar { my (@p) = @_; my($achar, @args) = _rearrange(['ACHAR'], @p); return 0 if _extra_args(@args); return 0 if !defined($achar); if ($achar !~ m{\A\d+\Z}) { # Not integer. Should be a string of length one then. # We'll turn it into an integer. return 0 if length($achar) != 1; $achar = ord($achar); } else { # Is an integer. Is it too large? return 0 if $achar > 255; } return perlis9660::is_achar($achar); } =pod =head2 is_dchar is_dchar(dchar)->bool Return 1 if $dchar is a DCHAR - a character that can appear in an an ISO-9600 level 1 directory name. These are the ASCII capital letters A-Z, the digits 0-9 and an underscore. $dchar should either be a string of length one or the ord() of a string of length 1. =cut sub is_dchar { my (@p) = @_; my($dchar, @args) = _rearrange(['DCHAR'], @p); return 0 if _extra_args(@args); if ($dchar !~ m{\A\d+\Z}) { # Not integer. Should be a string of length one then. # We'll turn it into an integer. return 0 if length($dchar) != 1; $dchar = ord($dchar); } else { # Is an integer. Is it too large? return 0 if $dchar > 255; } return perliso9660::is_dchar($dchar); } =pod =head2 pathname_valid_p pathname_valid_p(path)->bool Check that path is a valid ISO-9660 pathname. A valid pathname contains a valid directory name, if one appears and the filename portion should be no more than 8 characters for the file prefix and 3 characters in the extension (or portion after a dot). There should be exactly one dot somewhere in the filename portion and the filename should be composed of only DCHARs. 1 is returned if path is valid. =cut sub pathname_valid_p { my (@p) = @_; my($path, @args) = _rearrange(['PATH'], @p); return 0 if _extra_args(@args); return perliso9660::pathame_valid($path); } =pod =head2 name_translate name_translate(name, joliet_level=0)->$str Convert an ISO-9660 file name of the kind that is that stored in a ISO 9660 directory entry into what's usually listed as the file name in a listing. Lowercase name if no Joliet Extension interpretation. Remove trailing ;1's or .;1's and turn the other ;'s into version numbers. If joliet_level is not given it is 0 which means use no Joliet Extensions. Otherwise use the specified the Joliet level. The translated string is returned and it will be larger than the input filename. =cut sub name_translate { my(@p) = @_; my($filename, $joliet_level) = _rearrange(['FILENAME', 'JOLIET_LEVEL'], @p); $joliet_level = 0 if !defined($joliet_level); if (!defined($filename)) { print "*** An ISO-9660 file name entry must be given\n"; return undef; } return perliso9660::name_translate_ext($filename, $joliet_level); } =pod =head2 stat_array_to_href stat_array_to_href(values)->href Convert a ISO 9660 array to an hash reference of the values. Used internally in convert from C code. Note, we modify the input parameter. A hash reference which contains: =over 4 =item LSN the Logical sector number (an integer) =item size the total size of the file in bytes =item sec_size the number of sectors allocated =item filename the file name of the statbuf entry =item XA if the file has XA attributes; 0 if not =item is_dir 1 if a directory; '' if a not. =item tm A POSIX time structure as often return in unis C or C. However we adjust the year to be "normal", e.g. we use 2017 instead of 117 and months start at 1 (for January), not 0. Fields in C are: sec # Seconds (0-60) min # Minutes (0-59) hour # Hours (0-23) mday # Day of the month (1-31) mon # Month (1-12) year # Year, e.g. 2017 wday # Day of the week (0-6, Sunday = 0) yday # Day in the year (0-365, 1 Jan = 0) */ isdst # Daylight saving time */ =back =cut sub stat_array_to_href { my $href = {}; $href->{filename} = shift @_; $href->{LSN} = shift @_; $href->{size} = shift @_; $href->{sec_size} = shift @_; $href->{is_dir} = shift @_; my $tm = {}; $tm->{sec} = shift @_; $tm->{min} = shift @_; $tm->{hour} = shift @_; $tm->{mday} = shift @_; $tm->{mon} = (shift @_) + 1; $tm->{year} = (shift @_) + 1900; $tm->{wday} = shift @_; $tm->{yday} = shift @_; $tm->{isdst} = shift @_; $href->{tm} = $tm; # A string comparison is more robust than a numeric comparison. # and some Perl interpreters seem to get a string 2 back from SWIG. $href->{is_dir} = $href->{is_dir} eq '2'; return $href; } =pod =head2 strncpy_pad strncpy_pad(name, len, check='nocheck')->str Pad string I with spaces to size len and return this. If len is less than the length of I, the return value will be truncated to the first I characters of I. I can also be scanned to see if it contains only ACHARs, DCHARs, or 7-bit ASCII chars, and this is specified via the I parameter. If the I parameter is given it must be one of the 'nocheck', '7bit', 'achars' or 'dchars'. Case is not significant. =cut sub strncpy_pad { my (@p) = @_; my($name, $len, $check_key, @args) = _rearrange(['NAME', 'LEN', 'CHECK'], @p); return 0 if _extra_args(@args); if (!defined($name)) { print "*** A NAME parameter is expected\n"; return undef; } if (!defined($len)) { print "*** A LEN parameter is expected\n"; return undef; } $check_key = 'nocheck' if !defined($check_key); $check_key = lc($check_key); if (not exists $Device::Cdio::ISO9660::check{$check_key}) { printf "*** A CHECK parameter must be one of %s\n", join(', ', keys %Device::Cdio::ISO9660::check); return undef; } return perliso9660::strncpy_pad($name, $len, $Device::Cdio::ISO9660::check{$check_key}); } 1; # Magic true value requred at the end of a module __END__ =pod =head1 SEE ALSO L is the ISO 96600 filesystem image interface. L is the ISO 96600 CD-image interface. L has general information on the CD Input and Control Library. L is for device objects and L is for track objects. L is the lower-level interface to libcdio. L has documentation on libcdio including the a manual and the API via doxygen. =head1 AUTHORS Rocky Bernstein =head1 COPYRIGHT Copyright (C) 2006, 2011, 2017 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut Device-Cdio-v2.0.0/lib/Device/Cdio/Device.pm000444001750001750 10166313222226267 20203 0ustar00rockyrocky000000000000package Device::Cdio::Device; require 5.8.6; # # See end for copyright and license. =pod =head1 NAME Device::Cdio::Device - Class for disc and device aspects of Cdio. =head1 SYNOPSIS use Device::Cdio::Device; $d = Device::Cdio::Device->new(-driver_id=>$perlcdio::DRIVER_DEVICE); $drive_name = $d->get_device(); ($i_read_cap, $i_write_cap, $i_misc_cap) = $d->get_drive_cap(); $start_lsn = $d->get_first_track()->get_lsn(); $end_lsn=$d->get_disc_last_lsn(); $drc = $d->audio_play_lsn($start_lsn, $end_lsn); ($vendor, $model, $release, $drc) = $d->get_hwinfo(); =cut use warnings; use strict; use Exporter; use perlcdio; use Device::Cdio::Util qw( _check_arg_count _extra_args _rearrange ); use Device::Cdio qw(convert_drive_cap_read convert_drive_cap_write convert_drive_cap_misc ); use Device::Cdio::Track; $Device::Cdio::Device::VERSION = $Device::Cdio::VERSION; @Device::Cdio::Device::EXPORT = qw( new ); @Device::Cdio::Device::EXPORT_OK = qw( close open ); %Device::Cdio::CDTEXT_FIELD = ( 'TITLE' => $perlcdio::CDTEXT_FIELD_TITLE, 'PERFORMER' => $perlcdio::CDTEXT_FIELD_PERFORMER, 'SONGWRITER' => $perlcdio::CDTEXT_FIELD_SONGWRITER, 'COMPOSER' => $perlcdio::CDTEXT_FIELD_COMPOSER, 'MESSAGE' => $perlcdio::CDTEXT_FIELD_MESSAGE, 'ARRANGER' => $perlcdio::CDTEXT_FIELD_ARRANGER, 'ISRC' => $perlcdio::CDTEXT_FIELD_ISRC, 'UPC_EAN' => $perlcdio::CDTEXT_FIELD_UPC_EAN, 'GENRE' => $perlcdio::CDTEXT_FIELD_GENRE, 'DISCID' => $perlcdio::CDTEXT_FIELD_DISCID, 'INVALID' => $perlcdio::CDTEXT_FIELD_INVALID, ); $Device::Cdio::CDTEXT_MIN_CDTEXT_FIELD = $perlcdio::MIN_CDTEXT_FIELD; $Device::Cdio::CDTEXT_MAX_CDTEXT_FIELDS = $perlcdio::MAX_CDTEXT_FIELDS; %Device::Cdio::CDTEXT_FIELD_by_id = reverse %Device::Cdio::CDTEXT_FIELD; %Device::Cdio::CDTEXT_GENRE = ( 'UNUSED' => $perlcdio::CDTEXT_GENRE_UNUSED, 'UNDEFINED' => $perlcdio::CDTEXT_GENRE_UNDEFINED, 'ADULT_CONTEMP' => $perlcdio::CDTEXT_GENRE_ADULT_CONTEMP, 'ALT_ROCK' => $perlcdio::CDTEXT_GENRE_ALT_ROCK, 'CHILDRENS' => $perlcdio::CDTEXT_GENRE_CHILDRENS, 'CLASSIC' => $perlcdio::CDTEXT_GENRE_CLASSIC, 'CHRIST_CONTEMP' => $perlcdio::CDTEXT_GENRE_CHRIST_CONTEMP, 'COUNTRY' => $perlcdio::CDTEXT_GENRE_COUNTRY, 'DANCE' => $perlcdio::CDTEXT_GENRE_DANCE, 'EASY_LISTENING' => $perlcdio::CDTEXT_GENRE_EASY_LISTENING, 'EROTIC' => $perlcdio::CDTEXT_GENRE_EROTIC, 'FOLK' => $perlcdio::CDTEXT_GENRE_FOLK, 'GOSPEL' => $perlcdio::CDTEXT_GENRE_GOSPEL, 'HIPHOP' => $perlcdio::CDTEXT_GENRE_HIPHOP, 'JAZZ' => $perlcdio::CDTEXT_GENRE_JAZZ, 'LATIN' => $perlcdio::CDTEXT_GENRE_LATIN, 'MUSICAL' => $perlcdio::CDTEXT_GENRE_MUSICAL, 'NEWAGE' => $perlcdio::CDTEXT_GENRE_NEWAGE, 'OPERA' => $perlcdio::CDTEXT_GENRE_OPERA, 'OPERETTA' => $perlcdio::CDTEXT_GENRE_OPERETTA, 'POP' => $perlcdio::CDTEXT_GENRE_POP, 'RAP' => $perlcdio::CDTEXT_GENRE_RAP, 'REGGAE' => $perlcdio::CDTEXT_GENRE_REGGAE, 'ROCK' => $perlcdio::CDTEXT_GENRE_ROCK, 'RYTHMANDBLUES' => $perlcdio::CDTEXT_GENRE_RYTHMANDBLUES, 'SOUNDEFFECTS' => $perlcdio::CDTEXT_GENRE_SOUNDEFFECTS, 'SOUNDTRACK' => $perlcdio::CDTEXT_GENRE_SOUNDTRACK, 'SPOKEN_WORD' => $perlcdio::CDTEXT_GENRE_SPOKEN_WORD, 'WORLD_MUSIC' => $perlcdio::CDTEXT_GENRE_WORLD_MUSIC, ); %Device::Cdio::CDTEXT_GENRE_by_id = reverse %Device::Cdio::CDTEXT_GENRE; %Device::Cdio::CDTEXT_LANGUAGE = ( 'UNKNOWN' => $perlcdio::CDTEXT_LANGUAGE_UNKNOWN, 'ALBANIAN' => $perlcdio::CDTEXT_LANGUAGE_ALBANIAN, 'BRETON' => $perlcdio::CDTEXT_LANGUAGE_BRETON, 'CATALAN' => $perlcdio::CDTEXT_LANGUAGE_CATALAN, 'CROATIAN' => $perlcdio::CDTEXT_LANGUAGE_CROATIAN, 'WELSH' => $perlcdio::CDTEXT_LANGUAGE_WELSH, 'CZECH' => $perlcdio::CDTEXT_LANGUAGE_CZECH, 'DANISH' => $perlcdio::CDTEXT_LANGUAGE_DANISH, 'GERMAN' => $perlcdio::CDTEXT_LANGUAGE_GERMAN, 'ENGLISH' => $perlcdio::CDTEXT_LANGUAGE_ENGLISH, 'SPANISH' => $perlcdio::CDTEXT_LANGUAGE_SPANISH, 'ESPERANTO' => $perlcdio::CDTEXT_LANGUAGE_ESPERANTO, 'ESTONIAN' => $perlcdio::CDTEXT_LANGUAGE_ESTONIAN, 'BASQUE' => $perlcdio::CDTEXT_LANGUAGE_BASQUE, 'FAROESE' => $perlcdio::CDTEXT_LANGUAGE_FAROESE, 'FRENCH' => $perlcdio::CDTEXT_LANGUAGE_FRENCH, 'FRISIAN' => $perlcdio::CDTEXT_LANGUAGE_FRISIAN, 'IRISH' => $perlcdio::CDTEXT_LANGUAGE_IRISH, 'GAELIC' => $perlcdio::CDTEXT_LANGUAGE_GAELIC, 'GALICIAN' => $perlcdio::CDTEXT_LANGUAGE_GALICIAN, 'ICELANDIC' => $perlcdio::CDTEXT_LANGUAGE_ICELANDIC, 'ITALIAN' => $perlcdio::CDTEXT_LANGUAGE_ITALIAN, 'LAPPISH' => $perlcdio::CDTEXT_LANGUAGE_LAPPISH, 'LATIN' => $perlcdio::CDTEXT_LANGUAGE_LATIN, 'LATVIAN' => $perlcdio::CDTEXT_LANGUAGE_LATVIAN, 'LUXEMBOURGIAN' => $perlcdio::CDTEXT_LANGUAGE_LITHUANIAN, 'HUNGARIAN' => $perlcdio::CDTEXT_LANGUAGE_HUNGARIAN, 'MALTESE' => $perlcdio::CDTEXT_LANGUAGE_MALTESE, 'DUTCH' => $perlcdio::CDTEXT_LANGUAGE_DUTCH, 'NORWEGIAN' => $perlcdio::CDTEXT_LANGUAGE_NORWEGIAN, 'OCCITAN' => $perlcdio::CDTEXT_LANGUAGE_OCCITAN, 'POLISH' => $perlcdio::CDTEXT_LANGUAGE_POLISH, 'PORTUGUESE' => $perlcdio::CDTEXT_LANGUAGE_PORTUGUESE, 'ROMANIAN' => $perlcdio::CDTEXT_LANGUAGE_ROMANIAN, 'ROMANSH' => $perlcdio::CDTEXT_LANGUAGE_ROMANSH, 'SERBIAN' => $perlcdio::CDTEXT_LANGUAGE_SERBIAN, 'SLOVAK' => $perlcdio::CDTEXT_LANGUAGE_SLOVAK, 'SLOVENIAN' => $perlcdio::CDTEXT_LANGUAGE_SLOVENIAN, 'FINNISH' => $perlcdio::CDTEXT_LANGUAGE_FINNISH, 'SWEDISH' => $perlcdio::CDTEXT_LANGUAGE_SWEDISH, 'TURKISH' => $perlcdio::CDTEXT_LANGUAGE_TURKISH, 'FLEMISH' => $perlcdio::CDTEXT_LANGUAGE_FLEMISH, 'WALLON' => $perlcdio::CDTEXT_LANGUAGE_WALLON, 'ZULU' => $perlcdio::CDTEXT_LANGUAGE_ZULU, 'VIETNAMESE' => $perlcdio::CDTEXT_LANGUAGE_VIETNAMESE, 'UZBEK' => $perlcdio::CDTEXT_LANGUAGE_UZBEK, 'URDU' => $perlcdio::CDTEXT_LANGUAGE_URDU, 'UKRAINIAN' => $perlcdio::CDTEXT_LANGUAGE_UKRAINIAN, 'THAI' => $perlcdio::CDTEXT_LANGUAGE_THAI, 'TELUGU' => $perlcdio::CDTEXT_LANGUAGE_TELUGU, 'TATAR' => $perlcdio::CDTEXT_LANGUAGE_TATAR, 'TAMIL' => $perlcdio::CDTEXT_LANGUAGE_TAMIL, 'TADZHIK' => $perlcdio::CDTEXT_LANGUAGE_TADZHIK, 'SWAHILI' => $perlcdio::CDTEXT_LANGUAGE_SWAHILI, 'SRANANTONGO' => $perlcdio::CDTEXT_LANGUAGE_SRANANTONGO, 'SOMALI' => $perlcdio::CDTEXT_LANGUAGE_SOMALI, 'SINHALESE' => $perlcdio::CDTEXT_LANGUAGE_SINHALESE, 'SHONA' => $perlcdio::CDTEXT_LANGUAGE_SHONA, 'SERBO_CROAT' => $perlcdio::CDTEXT_LANGUAGE_SERBO_CROAT, 'RUTHENIAN' => $perlcdio::CDTEXT_LANGUAGE_RUTHENIAN, 'RUSSIAN' => $perlcdio::CDTEXT_LANGUAGE_RUSSIAN, 'QUECHUA' => $perlcdio::CDTEXT_LANGUAGE_QUECHUA, 'PUSHTU' => $perlcdio::CDTEXT_LANGUAGE_PUSHTU, 'PUNJABI' => $perlcdio::CDTEXT_LANGUAGE_PUNJABI, 'PERSIAN' => $perlcdio::CDTEXT_LANGUAGE_PERSIAN, 'PAPAMIENTO' => $perlcdio::CDTEXT_LANGUAGE_PAPAMIENTO, 'ORIYA' => $perlcdio::CDTEXT_LANGUAGE_ORIYA, 'NEPALI' => $perlcdio::CDTEXT_LANGUAGE_NEPALI, 'NDEBELE' => $perlcdio::CDTEXT_LANGUAGE_NDEBELE, 'MARATHI' => $perlcdio::CDTEXT_LANGUAGE_MARATHI, 'MOLDAVIAN' => $perlcdio::CDTEXT_LANGUAGE_MOLDAVIAN, 'MALAYSIAN' => $perlcdio::CDTEXT_LANGUAGE_MALAYSIAN, 'MALAGASAY' => $perlcdio::CDTEXT_LANGUAGE_MALAGASAY, 'MACEDONIAN' => $perlcdio::CDTEXT_LANGUAGE_MACEDONIAN, 'LAOTIAN' => $perlcdio::CDTEXT_LANGUAGE_LAOTIAN, 'KOREAN' => $perlcdio::CDTEXT_LANGUAGE_KOREAN, 'KHMER' => $perlcdio::CDTEXT_LANGUAGE_KHMER, 'KAZAKH' => $perlcdio::CDTEXT_LANGUAGE_KAZAKH, 'KANNADA' => $perlcdio::CDTEXT_LANGUAGE_KANNADA, 'JAPANESE' => $perlcdio::CDTEXT_LANGUAGE_JAPANESE, 'INDONESIAN' => $perlcdio::CDTEXT_LANGUAGE_INDONESIAN, 'HINDI' => $perlcdio::CDTEXT_LANGUAGE_HINDI, 'HEBREW' => $perlcdio::CDTEXT_LANGUAGE_HEBREW, 'HAUSA' => $perlcdio::CDTEXT_LANGUAGE_HAUSA, 'GURANI' => $perlcdio::CDTEXT_LANGUAGE_GURANI, 'GUJURATI' => $perlcdio::CDTEXT_LANGUAGE_GUJURATI, 'GREEK' => $perlcdio::CDTEXT_LANGUAGE_GREEK, 'GEORGIAN' => $perlcdio::CDTEXT_LANGUAGE_GEORGIAN, 'FULANI' => $perlcdio::CDTEXT_LANGUAGE_FULANI, 'DARI' => $perlcdio::CDTEXT_LANGUAGE_DARI, 'CHURASH' => $perlcdio::CDTEXT_LANGUAGE_CHURASH, 'CHINESE' => $perlcdio::CDTEXT_LANGUAGE_CHINESE, 'BURMESE' => $perlcdio::CDTEXT_LANGUAGE_BURMESE, 'BULGARIAN' => $perlcdio::CDTEXT_LANGUAGE_BULGARIAN, 'BENGALI' => $perlcdio::CDTEXT_LANGUAGE_BENGALI, 'BIELORUSSIAN' => $perlcdio::CDTEXT_LANGUAGE_BAMBORA, 'AZERBAIJANI' => $perlcdio::CDTEXT_LANGUAGE_AZERBAIJANI, 'ASSAMESE' => $perlcdio::CDTEXT_LANGUAGE_ASSAMESE, 'ARMENIAN' => $perlcdio::CDTEXT_LANGUAGE_ARMENIAN, 'ARABIC' => $perlcdio::CDTEXT_LANGUAGE_ARABIC, 'AMHARIC' => $perlcdio::CDTEXT_LANGUAGE_AMHARIC, ); %Device::Cdio::CDTEXT_LANGUAGE_by_id = reverse %Device::Cdio::CDTEXT_LANGUAGE; =pod =head1 METHODS =cut =pod =head2 new new(source, driver_id, access_mode)->$device_object Create a new Device object. Either parameter C, C or C can be C. In fact it is probably best to not to give an C unless you know what you are doing. =cut sub new { my($class,@p) = @_; my($source, $driver_id, $access_mode, @args) = _rearrange(['SOURCE', 'DRIVER_ID', 'ACCESS_MODE'], @p); return undef if _extra_args(@args); my $self = {}; $self->{cd} = undef; bless ($self, $class); $self->open($source, $driver_id, $access_mode) if defined($source) || defined($driver_id); return $self; } =pod =head2 audio_pause audio_pause()-> $status Pause playing CD through analog output. The device status is returned. =cut sub audio_pause { my($self,@p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 0); return perlcdio::audio_pause($self->{cd}); } =pod =head2 audio_play_lsn audio_play_lsn(start_lsn, end_lsn)-> $status Playing CD through analog output at the given lsn to the ending lsn The device status is returned. =cut sub audio_play_lsn { my($self,@p) = @_; my($start_lsn, $end_lsn, @args) = _rearrange(['START_LSN', 'END_LSN'], @p); return $perlcdio::BAD_PARAMETER if _extra_args(@args); return perlcdio::audio_play_lsn($self->{cd}, $start_lsn, $end_lsn); } =pod =head2 audio_resume audio_resume()-> $status Resume playing an audio CD through the analog interface. The device status is returned. =cut sub audio_resume { my($self,@p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 0); return perlcdio::audio_resume($self->{cd}); } =pod =head2 audio_stop audio_stop()-> $status Stop playing an audio CD through the analog interface. The device status is returned. =cut sub audio_stop { my($self,@p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 0); return perlcdio::audio_stop($self->{cd}); } =pod =head2 close close()->bool Free resources associated with cdio. Call this when done using using CD reading/control operations for the current device. =cut sub close { my($self,@p) = @_; return 0 if !_check_arg_count($#_, 0); if (defined($self->{cd})) { perlcdio::close($self->{cd}); } else { print "***No object to close\n"; $self->{cd} = undef; return 0; } return 1; } =pod =head2 eject_media eject_media()->drc Eject media in CD drive if there is a routine to do so. status is returned. =cut sub eject_media { my($self,@p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 0); my $drc = perlcdio::eject_media($self->{cd}); $self->{cd} = undef; return $drc; } =pod =head2 get_arg get_arg(key)->string =cut sub get_arg { my($self,@p) = @_; my($key, @args) = _rearrange(['KEY'], @p); return undef if _extra_args(@args); return perlcdio::get_arg($self->{cd}, $key); } =pod =head2 get_device get_device()->str Get the default CD device. If the CD object has an opened CD, return the name of the device used. (In fact this is the same thing as issuing Cget_arg("source")>). If we haven't initialized a specific device driver, then find a suitable one and return the default device for that. In some situations of drivers or OS's we can't find a CD device if there is no media in it and it is possible for this routine to return undef even though there may be a hardware CD-ROM. =cut sub get_device { my($self,@p) = @_; return undef if !_check_arg_count($#_, 0); return perlcdio::get_arg($self->{cd}, "source") if ($self->{cd}); return perlcdio::get_device($self->{cd}); } =pod =head2 get_disc_last_lsn get_disc_last_lsn(self)->int Get the LSN of the end of the CD. C<$perlcdio::INVALID_LSN> is returned if there was an error. =cut sub get_disc_last_lsn { my($self,@p) = @_; return undef if !_check_arg_count($#_, 0); return perlcdio::get_disc_last_lsn($self->{cd}); } =pod =head2 get_disc_mode get_disc_mode() -> str Get disc mode - the kind of CD: CD-DA, CD-ROM mode 1, CD-MIXED, etc. that we've got. The notion of 'CD' is extended a little to include DVD's. =cut sub get_disc_mode { my($self,@p) = @_; return perlcdio::get_disc_mode($self->{cd}); } =pod =head2 get_drive_cap get_drive_cap()->(read_cap, write_cap, misc_cap) Get drive capabilities of device. In some situations of drivers or OS's we can't find a CD device if there is no media in it. In this situation capabilities will show up as empty even though there is a hardware CD-ROM. =cut sub get_drive_cap { my($self,@p) = @_; return (undef, undef, undef) if !_check_arg_count($#_, 0); my ($b_read_cap, $b_write_cap, $b_misc_cap) = perlcdio::get_drive_cap($self->{cd}); return (convert_drive_cap_read($b_read_cap), convert_drive_cap_write($b_write_cap), convert_drive_cap_misc($b_misc_cap)); } =pod =head2 get_drive_cap_dev get_drive_cap_dev(device=undef)->(read_cap, write_cap, misc_cap) Get drive capabilities of device. In some situations of drivers or OS's we can't find a CD device if there is no media in it. In this situation capabilities will show up as empty even though there is a hardware CD-ROM. =cut ### FIXME: combine into above by testing on the type of device. sub get_drive_cap_dev { my($self,@p) = @_; my($device, @args) = _rearrange(['DEVICE'], @p); return (undef, undef, undef) if _extra_args(@args); my ($b_read_cap, $b_write_cap, $b_misc_cap) = perlcdio::get_drive_cap_dev($device); return (convert_drive_cap_read($b_read_cap), convert_drive_cap_write($b_write_cap), convert_drive_cap_misc($b_misc_cap)); } =pod =head2 get_driver_name get_driver_name()-> string return a string containing the name of the driver in use. C is returned if there's an error. =cut sub get_driver_name { my($self,@p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 0); return perlcdio::get_driver_name($self->{cd}); } =pod =head2 get_driver_id get_driver_id()-> int =cut sub get_driver_id { my($self, @p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 0); return perlcdio::get_driver_id($self->{cd}); } =pod =head2 get_first_track get_first_track()->Track return a Track object of the first track. C<$perlcdio::INVALID_TRACK> or C<$perlcdio::BAD_PARAMETER> is returned if there was a problem. Return the driver id of the driver in use. if object has not been initialized or is None, return C<$perlcdio::DRIVER_UNKNOWN>. =cut sub get_first_track { my($self, @p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 0); return Device::Cdio::Track->new(-device=>$self->{cd}, -track=>perlcdio::get_first_track_num($self->{cd})); } =pod =head2 get_hwinfo get_hwinfo()->(vendor, model, release, drc) Get the CD-ROM hardware info via a SCSI MMC INQUIRY command. An exception is raised if we had an error. =cut sub get_hwinfo { my($self,@p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 0); my ($hwinfo, $drc) = perlcdio::get_hwinfo($self->{cd}); return (@$hwinfo, $drc); } =pod =head2 audio_get_volume my($arr, $rc) = $dev->audio_get_volume; Returns the volume settings of device's 4 channels and the device return code. In scalar environmet only the device return code! See C for return-values meanings when C<$rc != 0>. =cut sub audio_get_volume { my($self,@p) = @_; my ($vol,$drc) = perlcdio::audio_get_volume_levels($self->{cd}); return wantarray ? ($vol,$drc) : $drc; } =pod =head2 audio_play_track_index $drc = $dev->audio_play_track_index($start_track, $start_index, $end_track, $end_track); Playing CD through analog output at the desired start track and index, to the end track and index. Tracks should be in the valid CD track range 0..99. Just as a track number is burned into the CD, so is a an index for a track. See C for return-values meanings when C<$drc != 0>. =cut sub audio_play_track_index { my($self, $start_track, $start_index, $end_track, $end_index) = @_; return perlcdio::audio_play_track_index($self->{cd}, $start_track, $start_index, $end_track, $end_index); } =head2 audio_set_volume $drc = $dev->audio_set_volume($channel1_volume, $channel2_volume, $channel3_volume, $channel4_volume); Set the volume levels of the channels 1-4. Values from 0-255 are possible. Stereo CDROM devices (which is most of them) use only channels 1 and 2. Use -1 when the existing value should be kept. See C for return-values meanings when C<$drc != 0>. =cut sub audio_set_volume { my($self,@p) = @_; my ($vol, $drc) = perlcdio::audio_get_volume_levels($self->{cd}); for(my $i =0;$i<4;$i++) { if(defined $p[$i]) { @$vol[$i] = $p[$i] if $p[$i] > -1; @$vol[$i] = 255 if $p[$i] > 255; } } return perlcdio::audio_set_volume_levels($self->{cd}, @$vol[0], @$vol[1], @$vol[2], @$vol[3]); } =pod =head2 get_disk_cdtext, get_track_cdtext $hash = $dev->get_disk_cdtext; $hash = $dev->get_cdtext_for_track(track, field); $hash = $dev->get_cdtext_field_for_track(track, field); $hash = $dev->get_cdtext_field_for_track(track, field); Returns a hash reference hash->{cdtext_field}="text" if found any cdtext on disk; =cut sub cdtext_init { my($self,@p) = @_; $self->{cdtext} = perlcdio::cdio_get_cdtext($self->{cd}); return $self->{cdtext}; } sub cdtext_data_init { my($cdt, $cdt_data, $cdt_size, @p) = @_; return perlcdio::cdtext_data_init($cdt, $cdt_data, $cdt_size); } =head2 get_disk_cdtext_field_for_track $str = $dev->get_cdtext_field_for_track($field, $track=0, $cdtext=$self->{cdtext}); Returns the text associated with field $field of track $track of $cdtext if there is any. =cut sub cdtext_field_for_track { my($self,$f, $t, @p) = @_; $t = 0 if !defined $t; my $cdtext = defined $p[0] ? $p[0] : $self->{cdtext}; return perlcdio::cdtext_get_const($cdtext, $f, $t); } sub cdtext_field_for_disc { my($self,$f, @p) = @_; my $cdtext = defined $p[0] ? $p[0] : $self->{cdtext}; return perlcdio::cdtext_get_const($cdtext, $f, 0); } sub cdtext_list_languages { my($self, @p) = @_; my $cdtext = defined $p[0] ? $p[0] : $self->{cdtext}; if (!$cdtext) { $cdtext = $self->cdtext_init(); } return perlcdio::cdtext_list_languages($cdtext); } sub cdtext_select_language { my($self, $lang, @p) = @_; my $cdtext = defined $p[0] ? $p[0] : $self->{cdtext}; return if !exists $Device::Cdio::CDTEXT_LANGUAGE{$lang}; my $l = $Device::Cdio::CDTEXT_LANGUAGE{$lang}; if (!$cdtext) { $cdtext = $self->cdtext_init(); } return perlcdio::cdtext_select_language($cdtext, $l); } sub get_track_cdtext { my($self, $t, @p) = @_; $t = 0 if !defined $t; my $cdtext_fields = {}; my $cdtext = defined $p[0] ? $p[0] : $self->{cdtext}; for (my $field=$perlcdio::MIN_CDTEXT_FIELD; $field <= $perlcdio::MAX_CDTEXT_FIELDS; $field++) { $cdtext_fields->{$field} = perlcdio::cdtext_get_const($cdtext, $field, $t); } return $cdtext_fields; } sub get_disc_cdtext { my($self, @p) = @_; return get_track_cdtext($self, 0, @p); } =head2 cdtext_destroy $dev->cdtext_destroy() Removes CD-TEXT memor resources associated a disc and sets $dev->{cdtext} to undef. Use this when you are done accessing with CD-TEXT information. Note: $def->close() runs this as part of its operation. =cut sub cdtext_destroy { my($self, @p) = @_; my $cdtext = defined $p[0] ? $p[0] : $self->{cdtext}; perlcdio::cdtext_destory($cdtext); $self->{cdtext} = undef; } =pod =head2 get_cddb_discid $discid = $dev->get_cddb_discid; Returns the calculated cddb discid integer. Usually used as hexstring! =cut sub get_cddb_discid { my($self,@p) = @_; return perlcdio::get_cddb_discid($self->{cd}); } =pod =head2 audio_get_status my($hash, $drc) = $dev->audio_get_status; Returns a hash reference with the audio-subchannel-mmc status values: audio_status : value status_text : audio_status as text (INVALID,ERROR,NO_STATUS,UNKNOWN,playing,paused,completed) track : track number index : index in track msf time values as ints minutes, seconds,frames : abs_m,abs_s,abs_f : total disc time played rel_m,rel_s,el_f : track time played disk_s : seconds disk played track_s : seconds track played address control =cut sub audio_get_status { my($self,@p) = @_; my ($ptr, $drc) = perlcdio::audio_get_status($self->{cd}); return $ptr, $drc; } =pod =head2 is_tray_open $dev->is_tray_open returns true if tray seems open, 0 otherwise. =cut sub is_tray_open { my($self,@p) = @_; return perlcdio::get_tray_status($self->{cd}); } =pod =head2 get_joliet_level get_joliet_level()->int Return the Joliet level recognized for cdio. This only makes sense for something that has an ISO-9660 filesystem. =cut sub get_joliet_level { my($self,@p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 0); return perlcdio::get_joliet_level($self->{cd}); } =pod =head2 get_last_session get_last_session(self) -> (track_lsn, drc) Get the LSN of the first track of the last session of on the CD. =cut sub get_last_session { my($self,@p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 0); return perlcdio::get_last_session($self->{cd}); } =pod =head2 get_last_track get_last_track()->Track return a Track object of the last track. C<$perlcdio::INVALID_TRACK> or C<$perlcdio::BAD_PARAMETER> is returned if there was a problem. =cut sub get_last_track { my($self, @p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 0); return Device::Cdio::Track->new(-device=>$self->{cd}, -track=>perlcdio::get_last_track_num($self->{cd})); } =pod =head2 get_mcn get_mcn()->str Get the media catalog number (MCN) from the CD. =cut sub get_mcn { my($self,@p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 0); return perlcdio::get_mcn($self->{cd}); } =pod =head2 get_media_changed get_media_changed() -> int Find out if media has changed since the last call. Return 1 if media has changed since last call, 0 if not. A negative number indicates the driver status error. =cut sub get_media_changed { my($self,@p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 0); return perlcdio::get_media_changed($self->{cd}); } =pod =head2 guess_cd_type $hash = $dev->guess_cd_type($lsn,$track); Try to determine what kind of CD-image and/or filesystem we have at track $track. First argument is the start lsn of track $track. Returns a hash reference with following keys: cdio_fs_t (enum cdio_fs_t from libcdio) FIXME: add text cdio_fs_cap_t (enum cdio_fs_cap_t from libcdio) FIXME: add text joliet_level If has Joliet extensions, this is the associated level number (i.e. 1, 2, or 3). iso_label 32 byte ISO fs label. isofs_size size of ISO fs. UDFVerMajor UDF fs version. UDFVerMinor UDF fs version. =cut sub guess_cd_type { my($self, $session, $track, @p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 2); return perlcdio::guess_cd_type($self->{cd}, $session, $track); } =pod =head2 get_num_tracks get_num_tracks()->int Return the number of tracks on the CD. C<$perlcdio::INVALID_TRACK> is raised on error. =cut sub get_num_tracks { my($self,@p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 0); return perlcdio::get_num_tracks($self->{cd}); } =pod =head2 get_track get_track(track_num)->track Set a new track object of the current disc for the given track number. =cut sub get_track { my($self,@p) = @_; my($track_num, @args) = _rearrange(['TRACK'], @p); return undef if _extra_args(@args); return Device::Cdio::Track->new(-device=>$self->{cd}, -track=>$track_num); } =pod =head2 get_track_for_lsn get_track_for_lsn(LSN)->Track Find the track which contains LSN. undef is returned if the lsn outside of the CD or if there was some error. If the LSN is before the pregap of the first track, A track object with a 0 track is returned. Otherwise we return the track that spans the lsn. =cut sub get_track_for_lsn { my($self,@p) = @_; my($lsn_num, @args) = _rearrange(['LSN'], @p); return undef if _extra_args(@args); my $track = perlcdio::get_last_track_num($self->{cd}); return undef if ($track == $perlcdio::INVALID_TRACK); return Device::Cdio::Track->new(-device=>$self->{cd}, -track=>$track); } =pod =head2 have_ATAPI have_ATAPI()->bool return 1 if CD-ROM understand ATAPI commands. =cut sub have_ATAPI { my($self,@p) = @_; return $perlcdio::BAD_PARAMETER if !_check_arg_count($#_, 0); return perlcdio::have_ATAPI($self->{cd}); } =pod =head2 lseek lseek(offset, whence)->int Reposition read offset. Similar to (if not the same as) libc's fseek() offset is the amount to seek and whence is like corresponding parameter in libc's lseek, e.g. it should be SEEK_SET or SEEK_END. the offset is returned or -1 on error. =cut sub lseek { my($self,@p) = @_; my($offset, $whence, @args) = _rearrange(['OFFSET', 'WHENCE'], @p); return -1 if _extra_args(@args); return perlcdio::lseek($self->{cd}, $offset, $whence); } =pod =head2 open open(source=undef, driver_id=$libcdio::DRIVER_UNKNOWN, access_mode=undef)->$cdio_obj Sets up to read from place specified by source, driver_id and access mode. This should be called before using any other routine except those that act on a CD-ROM drive by name. It is implicitly called when a new is done specifying a source or driver id. If C is given as the source, we'll use the default driver device. If C is given as the driver_id, we'll find a suitable device driver. Device is opened so that subsequent operations can be performed. =cut sub open { my($self,@p) = @_; my($source, $driver_id, $access_mode) = _rearrange(['SOURCE', 'DRIVER_ID', 'ACCESS_MODE'], @p); $driver_id = $perlcdio::DRIVER_UNKNOWN if !defined($driver_id); $self->close() if defined($self->{cd}); $self->{cd} = perlcdio::open_cd($source, $driver_id, $access_mode); $self->{cdtext} = undef; } =pod =head2 read read(size)->(size, data) Reads the next size bytes. Similar to (if not the same as) libc's read() The number of bytes read and the data is returned. =cut sub read { my($self,@p) = @_; my($size) = _rearrange(['SIZE'], @p); (my $data, $size) = perlcdio::read_cd($self->{cd}, $size); return wantarray ? ($data, $size) : $data; } =pod =head2 read_data_blocks read_data_blocks(lsn, blocks=1)->($data, $size, $drc) Reads a number of data sectors (AKA blocks). lsn is sector to read, blocks is the number of bytes. The size of the data will be a multiple of C<$perlcdio::ISO_BLOCKSIZE>. The number of data, size of the data, and the return code status is returned in an array context. In a scalar context just the data is returned. C is returned as the data on error. =cut sub read_data_blocks { my($self,@p) = @_; my($lsn, $read_mode, $blocks) = _rearrange(['LSN', 'BLOCKS'], @p); $blocks = 1 if !defined($blocks); my $size = $perlcdio::ISO_BLOCKSIZE * $blocks; (my $data, $size, my $drc) = perlcdio::read_data_bytes($self->{cd}, $lsn, $perlcdio::ISO_BLOCKSIZE, $size); if ($perlcdio::DRIVER_OP_SUCCESS == $drc) { return wantarray ? ($data, $size, $drc) : $data; } else { return wantarray ? (undef, undef, $drc) : undef; } } =pod =head2 read_sectors read_sectors($lsn, $read_mode, $blocks=1)->($data, $size, $drc) read_sectors($lsn, $read_mode, $blocks=1)->$data Reads a number of sectors (AKA blocks). lsn is sector to read, bytes is the number of bytes. If read_mode is C<$perlcdio::MODE_AUDIO>, the return data size will be a multiple of C<$perlcdio::CDIO_FRAMESIZE_RAW> i_blocks bytes. If read_mode is C<$perlcdio::MODE_DATA>, data will be a multiple of C<$perlcdio::ISO_BLOCKSIZE>, C<$perlcdio::M1RAW_SECTOR_SIZE> or C<$perlcdio::M2F2_SECTOR_SIZE> bytes depending on what mode the data is in. If read_mode is C<$perlcdio::MODE_M2F1>, data will be a multiple of C<$perlcdio::M2RAW_SECTOR_SIZE> bytes. If read_mode is C<$perlcdio::MODE_M2F2>, the return data size will be a multiple of C<$perlcdio::CD_FRAMESIZE> bytes. The number of data, size of the data, and the return code status is returned in an array context. In a scalar context just the data is returned. undef is returned as the data on error. =cut sub read_sectors { my($self,@p) = @_; my($lsn, $read_mode, $blocks) = _rearrange(['LSN', 'READ_MODE', 'BLOCKS'], @p); $blocks = 1 if !defined($blocks); my $size; my $blocksize = $Device::Cdio::read_mode2blocksize{$read_mode}; if (defined($blocksize)) { $size = $blocks * $blocksize; } else { printf "Bad read mode %s\n", $read_mode; return undef; } (my $data, $size, my $drc) = perlcdio::read_sectors($self->{cd}, $lsn, $read_mode, $size); if ($perlcdio::DRIVER_OP_SUCCESS == $drc) { $blocks = $size / $blocksize; return wantarray ? ($data, $size, $drc) : $data; } else { return wantarray ? (undef, undef, $drc) : undef; } } =pod =head2 set_blocksize set_blocksize(blocksize) -> $status Set the blocksize for subsequent reads. The operation status code is returned. =cut sub set_blocksize { my($self,@p) = @_; my($blocksize, @args) = _rearrange(['BLOCKSIZE'], @p); return $perlcdio::BAD_PARAMETER if _extra_args(@args); return perlcdio::set_blocksize($self->{cd}, $blocksize); } =pod =head2 set_speed set_speed(speed)->drc The operation status code is returned. =cut sub set_speed { my($self,@p) = @_; my($speed, @args) = _rearrange(['SPEED'], @p); return $perlcdio::BAD_PARAMETER if _extra_args(@args); return perlcdio::set_speed($self->{cd}, $speed); } =pod =head2 read_pvd $pvd = $dev->read_pvd; Reads and returns the ISO-9660 Primary Volume Descriptor (PVD) from the disk. You can use perliso9660::get_pvd_type($pvd) ... methods to get the values. =cut sub read_pvd { my($self,@p) = @_; return perlcdio::cdio_read_pvd($self->{cd}); } 1; # Magic true value required at the end of a module __END__ 1; # Magic true value required at the end of a module __END__ =pod =head1 SEE ALSO L for the top-level module, L for track objects, and L for working with ISO9660 filesystems. L is the lower-level interface to libcdio. L has documentation on libcdio including the a manual and the API via doxygen. =head1 AUTHORS Rocky Bernstein =head1 COPYRIGHT Copyright (C) 2006, 2008, 2017 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut Device-Cdio-v2.0.0/lib/Device/Cdio/ISO9660000755001750001750 013222226267 17221 5ustar00rockyrocky000000000000Device-Cdio-v2.0.0/lib/Device/Cdio/ISO9660/FS.pm000444001750001750 2004313222226267 20243 0ustar00rockyrocky000000000000package Device::Cdio::ISO9660::FS; use Device::Cdio::ISO9660; require 5.8.6; # # See end for copyright and license. =pod =head1 NAME Device::Cdio::ISO9660::FS - Class for ISO 9660 CD reading =head1 SYNOPSIS This encapsulates ISO 9660 Filesystem aspects of CD Tracks. As such this is a This library however needs to be used in conjunction with Device::Cdio::ISO9660. use Device::Cdio::ISO9660:FS; $cd = Device::Cdio::ISO9660::FS->new(-source=>'/dev/cdrom'); $statbuf = $cd->stat ($iso9660_path.$local_filename); $blocks = POSIX::ceil($statbuf->{size} / $perlcdio::ISO_BLOCKSIZE); for (my $i = 0; $i < $blocks; $i++) { my $buf = $cd->read_data_blocks ($statbuf->{LSN} + $i); die if !defined($buf); } print $buf; =head1 DESCRIPTION This is an Object-Oriented interface to the GNU CD Input and Control library (C) which is written in C. This class handles ISO 9660 tracks on a CD or in a CD-ROM. Note that working with a CD in a CD-ROM which has tracks in the ISO-9660 format is distinct working with a I in a filesystem which contains an ISO-9660 image. See also L for working with an ISO 9660 image stored as a file in a filesystem. =head2 CALLING ROUTINES Routines accept named parameters as well as positional parameters. For named parameters, each argument name is preceded by a dash. For example: Device::Cdio::ISO9660::FS->new(-source=>'MYISO.CUE') Each argument name is preceded by a dash. Neither case nor order matters in the argument list. -driver_id, -Driver_ID, and -DRIVER_ID are all acceptable. In fact, only the first argument needs to begin with a dash. If a dash is present in the first argument, we assume dashes for the subsequent parameters. In the documentation below and elsewhere in this package the parameter name that can be used in this style of call is given in the parameter list. For example, for "close_tray" the documentation below reads: close_tray(drive=undef, driver_id=$perlcdio::DRIVER_UNKNOWN) -> ($drc, $driver_id) So the parameter names are "drive", and "driver_id". Neither parameter is required. If "drive" is not specified, a value of "undef" will be used. And if "driver_id" is not specified, a value of $perlcdio::DRIVER_UNKNOWN is used. The older, more traditional style of positional parameters is also supported. So the "new" example from above can also be written: Device::Cdio::ISO9660::FS->new('MYISO.CUE') Finally, since no parameter name can be confused with a an integer, negative values will not get confused as a named parameter. =cut $revision = '$Id$'; $Device::Cdio::ISO9660::FS::VERSION = $Device::Cdio::VERSION; use warnings; use strict; use Exporter; use perliso9660; use Carp; use vars qw($VERSION $revision @EXPORT_OK @EXPORT @ISA %drivers); use Device::Cdio::Util qw( _check_arg_count _extra_args _rearrange ); @ISA = qw(Exporter Device::Cdio::Device); @EXPORT_OK = qw( close open ); =pod =head2 find_lsn find_lsn(lsn)->$stat_href Find the filesystem entry that contains LSN and return information about it. Undef is returned on error. =cut sub find_lsn { my($self,@p) = @_; my($lsn, @args) = _rearrange(['LSN'], @p); return undef if _extra_args(@args); if (!defined($lsn)) { print "*** An LSN parameter must be given\n"; return undef; } my @values = perliso9660::fs_find_lsn($self->{cd}, $lsn); # Remove the two input parameters splice(@values, 0, 2) if @values > 2; return Device::Cdio::ISO9660::stat_array_to_href(@values); } =pod =head2 readdir readdir(dirname)->@iso_stat Read path (a directory) and return a list of iso9660 stat references Each item of @iso_stat is a hash reference which contains =over 4 =item LSN the Logical sector number (an integer) =item size the total size of the file in bytes =item sec_size the number of sectors allocated =item filename the file name of the statbuf entry =item XA if the file has XA attributes; 0 if not =item is_dir 1 if a directory; 0 if a not; =back FIXME: If you look at iso9660.h you'll see more fields, such as for Rock-Ridge specific fields or XA specific fields. Eventually these will be added. Volunteers? =cut sub readdir { my($self,@p) = @_; my($dirname, @args) = _rearrange(['DIRNAME'], @p); return undef if _extra_args(@args); if (!defined($dirname)) { print "*** A directory name must be given\n"; return undef; } my @values = perliso9660::fs_readdir($self->{cd}, $dirname); # Remove the two input parameters splice(@values, 0, 2) if @values > 2; my @result = (); while (@values) { push @result, Device::Cdio::ISO9660::stat_array_to_href(@values); splice(@values, 0, 14); } return @result; } =pod =head2 read_pvd read_pvd()->pvd Read the Super block of an ISO 9660 image. This is the Primary Volume Descriptor (PVD) and perhaps a Supplemental Volume Descriptor if (Joliet) extensions are acceptable. =cut sub read_pvd { my($self,@p) = @_; return 0 if !_check_arg_count($#_, 0); # FIXME call new on PVD object return perliso9660::fs_read_pvd($self->{cd}); } =pod =head2 read_superblock read_superblock(iso_mask=$libiso9660::EXTENSION_NONE)->bool Read the Super block of an ISO 9660 image. This is the rimary Volume Descriptor (PVD) and perhaps a Supplemental Volume Descriptor if (Joliet) extensions are acceptable. =cut sub read_superblock { my($self,@p) = @_; my($iso_mask) = _rearrange(['ISO_MASK'], @p); $iso_mask = $perliso9660::EXTENSION_NONE if !defined($iso_mask); return perliso9660::fs_read_superblock($self->{cd}, $iso_mask); } =pod =head2 stat stat(path, translate=0)->\%stat Return file status for path name psz_path. NULL is returned on error. If translate is 1, version numbers in the ISO 9660 name are dropped, i.e. ;1 is removed and if level 1 ISO-9660 names are lowercased. Each item of @iso_stat is a hash reference which contains =over 4 =item LSN the Logical sector number (an integer) =item size the total size of the file in bytes =item sec_size the number of sectors allocated =item filename the file name of the statbuf entry =item XA if the file has XA attributes; 0 if not =item is_dir 1 if a directory; 0 if a not; =back =cut sub stat { my($self, @p) = @_; my($path, $translate, @args) = _rearrange(['PATH', 'TRANSLATE'], @p); return undef if _extra_args(@args); $translate = 0 if !defined($translate); if (!defined($path)) { print "*** An CD-ROM or CD-image must be given\n"; return undef; } my @values; if ($translate) { @values = perliso9660::fs_stat_translate($self->{cd}, $path); } else { @values = perliso9660::fs_stat($self->{cd}, $path); } # Remove the input parameters splice(@values, 0, 2) if @values > 2; return undef if !@values; return Device::Cdio::ISO9660::stat_array_to_href(@values); } 1; # Magic true value requred at the end of a module __END__ =pod =head1 SEE ALSO This is a subclass of Device::Cdio::Device. See also L. See L for working with ISO 9660 images. L is the lower-level interface to C, the ISO 9660 library of C. L is documentation via doxygen of C. doxygen. =head1 AUTHORS Rocky Bernstein =head1 COPYRIGHT Copyright (C) 2006, 2007, 2008, 2017 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut Device-Cdio-v2.0.0/lib/Device/Cdio/ISO9660/IFS.pm000444001750001750 3522613222226267 20365 0ustar00rockyrocky000000000000package Device::Cdio::ISO9660::IFS; use Device::Cdio::ISO9660; require 5.8.6; # # See end for copyright and license. =pod =head1 NAME Device::Cdio::ISO9660::IFS - Class for ISO 9660 Filesystem image reading =head1 SYNOPSIS This encapsulates ISO 9660 Filesystem Image handling. The class is often used in conjunction with Device::Cdio::ISO9660. use Device::Cdio::ISO9660; use Device::Cdio::ISO9660::IFS; $iso = Device::Cdio::ISO9660::IFS->new(-source=>'copying.iso'); my $id = $iso->get_application_id(); $id = $iso->get_preparer_id(); $id = $iso->get_publisher_id(); $id = $iso->get_system_id(); $id = $iso->get_volume_id(); $id = $iso->get_volumeset_id(); my $path = '/'; @file_stats = $iso->readdir($path); foreach my $href (@file_stats) { printf "%s [LSN %6d] %8d %s %s%s\n", $href->{is_dir} ? "d" : "-", $href->{LSN}, $href->{size}, $href->{tm}->{year}, $path, Device::Cdio::ISO9660::name_translate($href->{filename}); } =head1 DESCRIPTION This is an Object-Oriented interface to the GNU CD Input and Control library (C) which is written in C. This class handles ISO 9660 aspects of an ISO 9600 image. An ISO-9660 image is distinct from a CD in a CD-ROM which has ISO-9660 tracks; the latter contains other CD-like information (e.g. tracks, information or associated with the CD). An ISO-9660 filesystem image on the other hand doesn't and is generally file in some file system, sometimes with the file extension ".iso"; perhaps it can be burned into a CD with a suitable tool, perhaps is can be "mounted" as a filesystem on some OS's. =head2 CALLING ROUTINES Routines accept named parameters as well as positional parameters. For named parameters, each argument name is preceded by a dash. For example: Device::Cdio::ISO9660::IFS->new(-source=>'MYISO.ISO') Each argument name is preceded by a dash. Neither case nor order matters in the argument list. -driver_id, -Driver_ID, and -DRIVER_ID are all acceptable. In fact, only the first argument needs to begin with a dash. If a dash is present in the first argument, we assume dashes for the subsequent parameters. In the documentation below and elsewhere in this package the parameter name that can be used in this style of call is given in the parameter list. For example, for "open" the documentation below reads: open(source, iso_mask=$pyiso9660::EXTENSION_NONE)->bool So the parameters are "source", and "is_mask". The iso_mask parameter is not required and if not specified a value of $perliso9660:EXTENSION_NON will be used. The older, more traditional style of positional parameters is also supported. So the "have_driver example from above can also be written: Cdio::open($s, $i) Finally, since no parameter name can be confused with an integer, negative values will not get confused as a named parameter. =cut $revision = '$Id$'; $Device::Cdio::ISO9660::IFS::VERSION = $Device::Cdio::VERSION; use warnings; use strict; use Exporter; use perliso9660; use perlcdio; use Carp; use vars qw($VERSION $revision @EXPORT_OK @EXPORT @ISA %drivers); use Device::Cdio::Util qw( _check_arg_count _extra_args _rearrange ); @ISA = qw(Exporter); @EXPORT = qw( new ); @EXPORT_OK = qw( close open ); # Note: the keys below match those the names returned by # cdio_get_driver_name() =pod =head1 METHODS =head2 new new(source, iso_mask)->$iso9660_object Create a new ISO 9660 object. Source or iso_mask is optional. If source is given, open() is called using that and the optional iso_mask parameter; iso_mask is used only if source is specified. If source is given but opening fails, undef is returned. If source is not given, an object is always returned. =cut sub new { my($class,@p) = @_; my($source, $iso_mask, @args) = _rearrange(['SOURCE', 'ISO_MASK'], @p); return undef if _extra_args(@args); $iso_mask = $perliso9660::EXTENSION_NONE if !defined($iso_mask); my $self = {}; $self->{iso9660} = undef; bless ($self, $class); if (defined($source)) { return undef if !$self->open($source, $iso_mask); } return $self; } =pod =head2 close close()->bool Close previously opened ISO 9660 image and free resources associated with ISO9660. Call this when done using using an ISO 9660 image. =cut sub close { my($self,@p) = @_; return 0 if !_check_arg_count($#_, 0); if (defined($self->{iso9660})) { return perliso9660::close($self->{iso9660}); } else { print "***No object to close\n"; $self->{iso9660} = undef; return 0; } } =pod =head2 find_lsn find_lsn(lsn)->$stat_href Find the filesystem entry that contains LSN and return file stat information about it. C is returned on error. =cut sub find_lsn { my($self,@p) = @_; my($lsn, @args) = _rearrange(['LSN'], @p); return undef if _extra_args(@args); if (!defined($lsn)) { print "*** An LSN paramater must be given\n"; return undef; } if ($perlcdio::VERSION_NUM <= 76) { print "*** Routine available only in libcdio versions >= 0.76\n"; return undef; } my @values = perliso9660::ifs_find_lsn($self->{iso9660}, $lsn); # Remove the two input parameters splice(@values, 0, 2) if @values > 2; return Device::Cdio::ISO9660::stat_array_to_href(@values); } =pod =head2 get_application_id get_application_id()->$id Get the application ID stored in the Primary Volume Descriptor. undef is returned if there is some problem. =cut sub get_application_id { my($self,@p) = @_; return undef if !_check_arg_count($#_, 0); return perliso9660::ifs_get_application_id($self->{iso9660}); } =pod =head2 get_preparer_id get_preparer_id()->$id Get the preparer ID stored in the Primary Volume Descriptor. undef is returned if there is some problem. =cut sub get_preparer_id { my($self,@p) = @_; return undef if !_check_arg_count($#_, 0); return perliso9660::ifs_get_preparer_id($self->{iso9660}); } =pod =head2 get_publisher_id get_publisher_id()->$id Get the publisher ID stored in the Primary Volume Descriptor. undef is returned if there is some problem. =cut sub get_publisher_id { my($self,@p) = @_; return undef if !_check_arg_count($#_, 0); return perliso9660::ifs_get_publisher_id($self->{iso9660}); } =pod =head2 get_root_lsn get_root_lsn()->$lsn Get the Root LSN stored in the Primary Volume Descriptor. undef is returned if there is some problem. =cut sub get_root_lsn { my($self,@p) = @_; return undef if !_check_arg_count($#_, 0); return perliso9660::ifs_get_root_lsn($self->{iso9660}); } =pod =head2 get_system_id get_system_id()->$id Get the Volume ID stored in the Primary Volume Descriptor. undef is returned if there is some problem. =cut sub get_system_id { my($self,@p) = @_; return undef if !_check_arg_count($#_, 0); return perliso9660::ifs_get_system_id($self->{iso9660}); } =pod =head2 get_volume_id get_volume_id()->$id Get the Volume ID stored in the Primary Volume Descriptor. undef is returned if there is some problem. =cut sub get_volume_id { my($self,@p) = @_; return undef if !_check_arg_count($#_, 0); return perliso9660::ifs_get_volume_id($self->{iso9660}); } =pod =head2 get_volumeset_id get_volume_id()->$id Get the Volume ID stored in the Primary Volume Descriptor. undef is returned if there is some problem. =cut sub get_volumeset_id { my($self,@p) = @_; return undef if !_check_arg_count($#_, 0); return perliso9660::ifs_get_volumeset_id($self->{iso9660}); } =pod =head2 open open(source, iso_mask=$perliso9660::EXTENSION_NONE)->bool Open an ISO 9660 image for reading. Subsequent operations will read from this ISO 9660 image. This should be called before using any other routine except possibly new. It is implicitly called when a new is done specifying a source. If device object was previously opened it is closed first. See also open_fuzzy. =cut sub open { my($self,@p) = @_; my($source, $iso_mask) = _rearrange(['SOURCE', 'ISO_MASK'], @p); $self->close() if defined($self->{iso9660}); $iso_mask = $perliso9660::EXTENSION_NONE if !defined($iso_mask); if (!defined($source)) { print "*** An ISO-9660 file image must be given\n"; return 0; } $self->{iso9660} = perliso9660::open_ext($source, $iso_mask); return defined($self->{iso9660}); } =pod =head2 open_fuzzy open_fuzzy(source, iso_mask=$perliso9660::EXTENSION_NONE, fuzz=20)->bool Open an ISO 9660 image for reading. Subsequent operations will read from this ISO 9660 image. Some tolerence allowed for positioning the ISO9660 image. We scan for $perliso9660::STANDARD_ID and use that to set the eventual offset to adjust by (as long as that is <= $fuzz). This should be called before using any other routine except possibly new (which must be called first. It is implicitly called when a new is done specifying a source. See also open. =cut sub open_fuzzy { my($self,@p) = @_; my($source, $iso_mask, $fuzz) = _rearrange(['SOURCE', 'ISO_MASK', 'FUZZ'], @p); $self->close() if defined($self->{iso9660}); $iso_mask = $perliso9660::EXTENSION_NONE if !defined($iso_mask); if (!defined($fuzz)) { $fuzz = 20; } elsif ($fuzz !~ m{\A\d+\Z}) { print "*** Expecting fuzz to be an integer; got '$fuzz'\n"; return 0; } $self->{iso9660} = perliso9660::open_fuzzy_ext($source, $iso_mask, $fuzz); return defined($self->{iso9660}); } =pod =head2 read_fuzzy_superblock read_fuzzy_superblock(iso_mask=$perliso9660::EXTENSION_NONE, fuzz=20)->bool Read the Super block of an ISO 9660 image but determine framesize and datastart and a possible additional offset. Generally here we are not reading an ISO 9660 image but a CD-Image which contains an ISO 9660 filesystem. =cut sub read_fuzzy_superblock { my($self,@p) = @_; my($iso_mask, $fuzz) = _rearrange(['ISO_MASK', 'FUZZ'], @p); $iso_mask = $perliso9660::EXTENSION_NONE if !defined($iso_mask); if (!defined($fuzz)) { $fuzz = 20; } elsif ($fuzz !~ m{\A\d+\Z}) { print "*** Expecting fuzz to be an integer; got '$fuzz'\n"; return 0; } return perliso9660::ifs_fuzzy_read_superblock($self->{iso9660}, $iso_mask, $fuzz); } =pod =head2 readdir readdir(dirname)->@iso_stat Read path (a directory) and return a list of iso9660 stat references See L for description of each hash refererence in C<@stat> that is returned. If you look at iso9660.h you'll see more fields, such as for Rock-Ridge specific fields or XA specific fields. Volunteers? =cut sub readdir { my($self,@p) = @_; my($dirname, @args) = _rearrange(['DIRNAME'], @p); return undef if _extra_args(@args); if (!defined($dirname)) { print "*** A directory name must be given\n"; return undef; } my @values = perliso9660::ifs_readdir($self->{iso9660}, $dirname); # Remove the two input parameters splice(@values, 0, 2) if @values > 2; my @result = (); while (@values) { push @result, Device::Cdio::ISO9660::stat_array_to_href(@values); splice(@values, 0, 14); } return @result; } =pod =head2 read_pvd read_pvd()->pvd Read the Super block of an ISO 9660 image. This is the Primary Volume Descriptor (PVD) and perhaps a Supplemental Volume Descriptor if (Joliet) extensions are acceptable. =cut sub read_pvd { my($self,@p) = @_; return 0 if !_check_arg_count($#_, 0); # FIXME call new on PVD object return perliso9660::ifs_read_pvd($self->{iso9660}); } =pod =head2 read_superblock read_superblock(iso_mask=$perliso9660::EXTENSION_NONE)->bool Read the Super block of an ISO 9660 image. This is the Primary Volume Descriptor (PVD) and perhaps a Supplemental Volume Descriptor if (Joliet) extensions are acceptable. =cut sub read_superblock { my($self,@p) = @_; my($iso_mask) = _rearrange(['ISO_MASK'], @p); $iso_mask = $perliso9660::EXTENSION_NONE if !defined($iso_mask); return perliso9660::ifs_read_superblock($self->{iso9660}, $iso_mask); } =pod =head2 seek_read seek_read(start, size=1)->(size, str) Seek to a position and then read n bytes. Size read is returned. =cut sub seek_read { my($self,@p) = @_; my($start, $size, @args) = _rearrange(['START', 'SIZE'], @p); return undef if _extra_args(@args); $size = 1 if !defined($size); (my $data, $size) = perliso9660::seek_read($self->{iso9660}, $start, $size); return wantarray ? ($data, $size) : $data; } =pod =head2 stat stat(path, translate=0)->\%stat Return file status for path name psz_path. C is returned on error. If translate is 1, version numbers in the ISO 9660 name are dropped, i.e. ;1 is removed and if level 1 ISO-9660 names are lowercased. See L for description of C<\%stat> hash reference that is returned. =cut sub stat { my($self, @p) = @_; my($path, $translate, @args) = _rearrange(['PATH', 'TRANSLATE'], @p); return undef if _extra_args(@args); $translate = 0 if !defined($translate); if (!defined($path)) { print "*** An ISO-9660 file path must be given\n"; return undef; } my @values; if ($translate) { @values = perliso9660::ifs_stat_translate($self->{iso9660}, $path); } else { @values = perliso9660::ifs_stat($self->{iso9660}, $path); } # Remove the input parameters splice(@values, 0, 2) if @values > 2; return undef if !@values; return Device::Cdio::ISO9660::stat_array_to_href(@values); } 1; # Magic true value requred at the end of a module __END__ =pod =head1 SEE ALSO See also L for module information, L and L for device objects and L for track objects. L is the lower-level interface to C, the ISO 9660 library of L. L is documentation via doxygen of C. doxygen. =head1 AUTHORS Rocky Bernstein C<< >>. =head1 COPYRIGHT Copyright (C) 2006, 2007, 2008, 2017 Rocky Bernstein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut