#!/usr/bin/perl

# Ce programme Perl rajoute les lignes d'alimentation vdd, vss, vdde,
# vsse et ventuellement clk au fichier rsultat de asimut pour la
# description VHDL initial. Le fichier de patterns rsultant servira 
# simuler la netliste logique produite par genlib en vrifiant qu'elle
# donne bien les mmes rsultats.

$f=@ARGV[0]."initial.pat";
$fv=@ARGV[0]."_avec_alim.pat";

$usage="usage: $0 fichier_description_patterns (sans le suffixe pat)\n";
$syntaxerror="erreur: le fichier $f n'est pas correct\n";

if (@ARGV!=1) {
	die $usage;
}

if (! (-f $f && -r $f)) {
	die "erreur: $f n'est pas un fichier lisible\n";
}

open (ENTREE,$f) || die "ne peut ouvrir $f\n";
open (SORTIE,">".$fv) || die "ne peut crer $fv\n";

# on recherche d'abord le mot-cl begin
while(<ENTREE>) {
	chop;
	last if (/^\s*begin/);
	print SORTIE "$_\n";
}		

if ($_ eq undef) {
	die $syntaxerror;
}

$i="in vdd B;;;\nin vss B;;;\nin vdde B;;;\nin vsse B;;;\n";
if (-f "noclk") {
	# la ligne d'horloge n'existait pas dans la description initiale,
	# on la rajoute
	$i.="in clk B;;;\n$_\n";
	$enplus=" 1 0 1 0 1 ";
} else {
	$i.="$_\n";
	$enplus=" 1 0 1 0 ";
}
print SORTIE "$i\n";

#  la fin de chaque pattern, on ajoute les valeurs des signaux
# rajouts. Ces valeurs se trouvent dans la variable $enplus .
while(<ENTREE>)
{
	chop;
	last if (/^\s*end\s*;/);
	if (!/^--/ && /;\s*$/) {
		$i=rindex($_,";");
		substr($_,$i,0)=$enplus;
	}
	print SORTIE "$_\n";
}

print SORTIE "$_\n";
close (ENTREE);
close (SORTIE);
