#!/usr/bin/perl

use CGI ':standard';

#    print header; print start_html("Status du package $pkg"); print "do=",param('do');print end_html; exit;


#--------------------------------------------------------------------
#-------- PACKAGES DISPONIBLES                                -------
#--------------------------------------------------------------------
if (param('available'))
{
    #demarre HTML
    print header;
    print start_html("Packages disponibles (multicd)");

    $fic = "/var/lib/dpkg/available";
    #    $fic = "available";

    $result = `cat $fic`;

    $result =~ s|\n|<br>|g;
    $result =~ s|Package:\s(.+)|$1|g;

    print $result;

    print end_html;

}# elsif
#--------------------------------------------------------------------
#-------- RECHERCHE UN FICHIER DANS LES PACKAGES              -------
#--------------------------------------------------------------------
elsif ($fichiers=param('searchfiles'))
{
    #demarre HTML
    print header;
    print start_html("Recherche les fichiers $fichiers");
    print "<font size=+4><b>Resultat de la recherche : $fichiers</b></font><br>";
    print "<font size=+1>", a({href=>"dpkg.cgi"},"Tous les packages</a>   |   "), "</font><br>", hr;
    
    $result = `dpkg -S $fichiers`;
    $result =~ s|(.+):\s(.*)\n|<tr><td><A HREF="dpkg.cgi?status=$1">$1<\/A></td><td>    <A HREF="file://$2">=><\/A>   </td><td>$2</td><tr>|g;

    print "<pre><table>";
    print $result;
    print "</table></pre>";

    print hr,"<font size=+1>", a({href=>"dpkg.cgi"},"Tous les packages</a>   |   "), "</font><br>";

    
    print end_html;

}# elsif

#--------------------------------------------------------------------
#-------- LISTE DES FICHIERS D'UN PACKAGE                     -------
#--------------------------------------------------------------------
elsif ($pkg=param(listfiles))
{
    #demarre HTML
    print header;
    print start_html("Liste des fichiers de $pkg");
    &affiche_menu_haut;
    
    $status = `dpkg -L $pkg`;
    $status =~ s|(.+)\n|<A HREF="file://$1">=><\/A>   $1<BR>|g;
    
    print "<pre>",$status,"</pre>";

    &affiche_menu_bas;
    print end_html;

}# elsif
#--------------------------------------------------------------------
#-------- STATUS D'UN PACKAGE                                 -------
#--------------------------------------------------------------------
elsif ($pkg=param('status'))
{
    #demarre HTML
    print header;
    print start_html("Status du package $pkg");
    &affiche_menu_haut;

    $status = `dpkg -s $pkg`;
    $status =~ s/\n/<BR>/g;
    print $status,"<br>";

    &affiche_menu_bas;
    print end_html;
    }
#--------------------------------------------------------------------
#-------- PACKAGES INSTALLES                                  -------
#--------------------------------------------------------------------
else
    {
    #demarre HTML
    print header;
    print start_html('Liste des packages installes');

    #affiche entete
    $host=`hostname`;
    $host =~ s/\s//;
    print "<font size=+4><b>Packages installes sur \'$host\'</b></font><br>";

    print start_form,
        "Chercher dans les packages :  ",
        textfield('searchpkg',''), "  ",
        submit('Chercher'), end_form, p;
    print start_form,
        "Chercher un fichier :  ",
        textfield('searchfiles',''), "  ",
        submit('Chercher'), end_form, p;


    print hr;

    print hr,"<font size=+1>", a({href=>"dpkg.cgi?available=all"},"Packages dispos</a><br>");

    
    $pattern = param('searchpkg');

    $pattern =~ s/;//;
    
    #efface l'entete dpkg
    #    $list = `dpkg -l \"*$pattern*\"`;
    $list = `dpkg -l`;
    
    for ($i=0; $i<5; $i++) { $list =~ s/(.+\n)//; }
    
    #traite chaque ligne et l'affiche
    print "<TABLE>";
    do
    {
        $ok = ($list =~ /(.+\n)/g);
        if (!$ok) { goto fini; }
    
        $ligne = $1;
        chomp( $ligne );
    
        $ligne =~ /(..)\s\s(\S+)\s+(\S+)\s+(.+)/;
        $status=$1; $pkg=$2; $ver=$3; $descr=$4;
        if ($ligne =~ /$pattern/)
        {
            print "<TR>";
            print "<TD>$status</TD>";
            print "<TD>", a({href=>"dpkg.cgi?status=$pkg"},$pkg), "</TD>";
            print "<TD>$ver</TD>";
            print "<TD>$descr</TD>";
            print "</TR>\n";
        }
        
    } while (1);
    fini:
    
    print "</TABLE>";
    
    print end_html;
    exit;
    }



#--------------------------------------------------------------------
#-------- AFFICHE LE MENU                                     -------
#--------------------------------------------------------------------

sub affiche_menu_haut
{
    print "<font size=+4><b>$pkg</b></font><br>";
    &affiche_menu;
    print "<hr><br>";
}

sub affiche_menu_bas
{
    print "<hr>";
    &affiche_menu;
}


sub affiche_menu
{
print "<font size=+1>";
print a({href=>"dpkg.cgi"},"Tous les packages</a>   |   ");
print a({href=>"dpkg.cgi?status=$pkg"},"Status</a>   |   ");
print a({href=>"dpkg.cgi?listfiles=$pkg"},"Liste des fichiers</a>");
print "</font><br>";
}
