#include <STDLIB.H>
#include "SOUREDIT/EDITGRAP.H"
#include "SOUREDIT/EDITPANN.H"
#include "SOUREDIT/EDITTABL.H"
#include "SOUREDIT/EDITBOIT.H"
#include "SOUREDIT/EDITSOUR.H"
#include "SOUREDIT/EDITCHAR.H"
#define COUL_FOND 112
#define COUL_GH 96
#define COUL_DB 132
#define COUL_CAR_B 240
#define COUL_CAR_J 107
#define COUL_CAR_C 96
void Print_Cl (OCTET,float,float,OCTET,OCTET,char*);
char *str;
void Afficher_Boite_Message (OCTET page,OCTET num)
{
    short x,y;
    Afficher_Boite (page);
    switch (num)
    {
    case INFO01:
    {
        Souris (OFF);
        Print_Cl (page,4.5,6,COUL_CAR_B,COUL_FOND,"LE TABLEAU");
        Print_Cl (page,5,7,COUL_CAR_B,COUL_FOND,"NUMERO");
        Print_Cl (page,2,8,COUL_CAR_B,COUL_FOND,"VA ETRE DETRUIT");
        Print_Cl (page,3.5,10,COUL_CAR_B,COUL_FOND,"CONFIRMATION");
        Print_Cl (page,3,16,COUL_CAR_J,COUL_FOND,"OUI");
        Print_Cl (page,13,16,COUL_CAR_J,COUL_FOND,"NON");
        Souris (ON);
        Option (ON,page,INFO01_OUI);
        Option (ON,page,INFO01_NON);
        break;
    }
    case INFO02:
    {
        Souris (OFF);
        Print_Cl (page,6,1,COUL_CAR_B,COUL_FOND,"VITESSE");
        Print_Cl (page,3,3,COUL_CAR_J,COUL_FOND,"R   N   L   A");
        Print_Cl (page,5,7,COUL_CAR_B,COUL_FOND,"NOMBRE DE");
        Print_Cl (page,1,8,COUL_CAR_B,COUL_FOND,"DEPLACEMENT AVANT");
        Print_Cl (page,1.5,9,COUL_CAR_B,COUL_FOND,"UN CHANGEMENT DE");
        Print_Cl (page,5,10,COUL_CAR_B,COUL_FOND,"DIRECTION");
        Print_Cl (page,5.5,12,COUL_CAR_J,COUL_FOND,"<      >");
        Print_Cl (page,8.5,16,COUL_CAR_J,COUL_FOND,"OK");
        Souris (ON);
        Option (ON,page,INFO02_R);
        Option (ON,page,INFO02_N);
        Option (ON,page,INFO02_L);
        Option (ON,page,INFO02_A);
        Option (ON,page,INFO02_GAUCHE);
        Option (ON,page,INFO02_DROITE);
        Option (ON,page,INFO02_OK);
        break;
    }
    case INFO03:
    {
        Souris (OFF);
        Print_Cl (page,6,1,COUL_CAR_B,COUL_FOND,"VITESSE");
        Print_Cl (page,5,3,COUL_CAR_J,COUL_FOND,"R   N   L");
        Print_Cl (page,6,5,COUL_CAR_B,COUL_FOND,"OPTIONS");
        Print_Cl (page,8.5,16,COUL_CAR_J,COUL_FOND,"OK");
        Souris (ON);
        Option (ON,page,INFO03_R);
        Option (ON,page,INFO03_N);
        Option (ON,page,INFO03_L);
        Option (ON,page,INFO03_SO1);
        Option (ON,page,INFO03_SO2);
        Option (ON,page,INFO03_MO1);
        Option (ON,page,INFO03_MO2);
        Option (ON,page,INFO03_FL1);
        Option (ON,page,INFO03_FL2);
        Souris (OFF);
        x = CADX(2)+3;
        y = CADY(6)+3;
        Afficher_Bob (page,SNAKLES_BLANC+ 2,x+ 0,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 0,x+ 7,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 0,x+14,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 8,x+21,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 0,x+28,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+10,x+35,y,MASK_ON);
        x = CADX(10)+3;
        y = CADY(6)+3;
        Afficher_Bob (page,SNAKLES_BLANC+ 2,x+ 0,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 0,x+ 7,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 0,x+14,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 0,x+21,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 0,x+28,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 6,x+35,y,MASK_ON);
        x = CADX(2)+3;
        y = CADY(9)+3;
        Afficher_Bob (page,SNAKLES_VERT+ 2,x+ 0,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_VERT+ 0,x+ 7,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_VERT+ 0,x+14,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_VERT+ 6,x+21,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 0,x+28,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 6,x+35,y,MASK_ON);
        x = CADX(10)+3;
        y = CADY(9)+3;
        Afficher_Bob (page,SNAKLES_VERT+ 2,x+ 0,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_VERT+ 0,x+ 7,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_VERT+ 6,x+14,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_ORANGE+ 2,x+21,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_ORANGE+ 0,x+28,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_ORANGE+ 6,x+35,y,MASK_ON);
        x = CADX(2)+3;
        y = CADY(12)+3;
        Afficher_Bob (page,SNAKLES_BLANC+ 2,x+ 0,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 0,x+ 7,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 0,x+14,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 6,x+21,y,MASK_ON);
        Tracer_Droite (page,x+29,y+5,x+29+(12),y+5,240);
        x = CADX(10)+3;
        y = CADY(12)+3;
        Afficher_Bob (page,SNAKLES_BLANC+ 2,x+ 0,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 0,x+ 7,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 0,x+14,y,MASK_ON);
        Afficher_Bob (page,SNAKLES_BLANC+ 6,x+21,y,MASK_ON);
        Afficher_Point (page,x+29+ 0,y+5,240);
        Afficher_Point (page,x+29+ 2,y+5,240);
        Afficher_Point (page,x+29+ 4,y+5,240);
        Afficher_Point (page,x+29+ 6,y+5,240);
        Afficher_Point (page,x+29+ 8,y+5,240);
        Afficher_Point (page,x+29+10,y+5,240);
        Afficher_Point (page,x+29+12,y+5,240);
        Souris (ON);
        Option (ON,page,INFO03_OK);
        break;
    }
    case INFO04:
    {
        Souris (OFF);
        Nombre_Option (INFO04_NB,page,INFO04_LGNB,Lire_Temps ());
        Print_Cl (page,1.5,5,COUL_CAR_B,COUL_FOND,"COMPTE A REBOURS");
        Print_Cl (page,2,6,COUL_CAR_B,COUL_FOND,"SUR LA DUREE DU");
        Print_Cl (page,6,7,COUL_CAR_B,COUL_FOND,"TABLEAU");
        Print_Cl (page,6,9,COUL_CAR_J,COUL_FOND,"<");
        Print_Cl (page,12,9,COUL_CAR_J,COUL_FOND,">");
        Print_Cl (page,8.5,16,COUL_CAR_J,COUL_FOND,"OK");
        Souris (ON);
        Option (ON,page,INFO04_GAUCHE);
        Option (ON,page,INFO04_DROITE);
        Option (ON,page,INFO04_OK);
        break;
    }
    case INFO05:
    {
        Souris (OFF);
        Nombre_Option (INFO05_1_NB,page,INFO05_1_LGNB,Lire_Vlbonus () );
        Nombre_Option (INFO05_2_NB,page,INFO05_2_LGNB,Lire_Temps_Plus ());
        Nombre_Option (INFO05_3_NB,page,INFO05_3_LGNB,Lire_Temps_Moins ());
        x = CARX(3);
        y = CARY(1)-2;
        Afficher_Bob (page,BOB_PASTILLE+13,x,y,MASK_ON);
        Print_Cl (page,5,1,COUL_CAR_B,COUL_FOND,"BONUS POINT");
        Print_Cl (page,6,3,COUL_CAR_J,COUL_FOND,"<");
        Print_Cl (page,12,3,COUL_CAR_J,COUL_FOND,">");
        x = CARX(3.5);
        y = CARY(6)-2;
        Afficher_Bob (page,BOB_PASTILLE+20,x,y,MASK_ON);
        Print_Cl (page,5.5,6,COUL_CAR_B,COUL_FOND,"TEMPS PLUS");
        Print_Cl (page,6,8,COUL_CAR_J,COUL_FOND,"<");
        Print_Cl (page,12,8,COUL_CAR_J,COUL_FOND,">");
        x = CARX(3);
        y = CARY(11)-2;
        Afficher_Bob (page,BOB_PASTILLE+21,x,y,MASK_ON);
        Print_Cl (page,5,11,COUL_CAR_B,COUL_FOND,"TEMPS MOINS");
        Print_Cl (page,6,13,COUL_CAR_J,COUL_FOND,"<");
        Print_Cl (page,12,13,COUL_CAR_J,COUL_FOND,">");
        Print_Cl (page,8.5,16,COUL_CAR_J,COUL_FOND,"OK");
        Souris (ON);
        Option (ON,page,INFO05_1_GAUCHE);
        Option (ON,page,INFO05_1_DROITE);
        Option (ON,page,INFO05_2_GAUCHE);
        Option (ON,page,INFO05_2_DROITE);
        Option (ON,page,INFO05_3_GAUCHE);
        Option (ON,page,INFO05_3_DROITE);
        Option (ON,page,INFO05_OK);
        break;
    }
    case INFO06:
    {
        Souris (OFF);
        Print_Cl (page,1,6,COUL_CAR_B,COUL_FOND,"TOUS LES SERPENTS");
        Print_Cl (page,4.5,7,COUL_CAR_B,COUL_FOND,"VONT ETRES");
        Print_Cl (page,6,8,COUL_CAR_B,COUL_FOND,"EFFACES");
        Print_Cl (page,3.5,10,COUL_CAR_B,COUL_FOND,"CONFIRMATION");
        Print_Cl (page,3,16,COUL_CAR_J,COUL_FOND,"OUI");
        Print_Cl (page,13,16,COUL_CAR_J,COUL_FOND,"NON");
        Souris (ON);
        Option (ON,page,INFO06_OUI);
        Option (ON,page,INFO06_NON);
        break;
    }
    case INFO07:
    {
        Souris (OFF);
        Print_Cl (page,8.5,16,COUL_CAR_J,COUL_FOND,"OK");
        Souris (ON);
        Option (ON,page,INFO05_OK);
        break;
    }
    case INFO08:
    {
        Souris (OFF);
        Print_Cl (page,1.5,6,COUL_CAR_B,COUL_FOND,"TOUS LES DESSINS");
        Print_Cl (page,4.5,7,COUL_CAR_B,COUL_FOND,"VONT ETRES");
        Print_Cl (page,6,8,COUL_CAR_B,COUL_FOND,"EFFACES");
        Print_Cl (page,3.5,10,COUL_CAR_B,COUL_FOND,"CONFIRMATION");
        Print_Cl (page,3,16,COUL_CAR_J,COUL_FOND,"OUI");
        Print_Cl (page,13,16,COUL_CAR_J,COUL_FOND,"NON");
        Souris (ON);
        Option (ON,page,INFO08_OUI);
        Option (ON,page,INFO08_NON);
        break;
    }
    case INFO09:
    {
        Souris (OFF);
        Print_Cl (page,5,6,COUL_CAR_B,COUL_FOND,"SORTIE DE");
        Print_Cl (page,5,7,COUL_CAR_B,COUL_FOND,"l'EDITEUR");
        Print_Cl (page,3.5,9,COUL_CAR_B,COUL_FOND,"CONFIRMATION");
        Print_Cl (page,3,16,COUL_CAR_J,COUL_FOND,"OUI");
        Print_Cl (page,13,16,COUL_CAR_J,COUL_FOND,"NON");
        Souris (ON);
        Option (ON,page,INFO09_OUI);
        Option (ON,page,INFO09_NON);
        break;
    }
    case INFO10:
    {
        Souris (OFF);
        Print_Cl (page,3,6,COUL_CAR_B,COUL_FOND,"LE TABLEAU VA");
        Print_Cl (page,4,7,COUL_CAR_B,COUL_FOND,"ETRE EFFACE");
        Print_Cl (page,3.5,9,COUL_CAR_B,COUL_FOND,"CONFIRMATION");
        Print_Cl (page,3,16,COUL_CAR_J,COUL_FOND,"OUI");
        Print_Cl (page,13,16,COUL_CAR_J,COUL_FOND,"NON");
        Souris (ON);
        Option (ON,page,INFO10_OUI);
        Option (ON,page,INFO10_NON);
        break;
    }
    case INFO11:
    {
        Souris (OFF);
        Print_Cl (page,2,8,COUL_CAR_B,COUL_FOND,"TABLEAU COMPLET");
        Print_Cl (page,8.5,16,COUL_CAR_J,COUL_FOND,"OK");
        Souris (ON);
        Option (ON,page,INFO11_OK);
        break;
    }
    case INFO12:
    {
        Souris (OFF);
        Print_Cl (page,1,4,COUL_CAR_B,COUL_FOND,"TABLEAU INCOMPLET");
        Print_Cl (page,1,6,COUL_CAR_B,COUL_FOND,"CONDITIONS:");
        Print_Cl (page,3,8,COUL_CAR_B,COUL_FOND,"-AU MOINS UNE");
        Print_Cl (page,4,9,COUL_CAR_B,COUL_FOND,"PASTILLE BLEU");
        Print_Cl (page,3,11,COUL_CAR_B,COUL_FOND,"-SERPENT BLANC");
        Print_Cl (page,4,12,COUL_CAR_B,COUL_FOND,"DEFINI");
        Print_Cl (page,8.5,16,COUL_CAR_J,COUL_FOND,"OK");
        Souris (ON);
        Option (ON,page,INFO12_OK);
        break;
    }
    case INFO13:
    {
        Souris (OFF);
        Print_Cl (page,2,5,COUL_CAR_B,COUL_FOND,"SNAKLES EDITEUR");
        Print_Cl (page,4,6,COUL_CAR_B,COUL_FOND,"V2.0  09/97");
        Print_Cl (page,8.5,16,COUL_CAR_J,COUL_FOND,"OK");
        Souris (ON);
        Option (ON,page,INFO13_OK);
        break;
    }
    case INFO14:
    {
        Souris (OFF);
        Print_Cl (page,4,8,COUL_CAR_B,COUL_FOND,"LECTURE DES");
        Print_Cl (page,5.5,9,COUL_CAR_B,COUL_FOND,"TABLEAUX");
        Souris (ON);
        break;
    }
    case INFO15:
    {
        Souris (OFF);
        Print_Cl (page,2.5,6,COUL_CAR_B,COUL_FOND,"CREATION D'UNE");
        Print_Cl (page,2.5,7,COUL_CAR_B,COUL_FOND,"NOUVELLE SERIE");
        Print_Cl (page,3.5,9,COUL_CAR_B,COUL_FOND,"CONFIRMATION");
        Print_Cl (page,3,16,COUL_CAR_J,COUL_FOND,"OUI");
        Print_Cl (page,13,16,COUL_CAR_J,COUL_FOND,"NON");
        Souris (ON);
        Option (ON,page,INFO10_OUI);
        Option (ON,page,INFO10_NON);
        break;
    }
    }
}
void Afficher_Boite (OCTET page)
{
    OCTET couleur;
    short cptstr;
    short origx;
    short origy;
    short cpty;
    short cptx;
    origx = ( LIMITE_X_ECRAN - LG_BOITE ) / 2;
    origy = ( LIMITE_Y_ECRAN - HT_BOITE ) / 2;
    str = (char *) malloc ( LG_BOITE * HT_BOITE );
    cptstr = 0;
    Souris (OFF);
    for (cpty = 0;
            cpty < HT_BOITE;
            cpty ++)
    {
        for (cptx = 0;
                cptx < LG_BOITE;
                cptx ++)
        {
            couleur = Lire_Point (page,origx + cptx,origy + cpty);
            *(str + cptstr) = couleur;
            cptstr ++;
        }
    }
    for (cpty = 0;
            cpty < 15;
            cpty ++)
    {
        for (cptx = 0;
                cptx < 15;
                cptx ++)
        {
            Afficher_Bob (page,BOB_BLOC_BLEU,
                          origx + ( cptx * 10 ),
                          origy + ( cpty * 10 ),
                          MASK_OFF);
        }
    }
    Tracer_Droite (page,origx+LG_BOITE-1,origy+HT_BOITE-1,
                   origx+LG_BOITE-1,origy,COUL_DB);
    Tracer_Droite (page,origx+LG_BOITE-1,origy+HT_BOITE-1,
                   origx,origy+HT_BOITE-1,COUL_DB);
    Tracer_Droite (page,origx,origy,origx+LG_BOITE-1,origy,COUL_GH);
    Tracer_Droite (page,origx,origy,origx,origy+HT_BOITE-1,COUL_GH);
    Souris (ON);
}
void Effacer_Boite (OCTET page)
{
    OCTET couleur;
    short cptstr;
    short origx;
    short origy;
    short cpty;
    short cptx;
    origx = ( LIMITE_X_ECRAN - LG_BOITE ) / 2;
    origy = ( LIMITE_Y_ECRAN - HT_BOITE ) / 2;
    cptstr = 0;
    Souris (OFF);
    for (cpty = 0;
            cpty < HT_BOITE;
            cpty ++)
    {
        for (cptx = 0;
                cptx < LG_BOITE;
                cptx ++)
        {
            couleur = *(str + cptstr);
            cptstr ++;
            Afficher_Point (page,origx + cptx,origy + cpty,couleur);
        }
    }
    Souris (ON);
    free(str);
}
void Print_Cl (OCTET page,float x,float y,OCTET cl_car,OCTET cl_fond,
               char *message)
{
    short posx;
    short posy;
    posx = ( ( ( LIMITE_X_ECRAN - LG_BOITE ) / 2 ) + ( (x - 1) * 8 ) ) + 7;
    posy = ( ( ( LIMITE_Y_ECRAN - HT_BOITE ) / 2 ) + ( (y - 1) * 8 ) ) + 7;
    Print (page,posx,posy,cl_car,cl_fond,message);
}