/* variable globale au source
(pour éviter des tonnes de passages de paramètres) */
// chaine de caractères mémorisée pour éviter un appel répétitif à message ()
char mess_detr [50]; // message signalant la destruction d'un mail
/* programme principal */
int main (int nbarg, char *varg[])
{
FILE *fconf; // descripteur du fichier de configuration
int numes; // numéro d'un mail
int finint; // dernier numéro d'un intervalle
int nbmes; // nombre de mails sur le serveur
char *carg1; // caractère de l'argument 1
// récupération du nom de l'exécutable
memcom (*varg);
// se positionner sur le premier argument de detruitmail
varg ++;
// controle du nombre d'arguments et de l'argument 1
if (--nbarg == 2 && ((strcmp (*varg, "-a") == 0) ||
('1' <= **varg && **varg <= '9')))
{
// 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 du nombre de mails
nbmes = nbmails ();
// si des mails peuvent être supprimés
if (nbmes)
{
// si option -a
if (**varg == '-')
{
// on détruit tous les mails du serveur
for (numes = 1; numes <= nbmes; numes++)
detruitmail (numes);
}
// sinon
else
{
// on va analyser l'argument 1 caractère par caractère
carg1 = *varg;
while (*carg1)
{
// récupérer un numéro de mail
numes = 0;
// si numéro dernier mail trop grand
if (finint > nbmes)
{
// signaler l'erreur
// "Numéro de mail trop grand"
affiche_err ("NUMAIL_TROP_GRAND");
// et corriger l'intervalle
finint = nbmes;
}
// détruire les mails de l'intervalle
while (numes <= finint)
detruitmail (numes ++);
}
// sinon
else
{
// s'il existe un mail avec le numéro récupéré
if (0 < numes && numes <= nbmes)
// détruire ce mail
detruitmail (numes);
// sinon, afficher un message d'erreur adapté
else if (numes > nbmes)
{
fprintf (stderr, "%d : ", numes);
// "Numéro de mail trop grand"
affiche_err ("NUMAIL_TROP_GRAND");
}
else
// "Un numéro de mail ne peut être égal à 0"
affiche_err ("NUMAIL_NUL");
}
// si on trouve le séparateur ,
if (*carg1 == ',')
// se positionner sur le numéro de mail suivant
carg1++;
// sinon si non fin de chaine
else if (*carg1)
{
// message d'erreur
fprintf (stderr, message ("ERR_SEP"), *carg1);
// on arrête l'analyse de l'argument 1
*carg1 = '\0';
}
}
}
}
// se déconnecter proprement du serveur pop
deconnect_pop ();
}
// on n'a plus besoin du fichier de configuration
fclose (fconf);
}
}
else
// "Syntaxe : %s [-(k|d)] [numéro_mail] fichier_configuration"
psyntaxe ("SYNT_DETRUITMAIL");
// pour faire plaisir à gcc qui veut une fonction main de type int
return (0);
}
/* supprime le mail choisi du serveur de messagerie */