Objectif :Exécuter un sous-programme dans le fichier batch actuel

 

Format:GOSUB ["nom de fichier"] étiquette [les variables]

 

nom de fichierLe fichier contenant le sous-programme
étiquetteL'étiquette du fichier batch au début du sous-programme.
les variablesVariables GOSUB facultatives.

 

Voir aussi: NOUS CONTACTEZ, GOTOet RETOUR.

 

Syntaxe de complétion de fichier :

 

Le défaut complétion du nom de fichier la syntaxe est : [1] répertoires btm cmd bat [2*] *

 

Usage:

 

GOSUB ne peut être utilisé que dans des fichiers batch.

 

TCC autorise les sous-programmes dans les fichiers batch. Un sous-programme doit commencer par un étiquette (un deux-points [:] suivi d'un nom d'étiquette) qui apparaît seul sur une ligne et ne peut pas être inclus dans un groupe de commande. Les différences de casse sont ignorées lors de la correspondance des étiquettes. Le sous-programme must terminer par un RETOUR déclaration.

 

Le sous-programme est invoqué avec une commande GOSUB provenant d'une autre partie du fichier batch. Après le RETURN, le traitement se poursuivra avec la commande suivant la commande GOSUB. Par exemple, le fragment de fichier batch suivant appelle un sous-programme qui affiche le répertoire et renvoie :

 

echo Appel d'un sous-programme

gosub subr1

echo Renvoyé par le sous-programme

quitter

:subr1

rép /a/w

retourner

 

GOSUB commence sa recherche du étiquette sur la ligne du fichier batch immédiatement après la commande GOSUB. Si la étiquette n'est pas trouvé entre la position courante et la fin du fichier, GOSUB relancera la recherche au début du fichier. Si l'étiquette n'est toujours pas trouvée, le fichier batch se termine avec le message d'erreur "Etiquette introuvable".

 

Vous pouvez définir GOSUB variables en les plaçant après le nom de l'étiquette sur la ligne GOSUB. Par exemple:

 

Gosub Sub1 abc 15 "Bonjour tout le monde"

 

Les noms de variables sont définis sur la ligne d'étiquette. Par exemple:

 

:Sub1 [str n monde]

 

définit trois variables - %str (défini sur "abc"), %n (réglé sur 15), et %monde (défini sur "Hello World"). Notez que les crochets sont obligatoires sur la ligne d’étiquette. Les variables GOSUB ne sont définies que pour la durée du sous-programme. Ils ne sont pas hérités par les GOSUB imbriqués et sont détruits par le RETOUR appel.

 

Si vous ajoutez un * au dernier nom de variable dans la liste des paramètres sur la ligne d'étiquette, il sera "gourmand" et toutes les variables restantes lui seront affectées. Par exemple:

 

gosub sub1 un deux trois quatre cinq

:sub1 [arg1 arg2 arg3*]

 

arg3 se verra attribuer "trois quatre cinq".

 

Si vous définissez des variables GOSUB sur l'étiquette mais ne les fournissez pas sur la ligne GOSUB, elles seront définies sur une chaîne vide.

 

Les appels GOSUB avec des variables sont limités à un maximum de 22 niveaux de profondeur. Il n'y a aucune limite sur les appels GOSUB normaux.

 

Les variables GOSUB sont placées dans l'environnement sous une forme spéciale pendant la durée du sous-programme et "masqueront" toutes les variables d'environnement du même nom qui existaient avant l'appel du sous-programme. Les variables GOSUB peuvent être référencées comme des variables d'environnement normales, mais ne sont pas stockées de la même manière, ne peuvent pas être modifiées avec le SET, ESETou UNSET commandes, et ne peut pas être utilisé avec le test DEFINED de IF, IFFou @SI.

 

Vous ne pouvez pas utiliser SET dans un sous-programme pour modifier la valeur d'une variable GOSUB. Si vous tentez de le faire, la commande SET définira la variable d'environnement standard du même nom, pas la variable GOSUB, mais cette valeur sera "masquée" par la variable GOSUB et restera inaccessible jusqu'à la fin du sous-programme.

 

Vous pouvez appeler un sous-programme dans un autre fichier en spécifiant nom de fichier (le nom doit être mis entre guillemets doubles. Cela permet de créer des bibliothèques de sous-programmes, sans avoir à les dupliquer dans chaque fichier batch. Par exemple :

 

gosub "c:\library\batlib.btm" Évaluer [%1 %2 %3]

 

GOSUB enregistre les états IFF et DO, de sorte que les instructions IFF et DO à l'intérieur d'un sous-programme n'interféreront pas avec les instructions de la partie du fichier batch à partir de laquelle le sous-programme a été appelé. Si le sous-programme a exécuté un SETLOCAL sans ENDLOCAL correspondant, un ENDLOCAL sera exécuté avant de revenir au fichier batch appelant.

 

Vous ne pouvez pas RETOUR d'un GOSUB à l'intérieur d'un DO boucle.

 

If TCC atteint la fin du fichier batch alors qu'il est à l'intérieur d'un sous-programme, il reviendra automatiquement à la commande après le GOSUB, comme si un message explicite RETOUR La commande avait été incluse comme dernière ligne du fichier.

 

Les sous-programmes peuvent être imbriqués.

 

Voir aussi: fonctions définies par l'utilisateur.