Bienvenidos a Iseries Venezuela

Las mejores prácticas, recursos, tips, enlaces, videos y artículos para informáticos relacionados con el Iseries y el As/400 lenguajes de programación RPG, ILE RPG y SQL.

The best practices, resources, tips, links, videoes and articles for computer related to the Iseries and the As/400 languages of programming RPG, ILE RPG and SQL.

Monday, May 3, 2010

Subrutinas en un programa CL













Es posible manejar subrutinas en un programa CL.
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.




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.

2 comments:

Unknown said...

Saludos Liliana, una pregunta, crees que sea posible utilizar estas subrutinas para incorporar recursividad en algún programa construido en CL. Gracias. Miguel Q.

L Suarez said...

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