#!/usr/bin/perl
#=======================================================================
# Copyright (c) 2000-2001 Daniele Giacomini daniele@swlibero.org
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#=======================================================================
# a2engine OPTION ARGUMENT
#
# Programma frontale per l'opera Appunti di informatica libera.
#=======================================================================

# Program name.
$program_canonical_name = "a2engine";

# Program version.
$VERSION = "2002.03.04";

#-----------------------------------------------------------------------
# &help_syntax ()
sub help_syntax
{
    printf STDOUT
        ( "Usage: $0 OPZIONE ARGOMENTO\n"
        . "       $0 --help\n"
        . "       $0 --version\n"
        . "\n"
        . "Programma per la gestione specifica di Appunti di informatica libera.\n"
        . "\n"
        . "Opzioni:\n"
        . "--help        mostra questa guida.\n"
        . "--version     mostra la versione.\n"
        . "--pkg-html    prepara il pacchetto HTML per la distribuzione.\n"
        . "--pkg-text    prepara il pacchetto in formato testo puro per la distribuzione.\n"
        . "--pkg-dvi-a4  prepara il pacchetto del formato DVI A4 per la distribuzione.\n"
        . "--pkg-pdf-a4  prepara il pacchetto del formato PDF A4 per la distribuzione.\n"
        . "--pkg-ps-a4   prepara i pacchetti dei formati PostScript A4 per la distribuzione.\n"
        . "--pkg-ps-a7x4 prepara i pacchetti dei formati PostScript A7x4 per la distribuzione.\n"
        . "--pkg-ps-raccolte-a4\n"
	. "                prepara i pacchetti delle raccolte A4.\n"
        . "--pkg-ps-raccolte-a7x4\n"
	. "                prepara i pacchetti delle raccolte A7x4.\n"
        . "--pkg-esempi  prepara il pacchetto degli esempi per la distribuzione.\n"
        . "--pkg-deb     prepara il pacchetto Debian per la distribuzione (solo HTML).\n"
        . "--pkg-sgml    prepara il pacchetto dei sorgenti e altre directory.\n"
        . "--pkg-alml    prepara il pacchetto di Alml per la distribuzione.\n"
        . "--pkg-sgmltexi\n"
	. "              prepara il pacchetto di Sgmltexi per la distribuzione.\n"
        . "--pkg-textchk\n"
	. "              prepara il pacchetto di Textchk per la distribuzione.\n"
        . "--sgml-extract=FILE\n"
        . "              estrapola il file da un altro file SGML.\n"
        . "                In tal caso l'argomento finale  un file SGML contenente\n"
        . "                i commenti necessari per estrapolare il file indicato.\n"
        . "\n"
        . "Argomento:\n"
        . "In generale si tratta di un file PostScript.\n"
        . "\n"
        . "Report bugs to <daniele\@swlibero.org>\n");
}

#-----------------------------------------------------------------------
# Show version information.
#
# &version_info ()
#
sub version_info
{
    printf STDOUT
        ( "$program_canonical_name, $VERSION\n"
        . "\n"
        . "Copyright (c) 2000-2001 Daniele giacomini <daniele\@swlibero.org>\n"
        . "This is free software; see the source for copying conditions.\n"
        . "There is NO warranty; not even for MERCHANTABILITY or FITNESS\n"
        . "FOR A PARTICULAR PURPOSE.\n" );
}

#-----------------------------------------------------------------------
# Determinate the file name without extention.
#
# &root_name (FILE-NAME, EXTENTION)
#
sub root_name
{
    local( $file_name ) = $_[0];
    local( $extention_name ) = $_[1];
    local( $root_name ) = "";
    
    $file_name =~ m/^(.*)$extention_name$/;
    $root_name = $1;
    if ($root_name eq "")
      {
        # The extention is not the same.
        $root_name = $file_name;
      }
    return ("$root_name");
} # &root_name

#-----------------------------------------------------------------------
# Suddivide il file PostScript in raccolte.
#
# &raccolte (PAGE_LOC, FILE_PS)
#-----------------------------------------------------------------------
sub raccolte
{
    local ($page_loc) = $_[0];
    local ($file_ps) = $_[1];
    local ($line) = "";
    local (@pagine) = ();
    local ($stage) = "intro";
    local ($previous_n) = 0;
    local ($n) = 0;
    local ($start_page) = 1;
    local ($stop_page) = 0;
    local ($radice) = &root_name ($file_ps, ".ps");

    open (SPLIT_FILE, "< $page_loc");
    while ($line = <SPLIT_FILE>)
      {
	if ($stage eq "intro")
	  {
	    if ($line =~ m/tome\{([0-9]+)\}pageoffset\{([0-9]+)\}relativepage\{([0-9]+)\}/i)
	      {
		$n = $1;
		$stop_page = ($2 + $3 -1);
		$pagine[$previous_n] = ();
		$pagine[$previous_n][0] = $start_page;
		$pagine[$previous_n][1] = $stop_page;
		$start_page = ($stop_page + 1);
		$stage = "tome";
	      }
	  }
	elsif ($stage eq "tome")
	  {
	    if ($line =~ m/tome\{([0-9]+)\}pageoffset\{([0-9]+)\}relativepage\{([0-9]+)\}/i)
	      {
		$previous_n = $n;
		$n = $1;
		$stop_page = ($2 + $3 -1);
		$pagine[$previous_n] = ();
		$pagine[$previous_n][0] = $start_page;
		$pagine[$previous_n][1] = $stop_page;
		$start_page = ($stop_page + 1);
	      }
	    elsif ($line =~ m/appendix\{\}pageoffset\{([0-9]+)\}relativepage\{([0-9]+)\}/i)
	      {
		$stop_page = ($1 + $2 -1);
		$pagine[$n] = ();
		$pagine[$n][0] = $start_page;
		$pagine[$n][1] = $stop_page;
		$start_page = ($stop_page + 1);
		$stage = "appendix";
	      }
	    elsif ($line =~ m/index\{\}pageoffset\{([0-9]+)\}relativepage\{([0-9]+)\}/i)
	      {
		$stop_page = ($1 + $2 -1);
		$pagine[$n] = ();
		$pagine[$n][0] = $start_page;
		$pagine[$n][1] = $stop_page;
		$start_page = ($stop_page + 1);
		$stage = "index";
	      }
	    elsif ($line =~ m/eof\{\}pageoffset\{([0-9]+)\}relativepage\{([0-9]+)\}/i)
	      {
		$stop_page = ($1 + $2);
		$pagine[$n] = ();
		$pagine[$n][0] = $start_page;
		$pagine[$n][1] = $stop_page;
		$start_page = ($stop_page + 1);
		$stage = "eof";
	      }
	  }
	elsif ($stage eq "appendix")
	  {
	    if ($line =~ m/index\{\}pageoffset\{([0-9]+)\}relativepage\{([0-9]+)\}/i)
	      {
		$stop_page = ($1 + $2 -1);
		$n++;
		$pagine[$n] = ();
		$pagine[$n][0] = $start_page;
		$pagine[$n][1] = $stop_page;
		$start_page = ($stop_page + 1);
		$stage = "index";
	      }
	    elsif ($line =~ m/eof\{\}pageoffset\{([0-9]+)\}relativepage\{([0-9]+)\}/i)
	      {
		$stop_page = ($1 + $2);
		$n++;
		$pagine[$n] = ();
		$pagine[$n][0] = $start_page;
		$pagine[$n][1] = $stop_page;
		$start_page = ($stop_page + 1);
		$stage = "eof";
	      }
	  }
	elsif ($stage eq "index")
	  {
	    if ($line =~ m/eof\{\}pageoffset\{([0-9]+)\}relativepage\{([0-9]+)\}/i)
	      {
		$stop_page = ($1 + $2);
		$n++;
		$pagine[$n] = ();
		$pagine[$n][0] = $start_page;
		$pagine[$n][1] = $stop_page;
		$start_page = ($stop_page + 1);
		$stage = "eof";
	      }
	  }
      }        
    close (SPLIT_FILE);

    #-------------------------------------------------------------------
    # Prima raccolta.
    # tomi 1 e 2
    #-------------------------------------------------------------------
    system ("psselect -q -p "
            . $pagine[0][0]
	    . "-"
	    . $pagine[0][1]
	    . ","
            . $pagine[1][0]
	    . "-"
	    . $pagine[1][1]
	    . ","
            . $pagine[2][0]
	    . "-"
	    . $pagine[2][1]
	    . ","
            . $pagine[$#pagine-1][0]
	    . "-"
	    . $pagine[$#pagine-1][1]
	    . ","
            . $pagine[$#pagine][0]
	    . "-"
	    . $pagine[$#pagine][1]
	    . " $file_ps $radice.A.ps");

    #-------------------------------------------------------------------
    # Seconda raccolta.
    # tomi 3, 4, 5, 6 (reti)
    #-------------------------------------------------------------------
    system ("psselect -q -p "
            . $pagine[0][0]
	    . "-"
	    . $pagine[0][1]
	    . ","
            . $pagine[3][0]
	    . "-"
	    . $pagine[3][1]
	    . ","
            . $pagine[4][0]
	    . "-"
	    . $pagine[4][1]
	    . ","
            . $pagine[5][0]
	    . "-"
	    . $pagine[5][1]
	    . ","
            . $pagine[6][0]
	    . "-"
	    . $pagine[6][1]
	    . ","
            . $pagine[$#pagine-1][0]
	    . "-"
	    . $pagine[$#pagine-1][1]
	    . ","
            . $pagine[$#pagine][0]
	    . "-"
	    . $pagine[$#pagine][1]
	    . " $file_ps $radice.B.ps");

    #-------------------------------------------------------------------
    # Terza raccolta.
    # tomo 7   (scrittura)
    #-------------------------------------------------------------------
    system ("psselect -q -p "
            . $pagine[0][0]
	    . "-"
	    . $pagine[0][1]
	    . ","
            . $pagine[7][0]
	    . "-"
	    . $pagine[7][1]
	    . ","
            . $pagine[$#pagine-1][0]
	    . "-"
	    . $pagine[$#pagine-1][1]
	    . ","
            . $pagine[$#pagine][0]
	    . "-"
	    . $pagine[$#pagine][1]
	    . " $file_ps $radice.C.ps");

    #-------------------------------------------------------------------
    # Quarta raccolta.
    # tomo 8, 9, 10   (programmazione e software scientifico)
    #-------------------------------------------------------------------
    system ("psselect -q -p "
            . $pagine[0][0]
	    . "-"
	    . $pagine[0][1]
	    . ","
            . $pagine[8][0]
	    . "-"
	    . $pagine[8][1]
	    . ","
            . $pagine[9][0]
	    . "-"
	    . $pagine[9][1]
	    . ","
            . $pagine[10][0]
	    . "-"
	    . $pagine[10][1]
	    . ","
            . $pagine[$#pagine-1][0]
	    . "-"
	    . $pagine[$#pagine-1][1]
	    . ","
            . $pagine[$#pagine][0]
	    . "-"
	    . $pagine[$#pagine][1]
	    . " $file_ps $radice.D.ps");

    #-------------------------------------------------------------------
    # Quinta raccolta.
    # tomo 11, 12, 13, 14   (varie, LDR, licenze)
    #-------------------------------------------------------------------
    system ("psselect -q -p "
            . $pagine[0][0]
	    . "-"
	    . $pagine[0][1]
	    . ","
            . $pagine[11][0]
	    . "-"
	    . $pagine[11][1]
	    . ","
            . $pagine[12][0]
	    . "-"
	    . $pagine[12][1]
	    . ","
            . $pagine[13][0]
	    . "-"
	    . $pagine[13][1]
	    . ","
            . $pagine[14][0]
	    . "-"
	    . $pagine[14][1]
	    . ","
            . $pagine[$#pagine-1][0]
	    . "-"
	    . $pagine[$#pagine-1][1]
	    . ","
            . $pagine[$#pagine][0]
	    . "-"
	    . $pagine[$#pagine][1]
	    . " $file_ps $radice.E.ps");

}

#----------------------------------------------------------------------
# Start of program.
#----------------------------------------------------------------------
local ($argument)       = "";
local ($action)         = "";
local ($n)              = 0;
local ($file_to_be_extracted) = "";

# Scan arguments.
for ($n = 0; $n <= $#ARGV; $n++)
  {
    # Analyze argument $n.
    if ($ARGV[$n] !~ m/^-/)
     {
        # This argument has no minus at the beguinning.
	# This must be a final argument.
        $argument = $ARGV[$n];
     }
    elsif ($ARGV[$n] eq "--help")
      {
        # The user is asking for help.
        &help_syntax;
        exit 0;
      }
    elsif ($ARGV[$n] eq "--version")
      {
        # The user wants to know the program version.
        &version_info;
        exit 0;

      }
    elsif ($ARGV[$n] eq "--pkg-html")
      {
	$action = "pkg-html";
      }
    elsif ($ARGV[$n] eq "--pkg-text")
      {
	$action = "pkg-text";
      }
    elsif ($ARGV[$n] eq "--pkg-pdf-a4")
      {
	$action = "pkg-pdf-a4";
      }
    elsif ($ARGV[$n] eq "--pkg-dvi-a4")
      {
	$action = "pkg-dvi-a4";
      }
    elsif ($ARGV[$n] eq "--pkg-ps-a4")
      {
	$action = "pkg-ps-a4";
      }
    elsif ($ARGV[$n] eq "--pkg-ps-raccolte-a4")
      {
	$action = "pkg-ps-raccolte-a4";
      }
    elsif ($ARGV[$n] eq "--pkg-ps-a7x4")
      {
	$action = "pkg-ps-a7x4";
      }
    elsif ($ARGV[$n] eq "--pkg-ps-raccolte-a7x4")
      {
	$action = "pkg-ps-raccolte-a7x4";
      }
    elsif ($ARGV[$n] eq "--pkg-esempi")
      {
	$action = "pkg-esempi";
      }
    elsif ($ARGV[$n] eq "--pkg-alml")
      {
	$action = "pkg-alml";
      }
    elsif ($ARGV[$n] eq "--pkg-sgmltexi")
      {
	$action = "pkg-sgmltexi";
      }
    elsif ($ARGV[$n] eq "--pkg-textchk")
      {
	$action = "pkg-textchk";
      }
    elsif ($ARGV[$n] eq "--pkg-deb")
      {
	$action = "pkg-deb";
      }
    elsif ($ARGV[$n] eq "--pkg-sgml")
      {
	$action = "pkg-sgml";
      }
    elsif ($ARGV[$n] =~ m/--sgml-extract=([^ ]+)/)
      {
        $file_to_be_extracted = $1;
	$action = "sgml-extract";
      }
    else
      {
	print STDERR ("Argomento sconosciuto: " . $ARGV[$n] . "\n");
      }
  }

# Do the work.
if ($action eq "pkg-sgml")
  {
    local ($version) = `cat EDIZIONE`;
    chomp ($version);
    mkdir ("$version", 0755);
    system ("chmod ug-s $version");
    mkdir ("$version/$version", 0755);
    system ("cd $version ; rm corrente ; ln -s $version corrente ; cd ..");
    system ("cp COPYING $version/$version");
    mkdir ("$version/sorgente", 0755);
    mkdir ("$version/sorgente/figure", 0755);
    mkdir ("$version/sorgente/debian", 0755);
    system ("cp `ls a2*.sgml | tail -n 1` $version/sorgente");
    system ("cp a2.css $version/sorgente");
    system ("cp Makefile $version/sorgente");
    system ("cp EDIZIONE $version/sorgente");
    system ("cp COPYING $version/sorgente");
    system ("cp -dpR ortografia $version/sorgente");
    system ("cp -dpR .textchk* $version/sorgente");
    system ("cp -dpR citazioni $version/sorgente");
    system ("cp -dpR contributi $version/sorgente");
    system ("cp -dpR formalita $version/sorgente");
    system ("cp -dpR inclusi $version/sorgente");
    system ("cp -dpR ospiti $version/sorgente");
    system ("cp -dpR antologie $version/sorgente");
    system ("cp -dpR figure/ $version/sorgente/");
    system ("cp -dpR debian/ $version/sorgente/");
    system ("cp -dpR sistemi-mini $version");
    system ("cp -dpR nanoLinux $version");
    system ("cp -dpR software $version");
    mkdir ("$version/sorgente/sistemi-mini", 0755);
    mkdir ("$version/sorgente/nanoLinux", 0755);
    mkdir ("$version/sorgente/software", 0755);
    system ("cd $version/sorgente ; tar czvf ../$version/a2-$version.sgml.tar.gz . ; cd ../..");
    system ("rm -fr $version/sorgente");
  }
elsif ($action eq "pkg-html")
  {
    local ($version) = `cat EDIZIONE`;
    chomp ($version);
    mkdir ("$version", 0755);
    system ("chmod ug-s $version");
    mkdir ("$version/HTML", 0755);
    mkdir ("$version/$version", 0755);
    system ("cd $version ; rm corrente ; ln -s $version corrente ; cd ..");
    system ("cp COPYING $version/$version");
    system ("cp -dpR *.html $version/HTML");
    system ("cp a2.html $version/HTML/index.html");
    system ("cp *.jpg    $version/HTML");
    system ("cp a2.css   $version/HTML");
    system ("chmod 0444 $version/HTML/*");
    system ("cd $version/HTML ; tar czvf ../$version/a2-$version.html.tar.gz . ; cd ../..");
  }
elsif ($action eq "pkg-text")
  {
    local ($version) = `cat EDIZIONE`;
    chomp ($version);
    mkdir ("$version", 0755);
    system ("chmod ug-s $version");
    mkdir ("$version/$version", 0755);
    system ("cd $version ; rm corrente ; ln -s $version corrente ; cd ..");
    system ("cp COPYING $version/$version");
    system ("cat a2-$version.txt | gzip -9 > $version/$version/a2-$version.txt.gz");
  }
elsif ($action eq "pkg-pdf-a4")
  {
    local ($version) = `cat EDIZIONE`;
    chomp ($version);
    mkdir ("$version", 0755);
    system ("chmod ug-s $version");
    mkdir ("$version/$version", 0755);
    system ("cd $version ; rm corrente ; ln -s $version corrente ; cd ..");
    system ("cp COPYING $version/$version");
    system ("cat a2-$version.a4.pdf | gzip -9 > $version/$version/a2-$version.a4.pdf.gz");
  }
elsif ($action eq "pkg-dvi-a4")
  {
    local ($version) = `cat EDIZIONE`;
    chomp ($version);
    mkdir ("$version", 0755);
    system ("chmod ug-s $version");
    mkdir ("$version/$version", 0755);
    mkdir ("$version/DVI", 0755);
    system ("rm -fr $version/DVI/*");
    #mkdir ("$version/DVI/figure", 0755);
    system ("cd $version ; rm corrente ; ln -s $version corrente ; cd ..");
    system ("cp COPYING $version/$version");
    system ("cp a2-$version.a4.dvi $version/DVI");
    system ("cp [0-9].ps $version/DVI/");
    system ("cp [0-9][0-9].ps $version/DVI/");
    system ("cp [0-9][0-9][0-9].ps $version/DVI/");
    system ("cp [0-9][0-9][0-9][0-9].ps $version/DVI/");
    system ("cd $version/DVI ; tar czvf ../$version/a2-$version.a4.dvi.tar.gz . ; cd ../..");
  }
elsif ($action eq "pkg-ps-a4")
  {
    local ($version) = `cat EDIZIONE`;
    chomp ($version);
    local ($file) = "";

    mkdir ("$version", 0755);
    system ("chmod ug-s $version");
    mkdir ("$version/$version", 0755);
    system ("cd $version ; rm corrente ; ln -s $version corrente ; cd ..");
    system ("cp COPYING $version/$version");
    system ("cp a2-$version.a4.ps $version/$version");
    system ("cd $version/$version/ ; gzip -9 *.ps");
    # suddivisioni
    mkdir ("$version/$version/tomi", 0755);
    mkdir ("$version/$version/parti", 0755);
    # a4
    mkdir ("$version/$version/tomi/a4", 0755);
    mkdir ("$version/$version/parti/a4", 0755);
    opendir (A4_TOMI, "tmp_tomi");
    while ($file = readdir (A4_TOMI))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("cp tmp_tomi/$file $version/$version/tomi/a4/"
		    . &root_name ($file, ".ps")
		    . ".a4.ps");
	    system ("cd $version/$version/tomi/a4 ; gzip -9 *.ps");
	  }
      }    
    closedir (A4_TOMI);
    opendir (A4_PARTI, "tmp_parti");
    while ($file = readdir (A4_PARTI))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("cp tmp_parti/$file $version/$version/parti/a4/"
		    . &root_name ($file, ".ps")
		    . ".a4.ps");
	    system ("cd $version/$version/parti/a4 ; gzip -9 *.ps");
	  }
      }    
    closedir (A4_PARTI);
    # a5-2-a4-1h-1
    mkdir ("$version/$version/tomi/a5-2-a4-1h-1", 0755);
    mkdir ("$version/$version/parti/a5-2-a4-1h-1", 0755);
    opendir (A4_TOMI, "tmp_tomi");
    while ($file = readdir (A4_TOMI))
      {
	if ($file =~ m/\.ps$/)
	  {
	    print STDOUT ("alml-extra --a4-to-a5-2-a4-1h-1 tmp_tomi/$file\n");
	    system ("alml-extra --a4-to-a5-2-a4-1h-1 tmp_tomi/$file");
	    system ("mv tmp_tomi/*.a5-2-a4-1h-1.ps $version/$version/tomi/a5-2-a4-1h-1");
	    system ("cd $version/$version/tomi/a5-2-a4-1h-1 ; gzip -9 *.ps");
	  }
      }    
    closedir (A4_TOMI);
    opendir (A4_PARTI, "tmp_parti");
    while ($file = readdir (A4_PARTI))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("alml-extra --a4-to-a5-2-a4-1h-1 tmp_parti/$file");
	    system ("mv tmp_parti/*.a5-2-a4-1h-1.ps $version/$version/parti/a5-2-a4-1h-1");
	    system ("cd $version/$version/parti/a5-2-a4-1h-1 ; gzip -9 *.ps");
	  }
      }    
    closedir (A4_PARTI);
    # a5-2-a4-1h-10
    mkdir ("$version/$version/tomi/a5-2-a4-1h-10", 0755);
    mkdir ("$version/$version/parti/a5-2-a4-1h-10", 0755);
    opendir (A4_TOMI, "tmp_tomi");
    while ($file = readdir (A4_TOMI))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("alml-extra --a4-to-a5-2-a4-1h-10 tmp_tomi/$file");
	    system ("mv tmp_tomi/*.a5-2-a4-1h-10.ps $version/$version/tomi/a5-2-a4-1h-10");
	    system ("cd $version/$version/tomi/a5-2-a4-1h-10 ; gzip -9 *.ps");
	  }
      }    
    closedir (A4_TOMI);
    opendir (A4_PARTI, "tmp_parti");
    while ($file = readdir (A4_PARTI))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("alml-extra --a4-to-a5-2-a4-1h-10 tmp_parti/$file");
	    system ("mv tmp_parti/*.a5-2-a4-1h-10.ps $version/$version/parti/a5-2-a4-1h-10");
	    system ("cd $version/$version/parti/a5-2-a4-1h-10 ; gzip -9 *.ps");
	  }
      }    
    closedir (A4_PARTI);
    # a6-4-a4-2h-8
    mkdir ("$version/$version/tomi/a6-4-a4-2h-8", 0755);
    mkdir ("$version/$version/parti/a6-4-a4-2h-8", 0755);
    opendir (A4_TOMI, "tmp_tomi");
    while ($file = readdir (A4_TOMI))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("alml-extra --a4-to-a6-4-a4-2h-8 tmp_tomi/$file");
	    system ("mv tmp_tomi/*.a6-4-a4-2h-8.ps $version/$version/tomi/a6-4-a4-2h-8");
	    system ("cd $version/$version/tomi/a6-4-a4-2h-8 ; gzip -9 *.ps");
	  }
      }    
    closedir (A4_TOMI);
    opendir (A4_PARTI, "tmp_parti");
    while ($file = readdir (A4_PARTI))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("alml-extra --a4-to-a6-4-a4-2h-8 tmp_parti/$file");
	    system ("mv tmp_parti/*.a6-4-a4-2h-8.ps $version/$version/parti/a6-4-a4-2h-8");
	    system ("cd $version/$version/parti/a6-4-a4-2h-8 ; gzip -9 *.ps");
	  }
      }    
    closedir (A4_PARTI);
  }
elsif ($action eq "pkg-ps-a7x4")
  {
    local ($version) = `cat EDIZIONE`;
    chomp ($version);
    local ($file) = "";

    mkdir ("$version", 0755);
    system ("chmod ug-s $version");
    mkdir ("$version/$version", 0755);
    system ("cd $version ; rm corrente ; ln -s $version corrente ; cd ..");
    system ("cp COPYING $version/$version");
    system ("cp a2-$version.a7x4.ps $version/$version");
    system ("cd $version/$version/ ; gzip -9 *.ps");
    # suddivisioni
    mkdir ("$version/$version/tomi", 0755);
    mkdir ("$version/$version/parti", 0755);
    # a4
    mkdir ("$version/$version/tomi/a7x4", 0755);
    mkdir ("$version/$version/parti/a7x4", 0755);
    opendir (A4_TOMI, "tmp_tomi");
    while ($file = readdir (A4_TOMI))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("cp tmp_tomi/$file $version/$version/tomi/a7x4/"
		    . &root_name ($file, ".ps")
		    . ".a7x4.ps");
	    system ("cd $version/$version/tomi/a7x4 ; gzip -9 *.ps");
	  }
      }    
    closedir (A4_TOMI);
    opendir (A4_PARTI, "tmp_parti");
    while ($file = readdir (A4_PARTI))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("cp tmp_parti/$file $version/$version/parti/a7x4/"
		    . &root_name ($file, ".ps")
		    . ".a7x4.ps");
	    system ("cd $version/$version/parti/a7x4 ; gzip -9 *.ps");
	  }
      }    
    closedir (A4_PARTI);
    # a7x4-2-a4-1v-1
    mkdir ("$version/$version/tomi/a7x4-2-a4-1v-1", 0755);
    mkdir ("$version/$version/parti/a7x4-2-a4-1v-1", 0755);
    opendir (A4_TOMI, "tmp_tomi");
    while ($file = readdir (A4_TOMI))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("alml-extra --a7x4-to-a7x4-2-a4-1v-1 tmp_tomi/$file");
	    system ("mv tmp_tomi/*.a7x4-2-a4-1v-1.ps $version/$version/tomi/a7x4-2-a4-1v-1");
	    system ("cd $version/$version/tomi/a7x4-2-a4-1v-1 ; gzip -9 *.ps");
	  }
      }    
    closedir (A4_TOMI);
    opendir (A4_PARTI, "tmp_tomi");
    while ($file = readdir (A4_PARTI))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("alml-extra --a7x4-to-a7x4-2-a4-1v-1 tmp_parti/$file");
	    system ("mv tmp_parti/*.a7x4-2-a4-1v-1.ps $version/$version/parti/a7x4-2-a4-1v-1");
	    system ("cd $version/$version/parti/a7x4-2-a4-1v-1 ; gzip -9 *.ps");
	  }
      }    
    closedir (A4_PARTI);
    # a7x4-2-a4-1v-10
    mkdir ("$version/$version/tomi/a7x4-2-a4-1v-10", 0755);
    mkdir ("$version/$version/parti/a7x4-2-a4-1v-10", 0755);
    opendir (A4_TOMI, "tmp_tomi");
    while ($file = readdir (A4_TOMI))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("alml-extra --a7x4-to-a7x4-2-a4-1v-10 tmp_tomi/$file");
	    system ("mv tmp_tomi/*.a7x4-2-a4-1v-10.ps $version/$version/tomi/a7x4-2-a4-1v-10");
	    system ("cd $version/$version/tomi/a7x4-2-a4-1v-10 ; gzip -9 *.ps");
	  }
      }    
    closedir (A4_TOMI);
    opendir (A4_PARTI, "tmp_tomi");
    while ($file = readdir (A4_PARTI))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("alml-extra --a7x4-to-a7x4-2-a4-1v-10 tmp_parti/$file");
	    system ("mv tmp_parti/*.a7x4-2-a4-1v-10.ps $version/$version/parti/a7x4-2-a4-1v-10");
	    system ("cd $version/$version/parti/a7x4-2-a4-1v-10 ; gzip -9 *.ps");
	  }
      }    
    closedir (A4_PARTI);

  }
elsif ($action eq "pkg-ps-raccolte-a4")
  {
    local ($version) = `cat EDIZIONE`;
    chomp ($version);
    local ($file) = "";

    mkdir ("$version", 0755);
    system ("chmod ug-s $version");
    mkdir ("$version/$version", 0755);
    system ("cd $version ; rm corrente ; ln -s $version corrente ; cd ..");
    system ("cp COPYING $version/$version");
    system ("rm -fr tmp_raccolte");
    system ("mkdir tmp_raccolte");
    system ("cp a2-$version.a4.ps tmp_raccolte/a2-$version.ps");
    # suddivisioni
    &raccolte ("a2.pageloc", "tmp_raccolte/a2-$version.ps");
    system ("rm -f tmp_raccolte/a2-$version.ps");
    # directory di destinazione
    mkdir ("$version/$version/raccolte", 0755);
    # a4
    mkdir ("$version/$version/raccolte/a4", 0755);
    opendir (RACCOLTE, "tmp_raccolte");
    while ($file = readdir (RACCOLTE))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("cp tmp_raccolte/$file $version/$version/raccolte/a4/"
		    . &root_name ($file, ".ps")
		    . ".a4.ps");
	    system ("cd $version/$version/raccolte/a4 ; gzip -9 *.ps");
	  }
      }    
    closedir (RACCOLTE);
    # a5-2-a4-1h-1
    mkdir ("$version/$version/raccolte/a5-2-a4-1h-1", 0755);
    opendir (RACCOLTE, "tmp_raccolte");
    while ($file = readdir (RACCOLTE))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("alml-extra --a4-to-a5-2-a4-1h-1 tmp_raccolte/$file");
	    system ("mv tmp_raccolte/*.a5-2-a4-1h-1.ps $version/$version/raccolte/a5-2-a4-1h-1");
	    system ("cd $version/$version/raccolte/a5-2-a4-1h-1 ; gzip -9 *.ps");
	  }
      }    
    closedir (RACCOLTE);
    # a5-2-a4-1h-10
    mkdir ("$version/$version/raccolte/a5-2-a4-1h-10", 0755);
    opendir (RACCOLTE, "tmp_raccolte");
    while ($file = readdir (RACCOLTE))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("alml-extra --a4-to-a5-2-a4-1h-10 tmp_raccolte/$file");
	    system ("mv tmp_raccolte/*.a5-2-a4-1h-10.ps $version/$version/raccolte/a5-2-a4-1h-10");
	    system ("cd $version/$version/raccolte/a5-2-a4-1h-10 ; gzip -9 *.ps");
	  }
      }    
    closedir (RACCOLTE);
    # a6-4-a4-2h-8
    mkdir ("$version/$version/raccolte/a6-4-a4-2h-8", 0755);
    opendir (RACCOLTE, "tmp_raccolte");
    while ($file = readdir (RACCOLTE))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("alml-extra --a4-to-a6-4-a4-2h-8 tmp_raccolte/$file");
	    system ("mv tmp_raccolte/*.a6-4-a4-2h-8.ps $version/$version/raccolte/a6-4-a4-2h-8");
	    system ("cd $version/$version/raccolte/a6-4-a4-2h-8 ; gzip -9 *.ps");
	  }
      }    
    closedir (RACCOLTE);
  }
elsif ($action eq "pkg-ps-raccolte-a7x4")
  {
    local ($version) = `cat EDIZIONE`;
    chomp ($version);
    local ($file) = "";

    mkdir ("$version", 0755);
    system ("chmod ug-s $version");
    mkdir ("$version/$version", 0755);
    system ("cd $version ; rm corrente ; ln -s $version corrente ; cd ..");
    system ("cp COPYING $version/$version");
    system ("rm -fr tmp_raccolte");
    system ("mkdir tmp_raccolte");
    system ("cp a2-$version.a7x4.ps tmp_raccolte/a2-$version.ps");
    # suddivisioni
    &raccolte ("a2.pageloc", "tmp_raccolte/a2-$version.ps");
    system ("rm -f tmp_raccolte/a2-$version.ps");
    # directory di destinazione
    mkdir ("$version/$version/raccolte", 0755);
    # a7x4
    mkdir ("$version/$version/raccolte/a7x4", 0755);
    opendir (RACCOLTE, "tmp_raccolte");
    while ($file = readdir (RACCOLTE))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("cp tmp_raccolte/$file $version/$version/raccolte/a7x4/"
		    . &root_name ($file, ".ps")
		    . ".a7x4.ps");
	    system ("cd $version/$version/raccolte/a7x4 ; gzip -9 *.ps");
	  }
      }    
    closedir (RACCOLTE);
    # a7x4-2-a4-1v-1
    mkdir ("$version/$version/raccolte/a7x4-2-a4-1v-1", 0755);
    opendir (RACCOLTE, "tmp_raccolte");
    while ($file = readdir (RACCOLTE))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("alml-extra --a7x4-to-a7x4-2-a4-1v-1 tmp_raccolte/$file");
	    system ("mv tmp_raccolte/*.a7x4-2-a4-1v-1.ps $version/$version/raccolte/a7x4-2-a4-1v-1");
	    system ("cd $version/$version/raccolte/a7x4-2-a4-1v-1 ; gzip -9 *.ps");
	  }
      }    
    closedir (RACCOLTE);
    # a7x4-2-a4-1v-10
    mkdir ("$version/$version/raccolte/a7x4-2-a4-1v-10", 0755);
    opendir (RACCOLTE, "tmp_raccolte");
    while ($file = readdir (RACCOLTE))
      {
	if ($file =~ m/\.ps$/)
	  {
	    system ("alml-extra --a7x4-to-a7x4-2-a4-1v-10 tmp_raccolte/$file");
	    system ("mv tmp_raccolte/*.a7x4-2-a4-1v-10.ps $version/$version/raccolte/a7x4-2-a4-1v-10");
	    system ("cd $version/$version/raccolte/a7x4-2-a4-1v-10 ; gzip -9 *.ps");
	  }
      }    
    closedir (RACCOLTE);
  }
elsif ($action eq "pkg-esempi")
  {
    local ($version) = `cat EDIZIONE`;
    chomp ($version);
    mkdir ("$version", 0755);
    system ("chmod ug-s $version");
    mkdir ("$version/$version", 0755);
    system ("cd $version ; rm corrente ; ln -s $version corrente ; cd ..");
    system ("cp COPYING $version/$version");
    system ("tar czvf $version/$version/a2-$version.esempi.tar.gz esempi");
  }
elsif ($action eq "pkg-alml")
  {
    local ($version) = `cat EDIZIONE`;
    chomp ($version);
    system ("cp -f EDIZIONE Alml/VERSION");
    mkdir ("$version", 0755);
    system ("chmod ug-s $version");
    mkdir ("$version/$version", 0755);
    system ("cd $version ; rm corrente ; ln -s $version corrente ; cd ..");
    system ("cp COPYING $version/$version");
    system ("rm -rf $version/alml-$version");
    system ("cp -dpR Alml $version/alml-$version");
    system ("cd $version/alml-$version ; make Almlclean ; cd ..");
    system ("cd $version ; tar czvf $version/alml-$version.tar.gz alml-$version");
  }
elsif ($action eq "pkg-sgmltexi")
  {
    local ($version) = `cat EDIZIONE`;
    chomp ($version);
    system ("cp -f EDIZIONE Sgmltexi/EDITION");
    system ("cp -f EDIZIONE Sgmltexi/doc/EDITION");
    mkdir ("$version", 0755);
    system ("chmod ug-s $version");
    mkdir ("$version/software", 0755);
    system ("rm -rf $version/sgmltexi-$version");
    system ("cp -dpR Sgmltexi $version/sgmltexi-$version");
    system ("cd $version/sgmltexi-$version ; make Sgmltexiclean ; cd ..");
    system ("cd $version ; tar czvf software/sgmltexi-$version.tar.gz sgmltexi-$version");
  }
elsif ($action eq "pkg-textchk")
  {
    local ($version) = `cat EDIZIONE`;
    chomp ($version);
    system ("cp -f EDIZIONE Textchk/EDITION");
    system ("cp -f EDIZIONE Textchk/doc/EDITION");
    mkdir ("$version", 0755);
    system ("chmod ug-s $version");
    mkdir ("$version/software", 0755);
    system ("rm -rf $version/textchk-$version");
    system ("cp -dpR Textchk $version/textchk-$version");
    system ("cd $version/textchk-$version ; make Textchkclean ; cd ..");
    system ("cd $version ; tar czvf software/textchk-$version.tar.gz textchk-$version");
  }
elsif ($action eq "pkg-deb")
  {
    local ($version) = `cat EDIZIONE`;
    chomp ($version);
    mkdir ("$version", 0755);
    system ("chmod ug-s $version");
    mkdir ("$version/$version", 0755);
    system ("cd $version ; rm corrente ; ln -s $version corrente ; cd ..");
    system ("cp COPYING $version/$version");
    mkdir ("$version/.deb", 0755);
    mkdir ("$version/.deb/DEBIAN", 0755);
    mkdir ("$version/.deb/usr", 0755);
    mkdir ("$version/.deb/usr/share", 0755);
    mkdir ("$version/.deb/usr/share/doc", 0755);
    mkdir ("$version/.deb/usr/share/doc/a2", 0755);
    system ("cp $version/HTML/* $version/.deb/usr/share/doc/a2");
    system ("echo *Appunti di informatica libera* is released under the GNU-GPL license. >\\
            $version/.deb/usr/share/doc/a2/copyright");
    open (CONTROL, "> $version/.deb/DEBIAN/control");
    print CONTROL ("Package: a2\n");
    print CONTROL ("Source: a2\n");
    print CONTROL ("Version: $version\n");
    print CONTROL ("Section: doc\n");
    print CONTROL ("Priority: optional\n");
    print CONTROL ("Architecture: all\n");
    print CONTROL ("Suggests: www-browser\n");
    #print CONTROL ("Build-Depends: perl\n");
    #print CONTROL ("Installed-Size: 30000\n");
    print CONTROL ("Maintainer: Daniele Giacomini <daniele\@swlibero.org>\n");
    print CONTROL ("Description: This is italian documentation about free software.\n");
    print CONTROL (" .\n");
    print CONTROL (" Edizione HTML di \"Appunti di informatica libera\"\n");
    close (CONTROL);
    system ("dpkg --build $version/.deb $version/$version/a2_$version.deb");
    system ("rm -rf $version/.deb");
  }
elsif ($action eq "sgml-extract"
	&& $argument ne "")
  {
    local ($line) = "";
    local ($include) = 0;

    system ("rm -f $file_to_be_extracted");
    open (NEW_SGML, "> $file_to_be_extracted");
    open (ORIG_SGML, "< $argument");

    # Scan and subst.
    while ($line = <ORIG_SGML>)
      {
        if ($line =~ m/<!--\s+COPY\s+TO\s+"([^"]+)"\s+START\s+-->/i
	    && $1 eq $file_to_be_extracted)
          {
            # The following lines must be included.
            $include = 1;
          }
        elsif ($line =~ m/<!--\s+COPY\s+TO\s+"([^"]+)"\s+STOP\s+-->/i
	    && $1 eq $file_to_be_extracted)
          {
            # The following lines must not be included.
            $include = 0;
          }
        else
          {
            # It is a normal line. We have to decide what to do.
            if ($include)
              {
		print NEW_SGML ($line);
              }
            else
              {
		# Nothing to do.
		;
              }
          }
      }
    close (NEW_SGML);
    close (ORIG_SGML);

  }
