numeric NumTout;
string StrTout,Poubelle,PoubelleA,PoubelleB;
picture PictureTout,PicturePoubA,PicturePoubB;
boolean IsNumeric,IsPictureA,IsPictureB;
IsNumeric=false;
IsPictureA=false;
IsPictureB=false;

vardef ModifierString(expr nbstring)=
  string ARetenir;
  ARetenir:="";
  for p=0 upto length nbstring-1:
    if substring(p,p+1) of nbstring=".":
      ARetenir:=ARetenir&" ";
    elseif substring(p,p+1) of nbstring="|||":
      ARetenir:=ARetenir&".";
    else:
      ARetenir:=ARetenir&substring(p,p+1) of nbstring;
    fi;
  endfor;
  ARetenir
enddef;

% sucre prof
def lignevide=Placer LigneVide enddef;
def commandevide(expr nbpas)=Placer CommandeVidemini(nbpas) enddef;
def deplacerscriptde(expr xxa,yya)=Deplacerde(xxa,yya) enddef;
def deplacerscripta(expr xxa,yya)=Deplacera(xxa,yya) enddef;

def num(expr nbpas)=if string nbpas:OvalNb(nbpas) else: OvalNb("\num{"&decimal(nbpas)&"}") fi enddef;

def commentaires(text nbpascom)=Placer Commentaires(nbpascom) enddef;
def commentairesligne(text nbpascom)=Placer CommentairesLigne(nbpascom) enddef;

%%% section Mouvement %%%%%%%%%%
def avancer(text nbpas)=
  Placer Avancer(nbpas)
enddef;

def tournerg(text nbpas)=
  Placer Tournerg(nbpas)
enddef;

def tournerd(text nbpas)=
  Placer Tournerd(nbpas)
enddef;

def aller(text nbpas)=
  Placer Aller(nbpas)
enddef;

def allera(text nbpas)=
  Placer Allera(nbpas)
enddef;

def glisser(text nbpas)=
  Placer Glisser(nbpas)
enddef;

def glissera(text nbpas)=
  Placer Glissera(nbpas)
enddef;

def orienter(text nbpas)=
  Placer Orienter(nbpas)
enddef;

def sorienter(text nbpas)=
  Placer Orienterdirection(nbpas);
enddef;

def ajouter(text nbpas)=
  Placer Ajouter(nbpas)
enddef;

def mettre(text nbpas)=
  Placer Mettre(nbpas)
enddef;

def rebondir=Placer Rebondir enddef;

def fixersensrotation(text nbpas)=
  Placer FixerSensRotation(nbpas)
enddef;

%% Apparence
def dirependant(text nbpas)=
  Placer DireT(nbpas)
enddef;

def dire(text nbpas)=
  Placer Dire(nbpas)
enddef;

def penserpendant(text nbpas)=
  Placer PenserT(nbpas)
enddef;

def penser(text nbpas)=
  Placer Penser(nbpas)
enddef;

def montrer=Placer Montrer enddef;

def cacher=Placer Cacher enddef;

%% évènement
def drapeau=Placer Drapeau enddef;

def touche(text nbpas)=
  Placer QPresse(nbpas)
enddef;

%%% contrôle
def attendre(expr nbpas)=
  Placer Attendre(nbpas)
enddef;

def attendrejusque(expr nbpas)=
  Placer AttendreJ(nbpas)
enddef;

def repeter(expr nbpas)=
  Placer Repeter(nbpas)
enddef;

def repeterjusque(expr nbpas)=Placer RepeterJ(nbpas) enddef;

def repeterindefiniment=Placer RepeterI enddef;

def finrepeter=Placer FinBlocRepeter enddef;

def si(expr nbpas)=Placer Si(nbpas) enddef;

def finsi=Placer FinBlocSi enddef;

def sinon=Placer Sinon enddef;

primarydef u sup p = TestOpSup(u,p) enddef;

primarydef u inf p = TestOpInf(u,p) enddef;

primarydef u egal p = TestOpEgal(u,p) enddef;

primarydef u et v = TestOpEt(u,v) enddef;

primarydef u ou v = TestOpOu(u,v) enddef;

def non(text nbpas)=TestOpNon(nbpas) enddef;

% capteurs

def demander(text nbpas)=
  Placer Demander(nbpas)
enddef;

def réponse=OvalCap("réponse") enddef;

% variable
vardef variable(text nomvar)=
  StrTout:=str nomvar;
  Poubelle:=ModifierString(StrTout);
  OvalVar(Poubelle)
enddef;

vardef variablebloc(text nomvar)=
  StrTout:=str nomvar;
  Poubelle:=ModifierString(StrTout);
  OvalBloc(Poubelle)
enddef;

vardef parametre(text nomvar)=
  StrTout:=str nomvar;
  Poubelle:=ModifierString(StrTout);
  OvalBloc(Poubelle)
enddef;

%% opérateurs

vardef add(expr termea,termeb)=
  if numeric termea :
    if numeric termeb:
      OpAdd(decimal(termea),decimal(termeb))
    else:
      OpAdd(decimal(termea),termeb)
    fi
  else:
    if numeric termeb:
      OpAdd(termea,decimal(termeb))
    else:
      OpAdd(termea,termeb)
    fi
  fi
enddef;

vardef sous(expr termea,termeb)=
  if numeric termea :
    if numeric termeb:
      OpSous(decimal(termea),decimal(termeb))
    else:
      OpSous(decimal(termea),termeb)
    fi
  else:
    if numeric termeb:
      OpSous(termea,decimal(termeb))
    else:
      OpSous(termea,termeb)
    fi
  fi
enddef;

vardef mul(expr termea,termeb)=
  if numeric termea :
    if numeric termeb:
      OpMulS(decimal(termea),decimal(termeb))
    else:
      OpMulS(decimal(termea),termeb)
    fi
  else:
    if numeric termeb:
      OpMulS(termea,decimal(termeb))
    else:
      OpMulS(termea,termeb)
    fi
  fi
enddef;

vardef divi(expr termea,termeb)=
  if numeric termea :
    if numeric termeb:
      OpDivS(decimal(termea),decimal(termeb))
    else:
      OpDivS(decimal(termea),termeb)
    fi
  else:
    if numeric termeb:
      OpDivS(termea,decimal(termeb))
    else:
      OpDivS(termea,termeb)
    fi
  fi
enddef;

def nombrealeatoire(text nbpas)=OpAlea(nbpas) enddef;

def regrouper(text nbpas)=OpRegrouper(nbpas) enddef;

% Variable
def mettrevariable(text nba)=
  Placer MettreVar(nba)
enddef;

def ajoutervariable(text nbpas)=%
  Placer AjouterVar(nbpas)
enddef;

def montrervariable(text nbpas)=
  Placer MontrerVar(nbpas);
enddef;

def cachervariable(text nbpas)=
  Placer CacherVar(nbpas);
enddef;


%Bloc
def definir(text nbpas)=Placer NouveauBloc(nbpas) enddef;   

def bloc(text nbpas)=Placer Bloc(nbpas) enddef;

%%%%%%%%%% Stylo
def effacer=Placer Effacer enddef;

def poserstylo=Placer PoserStylo enddef;

def releverstylo=Placer ReleverStylo enddef;

primarydef nba mettrevariablenew nbb=
  Placer MettreVariable(nba,nbb)
enddef;
