#include "SOUREDIT/EDITSOUR.H"
#include "SOUREDIT/EDITGRAP.H"
#include "SOUREDIT/EDITPANN.H"
#include "SOUREDIT/EDITTABL.H"
#include "SOUREDIT/EDITONGL.H"
void Afficher_Tableau (OCTET);
void Afficher_Snakle (OCTET,OCTET,OCTET,OCTET,OCTET,OCTET);
extern OCTET buftab_avec_cadre [BUFSIZE_AVEC_CADRE];
extern OCTET buftab1_sans_cadre [BUFSIZE_SANS_CADRE];
extern OCTET buftab2_sans_cadre [BUFSIZE_SANS_CADRE];
OCTET element_snakles [13] = {0,6,0,2,8,0,4,7,1,3,9,1,5};
char sk_incx [5] = {0,-1,+1, 0, 0};
char sk_incy [5] = {0, 0, 0,-1,+1};
void Panneau_7 (void)
{
    OCTET lg_serpent;
    OCTET mt_serpent;
    OCTET nb_serpent;
    OCTET cpt_dessin;
    OCTET nombre_dessin;
    OCTET cpt;
    OCTET page;
    Lire_Tableau ( Lire_Tableau_Encours() );
    Lire_Buftab_Avec_Cadre (buftab_avec_cadre);
    Lire_Buftab_Sans_Cadre (buftab1_sans_cadre);
    Ecrire_Panneau_Encours (Lire_Panneau_Demande () );
    Ecrire_Panneau_Demande (0);
    page = (Lire_Page () == 0) ? 1 : 0;
    Lire_Image_Pcx ("SPRFILES/DECORS",page,0,0,MASK_OFF,0,0,319,399);
    for (cpt = 0;
            cpt < NB_BOB_BORDURE;
            cpt++)
        Lire_Bob (BOB_BORDURE + cpt,page,
                  Lire_Xbordure () + (cpt * BORDURE_LONG),
                  Lire_Ybordure () );
    Lire_Bob (BOB_FOND,page,
              Lire_Xfond (),
              Lire_Yfond ());
    Afficher_Onglet (page,ONGLET7);
    Afficher_Tableau (page);
    lg_serpent = Lire_Lgnibble ();
    mt_serpent = Lire_Mtnibble ();
    if ( lg_serpent > 0)
    {
        if (mt_serpent == ON)
            Afficher_Snakle (page,
                             Lire_Xnibble (),
                             Lire_Ynibble (),
                             Lire_Drnibble (),
                             Lire_Lgnibble (),
                             CL_BLANC);
        else
            Afficher_Snakle (page,
                             Lire_Xnibble (),
                             Lire_Ynibble (),
                             Lire_Drnibble (),
                             Lire_Lgnibble (),
                             CL_ORANGE);
    }
    nb_serpent = Lire_Nbnibble_X ();
    for (cpt = 0;
            cpt < nb_serpent;
            cpt++)
        Afficher_Snakle (page,
                         Lire_Xnibble_X (cpt),
                         Lire_Ynibble_X (cpt),
                         Lire_Drnibble_X (cpt),
                         Lire_Lgnibble_X (cpt),
                         Lire_Clnibble_X (cpt));
    nombre_dessin = Lire_Nbdessin ();
    for (cpt_dessin = 0;
            cpt_dessin < nombre_dessin;
            cpt_dessin ++)
        Afficher_Dessin (X_TAB_APERCU,
                         Y_TAB_APERCU,
                         page,cpt_dessin);
    Changer_Page (page);
    do
    {
    }
    while (Lire_Panneau_Demande () == 0);
    Sauver_Tableau (Lire_Tableau_Encours ());
}
void Afficher_Tableau (OCTET pg)
{
    OCTET coddr;
    OCTET codga;
    OCTET codha;
    OCTET codba;
    OCTET resul;
    OCTET y,x;
    OCTET code;
    short cptcode = 0;
    for (y=Y_MIN; y<Y_MAX; y++)
    {
        for (x=X_MIN; x<X_MAX; x++)
        {
            Afficher_Bob (pg,
                          BOB_FOND,
                          X_TAB_APERCU + (x * LG_BOB),
                          Y_TAB_APERCU + (y * HT_BOB),
                          MASK_OFF);
            code = buftab_avec_cadre [cptcode];
            if (code == OBST_BORDURE)
            {
                coddr = ( (cptcode+1) >= (X_MAX*(y+1)) ) ? 0 :buftab_avec_cadre [cptcode+1];
                codba = ( (cptcode+X_MAX) > (X_MAX*Y_MAX-1) ) ? 0 :buftab_avec_cadre [cptcode+X_MAX];
                codga = ( (cptcode-1) < (X_MAX*y) ) ? 0 :buftab_avec_cadre [cptcode-1];
                codha = ( (cptcode-X_MAX) < 0 ) ? 0 :buftab_avec_cadre [cptcode-X_MAX];
                resul=0;
                resul += (coddr == OBST_BORDURE) ? 1 : 0;
                resul += (codba == OBST_BORDURE) ? 2 : 0;
                resul += (codga == OBST_BORDURE) ? 4 : 0;
                resul += (codha == OBST_BORDURE) ? 8 : 0;
                Afficher_Bob (pg,
                              BOB_BORDURE+resul,
                              X_TAB_APERCU + (x * LG_BOB),
                              Y_TAB_APERCU + (y * HT_BOB),
                              MASK_ON);
            }
            else
            {
                if (code > OBST_BORDURE)
                {
                    Afficher_Bob (pg,
                                  (BOB_PASTILLE - 1) + code,
                                  X_TAB_APERCU + (x * LG_BOB),
                                  Y_TAB_APERCU + (y * HT_BOB),
                                  MASK_ON);
                }
            }
            cptcode++;
        }
    }
}
void Afficher_Snakle (OCTET page,OCTET x,OCTET y,
                      OCTET sens,OCTET lg,OCTET coul)
{
    short xec,yec;
    OCTET cpt_long;
    xec = (x * SNAKLES_LONG) + X_TAB_APERCU;
    yec = (y * SNAKLES_HAUT) + Y_TAB_APERCU;
    Afficher_Bob (page,BOB(sens,TETE,coul),xec,yec,MASK_ON);
    for (cpt_long = 0;
            cpt_long < lg;
            cpt_long ++)
    {
        xec += sk_incx [sens] * SNAKLES_LONG;
        yec += sk_incy [sens] * SNAKLES_HAUT;
        Afficher_Bob (page,BOB(sens,CORPS,coul),xec,yec,MASK_ON);
    }
    xec += sk_incx [sens] * SNAKLES_LONG;
    yec += sk_incy [sens] * SNAKLES_HAUT;
    Afficher_Bob (page,BOB(sens,QUEUE,coul),xec,yec,MASK_ON);
}