/*
    Fichier listemail.c
    Auteur Bernard Chardonneau

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

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


    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 "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


    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
        fprintf (stderr,
         "Syntaxe : %s  fichier_configuration  [fichier_sortie]\n", varg [0]);

    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)
        {
            fprintf (stderr,
                     "Impossible d'écrire dans le fichier %s\n", 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);
}
