#!/usr/bin/perl -Tw # $RedRiver: mixer.pl,v 1.2 2006/08/12 00:14:53 andrew Exp $ ######################################################################## # Mixer.pl *** Changes volume on the MP3 player # # 10/11/2002 4:26PM # Written by andrew fresh ######################################################################## use strict; use diagnostics; my $mixerctl = '/usr/bin/mixerctl'; my $me = MyName(); delete $ENV{PATH} if exists $ENV{PATH}; my @Vols = ( [ 7, 7], [ 15, 15], [ 23, 23], [ 31, 31], [ 39, 39], [ 47, 47], [ 55, 55], [ 63, 63], [ 71, 71], [ 79, 79], [ 87, 87], [ 95, 95], [103, 103], [111, 111], [119, 119], [127, 127], [135, 135], [143, 143], [151, 151], [159, 159], [167, 167], [175, 175], [183, 183], [191, 191], [199, 199], [207, 207], [215, 215], [223, 223], [231, 231], [239, 239], [247, 247], [255, 255], ); my $Cur_Vol = `$mixerctl outputs.master`; #»print "Cur_Vol $Cur_Vol
\n"; $Cur_Vol =~ /outputs.master=(\d+),(\d+)/i; my $Cur_Vol_Left = $1; my $Cur_Vol_Right = $2; print "Content-Type: text/html\n\n"; print "\n\n\t "; my ($prefix, $New_Vol_Left, $New_Vol_Right) = split /\&/, $ENV{'QUERY_STRING'}; if ($New_Vol_Left || $New_Vol_Right) { $New_Vol_Left =~ s/%(..)/pack("c",hex($1))/ge; $New_Vol_Right =~ s/%(..)/pack("c",hex($1))/ge; print ""; } $New_Vol_Left ||= $Cur_Vol_Left; $New_Vol_Right ||= $Cur_Vol_Right; if ($New_Vol_Left =~ /(\d+)/) { $New_Vol_Left = $1; } if ($New_Vol_Right =~ /(\d+)/) { $New_Vol_Right = $1; } if ($prefix) { $prefix =~ s/%(..)/pack("c",hex($1))/ge; } else { $prefix =''; } print < EOL print "Volume Mixer\n\n\n"; Print_Nav(); unless ($prefix) { print "Volume - "; #print "New_Vol $New_Vol_Left:$New_Vol_Right
\n"; my @nav; foreach my $vol (@Vols) { if ($$vol[0] == $New_Vol_Left) { push @nav, "$$vol[0]\n"; } elsif ($$vol[0] < $New_Vol_Left) { push @nav, "}\n"; } elsif ($$vol[0] > $New_Vol_Left) { push @nav, "]\n"; } #print "$vol - $$vol[0] - $$vol[1]
\n"; } print join " ", @nav; #print "
\n"; Set_Vol($Cur_Vol_Left, $Cur_Vol_Right, $New_Vol_Left, $New_Vol_Right); } print "\n\n\n"; sub Set_Vol { my $old_vol_right = shift; my $old_vol_left = shift; my $new_vol_left = shift; my $new_vol_right = shift; my $old_vol; my $new_vol; if (($old_vol_left + $old_vol_right) > ($new_vol_left + $new_vol_right)) { $old_vol = $old_vol_left > $old_vol_right ? $old_vol_left : $old_vol_right; $new_vol = $new_vol_left < $new_vol_right ? $new_vol_left : $new_vol_right; } else { $old_vol = $old_vol_left < $old_vol_right ? $old_vol_left : $old_vol_right; $new_vol = $new_vol_left > $new_vol_right ? $new_vol_left : $new_vol_right; } #print "Old: $old_vol - New: $new_vol
\n"; my $Set_Vol; foreach my $vol ($old_vol < $new_vol ? $old_vol..$new_vol : reverse $new_vol..$old_vol) { #print "$vol
\n"; $Set_Vol = `$mixerctl -w outputs.master=$vol,$vol`; #print $Set_Vol . "
\n"; } return $Set_Vol; } ######################################################################## # *** EncodeURL: %encodes the parameters of the URL sub EncodeURL { my $strURL = shift; $strURL =~ s/(\W)/sprintf("%%%x", ord($1))/eg; return $strURL; } ######################################################################### # My name sub MyName { my @filename = (split /\//, $0); pop @filename; } ####################################################################### # Bail: this subrouting dies and displays the error to the browser. # gotten from the example in the O'Reilly # _Learning_Perl_on_Win32_Systems_ sub bail { my $error = shift; print "\n\nUnexpected Error: $error
\n"; print "In " . __FILE__ . "\n"; die; exit; } sub Print_Nav { open FILE, 'nav.inc' or die "\n\ncouldn't open FILE nav.inc: $!"; while () { s/%PREFIX%/$prefix/g; print; } close FILE; }