Audio-Play-MPG123

 view release on metacpan or  search on metacpan

mpg123/tools/Mp3play  view on Meta::CPAN

       	 {					# an ascii character is on input
       	 					# so add it to search pattern
          $ReadLine=substr($ReadLine,0,$ReadingLineCurrentPos).$_.substr($ReadLine,$ReadingLineCurrentPos);
          $ReadingLineCurrentPos++;
          $ReadingLineStartPos=$ReadingLineCurrentPos-$Width+length($ReadingLinePrompt)+1 if($ReadingLineCurrentPos-$ReadingLineStartPos>=$Width-length($ReadingLinePrompt));
          $ReadingLineStartPos=0 if($ReadingLineStartPos<0);
          Display("reading-line");
         }
        elsif(unpack("C",$_)==12)
         {					# ASCII "Ctrl-L" - redraw screen
          Display("full");
         }
        elsif(unpack("C",$_)==3)
         {					# ASCII "Ctrl-C" - quit
          $Exit=1;
         }
        elsif(unpack("C",$_)==27)
         {					# ASCII "Esc" - abort search
         					# pattern
          $ReadLine="";
          $ReadingLine=0;
          HideCursor();
          Display("sort");
         }
        elsif(unpack("C",$_)==9)
         {					# ASCII "Tab" - try to expand
						# line to an existing file name
          if($ReadingLineExpandToFileName)
           {					# expanding is turned on
            my $ReadLineStartPos=0;
            if(substr($ReadLine,0,1) eq "@")
             {					# we have a playlist
              $ReadLineStartPos=1;
             }
            $ReadLineTemp=ExpandToFileName(substr($ReadLine,$ReadLineStartPos,$ReadingLineCurrentPos-$ReadLineStartPos));
            $ReadLine=substr($ReadLine,0,$ReadLineStartPos).$ReadLineTemp.substr($ReadLine,$ReadingLineCurrentPos);
            $ReadingLineCurrentPos=$ReadLineStartPos+length($ReadLineTemp);
            $ReadingLineStartPos=$ReadingLineCurrentPos-$Width+length($ReadingLinePrompt)+1 if($ReadingLineCurrentPos-$ReadingLineStartPos>=$Width-length($ReadingLinePrompt));
            $ReadingLineStartPos=0 if($ReadingLineStartPos<0);
            Display("reading-line");
           }
         }
       }
      else
       {
        if(($_ eq "bs")||($_ eq "kb"))
         {					# ASCII backspace key or
						# termcap's backspace key
          if($ReadingLineCurrentPos)
           {
            $ReadingLineCurrentPos--;
            substr($ReadLine,$ReadingLineCurrentPos,1,"");
            Display("reading-line");
           }
         }
        if($_ eq "kD")
         {					# termcap's delete character
          Display("reading-line") if(substr($ReadLine,$ReadingLineCurrentPos,1,"") ne "");
         }
        if($_ eq "kl")
         {					# termcap's move cursor left key
          $ReadingLineCurrentPos--;
          $ReadingLineCurrentPos=0 if($ReadingLineCurrentPos<0);
          $ReadingLineStartPos=$ReadingLineCurrentPos if($ReadingLineStartPos>$ReadingLineCurrentPos);
          Display("reading-line");
         }
        if($_ eq "kr")
         {					# termcap's move cursor right
         					# key
          $ReadingLineCurrentPos++;
          $ReadingLineCurrentPos=length($ReadLine) if($ReadingLineCurrentPos>length($ReadLine));
          $ReadingLineStartPos=$ReadingLineCurrentPos-$Width+length($ReadingLinePrompt)+1 if($ReadingLineCurrentPos-$ReadingLineStartPos>=$Width-length($ReadingLinePrompt));
          $ReadingLineStartPos=0 if($ReadingLineStartPos<0);
          Display("reading-line");
         }
        if($_ eq "kh")
         {					# termcap's move cursor home key
          $ReadingLineStartPos=0;
          $ReadingLineCurrentPos=0;
          Display("reading-line");
         }
        if($_ eq "kH")
         {					# termcap's move cursor hold
         					# down key
          $ReadingLineCurrentPos=length($ReadLine);
          $ReadingLineStartPos=$ReadingLineCurrentPos-$Width+length($ReadingLinePrompt)+1;
          $ReadingLineStartPos=0 if($ReadingLineStartPos<0);
          Display("reading-line");
         }
       }
     }
    next;
   }
  if($ReadingSearchPattern)
   {
    $ReadingSearchPattern=0;
    $SearchPattern=$ReadLine;
    if($SearchPattern ne "")
     {
      Search($SearchDirection);
     }
    else
     {
      Display("sort");
     }
   }
  if($AddingTrack)
   {						# finished adding new tracks
    $ReadingLineExpandToFileName=0;
    if(($ReadLine ne "")&&(!$AddingTrackWaitingForAnyKey))
     {						# really adding new tracks
      my @TrackNew=@Track;
      my $ProgramName=$0;
      $0="";
      @Track=();
      GotoXY(0,$Height);
      if(substr($ReadLine,0,1) eq "@")
       {					# read given playlist
        ReadPlayList(substr($ReadLine,1));
       }
      else
       {					# read given file or files
       						# in given directory
        ReadFile($ReadLine);
       }
      $0=$ProgramName;
      foreach (@Track)
       {					# create list of unread MP3
   						# info files
        push @UnreadMP3Info,$_ if(!$MP3InfoRead{$_});
       }
      splice @TrackNew,$SelectedTrack,0,@Track;	# insert new files at current
      						# position
      @Track=@TrackNew;
      $NumberWidth=length($#Track+1);		# track number width
      if(!$ErrorAddingToPlayList)
       {					# there were no errors while
       						# adding new tracks to play list
        $AddingTrack=0;
       }
      else
       {					# error adding to play list
        print STDOUT "PRESS ANY KEY TO CONTINUE";

mpg123/tools/Mp3play  view on Meta::CPAN

    Display("filename");			# update display filename status
    next;
   }
  if($_ eq "D")
   {						# ASCII "D" - display directory
    $Directory=1-$Directory;
    if($DisplaySequence=~/D/)
     {						# if there is a real change in
     						# the display
      GenerateTrackText();
      Display("list-full");			# update play list
     }
    Display("directory");			# update display directory
    						# status
    next;
   }
  if($_ eq "Y")
   {						# ASCII "Y" - display year
    $Year=1-$Year;
    if($DisplaySequence=~/Y/)
     {						# if there is a real change in
     						# the display
      GenerateTrackText();
      Display("list-full");			# update play list
     }
    Display("year");				# update display year
    next;
   }
  if($_ eq "U")
   {						# ASCII "U" - display music type
    $MusicType=1-$MusicType;
    if($DisplaySequence=~/U/)
     {						# if there is a real change in
     						# the display
      GenerateTrackText();
      Display("list-full");			# update play list
     }
    Display("musictype");			# update display music type
    						# status
    next;
   }
  if(($_ eq "c")||($_ eq "C"))
   {						# ASCII "c" or ASCII "C" - go
   						# to current track in the list
    $SelectedTrack=$CurrentTrack;
    if(($SelectedTrack<$StartVPos)||($SelectedTrack>=$StartVPos+$ListHeight))
     {
      $StartVPos=$SelectedTrack-int($ListHeight/2);
      $StartVPos=$#Track-$ListHeight+1 if($StartVPos>$#Track-$ListHeight+1);
      $StartVPos=0 if($StartVPos<0);
     }
    Display("list");				# update play list
    next;
   }
  if(unpack("C",$_)==12)
   {						# ASCII "Ctrl-L" - redraw screen
    Display("full");				# display everything
    next;
   }
  if(($_ eq "j")||($_ eq "kd"))
   {						# ASCII "j" or termcap's cursor
   						# down key - move selection one
   						# line down
    $SelectedTrack++;
    $SelectedTrack=$#Track if($SelectedTrack>$#Track);
    $StartVPos++ if($SelectedTrack>=$StartVPos+$ListHeight);
    Display("list");				# update play list
    next;
   }
  if(($_ eq "k")||($_ eq "ku"))
   {						# ASCII "k" or termcap's cursor
   						# up key - move selection one
   						# line up
    $SelectedTrack--;
    $SelectedTrack=0 if($SelectedTrack<0);
    $StartVPos-- if($SelectedTrack<$StartVPos);
    Display("list");				# update play list
    next;
   }
  if(($_ eq "g")||($_ eq "kh"))
   {						# ASCII "g" or termcap's cursor
   						# home key - move selection to
   						# the top
    $SelectedTrack=0;
    $StartVPos=0;
    Display("list");				# update play list
    next;
   }
  if(($_ eq "G")||($_ eq "kH"))
   {						# ASCII "G" or termcap's cursor
   						# hold down key - move selection
   						# to the bottom
    $SelectedTrack=$#Track;
    $StartVPos=$#Track-$ListHeight+1;
    $StartVPos=0 if($StartVPos<0);
    Display("list");				# update play list
    next;
   }
  if(($_ eq "\n")||($_ eq "\r"))
   {						# ASCII newline or ASCII
   						# carriage return - play
   						# selected track
    $CurrentTrack=$SelectedTrack;
    KillMPG123();				# stop playing current track if
    						# any
    $Playing=1;
    next;
   }
  if(($_ eq "kN")||(unpack("C",$_)==6))
   {						# ASCII "Ctrl-F" of termcap's
   						# key for next page - move
   						# selection one page down
    $SelectedTrack=$StartVPos+$ListHeight-1;
    $SelectedTrack=$#Track if($SelectedTrack>$#Track);
    $StartVPos=$SelectedTrack;
    $StartVPos=$#Track-$ListHeight+1 if($StartVPos>$#Track-$ListHeight+1);
    $StartVPos=0 if($StartVPos<0);
    Display("list");				# update play list
    next;
   }
  if(($_ eq "kP")||(unpack("C",$_)==2))
   {						# ASCII "Ctrl-B" or termcap's
   						# key for previous page - move
   						# selection one page up
    $SelectedTrack=$StartVPos;
    $StartVPos=$SelectedTrack-$ListHeight+1;
    $StartVPos=0 if($StartVPos<0);
    Display("list");				# update play list
    next;
   }
  if(($_ eq "h")||($_ eq "kl"))
   {						# ASCII "h" or termcap's cursor
   						# left key - shift play list
   						# window one character left
    $StartHPos--;
    $StartHPos=0 if($StartHPos<0);
    Display("list");				# update play list
    next;
   }
  if(($_ eq "l")||($_ eq "kr"))
   {						# ASCII "l" or termcap's cursor
   						# right key - shift play list
   						# window one character right
    $StartHPos++;
    $StartHPos=$TrackTextMaxLength-ListWidth() if($StartHPos>$TrackTextMaxLength-ListWidth());
    $StartHPos=0 if($StartHPos<0);
    Display("list");				# update play list
    next;
   }
  if(unpack("C",$_)==8)
   {						# ASCII "Ctrl-H" - shift play
   						# list window half window left
    $StartHPos-=int(ListWidth()/2);
    $StartHPos=0 if($StartHPos<0);
    Display("list");				# update play list
    next;
   }
  if(unpack("C",$_)==18)
   {						# ASCII "Ctrl-R" - shift play
   						# list window half window right
    $StartHPos+=int(ListWidth()/2);
    $StartHPos=$TrackTextMaxLength-ListWidth() if($StartHPos>$TrackTextMaxLength-ListWidth());
    $StartHPos=0 if($StartHPos<0);
    Display("list");				# update play list
    next;
   }
  if($_ eq "0")
   {						# ASCII "0" - shift play list
   						# window to the left margin
    $StartHPos=0;
    Display("list");				# update play list
    next;
   }
  if($_ eq "\$")
   {						# ASCII "$" - shift play list
   						# window to the right margin
    $StartHPos=$TrackTextMaxLength-ListWidth();
    $StartHPos=0 if($StartHPos<0);
    Display("list");				# update play list
    next;
   }
  if($_ eq "M")
   {						# ASCII "M" - show numbers
    $Numbers=1-$Numbers;
    $StartHPos=$TrackTextMaxLength-ListWidth() if($StartHPos>$TrackTextMaxLength-ListWidth());
    $StartHPos=0 if($StartHPos<0);
    Display("numbers");				# update show numbers status
    Display("list-full");			# update play list
    next;
   }
  if(unpack("C",$_)==9)
   {						# ASCII "Ctrl-I" - change
   						# display sequence for artist
    ChangeDisplaySequence("I");
    next;
   }
  if(unpack("C",$_)==1)
   {						# ASCII "Ctrl-A" - change
   						# display sequence for album
    ChangeDisplaySequence("A");
    next;

mpg123/tools/Mp3play  view on Meta::CPAN

 return $& if($KeyboardInput=~s/^.//s);		# no termcap capability detected
 						# return first ASCII character
 return "";
}

sub ChangeDisplaySequence
{						# subroutine to change display
						# sequence of a given argument
 my $Char;
 my $x;
 $x=index($DisplaySequence,$_[0]);
 if($x==-1)
  {						# argument is in not the
  						# DisplaySequence, so add it to
  						# the end
   $DisplaySequence.=$_[0];
   GenerateTrackText(),Display("list-full") if(${$DisplayParameter{$_[0]}});
   						# update play list if this
   						# argument is displayed
  }
 else
  {						# argument is in the
  						# DisplaySequence, so change its
  						# position
   if($x)
    {						# argument is in the middle, so
    						# exchange it with the one
    						# before
     substr($DisplaySequence,$x,1,"_");
     $Char=substr($DisplaySequence,$x-1,1,$_[0]);
     substr($DisplaySequence,$x,1,$Char);
     GenerateTrackText(),Display("list-full") if((${$DisplayParameter{$_[0]}})&&(${$DisplayParameter{$Char}}));
     						# update play list if both
     						# arguments are displayed
    }
   else
    {						# argument is at the beginning,
    						# so remove it from the
    						# beginning and add it at the
    						# end
     substr($DisplaySequence,$x,1,"");
     $DisplaySequence.=$_[0];
     if(${$DisplayParameter{$_[0]}})
      {						# if this argument is displayed
      						# and any other arguments are
      						# displayed, then update play
      						# list
       $Char=FALSE;
       for($x=0;$x<length($DisplaySequence);$x++)
        {
         $Char||=(${$DisplayParameter{substr($DisplaySequence,$x,1)}}!=0);
        }
       GenerateTrackText(),Display("list-full") if($Char);
      }
    }
  }
 Display("sequence");				# update sequence display
}

sub GotoXY
{						# subroutine to put cursor to
						# the given location on the
						# screen
 print STDOUT $TermCap->Tgoto('cm',int($_[0]),int($_[1]));
}

sub ClearScreen
{						# subroutine to clear the screen
 print STDOUT $TermCap->{'_cl'};
}

sub Char
{						# subroutine to return special
						# characters depending on
						# display type (7-bit ascii)
 return $Display{$_[0],$_7BitAsciiDisplay};
}

sub HideCursor
{						# subroutine to hide cursor
 print STDOUT $TermCap->{'_vi'};
}

sub ShowCursor
{						# subroutine to show cursor
 print STDOUT $TermCap->{'_ve'};
}

sub NormalMode
{						# subroutine to put terminal
						# into normal mode
 print STDOUT NormalModeStr() if(!$_7BitAsciiDisplay);
}

sub ReverseMode
{						# subroutine to put terminal
						# into reverse mode
 print STDOUT ReverseModeStr() if(!$_7BitAsciiDisplay);
}

sub BoldMode
{						# subroutine to put terminal
						# into bold mode
 print STDOUT BoldModeStr() if(!$_7BitAsciiDisplay);
}

sub HalfBrightMode
{						# subroutine to put terminal
						# into half bright mode
 print STDOUT HalfBrightModeStr() if(!$_7BitAsciiDisplay);
}

sub NormalModeStr
{						# subroutine that returns string
						# putting terminal into normal
						# mode
 return "" if($_7BitAsciiDisplay);
 return $TermCap->{'_me'};
}

sub ReverseModeStr
{						# subroutine that returns string
						# putting terminal into reverse
						# mode
 return "" if($_7BitAsciiDisplay);
 return $TermCap->{'_mr'};
}

sub BoldModeStr
{						# subroutine that returns string
						# putting terminal into bold
						# mode
 return "" if($_7BitAsciiDisplay);
 return $TermCap->{'_md'};
}

sub HalfBrightModeStr
{						# subroutine that returns string
						# putting terminal into half
						# bright mode
 return "" if($_7BitAsciiDisplay);
 return $TermCap->{'_mh'};
}

sub Display



( run in 0.611 second using v1.01-cache-2.11-cpan-5b529ec07f3 )