/*
    Fichier trtbordure.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


    Bibliothèque de fonctions permettant de mémoriser les bordures
    de sections des messages en mode multipart et de vérifier si on
    est positionné sur l'une de ces bordures
*/


#include <stdio.h>
#include <stdlib.h>
#include "buflect.h"
#include "trtbordure.h"



/* récupère la valeur du champ boundary d'un mail en mode
   multipart et la recopie dans  bordure [nbordures + 1]
   retourne 1 si champ boundary trouvé dans la ligne, 0 sinon */


int mem_boundary ()
{
    int i, j;  // compteurs


    // initialisation
    i = 1;

    // chercher le mot  boundary  dans la ligne et sortir s'il n'y est pas
    while (tolower (buf_lect [i]) != 'b' || tolower (buf_lect [i+1]) != 'o')
        if (! buf_lect [++i])
            return (0);

    // se positionner après le caractère  =
    while (buf_lect [i++] != '=')
        if (! buf_lect [i])
            return (0);

    // vérifier si l'on peut encore mémoriser une bordure
    if (nbordures >= max_bordures)
    {
        // "Trop de sections dans le mail"
        // "Recompiler avec max_bordures plus grand dans trtbordure.h"
        affiche_err ("DEBORD_SECTIONS-1");
        affiche_err ("DEBORD_SECTIONS-2");

        exit (-1);
    }

    // sauter les blancs après le = s'il y en a
    if (buf_lect [i] == ' ')
        i++;

    // sauter également le  "  s'il y est
    if (buf_lect [i] == '"')
        i++;

    // initialisation
    j = 0;

    // copie de la bordure
    while (buf_lect [i] != '"' && buf_lect [i] != '\0')
        bordure [nbordures][j++] = buf_lect [i++];

    // terminaison de la chaine et prise en compte de la nouvelle bordure
    bordure [nbordures++][j] = '\0';

    // on a trouvé le champ boundary
    return (1);
}



/* indique si la ligne courante représente une bordure de section */

int surbordure ()
{
    int i;   // compteur


    // si aucune bordure mémorisée
    if (! nbordures)
        // "Erreur système : appel de surbordure() sans bordure mémorisée"
        errfatale ("AUCUNE_BORDURE");

    // une bordure commence par 2 caractères -
    if (buf_lect [0] != '-' || buf_lect [1] != '-')
        return (0);

    // initialisation boucle de comparaison
    i = 0;

    // comparer les caractères de la ligne à ceux de la dernière bordure
    while (buf_lect [i+2] == bordure [nbordures-1][i])
    {
        // terminé si aucune différence trouvée en fin de ligne
        if (bordure [nbordures-1][i] == '\0')
            return (1);
        else
            // sinon, passer aux caractères suivants
            i++;
    }

    // différence trouvée : vérifier si ce sont des -- après la bordure
    if (bordure [nbordures-1][i] == '\0' && buf_lect [i+2] == '-')
    {
        // oui : on supprime cette bordure de la liste
        nbordures --;
        return (1);
    }
    else
        // non : bordure non trouvée
        return (0);
}