#include "SOUREDIT/EDITSOUR.H"
#include "SOUREDIT/EDITPANN.H"
#include "SOUREDIT/EDITGRAP.H"
#include "SOUREDIT/EDITTABL.H"
#include "SOUREDIT/EDITBOIT.H"
#include "SOUREDIT/EDITONGL.H"
#include "SOUREDIT/EDITCHAR.H"
short Afficher_Obstacles_Dessins (OCTET,OCTET,OCTET,OCTET);
void Selectionner_Dessin (void);
void Tracer_Selection (short,short,short,short);
void Sauver_Selection (short,short,short,short);
void Restaurer_Selection (short,short,short,short);
OCTET Calculer_Afficher_Dessin (void);
OCTET Calculer_Effacer_Dessin (void);
void Envoyer_Elements_buffer (OCTET,OCTET);
void Effacer_Tous_Dessin (void);
OCTET Calculer_Taille_Dessin (void);
extern OCTET buftab1_sans_cadre [BUFSIZE_SANS_CADRE];
OCTET page_panneau;
OCTET page_dessins;
OCTET ht [2][(DESSINS_MAX_LG * LG_BOB)+2];
OCTET vt [2][(DESSINS_MAX_HT * HT_BOB)+2];
short nb_element;
short selection_x;
short selection_y;
OCTET selection_lg;
OCTET selection_ht;
void Panneau_4 (void)
{
OCTET etat;
OCTET cpt_dessin;
OCTET nombre_dessin;
Lire_Tableau ( Lire_Tableau_Encours() );
Lire_Buftab_Sans_Cadre (buftab1_sans_cadre);
Ecrire_Panneau_Encours (Lire_Panneau_Demande () );
Ecrire_Panneau_Demande (0);
page_panneau = (Lire_Page () == 0) ? 1 : 0;
Afficher_Onglet (page_panneau,ONGLET4);
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,0,310,13,MASK_OFF);
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,0,310,20,MASK_OFF);
nb_element = Afficher_Obstacles_Dessins (1,1,43,33);
nombre_dessin = Lire_Nbdessin ();
for (cpt_dessin = 0;
cpt_dessin < nombre_dessin;
cpt_dessin ++)
{
Afficher_Dessin (-2,20,page_panneau,cpt_dessin);
Envoyer_Elements_buffer (cpt_dessin,0);
}
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,nombre_dessin,310,139,MASK_OFF);
Changer_Page (page_panneau);
page_dessins = (Lire_Page () == 0) ? 1 : 0;
Lire_Image_Pcx ("SPRFILES/DESSINS",page_dessins,
0,0,MASK_OFF,0,0,319,399);
Print (page_dessins,10,3,240,112,"X:");
Print (page_dessins,60,3,240,112,"Y:");
Print (page_dessins,110,3,240,112,"L:");
Print (page_dessins,160,3,240,112,"H:");
Afficher_Nombre (page_dessins,BOB_CHIFFRE_2,2,0,26,3,MASK_OFF);
Afficher_Nombre (page_dessins,BOB_CHIFFRE_2,2,0,76,3,MASK_OFF);
Afficher_Nombre (page_dessins,BOB_CHIFFRE_2,2,0,126,3,MASK_OFF);
Afficher_Nombre (page_dessins,BOB_CHIFFRE_2,2,0,176,3,MASK_OFF);
Print (page_dessins,40,390,245,112,"");
Activer_Zone_Croix (5,31,305,393);
selection_x = 0;
selection_y = 0;
selection_lg = 0;
selection_ht = 0;
do
{
if ( Test_Clic_Zone (X_Fleche (),Y_Fleche (),309,51,319,79) == ON )
{
Option (OFF,page_panneau,309,51,319,79);
WAIT_NO_CLIC;
Option (ON,page_panneau,309,51,319,79);
if (nb_element != 0)
{
Changer_Page (page_dessins);
Activer_Zone_Croix (9,13,309,386);
Selectionner_Dessin ();
Changer_Page (page_panneau);
Activer_Zone_Croix (5,31,305,393);
}
}
if ( Test_Clic_Zone (X_Fleche (),Y_Fleche (),309,80,319,114) == ON )
{
Option (OFF,page_panneau,309,80,319,114);
WAIT_NO_CLIC;
if (nb_element != 0)
{
if ( (selection_lg != 0) & (selection_ht != 0) )
{
do
{
etat = Calculer_Afficher_Dessin ();
}
while (etat != FAUX);
}
}
Option (ON,page_panneau,309,80,319,114);
}
if ( Test_Clic_Zone (X_Fleche (),Y_Fleche (),309,115,319,137) == ON )
{
Option (OFF,page_panneau,309,115,319,137);
WAIT_NO_CLIC;
nombre_dessin = Lire_Nbdessin ();
if (nombre_dessin != 0)
{
if (nb_element != 0)
{
do
{
etat = Calculer_Effacer_Dessin ();
}
while (etat != FAUX);
}
}
Option (ON,page_panneau,309,115,319,137);
}
if ( Test_Clic_Zone (X_Fleche (),Y_Fleche (),309,155,319,183) == ON )
{
Option (OFF,page_panneau,309,155,319,183);
WAIT_NO_CLIC;
nombre_dessin = Lire_Nbdessin ();
if (nb_element != 0)
{
do
{
etat = Calculer_Taille_Dessin ();
}
while (etat != FAUX);
}
Option (ON,page_panneau,309,155,319,183);
}
if ( Test_Clic_Zone (X_Fleche (),Y_Fleche (),309,28,319,50) == ON )
{
Option (OFF,page_panneau,309,28,319,50);
WAIT_NO_CLIC;
nombre_dessin = Lire_Nbdessin ();
if (nombre_dessin != 0)
if (nb_element != 0)
Effacer_Tous_Dessin ();
Option (ON,page_panneau,309,28,319,50);
}
if (X_Case () != 0)
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,X_Case(),310,13,MASK_OFF);
if (Y_Case () != 0)
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,Y_Case(),310,20,MASK_OFF);
}
while (Lire_Panneau_Demande () == 0);
Desactiver_Zone_Croix ();
Sauver_Tableau (Lire_Tableau_Encours ());
}
short Afficher_Obstacles_Dessins (OCTET x1,OCTET y1,OCTET x2,OCTET y2)
{
OCTET cpt_x;
OCTET cpt_y;
short x_bob;
short y_bob;
short cpt_dessin;
OCTET pastille;
cpt_dessin = 0;
for (cpt_y = y1;
cpt_y <= y2;
cpt_y ++)
{
for (cpt_x = x1;
cpt_x <= x2;
cpt_x ++)
{
pastille = Lire_Case (buftab1_sans_cadre,cpt_x,cpt_y);
x_bob = X_TAB_DESSINS + ( (cpt_x - 1) * LG_BOB );
y_bob = Y_TAB_DESSINS + ( (cpt_y - 1) * HT_BOB );
if (pastille == OBST_DESSIN)
{
Afficher_Bob (page_panneau,FOND_1,x_bob,y_bob,MASK_OFF);
Afficher_Bob (page_panneau,(BOB_PASTILLE-1) + OBST_DESSIN,
x_bob,y_bob,MASK_ON);
cpt_dessin ++;
}
else
{
Ecrire_Case (buftab1_sans_cadre,0,cpt_x,cpt_y);
Afficher_Bob (page_panneau,FOND_1,x_bob,y_bob,MASK_OFF);
}
}
}
return (cpt_dessin);
}
void Selectionner_Dessin (void)
{
OCTET taille;
short x1,y1;
short x2,y2;
short xb,yb;
selection_x = 0;
selection_y = 0;
selection_lg = 0;
selection_ht = 0;
x1 = 0;
y1 = 0;
x2 = 0;
y2 = 0;
xb = x2;
yb = y2;
do
{
do
{
if (Clic_Souris () == CLIC_DROITE)
{
if ( (x1 != 0) & (y1 != 0) & (x2 != 0) & (y2 != 0) )
{
Souris (OFF);
Restaurer_Selection (x1,y1,xb,yb);
Souris (ON);
}
Ecrire_Panneau_Demande (0);
selection_x = x1+1;
selection_y = y1+1;
selection_lg = (x2-x1) / LG_BOB;
selection_ht = (y2-y1) / HT_BOB;
if (selection_lg > DESSINS_MAX_LG)
selection_lg = DESSINS_MAX_LG;
if (selection_ht > DESSINS_MAX_HT)
selection_ht = DESSINS_MAX_HT;
return;
}
if (X_Case () != 0)
Afficher_Nombre (page_dessins,BOB_CHIFFRE_2,2,X_Case(),26,3,MASK_OFF);
if (Y_Case () != 0)
Afficher_Nombre (page_dessins,BOB_CHIFFRE_2,2,Y_Case(),76,3,MASK_OFF);
}
while (Test_Clic_Zone (X_Fleche (),Y_Fleche (),9,13,309,386) == OFF);
if ( (x1 != 0) & (y1 != 0) & (x2 != 0) & (y2 != 0) )
{
Souris (OFF);
Restaurer_Selection (x1,y1,xb,yb);
Souris (ON);
}
x1 = 9 + ((X_Croix () / LG_BOB) * LG_BOB)- 1;
y1 = 13 + ((Y_Croix () / HT_BOB) * HT_BOB)- 1;
x2 = 9 + ((X_Croix () / LG_BOB) * LG_BOB)+ LG_BOB;
y2 = 13 + ((Y_Croix () / HT_BOB) * HT_BOB)+ HT_BOB;
xb = x2;
yb = y2;
Souris (OFF);
Sauver_Selection (x1,y1,x2,y2);
Tracer_Selection (x1,y1,x2,y2);
Souris (ON);
do
{
taille = (x2-x1) / LG_BOB;
if ( (taille >= 1) & (taille <= DESSINS_MAX_LG) )
Afficher_Nombre (page_dessins,BOB_CHIFFRE_2,2,taille,126,3,MASK_OFF);
taille = (y2-y1) / HT_BOB;
if ( (taille >= 1) & (taille <= DESSINS_MAX_HT) )
Afficher_Nombre (page_dessins,BOB_CHIFFRE_2,2,taille,176,3,MASK_OFF);
if ( (X_Croix () == -1) | (Y_Croix () == -1) )
{
Souris (OFF);
Restaurer_Selection (x1,y1,xb,yb);
Souris (ON);
break;
}
x2 = 9+((X_Croix ()/LG_BOB)*LG_BOB)+LG_BOB;
y2 = 13+((Y_Croix ()/HT_BOB)*HT_BOB)+HT_BOB;
if ((x1+LG_BOB < x2) & (y1+HT_BOB < y2))
{
if ( (x2 < x1 + ((DESSINS_MAX_LG+1) * LG_BOB)) & (x2 != xb) )
{
Souris (OFF);
Restaurer_Selection (x1,y1,xb,yb);
Sauver_Selection (x1,y1,x2,yb);
Tracer_Selection (x1,y1,x2,yb);
Souris (ON);
xb = x2;
}
if ( (y2 < y1 + ((DESSINS_MAX_HT+1) * HT_BOB)) & (y2 != yb) )
{
Souris (OFF);
Restaurer_Selection (x1,y1,xb,yb);
Sauver_Selection (x1,y1,xb,y2);
Tracer_Selection (x1,y1,xb,y2);
Souris (ON);
yb = y2;
}
}
}
while (Clic_Souris () == CLIC_GAUCHE);
}
while (1);
}
void Tracer_Selection (short x1,short y1,short x2,short y2)
{
short ecartx;
short ecarty;
ecartx = x2-x1;
ecarty = y2-y1;
Tracer_Droite (page_dessins,
x1,y1,x1 + ecartx,y1,DESSINS_SELECT_COUL);
Tracer_Droite (page_dessins,
x1,y1 + ecarty,x1 + ecartx,y1 + ecarty,DESSINS_SELECT_COUL);
Tracer_Droite (page_dessins,
x1,y1,x1,y1 + ecarty,DESSINS_SELECT_COUL);
Tracer_Droite (page_dessins,
x1 + ecartx,y1,x1 + ecartx,y1 + ecarty,DESSINS_SELECT_COUL);
}
void Sauver_Selection (short x1,short y1,short x2,short y2)
{
short cpt;
OCTET couleur;
for (cpt = 0;
cpt <= (x2-x1);
cpt ++)
{
couleur = Lire_Point (page_dessins,(x1 + cpt),y1);
ht [0][cpt] = couleur;
couleur = Lire_Point (page_dessins,(x1 + cpt),y2);
ht [1][cpt] = couleur;
}
for (cpt = 0;
cpt <= (y2-y1);
cpt ++)
{
couleur = Lire_Point (page_dessins,x1,(y1 + cpt));
vt [0][cpt] = couleur;
couleur = Lire_Point (page_dessins,x2,(y1 + cpt));
vt [1][cpt] = couleur;
}
}
void Restaurer_Selection (short x1,short y1,short x2,short y2)
{
short cpt;
OCTET couleur;
for (cpt = 0;
cpt <= (x2-x1);
cpt ++)
{
couleur = ht [0][cpt];
Afficher_Point (page_dessins,(x1 + cpt),y1,couleur);
couleur = ht [1][cpt];
Afficher_Point (page_dessins,(x1 + cpt),y2,couleur);
}
for (cpt = 0;
cpt <= (y2-y1);
cpt ++)
{
couleur = vt [0][cpt];
Afficher_Point (page_dessins,x1,(y1 + cpt),couleur);
couleur = vt [1][cpt];
Afficher_Point (page_dessins,x2,(y1 + cpt),couleur);
}
}
OCTET Calculer_Afficher_Dessin (void)
{
OCTET x,y;
OCTET numero_dessin;
OCTET element_lg;
OCTET element_ht;
numero_dessin = Lire_Nbdessin ();
if (numero_dessin >= NB_DESSIN_TABLEAU) return (FAUX);
do
{
if (X_Case () != 0)
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,X_Case(),310,13,MASK_OFF);
if (Y_Case () != 0)
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,Y_Case(),310,20,MASK_OFF);
}
while (Clic_Souris () != CLIC_GAUCHE);
do
{
x = X_Case ();
y = Y_Case ();
if ( (x == 0) | (y == 0) )
{
Ecrire_Panneau_Demande (0);
return (FAUX);
}
}
while (Clic_Souris () == CLIC_GAUCHE);
element_lg = selection_lg;
element_ht = selection_ht;
Calculer_Surface (x,y,&element_lg,&element_ht);
if (element_lg == 0)
{
Ecrire_Panneau_Demande (0);
return (VRAI);
}
numero_dessin = Lire_Nbdessin ();
Ecrire_Xfcdessin (numero_dessin,selection_x);
Ecrire_Yfcdessin (numero_dessin,selection_y);
Ecrire_Xdessin (numero_dessin,x);
Ecrire_Ydessin (numero_dessin,y);
Ecrire_Lgdessin (numero_dessin,element_lg);
Ecrire_Htdessin (numero_dessin,element_ht);
Ecrire_Nbdessin (numero_dessin+1);
Envoyer_Elements_buffer (numero_dessin,0);
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,numero_dessin+1,310,139,MASK_OFF);
Souris (OFF);
Afficher_Dessin (-2,20,page_panneau,numero_dessin);
Souris (ON);
Ecrire_Panneau_Demande (0);
return (VRAI);
}
OCTET Calculer_Effacer_Dessin (void)
{
OCTET cpt;
OCTET x,y;
OCTET x1buffer;
OCTET y1buffer;
OCTET x2buffer;
OCTET y2buffer;
OCTET lgbuffer;
OCTET htbuffer;
OCTET numero_dessin;
numero_dessin = Lire_Nbdessin ();
if (numero_dessin <= 0) return (FAUX);
do
{
if (X_Case () != 0)
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,X_Case(),310,13,MASK_OFF);
if (Y_Case () != 0)
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,Y_Case(),310,20,MASK_OFF);
}
while (Clic_Souris () != CLIC_GAUCHE);
do
{
x = X_Case ();
y = Y_Case ();
if ( (x == 0) | (y == 0) )
{
Ecrire_Panneau_Demande (0);
return (FAUX);
}
}
while (Clic_Souris () == CLIC_GAUCHE);
for (cpt = 0;
cpt < numero_dessin;
cpt ++)
{
lgbuffer = Lire_Lgdessin (cpt);
htbuffer = Lire_Htdessin (cpt);
x1buffer = Lire_Xdessin (cpt);
y1buffer = Lire_Ydessin (cpt);
x2buffer = x1buffer + (lgbuffer - 1);
y2buffer = y1buffer + (htbuffer - 1);
if ( (x >= x1buffer) & (x <= x2buffer) &
(y >= y1buffer) & (y <= y2buffer) )
{
Envoyer_Elements_buffer (cpt,
OBST_DESSIN);
Souris (OFF);
Afficher_Obstacles_Dessins (x1buffer,
y1buffer,
x1buffer + (lgbuffer - 1),
y1buffer + (htbuffer - 1) );
Souris (ON);
Annuler_Dessin_Structure (cpt);
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,
numero_dessin-1,310,139,
MASK_OFF);
break;
}
}
Ecrire_Panneau_Demande (0);
return (VRAI);
}
void Envoyer_Elements_buffer (OCTET num_dessin,OCTET element)
{
OCTET cptx;
OCTET cpty;
OCTET xbuffer;
OCTET ybuffer;
OCTET lgbuffer;
OCTET htbuffer;
xbuffer = Lire_Xdessin (num_dessin);
ybuffer = Lire_Ydessin (num_dessin);
lgbuffer = Lire_Lgdessin (num_dessin);
htbuffer = Lire_Htdessin (num_dessin);
for (cpty = 0;
cpty < htbuffer;
cpty ++)
{
for (cptx = 0;
cptx < lgbuffer;
cptx ++)
{
Ecrire_Case (buftab1_sans_cadre,
element,
xbuffer + cptx,
ybuffer + cpty);
}
}
}
void Effacer_Tous_Dessin (void)
{
OCTET nombre_dessin;
OCTET cpt_dessin;
OCTET xdessin;
OCTET ydessin;
OCTET lgdessin;
OCTET htdessin;
OCTET reponse;
Afficher_Boite_Message (page_panneau,INFO08);
reponse = RIEN;
do
{
if ( Test_Option (INFO08_OUI) == ON )
{
reponse = OUI;
Option (OFF,page_panneau,INFO08_OUI);
WAIT_NO_CLIC;
Option (ON,page_panneau,INFO08_OUI);
}
if ( Test_Option (INFO08_NON) == ON )
{
reponse = NON;
Option (OFF,page_panneau,INFO08_NON);
WAIT_NO_CLIC;
Option (ON,page_panneau,INFO08_NON);
}
}
while (reponse == RIEN);
Effacer_Boite (page_panneau);
if (reponse == OUI)
{
nombre_dessin = Lire_Nbdessin ();
for (cpt_dessin = 0;
cpt_dessin < nombre_dessin;
cpt_dessin ++)
{
Envoyer_Elements_buffer (cpt_dessin,
OBST_DESSIN);
xdessin = Lire_Xdessin (cpt_dessin);
ydessin = Lire_Ydessin (cpt_dessin);
lgdessin = Lire_Lgdessin (cpt_dessin);
htdessin = Lire_Htdessin (cpt_dessin);
Souris (OFF);
Afficher_Obstacles_Dessins (xdessin,
ydessin,
xdessin + (lgdessin - 1),
ydessin + (htdessin - 1));
Souris (ON);
}
Ecrire_Nbdessin (0);
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,0,310,139,MASK_OFF);
}
Ecrire_Panneau_Demande (0);
}
OCTET Calculer_Taille_Dessin (void)
{
OCTET x,y;
OCTET element_lg;
OCTET element_ht;
do
{
if (X_Case () != 0)
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,X_Case(),310,13,MASK_OFF);
if (Y_Case () != 0)
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,Y_Case(),310,20,MASK_OFF);
}
while (Clic_Souris () != CLIC_GAUCHE);
do
{
x = X_Case ();
y = Y_Case ();
if ( (x == 0) | (y == 0) )
{
Ecrire_Panneau_Demande (0);
return (FAUX);
}
}
while (Clic_Souris () == CLIC_GAUCHE);
element_lg = 43;
element_ht = 33;
Calculer_Surface (x,y,&element_lg,&element_ht);
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,element_lg,310,185,MASK_OFF);
Afficher_Nombre (page_panneau,BOB_CHIFFRE,2,element_ht,310,198,MASK_OFF);
Ecrire_Panneau_Demande (0);
return (VRAI);
}