Intenta salir con leave! Enviado desde mi iPhone
> El 15 mar 2017, a las 6:46 a.m., forum.help400-requ...@listas.combios.es > escribió: > > Envíe los mensajes para la lista Forum.help400 a > forum.help400@listas.combios.es > > Para subscribirse o anular su subscripción a través de la WEB > http://listas.combios.es/cgi-bin/mailman/listinfo/forum.help400 > > O por correo electrónico, enviando un mensaje con el texto "help" en > el asunto (subject) o en el cuerpo a: > forum.help400-requ...@listas.combios.es > > Puede contactar con el responsable de la lista escribiendo a: > forum.help400-ow...@listas.combios.es > > Si responde a algún contenido de este mensaje, por favor, edite la > linea del asunto (subject) para que el texto sea mas especifico que: > "Re: Contents of Forum.help400 digest...". Además, por favor, incluya > en la respuesta sólo aquellas partes del mensaje a las que está > respondiendo. > > > Asuntos del día: > > 1. Necesito una ayudita con los subprocedimientos :-) (ostatu ostatu) > 2. Re: Necesito una ayudita con los subprocedimientos :-) > (Juan Carlos Paredes Castañón) > 3. Re: Necesito una ayudita con los subprocedimientos :-) > (ostatu ostatu) > 4. RE: Necesito una ayudita con los subprocedimientos :-) > (Javier Mora) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Wed, 15 Mar 2017 10:13:11 +0100 > From: ostatu ostatu <ost...@gmail.com> > Subject: Necesito una ayudita con los subprocedimientos :-) > To: forum.help400@listas.combios.es > Message-ID: > <CAOEbL88V8BdO_dnpCr2asiAEiSAH_FaCXo6wGuZ_yt0=wf6...@mail.gmail.com> > Content-Type: text/plain; charset="utf-8" > > Hola. > > Estoy empezando a utilizar los subprocedimientos en vez de las "clasicas" > subrutinas y me acabo de encontrar con un problema que no soy capaz de > resolver. > > Cuando trabajo con subrutinas y deseo finalizar el programa puedo codificar > un *inLR = *on y un Return en cualquier parte y el programa finaliza, pero > si intendo hacer los mismo en un subprocedimiento no hay manera de que el > programa finalize inmediatamente :-( > > Este es el pgm de ejemplo. > > H DFTACTGRP(*NO) > > /free > > dsply 'inicio main' ; > sub1() ; > dsply 'final main' ; > > *inLR = *on ; > Return ; > > /end-free > > p sub1 b > d pi > /free > dsply 'inicio sub1' ; > finalizar_pgm() ; > dsply 'final sub1' ; > /end-free > p e > * > p finalizar_pgm b > d pi > /free > dsply 'inicio finalizar_pgm' ; > *inLR = *on ; > Return ; > dsply 'final finalizar_pgm' ; > /end-free > p e > > He probado a llamar a una subrutina desde el subprocedimiento (Exsr) para > hacer el LR y el Return pero al compilador no le ha gustado con lo que > deduzco que no se pueden hacer Exsr dentro de los subprocedimientos ... > > ¿Alguna idea de como solucionar el problema? > > Saludos > Ostatu > ------------ próxima parte ------------ > Se ha borrado un adjunto en formato HTML... > URL: > <http://listas.combios.es/cgi-bin/mailman/private/forum.help400/attachments/20170315/77143505/attachment-0001.html> > > ------------------------------ > > Message: 2 > Date: Wed, 15 Mar 2017 11:04:06 +0100 > From: Juan Carlos Paredes Castañón <juancar...@paredes.info> > Subject: Re: Necesito una ayudita con los subprocedimientos :-) > To: <forum.help400@listas.combios.es> > Message-ID: <7b5b1f97b1093b839626f407aa257...@paredes.info> > Content-Type: text/plain; charset="utf-8" > > > > Puedes hacer que el subprocedimiento devuelva un valor indicando si > tiene que salir o no. Y al retornar, en función de ese valor, haces la > salida. > > Saludos > > Juan Carlos. > > El 15/03/2017 10:13, ostatu ostatu > escribió: > >> Hola. >> >> Estoy empezando a utilizar los > subprocedimientos en vez de las "clasicas" subrutinas y me acabo de > encontrar con un problema que no soy capaz de resolver. >> >> Cuando > trabajo con subrutinas y deseo finalizar el programa puedo codificar un > *inLR = *on y un Return en cualquier parte y el programa finaliza, pero > si intendo hacer los mismo en un subprocedimiento no hay manera de que > el programa finalize inmediatamente :-( >> >> Este es el pgm de > ejemplo. >> >> H DFTACTGRP(*NO) >> >> /free >> >> dsply 'inicio main' ; > sub1() ; >> dsply 'final main' ; >> >> *inLR = *on ; >> Return ; > /end-free >> >> p sub1 b >> d pi >> /free >> dsply 'inicio sub1' ; > finalizar_pgm() ; >> dsply 'final sub1' ; >> /end-free >> p e >> * >> p > finalizar_pgm b >> d pi >> /free >> dsply 'inicio finalizar_pgm' ; > *inLR = *on ; >> Return ; >> dsply 'final finalizar_pgm' ; >> /end-free > >> p e >> >> He probado a llamar a una subrutina desde el > subprocedimiento (Exsr) para hacer el LR y el Return pero al compilador > no le ha gustado con lo que deduzco que no se pueden hacer Exsr dentro > de los subprocedimientos ... >> >> ¿Alguna idea de como solucionar el > problema? >> >> Saludos Ostatu > ____________________________________________________ >> Únete a Recursos > AS400, nuestra Comunidad ( http://bit.ly/db68dd [1] ) >> Forum.Help400 > (c) Publicaciones Help400, S.L. > > -- > url: http://www.paredes.info > mail: > juancar...@paredes.info > > > Links: > ------ > [1] http://bit.ly/db68dd > ------------ próxima parte ------------ > Se ha borrado un adjunto en formato HTML... > URL: > <http://listas.combios.es/cgi-bin/mailman/private/forum.help400/attachments/20170315/c037d371/attachment.htm> > > ------------------------------ > > Message: 3 > Date: Wed, 15 Mar 2017 11:17:31 +0100 > From: ostatu ostatu <ost...@gmail.com> > Subject: Re: Necesito una ayudita con los subprocedimientos :-) > To: "forum.help400" <forum.help400@listas.combios.es> > Message-ID: > <caoebl8_eo1xy00ecesnw+rhzi0doxwcc8fxg23dpo6kao3l...@mail.gmail.com> > Content-Type: text/plain; charset="utf-8" > > Ya lo habia pensado pero el problema es que si desde un subprocedimiento > llamo a otro subprocedimiento tengo que ir controlando el valor de retorno > de cada unos de los subprocedimientos hasta terminar en el main y entonces > hacer el LR + el return. > > Buscaba "algo mas directo" ... > > Igualmente gracias por la sugerencia :-) > > > 2017-03-15 11:04 GMT+01:00 Juan Carlos Paredes Castañón < > juancar...@paredes.info>: > >> Puedes hacer que el subprocedimiento devuelva un valor indicando si tiene >> que salir o no. Y al retornar, en función de ese valor, haces la salida. >> >> Saludos >> >> Juan Carlos. >> >> >> >> El 15/03/2017 10:13, ostatu ostatu escribió: >> >> Hola. >> >> Estoy empezando a utilizar los subprocedimientos en vez de las "clasicas" >> subrutinas y me acabo de encontrar con un problema que no soy capaz de >> resolver. >> >> Cuando trabajo con subrutinas y deseo finalizar el programa puedo >> codificar un *inLR = *on y un Return en cualquier parte y el programa >> finaliza, pero si intendo hacer los mismo en un subprocedimiento no hay >> manera de que el programa finalize inmediatamente :-( >> >> Este es el pgm de ejemplo. >> >> H DFTACTGRP(*NO) >> >> /free >> >> dsply 'inicio main' ; >> sub1() ; >> dsply 'final main' ; >> >> *inLR = *on ; >> Return ; >> >> /end-free >> >> p sub1 b >> d pi >> /free >> dsply 'inicio sub1' ; >> finalizar_pgm() ; >> dsply 'final sub1' ; >> /end-free >> p e >> * >> p finalizar_pgm b >> d pi >> /free >> dsply 'inicio finalizar_pgm' ; >> *inLR = *on ; >> Return ; >> dsply 'final finalizar_pgm' ; >> /end-free >> p e >> >> He probado a llamar a una subrutina desde el subprocedimiento (Exsr) para >> hacer el LR y el Return pero al compilador no le ha gustado con lo que >> deduzco que no se pueden hacer Exsr dentro de los subprocedimientos ... >> >> ¿Alguna idea de como solucionar el problema? >> >> Saludos >> Ostatu >> >> >> ____________________________________________________ >> Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd ) >> Forum.Help400 © Publicaciones Help400, S.L. >> >> -- >> url: http://www.paredes.info >> mail: juancar...@paredes.info >> >> >> ____________________________________________________ >> Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd ) >> Forum.Help400 © Publicaciones Help400, S.L. > ------------ próxima parte ------------ > Se ha borrado un adjunto en formato HTML... > URL: > <http://listas.combios.es/cgi-bin/mailman/private/forum.help400/attachments/20170315/639ab4f7/attachment-0001.htm> > > ------------------------------ > > Message: 4 > Date: Wed, 15 Mar 2017 10:46:16 +0000 > From: Javier Mora <jm...@musgrave.es> > Subject: RE: Necesito una ayudita con los subprocedimientos :-) > To: "'forum.help400'" <forum.help400@listas.combios.es> > Message-ID: <16e62af2261044e48f02c864677a8358@SRVCORREO.dominio.local> > Content-Type: text/plain; charset="utf-8" > > Yo también sufrí este problema hace tiempo. > > Primero un consejo: olvídate de técnicas que con OPM RPG funcionaban muy > bien, muchas de ellas no tienen sentido en ILE. > > Este problema yo lo he resuelto lanzando ?excepciones?. En el RPG clásico > podíamos tener anidadas una infinidad de llamadas EXSR y en cualquier punto > de este ?camino? podíamos finalizar el programa con un Return (*InLR = *ON si > queríamos cerrar ficheros también). > > La solución de Juan Carlos es posible pero ?afea? muchísimo el programa. En > mi caso, yo estudié varias alternativas y, al final, opté por la opción que > explico aquí. > > La idea consiste en ?lanzar? un mensaje de escape cuando se quiera cancelar > un programa. Esta no es, ni mucho menos, una técnica novedosa y se utiliza en > lenguajes como Java y C++ desde hace años. El IBM i lleva integrado en el > sistema operativo un control de mensajes que permite ?lanzarlos? y > ?atraparlos?. > > Cuando envías un mensaje de escape, éste recorre toda la pila de llamadas > hasta que es manejado por programa o por el sistema. En mis programas, una > salida de este tipo siempre se produce por un motivo excepcional del cual > quiero informar. > > Para mantener estos mensajes bajo control deberás utilizar ?Monitor? en RPG o > MONMSG en CL. > > No sé si he sido capaz de explicar la técnica. > > En mi caso se ha desarrollado un programa de servicio con la funcionalidad > necesaria para ?lanzar? (throw), ?atrpar? (catch) y consultar la excepción > manejada. Estas utilidades utilizan las APIs del sistema para el manejo de > funciones. > > Saludos, > > Javier Mora > > De: forum.help400-boun...@listas.combios.es > [mailto:forum.help400-boun...@listas.combios.es] En nombre de ostatu ostatu > Enviado el: miércoles, 15 de marzo de 2017 10:13 > Para: forum.help400@listas.combios.es > Asunto: Necesito una ayudita con los subprocedimientos :-) > > Hola. > Estoy empezando a utilizar los subprocedimientos en vez de las "clasicas" > subrutinas y me acabo de encontrar con un problema que no soy capaz de > resolver. > Cuando trabajo con subrutinas y deseo finalizar el programa puedo codificar > un *inLR = *on y un Return en cualquier parte y el programa finaliza, pero si > intendo hacer los mismo en un subprocedimiento no hay manera de que el > programa finalize inmediatamente :-( > Este es el pgm de ejemplo. > > H DFTACTGRP(*NO) > > /free > > dsply 'inicio main' ; > sub1() ; > dsply 'final main' ; > > *inLR = *on ; > Return ; > > /end-free > > p sub1 b > d pi > /free > dsply 'inicio sub1' ; > finalizar_pgm() ; > dsply 'final sub1' ; > /end-free > p e > * > p finalizar_pgm b > d pi > /free > dsply 'inicio finalizar_pgm' ; > *inLR = *on ; > Return ; > dsply 'final finalizar_pgm' ; > /end-free > p e > He probado a llamar a una subrutina desde el subprocedimiento (Exsr) para > hacer el LR y el Return pero al compilador no le ha gustado con lo que > deduzco que no se pueden hacer Exsr dentro de los subprocedimientos ... > ¿Alguna idea de como solucionar el problema? > Saludos > Ostatu > > ------------ próxima parte ------------ > Se ha borrado un adjunto en formato HTML... > URL: > <http://listas.combios.es/cgi-bin/mailman/private/forum.help400/attachments/20170315/047b009e/attachment.htm> > > ------------------------------ > > __________________________________________________ > Forum.HELP400 es un servicio m&amp;#225;s de ServerNEWS. > &amp;#169; Publicaciones Help400, S.L. - Todos los derechos reservados > http://www.help400.es > _____________________________________________________ > > Para darte de baja visita la siguente URL: > http://listas.combios.es/mailman/listinfo/forum.help400 > > Fin de Resumen de Forum.help400, Vol 125, Envío 9 > ************************************************* ____________________________________________________ Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd ) Forum.Help400 © Publicaciones Help400, S.L.