Finalidad:Ejecutar una subrutina en el archivo por lotes actual

 

Formato:GOSUB ["nombre de archivo"] Label [las variables]

 

nombre de archivoEl archivo que contiene la subrutina.
LabelLa etiqueta del archivo por lotes al comienzo de la subrutina.
las variablesVariables GOSUB opcionales.

 

Ver también: LLAMENOS, GOTOy DEVOLUCION .

 

Uso:

 

GOSUB sólo se puede utilizar en archivos por lotes.

 

TCC-RT permite subrutinas en archivos por lotes. Una subrutina debe comenzar con un Label (dos puntos [:] seguido del nombre de una etiqueta) que aparece en una línea por sí solo y no se puede incluir en una grupo de mando. Las diferencias entre mayúsculas y minúsculas se ignoran al hacer coincidir etiquetas. la subrutina debe terminar con un DEVOLUCION .

 

La subrutina se invoca con un comando GOSUB desde otra parte del archivo por lotes. Después del RETORNO, el procesamiento continuará con el comando siguiente al comando GOSUB. Por ejemplo, el siguiente fragmento de archivo por lotes llama a una subrutina que muestra el directorio y devuelve:

 

echo Llamando a una subrutina

gosub subr1

echo Retornado de la subrutina

renuncia

:subr1

directorio /a/w

volvemos

 

GOSUB inicia su búsqueda del Label en la línea del archivo por lotes inmediatamente después del comando GOSUB. Si el Label no se encuentra entre la posición actual y el final del archivo, GOSUB reiniciará la búsqueda al principio del archivo. Si aún no se encuentra la etiqueta, el archivo por lotes finaliza con el mensaje de error "Etiqueta no encontrada".

 

Puedes definir GOSUB variables colocándolas después del nombre de la etiqueta en la línea GOSUB. Por ejemplo:

 

Gosub Sub1 abc 15 "Hola mundo"

 

Los nombres de las variables se definen en la línea de la etiqueta. Por ejemplo:

 

:Sub1 [cadena mundo]

 

define tres variables - %cadena (establecido en "abc"), %n (establecido en 15), y %mundo (establecido en "Hola mundo"). Tenga en cuenta que los corchetes son obligatorios en la línea de etiqueta. Las variables GOSUB sólo se definen durante la duración de la subrutina. No son heredados por los GOSUB anidados y son destruidos por el DEVOLUCION llamada.

 

Si agrega un * al último nombre de la variable en la lista de parámetros en la línea de la etiqueta, será "codicioso" y se le asignarán todas las variables restantes. Por ejemplo:

 

gosub sub1 uno dos tres cuatro cinco

...

:sub1 [arg1 arg2 arg3*]

 

A arg3 se le asignará "tres cuatro cinco".

 

Si define variables GOSUB en la etiqueta pero no las proporciona en la línea GOSUB, se establecerán en una cadena vacía.

 

Las llamadas GOSUB con variables están limitadas a un máximo de 22 niveles de profundidad. No hay límite para las llamadas normales de GOSUB.

 

Las variables GOSUB se colocan en el entorno de una forma especial durante la duración de la subrutina y "enmascararán" cualquier variable de entorno del mismo nombre que existiera antes de que se llamara la subrutina. Se puede hacer referencia a las variables GOSUB como variables de entorno normales, pero no se almacenan de la misma manera y no se pueden modificar con el SET, ESETo UNSET comandos, y no se puede utilizar con la prueba DEFINIDA de IF, IFFo @SI.

 

No se puede utilizar SET dentro de una subrutina para cambiar el valor de una variable GOSUB. Si intenta hacerlo, el comando SET establecerá la variable de entorno estándar del mismo nombre, no la variable GOSUB, pero este valor quedará "enmascarado" por la variable GOSUB y permanecerá inaccesible hasta que finalice la subrutina.

 

Puede llamar a una subrutina en otro archivo especificando nombre de archivo (el nombre debe estar entre comillas dobles. Esto le permite crear bibliotecas de subrutinas, sin tener que duplicarlas en cada archivo por lotes. Por ejemplo:

 

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

 

GOSUB guarda los estados IFF y DO, por lo que las declaraciones IFF y DO dentro de una subrutina no interferirán con las declaraciones en la parte del archivo por lotes desde donde se llamó la subrutina. Si la subrutina ha ejecutado un SETLOCAL sin un ENDLOCAL coincidente, se ejecutará un ENDLOCAL antes de regresar al archivo por lotes que realiza la llamada.

 

No se puede DEVOLUCION desde un GOSUB mientras está dentro de un DO lazo.

 

If TCC-RT llega al final del archivo por lotes mientras está dentro de una subrutina, volverá automáticamente al comando después del GOSUB, como si fuera un comando explícito. DEVOLUCION El comando se había incluido como la última línea del archivo.

 

Las subrutinas se pueden anidar.

 

Ver también: funciones definidas por el usuario.