LISTVTOC desde Rexx con linea larga ?

Todo lo relacionado con REXX en este ambiente.
Responder
cualquis
Usuario
Usuario
Mensajes: 20
Registrado: 06 Ago 2008, 09:40
Ubicación: madrid (españa)

LISTVTOC desde Rexx con linea larga ?

Mensaje por cualquis » 14 Nov 2018, 07:10

Os agradecería vuestra ayuda con este problemilla.

Necesito ejecutar un IEHLIST con LISTVTOC desde un programa Rexx online, NO EN BATCH.
Como IEHLIST es "antiguo" y se ejecuta en batch, en mi rexx abro una especie de job en memoria y lo ejecuto, según he podido ver en alguna web de Internet:

Código: Seleccionar todo

ORDEN="ALLOC USER.Z23A.CLIST  DD(SYSPROC) SHR "        
 ""ORDEN                                               
ORDEN="ALLOC DD(SYSPRINT) NEW DELETE REUSE ",          
 "LRECL(121) RECFM(F,B) TRACKS SPACE(1,1) UNIT(SYSDA)" 
 ""ORDEN                                               
ORDEN="ALLOC DD(SYSIN) NEW DELETE REUSE ",             
 "LRECL(80) RECFM(F,B) TRACKS SPACE(1,1) UNIT(SYSDA)"  
 ""ORDEN                                               
CC=0                                                   
CC=BPXWDYN('ALLOC DD(DISK) SHR REUSE',                 
  'UNIT(SYSDA) VOL('quevol')')                         
y en SYSIN coloco la línea con el comando LISTVTOC y parámetros y ejecuto:

Código: Seleccionar todo

/*       ----+----1----+----2----+----3-     */
FICHERO="PPPP.CACA.A1234567.B1234567.C1"      
REC.1=" LISTVTOC FORMAT,VOL=3390="quevol",DSNAME="FICHERO
"EXECIO 1 DISKW SYSIN (STEM REC. FINIS)
"PROFILE NOPREFIX"                     
 "CALL *(IEHLIST)"                     
Pues bien, cuando el nombre del dataset es largo (p.e, "PPPP.CACA.A1234567.B1234567.C12345.D1234"), resulta que REC.1 tiene una longitud>71 caracteres e IEHLIST falla:
-IEH103I INVALID CONTROL CARD---

Con pruebas sistemáticas he comprobado que solo puedo poner una línea de 71 caracteres, o sea, un nombre de dataset de hasta 31 caracteres, y todas las pruebas para intentar que la línea continuara con otra línea más abajo han fallado: no acepta ningún carácter (+ - , ; * X ) de continuación en la posición 72. Tampoco acepta un fichero SYSIN con LRECL>80.
Sin embargo, si en vez de construir el job en memoria Rexx hago un jcl con //SYSIN DD DATA que contenga continuación de línea y lo submito entonces todo funciona bien. Pero no quiero tener que construir un job externo, submitirlo y esperar a que se ejeucte, sino ejecutar todo desde dentro de mi programa.

Mi pregunta:
a) ¿Cómo puedo hacer para que IEHLIST admita una línea de más de 71 caracteres?
b) ¿Cómo puedo construir un job con fichas // en memoria y ejecutarlo sin tener que enviarlo al spool? (de esa forma podría incluir un //SYSIN DD DATA y "engañaría" a IEHLIST haciéndole creer que realmente está en batch).
c) ¿Cómo puedo listar la VTOC para un fichero determinado sin tener que usar IEHLIST?

Gracias de antemano.
-------------

cualquis
Usuario
Usuario
Mensajes: 20
Registrado: 06 Ago 2008, 09:40
Ubicación: madrid (españa)

Re: LISTVTOC desde Rexx con linea larga ?

Mensaje por cualquis » 14 Nov 2018, 07:53

Perdonad la molestia, pero ya he encontrado el fallo:

En la línea

"EXECIO 1 DISKW SYSIN (STEM REC. FINIS)

el "1" solo escribía obviamente UN registro, y no la segunda línea de continuación :asco: . Me ha bastado poner

"EXECIO * DISKW SYSIN (STEM REC. FINIS) y todo ha funcionado bien.

He revisado todo decenas de veces y no me había dado cuenta, dando por supuesto que "REC." escribía todas las líneas :oops:

A veces tienes un elefante delante de las narices y no lo ves.

Gracias
-------------

Responder