Las subrutinas deben ser colocadas antes del ENDPGM del programa principal.
Los comandos SUBR y ENDSUBR, delimitan el principio y el fin de la rutina.
PGM
Declaraciones: DCL, DCLF, DCLPRCOPT
dcl &valor *int 4
Código del programa principal
…
…
…
SUBR SUBR (Rutina1)
Código de la rutina 1
ENDSUBR
SUBR SUBR (Rutina2)
Código de la rutina 2
ENDSUBR rtnval(&valor)
ENDPGM
El comando ENDSUBR tiene un parámetro opcional RTNVAL que retorna un valor entero de 4 posiciones. Puede manejarse este valor a conveniencia. Monitorear un mensaje de error en las rutinas y colocar el valor de RTNVAL Cero o en uno, podría indicar si fue o no exitosa la ejecución de la rutina y de acuerdo a ello proceder a las instrucciones convenientes en el programa principal.
Para llamar a una subrutina se utiliza el comando: callsubr subr(RUTINA1) rtnval(&VALOR)
Como se observa el comando callsubr tiene dos parámetros: el nombre de la rutina y el valor de retorno.
Una subrutina regresa a “quien la llamó” al ejecutar el comando ENDSUBR, sin embargo si desea que por alguna condición particular se suspenda la ejecución de la rutina antes, entonces se puede utilizar la instrucción: RTNSUBR que tiene el mismo parámetro opcional RTNVAL que tiene el ENDSUBR.
Las subrutinas no pueden declararse una dentro de otra (anidarse). Sin embargo, las subrutinas pueden llamar a otras subrutinas.
Cada invocación de una subrutina genera una entrada a la pila de llamadas que puede alcanzar hasta 9999 niveles. Puede utilizarse el comando DCLPRCOPT SUBRSTACK(100)para establecer el nivel máximo de alcance en la pila de llamadas. Si se establece un límite de llamadas y la ejecución del programa excede ese límite se generará un mensaje de error. CPF0822 ‘Overflow en la pila de llamadas’. En el ejemplo se colocamos 100 entradas en la pila de llamadas.
El comando DCLPRCOPT debe colocarse una sola vez en el CLP, en la sección del programa donde se declaran las variables y los archivos.
Bibliografía: http://publib.boulder.ibm.com
Autor: Ing. Liliana Suárez.
Si te pareció interesante el artículo reenvíalo a un amigo, haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.
Si te pareció interesante el artículo reenvíalo a un amigo, haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.
2 comments:
Saludos Liliana, una pregunta, crees que sea posible utilizar estas subrutinas para incorporar recursividad en algún programa construido en CL. Gracias. Miguel Q.
Hola Miguel,
recien veo tu comentario.
Sinceramente no he visto el uso de recursividad en CLP
Habría que investigar mas del tema
Saludos Cordiales!
Liliana
Post a Comment