             **** Instructions de script ROBOCOM 3.1 ****

Un script ROBOCOM est un fichier texte contenant des instructions.   
Le script, selon les besoins, peut tre trs simple, court et linaire
(initiation: utiliser uniquement les instructions C:  E:  T:),
ou se complexifier d'instructions de condition et de dbranchement
(ajouter les instructions ?:  D:  M:  L:  G:  X:  P:  *:).
Enfin, les initis pourront implmenter un automate d'tats finis
(ajouter les instructions A:  /: )

Une macro (sous-script) utilise le mme jeu d'instruction qu'un script, 
 l'exclusion de l'instruction M: (appel dc'une macro). Une macro ne peut
non plus contenir les instructions A: et /: d'automate d'tats finis 

Rgles gnrales de syntaxe:
*************************** 
Une ligne d'instruction commence en colonne 1 par l'instruction elle
mme (1 caractre majuscule significatif suivit de :), ensuite viennent
le paramtre (sur 3 colonnes), un espace, et le commentaire (facultatif).
   
Toute ligne ne commenant pas par une instruction est simplement ignore
(donc peut servir  documenter le script).

* exemple d'instruction pour envoyer la commande 58 au robot
* l'instruction est C: en colonne 1
* le paramtre est 58 (ou x3A) dans les colonnes 3,4 et 5 
* le commentaire Bla-bla commence en colonne 7 
C: 58 Bla-bla    

Il y a quelques exceptions  ces rgles (voir instruction spcifique).

Le jeu d'instruction de script est compos de 13 instructions:
C:  E:  T:  ?:  D:  M:  L:  G:  X:  P:  *:  A:  /:    

=======================================================================
Commande (envoi d'une commande) au Robot
****************************************
C:nnn Bla-bla
C:xnn Bla-bla

ex  C:x56 avance d'un pas

=======================================================================
Evnement (attendre rception d'un vnement prcis) du Robot
*****************************************************
E:nnn Bla-bla
E:xnn Bla-bla
E:    Bla-bla

note: L'attente de vnement espr peut tre pondr dans le temps
par un dlai limitatif (voir plus loin l'instruction D:).    

la troisime syntaxe (sans paramtre) est une forme particulire de
l'instruction qui permet d'attendre n'importe quel vnement. Elle
est gnralement suivie d'une ou plusieurs instructions de condition ?:

ex  E: 23 attendre le signal 23 du robot
ex  E:    attendre n'importe quel signal
(veuillez noter les espaces rservs du paramtre vide)

=======================================================================
Temps d'attente
***************
T:nnn Bla-bla
T:n,n Bla-bla
T:0   Bla-bla

le temps est indiqu en secondes. La virgule dcimale permet d'indiquer
des fractions de seconde.  
Un temps infini  la valeur 0. C'est une manire de mettre un point
d'arrt dans le script (une autre manire est d'utiliser P:). Il suffit
de cliquer sur la ligne suivante pour continuer.  

ex  T:2   attendre 2 secondes 
ex  T:0,5 attendre 1/2 seconde
ex  T:0   attente infinie  

=======================================================================
Test de Condition d'vnement
*****************************
?:nnn INSTRUCTION Bla-bla
?:nnn             Bla-bla
?:    INSTRUCTION Bla-bla

Cette instruction trs puissante est l'quivalent du if-then-else et
autres select-case des langages de programmation. l'instruction ?: a
deux paramtres: la condition  tester et l'action  effectuer (bien
respecter l'alignement sur les colonnes).   
En principe ?: est prcd par un E: (attente d'vnement) 
mettre plusieurs.  
La condition  tester est soit un vnement du Robot (0  255) soit
un dlai de temps termin (256).

La premire syntaxe peut se lire: "si tel vnement alors telle action"  
La seconde syntaxe peut se lire: "si tel vnement alors ignorer"  
La troisime syntaxe peut se lire: "sinon telle action"  

exemple:
    D:5   ne pas attendre un vnement plus de 5 secondes  
    E:    attendre n'importe quel vnement
    ?:24  C:x47 si vnement 24 alors commande x47
    ?:x25 C:128 si vnement x25 alors commande 128
    ?:38  T:1,5 si vnement 38 alors attendre 1,5 seconde   
    ?:54        ignorer l' vnement 54 
    ?:256 M:problem.mcr si dlai expir alors excuter la macro
    ?     G:ABC sinon aller  la ligne de label ABC 

=======================================================================
Dlai limitatif d'attente
************************
D:nnn Bla-bla
D:n,n Bla-bla
D:0   Bla-bla

Cette instruction permet au script de continuer si un vnement attendu
n'arrive pas. 
le temps est indiqu en secondes. La virgule dcimale permet d'indiquer
des fractions de seconde.  
Un temps infini  la valeur 0.
Le dlai reste valable pour le reste du script et, par hritage, les macros
appeles jusqu' ce qu'un autre dlai soit spcifi.

ex  voir ci dessus l'instruction ?: 
ex  D:10  limite l'attente  10 seconde
    E:180 attendre vnement 180 (ou le dlai de temps)
    ?:180 C:124 OK, envoyer la commande
    ?:    C:007 KO (dlai dpass), envoyer James Bond
    D:0   restaurer dlai infini pour la suite  

=======================================================================
Macro (excution d'un sous-script)
**********************************
M:nomDuFichier Bla-bla

ex  M:mamacro.mcr aller excuter ma macro

=======================================================================
Label de Ligne
**************
L:nnn Bla-bla

le label nnn est de 3 caractres maximum.
(le label de ligne est utilisable dans l'instruction G:) 

ex  L:OUF  cette ligne s'appelle OUF 

=======================================================================
GOTO (Aller  la ligne)
***********************
G:nnn Bla-bla

le label nnn est de 3 caractres maximum.
(le label de ligne est dfini dans l'instruction L:) 

ex  G:OUF  allez  la ligne OUF 

=======================================================================
eXit (Fin de script)
********************
X: Bla-bla

permet de terminer un script n'importe ou.
(il est aussi conseill de mettre un X: comme dernire instruction)
note: un X: dans une macro finit la macro, pas le script appelant. 

ex  X:    Fini 

=======================================================================
Pause
**************
P:Bla-bla

Envoi du message Bla-bla  l'cran, le script s'arrte. Appuyer sur OK
pour continuer.

ex  P:ca fait du bien de s'arrter 

=======================================================================
Commentaire visible
*******************
*:Bla-bla

N'a aucun effet sauf sa visibilit  l'cran.

ex  *:ceci est ma macro 

=======================================================================
definir l'tat courant de l'Automate (Automate d'tats finis)
************************************
A:nnn Bla-bla

le nom d'tat nnn est de 3 caractres maximum.
(au dmarrage, l'tat initial est INI)
(l'tat peut se changer aussi dans la petite fentre "Etat d'automatisme")  

ex  A:SUD  l'Automate prend l'tat SUD 

=======================================================================
Transition eventuel d'tat (Automate d'tat finis)
**************************
/:eee nnnn Bla-bla
/:eee      Bla-bla
/:    nnnn Bla-bla
/:         Bla-bla

eee et nnn sont de 3 caractres maximum.
eee est l'tat 'courant"  tester, nnn est le nouvel tat  prendre.
La 2nde syntaxe signifie que l'tat courant ne changera pas.
La 3me syntaxe s'applique  n'importe quel tat avec changement en nnn.
La 4me syntaxe s'applique  n'importe quel tat avec conservation d'tat

Cette instruction n'est significative qu'en association avec l'intruction  
de test de condition d'evnement ?: pour dfinir une ou plusieurs
transitions (quadripole: tat courant, vnement, action, nouvel tat)

Exemple d'automate d'tats finis
     L:AAA   label de dbut de l'automate d'tats finis
     E:      attendre n'importe quel evenement 
     /:INI                si tat INI et ...
     ?:10  M:macro1.mcr   ... si vnement 10, alors macro et garde mme tat.  
     /:INI ONE            si tat INI et ...
     ?:11  C:32           ... si vnement 11, alors C:32 puis tat ONE
     ?:12  C:33           ... ou si vnement 12, alors C:33 puis tat ONE
     /:ONE TWO            si tat ONE et ...
     ?:11  C:42           ... si vnement 11, alors C:42 puis tat TWO 
     /:                   sinon, pour n'importe quel tat
     ?:255 X:             ... si vnement 255 alors finir
     ?:                   ... sinon ignorer tout autre vnement
     G:AAA   itration de l'automate d'tats finis 
 