diff --git a/Labgen/a.out b/Labgen/a.out
index 26c1cd3880170181255f8f5deff8e44319d3e462..a7f31d8ddde3f96c4943183255bde0d4207c6297 100755
Binary files a/Labgen/a.out and b/Labgen/a.out differ
diff --git a/Labgen/labgen.c b/Labgen/labgen.c
index 62d4a14a4221e5fc2cdf12a4363a9667fe3018d9..313e9273763e58e59446f18cf55c930b6210a8d5 100644
--- a/Labgen/labgen.c
+++ b/Labgen/labgen.c
@@ -198,20 +198,31 @@ int RS3_check(){
 }
 
 /* RS4 : L'entrée et les sorties du labyrinthe doivent se situer sur la périphérie
- * du labyrinthe */
+ * du labyrinthe
+ * E est le point d'entrée
+ * S est un tableau dynamique de l'ensemble des sorties
+ * nb_S est le nombre de sorties
+ * size est un point donnant la taille du tableau */
 int RS4(Point E, Point* S, int nb_S, Point size){
    int i;
    Point tmp;
 
    if (S == NULL){
-     printf("RS4 : La liste des sorties est vide.\n");
+     fprintf(stderr,"RS4 : La liste des sorties est non initialisée.\n");
      exit(1);
    }
 
-   if (E.c != 0 && E.l != 0 && E.c != size.c && E.l != size.l){
+   else if (nb_S == 0){
+     printf("RS4 : La liste des sorties est vide.\n");
+     return 0;
+   }
+
+   /* Vérification pour l'entrée */
+   else if (E.c != 0 && E.l != 0 && E.c != size.c && E.l != size.l){
       return 0;
    }
 
+   /* Vérification pour toutes les sorties */
    else {
      for (i=0 ; i<nb_S ; i++){
        tmp = S[i];
@@ -224,7 +235,9 @@ int RS4(Point E, Point* S, int nb_S, Point size){
  }
 
 
-/*int main(){
+/* Test des fonctions pour les règles sémantiques */
+int main(){
+  char*** matrice = create_matrice(5,6);
   Point size = new_point(5,6);
 
   Point entree1 = new_point(0,0);
@@ -232,11 +245,20 @@ int RS4(Point E, Point* S, int nb_S, Point size){
   Point entree3 = new_point(5,0);
   Point entree4 = new_point(0,5);
 
+  change_val_matrice(entree1,"E",matrice);
+  change_val_matrice(entree2,"E",matrice);
+  change_val_matrice(entree3,"E",matrice);
+  change_val_matrice(entree4,"E",matrice);
+
 
   Point* listeS = NULL;
   listeS = calloc(1,sizeof(Point));
-  listeS[0] = new_point(0,0);
-  printf("listeS[0] : (%d,%d)\n",listeS[0].c, listeS[0].l);
+  listeS[0] = new_point(5,6);
+  /* A tester : pour plusieurs sorties */
+  change_val_matrice(new_point(5,6),"S",matrice);
+  affichmat(matrice);
+
+  printf("\nlisteS[0] : (%d,%d)\n",listeS[0].c, listeS[0].l);
 
   printf("Test entree1 : %d\n", RS4(entree1,listeS,1,size));
   printf("Test entree2 : %d\n", RS4(entree2,listeS,1,size));
@@ -245,11 +267,12 @@ int RS4(Point E, Point* S, int nb_S, Point size){
 
 
   return 0;
-}*/
+}
 
 
 
-int main () {
+/* Test des fonctions de base de la matrice et de listevars */
+/*int main () {
   char*** matrice = create_matrice(5,6);
 
   Point p1 = new_point(4,2);
@@ -278,4 +301,4 @@ int main () {
   printf("Deuxième valeur : %d\n",listevars.val[1]);
 
   return 0;
-}
+}*/