From owner-freebsd-ports Sun Jan 20 18: 6:21 2002 Delivered-To: freebsd-ports@freebsd.org Received: from wwweasel.geeksrus.net (wwweasel.geeksrus.net [64.67.200.82]) by hub.freebsd.org (Postfix) with ESMTP id 6EB3B37B404 for ; Sun, 20 Jan 2002 18:06:10 -0800 (PST) Received: (from alane@localhost) by wwweasel.geeksrus.net (8.11.6/8.11.6) id g0L25lR81736; Sun, 20 Jan 2002 21:05:47 -0500 (EST) (envelope-from alane) Date: Sun, 20 Jan 2002 21:05:47 -0500 From: Alan Eldridge To: Miguel Mendez Cc: ports@FreeBSD.ORG Subject: Re: Port in progress... Message-ID: <20020121020547.GA81588@wwweasel.geeksrus.net> References: <20020120201209.E12D23FC1F@energyhq.homeip.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20020120201209.E12D23FC1F@energyhq.homeip.net> User-Agent: Mutt/1.3.25i Sender: owner-freebsd-ports@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org 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 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