/*
    Fichier entetemail.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 les caractéristique de chaque
    fichier mail d'un répertoire.

    Par défaut, on analyse les mails du répertoire courant.
    On peut aussi indiquer un autre répertoire de recherche.
*/

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

#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include "buflect.h"
#include "fmail.h"
#include "trtentete.h"


/* prototypes */
void aff_entete (char *nomfic);


/* programme principal */

int main (int nbarg, char *varg[])
{
    DIR *repert;
    struct dirent *entree;


    // récupération éventuelle du nom du répertoire des mails
    if (--nbarg == 1)
    {
        // positionnement dans ce répertoire
        if (chdir (varg [1]) < 0)
        {
            fprintf (stderr, "Répertoire %s inexistant\n", varg [1]);
            return (0);
        }
    }

    // si aucune erreur dans la liste des paramètres
    if (nbarg < 2)
    {
        // accéder au répertoire
        repert = opendir (".");

        // lire un nom de fichier
        entree = readdir (repert);

        // tant qu'il y a des noms de fichier à lire
        while (entree)
        {
            // afficher l'entête du fichier après un controle son nom
            if (strlen (entree->d_name) == 8 ||
               (strlen (entree->d_name) == 10 && entree->d_name [8] == '.'))
                aff_entete (entree->d_name);

            // et lire le nom du fichier suivant
            entree = readdir (repert);
        }
    }
    else
        fprintf (stderr, "Syntaxe : %s [répertoire]\n", varg [0]);

    // pour faire plaisir à gcc qui veut une fonction main de type int
    return (0);
}


/* lit l'entête d'un message et affiche certaines lignes */

void aff_entete (char *nomfic)
{
    int i;  // simple compteur


    // ouverture du fichier mail
    fmail = fopen (nomfic, "r");

    // arrêt si erreur imprévue
    if (fmail == 0)
    {
        fprintf (stderr, "Impossible d'ouvrir le fichier %s\n", nomfic);
        return;
    }


    // lecture et mémorisation des caractéristiques du message
    do
    {
        // lire une ligne de l'entête du message
        lire_fmail ();

        // affichage si ligne non vide et commence en colonne 1
        if (buf_lect [0] > ' ')
        {
            majlignentete ();
            printf ("%s:%s", nomfic, buf_lect);

            // rajouter un \n si le champ est sur plusieurs lignes fusionnées
            if (buf_lect [strlen (buf_lect) - 1] != '\n')
                putchar ('\n');
        }
    }
    while (buf_lect [0] != '\0');  // lecture entête terminée si ligne vide

    // libérer le fichier mail
    fclose (fmail);
}
