/*
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 "messages.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 du nom de l'exécutable
memcom (*varg);
// récupération éventuelle du nom du répertoire des mails
if (--nbarg == 1)
{
// positionnement dans ce répertoire
if (chdir (varg [1]) < 0)
{
// "Répertoire %s inexistant"
aff_err_arg ("REPERT_INEXISTANT", 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
// "Syntaxe : %s [répertoire]"
psyntaxe ("SYNT_GENE_REPERT");
// 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)
{
// "Impossible d'ouvrir le fichier %s"
aff_err_arg ("IMPOS_OUVR_FICH", 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);
}