!!!!!!!!!!!!!-------- analyse de l'etape 1 -------!!!!!!!!!!!!!

  !!!!---- on verifie si tous les champs sont remplis ----!!!!
  errnb1=0
  errnb2=0
  !for i=1 to 2
    !if $(rdelimg$(i))=3
      errnb$(i)=$[$(errnb$(i))+1]
    !endif
    !if $(rdelimd$(i))=3
      errnb$(i)=$[$(errnb$(i))+1]
    !endif
    !if $(rborng$(i))=$empty
      errnb$(i)=$[$(errnb$(i))+1]
    !endif
    !if $(rbornd$(i))=$empty
      errnb$(i)=$[$(errnb$(i))+1]
    !endif
    !if $(errnb$(i))!=0
      1alertI$(i)=$alert2
    !endif
  !next i
  !if $errnb1!=0 or $errnb2!=0
    !exit
  !endif
  !!!!---- on verifie la validite de la reponse ----!!!!
  
  rborng1=!nospace $rborng1
  rbornd1=!nospace $rbornd1
  rborng2=!nospace $rborng2
  rbornd2=!nospace $rbornd2
  
  repsnb=4
  reps1=$rborng1
  reps2=$rbornd1
  reps3=$rborng2
  reps4=$rbornd2
  NonValide=alert3
  !read comsDir/repclean
  
  !if $alertreps1!=$empty or $alertreps2!=$empty
    2alertI1=$alert3
  !endif
  !if $alertreps3!=$empty or $alertreps4!=$empty
    2alertI2=$alert3
  !endif
  !if $2alertI1!=$empty or $2alertI2!=$empty
    rborng1=!replace internal " by ?? in $rborng1
    rbornd1=!replace internal " by ?? in $rbornd1
    rborng2=!replace internal " by ?? in $rborng2
    rbornd2=!replace internal " by ?? in $rbornd2
    !exit
  !endif
  
  !!!!!!!!!---- elimination des signes bizarres ----!!!!!!!!!
  errnb=0
  !for i=1 to 2
    !if infinity notin $(rborng$(i))
      rborng$(i)=!rawmath $(rborng$(i))
    !endif
    !if infinity notin $(rbornd$(i))
      rbornd$(i)=!rawmath $(rbornd$(i))
    !endif
    
    rborngTF$(i)=!exec maxima constantp($(rborng$(i)));
    rborndTF$(i)=!exec maxima constantp($(rbornd$(i)));
    !if ($(rborngTF$(i))!=true) and ($(rborng$(i))!=+infinity) and ($(rborng$(i))!=-infinity)
      2alertI$(i)=$alert3
      errnb=$[$errnb+1]
    !endif
    !if ($(rborndTF$(i))!=true) and ($(rbornd$(i))!=+infinity) and ($(rbornd$(i))!=-infinity)
      2alertI$(i)=$alert3
      errnb=$[$errnb+1]
    !endif
  !next i
 
  !if $errnb!=0
    !exit
  !endif
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  varborn=
  errnb=0
  !for i=1 to 2
    varborn=!varlist nofn $(rborng$(i))
    varborn=!listcomplement $bornVarList in $varborn
    !if $varborn!=$empty
      2alertI$(i)=$alert3
      errnb=$[$errnb+1]
      varborn=
    !endif
    varborn=!varlist nofn $(rbornd$(i))
    varborn=!listcomplement $bornVarList in $varborn
    !if $varborn!=$empty
      2alertI$(i)=$alert3
      errnb=$[$errnb+1]
      varborn=
    !endif
  !next i
  !if $errnb!=0
    !exit
  !endif
  !!!!!!!!---- si l'infini n'est pas signe, on refuse ----!!!!!!!!
  errnb=0
  !for i=1 to 2
    !if (infinity isin $(rborng$(i))) and (($(rborng$(i))!=+infinity) and ($(rborng$(i))!=-infinity))
      errnb=$[$errnb+1]
      2alertI$(i)=$alert3
    !endif
    !if (infinity isin $(rbornd$(i))) and (($(rbornd$(i))!=+infinity) and ($(rbornd$(i))!=-infinity))
      errnb=$[$errnb+1]
      2alertI$(i)=$alert3
    !endif
  !next i
  !if $errnb!=0
    !exit
  !endif
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  
  
  
  !!!!---- maintenant on analyse la reponse ----!!!!
    permut=0
    
    !!!!---- cas ou les intervalles sont permutes ----!!!!
  !if infinity notin $rborng1
    permut=1
    rborng1TF=!exec maxima $rborng1;
    !if $rborng1TF=$empty
       2alertI1=$alert3
       !exit
    !endif
    
    rborng1TF=!exec maxima ratsimp($rborng1-($borng2));
    !if $rborng1TF=$empty
       2alertI1=$alert3
       !exit
    !endif
    rborng1TF=!exec maxima abs($rborng1TF);
    !if $rborng1TF<$epsi
      rborng1TF=0
    !endif
    !if $rborng1TF=0
      !if $rbornd1=$bornd2
        I1TF=1
	VFI1=$Vrcom
       !else
        I1TF=0
	VFI1=$Fxcom
      !endif
     !else
      I1TF=0
      VFI1=$Fxcom
    !endif
    !if infinity notin $rbornd2
      rbornd2TF=!exec maxima $rbornd2;
      !if $rbornd2TF=$empty
        2alertI2=$alert3
       !exit
      !endif
        
      rbornd2TF=!exec maxima ratsimp($rbornd2-($bornd1));
      !if $rbornd2TF=$empty
        2alertI2=$alert3
        !exit
      !endif
      rbornd2TF=!exec maxima abs($rbornd2TF);
      !if $rbornd2TF<$epsi
        rbornd2TF=0
      !endif
      !if $rbornd2TF=0
        !if $rborng2=$borng1
	  I2TF=1
	  VFI2=$Vrcom
	 !else
	  I2TF=0
	  VFI2=$Fxcom
	!endif
       !else
         I2TF=0
	 VFI2=$Fxcom
      !endif
     !else
      I2TF=0
      VFI2=$Fxcom
    !endif
  !endif
    !!!!---- cas ou les intervalles sont dans l'ordre attendu ----!!!!
  !if $permut=0
    !if $rborng1 !=$borng1 or (infinity isin $rbornd1)
      I1TF=0
      VFI1=$Fxcom
     !else
      rbornd1TF=!exec maxima $rbornd1;
      !if $rbornd1TF=$empty
        2alertI1=$alert3
        !exit
      !endif
        
      rbornd1TF=!exec maxima ratsimp($rbornd1-($bornd1));
      !if $rbornd1TF=$empty
        2alertI1=$alert3
        !exit
      !endif
      rbornd1TF=!exec maxima abs($rbornd1TF);
      !if $rbornd1TF<$epsi
        rbornd1TF=0
      !endif
      !if $rbornd1TF=0
        I1TF=1
	VFI1=$Vrcom
       !else
        I1TF=0
	VFI1=$Fxcom
      !endif
    !endif
    !if $rbornd2 !=$bornd2 or (infinity isin $rborng2)
      I2TF=0
      VFI2=$Fxcom
     !else
      rborng2TF=!exec maxima $rborng2;
      !if $rborng2TF=$empty
        2alertI2=$alert3
        !exit
      !endif
      rborng2TF=!exec maxima ratsimp($rborng2-($borng2));
      !if $rborng2TF=$empty
        2alertI1=$alert3
        !exit
      !endif
      rborng2TF=!exec maxima abs($rborng2TF);
      !if $rborng2TF<$epsi
        rborng2TF=0
      !endif
      !if $rborng2TF=0
        I2TF=1
	VFI2=$Vrcom
       !else
        I2TF=0
	VFI2=$Fxcom
      !endif
    !endif
  !endif  
 
  !!!!---- pour affichage ----!!!!
  !for i= 1 to 2
    !if infinity isin $(rborng$(i))
      prborng$(i)=!replace internal infinity by \infty in $(rborng$(i))
     !else
      prborng$(i)=!texmath $(rborng$(i))
    !endif
    !if infinity isin $(rbornd$(i))
      prbornd$(i)=!replace internal infinity by \infty in $(rbornd$(i))
     !else
      prbornd$(i)=!texmath $(rbornd$(i))
    !endif
  !next i
 
  
  !!!!---- si au moins une borne est fausse, on arrete ----!!!!
  !if $I1TF=0 or $I2TF=0
    module_score=$note
    !read answer.phtml
    status=done
    !exit
  !endif
  !!!!---- si on trouve les bornes, on analyse les crochets ----!!!!
  !if $permut=0
  !if $rdelimg1=$delimg1
      rdelimg1=<font color=green><tt>$(delim$(rdelimg1))</tt></font>
     !else
      rdelimg1=<font color=red><tt>$(delim$(rdelimg1))</tt></font>
  !endif 
  !if $rdelimg2=$delimg2
      rdelimg2=<font color=green><tt>$(delim$(rdelimg2))</tt></font>
     !else
      rdelimg2=<font color=red><tt>$(delim$(rdelimg2))</tt></font>
  !endif
  !if $rdelimd1=$delimd1
      rdelimd1=<font color=green><tt>$(delim$(rdelimd1))</tt></font>
     !else
      rdelimd1=<font color=red><tt>$(delim$(rdelimd1))</tt></font>
  !endif 
  !if $rdelimd2=$delimd2
      rdelimd2=<font color=green><tt>$(delim$(rdelimd2))</tt></font>
     !else
      rdelimd2=<font color=red><tt>$(delim$(rdelimd2))</tt></font>
  !endif
  !endif
  
  !if $permut=1
  !if $rdelimg1=$delimg2
      rdelimg1=<font color=green><tt>$(delim$(rdelimg1))</tt></font>
     !else
      rdelimg1=<font color=red><tt>$(delim$(rdelimg1))</tt></font>
  !endif 
  !if $rdelimg2=$delimg1
      rdelimg2=<font color=green><tt>$(delim$(rdelimg2))</tt></font>
     !else
      rdelimg2=<font color=red><tt>$(delim$(rdelimg2))</tt></font>
  !endif
  !if $rdelimd1=$delimd2
      rdelimd1=<font color=green><tt>$(delim$(rdelimd1))</tt></font>
     !else
      rdelimd1=<font color=red><tt>$(delim$(rdelimd1))</tt></font>
  !endif 
  !if $rdelimd2=$delimd1
      rdelimd2=<font color=green><tt>$(delim$(rdelimd2))</tt></font>
     !else
      rdelimd2=<font color=red><tt>$(delim$(rdelimd2))</tt></font>
  !endif
  !endif
  
  
  
  rep=1
  note=$[$note+2]
