#!/usr/bin/perl

#{[(%
#hace paraplot desde $ref o desde $caj o desde .ds
#traduce de un archivo $archivo a ..  para gnuplot y lllama a gnuplot

use warnings;
use strict;
use Text::Abbrev;
use Data::Dumper;
use File::Basename;
use Cwd;
use Storable;


# OFRECER clean, cuardar todo lo que crea y bonerlo en un a boorar
# ofrecer celan dep borrar TODAS LAS GRAFICAS
# y clean 1 para borrar todo lo con el nombre que se ponga 


#lss1  todos escriben ahi
#lss2 es sceptre
#ls3  noclas es lss1 y clas en ls3
#ls4 mensajes del fortran compilando
#ls5 de la ejecucion  del fortran
#lsg son mesnajes del gnuplot 
#lsp seran mensajes del paraplot.pl 
  
#para paraplort.pl
use Simusol::AyudasPP;    
use Simusol::ParaPlot;  #ex plotgraf
use Simusol::ArchSimul;

# para plotgnu.pl
use Simusol::AuxiliaresPP;    #crear_tmp   OJO CAMBIO RETURN DE ELEGIR ARCHIVOS
use Simusol::Globales;
use Simusol::PlotGNU;
use Getopt::Long;
use Pod::Usage; 

    my ($commlineinfo,$archivos)=Simusol::AyudasPP::desmenuzar_comando(1);


#print Dumper $archivos;
#exit;
    #warn " O: $archivos->{outdir}, PP:  $commlineinfo->{progpath} PN:  $commlineinfo->{progname}, CA $commlineinfo->{cantarg};\n" ;
    #print "archivos ", Dumper $archivos;
    #print "commlineinfo ", Dumper $commlineinfo;
    #foreach (keys %{$archivos->{arg}}){
	#print "ARCHIVO $archivos->{arg}->{$_}->{dirs}->[4] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n";	
        #}
    

    if (not $commlineinfo->{opciones}->{nokill} or not defined $commlineinfo->{opciones}->{nokill} and $commlineinfo->{opciones}->{kill}){
	#print "Matando gnuplot\n";
        system "killall gnuplot_x11 2>/dev/null";
        }
    if ($commlineinfo->{opciones}->{kill}){
	# return();
	warn "SALGO KILL nofiles :$commlineinfo->{opciones}->{nofiles} cantarg $commlineinfo->{cantarg}\n ";
	########## arreglar buscaq files, esto sirvce pero arregalr
	exit 0; #es normal
        }



    if (not scalar keys %{$archivos->{arg}}){
       if ($commlineinfo->{cantarg}==0){
          print "usar simplot ARCH (sin extension, busca @{$archivos->{extensiones}})  @ARGV \n";         
          }
       print "No encontro archivos\n";    
       exit 0;  # es normal
       }


    #print Dumper $archivos;
    
    Simusol::PlotGNU::inicio();
    Simusol::AuxiliaresPP::inicio($commlineinfo); # antes de buscafile por elegir   
    Simusol::AyudasPP::inicio($commlineinfo,0,', paraplot',$archivos);
    Simusol::Globales::inicio($commlineinfo);
    Simusol::ParaPlot::inicio($commlineinfo);

print "A procesar: \n";

 foreach (@{$archivos->{argumentos}}){
    my $ll=$archivos->{arg}->{$_}->{dirs};
    printf (" %30s  %20s   %-10s \n",$ll->[1],$ll->[0],$ll->[3]);
  }

#print Dumper $archivos->{arg};
print "---------------------------------------------------------------\n";

    foreach my $elemento (@{$archivos->{argumentos}}){
       #para que este en stdout y stderr
       warn "ARCHIVO $archivos->{arg}->{$elemento}->{dirs}->[4] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n";
       print "ARCHIVO $archivos->{arg}->{$elemento}->{dirs}->[4] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n";
       
       # llama a abrir LS3 y LOG ....LSS1,  intenta imprimr antes cuando no tiene nombre de archivo procesado, usa simplot.ls3 y simplot.log
       Simusol::AyudasPP::abrir_ls3_log($archivos,$elemento,$commlineinfo->{progname});   

       procesaarchivo($elemento,$archivos,$commlineinfo);
       }

################################################################################################## de gnuplot.pl


sub procesaarchivo{    
    my($elemento,$archivos,$commlineinfo)=@_;

    # esta rutina procesa un archivo definido concreto, existente, con extension definida y ubicado en algun lugar
    # segun su extension lo procesa, si se especifico antes sin extension, aqui encuentra "el archivo mas avanzado"
    # con ese nombre. Si se quiere uno previo, borrar el avanzado que sera sobreescrito
    # avance segun datos de precedencia: 1 (simul u otro solo o con ds, caj, hashpĺot), 2 (paraplot), 3 (gra)

    # y si le pido dia, que hago (proceso con simusol1 y simusol3 ??? para tener simul y hashplot?)
    # mejor no, que eso lo haga simusol
    
    #print "COMM LINE y OPT_HASH ", Dumper $commlineinfo;
      
    my $arc=$archivos->{arg}->{$elemento}->{dirs};
    my $PROPIOSIN  =$arc->[0];  #SOLO 
    my $CORTOSIN   =$arc->[2];  #BASE+SOLO
    my $EXT        =$arc->[3];  #EXT    
    my $CORTO      =$arc->[4];  #BASE+SOLO+EXT
    my $ESTIPOSIMUL=$arc->[-1];  #TIPO esta en el 9, no lo pone prepfile si precedencia

    #print "PROCESA ARCHIVO ELE: $elemento === EXT: $EXT ==== CORTO: $CORTO === TIPO:  $ESTIPOSIMUL ==================================================\n";
    #print " simplot 209 \n";
    #print Dumper $archivos;
            
    #exit -1;      
    ####################### podria venir de simusol1.pl, si se lo llama en ese marco

    my $paraplot;
    my $GRAFICOS;
    my $AGRAFICOS;
    my $reruns;
    my $refcircuito={};
    my $cantvars=0;
    $archivos->{arg}->{$elemento}->{variables}=[];

    
    # PREPARA REFCIRCUITO Y GRAFICOS Y AGRAFICOS
    if ($ESTIPOSIMUL==10 or $EXT eq '.simul' ){  
                           # estetipo==10 NO ES NINGUNA DE LAS EXTENSIONES CONOCIDAs, solo llega aca si explicaitamente se lo llama
       # intenta trabajar solo con un archivo de datos y crear todo a partir de alli, puede ser simul o una extension
       # cualquiera
       #warn "OPCION 10  $CORTO  - $EXT $ESTIPOSIMUL es como si fuese archivo de datos\n";
       # sigo con otros archivos
       # ver simul contenidos en paraplot en subdirs

       # caso solo se tiene simul
       my ($ok3,$varsimul,$val,$undato,$cartelvar)= Simusol::ArchSimul::campossimul($arc->[4]);   
       if ($ok3 == -1){
           warn "No coincide encabezado con datos\n"; 
	   return -1;
           }

       $archivos->{arg}->{$elemento}->{variables}=$val;
       $archivos->{arg}->{$elemento}->{undato}=$undato;
       $cantvars=     scalar @{$val};
          
       # en todos los casos verifica que el numero de columnas se corresponda con el listado de columnas, si es simul es diferente
       #print "CANTVARS $cantvars \n";
 
       if ($cantvars){
          ($GRAFICOS,$AGRAFICOS,$reruns)=Simusol::ParaPlot::prepara($archivos,$elemento,$refcircuito,$cantvars,$val,$cartelvar);
          }	     
      	
    }elsif(($EXT eq '.caj') or ($EXT eq '.ds')) { # 	

  	  ########## poner  $archivos->{arg}->{$elemento}
	  # caso se parta de results y se tenga simul 
          my ($ok3,$varsimul,$val,$primerdato,$cartelvar)= Simusol::ArchSimul::campossimul($CORTOSIN.".simul");   
          # verficar ok3	
	  #print "VAL ", Dumper $val;

	  $archivos->{arg}->{$elemento}->{simul}->{$CORTOSIN.".simul"}->{variables}=$val;

	  my $tradvar={};;
	  if (-e $CORTOSIN.".tvar"){
              open  my $TVAR, "<", $CORTOSIN.".tvar" or die "No pude grabar $CORTOSIN.tvar $! ";
              while (my $row=<$TVAR>){
		  chomp $row;
		  my ($uno,$dos,$tres)=split(/:/,$row);
		  $tradvar->{$uno}=[$dos,$tres];
	      }
	      close $TVAR;	      
	  }

	  #print "TTTTTTT ", Dumper $tradvar;
	  
          # modifica refcircuito y crea GRAFICOS Y AGRAFICOS
	  # si hay cantvars asume que viene de un simul, por eso se pone cero, tampoco se usa $cartelvar en este caso
          ($GRAFICOS,$AGRAFICOS,$reruns)=Simusol::ParaPlot::prepara($archivos,$elemento,$refcircuito,0,$val,$cartelvar,$tradvar);  
             #cambia refcircuito leyendo caj o el mismo refcircuito
             # recrea lo mejor que puede refcircuito
	  ########### OJO GRAFICOS Y AGRAFICOS VER!!!!!


         
    }elsif ($EXT eq '.hashplot'){        
      
    

       # aca hay una descripcion del grafico sea con hash, results, o paraplot
       ############################ ESTO ES EL VIEJO paraplot.pl  
       #o la parte de simusol1.pl referida a la creacion de paraplots.

     
             $refcircuito = retrieve($arc->[4]); 
            
             my $todas='';
             my $archguardar = $refcircuito->{PROPIOSINDIA}; 
             my $archguardarcongnus = $refcircuito->{CORTOSINDIA};
  
             if ($todas) {
                    $archguardar = "$archguardar"."_$todas";
                    $archguardar=~ s/\s+/_/g;
                    $archguardarcongnus =~ s/([^\/]+)$/gnus\/$1/;
                    $refcircuito->{refvalores}->{GRAFICOS} = undef;
	            };
  
        }
        #print Dumper $refcircuito;
        #exit -1;



    
    #### PREPARA PARAPLOT  A PARTIR de refcircuito o/y AGRAFICOS o GRAFICOS     
    if ($refcircuito->{lisoutputssceptre} or $refcircuito->{refvalores}->{GRAFICOS} )  {   
	     #Simusol::ParaPlot::muestra_refcircuito($refcircuito,''); ## MUY OPA, solo imprime
	#my $archguardar = =$refcircuito->{PROPIOSINDIA}; + .simul
	     my $tradvar;
	     ($paraplot,$tradvar)=Simusol::ParaPlot::prograficarASUS($refcircuito);
	     #print "JJ $refcircuito->{PROPIOSINDIA}\n";
	     #foreach (keys %$tradvar){
             #    print "$_:$tradvar->{$_} \n";
	     #    }	
             }

    if($AGRAFICOS){ # si hay graficos y agregar?  nada, sale solo graficos
             $paraplot.=$AGRAFICOS;
	     }	
    if ($GRAFICOS){  # si hay graficos se anula RESULTADOS
	     $paraplot=$GRAFICOS;     
             }

    if ($paraplot){
	# cambia los nombres que contiene el paraplot de acuerdo adonde deba salvarse el paraplot
	my $fileparaplot;
	($paraplot,$fileparaplot)=Simusol::ParaPlot::relativosparaplot($archivos,$elemento,$paraplot);
	print "========= PARAPLOT  ======\n $paraplot \n=============================\n";
    
        # escribe .paraplot, no es necesario
	 
        if (not defined $commlineinfo->{opciones}->{ncp}  ){   # revisar relacion entre scp y scg
	    print "Escribe para $fileparaplot;      \n";
             Simusol::ParaPlot::escribepara($paraplot,$fileparaplot);      
             }
        # ojo el paraplot que se escribe puede estar en un lugar diferente del caj o hashplot que lo origina
        # y que usa este programa para sus tareas, por lo tanto la ubicacion de los archivos en el paraplot que
        # graba puede cambiar, esto recien se notara si alguien toma el nuevo paraplot creado y genera graficos con el
        # el paraplot que sale de aqui puede ser el que entra o el que viene de GRAFICOS etc
        } #else {
	##warn "No hay paraplot:  $elemento\n"; # puede no haber si es gra, no es error    
        #}

    
    if (defined $commlineinfo->{opciones}->{scp}){

	warn "Opcion solo creo paraplot vigente";
	return (1);

    }
    
    my $renglonesparaplot=[];
    my $archivogra;
    my $Xarchivosgra;
    my $losgnu={};
    
    # en ambos casos crean png y eps
    my $paraarchivos;   # para generar los archivos gra y gnu 
    my $paraver;        # para mostrar los graficos
    
    ############################ Apartir de aca es el simusol3.pl

    # prepara RENGLONES de paraplot a partir de archivo o texto paraplot
    if ($EXT eq '.paraplot' or $paraplot){
           	
           #caso sale de simul y no hay archivo paraplot todavia creado
	   # caso simul, hay arcdat pero no paraplot
           # todo eso del simul es un disparate, aca solo puede llegar si es caj ds hasplot paraplot	    

	   #separa texto o lee archivo, en ambos casos separa en renglones
	   my $date;
           ($date,$renglonesparaplot)=Simusol::ParaPlot::pararenglones($paraplot,$archivos,$elemento);
           }

    # prepara GRA y gnus con renglonesparaplot
    ### OJO esto de los reruns, viene de prepara!!! y si esta en un paraplot?
    
    if(scalar @$renglonesparaplot){
          # print "RENGLONES========= PARAPLOT  ======\n ", join("\n",@$renglones), "\n=============================\n";
	   my $ok;
           ($ok, $archivogra,$Xarchivosgra,$paraarchivos,$paraver,$losgnu)=Simusol::PlotGNU::gnuplot($renglonesparaplot,$elemento,$archivos,$reruns,
                                          $commlineinfo->{opciones}->{noverb},
        				  $commlineinfo->{opciones}->{graf},
					  $commlineinfo->{opciones}->{ncgf},
                                          " Preparado por $commlineinfo->{progname} \n  #   Se ejecuta con: gnuplot -persist"
                                          ); 
           #toma los datos de $paraplot o si es vacia de arch.paraplot, ojo el nombre arch igual hay que ponerlo
           # porque crea otros archivos con ese nombre (y otras extensiones)
	   
           if ($ok != 1){
	        warn "ERROR en gnuplot";
                return -1}
	  } 

    ################################# Ejecucion de los gra/gnu, sean de archivo de la linea de comando, sea de texto $paraver
    # crea png eps dumb y muestra X11
    if ($EXT eq '.gra'){
	   $archivogra=$CORTO;
           $Xarchivosgra=$CORTOSIN;
           }   	
    if ($commlineinfo->{opciones}->{graf} >= 3) {        
        Simusol::PlotGNU::ejecutagra($archivogra,$Xarchivosgra,$paraver,$losgnu,$archivos,$elemento);
      }else {
        explic(" Se ha pedido no mostrar graficos, pero se podran ver con $archivogra  " . '-' x 15);
        }
   

    # MUESTRA ESTADISTICAS
    my $propiosin=$archivos->{arg}->{$elemento}->{dirs}->[0];    
    # if (not $hayparend) {  # y porque no ver si existe archivo .par?
    if (-e  $propiosin.".par") {  # y porque no ver si existe archivo .par?
         system "cat $propiosin.par";
         };
    
    if (-e "$propiosin.res" and  $commlineinfo->{opciones}->{graf} ne '2'  and not $commlineinfo->{opciones}->{noverb}) {
         system "cat $propiosin.res";
         foreach (@$reruns) {  
           # quizas sea mas facil ver si hay archivos de ese tipo, 
           #aunque asi mas control, si hubo y no los borraron
           system "cat ${propiosin}_$_.res";
           }; 
         };
    
    return (1);  
}

################################################################################################################
 
sub versionnum{
    my $version=0.34;
    return $version;
}


################################################################################################################


sub help{
    my ($progname)=@_;
    pod2usage({-verbose => 0
		   ,-exit => 0    # esto lo hace salir???
		   ,-verbose=>2
	   ,-message => "   $progname ",versionnum(),"
       es parte del conjunto de scripts de S I M U S O L
            mas ayuda con   
	       man $progname
	    y luego salga con   q\n"   
	   });
}
################################################################################################################

sub version{
    my ($progname)=@_;
    print "$progname versión: ",versionnum(),"\n\n";
}


#)]}
__END__

=encoding utf8

=head1 NAME

simplot - Forma parte del proyecto Simusol.

L<http://www.simusol.org/simplot>

Realiza gráficos a partir de archivos con datos tabulados, e instrucciones especiales, orientados a 
publicaciones científicas.

Simusol usa simplot para graficar los resultados de sus simulaciones.

=head1 VERSION

  Version 0.34

=head1 SYNOPSIS

B<simplot> [I<opciones>]  [I<argumentos>]


=head1 OPTIONS AND ARGUMENTS

=over 5

=item B<-h  --help>

Muestra este mensaje de ayuda 

=item B<-v  --version>

Muestra version.

=item B<-d>

Produce algunos mensajes para depuracion de errores del programa. pone el debug en 1

=item B<-nov --noverb>

Disminuye la cantidad de informacion no esencial que se da al ususrio.
Es un nivel de debug menor al normal

=item B<-sb> 

es para no tener en cuenta el basearg de un argumento


=item B<-scp> 

es para solo crear paraplot (simusol1)  ojo si esta activada ncp no sirve para nada, y termina sin hacer nada  

=item B<-ncgf> 

no crea graphic files


=item B<-ncp> 

no crea paraplot, si bien lo calcula para su grafico

=item B<-path> 

es para elegir_archivo

=item B<-impr> 

genera archivos png con los dia

=item B<-buscar> 

es junto para path, usa find

=item B<-notrad> 

es para simusol, no llama a simusol1

=item B<-nofiles>

no ejecuta ningun archivo, solo las acciones previstas por las opciones como -kill

=item B<-clean>

borra los archivos creados la ultima corrida, con archivo .clean

=item B<-cleandep>

borra, todos los archivos existentes del tipo de los producidos, salvo que sean la FUENTE, o eso intenta

=item B<-cleanalter>

borra todos los archivos existentes salvo la fuete pero con los nombres que figuran en argumentos

=item B<-comp> 

es para comparar original con backup de todos los archivos producidos en una corrida con la anterior

=item B<-pueden> 

ser muchos con numero los producidos, compara el ultimo con el anterior, los dos ultimos

=item B<-noclas> 

pone los archivos en el directorio corriente 

=item B<-toda> 

cambia las variables de salida, las pone a todas que empiecen con las letras que se indiquen, se pueden poner varios toda
 
=item B<-t --todas> I<comi>  
 
Se  ignoran  los pedidos de 
resultados y de graficos del diagrama y se sustituyen por el pedido de  
todas las variables cuyos nombres, para el sceptre, comienzan con  I<comi>
Si en I<comi> hay espacios habra que usar comillas. 
Por ejemplo,  con  B<-t VC>  se tendra, si es posible, el grafico de 
voltajes de todos los condensadores; para circuitos termicos 
corresponde a las temperaturas de todos los acumuladores, lo que tambien
 se puede pedir con  B<-t 'TEMP C'>. 


=item B<-graf> 

que tipo de graficos se necesita, con 


=over    

=item     

0 no llama a simusol3,  


=item     

1 hace graficos interactivos, 


=item     

3 el normal


=item     

4 no hace graficos pero hace los png


=item  

5 o chicos hace graficos para dos columnas, con letras mas grandes



=back

=back



(o abreviaturas distinguibles)


para las opciones no importan mayusculas o minusculas;


=over

=item  I<argumentos>

Nombres de argumentos separados por espacio. Son los archivos con
esquemas y datos para la simulacion, o bien directorios que los contienen, o bien nombres de archivos sin argumento.

Si no se especifica un argumento, toma como argumento el directorio corriente.

Cuando se especifica un archivo específico lo procesa

Cuando se especifica un directorio busca en su interior recursivamente, los archivos del tipo requerido 
y procesa todos los que encuentra

Cuando se especifica un archivo sin extension, busca todos los archivos con ese nombre y extensiones posibles, seleccionando la 
extensión que esta al final de la cadena de producción: simul -> ds|caj-> paraplot -> gra

Este trabajo es independiente de la expansión de la terminal usada. Lo que la terminal expanda en la línea de comandos mediante los comodines * y ? u otros es tomado por simplot.
       	           
Para nombres de archivos si importa el uso de  mayusculas o minusculas, si al sistema operativo le importa.

=back




=head1 DESCRIPTION

Produce gráficos en pantalla usando gnupĺot, y archivos graficos del tipo png y eps.

Esta redactado mayormente en lenguaje perl.

Debiera funcionar bien en sistemas GNU/Linux, y aunque no lo hemos probado tambien en Windows o MAC, con los instaladores apropiados.

Sólo disponemos por el momento instaladores del tipo make para GNU/LINUX o sistemas tipo UNIX, desarrollados con el módulo perl ExtUtils::MakeMaker

=over 5

=item I<arch_i>    

alguno de los archivos indicados en I<archivos>

=item I<arch_circuito>   

Archivos indicados en I<archivos> que corresponde a un circuito.

=back


=head1 LANGUGUES

=over

=item RESULTADOS

=item PARAPLOT 

=back

=head1 FILES


B<simplot>, trabaja con numerosos tipos de archivos.

Cada elemento colocado como argumento se traduce en una lista de archivos del tipo que puede procesar 
B<simplot> los que se acumulan y luego procesan uno a uno.

=over 5

=item I<archivo>B<.simul>

Archivo con los datos a graficar.

Puede ser usado en reemplazo de los archivos que siguen para definir el gráfico.
También se puede usar cualquier archivo con el formato de datos en columnas.

La información de encabezado si está codificada de ciertas  formas, las usadas por simusol y simul,
puede ser usada.

Usualmente se pone como archivo de entrada alguno de los siguientes, donde esta indicado el simul a graficar.

=item I<archivo>B<.ds>

Archivo de entrada a simul, contiene las especificaciones de graficos en lenguaje 
RESULTADOS y/o en lenguaje PARAPLOT

=item I<archivo>B<.hashplot>

Archivo producido por simusol, con toda la información que leyo del diagrama, incluida la necesaria para simplot.
Es un hash almacenado con el módulo de perl B<Storable>.

=item I<archivo>B<.caj>

Archivo producido por simusol, que contiene  información que esta en los cuadros del diagrama.
De no estar disponible archivo.hasplot puede usarse para generar gráficos con algunas limitaciones,
es posible que algunas variables que esten en el simul, tengan otro nombre en el .caj.


=item I<archivo>B<.paraplot>

Archivo producido por simplot o leido por este, escrito en lenguaje paraplot

=item I<archivo>B<.gra>

Archivo ejecutable que muestra los graficos en pantalla y genera los png y eps.

=item I<archivo>B<.tvar>

Archivo que contiene como traduce simusol las variables del usuario a las variables del sceptre
Si existe simplot lo lee, y al procesar archivos caj, lo usa. Esta información esta contenida tambien en el 
-hashplot y en general siempre se prefiere usar hasplot a caj, pero de existir solo un caj esta info puede ser util.

=back

Y los que produce, algunos de los producidos pueden tambien ser usados como entrada.

=over

=item I<archivo>B<.paraplot>

=item I<archivo>B<.gra>

=item I<archivo>B<.log>

=item I<archivo>B<.ls3>

=item I<simplot>B<.ls3>


Archivo del tipo log con todo lo que debe registrarse previo a procesar un archivo específico.

3 es porque simusol produce muchos archivos de log, en particular uno por estapa., como simplot en parte se procesaba en la etapa 3, quedo 3.


=back


Archivos de salida específicos para cada gráfico  producido:

=over


=item I<archivo_GRAFO>B<.gnu>

=item I<archivo_GRAFO>B<.png>

=item I<archivo_GRAFO>B<.eps>

=item I<archivo_GRAFO>B<.dumb>


##  no no hace ya estas ?? ls1???

=back




Para que lo procese B<sceptre> y siempre que la traducion se haya completado.

=over

=item I<archi>B<.caj>

Con copia de la informacion de los cuadros del archivo-diagrama y copia de las
claves o formulas de traduccion que se han utilizado en los calculos.

=item I<arch_ultimo>B<.paraplot>

Con indicaciones a ser procesadas por B<simusol3.pl>
para producir graficos.


produce otros archivos necesarios para el objetivo global de Simusol;  
pueden ser de utilidad tambien al usuario.


=item I<arch_ultimo>B<.lss1>

Con algunos mensajes sobre la traduccion.




=back

Ademas utiliza STDOUT y STDERR  


=head1 AUTHORS

Dolores Alia de Saravia <dolores@gmail.com>

Luis R. Saravia <luis.saravia@gmail.com>

Diego Saravia <dsa@ututo.org> 

Nilsa Sarmiento <nilsa@ututo.org> 

 
