Date: Sun, 20 Jan 2002 21:05:47 -0500 From: Alan Eldridge <alane@geeksrus.net> To: Miguel Mendez <flynn@energyhq.homeip.net> Cc: ports@FreeBSD.ORG Subject: Re: Port in progress... Message-ID: <20020121020547.GA81588@wwweasel.geeksrus.net> In-Reply-To: <20020120201209.E12D23FC1F@energyhq.homeip.net> References: <20020120201209.E12D23FC1F@energyhq.homeip.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Jan 20, 2002 at 09:11:50PM +0100, Miguel Mendez wrote: >Hi porters, > >I'm currently working on the port of disc-cover >(http://www.liacs.nl/~jvhemert/disc-cover/) , which happens to depend on >FreeDB.pm which I've alreayd ported, well, almost. This perl module has some OK, here's the correct files/patch-FreeDB.pm ... :) I'm not a perl d00d3, so the code is kinda rough, but, hey, it works. It should be enough to send back to the author so he can patch his code to work on both Linux and FreeBSD. I'm sure there's a Right Way to do what I did, but this'll do in a pinch. ---8<-snip---8<-snip---8<-snip---8<-snip---8<-snip---8<-snip---8<--- --- FreeDB.pm.orig Wed Dec 8 08:46:32 1999 +++ FreeDB.pm Sun Jan 20 21:00:40 2002 @@ -49,6 +49,21 @@ $VERSION = '1.1.2'; +my ($os, $CDIOREADTOCHEADER, $CDIOREADTOCENTRY); + +sub BEGIN { + $os = `uname`; + if ($os =~ m/FreeBSD/) { + $CDIOREADTOCHEADER = 0x40046304; + $CDIOREADTOCENTRY = 0xc00c6306; + } elsif ($os =~ m/Linux/) { + $CDIOREADTOCHEADER = 0x5305; + $CDIOREADTOCENTRY = 0x5306; + } else { + die "FIXME: $os not supported"; + } +} + # Preloaded methods go here. sub new { @@ -576,7 +591,10 @@ my ($trackno, $ttitle) = split('=', $i); $tracks[$trackno] .= $ttitle; } - return 0 if (@tracks[1] eq ""); + +# was @tracks[1] + + return 0 if ($tracks[1] eq ""); my (@offsets) = ($tmp =~ /^\#\s+(\d+)/mg); my ($disclength) = ($tmp =~ /^\#\s*Disc length:\s*(\d+)/mg); @@ -624,38 +642,68 @@ # Sets: {discid} and _server_string() sub _get_disc_info { my $self = shift @_; - my ($result, $start, $end, $discid, $tracknumber); + my ($result, $start, $end, $discid, $tracknumber, $chdr); my ($track, $adr_ctrl, $format, $frame, $minute, $second); - my $chdr = ""; my @tracks = (); open (cdrom_fd, "$self->{'cdrom_device'}") or croak "Error: could not open device: \"$self->{'cdrom_device'}\"\n\nSolution: login as root and make a new group 'cdrom' in /etc/group\nthen issue these commands:\n chgrp cdrom $self->{'cdrom_device'}\n cdmod g+r $self->{'cdrom_device'}\n adduser <username> cdrom\nNow logout and login as the user again.\n\n"; + my $hdrfmt; + if ($os =~ m/Linux/) { + $hdrfmt = 'CC'; + } elsif ($os =~ m/FreeBSD/) { + $hdrfmt = 'xxCC'; + } # Get start and end track number - $result = ioctl(cdrom_fd, 0x5305, $chdr); + $chdr = pack($hdrfmt, 0, 0); + $result = ioctl(cdrom_fd, $CDIOREADTOCHEADER, $chdr); $result or croak "CD reading ioctl failed.\n"; $self->debug(2,"RESULT IS: $result\n"); - ($start, $end) = unpack('CC', $chdr); - + ($start, $end) = unpack($hdrfmt, $chdr); # Get info for each track for ($tracknumber = $start; $tracknumber <= $end; $tracknumber++) { - my $tocentry = pack('C8', $tracknumber, 0, 2, 0, 0, 0, 0, 0); + my $tocentry; + + if ($os =~ m/Linux/) { + $tocentry = pack('C8', $tracknumber, 0, 2, 0, 0, 0, 0, 0); + } elsif ($os =~ m/FreeBSD/) { + $tocentry = pack('CCx10', 2, $tracknumber); + } - if( ioctl(cdrom_fd, 0x5306, $tocentry) < 0 ) { + if( ioctl(cdrom_fd, $CDIOREADTOCENTRY, $tocentry) < 0 ) { croak "Error: problems during cdrom tracks read in\n\nSolution: sorry no solution\n"; } - ($track, $adr_ctrl, $format, $frame, $minute, $second) = unpack('C*', $tocentry); + if ($os =~ m/Linux/) { + ($track, $adr_ctrl, $format, $frame, $minute, $second) + = unpack('C*', $tocentry); + } elsif ($os =~ m/FreeBSD/) { + ($format, $track, $minute, $second, $frame) + = unpack('CCx7CCC', $tocentry); + } $tracks[$tracknumber] = (60 * $minute + $second); - } # Get info for leadout - my $tocentry = pack('C8', 0xAA, 0, 2, 0, 0, 0, 0 ,0); - if( ioctl(cdrom_fd, 0x5306, $tocentry) < 0 ) + my $tocentry; + + if ($os =~ m/Linux/) { + $tocentry = pack('C8', 0xAA, 0, 2, 0, 0, 0, 0 ,0); + } elsif ($os =~ m/FreeBSD/) { + $tocentry = pack('CCx10', 2, 0xAA); + } + + if( ioctl(cdrom_fd, $CDIOREADTOCENTRY, $tocentry) < 0 ) { croak "Error: problems during cdrom tracks read in\n\nSolution: sorry no solution\n"; } - ($track, $adr_ctrl, $format, $frame, $minute, $second) = unpack('C*', $tocentry); + + if ($os =~ m/Linux/) { + ($track, $adr_ctrl, $format, $frame, $minute, $second) + = unpack('C*', $tocentry); + } elsif ($os =~ m/FreeBSD/) { + ($format, $track, $minute, $second, $frame) + = unpack('CCx7CCC', $tocentry); + } $tracks[$end + 1] = (60 * $minute + $second); # Calculate cddb sum for all tracks and for total ---8<-snip---8<-snip---8<-snip---8<-snip---8<-snip---8<-snip---8<--- -- Alan Eldridge Pmmfmffmmfmp mmmpppppffmpmfpmpppff PmpMpmMpp ppfppp MpfpffmppmppMmpFmmMpm mfpmmmmmfpmpmpppff. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-ports" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020121020547.GA81588>