miércoles, 15 de julio de 2009

Como cargar lista de bibliotecas

A veces nos puede interesar cargar en un trabajo la lista inicial de bibliotecas.

Esto nos puede servir, por ejemplo, en un menú, para nuestro operador, que realice llamadas a programas o someta otros y estos cambian la lista de bibliotecas. Es conveniente dejar la lista de bibliotecas como estaba después de cada ejecución para evitar errores del operador al tener cargada una lista de bibliotecas diferente a la que él cree tener.

El código que habríamos de insertar en nuestro programa seria el siguiente:
DCL VAR(&BLANKS) TYPE(*CHAR) LEN(2764)
/* Incluir estas sentencias inmediatamente después de declarar las variables */
CHGVAR VAR(&BLANKS) VALUE(' ')
DOWHILE COND(&COUNT <= &LEN) CHGVAR VAR(&BLANKS) VALUE(&BLANKS *CAT ' ') CHGVAR VAR(&COUNT) VALUE(&COUNT + 1) ENDDO /* Este mandato guarda en la variable &USRLIBL el valor de la lista de bibliotecas actual */
RTVJOBA USRLIBL(&USRLIBL)
....
Inserte su código aquí
....
/* Construir el mandato CHGLIBL con el valor de la lista de bibliotecas en blanco */
CHGVAR VAR(&CMD) VALUE('CHGLIBL LIBL(' *TCAT &BLANKS *TCAT ')')
/* Limpia la lista de bibliotecas del trabajo */
CALL PGM(QCMDEXC) PARM(&CMD &LEN)
/* Construir el mandato CHGLIBL con el valor de la lista de bibliotecas inicial */
CHGVAR VAR(&CMD) VALUE('CHGLIBL LIBL(' *TCAT &USRLIBL *TCAT ')')
/* Cargar la lista de bibliotecas inicial del trabajo */
CALL PGM(QCMDEXC) PARM(&CMD &LEN)
ENDPGM

Se utiliza el QCMDEXC para ejecutar el CHGLIBL, en lugar de CHGLIBL LIBL(&USRLIBL), ya que en este caso solo nos cargaría en la lista la primera biblioteca de la variable &USRLIBL; eso es porque el parámetro LIBL es un parámetro de listas y el interprete de mandatos del sistema operativo los trata de forma diferente.
Para utilizar CHGLIBL deberíamos hacer CHGLIBL LIBL(&LIB1 &LIB2 ..... &LIBn), o sea utilizar tantas variables como bibliotecas contenga la variable &USRLIBL y eso complicaría aun mucho más el código.
Publicar un comentario en la entrada