#!/usr/bin/perl

$VERSION = "0.5";
$PROGVER = $VERSION;

use MP3::Tag;

$configfile = '/usr/local/music/progs/playlist.conf';
$type = 'MAIN';
 
sub readconfig ($$);
sub getdir($);
sub checksongs(@);
sub CompareTags($$$$$);
sub fileescape($);
sub OptLine($$$);

#readconfig($configfile, $type);
#@mp3s = getdir($config{mp3dir});

foreach $filename (@ARGV)
{
  checksongs($filename);
}

sub readconfig($$)
{
  $configfile = shift;
  $type = shift;

  open(CONFIG, "< $configfile") or die "No Conf file: $configfile \n";
  while (<CONFIG>) {
    chomp;                  # no newline
    s/#.*//;                # no comments
    s/^\s+//;               # no leading white
    s/\s+$//;               # no trailing white
    next unless length;     # anything left?


    my ($var, $value) = split(/\s*=\s*/, $_, 2);
    $config{$var} = $value;
  }
  close(CONFIG);
}

sub getdir($)
{
  my($dir) = shift;
  my(@directorys, @mp3s, @files, $file, $mp3, $num);

  opendir(MP3, $dir);
  @files = readdir(MP3);
  closedir(MP3);
  
  print "\nGetting directories.\n\n";
  foreach $file (@files)
  {
    if($file =~ m/.musicdir.noscan/i)
    {
      return undef;
    }
    elsif(-d $dir . "/" . $file && $file ne "." && $file ne ".."  && not -l $dir . "/" . $file)
    {
      push(@directorys, $dir . "/" . $file);
      print ".";
    }
    elsif($file =~ m/\.mp3/i)
    {
      push(@mp3s, $dir . "/" . $file);
    }
  }
  
  foreach $directory (@directorys)
  {
    print ".";
    @files = getdir($directory);
    push(@mp3s, @files);
  }
  return @mp3s;
}

sub checksongs(@)
{
  my(@mp3s) = @_;


  my($error, $sfile, $begin, $end);
  my($artist, $album, $num, $song) = "";
  
  open ERROR, ">/tmp/retag.err";

  foreach $file (@mp3s)
  {
    $error = 0;
    $num = "";
    $album = "";
    $artist = "";
    $song = "";
    $sfile = $file;
    $sfile =~ s/.*\///;
    $sfile =~ s/\.mp3//i;
    if($sfile =~ m/-[0-9][0-9]-/)
    #Files with format of Artist-Album-Num-Song.mp3 (with [] around any part that contains a '-'
    {
      $begin = $sfile;
      $begin =~ s/-[0-9][0-9]-.*//;
      
      $end = $sfile;
      $end =~ s/.*?-[0-9][0-9]-//;
      
      $num = $sfile;
      $num =~ /-([0-9][0-9])-/;
      $num = $1;
      
      if($begin =~ m/^\[/)
      {
        $artist = $begin;
        $artist =~ s/^\[//;
        $artist =~ s/\]-.*//;
        
        $begin =~ s/.*?\]-//;
      }
      elsif($begin =~ m/.*?-.*/)
      {
        $artist = $begin;
        $artist =~ s/-.*//;
        $begin =~ s/.*?-//;
      }

      if($begin =~ m/^\[/)
      {
        $album = $begin;
        $album =~ s/^\[//;
        $album =~ s/\].*//;
      }
      else
      {
        $album = $begin;
      }
      
      if($end =~ m/^\[/)
      {
        $song = $end;
        $song =~ s/^\[//;
        $song =~ s/].*//;
      }
      else
      {
        $song = $end;
        $song =~ s/\.mp3//i;
      }
    }
    else
    #Files with format of Artist-Song.mp3, [Artist]-Song.mp3, Artist-[Song].mp3 & [Artist]-[Song].mp3
    {
      if($sfile =~ m/^\[.*?\]-\[.*?\].*/)
      #[Artist]-[Song].mp3
      {
        $artist = $sfile;
        $artist =~ s/^\[//;
        $artist =~ s/\]-.*//;
        
        $song = $sfile;
        $song =~ s/.*-\[//;
        $song =~ s/].*//;
      }
      elsif($sfile =~ m/^.*-\[.*?\].*/)
      #Artist-[Song].mp3
      {
        $artist = $sfile;
        $artist =~ s/-.*//;
        
        $song = $sfile;
        $song =~ s/.*-\[//;
        $song =~ s/].*//;
      }
      elsif($sfile =~ m/^\[.*?\]-.*/)
      #[Artist]-Song.mp3
      {
        $artist = $sfile;
        $artist =~ s/^\[//;
        $artist =~ s/\]-.*//;
        
        $song = $sfile;
        $song =~ s/.*?-//;
      }
      elsif($sfile =~ m/.*?-.*?-.*?/)
      #More then 2 dashes and nothing is in [] - this file has an error in it's name
      {
        print ERROR $file . "\n";
        $error = 1;
      }
      elsif($sfile =~ m/.*?-.*?/)
      #Artist-Song.mp3
      {
        $artist = $sfile;
        $artist =~ s/-.*//;

        $song = $sfile;
        $song =~ s/.*?-//;
      }
      else
      #This file has NO dashes in it's name - there is an error in it's name.
      {
        print ERROR $file . "\n";
        $error = 1;
      }
      
    }
    
    if($error == 0)
    {
      my($return);
      $return = CompareTags($file, $album, $num, $artist, $song);
      if(!$return) { print ERROR $file . " V1 Tag & V2 tag are different\n"; }
    }
  }
  close ERROR;
}

sub CompareTags($$$$$)
{
  my($file) = shift;
  my($album) = shift;
  my($num)   = shift;
  my($artist)  = shift;
  my($song)  = shift;
  my($choice);
  my($type) = "";
  my($remixer) = "";
  
  if(!$album) { $album = ""; }
  if(!$num) { $num = ""; }
  if(!$artist) { $artist = ""; }
  if(!$song) { $song = ""; }

  my($artistsame) = 1;
  my($albumsame) = 1;
  my($songsame) = 1;
  my($numsame) = 1;
  my($remixersame) = 1;
  my($typesame) = 1;
  my($nodiff) = 1;

  my($id3v1ex) = 0;
  my($id3v1) = "";
  my($id3v1song) = "";
  my($id3v1artist) = "";
  my($id3v1album) = "";
  my($id3v1num) = "";

  my($id3v2ex) = 0;
  my($id3v2) = "";
  my($id3v2song) = "";
  my($id3v2artist) = "";
  my($id3v2album) = "";
  my($id3v2num) = "";

  my($id3v1songRE) = "";
  my($id3v1artistRE) = "";
  my($id3v1albumRE) = "";
  my($id3v2songRE) = "";
  my($id3v2artistRE) = "";
  my($id3v2albumRE) = "";
  
  my($finalartist, $finalalbum, $finalsong, $finalnum);
  
  my($mp3)          = MP3::Tag->new("$file");
  print("File: $file\n");
  $mp3->getTags;


  #Album shifts
  if($album =~ /\(Remix\)/) {
    $album =~ s/\(Remix\)//g;
    $type .= "Remix ";
  }

  if($album =~ /\(Live\)/) {
    $album =~ s/\(Live\)//g;
    $type .= "Live ";
  }
  elsif($album =~ /\(Bootleg\)/) {
    $album =~ s/\(Bootleg\)//g;
    $type .= "Bootleg ";
  }
  elsif($album =~ /\(Boot\)/) {
    $album =~ s/\(Boot\)//g;
    $type .= "Bootleg ";
  }

  if($album =~ /\(Soundtrack\)/) {
    $album =~ s/\(Soundtrack\)//g;
    $type .= "Soundtrack ";
  }
  
  if($album =~ /\{(.*)\}/) {
    $album =~ s/\{(.*)\}//g;
    $remixer = $1;
  }
  
  if(exists $mp3->{ID3v1}) {
    $id3v1ex = 1;
    $id3v1song    = $mp3->{ID3v1}->song;
    $id3v1artist  = $mp3->{ID3v1}->artist;
    $id3v1album   = $mp3->{ID3v1}->album;
    $id3v1num     = $mp3->{ID3v1}->track;
    $id3v1song    =~ s/_//g;
    $id3v1artist  =~ s/_//g;
    $id3v1album   =~ s/_//g;
    $id3v1num     =~ s/_//g;
    $id3v1song    =~ chomp($id3v1song);
    $id3v1artist  =~ chomp($id3v1artist);
    $id3v1album   =~ chomp($id3v1album);
    $id3v1num     =~ chomp($id3v1num);
    if(!$id3v1album) { $id3v1album = ""; }
    if(!$id3v1num) { $id3v1num = ""; }
    if(!$id3v1artist) { $id3v1artist = ""; }
    if(!$id3v1song) { $id3v1song = ""; }
  } else {
    $mp3->newTag("ID3v1");
  }

  if(exists $mp3->{ID3v2}) {
    $id3v2ex = 1;
    $id3v2song    = $mp3->{ID3v2}->getFrame("TIT2");
    $id3v2artist  = $mp3->{ID3v2}->getFrame("TPE1");
    $id3v2album   = $mp3->{ID3v2}->getFrame("TALB");
    $id3v2num     = $mp3->{ID3v2}->getFrame("TRCK");
    $id3v2remixer = $mp3->{ID3v2}->getFrame("TPE4");
    $id3v2type    = $mp3->{ID3v2}->getFrame("TMED");
    $id3v2song    =~ s/_//g;
    $id3v2artist  =~ s/_//g;
    $id3v2album   =~ s/_//g;
    $id3v2num     =~ s/_//g;
    $id3v2remixer =~ s/_//g;
    $id3v2type    =~ s/_//g;
    $id3v2song    =~ chomp($id3v2song);
    $id3v2artist  =~ chomp($id3v2artist);
    $id3v2album   =~ chomp($id3v2album);
    $id3v2num     =~ chomp($id3v2num);
    $id3v2remixer =~ chomp($id3v2remixer);
    $id3v2type    =~ chomp($id3v2type);
    if(!$id3v2album) { $id3v2album = ""; }
    if(!$id3v2num) { $id3v2num = ""; }
    if(!$id3v2artist) { $id3v2artist = ""; }
    if(!$id3v2song) { $id3v2song = ""; }
    if(!$id3v2remixer) { $id3v2remixer = ""; }
    if(!$id3v2type) { $id3v2type = ""; }

  } else {
    $mp3->newTag("ID3v2");
  }
  
  $id3v1songRE = fileescape($id3v1song);
  $id3v1artistRE = fileescape($id3v1artist);
  $id3v1albumRE = fileescape($id3v1album);
  $id3v2songRE = fileescape($id3v2song);
  $id3v2artistRE = fileescape($id3v2artist);
  $id3v2albumRE = fileescape($id3v2album);
  $id3v2remixerRE = fileescape($id3v2remixer);
  $id3v2typeRE = fileescape($id3v2type);
  
  if($id3v1ex) {
    if(!($artist =~ /$id3v1artistRE/)) {
#      print("if(!($artist =~ /$id3v1artistRE/))\n");
      if(!(!$artist && !$id3v1artist)) {
        $artistsame = 0;
        $nodiff = 0;
      }
    }
    if(!($album =~ /$id3v1albumRE/)) {
#      print("if(!($album =~ /$id3v1albumRE/))\n");
      if(!(!$album && !$id3v1album)) {
        $albumsame = 0;
        $nodiff = 0;
      }
    }
    if(!($song =~ /$id3v1songRE/)) {
#      print("if(!($song =~ /$id3v1songRE/))\n");
      if(!(!$song && !$id3v1song)) {
        $songsame = 0;
        $nodiff = 0;
      }
    }
    if(int($num) != int($id3v1num)) {
      $numsame = 0;
      $nodiff = 0;
    }
  }
  if($id3v2ex) {
    if(!($artist =~ /$id3v2artistRE/)) {
#      print("if(!($artist =~ /$id3v2artistRE/))\n");
      if(!(!$artist && !$id3v2artist)) {
        $artistsame = 0;
        $nodiff = 0;
      }
    }
    if(!($album =~ /$id3v2albumRE/)) {
#      print("if(!($album =~ /$id3v2albumRE/))\n");
      if(!(!$album && !$id3v2album)) {
        $albumsame = 0;
        $nodiff = 0;
      }
    }
    if(!($song =~ /$id3v2songRE/)) {
#      print("if(!($song =~ /$id3v2songRE/))\n");
      if(!(!$song && !$id3v2song)) {
        $songsame = 0;
        $nodiff = 0;
      }
    }
    if(!($remixer =~ /$id3v2remixerRE/)) {
#      print("if(!($remixer =~ /$id3v2remixerRE/))\n");
      if(!(!$remixer && !$id3v2remixer)) {
        $remixersame = 0;
        $nodiff = 0;
      }
    }
    if(!($type =~ /$id3v2typeRE/)) {
#      print("if(!($type =~ /$id3v2typeRE/))\n");
      if(!(!$type && !$id3v2type)) {
        $typesame = 0;
        $nodiff = 0;
      }
    }
    if(int($num) != int($id3v2num)) {
      $numsame = 0;
      $nodiff = 0;
    }
  }
  if($id3v1ex && $id3v2ex) {
    if(!(filereplace($id3v2artist) =~ /$id3v1artistRE/)) {
#      print("if(!($id3v2artist =~ /$id3v1artistRE/))\n");
      if(!(!$id3v2artist && !$id3v1artist)) {
        $artistsame = 0;
        $nodiff = 0;
      }
    }
    if(!(filereplace($id3v2album) =~ /$id3v1albumRE/)) {
#      print("if(!($id3v2album =~ /$id3v1albumRE/))\n");
      if(!(!$id3v2album && !$id3v1album)) {
        $albumsame = 0;
        $nodiff = 0;
      }
    }
    if(!(filereplace($id3v2song) =~ /$id3v1songRE/)) {
#      print("if(!($id3v2song =~ /$id3v1songRE/))\n");
      if(!(!$id3v2song && !$id3v1song)) {
        $songsame = 0;
        $nodiff = 0;
      }
    }
    if(int($id3v2num) != ($id3v1num)) {
      $numsame = 0;
      $nodiff = 0;
    }
  }
  
  if(!$id3v1ex || !$id3v2ex) {
    $nodiff = 0;
  }
  
  if(!$nodiff) {
    $choice = 0;

    if(!$id3v1ex && !$id3v2ex) {
      $id3v1artist = $artist;
      $id3v2artist = $artist;
      $id3v1album = $album;
      $id3v2album = $album;
      $id3v1song = $song;
      $id3v2song = $song;
      $id3v1num = int($num);
      $id3v2num = $num;
      
      $mp3->{ID3v1}->song($id3v1song);
      $mp3->{ID3v1}->artist($id3v1artist);
      $mp3->{ID3v1}->album($id3v1album);
      $mp3->{ID3v1}->track($id3v1num);
      $mp3->{ID3v1}->writeTag;

      $mp3->{ID3v2}->add_frame("TIT2", $id3v2song);
      $mp3->{ID3v2}->change_frame("TIT2", $id3v2song);
      $mp3->{ID3v2}->add_frame("TPE1", $id3v2artist);
      $mp3->{ID3v2}->change_frame("TPE1", $id3v2artist);
      $mp3->{ID3v2}->add_frame("TALB", $id3v2album);
      $mp3->{ID3v2}->change_frame("TALB", $id3v2album);
      $mp3->{ID3v2}->add_frame("TRCK", $id3v2num);
      $mp3->{ID3v2}->change_frame("TRCK", $id3v2num);
      $mp3->{ID3v2}->add_frame("TPE4", $id3v2remixer);
      $mp3->{ID3v2}->change_frame("TPE4", $id3v2remixer);
      $mp3->{ID3v2}->add_frame("TMED", $id3v2type);
      $mp3->{ID3v2}->change_frame("TMED", $id3v2type);
      $mp3->{ID3v2}->write_tag();
      
      print("$file Tagged\n");
    } else {
      while($choice ne "d") {

        print("              Filename                       ID3v1                          ID3v2\n");
        if($artistsame) {
          printf("  1) Artist - %-30.30s %-30.30s %-30.30s\n", $artist, $id3v1artist, $id3v2artist); 
        } else {
          printf("* 1) Artist - %-30.30s %-30.30s %-30.30s\n", $artist, $id3v1artist, $id3v2artist); 
        }

        if($albumsame) {
          printf("  2)  Album - %-30.30s %-30.30s %-30.30s\n", $album, $id3v1album, $id3v2album); 
        } else {
          printf("* 2)  Album - %-30.30s %-30.30s %-30.30s\n", $album, $id3v1album, $id3v2album); 
        }

        if($songsame) {
          printf("  3)   Song - %-30.30s %-30.30s %-30.30s\n", $song, $id3v1song, $id3v2song); 
        } else {
          printf("* 3)   Song - %-30.30s %-30.30s %-30.30s\n", $song, $id3v1song, $id3v2song); 
        }

        if($numsame) {
          printf("  4)      # - %-30.30s %-30.30s %-30.30s\n", int($num), int($id3v1num), int($id3v2num)); 
        } else {
          printf("* 4)      # - %-30.30s %-30.30s %-30.30s\n", int($num), int($id3v1num), int($id3v2num)); 
        }

        if($remixersame) {
          printf("  5)  Remix - %-30.30s                                %-30.30s\n", $remixer, $id3v2remixer); 
        } else {
          printf("* 5)  Remix - %-30.30s                                %-30.30s\n", $remixer, $id3v2remixer); 
        }

        if($typesame) {
          printf("  6)   Type - %-30.30s                                %-30.30s\n", $type, $id3v2type); 
        } else {
          printf("* 6)   Type - %-30.30s                                %-30.30s\n", $type, $id3v2type); 
        }

        print("  7) Use only Filename\n");
        print("  8) Use only ID3v1\n");
        print("  9) Use only ID3v2\n");
        print("  0) Write Tag\n");
        print("  d) Done\n\n");
        print(" ->");

        $choice = <STDIN>;
        $choice =~ s/\n//;
        SWITCH: {
          if($choice == 1)    { ($artist, $id3v1artist, $id3v2artist) = OptLine($artist, $id3v1artist, $id3v2artist); last SWITCH; }
          if($choice == 2)    { ($album, $id3v1album, $id3v2album) = OptLine($album, $id3v1album, $id3v2album); last SWITCH; }
          if($choice == 3)    { ($song, $id3v1song, $id3v2song) = OptLine($song, $id3v1song, $id3v2song); last SWITCH; }
          if($choice == 4)    { ($num, $id3v1num, $id3v2num) = OptLine($num, $id3v1num, $id3v2num); last SWITCH; }
          if($choice == 5)    { ($remixer, $x, $id3v2remixer) = OptLine($remixer, "", $id3v2remixer); last SWITCH; }
          if($choice == 6)    { ($type, $x, $id3v2type) = OptLine($type, $x, $id3v2type); last SWITCH; }
          if($choice == 7)    {
            $id3v1artist = $artist;
            $id3v2artist = $artist;
            $id3v1album = $album;
            $id3v2album = $album;
            $id3v1song = $song;
            $id3v2song = $song;
            $id3v2remixer = $remixer;
            $id3v2type = $type;
            $id3v1num = int($num);
            $id3v2num = $num;
            $mp3->{ID3v1}->removeTag();
            $mp3->{ID3v1}->writeTag();
            $mp3->{ID3v1}->song($id3v1song);
            $mp3->{ID3v1}->artist($id3v1artist);
            $mp3->{ID3v1}->album($id3v1album);
            $mp3->{ID3v1}->track($id3v1num);
            $mp3->{ID3v1}->writeTag;
            $mp3->{ID3v2}->add_frame("TIT2", $id3v2song);
            $mp3->{ID3v2}->change_frame("TIT2", $id3v2song);
            $mp3->{ID3v2}->add_frame("TPE1", $id3v2artist);
            $mp3->{ID3v2}->change_frame("TPE1", $id3v2artist);
            $mp3->{ID3v2}->add_frame("TALB", $id3v2album);
            $mp3->{ID3v2}->change_frame("TALB", $id3v2album);
            $mp3->{ID3v2}->add_frame("TRCK", $id3v2num);
            $mp3->{ID3v2}->change_frame("TRCK", $id3v2num);
            $mp3->{ID3v2}->add_frame("TPE4", $id3v2remixer);
            $mp3->{ID3v2}->change_frame("TPE4", $id3v2remixer);
            $mp3->{ID3v2}->add_frame("TMED", $id3v2type);
            $mp3->{ID3v2}->change_frame("TMED", $id3v2type);
            $mp3->{ID3v2}->write_tag();
            $choice = "d";
            last SWITCH;
          }
          if($choice == 8)    {
            $id3v2artist = $id3v1artist;
            $id3v2album = $id3v1album;
            $id3v2song = $id3v1song;
            $id3v2num = $id3v1num;
            $mp3->{ID3v1}->removeTag();
            $mp3->{ID3v1}->writeTag();
            $mp3->{ID3v1}->song($id3v1song);
            $mp3->{ID3v1}->artist($id3v1artist);
            $mp3->{ID3v1}->album($id3v1album);
            $mp3->{ID3v1}->track($id3v1num);
            $mp3->{ID3v1}->writeTag;
            $mp3->{ID3v2}->add_frame("TIT2", $id3v2song);
            $mp3->{ID3v2}->change_frame("TIT2", $id3v2song);
            $mp3->{ID3v2}->add_frame("TPE1", $id3v2artist);
            $mp3->{ID3v2}->change_frame("TPE1", $id3v2artist);
            $mp3->{ID3v2}->add_frame("TALB", $id3v2album);
            $mp3->{ID3v2}->change_frame("TALB", $id3v2album);
            $mp3->{ID3v2}->add_frame("TRCK", $id3v2num);
            $mp3->{ID3v2}->change_frame("TRCK", $id3v2num);
            $mp3->{ID3v2}->add_frame("TPE4", $id3v2remixer);
            $mp3->{ID3v2}->change_frame("TPE4", $id3v2remixer);
            $mp3->{ID3v2}->add_frame("TMED", $id3v2type);
            $mp3->{ID3v2}->change_frame("TMED", $id3v2type);
            $mp3->{ID3v2}->write_tag();
            $choice = "d";
            last SWITCH;
          }
          if($choice == 9)    {
            $id3v1artist = $id3v2artist;
            $id3v1album = $id3v2album;
            $id3v1song = $id3v2song;
            $id3v1num = int($id3v2num);
            $mp3->{ID3v1}->removeTag();
            $mp3->{ID3v1}->writeTag();
            $mp3->{ID3v1}->song($id3v1song);
            $mp3->{ID3v1}->artist($id3v1artist);
            $mp3->{ID3v1}->album($id3v1album);
            $mp3->{ID3v1}->track($id3v1num);
            $mp3->{ID3v1}->writeTag;
            $mp3->{ID3v2}->add_frame("TIT2", $id3v2song);
            $mp3->{ID3v2}->change_frame("TIT2", $id3v2song);
            $mp3->{ID3v2}->add_frame("TPE1", $id3v2artist);
            $mp3->{ID3v2}->change_frame("TPE1", $id3v2artist);
            $mp3->{ID3v2}->add_frame("TALB", $id3v2album);
            $mp3->{ID3v2}->change_frame("TALB", $id3v2album);
            $mp3->{ID3v2}->add_frame("TRCK", $id3v2num);
            $mp3->{ID3v2}->change_frame("TRCK", $id3v2num);
            $mp3->{ID3v2}->add_frame("TPE4", $id3v2remixer);
            $mp3->{ID3v2}->change_frame("TPE4", $id3v2remixer);
            $mp3->{ID3v2}->add_frame("TMED", $id3v2type);
            $mp3->{ID3v2}->change_frame("TMED", $id3v2type);
            $mp3->{ID3v2}->write_tag();
            $choice = "d";
            last SWITCH;
          }
          if($choice == 0)    { 
            $mp3->{ID3v1}->removeTag();
            $mp3->{ID3v1}->writeTag();
            $mp3->{ID3v1}->song($id3v1song);
            $mp3->{ID3v1}->artist($id3v1artist);
            $mp3->{ID3v1}->album($id3v1album);
            $mp3->{ID3v1}->track($id3v1num);
            $mp3->{ID3v1}->writeTag;
            $mp3->{ID3v2}->add_frame("TIT2", $id3v2song);
            $mp3->{ID3v2}->change_frame("TIT2", $id3v2song);
            $mp3->{ID3v2}->add_frame("TPE1", $id3v2artist);
            $mp3->{ID3v2}->change_frame("TPE1", $id3v2artist);
            $mp3->{ID3v2}->add_frame("TALB", $id3v2album);
            $mp3->{ID3v2}->change_frame("TALB", $id3v2album);
            $mp3->{ID3v2}->add_frame("TRCK", $id3v2num);
            $mp3->{ID3v2}->change_frame("TRCK", $id3v2num);
            $mp3->{ID3v2}->add_frame("TPE4", $id3v2remixer);
            $mp3->{ID3v2}->change_frame("TPE4", $id3v2remixer);
            $mp3->{ID3v2}->add_frame("TMED", $id3v2type);
            $mp3->{ID3v2}->change_frame("TMED", $id3v2type);
            $mp3->{ID3v2}->write_tag();
            $choice = "d";
            last SWITCH;
          }
          if($choice eq "")    { $choice = "d"; last SWITCH; }
        }
      }
    }
  }

}

sub fileescape($)
{
  my($name) = shift;

  $name =~ s/\*//g;
  $name =~ s/\?//g;
  $name =~ s/\://g;

  $name =~ s/\//-/g;

  $name =~ s/\(/\\\(/g;
  $name =~ s/\)/\\\)/g;
  $name =~ s/\[/\\\[/g;
  $name =~ s/\]/\\\]/g;
  $name =~ s/\{/\\\{/g;
  $name =~ s/\}/\\\}/g;
  $name =~ s/\&/\\\&/g;
  $name =~ s/\+/\\\+/g;
  $name =~ s/\./\\\./g;
  
  return $name;
}

sub filereplace($)
{
  my($name) = shift;

  $name =~ s/\*//g;
  $name =~ s/\?//g;
  $name =~ s/\://g;

  $name =~ s/\//-/g;
 
  return $name;
}

sub OptLine($$$)
{
  my($file) = shift;
  my($id3v1) = shift;
  my($id3v2) = shift;
  
  print("  Filename: $file\n");
  print("  Id3v1:    $id3v1\n");
  print("  Id3v2:    $id3v2\n\n");
  print("  1) Use Filename\n");
  print("  2) Use ID3v1\n");
  print("  3) Use ID3v2\n");
  print(" ->");
  $choice = <STDIN>;
  $choice =~ s/\n//;

  SWITCH:
  {
    if($choice == 1)    { $id3v1 = $file; $id3v2 = $file; last SWITCH; }
    if($choice == 2)    { $file = $id3v1; $id3v2 = $id3v1; last SWITCH; }
    if($choice == 3)    { $file = $id3v2; $id3v1 = $id3v2; last SWITCH; }
  }

  return($file, $id3v1, $id3v2);
}
