#include <DOS.H>
#include "SOUREDIT/EDITSOUR.H"
#include "SOUREDIT/EDITGRAP.H"
#include "SOUREDIT/EDITPANN.H"
#include "SOUREDIT/EDITTABL.H"
short tableau_encours;
OCTET buftab_avec_cadre [BUFSIZE_AVEC_CADRE];
OCTET buftab1_sans_cadre [BUFSIZE_SANS_CADRE];
OCTET buftab2_sans_cadre [BUFSIZE_SANS_CADRE];
OCTET buffer_boite_info [LG_INFO * HT_INFO];
char incx [5] = {0,-1, 1, 0, 0};
char incy [5] = {0, 0, 0,-1, 1};
OCTET direction [16] = {1,3,2,4,1,3,2,4,1,3,2,4,1,3,2,4};
OCTET couleur [16] = {0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3};
OCTET tete [16] = {6,7,8,9,15,16,17,18,24,25,26,27,33,34,35,36};
OCTET corps [16] = {1,1,1,1,10,10,10,10,19,19,19,19,28,28,28,28};
OCTET queue [16] = {2,3,4,5,11,12,13,14,20,21,22,23,29,30,31,32};
short Lire_Tableau_Encours (void)
{
    return (tableau_encours);
}
void Ecrire_Tableau_Encours (short a)
{
    tableau_encours = a;
}
OCTET X_Case (void)
{
    OCTET rep;
    rep = 0;
    if (X_Croix () != -1) rep = ( X_Croix () / 7 ) + 1;
    return (rep);
}
OCTET Y_Case (void)
{
    OCTET rep;
    rep = 0;
    if (Y_Croix () != -1) rep = ( Y_Croix () / 11 ) + 1;
    return (rep);
}
void Selection_Pastille (OCTET num_past,OCTET etat)
{
    OCTET couleur;
    short x,y;
    short cpt_point;
    couleur = (etat == ON) ? SELECTION_PASTILLE_ON : SELECTION_PASTILLE_OFF;
    x = ( ( num_past - 1 ) * 8 ) + 3;
    y = 14;
    Souris (OFF);
    for (cpt_point = 0;
            cpt_point < 9;
            cpt_point ++)
    {
        Afficher_Point (Lire_Page (),x + cpt_point, y,couleur);
        Afficher_Point (Lire_Page (),x + cpt_point,y+12,couleur);
    }
    for (cpt_point = 0;
            cpt_point < 12;
            cpt_point ++)
    {
        Afficher_Point (Lire_Page (),x,14 + cpt_point,couleur);
        Afficher_Point (Lire_Page (),x+8,14 + cpt_point,couleur);
    }
    Souris (ON);
}
OCTET Lire_Case (OCTET *ad_buffer,OCTET x,OCTET y)
{
    short indice_buffer;
    OCTET val;
    indice_buffer = ( ((y - 1) * 43) + ( x - 1) );
    val = *(ad_buffer + indice_buffer);
    return (val);
}
void Ecrire_Case (OCTET *ad_buffer,OCTET val,OCTET x,OCTET y)
{
    short indice_buffer;
    if ( (x != 0) & (y != 0) )
    {
        indice_buffer = ( ((y - 1) * 43) + (x - 1) );
        *(ad_buffer + indice_buffer) = val;
    }
}
void Afficher_Case (OCTET deb_bob,OCTET val,OCTET x,OCTET y)
{
    short x_bob;
    short y_bob;
    if ( (x != 0) & (y != 0) )
    {
        x_bob = X_TAB_PASTILLES_SERPENTS + ( (x - 1) * LG_BOB );
        y_bob = Y_TAB_PASTILLES_SERPENTS + ( (y - 1) * HT_BOB );
        if (val != 0)
        {
            Afficher_Bob (Lire_Page (),FOND_1,x_bob,y_bob,MASK_ON);
            Afficher_Bob (Lire_Page (),val + (deb_bob - 1),x_bob,y_bob,MASK_ON);
        }
        else
            Afficher_Bob (Lire_Page (),FOND_1,x_bob,y_bob,MASK_ON);
    }
}
void Afficher_Cases (OCTET *ad_buffer,OCTET deb_bob,
                     OCTET x1,OCTET y1,OCTET x2,OCTET y2)
{
    OCTET cpt_x;
    OCTET cpt_y;
    short x_bob;
    short y_bob;
    OCTET pastille;
    Souris (OFF);
    for (cpt_y = y1;
            cpt_y <= y2;
            cpt_y ++)
    {
        for (cpt_x = x1;
                cpt_x <= x2;
                cpt_x ++)
        {
            pastille = Lire_Case (ad_buffer,cpt_x,cpt_y);
            x_bob = X_TAB_PASTILLES_SERPENTS + ( (cpt_x - 1) * LG_BOB );
            y_bob = Y_TAB_PASTILLES_SERPENTS + ( (cpt_y - 1) * HT_BOB );
            if (pastille != 0)
            {
                Afficher_Bob (Lire_Page (),FOND_1,x_bob,y_bob,MASK_ON);
                Afficher_Bob (Lire_Page (),deb_bob + pastille,
                              x_bob,y_bob,MASK_ON);
            }
            else
                Afficher_Bob (Lire_Page (),FOND_1,x_bob,y_bob,MASK_ON);
        }
    }
    Souris (ON);
}
void Convertir_Structure_Buffer (void)
{
    short cpt_buffer;
    OCTET cpt_serpent;
    for (cpt_buffer = 0;
            cpt_buffer < BUFSIZE_SANS_CADRE;
            cpt_buffer ++)
        buftab2_sans_cadre [cpt_buffer] = 0;
    if (Lire_Lgnibble () != 0)
        Afficher_Serpent_Buffer ( BLANC,
                                  Lire_Drnibble (),
                                  Lire_Lgnibble (),
                                  Lire_Xnibble (),
                                  Lire_Ynibble ());
    for (cpt_serpent = 0;
            cpt_serpent < Lire_Nbnibble_X ();
            cpt_serpent ++)
        Afficher_Serpent_Buffer ( Lire_Clnibble_X (cpt_serpent),
                                  Lire_Drnibble_X (cpt_serpent),
                                  Lire_Lgnibble_X (cpt_serpent),
                                  Lire_Xnibble_X (cpt_serpent),
                                  Lire_Ynibble_X (cpt_serpent));
}
void Afficher_Serpent_Buffer (OCTET couleur,OCTET sens,OCTET longueur,
                              OCTET x,OCTET y)
{
    OCTET incdir [5] = {0,0,2,1,3};
    OCTET indice;
    OCTET cpt_longueur;
    indice = (couleur * 4) + incdir [sens];
    Ecrire_Case (buftab2_sans_cadre,tete [indice],x,y);
    x += incx [ direction [ indice ] ];
    y += incy [ direction [ indice ] ];
    for (cpt_longueur = 0;
            cpt_longueur < longueur;
            cpt_longueur ++)
    {
        Ecrire_Case (buftab2_sans_cadre,corps [indice],x,y);
        x += incx [ direction [ indice ] ];
        y += incy [ direction [ indice ] ];
    }
    Ecrire_Case (buftab2_sans_cadre,queue [indice],x,y);
}
void Rechercher_Conflit_Serpents_Bord (void)
{
    OCTET element;
    OCTET cptx,cpty;
    for (cpty = 1;
            cpty <= 33;
            cpty ++)
    {
        for (cptx = 1;
                cptx <= 43;
                cptx ++)
        {
            if ( Lire_Case ( buftab2_sans_cadre,cptx,cpty ) != 0)
            {
                element = Lire_Case ( buftab1_sans_cadre,cptx,cpty );
                if ( (element >= 1) & (element <= 6) )
                    Ecrire_Case (buftab2_sans_cadre,0,cptx,cpty);
            }
        }
    }
}
OCTET Convertir_Buffer_Structure (void)
{
    OCTET indice;
    OCTET cptx,cpty;
    OCTET valeur_case;
    char resultat;
    OCTET cpt_blanc;
    OCTET cpt_rvb;
    OCTET cpt;
    OCTET buffer_x [NB_SERPENT_RVB];
    OCTET buffer_y [NB_SERPENT_RVB];
    OCTET buffer_vitesse [NB_SERPENT_RVB];
    short buffer_tempo [NB_SERPENT_RVB];
    cpt_blanc = 0;
    cpt_rvb = 0;
    for (cpt = 0;
            cpt < NB_SERPENT_RVB;
            cpt ++)
    {
        buffer_x [cpt] = 0;
        buffer_y [cpt] = 0;
        buffer_vitesse [cpt] = 0;
        buffer_tempo [cpt] = 0;
    }
    for (cpt = 0;
            cpt < Lire_Nbnibble_X ();
            cpt ++)
    {
        buffer_x [cpt] = Lire_Xnibble_X (cpt);
        buffer_y [cpt] = Lire_Ynibble_X (cpt);
        buffer_vitesse [cpt] = Lire_Vtnibble_X (cpt);
        buffer_tempo [cpt] = Lire_Tpnibble_X (cpt);
    }
    Ecrire_Lgnibble ( 0 );
    Ecrire_Drnibble ( 0 );
    Ecrire_Xnibble ( 0 );
    Ecrire_Ynibble ( 0 );
    for (cpt = 0;
            cpt < NB_SERPENT_RVB;
            cpt ++)
    {
        Ecrire_Lgnibble_X ( cpt, 0 );
        Ecrire_Drnibble_X ( cpt, 0 );
        Ecrire_Tpnibble_X ( cpt,5000 );
        Ecrire_Vtnibble_X ( cpt, 2 );
        Ecrire_Clnibble_X ( cpt, 0 );
        Ecrire_Xnibble_X ( cpt, 0 );
        Ecrire_Ynibble_X ( cpt, 0 );
    }
    for (cpty = 1;
            cpty <= 33;
            cpty ++)
    {
        for (cptx = 1;
                cptx <= 43;
                cptx ++)
        {
            valeur_case = Lire_Case (buftab2_sans_cadre,cptx,cpty);
            for (indice = 0;
                    indice <= 15;
                    indice ++)
            {
                if (valeur_case == tete [ indice ])
                {
                    resultat = Verifier_Serpent_Buffer (indice,cptx,cpty);
                    if ( resultat != INCORRECT )
                    {
                        if ( (couleur [indice] == BLANC) & (cpt_blanc == 0) )
                        {
                            Ecrire_Lgnibble ( resultat );
                            Ecrire_Drnibble ( direction [indice] );
                            Ecrire_Xnibble ( cptx );
                            Ecrire_Ynibble ( cpty );
                            cpt_blanc = 1;
                        }
                        if ( (couleur [indice] != BLANC) & (cpt_rvb < NB_SERPENT_RVB) )
                        {
                            Ecrire_Lgnibble_X ( cpt_rvb,resultat );
                            Ecrire_Drnibble_X ( cpt_rvb,direction [indice] );
                            Ecrire_Clnibble_X ( cpt_rvb,couleur [indice] );
                            Ecrire_Xnibble_X ( cpt_rvb,cptx );
                            Ecrire_Ynibble_X ( cpt_rvb,cpty );
                            cpt_rvb ++;
                        }
                    }
                }
            }
        }
    }
    Ecrire_Nbnibble_X ( cpt_rvb );
    for (cpt = 0;
            cpt < NB_SERPENT_RVB;
            cpt ++)
    {
        for (cpt_rvb = 0;
                cpt_rvb < Lire_Nbnibble_X ();
                cpt_rvb ++)
        {
            if ( Lire_Xnibble_X (cpt_rvb) == buffer_x [cpt] )
            {
                if ( Lire_Ynibble_X (cpt_rvb) == buffer_y [cpt] )
                {
                    Ecrire_Vtnibble_X ( cpt_rvb,buffer_vitesse [cpt] );
                    Ecrire_Tpnibble_X ( cpt_rvb,buffer_tempo [cpt] );
                }
            }
        }
    }
    return ( cpt_blanc + Lire_Nbnibble_X () );
}
char Verifier_Serpent_Buffer (OCTET indice,OCTET x,OCTET y)
{
    char longueur;
    longueur = 0;
    do
    {
        x += incx [ direction [ indice ] ];
        y += incy [ direction [ indice ] ];
        if ( (x<1) | (x>43) | (y<1) | (y>33) ) return (INCORRECT);
        longueur ++;
    }
    while ( Lire_Case (buftab2_sans_cadre,x,y) == corps [ indice ] );
    if ( Lire_Case (buftab2_sans_cadre,x,y) != queue [indice] ) return (INCORRECT);
    longueur --;
    if ( longueur < 1 ) return (INCORRECT);
    if ( longueur > LG_SERPENTS ) return (INCORRECT);
    return (longueur);
}
void Afficher_Dessin (short x,short y,OCTET page_video,OCTET num_dessin)
{
    short xecran;
    short yecran;
    short xfichier;
    short yfichier;
    short lgfichier;
    short htfichier;
    xecran = x + (short)(Lire_Xdessin (num_dessin) * LG_BOB);
    yecran = y + (short)(Lire_Ydessin (num_dessin) * HT_BOB);
    xfichier = Lire_Xfcdessin (num_dessin);
    yfichier = Lire_Yfcdessin (num_dessin);
    lgfichier = (short)( (Lire_Lgdessin (num_dessin) * LG_BOB) - 1);
    htfichier = (short)( (Lire_Htdessin (num_dessin) * HT_BOB) - 1);
    Lire_Image_Pcx ("SPRFILES/DESSINS",
                    page_video,
                    xecran,yecran,
                    MASK_OFF,
                    xfichier,yfichier,
                    lgfichier,htfichier);
}
void Calculer_Surface (OCTET x,OCTET y,OCTET *lg,OCTET *ht)
{
    OCTET cptlg;
    OCTET cptht;
    OCTET element;
    OCTET element_lg;
    OCTET element_ht;
    for (cptlg = 0;
            cptlg < *lg;
            cptlg ++)
    {
        if (x+cptlg > X_MAX-2) break;
        element = Lire_Case (buftab1_sans_cadre,x+cptlg,y);
        if (element != OBST_DESSIN) break;
    }
    if (cptlg == 0)
    {
        *lg = 0;
        *ht = 0;
        return;
    }
    element_lg = cptlg;
    for (cptht = 0;
            cptht < *ht;
            cptht ++)
    {
        for (cptlg = 0;
                cptlg < element_lg;
                cptlg ++)
        {
            element = Lire_Case (buftab1_sans_cadre,x+cptlg,y+cptht);
            if (element != OBST_DESSIN) break;
        }
        if (element != OBST_DESSIN) break;
        if (y+cptht > Y_MAX-2) break;
    }
    element_ht = cptht;
    *lg = element_lg;
    *ht = element_ht;
}
void Annuler_Dessin_Structure (OCTET num_dessin_a_annuler)
{
    OCTET cpt;
    short xfichier;
    short yfichier;
    OCTET xbuffer;
    OCTET ybuffer;
    OCTET lgbuffer;
    OCTET htbuffer;
    OCTET nombre_dessin;
    nombre_dessin = Lire_Nbdessin ();
    if (num_dessin_a_annuler != (nombre_dessin - 1))
    {
        for (cpt = num_dessin_a_annuler;
                cpt < (nombre_dessin - 1);
                cpt ++)
        {
            xfichier = Lire_Xfcdessin (cpt + 1);
            yfichier = Lire_Yfcdessin (cpt + 1);
            xbuffer = Lire_Xdessin (cpt + 1);
            ybuffer = Lire_Ydessin (cpt + 1);
            lgbuffer = Lire_Lgdessin (cpt + 1);
            htbuffer = Lire_Htdessin (cpt + 1);
            Ecrire_Xfcdessin (cpt,xfichier);
            Ecrire_Yfcdessin (cpt,yfichier);
            Ecrire_Xdessin (cpt,xbuffer );
            Ecrire_Ydessin (cpt,ybuffer );
            Ecrire_Lgdessin (cpt,lgbuffer);
            Ecrire_Htdessin (cpt,htbuffer);
        }
    }
    Ecrire_Nbdessin (nombre_dessin - 1);
}
void Verifier_Corriger_Dessin (void)
{
    OCTET cpt_dessin;
    OCTET nb_dessin;
    OCTET xdessin;
    OCTET ydessin;
    OCTET lgdessin;
    OCTET htdessin;
    OCTET lgelement;
    OCTET htelement;
    short xf [NB_DESSIN_TABLEAU];
    short yf [NB_DESSIN_TABLEAU];
    OCTET xd [NB_DESSIN_TABLEAU];
    OCTET yd [NB_DESSIN_TABLEAU];
    OCTET lg [NB_DESSIN_TABLEAU];
    OCTET ht [NB_DESSIN_TABLEAU];
    OCTET cpt_buf;
    cpt_buf = 0;
    nb_dessin = Lire_Nbdessin ();
    for (cpt_dessin = 0;
            cpt_dessin < nb_dessin;
            cpt_dessin ++)
    {
        xdessin = Lire_Xdessin (cpt_dessin);
        ydessin = Lire_Ydessin (cpt_dessin);
        lgdessin = Lire_Lgdessin (cpt_dessin);
        htdessin = Lire_Htdessin (cpt_dessin);
        lgelement = lgdessin;
        htelement = htdessin;
        Calculer_Surface (xdessin,ydessin,&lgelement,&htelement);
        if ( (lgelement >= lgdessin) & (htelement >= htdessin) )
        {
            xf [cpt_buf] = Lire_Xfcdessin (cpt_dessin);
            yf [cpt_buf] = Lire_Yfcdessin (cpt_dessin);
            xd [cpt_buf] = Lire_Xdessin (cpt_dessin);
            yd [cpt_buf] = Lire_Ydessin (cpt_dessin);
            lg [cpt_buf] = Lire_Lgdessin (cpt_dessin);
            ht [cpt_buf] = Lire_Htdessin (cpt_dessin);
            cpt_buf ++;
        }
    }
    for (cpt_dessin = 0;
            cpt_dessin < cpt_buf;
            cpt_dessin ++)
    {
        Ecrire_Xfcdessin (cpt_dessin,xf [cpt_dessin]);
        Ecrire_Yfcdessin (cpt_dessin,yf [cpt_dessin]);
        Ecrire_Xdessin (cpt_dessin,xd [cpt_dessin]);
        Ecrire_Ydessin (cpt_dessin,yd [cpt_dessin]);
        Ecrire_Lgdessin (cpt_dessin,lg [cpt_dessin]);
        Ecrire_Htdessin (cpt_dessin,ht [cpt_dessin]);
    }
    Ecrire_Nbdessin (cpt_buf);
}
short Conv_Coord_Num (OCTET element,short x,short y)
{
    short rep;
    short numcol;
    short numlig;
    if (element == BORDURES)
    {
        numlig = (y - Y_MIN_BORDURES) / Y_ECART_BORDURES;
        numcol = (x - X_MIN_BORDURES) / X_ECART_BORDURES;
        rep = (numlig * X_NB_BORDURES) + numcol;
    }
    if (element == FONDS)
    {
        numlig = (y - Y_MIN_FONDS) / Y_ECART_FONDS;
        numcol = (x - X_MIN_FONDS) / X_ECART_FONDS;
        rep = (numlig * X_NB_FONDS) + numcol;
    }
    return (rep+1);
}
void Conv_Num_Coord (OCTET element,short numero,short *x,short *y)
{
    short numlig;
    short numcol;
    numero --;
    if (element == BORDURES)
    {
        numlig = numero / X_NB_BORDURES;
        numcol = numero - (numlig * X_NB_BORDURES);
        *y = Y_MIN_BORDURES + (numlig * Y_ECART_BORDURES);
        *x = X_MIN_BORDURES + (numcol * X_ECART_BORDURES);
    }
    if (element == FONDS)
    {
        numlig = numero / X_NB_FONDS;
        numcol = numero - (numlig * X_NB_FONDS);
        *y = Y_MIN_FONDS + (numlig * Y_ECART_FONDS);
        *x = X_MIN_FONDS + (numcol * X_ECART_FONDS);
    }
}
void Option (OCTET etat,OCTET page,short x1,short y1,short x2,short y2)
{
    Souris (OFF);
    if (etat == ON)
    {
        Tracer_Droite (page,x1,y1,x1,y1 + (y2-y1),RELIEF_CLAIR);
        Tracer_Droite (page,x1,y1,x1 + (x2-x1),y1,RELIEF_CLAIR);
        Tracer_Droite (page,x2,y2,x2 - ((x2-x1)-1),y2,RELIEF_FONCE);
        Tracer_Droite (page,x2,y2,x2,y2 - ((y2-y1)-1),RELIEF_FONCE);
    }
    else
    {
        Tracer_Droite (page,x1,y1,x1,y1 + ((y2-y1)-1),RELIEF_FONCE);
        Tracer_Droite (page,x1,y1,x1 + ((x2-x1)-1),y1,RELIEF_FONCE);
        Tracer_Droite (page,x2,y2,x2 - (x2-x1),y2,RELIEF_CLAIR);
        Tracer_Droite (page,x2,y2,x2,y2 - (y2-y1),RELIEF_CLAIR);
    }
    Souris (ON);
}
OCTET Test_Option (short xinf,short yinf,short xsup,short ysup)
{
    OCTET sortie;
    sortie = OFF;
    if ( Test_Clic_Zone (X_Fleche (),Y_Fleche (),xinf,yinf,xsup,ysup) == ON )
        sortie = ON;
    return (sortie);
}
void Nombre_Option (short xn,short yn,OCTET page,OCTET lgnb,short valeur)
{
    Afficher_Nombre (page,BOB_CHIFFRE_2,lgnb,valeur,xn,yn,MASK_OFF);
}
short Traiter_Fleche (OCTET page,short incdec,
                      short val,short valmin,short valmax,
                      short x1,short y1,short x2,short y2,
                      short xval,short yval,OCTET lgnb)
{
    OCTET sortie;
    short tempo;
    float cpt_tempo;
    sortie = NON;
    tempo = 0;
    cpt_tempo = 0;
    Option (OFF,page,x1,y1,x2,y2);
    do
    {
        if (tempo <= 500) tempo = ( cpt_tempo++ * .5 ) + 1;
        val = val + (incdec * tempo);
        if ( (val >= valmin) & (val <= valmax) )
        {
            Nombre_Option (xval,yval,page,lgnb,val);
        }
        else
        {
            val = (incdec == 1) ? valmax : valmin;
            Nombre_Option (xval,yval,page,lgnb,val);
        }
        Pause (80);
        if ( Clic_Souris () != CLIC_GAUCHE) sortie = OUI;
        if ( Test_Option (x1,y1,x2,y2) == OFF ) sortie = OUI;
    }
    while (sortie == NON);
    Option (ON,page,x1,y1,x2,y2);
    return (val);
}
void Changer_Page (OCTET page)
{
    disable ();
    Restaurer_Fond ();
    Afficher_Page (page);
    Sauver_Fond ();
    Afficher_Souris ();
    enable ();
}
short Totaliser_Pastilles (OCTET element)
{
    OCTET cpt_x;
    OCTET cpt_y;
    OCTET pastille;
    short cptpastille;
    cptpastille = 0;
    for (cpt_y = 1;
            cpt_y <= 33;
            cpt_y ++)
    {
        for (cpt_x = 1;
                cpt_x <= 43;
                cpt_x ++)
        {
            pastille = Lire_Case (buftab1_sans_cadre,cpt_x,cpt_y);
            if (pastille == element) cptpastille ++;
        }
    }
    return (cptpastille);
}
void Afficher_Cadre (OCTET page)
{
    char cpt;
    for (cpt = 0;
            cpt <= 42;
            cpt ++)
    {
        Afficher_Point (page,5 + (cpt * 7) + 0,30,249);
        Tracer_Droite (page,5 + (cpt * 7) + 1,30,5 + (cpt * 7) + 5,30,9);
        Afficher_Point (page,5 + (cpt * 7) + 6,30,249);
        Afficher_Point (page,5 + (cpt * 7) + 0,394,249);
        Tracer_Droite (page,5 + (cpt * 7) + 1,394,5 + (cpt * 7) + 5,394,9);
        Afficher_Point (page,5 + (cpt * 7) + 6,394,249);
    }
    for (cpt = 0;
            cpt <= 32;
            cpt ++)
    {
        Afficher_Point (page,4,31 + (cpt * 11) + 0,249);
        Tracer_Droite (page,4,31 + (cpt * 11) + 1,4,31 + (cpt * 11) + 9,9);
        Afficher_Point (page,4,31 + (cpt * 11) + 10,249);
        Afficher_Point (page,306,31 + (cpt * 11) + 0,249);
        Tracer_Droite (page,306,31 + (cpt * 11) + 1,306,31 + (cpt * 11) + 9,9);
        Afficher_Point (page,306,31 + (cpt * 11) + 10,249);
    }
    Tracer_Droite (page,5 + (21 * 7) + 1, 30,5 + (21 * 7) + 5, 30,0);
    Tracer_Droite (page,5 + (21 * 7) + 1,394,5 + (21 * 7) + 5,394,0);
    Tracer_Droite (page, 4,31 + (16 * 11) + 1, 4,31 + (16 * 11) + 9,0);
    Tracer_Droite (page,306,31 + (16 * 11) + 1,306,31 + (16 * 11) + 9,0);
}