<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">#!/usr/bin/perl

my $DimMax = 6; # Dimension maximale, en cm.
my $cm     = 28.3464567; # Le centimÃ¨tre, en points postscript

my @Bbox   = ();

my $option = $ARGV[0];

# ------------------------------------------------------------------------------
# Existence du fichier
my $Fichier = $ARGV[1];
-f $Fichier or die "Fichier &lt;$Fichier&gt; introuvable !\n";

# ------------------------------------------------------------------------------
# Adaptation du fichier
{
  my $ps = &amp;FichierListe($Fichier);
  my $n  = 0;
  my $p  = 0;
  my $q  = 0;
  my $r  = 0;
  foreach (@$ps) {
    # On comment les lignes faisant rÃ©fÃ©rence aux fontes
    /pstoedit\.newfont/ and $_ = "%%&gt;&gt;&gt; $_";
    # Numero de ligne de %%Page (dÃ©but de la description)
    not($p) and /^\%\%Page: 1 1/ and $p = $n;
    # NumÃ©ro de ligne de %%BoundingBox: (atend)
    /^\%\%BoundingBox\: \(atend\)/ and $q = $n;
    # Acquisition de la BoundingBox
    /^\%\%BoundingBox\: ([\d\.-]+) ([\d\.-]+) ([\d\.-]+) ([\d\.-]+)/ and
      &amp;setBbox($1,$2,$3,$4) and $r = $n;
    # IncrÃ©mentation
    $n++;
  }
  my $t     = &amp;getTranslate();
  my $s     = &amp;getScale();
  if ($option == 1) {
    $$ps[$p] .= "\n$DimMax $cm mul $s $t";
  } elsif ($option == 2) {
    $$ps[$q] = $$ps[$r];
    $$ps[$r] = "%%&gt;&gt;";
  }
  open PS, "&gt; $Fichier"; print PS join("\n", @$ps); close PS;
}

# ==============================================================================
# === Manipulations de la BoundingBox
# ==============================================================================

# ------------------------------------------------------------------------------
# Acquisition de la BoundingBox
sub setBbox {
  @Bbox = @_;
  return 1;
}

# ------------------------------------------------------------------------------
# Translation
sub getTranslate {
  my $tx = "$Bbox[2] $Bbox[0] add 2 div neg";
  my $ty = "$Bbox[3] $Bbox[1] add 2 div neg";
  return "$tx $ty translate";
}

# ------------------------------------------------------------------------------
# Scale
sub getScale {
  my $lx = $Bbox[2] - $Bbox[0];
  my $ly = $Bbox[3] - $Bbox[1];
  my $m  = $lx; $m = $ly if $ly &gt; $lx;
  return "$m div dup scale";
}

# ==============================================================================
# === Contenu d'un fichier et Ã©lÃ©ments du nom
# ==============================================================================

# ------------------------------------------------------------------------------
# Contenu sous forme d'une liste de lignes
sub FichierListe {
  my $f = shift;
  open(FICH, $f) or die "Le fichier $f est introuvable !\n";
  my @l = &lt;FICH&gt;;
  close FICH;
  chomp @l;
  return \@l;
}

# ------------------------------------------------------------------------------
# Contenu d'un seul tenant
sub FichierScalaire {
  my $f = shift;
  local $/;
  open(FICH, $f) or die "Le fichier $f est introuvable !\n";
  my $c = &lt;FICH&gt;;
  close FICH;
  return $c;
}

# ------------------------------------------------------------------------------
# Nom, RÃ©pertoire et Extension d'un fichier
sub FichierNRE {
  my $f = shift;
  use File::Basename;
  my ($n, $r, $e) = fileparse($f,qw{\..*});
  $e =~ s/^\.//;
  return ($n, $r, $e);
}



</pre></body></html>