#!/usr/bin/perl -w

use strict;

use Getopt::Std;

my $Version="1.5 - 6 Nov 2015";

my $svtA_NORMAL="\033[0m";
my $svtA_UNDERLINE="\033[4m";
my $svtA_REVERSE="\033[7m";

my %opts;
my $err=not getopts('anpvo', \%opts);
my $sololinac= defined $opts{a};
my $numera= defined $opts{n};
my $octal= defined $opts{o};
my $vernomfichero= defined $opts{v};
my $pasalo= defined $opts{p};  # no muestra el caracter codificado, sino tal cual.

if( not defined $ARGV[0] or $err ){ 
  print "** Version: $Version\n"; 
  print "** Syntax: $0 fichero\n"; 
  print "              -a Solo muestra lineas con acentos\n"; 
  print "              -n Numera lineas\n"; 
  print "              -o Codigos en octal\n"; 
  print "              -p Pasa los caracteres sin transformar a <cod>\n"; 
  print "              -v Muestra el nombre del fichero en cada linea\n"; 
  exit 33; 
  };
my $nomfile=$ARGV[0];
if( $nomfile eq "-" ){ 
  *FI=*STDIN; 
} else {
  open( FI,"<$nomfile" ) or die "** No puedo abrir $nomfile: $!\n";
  }
my $nl=0;
while(<FI>){
  $nl++;
  my $l="";
  my $hayacento=0;
  for my $c (split //){ 
    if (ord $c >127){ 
      $hayacento=1;
      if( $pasalo ){
        $l.= $c; 
        }
      else{
        my $codcar= sprintf( $octal? "%o" :"%d", ord($c) );
        $l.= "\007$svtA_REVERSE<$codcar>$svtA_NORMAL"; 
        }
      } 
    else{ $l.= "$c";}
    };
  if( $hayacento or (not $hayacento and not $sololinac) ){ 
    if( $vernomfichero) { print "$nomfile: "; };
    if( $numera) { printf "%4d ",$nl; };
    print $l; 
    };
  }
