/*
    Fichier listemail.c
    Auteur Bernard Chardonneau

    Logiciel libre, droits d'utilisation précisés en français
    dans le fichier : licence-fr.txt

    Traductions des droits d'utilisation dans les fichiers :
    licence-de.txt , licence-en.txt , licence-es.txt ,
    licence-it.txt , licence-nl.txt , licence-pt.txt ,
    licence-eo.txt , licence-eo-utf.txt

    Droits d'utilisation également sur la page web :
    http://libremail.tuxfamily.org/voir.php?page=droits


    Ce programme affiche le numéro d'ordre et la taille de chaque
    mail en attente de téléchargement (ou de destruction).

    Un fichier de configuration est utilisé pour se connecter à la
    boite aux lettres.
*/


#define appli   // pour la déclaration de variables globales à l'application

#include <stdio.h>
#include <string.h>
#include "messages.h"
#include "buflect.h"
#include "ficonf.h"
#include "pop.h"


/* prototypes */
void lister (char *ficdest);


/* programme principal */

int main (int nbarg, char *varg[])
{
    FILE *fconf;        // descripteur du fichier de configuration
    int  numes, nbmes;  // numéro du mail courant et nombre de mails


    // récupération du nom de l'exécutable
    memcom (*varg);

    if (--nbarg == 1 || nbarg == 2)
    {
        // ouvrir le fichier de configuration
        fconf = ouvre_ficonf (varg [1]);

        if (fconf)
        {
            // connexion sur le compte mail du serveur pop
            if (connect_pop (fconf))
            {
                // récupération de la liste des mails
                if (nbarg == 2)
                    lister (varg [2]);
                else
                    lister (0);

                // se déconnecter proprement du serveur pop
                deconnect_pop ();
            }

            // on n'a plus besoin du fichier de configuration
            fclose (fconf);
        }
    }
    else
        // "Syntaxe : %s fichier_configuration [fichier_sortie]"
        psyntaxe ("SYNT_LISTEMAIL");

    return (0);
}


/* listage des messages
   le résultat va :
   - soit dans le fichier du nom passé en paramètre
   - soit dans stdout si paramètre à 0
*/


void lister (char *ficdest)
{
    FILE *fdest;  // descripteur du fichier résultat


    // ouvrir le fichier qui mémorisera les résultats
    if (ficdest)
    {
        fdest = fopen (ficdest, "w");

        if (fdest == 0)
        {
            // "Impossible d'écrire dans le fichier %s"
            aff_err_arg ("IMPOS_ECR_FICH", ficdest);
            return;
        }
    }
    else
        fdest = stdout;

    // demande de la liste des mails
    env_pop ("LIST");

    // lecture et affichage ou mémorisation de la réponse
    do
    {
        lire_pop ();
        fprintf (fdest, "%s\n", buf_lect);
    }
    while (buf_lect [0] != '.');

    // libérer si nécessaire le fichier résultat
    if (ficdest)
        fclose (fdest);
}