Pour que cela fonctionne correctement, X doit avoir une valeur allant de 1 jusqu'au nombre de destinations possibles. Toute autre valeur poserait problème. En fait, la troisième ligne de cet exemple est une façon très économique d'écrire les lignes suivantes :
X> If X=1 Then Goto LABEL1 If X=2 Then Goto LABEL2 If X=3 Then Goto LABEL3
Modifiez maintenant la troisième ligne du dernier exemple ainsi :
E> On X Goto LABEL3,LABEL2,LABEL1
Gosub. L'utilisation de la structure ON GOSUB est identique à ON ... GOTO, à la différence près qu'elle doit utiliser un RETURN pour revenir à l'instruction située juste après l'instruction ON ... GOSUB. Les destinations peuvent être soit le nom d'un label, soit un numéro de ligne compris entre 1 et le nombre maximal de destinations possibles.
ON est aussi utilisé avec la structure ON BREAK PROC, ainsi qu'avec ON ERROR GOTO, qui sont expliquées dans les chapitres correspondants sur les Procédures et la Gestion des Erreurs de ce manuel utilisateur.
EVERY
instruction : appeler une sous-routine ou une procédure à intervalles réguliers
Every temps Gosub label
Every temps Proc nom
L'instruction EVERY permet d'appeler une sous-routine ou une procédure à intervalles réguliers, sans perturber le programme principal. Il suffit de spécifier la durée entre chaque appel, mesurée en 50èmes de seconde. Évidemment, la durée d'exécution d'une sous-routine ou d'une procédure doit être inférieure à l'intervalle spécifié, sinon une erreur sera générée.
Lorsqu'une sous-routine est appelée, le système EVERY est automatiquement désactivé. Cela signifie que pour utiliser cette fonction de façon continue, une commande EVERY ON doit être insérée dans la sous-routine avant l'instruction RETURN finale. De même, EVERY ON doit être inclus dans une procédure avant de revenir au programme principal avec END PROC. Par exemple :
E> Every 50 Proc TEST Do Print At(0,0); "Boucle principale" Loop Procedure TEST Shared A Inc A: Print "Ceci est l'appel numéro ";A Every On End Proc