Upload
leonardo-gabriel-calautti
View
52
Download
0
Embed Size (px)
Citation preview
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 1/373
TSO para desarrolladores
- MVS- JCL- CLIST- ISPF
José María Peco Palacios*************************
(2/7/1995)
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 2/373
TSO para desarrolladores: TABLA DE CONTENIDOS Autor: José M. Peco
Página 2 de 374
Tema 1: MVS
1.1 Generalidades
1.2 Versiones del MVS1.3 Componentes principales del MVS1.4 Usuarios de MVS1.5 Componentes de Hardware
1.5.1 Procesadores y subsistemas de Canales1.5.2 Dispositivos de Memoria Auxiliar.1.5.3 Periféricos y consolas1.5.4 Unidades de control
1.6 JES: Subsistema dedicado a la gestión de trabajos Batch
1.6.1 Iniciadores1.6.2 SPOOL
1.6.3 Fichero de check-point
1.7 Los ficheros en MVS
1.7.1 Tipos de organizacion en ficheros no-VSAM1.7.2 Tipos de registro1.7.3 Organizacion VSAM1.7.4 Acceso y recuperación de datos
1.8 Librerías que contienen el MVS
1.9 Bibliografía
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 3/373
TSO para desarrolladores: TABLA DE CONTENIDOS Autor: José M. Peco
Página 3 de 374
Tema 2 : JCL
2.1 Introducción
2.2 Definiciones previas
2.3 Formato general de las sentencia del JC2.3.1 Etiqueta2.3.2 Operación2.3.3 Operadores o parámetros
2.4 Sentencia JOB2.4.1 Informacion de contabilidad2.4.2 Nombre del programador2.4.3 ADDRSPC2.4.4 CLASS2.4.5 COND2.4.6 MSGCLASS
2.4.7 MSGLEVEL2.4.8 NOTIFY2.4.9 PERFORM2.4.10 REGION2.4.11 RESTART2.4.12 TIME2.4.13 TYPRUN
2.5 Sentencia EXEC2.5.1 PGM2.5.2 PROC2.5.3 ACCT2.5.4 ADDRSPC2.5.5 COND
2.5.6 PARM2.5.7 REGION2.5.8 TIME
2.6 Sentencia DD : Definición de datos2.6.1 * (asterisco)2.6.2 DATA2.6.3 DLM2.6.4 DUMMY2.6.5 SYSOUT ( para ficheros de impresión)
OUTLIM=nCOPIES=nHOLD=YESDEST=dispositivo
DCB=(par1[,par2[...]])UCS (Universal Character Set)FCB (Form Control Buffer)BURST=YCHARS=(tabla0[,tabla1[,tabla2[,tabla3]]])MODIFY=(modulo,tabla_n)
2.6.6 COPIES (salida de impresión)2.6.7 DEST ( ficheros de impresión )2.6.8 HOLD (para ficheros de impresión )2.6.9 FREE (para ficheros de impresión y de datos)2.6.10 DSNAME (DSN)2.6.11 DDNAME
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 4/373
TSO para desarrolladores: TABLA DE CONTENIDOS Autor: José M. Peco
Página 4 de 374
2.6.12 DISP2.6.13 SPACE2.6.14 VOLUME
2.6.15 UNIT2.6.16 DCB2.6.17 DATACLASS2.6.18 LABEL
2.7 Sentencia OUTPUT2.8 Sentencias DD especiales2.9 Procedimiento
2.10 Utilidades2.10.1 IEFBR142.10.2 IEBGENER2.10.3 IEBCOPY2.10.4 IEBPTPCH
2.10.5 IEBCOMPR2.10.6 IEBUPDATE2.10.7 IEHINITT2.10.8 IEHLIST2.10.9 IEHPROGM
2.11 Programas especiales2.11.1 IEKFJ012.11.2 SORT
SORTMERGERECORDALTSEQINCLUDE / OMIT
INREC / OUTRECSUM
2.11.3 IDCAMSCatalogoFichero generacional (GDG)Copiar ficherosListar ficherosBorrar ficheros
2.11.4 PRINTDS (comando de TSO)
2.12 Anexo: Listar un directorio (IEBPTDIR)2.13 Anexo: LIstado de la VTOC y el directorio de un PDS IEHLIST.1
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 5/373
TSO para desarrolladores: TABLA DE CONTENIDOS Autor: José M. Peco
Página 5 de 374
Tema 3 : CLIST
3.1 Introducción
3.2 Librerías de CLISTs3.3 Como se invoca a un procedimiento de CLIST3.3.1 De forma explícita:3.3.2 De forma implícita3.3.3 Desde READY3.3.4 Desde otra clist3.3.5 Desde un programa de aplicacion
3.4 Variables3.4.1 Variables de control3.4.2 Variables de usuario simples3.4.3 Variables de usuario compuestas3.4.4 Uso del doble & (&&) : Variables anidadas3.4.5 Variables indexadas
3.5 Operadores y expresiones3.6 Etiquetas
3.7 Sentencias del lenguaje de CLIST3.7.1 CONTROL : Estable opciones para el proceso de la CLIST
MSG / NOMSGPROMPT / NOPROMPTLIST / NOLISTCONLIST / NOCONLISTSYMLIST / NOSYMLISTFLUSH / NOFLUSHMAINEND(cadena)
3.7.2 PROC : Primera instrucción de una CLIST3.7.3 ERROR : rutina para el tratamiento de errores3.7.4 GOTO : salto incondicional3.7.5 EXIT : Salir de la clist3.7.6 RETURN : Retornar al punto desde el que se bifurco a una rutina3.7.7 WRITE : Escribir datos en el terminal3.7.8 WRITENR : Escribir en el terminal y no ejecutar el <CR>3.7.9 READ : Lee datos desde el terminal3.7.10 IF-THEN-ELSE : Para bifurcacion3.7.11 SET : permite asignar valores a variables3.7.12 DO-WHILE END : Repetitiva mientras se cumple una condición.3.7.13 OPENFILE : Abrir fichero3.7.14 GETFILE : Lee el siguiente registro de un fichero secuencial
3.7.15 PUTFILE : Escribe un registro en un fichero físico.3.7.16 CLOSEFILE : Cierra el fichero3.7.17 ATTN : Rutina de ATENCION3.7.18 TERMIN3.7.19 READDVAL : Separar la informacion contenida en &SYSDVAL3.7.20 GLOBAL : define variables globales
3.8 Comandos de TSO
3.9 Funciones estandar3.9.1 &DATATYPE : Determinar tipo de variable3.9.2 &EVAL : Evaluar el contenido de una expresión3.9.3 &LENGTH : Determinar la longitud de una expresión
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 6/373
TSO para desarrolladores: TABLA DE CONTENIDOS Autor: José M. Peco
Página 6 de 374
3.9.4 &NRSTR : Determina que no se realicen sustituciones con &&3.9.5 &STR : Determina que el contenido del argumento es una cadena3.9.6 &SUBSTR : Extrae una subcadena de una cadena o de una variable
3.9.7 &SYSCAPS : Pasa a mayúsculas el argumento3.9.8 &SYSDSN : Determina si existe como dataset el argumento3.9.9 &SYSINDEX : Buscar un carácter en una cadena3.9.10 &SYSLC : Pasa a minusculas el argumento pasado3.9.11 &SYSNSUB : Determina el nivel de sustituciones.
3.10 Ejemplos3.10.1 JMPALO00 : Paso a fichero de las librerías alocadas3.10.2 DISPLAY1 : visualizar en panel el fichero generado con JMPALO003.10.3 JMPLIB00 : capturar los miembros de una libreria3.10.4 JMPLIB05 :3.10.5 LISTAR : Listar por impresora, con IEBGENER un fichero3.10.6 NAT
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 7/373
TSO para desarrolladores: TABLA DE CONTENIDOS Autor: José M. Peco
Página 7 de 374
Tema 4 : DIALOGOS ISPF
4.1 Generalidades
4.2 Variables4.2.1 Variables del sistema
ZCMDZSELZPRIMZPARENT
4.2.2 Variables de Usuario4.2.3 Variables de control
4.3 Sentencias
4.3.1 Sentencias de asignación4.3.2 Sentencias de verificación
4.3.3 Sentencia IF4.3.4 Sentencia VGET4.3.5 Sentencias VPUT4.3.6 Sentencias REFRESH
4.4 Mensajes
4.5 Funciones
4.5.1 Función TRUNC4.5.2 Función TRANS4.5.3 Función PFK4.5.4 Función LVLINE
4.6 Panel
4.6.1 Sección ATTR4.6.2 Sección BODY4.6.3 Sección INIT4.6.4 Sección PROC4.6.5 Sección REINIT4.6.6 Sección MODEL4.6.7 Sección END
4.7 Tablas ISPF
4.8 Función
4.8.1 Servicios Generales
DISPLAYSETMSGSELECT
4.8.2 Servicios para el Tratamiento de tablas
TBDISPLTBCREATETBOPENTBSORTTBSTATS
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 8/373
TSO para desarrolladores: TABLA DE CONTENIDOS Autor: José M. Peco
Página 8 de 374
TBQUERYTBSAVETBCLOSE
TBENDTBERASE
4.8.3 Tratamiento de filas
TBADDTBDELETETBEXISTTBGETTBMODTBPUTTBSARGTBSCANTBVCLEAR
4.8.4 Servicios para el posicionamiento
TBTOPTBSKIPTBBOTTOM
4.8.5 De FILE TAILORING
FTOPENFTINCLFTCLOSEFTERASE
4.8.6 De variables
VGETVPUT
4.8.7 Definición de librerías
4.8.8 Otros servicios
4.9 Tutorial
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 9/373
TSO para desarrolladores: TABLA DE CONTENIDOS Autor: José M. Peco
Página 9 de 374
4.10 Ejemplos:
4.10.1 Pasar un archivo particionado o PDS a fichero secuencial.
Clist principal:Panel: INTUTIPSEsqueleto : INTUTIPS
4.10.2 Listar archivo por impresora:Panel:Clist LISTARFormato:
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 10/373
TSO para desarrolladores: PRÓLOGO Autor: José M. Peco
Página 10 de 374
Prologo
El pasado año, al guardar todos los apuntes y anotaciones que habíaido recopilando a lo largo de los últimos años, pues cambiaba detrabajo y de entorno, se me ocurrió la idea de escribir este libro.Mis pretensiones no eran otras que las de poder ofrecer a todosaquellos que se incorporan año tras año a este mercado de trabajo,esa experiencia que tantas veces eche en falta, ya que no disponíade ningún libro que me pudiera contestar los interrogantes que seplanteaban según la situación.
Desde que termine la carrera, y de esto hace ya tiempo, siempre hetrabajado en el entorno de grandes sistemas, pero en la partecorrespondiente a desarrollo de aplicaciones. Y, por curioso queparezca, es en estas grandes instalaciones, donde bien por tener losmanuales en el departamento de sistemas, o bien porque estos estánen inglés, se echa de menos un libro de consulta, que supla losmanuales de usuario, guías de referencia y que tenga ejemplos queresuelvan las dudas mas elementales de todos aquellos que para algúntema puntual se salen fuera del entorno en el que trabajan paraentrar en el sistema.
Como seguramente el lector conoce, los grandes sistemas deordenadores tienen a su personal del centro de proceso de datos(CPD) dividido en dos mundos, el mundo de sistemas, y el de losdesarrolladores. Tanto unos como otros reciben formación especificade los temas que necesitan para desarrollar su trabajo. Pero muchasveces los desarrolladores necesitan hacer cosas que, pordesconocimiento del mundo de sistemas, son consideradas imposibles oson resueltas dando demasiadas vueltas.
Este libro va dirigido precisamente a los desarrolladores, si bienel personal que se inicie en sistemas puede beneficiarse de su usopor tratar profusamente el sistema de programación interactiva enTSO (Time Sharing Option) de IBM
El libro se compone de 4 temas, que precisamente son los que undesarrollador que trabaje bajo TSO debe conocer. Y, posiblemente los
temas tratados no tengan la profundidad ni expongan todas lasopciones que cada una de las sentencias cuente, pero para eso estánlos manuales de referencia, pero si puedo asegurar, desde mi modestaopinión, que con lo aquí expuesto se pueden desarrollar utilidades'muy útiles' en cualquier entorno TSO, ya que se hace uso únicamentede comandos, instrucciones y parámetros estándar.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 11/373
TSO para desarrolladores: PRÓLOGO Autor: José M. Peco
Página 11 de 374
El primer tema: MVS es un tema de introducción que no pretendeexplicar el sistema operativo, sino simplemente posicionar al lectoren la terminología y en los elementos que se referenciaran en lostemas posteriores.
El segundo tema: JCL trata el lenguaje usado para el control detrabajos BATCH. Este lenguaje es uno de los mas usados en cualquierinstalación, pero no siempre bien aprovechado ya que se usanúnicamente las opciones básicas.
El tercer tema se dedica al lenguaje de comandos CLIST. Este es unlenguaje que tradicionalmente es usado por el personal de sistemaspara preparar entre otras cosas las utilidades y el entorno quenecesita todo el personal que quiera hacer uso del ordenador. Es unlenguaje sencillo, no requiere procesos de compilación, y suconocimiento beneficiara y mejorara el rendimiento del personal dedesarrollo pues permitirá simplificar y personalizar las laborescotidianas.
El ultimo tema se dedica a estudiar los servicios de ISPF, siendoeste un producto de IBM para facilitar el uso de las utilidades delsistema operativo, también es un elemento mas del sistema quepermite la creación de diálogos mediante una adecuada combinación deprocedimientos de clist y servicios ISPF. Es muy fácil suimplementación y muy elevado el rendimiento obtenido.
Todo este conjunto he procurado documentarlo con un gran numero de
ejemplos que sirvan además de utilidades con las que espero hacermas inteligible y amena su lectura.
Por ultimo, quiero desde aquí, dar las gracias a todos aquellos queme han ayudado en la confección de este libro, y muy especialmente aFerran Palau i Fernandez.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 12/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 12 de 374
Tema 1 : MVS
1.1 Generalidades
El MVS es el sistema operativo de IBM para sus grandes procesadores.
Normalmente, los ordenadores que utilizan este S.O. suelen estar destinadosa la gestión masiva de datos permitiendo funciones de multiprogramación ymultiproceso, y dan soporte a uno o varios sistemas de teleproceso.
El termino de MULTIPROGRAMACIÓN se da a aquellos sistemas que permiten laejecución simultanea de varios procesos en el ordenador, repartiendo eltiempo de ejecución entre las distintas secuencias de instrucciones de cadauno de los programas. Mientras que el termino de MULTIPROCESO se aplica aaquellos sistemas que por tener varios procesadores, tienen la capacidad deejecutar dos o mas instrucciones en el mismo instante, y en consecuencia,
pueden ejecutar dos o mas procesos al mismo tiempo.
Por otra parte, como cualquier otro sistema operativo, este sistemaincorpora herramientas interactivas para facilitar la gestión de lasfunciones principales de un Centro de Proceso de Datos (CPD).
El nombre de MVS se corresponde con el acronimo de Múltiple Virtual Storage,recogiendo este nombre de su funcionamiento ya que para su gestión se basaen los conceptos de paginación y memoria virtual.
En general, en una instalación de MVS, se pueden encontrar los siguienteselementos:
- MVS básico (MVS release 3.8)- ISPF Interactive System Productivity Facilitys
Este es un producto que se ejecuta bajo TSO, contiene un editory numerosos programas de utilidad que facilitan el uso denumerosos servicios que permiten el desarrollo de diálogosinteractivos.
- Software especifico para el mantenimiento de subsistemas específicos,capaces de optimizar entre otros, la gestión de ejecución de lostrabajos Batch o la de almacenamiento de los datos.
El mantenimiento del MVS es realizado directamente por IBM, pudiendo optarsepor los métodos de:
- Actualización de las mejoras según van apareciendo (PUT)
- Sustitución total del MVS (CBIPO)
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 13/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 13 de 374
1.2 Versiones del MVS
Las diferentes versiones de los productos que acompañan al MVS básico, sonlas que establecen las diferentes versiones de este S.O.. Así, cuando sehabla de:
- la versión 1 de MVS, con sus diferentes revisiones (releases), se estahablando de lo que comúnmente se conoce como MVS/370, pero se correspondecon el OS/VS1 versión 2, e introduce el concepto de Espacio dedirecciones.
- la versión 2 de MVS más sus diferentes releases componen el MVS/XA.(eXtended Architecture). Esta realmente fue una revisión de la versiónanterior para solucionar la gran cantidad de problemas presentados enaquella.El MVS/XA es una versión que afecta tanto al hardware como al software ya
que la memoria virtual pasa de 16 Mb a 2 Gb, necesitando 4 bytes paradireccionar cada posición de memoria.
- la versión 3 se corresponde con lo que se conoce como MVS/ESA (EnterpriseSystem Architecture).Esta versión se diferencia de la anterior, entre otras cosas, en que puededireccionar hasta un máximo de 15 espacios de direcciones de 2 Gb. Asímismo esta versión introduce el uso de microcodigo.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 14/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 14 de 374
1.3 Componentes principales del MVS
Como ya se ha dicho, el MVS es un compendio de rutinas del sistema operativobase, utilidades, subsistemas y productos, y todo el conjunto tiene porobjetivo el resolver las necesidades planteadas por toda la instalación.
Los subsistemas y productos más importantes son:
VTAM Virtual Telecommunications Access MethodEste método de acceso para comunicaciones fue creado por IBM afin de aprovechar las nuevas capacidades del Hardware del S/370,de la memoria virtual, y de los terminales y unidades de controlinteligentes.
TSO Time Sharing Operation (Operaciones de tiempo compartido).Es un subsistema de IBM para poder acceder de forma interactiva a
los servicios de MVS.
Normalmente va acompañado de un producto a base de paneles, parahacer más sencillo su manejo. Este producto es ISPF/PDF.
CICS Customer Information Control System (Sistema de control deinformación de clientes)
Sistema de base de datos y comunicación de datos (DB/DC) de usogeneral para procesos interactivos. Suelen disponer de estesistema de teleproceso las instalaciones que trabajan con COBOLcomo lenguaje de programación.
IMS Information Manager System (Sistema de administración deinformación)Fue uno de los grandes productos de IBM en sistemas DB/DC(DataBase/DataComunication). Suelen disponer de este sistema deteleproceso las instalaciones que trabajan con DL/I como base deDatos y PL/I como lenguaje de programación.
DL/I Gestor de base de datos jerárquicaDB2 Data Base 2
Gestor de base de datos relacional.
JES Job Entry Subsistem (Subsistema de entrada de trabajos)
Subsistema de entrada de trabajo (Gestor de trabajo por lotes).
CONSOLAS Terminales maestros que controlan y gobiernan el sistema(Herramientas de operación).
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 15/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 15 de 374
1.4 Usuarios de MVS
Se entiende por usuario de un sistema operativo MVS, todo aquél que necesitay obtiene recursos de éste.
Este concepto de usuario de MVS esta íntimamente relacionado con los tiposde trabajos que se van a ejecutar en el sistema, y que por lo tanto incidenen el S.O., por sus propias necesidades.
1.- Productos y subsistemas del propio MVS (Programas y Subsistemasnecesarios para el funcionamiento de MVS, JES, VTAM, CICS, etc.) quevan a resolver ciertas necesidades de los programas de aplicación.
2.- Usuarios de TSO. Usuarios que conectados a través de un terminal usanlos servicios de MVS a través del producto interactivo TSO (tiempocompartido).
3.- Programas batch y aplicaciones, tanto por lotes como en modo on-lineque accederán a la información residente en el ordenador, con el objetode proporcionar unos resultados.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 16/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 16 de 374
1.5 Componentes de Hardware
Algo vital en un sistema de proceso de datos es el entramado hardware dondese van a procesar y ejecutar todos los programas de la instalación.
Se puede distinguir los siguientes componentes como elementos principales:
1.5.1 Procesadores y subsistemas de Canales
MVS/ESA, está soportado por ordenadores IBM de la familia 3090 en susdiferentes versiones, y la familia 4381 modelos 91 y 92.
Estos equipos pueden ser monoprocesadores (un solo procesador enmáquina), cuyos modelos principales son:
ES/3090 100 modelos S,
ES/3090 150 modelos E y S.ES/3090 180 modelos E y S.ES/4381 modelos 90 y 91 E.
O bien pueden ser multiprocesadores (varios procesadores en máquina)modelos:
ES/3090 250S, 280E, 380E, 400E y S, 600E, y S.
El subsistema de canales se puede definir como una pequeña máquina (consu software y hardware) particular, que libera al procesador de lasfunciones de operación de E/S pues este subsistema es el encargado derealizarlas de una manera autónoma, aunque limitada, pues su softwaresolo le permite ejecutar las operaciones siguientes:
- leer un bloque- escribir un bloque- leer hacia atrás- analizar- controlar (salto de línea en un impresora)- transferir en canal (bifurcar)
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 17/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 17 de 374
1.5.2 Dispositivos de Memoria Auxiliar.
Cualquier programa, para poder ejecutarse debe cargarse previamente en lamemoria principal del ordenador, pero esta memoria es cara, volátil,pequeña y además no es suficiente para albergar la gran cantidad dedatos, que necesita un C.P.D. para su funcionamiento. Por eso, todosestos datos son alojados en dispositivos auxiliares, y serán pasados amemoria central para su ejecución en su momento adecuado. Entre estosdispositivos auxiliares se pueden destacar los siguientes:
1. DISCOS
Son los dispositivos de mayor capacidad.
Un disco IBM, es en realidad un armario con dos volúmenesindependientes.
Los modelos existentes son:
1ª generación 2311, Tenían la característica de ser2314 removibles y la capacidad de cada módulo2319 era de 29 Mb.
2º generación 3330 Capacidad : 100 MbSon semiremovibles
3ª generación 3340 34 Mb3344 70 Mb335033703375 409 Mb
No son removibles
4ª generación 3380 su capacidad depende de la densidad,oscilando entre 630 a 1890 MB
2. Unidades de Cinta : 3420
Son unidades que permiten la grabación y lectura de la informacionsoportada en cinta redonda, siendo este un almacenamiento externocon una capacidad máxima de 160 Mb.
Entre sus características se puede destacar que utiliza el método decolumna de vacío para preservar la rotura de la cinta.
3. Unidades de Cartucho: 3480
Son dispositivos de almacenamiento externo, parecidos a las cintas,pero con mayor velocidad de grabación y mayor capacidad dealmacenamiento (200 Mb).
Reciben el nombre de cinta cuadrada.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 18/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 18 de 374
1.5.3 Periféricos y consolas
1.- Impresoras
A un ordenador IBM se puede conectar todo tipo de impresoras,locales 3800 y remotas 3274, 3825, 4250, etc.
2.- Terminales
A un ordenador IBM se puede conectar cualquier tipo de terminal pararecoger o sacar datos de éste en modo interactivo u on-line.Hay que tener en cuenta que hoy existen emuladores de todo tipo determinal que facilitan esta conexión.Las conexiones que se pueden hacer son locales y remotas, es decir,a través de un controlador de comunicaciones, o utilizando la redtelefónica como medio de transmisión de datos.
3.- Consolas
Las consolas son unos terminales especiales, conectados directamenteal ordenador y que sirven para el gobierno de todo el sistema.Lo normal es que exista una consola maestra y varias alternativaspara realizar funciones específicas o bien como backup de lamaestra.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 19/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 19 de 374
1.5.4 Unidades de control
Son elementos hardware que controlan el funcionamiento y el acceso a losdispositivos, y son usados por el subsistema de canales.
1. Unidad de control de discos
Existen varios modelos de estas unidades, entre los que seencuentran los tipos 3880 y 3990.
De cada una de esta unidades pueden colgarse de 16 a 32 armarios dediscos, por lo tanto controlan de 32 a 64 volúmenes.
2. Unidades de control de cintas y cartuchos
Estas unidades son las encargadas de controlar la grabación y
recuperación de datos de las unidades de cintas y cartuchos.
Entre estas unidades tenemos los controladores de cinta 3480 y 3422de IBM.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 20/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 20 de 374
1.6 JES: Subsistema dedicado a la gestión de trabajos Batch
Su nombre proviene del acronimo de Job Entry Subsystem. Es decir es elencargado de gestionar la entrada de todos los trabajos.
En los primeros sistemas operativos, este era el programa encargado decontrolar las lectoras de tarjetas o fichas perforadas, y las impresoras; ycomo consecuencia ha heredado la función de interpretar las sentencias quese le envían como entrada para la ejecución de un trabajo.
Existen dos versiones del JES: JES2 y JES3, pudiendo ejecutarse cualquierade ellas con MVS.
El JES2 es el resultado de la revisión del programa HASP (Houston AutomaticSpooling Priority) del MVT (Multiprogramación con numero variable de tareas)mientras que el JES3 es el resultado de la revisión del programa ASP.
Para ejecutar trabajos batch en MVS se puede utilizar cualquiera de las dosformulas siguientes:
- ejecutar el comando de TSO SUBMIT para enviar a la cola de entrada detrabajos del JES el JCL que sirve de parametro a dicho comando; o
- Escribiendo mediante cualquier programa o utilidad un JCL sobre la cola deentrada de trabajos del JES.
Las principales funciones del JES son:
- Gestión de entrada de trabajos en los iniciadores, en base a sus clases.
- Verificación de la validez de la sintaxis del JCL.
- Reserva y asignación de recursos (Fichas DD del JCL).
- Interfase con MVS durante la ejecución de trabajos.
- Gestión de salidas impresas en base a las clases de salidas de losdiferentes impresos.
Los tres componentes principales del JES son:
- los iniciadores,- el spool y- el fichero de check-point.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 21/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 21 de 374
1.6.1 Iniciadores
Los JOBs, mediante el parámetro CLASS, tienen asignado la clase deentrada del JES en la que se debe ejecutar.
Los iniciadores son colas que tienen asignadas unas clases de proceso, ysirven para seleccionar trabajos a fin de repartir la carga de trabajosbatch del sistema.
La definición de los iniciadores y la asignación de las distintas clasesa cada uno de ellos es misión del administrador del sistema.
Las clases se definen con una letra o un número.
Ejemplo :
Supuesto que se ha submitido el JOB siguiente://XXXXXXXX JOB CLASS=K
...Y que el sistema tiene definidos las siguientes relaciones:
Iniciador Clases trabajos
1 ABC 82 ACK 153 AD 34 CE 5
El sistema podrá asignar dicho JOB solo al iniciador 2 pues esel unico que puede ejecutar los trabajos de la cola K.
Suponiendo que en ese momento se encuentren 15 trabajosejecutándose en dicho iniciador, el trabajo se encolara a laespera de tener hueco.Si en al mismo tiempo se submite otro trabajo para la cola A,este podrá ser asignado a cualquiera de los inicadores 1,2 o3. Asi, si el iniciador 1 esta ejecutando menos de 8 trabajos.será asignado a este JOB; en caso contrario, se examinara el2, que esta con sobrecarga. por lo que se examina el iniciador3, que como no tiene trabajos en ejecución, será quienfinalmente ejecute el trabajo.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 22/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 22 de 374
1.6.2 SPOOL
El Spool es un fichero gestionado y controlado por el JES y que tiene pormisión es contener todos los trabajos que estén:
- ejecutándose,- en espera de ejecutar, o- en espera de salida.
Para poder realizar esta gestión, el spool se organiza formando colas,entre las que cabe destacar:
COLAS DE ENTRADA:
En esta cola están todos los trabajos que se encuentranesperando un iniciador libre asignado a su clase para poder
ejecutarse.Los trabajos se encuentran clasificados por la identificaciónde la cola asignada al JCL mediante el parámetro CLASS de laficha JOB.
COLAS DE EJECUCION:
En esta cola se encuentran los trabajos que en ese momentoestán en ejecución. También se encuentran los trabajos en estacola clasificados por clase.
COLAS DE SALIDA:
En esta otra cola se encuentran aquellos trabajos que hayanterminado, y estén esperando una salida impresa.También en esta cola la informacion se encuentra clasificadapor el identificador de la cola asignada a las salidasgeneradas, que no tiene por que coincidir con la definida anivel de JOB.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 23/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 23 de 374
1.6.3 Fichero de check-point
Este fichero es en el que se basa el JES para establecer las operacionesa realizar. Contiene una referencia de todas las colas de entrada ysalida, además de los trabajos en ejecución, por lo que este es elfichero que consulta y mantiene el JES para, explorando las colas, sabercual es el trabajo que debe atender en primer lugar; y una vezestablecido este, accede el SPOOL, donde se encuentra realmente el JCL,para enviarle a ejecución, al tiempo que actualiza el estado de losficheros con las colas afectadas.
Normalmente, en las instalaciones se definen varios ficheros de SPOOL,pero en cambio,solo se define un fichero de chek-point, y opcionalmenteotro, que sirve como una copia del primero, para poder reactivar lasfunciones del JES, en caso de error en el primer fichero de chek-point.
La configuración de todo este sistema es labor del departamento detécnica de sistemas.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 24/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 24 de 374
1.7 Los ficheros en MVS
En MVS como en cualquier otro sistema operativo, la informacion se encuentraagrupada en conjuntos homogéneos, recibiendo cada conjunto la denominación defichero o Data-set.
En MVS el nombre de los ficheros se forma agrupando calificadores yseparando estos con un punto. Cada uno de los calificadores puede tener unalongitud máxima de 8 caracteres alfanuméricos, no pudiendo empezar pordígito ni por un carácter especial con excepción del $ que es valido.
La longitud máxima del nombre de un fichero no puede superar los 44caracteres. y debe tener al menos dos calificadores, exceptuando losficheros temporales, cuyo nombre se forma anteponiendo un & a un unicocalificador.
El nombre completo de un miembro de un fichero particionado se formaescribiendo el nombre del fichero y entre paréntesis el miembro a procesar.
Además, MVS contempla también ALIAS para los nombres de ficheros, siendoestos ALIAS, nombres alternativos dados a ficheros. Para las versionesanteriores al MVS/ESA este nombre alternativo solo podía especificarse parael primer cualificador. En cambio, con esta versión de MVS el alias puedereferenciar hasta los cuatro primeros calificadores de un fichero si sedesea.
Los alias residen en el catálogo maestro, como se vera a continuación, yapuntan a un determinado catálogo de usuario, donde estará ya la ubicaciónfísica de un determinado fichero.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 25/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 25 de 374
1.7.1 Tipos de organizacion en ficheros no-VSAM
Los principales tipos de organizacion de ficheros no-VSAM en un sistemaMVS son:
- Secuencial- Particionada- Directa- Secuencial Indexada
1.- Organizacion secuencial
- Los ficheros con este tipo de organizacion se definen comoel conjunto generado al almacenar la informacion
secuencialmente, es decir, escribiendo cada registro unodetrás del otro y manteniendo este orden. Cuando se deseerecuperar la informacion, los registros deben leerse de lamisma forma, es decir, leyendo un registro cada vez y en elmismo orden en el que se escribió.
Para el manejo de la informacion en estos ficheros, ya sea encinta o en disco, se puede usar cualquiera de los siguientesmétodos:
- El método de acceso QSAM (Queued Sequential Acces Method)que permite al usuario leer y escribir a nivel de registrológico. Es el mas usado.
- El método BSAM (Basic Sequential Acces Method) que permiteal usuario leer y escribir a nivel de bloque.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 26/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 26 de 374
2.- Organizacion particionada
Los ficheros pertenecientes a este tipo también reciben elnombre de bibliotecas, librerías o PDS (Particioned Data Set)debiendo este nombre, en parte a herencia de los sistemasoperativos predecesores, y en parte a la forma en comoorganiza su informacion, pues dispone de las dos areassiguientes, a modo de biblioteca:
- un área de directorio que permite la localización inmediatade cualquier miembro,
- y un área de datos.El área de datos esta formada por conjunto de datossecuenciales.
El directorio es un área que contiene una entrada para cada
miembro. Cada una de estas entradas contiene la especificacióndel nombre, dirección relativa de comienzo dentro del area dedatos, longitud y otras estadísticas de cada uno de losmiembros. (ver utilidad ........)
Estas dos áreas son independientes y se dimensionarán condistinto espacio. Un fichero particionado se gobierna por sudirectorio. (ver parámetro SPACE de la ficha DD).
Este tipo de organización es muy usada en MVS, siendo ademásobligatoria para cierto tipo de información, tales comoprocedimientos y programas ejecutables entre otros. Y seemplea para contener tanto datos como programas.
El método de acceso que procesa este tipo de ficheros es elBPAM (Basic Partitioned Access Method).
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 27/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 27 de 374
3.- Organizacion Directa o Random
Este tipo de organizacion permite al usuario leer y escribirdirectamente a nivel de bloque. Solo puede usarse con ficherosen disco, y su uso esta ligado a la gestión de Bases de datos(como IDMS) no siendo un método de acceso de uso normal parael usuario.
El método de acceso que procesa este tipo de ficheros es elBDAM (Basic Direct Access Method)
4.- Organizacion Secuencial Indexada
Este es un método obsoleto que ha sido reemplazado por los
ficheros VSAM.
El método de acceso que procesa este tipo de ficheros es elISAM (Indexed Sequential Access Method).
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 28/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 28 de 374
1.7.2 Tipos de registro
Cualquier tipo de fichero no-VSAM definido en el punto anterior puedetener definido uno de los siguientes formatos de registro:
- Formato FIJO (F)
Este tipo de formato se caracteriza por tener todos losregistros la misma longitud, y todos los bloques o conjuntosfísicos de registros lógicos de un mismo fichero) tambiéntienen el mismo tamaño.
El máximo tamaño del bloque es de 32760 Bytes.
Formato Variable (V)
La característica de este tipo de registros es que losregistros lógicos que componen el fichero tienen longitudesdistintas, yendo precedido cada uno de los registros por 4bytes para especificar su longitud. A su vez, cada bloquetambién va precedido por otros 4 bytes para indicar sulongitud.
El tamaño máximo del bloque es de 32760 mientras que el deregistro es de 32756 bytes.
Si pudiera darse el caso de que un registro lógico exceda eltamaño máximo de un bloque, habría que definir el fichero comode formato VBS(Variable Blocked Spanned)
Formato Indefinido (U)
Este tipo de formato se usa cuando el fichero no esta formadopor registros lógicos, por lo que solo pueden leerse los datosleyendo el bloque entero.
El tamaño del bloque no puede exceder de 32760 Bytes.
Este formato es el usado entre otras, por las librerías de losprogramas ejecutables.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 29/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 29 de 374
1.7.3 Organizacion VSAM
Este tipo de organización de fichero es especial contandoademás con un método de acceso propio.
Su nombre proviene del acronimo Virtual Storage Access Method.Debiendo ser procesados por sistemas que traten memoriavirtual, tal y como indica su nombre, y además deben residiren disco.
Dentro de este tipo de organizacion existen 4 tipos:
- Organizacion Secuencial (ESDS:Entry Sequential Data Set)Sustituye a los ficheros con acceso QSAM y BSAM.
- Organizacion Directa (RRDS:Relative record Data Set)Sustituye a los BDAM.
- Organizacion Indexada (KSDS: Key Sequential Data Set)Sustituye a los ISAM
- Organizacion lineal : Este tipo de organizacion secuencial.Es usada solo por gestores de bases de datos.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 30/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 30 de 374
1.7.4 Acceso y recuperación de datos
El acceso a datos en MVS se hace a través del juego de VTOC y catálogos.
1.- VTOC (Tabla de Contenidos del Volumen).
En MVS todos los volúmenes DASD(Direct Access Storage Device)tienen una zona en la que se registra toda la informaciónfísica que contiene, así como la organizacion de los ficherosque están en ese volumen.
Esta area, que recibe el nombre de VTOC se crea en el momentode inicializar el volumen. La informacion contenida en ellaesta organizada en distintos tipos de registros, todos elloscon una longitud de 144 bytes de longitud, y reciben el nombrede DSCB (Data set control Block)
La primera parte del registro tiene una longitud de 44 bytes,y contiene o el tipo de registro o el nombre del fichero.
Cada tipo de registro o formato, contiene la siguienteinformacion especifica:
Formato 4: Describe la VTOC.Es el primer registroSolo hay un registro de este tipo.
Formato 5 Especifica el espacio libre
Formato 1 Describe cada archivo y el espacio que ocupa,
ajustándose a la siguiente estructura:
00-43 Nombre del fichero44-44 Tipo de registro... Organizacion
Longitud del bloqueTamaño de registroPunteros a los 3 primeras extensiones
Formato 3 Describe las extensiones del fichero
Formato 2 Describe el método de acceso a los ficherossecuenciales indexados.
Formato 0 Es un registro nulo.
Nota: Con el lanzamiento del SMS (Sistema de gestión dememoria) las VTOC tienden a desaparecer.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 31/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 31 de 374
2.- Catálogos
Los catálogos son el otro componente en el que se apoya MVSpara el acceso y localización de ficheros.
Un catalogo no es mas que un fichero VSAM, pero con uncontenido especial ya que contiene información acerca de laubicación física de otros ficheros, de modo que se puedalocalizar solo con esa informacion cualquier fichero de lainstalación.
En MVS un fichero puede, o no, estar catalogado. En el caso deestarlo el sistema a través del catálogo puede determinar elvolumen en el que se encuentra, y una vez en el volumen,examinando la VTOC podrá recoger todas las características deeste fichero. En el caso de no estar catalogado, cuando se
desee utilizar, habrá que especificar la información delvolumen que le contiene, para que así, mirando la VTOC puedalocalizarlo.
Para poder gestionar la catalogación de todos los ficheros dela instalación, MVS mantiene un catálogo maestro y varioscatálogos de usuario.
En el catálogo maestro, normalmente figuraran entradasmaestras, es decir referencias de los ficheros que son vitalespara el funcionamiento de MVS, y sus alias.En los catálogos de usuario figurara la dirección lógica delos distintos ficheros de usuario.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 32/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 32 de 374
1.8 Librerías que contienen el MVS
Por lo general todos los módulos del MVS se encuentran ubicados en libreríasque tienen por primer cualificador SYS1, siendo alguna de las masinteresantes desde el punto de vista del desarrollador, las siguientes:
SYS1.LPALIB Contiene los módulos del supervisor
SYS1.NUCLEUS Contiene los módulos que definen el sistema como resultantedel proceso de generación del sistema (SYSGEN)
SYS1.LINKLIB Contiene las utilidades y módulos compartidos por todos losusuarios, tales como SORT, COBOL, IEBCOPY, ...
SYS1.SVCLIB Esta librería contenía los módulos del supervisor (SVC) enel MVT, pero hoy solo se mantienen por razones decompatibilidad.
SYS1.CMDLIB Esta librería contiene los módulos del procesador decomandos de TSO.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 33/373
TSO para desarrolladores: MVS Autor: José M. Peco
Página 33 de 374
1.9 Bibliografía
MVS - Manual para programadoresRobert H. JohnsonEditorial McGraw Hill
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 34/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 34 de 374
Tema 2 : JCL
2.1 Introducción
Como se ha visto en el tema anterior, uno de los subsistemas básicos delsistema operativo MVS es el JES o controlador de trabajos batch. Su misiónfundamental consiste en preparar los trabajos que se le envían para suejecución, interpretando las sentencias de control que componen cada una delas cadenas o JOBs, y asignar los recursos que requiere su ejecución asícomo el espacio de direcciones ,o partición, en la que poder ejecutarse.
Estas cadenas son escritas en un lenguaje especial, llamado Lenguaje deControl de trabajos (Jobs), o abreviadamente JCL.
Debemos diferenciar entre JC y JCL, siendo:
JC el programa (Job control)JCL el lenguaje que se utiliza para trabajar con el JC
También se suele dar el nombre de JCL, aunque erróneamente, a la cadenaescrita para la ejecución de un trabajo.
El JES, como ya se ha visto, es invocado cada vez que se ejecuta el comandoSUBMIT de TSO, mediante el cual se envía a la entrada de ejecución detrabajos un fichero conteniendo la secuencia de sentencias de control que sedesea ejecutar; o bien, copiando un fichero sobre la entrada de trabajos delsistema(Internal Reader) como también se vera a lo largo de este tema.
Por otra parte, también se puede usar el JCL para ejecutar comandos propiosdel JES2 y JES3.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 35/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 35 de 374
2.2 Definiciones previas
JOB o CADENA
Recibe este nombre una sucesión de programas encadenados para suejecución como un unico trabajo.
Comienza siempre con una sentencia //nombre JOBy finaliza con : /&aunque esta ficha no es obligatoria, o con una sentencia vacia,entendiendo por tal la que solo contiene simplemente //
STEP o PASO
Recibe este nombre el conjunto de sentencias necesarias paraejecutar cada uno de los programas que integran un JOB.
Un paso del trabajo comienza siempre con//nombre EXEC
Finaliza cuando se encuentra con el fin del JOB o con otra fichaEXEC.Y debe contener tantas sentencias DD como ficheros lógicostenga definidos el programa que se desea ejecutar.
ALOCAR
Este anglicismo, muy usado en las instalaciones, deberíaescribirse como ALLOCAR, pues proviene de usar el comando ALLOC
abreviatura de ALLOCATION, que significa asignación.
Se entiende por alocar un fichero o una librería el asignar dichofichero o librería a nuestro entorno de trabajo a fin de poderhacer uso de él. Hay que tener en cuenta que en MVS solo se puedehacer uso de aquellos elementos que se encuentren alocados en elentorno del usuario que desea ejecutar el programa.
Esto es lógico, ya que cuando se aloca un fichero se especificatambién el modo en el que es asignado, de esta forma si se alocaun fichero como de Modificación, se estará asignado conexclusividad, y nadie podrá hacer uso de el, ni siquiera paralectura, pero, si se le aloca en modo compartido (SHaRed), todoslos usuarios podrán incluirlo en su entorno, siempre y cuando
también le aloquen como SHR.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 36/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 36 de 374
PROCEDIMIENTO CATALOGADO
Es un conjunto de sentencias de control incluidas en un miembrode una librería del sistema, y que emplea nombres variables parala codificación de aquellos parámetros cuyo valor se desconoce entiempo de codificación.
PROCEDIMIENTO IN-STREAM
Es, como el procedimiento catalogado, un conjunto de sentenciasde control, pero, en lugar de estar ubicadas en una libreríaestán incluidas dentro de la propia cadena de control.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 37/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 37 de 374
2.3 Formato general de las sentencia del JC
Todas las líneas que componen una cadena se codifican siempre en formatoimagen de ficha, es decir que su longitud es de 80 posiciones.
La informacion ejecutable se encuentra siempre en las primeras 71posiciones, ya que se reservan las 8 ultimas posiciones para un blanco, queactúa de delimitador, y 7 posiciones para la numeración de las fichas.
En el caso de que la informacion a especificar en una línea fuera mayor de71 posiciones, se puede continuar en las fichas siguientes, terminando lalínea con una coma, y comenzando la codificación de la línea siguiente entrelas columnas 7 y 16, tal y como se muestra en el siguiente ejemplo:
//XXXXXX85 JOB (123,DES),'JMP-PRU',CLASS=T,MSGCLASS=X, 00000100
// NOTIFY=XXXXXX,MSGLEVEL=(1,1) 00000200
El formato general de las sentencias de control es:
//Etiqueta b_1 operación b_2 operandos b_3 comentario
Donde:
// indica que se trata de una sentencia de control y debenocupar las columnas 1 y 2 de la ficha.
Etiqueta Sirve para identificar la sentencia de control en la quese encuentra.
B_1 Delimitador de 1 a n blancos
Operación Puede ser una de las operaciones comentadas en elsiguiente apartado.
B_2 Delimitador de 1 a n blancos
Operandos Este campo debe comenzar antes de la columna 17, yespecifica los operandos o parámetros del operador alque acompaña. En el caso de que los operadores fueranvarios, estos irán separados por comas, y sin incluir
blancos.B_3 Delimitador de 1 a n blancos
Comentarios Es el ultimo grupo de informacion de la línea y esutilizada para especificar comentarios a la línea de lacadena.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 38/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 38 de 374
Otros formatos de las sentencias de control son los siguientes:
(1) //
(2) //*
(3) /*comando
donde el formato:
(1) representa la sentencia vacía.Su uso especifica el fin de la cadena o JCL.
(2) se usa para especificar comentariosEs una ficha no ejecutable
(3) Este formato se usa para ejecutar comandos del JES
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 39/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 39 de 374
2.3.1 Etiqueta
Las etiquetas son identificadores que se utilizan para referenciarcualquier elemento individual dentro de su conjunto. Así, con la etiquetade la ficha:
- JOB queda identificado el JOB dentro de las colas de ejecución.- PROC queda identificado el procedimiento- EXEC queda identificado el paso- DD queda identificado de forma lógica el fichero ante el programa
que va a manejar sus datos.
Como características se pueden resaltar las siguientes:
- La etiqueta es un campo opcional
- En caso de codificarse debe comenzar en la columna 3- No puede ser mayor de 8 posiciones alfanuméricas- Debe comenzar por un carácter alfabético- Identifica la ficha de control- Sirve para referenciar una ficha del JOB.
//PASO1 EXEC PGM=IEBCOPY 00000600//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR 00000700//SALIDA DD SYSOUT=* 00000800
PASO1, STEPLIB, SALIDA son tres etiquetas que identifican tres fichasdistintas del JOB.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 40/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 40 de 374
2.3.2 Operación
Este lenguaje solo contempla los siguientes tipos de operación:
JOB Solo puede haber una operación de este tipo por cadena, yaque define el conjunto del JOB o JCL.
EXEC Esta operación sirve para especificar el programa oprocedimiento que se desea ejecutar. Por lo tanto habrátantas operaciones EXEC como pasos tenga el JCL o cadena.
DD Este tipo de operación sirve para definir datos. Es decir,esta ficha se usa para determinar los contenedores de losdatos que se van a manipular. En consecuencia debendefinirse a nivel de programa, ya que son estos los únicos
que pueden manejar los datos. Y habrá en un paso tantasoperaciones DD como Definiciones de Datos requiera elprograma.
PROC Como se ha dicho en las definiciones previas, unprocedimiento no es mas que un conjunto de pasos agrupadosbajo un nombre. Pues bien, esta operación define elcomienzo de un procedimiento, y la etiqueta que identificala ficha, da nombre al procedimiento. (No confundir estaoperación con el parámetro PROC de la ficha EXEC).
PEND Esta operación define el final de un procedimiento.
OUTPUT Este tipo solo es valido para MVS/XA y MVS/ESA y va ligadaal parámetro OUTPUT de la sentencia DD.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 41/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 41 de 374
2.3.3 Operadores o parámetros
Los operadores o parámetros de un operando pueden ser de dos tipos:
- Posicionales Aquellos cuyo valor esta asociado con la posiciónque ocupa como operador.
//DESJMPL1 JOB (40,123),'JMP-PRU'
- Palabra clave Aquellos cuyo valor va acompañado de una palabraclave que identifica al operador o parámetro usado.
// MSGCLASS=Z,NOTIFY=DESJMP
A su vez, los parámetros pueden estar compuestos de subparametros
posicionales y de palabra clave. En cualquier caso, estos subparametrosdeberán ir encerrados entre paréntesis, o entre comillas.
Como ejemplo de todas estas definiciones se acompaña el siguiente JCL,que como especifica en los comentarios, realiza la copia de un miembro deun fichero particionado sobre un fichero secuencial.
//DESJMPL1 JOB (40,123),'JMP-PRU',CLASS=D,MSGCLASS=Z,// NOTIFY=DESJMP,MSGLEVEL=(1,1)//**********************************************************************//* COPIAR UN MIEMBRO A UN SECUENCIAL//**********************************************************************//PASO1 EXEC PGM=IEBCOPY//ENTRADA DD DISP=OLD,DSN=&librería.(&miembro.)//SALIDA DD DSN=&secuenc,// DISP=(,CATLG,DELETE),UNIT=SYSDA,SPACE=(CYL,(1,1),RLSE),// DATACLAS=DFBAQ,LRECL=80//SYSIN DD *DDIN=ENTRADA DDOUT=SALIDA
/*//SYSPRINT DD SYSOUT=*
Como REGLA GENERAL: Cuando un parámetro posicional no se codifique yexistan operadores cuya posición relativa sea posterior a la del quefalta, deberán codificarse los huecos de los parámetros no especificadosmediante tantas comas como faltas haya, no debiendo dejar ningún blanco
entre estas ya que este es el delimitador de los distintos campos de laficha de control.
El siguiente ejemplo muestra este extremo, ya que falta el primersubparametro del operador DISP
// DISP=(,CATLG,DELETE)
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 42/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 42 de 374
2.4 Sentencia JOB
Especifica el comienzo de un trabajo o cadena.
Cada Job solo puede contener una única ficha JOB. Por esto, en el caso deque en una misma corriente de control vinieran especificadas varias fichasjob, cada una de ellas indicará el fin de un trabajo, si no es la primera, yel comienzo de un nuevo trabajo.En el caso de que dicha cadena contuviera alguna ficha nula ( solo con // )se ignorara el resto de la corriente.
El nombre del JOB puede tener hasta 8 caracteres, empezando siempre por uncarácter alfabético. No se considera el guión como carácter especial.
El formato de esta sentencia se ajusta al formato general.
//Nombre JOB ([cuenta][,informacion_de_contabilidad,...])CLASS=clase_ejecuciónMSGCLASS=clase_salidaMSGLEVEL=([sentencias],[mensajes])[COND=(código,operador),...][NOTIFY=identificación usuario][PRTY=prioridad del job][REGION=valorK] o [REGION=valorM][TIME={([minutos][,segundos])}][TYPRUN={HOLD}] o [TYPRUN={SCAN}][RESTART=id_paso_reinicio]
Los parámetros obligatorios en general son los parámetros CLASS para saber aque iniciador se debe enviar el trabajo, y MSGCLASS para determinar que tipode mensajes se quiere recoger. El resto de los parámetros son obligatorios uoptativos dependiendo de la instalación.
Como ejemplo se acompaña el siguiente, si bien puede tomarse cualquier otroejemplo de este tema.
//DESJMPL1 JOB (40,123),'JMP-PRU',CLASS=D,MSGCLASS=Z,// NOTIFY=DESJMP,MSGLEVEL=(1,1),RESTART=*
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 43/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 43 de 374
2.4.1 Informacion de contabilidad
Es un parámetro posicional y siempre es el primer parámetro de la fichaJOB.
Por lo general, todas las instalaciones suelen imputar los gastos delcentro de calculo a los distintos departamentos en función del tiempo demaquina que hayan consumido.
Este parámetro sirve para contabilizar dicho tiempo, y se ajustara a lasespecificaciones de la instalación.
Si hubiera que codificar subparametros, este parámetro ira delimitado porparéntesis, y los subparametros separados en el interior por comas.
En el caso de que algún parámetro contuviera apóstrofes o ampersands (&)se codificaran dobles, pero serán considerados por el sistema como sifueran sencillos.
La longitud total máxima de este parámetro es de 144 bytes.
Ejemplos
//JMP1 JOB 123, ...//JMP2 JOB (123,12-12-94), ...//JMP3 JOB , ...//JMP5 JOB 123&&456, ...
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 44/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 44 de 374
2.4.2 Nombre del programador
Parámetro posicional.
Este parámetro es el segundo de la ficha JOB, y por tanto, si no seespecifica el parámetro anterior, este debe ir precedido de una coma afin de respetar la regla general.
Este parámetro identifica al responsable del Job, y debe ir delimitadopor comillas simples (').
En el caso de que este parámetro contuviera comillas, estas debenespecificarse dobles, a fin de que no sea interpretada como fin delparámetro.
Ejemplos
//JMP1 JOB 123,'JMP-PRU' ...//JMP2 JOB (123,12-12-94),'JMP-PRU' ...//JMP3 JOB ,'JMP-PRU' ...//JMP4 JOB ,'Jose O''Donnel' ...//JMP5 JOB 123&&456,'JMP-PRU' ...
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 45/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 45 de 374
2.4.3 ADDRSPC
Parámetro de palabra clave
Este parámetro especifica si el JOB se va a ejecutar en memoria REAL o enmemoria VIRTual.
La diferencia entre un valor y el otro estriba en que si se ejecuta enmemoria REAL, no hay paginación, mientras que si se ejecuta en memoriaVIRTual, si la hay, lo cual implica un mayor tiempo de ejecución, sibien, esta diferencia de tiempos solo será apreciable en procesos muylargos.
Los valores posibles de este parámetro son :
- VIRT- REAL
Por defecto asume VIRT.
Ejemplos
//JMP01 JOB (123,(456,ABC)),ADDRSPC=VIRT...//JMP02 JOB ADDRSPC=REAL
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 46/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 46 de 374
2.4.4 CLASS
Parámetro de palabra clave
Este parámetro especifica la cola de entrada a la que se desea que el JESasigne el trabajo para su ejecución.
Las instalaciones definen en el JES distintos iniciadores para laejecución de los trabajos. A su vez, cada iniciador tiene asignadasdistintas clases o colas de entrada, y estas tienen asignadas distintasprioridades de ejecución, por lo que el enviar un trabajo a una u otracola, puede repercutir en el tiempo que tarda en ejecutarse dichotrabajo.
Así, por ejemplo, una instalación podría tener definidas las siguientes
colas:
Entrada A: Trabajos que consumen menos de 1 minutoB: Trabajos que consumen menos de 10 minutosX: Trabajos con tiempo ilimitado...
Salida A: Salida normalB: Salida en DIN-A4C: Salida para diskettes...
Por defecto asume la clase que tenga asignada el usuario de TSO quesubmite o envía el trabajo a ejecución.
Valores: A - Z0 - 9
Ejemplo: //JMP03 JOB ADDRSPC=REAL,CLASS=B
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 47/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 47 de 374
2.4.5 COND
Parámetro de palabra clave
Este parámetro especifica la condición que de forma general debe cumplirel código de retorno devuelto por los programas que configuran el JOB,para que siga ejecutándose el JOB.
Cada paso de un JOB cuando termina, devuelve un código de retorno que porregla general suele tomar los valores:
0 Todo correcto4 Existen avisos o warnings8 Existen errores12 Existen errores graves
Estos valores son cargados en la variable del sistema RC (Return Code)por los programas dependiendo de la lógica programada, o por el propiosistema.
La codificación de este parámetro se ajusta al siguiente formato:
COND=((código,operación),(código,operación),...)COND=EVENCOND=ONLY
donde
código es un numero decimal comprendido en el rango 0 a 4095, yrepresenta el valor con el que se debe comparar el códigode retorno de los pasos.
Operación Especifica como debe ser el código de retorno para que dejede ejecutarse el JOB.Los valores posibles de este campo son:
GT Mayor que (greater than)GE Mayor o igual (greater equal)LT Menor que (less than)LE Menor o igual (Less equal)EQ Igual (equal)NE No igual (Not equal)
Se puede especificar hasta 8 condiciones distintas, y solo seespecificaran los paréntesis internos si se incluye mas de una condición,funcionando en este caso como la operación lógica OR.
Ejemplos//JMP05 JOB CLASS=J,COND=(8,LT)...//JMP06 JOB ADDRSPC=VIRT,COND=((8,EQ),(40,GT))
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 48/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 48 de 374
2.4.6 MSGCLASS
Parámetro de palabra clave
Este parámetro especifica la clase de salida en la que el JES dejara losmensajes devueltos por el sistema, así como la interpretación de lassentencias del JOB.
Por defecto asume la clase que tenga asignada el usuario de TSO quesubmite o envía el trabajo a ejecución.
Valores: A - Z0 - 9
Ejemplo: //JMP03 JOB ADDRSPC=REAL,CLASS=B,MSGCLASS=8
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 49/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 49 de 374
2.4.7 MSGLEVEL
Parámetro de palabra clave
Este parámetro especifica el tipo de mensajes que se desea tener en ellog del job, es decir, los tipos de mensajes que se desea recibir de laejecución del job.
Se admite la abreviatura MSG
La codificación de este parámetro se ajusta al siguiente formato:
MSGLEVEL=([sentencias],[mensajes])
donde ambos parámetros están codificados, e indican
sentencias el tipo de mensajes relacionados con la interpretación delas sentencias de control que se desean.
mensajes especifica lo mismo pero con los mensajes que devuelve elsistema.
Los valores posibles para estos subparametros posicionales son:
Sentencias 0 Solo se imprime la sentencia JOB1 Se imprimen todas las sentencias de control incluida la
expansión de los procedimientos.2 Solo se imprimen las sentencias de control de entrada.
Mensajes 0 No se imprimen los mensajes de asignación de recursos amenos que el JOB termine anormalmente.
1 Se imprimen todos los mensajes de asignación derecursos.
En caso de no codificarse el subparametro de mensajes, no son necesarioslos paréntesis.
Cuando se especifica el valor 1 para las sentencias de control, y ademásse emplean procedimientos, los parámetros variables son sustituidos porlos valores reales, y el resultado se registra en el log del Job.
Ejemplos:
//JMP07 JOB (1,2),'pruebas',MSGLEVEL=(0,0)
//JMP08 JOB ,'pruebas',MSGLEVEL=(,1)
//JMP09 JOB MSGLEVEL=2,ADDRSPC=REAL
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 50/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 50 de 374
Cuando se codifica el valor 1 para el parámetro de sentencias, en la
corriente de control se obtiene la imagen expandida de la cadena, dondecada línea se inicia con :// las fichas codificadas en el fichero submitidoXX las fichas expandidas de procedimientos catalogados++ las fichas expandidas de procedimientos in-streamX/ las llamadas hechas a un procedimieto expandido+/ las llamadas hechas a un procedimiento in-stream
El siguiente ejemplo muestra un fragmento de la salida de un JOB. En else distinguen las siguientes partes:
- LOG del JOB: en esta parte se registra la hora de comienzo de cadaevento.
_ Interpretacion del JCL ejecutado: en el que se ve cómo el JES ha
numerado cada una de las sentencias ejecutables, con independencia de queocupen 1 o mas fichas de la cadena.
- La tercera parte se corresponde con la salida de mensajes devueltos porel sistema.
1 J E S 2 J O B L O G -- S Y S T E M X014.21.48 JOB07054 IRR010I USERID DESJMP IS ASSIGNED TO THIS JO14.21.50 JOB07054 ICH70001I DESJMP LAST ACCESS AT 14:21:41 ON W14.21.50 JOB07054 $HASP373 DESJMPCA STARTED - INIT CK - CLASS K14.21.50 JOB07054 IEF403I DESJMPCA - STARTED - TIME=14.21.5014.21.53 JOB07054 - --TIM14.21.53 JOB07054 -JOBNAME STEPNAME PROCSTEP RC EXCP CPU14.21.53 JOB07054 -DESJMPCA PASO0010 00 35 .0014.21.59 JOB07054 IEF404I DESJMPCA - ENDED - TIME=14.21.5914.21.59 JOB07054 -DESJMPCA ENDED. NAME-JMP-PRU TOT14.21.59 JOB07054 $HASP395 DESJMPCA ENDED
1 //DESJMPCA JOB (30,123),'JMP-PRU',CLASS=K,MSGCLASS=X,// NOTIFY=DESJMP,MSGLEVEL=(1,1)//* - - - - - - - - - - - - - - - - - - - - - - - - - -
2 //PASO0010 EXEC PGM=DESNAT,REGION=3000K,TIME=1400,// PARM='STACK=INT,IM=D,MAXCL=0,A'
3 //STEPLIB DD DSN=JMP.NATURAL.DES,DISP=SHR4 //DDKARTE DD DUMMY5 //DDDRUCK DD SYSOUT=*6 //DDPRINT DD SYSOUT=*...
ICH70001I DESJMP LAST ACCESS AT 14:21:41 ON WEDNESDAY, AUGUST 10IEF236I ALLOC. FOR DESJMPCA PASO0010IGD103I SMS ALLOCATED TO DDNAME STEPLIBIEF237I DMY ALLOCATED TO DDKARTEIEF237I JES2 ALLOCATED TO DDDRUCKIEF237I JES2 ALLOCATED TO DDPRINT
...
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 51/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 51 de 374
El siguiente ejemplo muestra la salida proporcionada por el mismo JOBpero codificando el parámetro MSGLEVEL tal y como se especifica en laficha JOB que aparece en la sección de interpretación del JCL.
1 J E S 2 J O B L O G -- S Y S T E M X014.21.48 JOB07054 IRR010I USERID DESJMP IS ASSIGNED TO THIS JO14.21.50 JOB07054 ICH70001I DESJMP LAST ACCESS AT 14:21:41 ON W14.21.50 JOB07054 $HASP373 DESJMPCA STARTED - INIT CK - CLASS K14.21.50 JOB07054 IEF403I DESJMPCA - STARTED - TIME=14.21.5014.21.53 JOB07054 - --TIM14.21.53 JOB07054 -JOBNAME STEPNAME PROCSTEP RC EXCP CPU14.21.53 JOB07054 -DESJMPCA PASO0010 00 35 .0014.21.59 JOB07054 IEF404I DESJMPCA - ENDED - TIME=14.21.59
14.21.59 JOB07054 -DESJMPCA ENDED. NAME-JMP-PRU TOT14.21.59 JOB07054 $HASP395 DESJMPCA ENDED
1 //DESJMPCA JOB (30,123),'JMP-PRU',CLASS=K,MSGCLASS=X,// NOTIFY=DESJMP,MSGLEVEL=(0,0)//* - - - - - - - - - - - - - - - - - - - - - - - - - -
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 52/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 52 de 374
2.4.8 NOTIFY
Parámetro de palabra clave
Este parámetro especifica el identificador del usuario de TSO al que elsistema enviara un mensaje cuando finalice el Job.
La codificación de este parámetro se ajusta al siguiente formato:
NOTIFY=identificador_usuario
El identificador del usuario se corresponde con la identificación que seda al sistema cuando se hace LOGON para iniciar una sesion de TSO.
Ejemplo
//JMP10 JOB (123,456),'JMP-PRU',CLASS=X,// MSGLEVEL=(1,1),NOTIFY=T976614
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 53/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 53 de 374
2.4.9 PERFORM
Parámetro de palabra clave
Este parámetro especifica el grupo de rendimiento o PERFORMance que seasigna al JOB.
La codificación de este parámetro se ajusta al siguiente formato:
PERFORM=n
donde n es un numero comprendido entre 1 y 255
Normalmente a mayor numeración, la prioridad aumenta. No obstante, ladefinición de este parámetro depende de la instalación.
Ejemplo//JMP11 JOB (123,456),'JMP-PRU',CLASS=X,// MSGLEVEL=(1,1),NOTIFY=T976614,// PERFORM=12
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 54/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 54 de 374
2.4.10 REGION
Parámetro de palabra clave
Este parámetro especifica la cantidad de memoria que se asigna al JOB. Noobstante esta memoria depende del valor especificado con el parámetroADDRSPC, ya que si se ha especificado:
=REAL este parámetro especifica la cantidad de memoria real que seasigna a este JOB.
=VIRT este parámetro limita la cantidad de memoria virtual que sepuede tomar cuando se haga una GETMAIN variable. Por lo tantoespecifica el máximo tamaño de memoria virtual que se podrátomar en el citado GETMAIN.
La codificación de este parámetro se ajusta al siguiente formato:
REGION=nKREGION=mM
donde n es el numero de Kb que representa el tamaño asignado o limitado,y m es el numero de Mb que representa el tamaño asignado o limitado.
Ejemplo
//JMP11 JOB (123,456),'JMP-PRU',CLASS=X,// MSGLEVEL=(1,1),NOTIFY=T976614,// PERFORM=12,REGION=32M
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 55/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 55 de 374
2.4.11 RESTART
Parámetro de palabra clave
Este parámetro especifica el paso desde el que se desea rearrancar elJOB.
Normalmente, este parámetro se utiliza para rearrancar un JOB desde elpaso que termino mal, ya que los primeros pasos se ejecutaroncorrectamente.
La codificación de este parámetro se ajusta al siguiente formato:
RESTART=*RESTART=nombre_paso
RESTART=nombre_paso.nombre_proc
donde
* indica que el JOB se rearranque desde el primer paso.
nombre_paso especifica el nombre del paso desde el que se desearearrancar.
//XXXXXXND JOB (123,DES),'JMP-PRU',CLASS=T,MSGCLASS=X,// NOTIFY=XXXXXX,MSGLEVEL=(1,1),RESTART=COPIAR01
Nombre_paso.nombre_proc Este formato se usa cuando se desea rearrancardesde un paso que invoca a un procedimiento.
//XXXXXXND JOB (123,DES),'JMP-PRU',CLASS=T,MSGCLASS=X,// NOTIFY=XXXXXX,MSGLEVEL=(1,1),RESTART=NATURA11.NATDES
//* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//NATDES PROC... procedimiento in-stream// PEND//* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//NATURA01 EXEC NATDES//CMWKF01 DD DSN=DESJMP.FTP.J180B01,...//COPIAR01 EXEC PGM=IEBGENER
//SYSUT1 DD DSN=DESJMP.FTP.J180B01...//NATURA11 EXEC NATDES...
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 56/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 56 de 374
2.4.12 TIME
Parámetro de palabra clave
Este parámetro especifica el máximo tiempo que un JOB puede estar usandola CPU. Es de resaltar que el tiempo que se especifique no es tiempo realde ejecución, sino tiempo de CPU.
La diferencia entre ambos tiempos estriba en que la CPU no tienededicación exclusiva a un trabajo, y por lo tanto, al repartirse unsegundo de CPU entre muchos trabajos, a cada trabajo le corresponderápara 1 segundo real x milisegundos de CPU.
La codificación de este parámetro se ajusta al siguiente formato:
TIME=([minutos],[segundos])
donde
minutos especifica el numero de minutos máximo de CPU que utilizara elJOB. Su valor debe estar comprendido en el rango 1-1439
segundos especifica el numero de segundos máximo de CPU que utilizarael JOB. Su valor debe estar comprendido en el rango 0-59
Un caso particular es aquel en el que se especifica TIME=1439 ya que estees el numero de minutos de un día. En este caso, lo que se estaríahaciendo es no poniendo limite para el uso de la CPU por parte de esetrabajo.
El siguiente ejemplo muestra cómo limitar el tiempo de CPU a 5 minutos y30 segundos
//JMP14 JOB (123,456),'JMP-PRU',CLASS=X,// MSGLEVEL=(1,1),NOTIFY=T976614,// RESTART=PASO2,TIME=(5,30)...
Y este otro, le limita a 5 minutos
//JMP15 JOB (123,'JMP'),CLASS=Y,NOTIFY=TEST87,// RESTART=PASO3.NATURALP,TIME=5
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 57/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 57 de 374
2.4.13 TYPRUN
Este parámetro especifica al JES el tratamiento que debe dar al JOB.
En el caso de que no se especifique este parámetro el trabajo pasa aejecución inmediatamente.
La codificación de este parámetro se ajusta al siguiente formato:
TYPRUN=valor
donde los valores posibles son:
HOLD este valor especifica que el trabajo se coloque en la cola deentrada pero para no ejecutarse hasta que no se libere
manualmente por el operador, lo cual se hace ejecutando elcomando de línea 'A' en el panel de SDF correspondiente a lascolas de entrada.
SCAN este valor especifica al sistema que no se desea ejecutar elJOB, solo se desea chequear la sintaxis de la corriente decontrol.
COPY este valor especifica al sistema que no se desea ejecutar elJOB, sino simplemente listar el JOB, por lo cual aparecerá enla cola de salida en la clase indicada en MSGCLASS.
Ejemplo
//JMP15 JOB (123,456),'JMP-PRU',CLASS=X,// MSGLEVEL=(1,1),NOTIFY=T976614,// RESTART=PASO2,TYPRUN=SCAN
En este caso, solo se chequea la sintaxis del JCL, no validasi existen los ficheros o datasets especificados en lasdistintas fichas DD de cada paso.
En el siguiente ejemplo, el JOB se interpreta y pasa a la colade entrada, pero no se ejecuta hasta que no sea liberado.
//JMP16 JOB (123,'JMP'),CLASS=Y,NOTIFY=TEST87,// TYPRUN=HOLD
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 58/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 58 de 374
2.5 Sentencia EXEC
Esta sentencia se utiliza para especificar que se desea ejecutar unprograma, un procedimiento catalogado o un procedimiento in-stream.
Como se dijo en la introducción de este tema, un JOB o cadena se compone deun conjunto de pasos. Y cada paso se encuentra identificado por estasentencia.
Un paso como se ha dicho, sirve para ejecutar un programa, o para invocar unprocedimiento, pero también los procedimientos constan de pasos, los cualessolo pueden ejecutar programas. En este caso, estos pasos se ejecutarantantas veces como sea llamado el procedimiento, asignando los valores quecorrespondan a las variables definidas.
Al igual que la ficha JOB, esta sentencia tiene parámetros posicionales y depalabra clave, pero, a diferencia de aquella, los parámetros posicionalesque tiene esta sentencia son algo especiales, ya que son excluyentes entresi, y solo sirven para especificar si se va e ejecutar un procedimiento o unprograma.
Por otra parte, como siguen el método general, deben especificarse antes queel resto de parámetros de palabra clave. Concretamente, cualquiera de losdos que se codifique, deberá ser el primero, y además siempre deberácodificarse uno de ellos.
Los parámetros citados son:
- PGM=programa- PROC=procedimiento
Por defecto el sistema asume PROC.
Los parámetros de palabra clave tienen idéntica sintaxis tanto si sonparámetros de un programa o si actúan como parámetros de un procedimiento.
La diferencia entre ambos, estriba en que en el caso de acompañar alparámetro PGM , los parámetros especificados son aplicables al programa quese desea ejecutar, mientras que si el parámetro al que acompañan es el PROC,los parámetros especificados sustituyen a los parámetros que por defecto sehayan definido en el procedimiento.
Como ejemplo de esta diferencia, se puede examinar el que acompaña alparámetro de palabra clave PARM.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 59/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 59 de 374
2.5.1 PGM
Este parámetro posicional, debe ser el primero de la ficha EXEC.
Sirve para especificar el nombre del programa que queremos ejecutar.Dicho programa deberá ser miembro de:- una librería alocada de forma general por el sistema,- o de una librería particular (JOBLIB) que alocada para el JOB- o de una librería particular (STEPLIB) alocada para la ejecución deeste paso
La codificación de este parámetro se ajusta al siguiente formato:
PGM=nombre_programa
Ejemplos //JMP20 JOB ...//JOBLIB DD DSN=......//PASO1 EXEC PGM=PROGRAM1//STEPLIB DD DSN=......//PASO2 EXEC PGM=PROGRAM2...
En este ejemplo, PROGRAM1 será buscado como miembro de la libreríaasociada a la DDname STEPLIB, y en el caso de no encontrarle le buscaraen las librerías generales del sistema.
En el PASO2, el sistema buscara PROGRAM2 en la librería asociada a laDDname JOBLIB, y en el caso de no encontrarle, le buscara en laslibrerías generales del sistema, entre las que suele estar SYS1.LINKLIB
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 60/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 60 de 374
2.5.2 PROC
Este parámetro posicional, ocupa también la primera posición de lasentencia EXEC.
Sirve para especificar el nombre del procedimiento que se desea ejecutar.Este procedimiento puede estar incluido en el propio JOB, en cuyo caso ledenominaríamos 'in-stream' o puede ser un procedimiento catalogado, esdecir, el nombre que especifiquemos debe ser el nombre de un miembro de:- una de las librerías de procedimientos alocadas por el sistema,- una librería particular, alocada a nivel de JOB (JOBCAT)- una librería particular, alocada a nivel de paso (STEPCAT).
En el caso de ser un procedimiento in-stream este debe estar definido alprincipio del JOB.
La codificación de este parámetro se ajusta al siguiente formato:
PROC=nombre_procedimiento
Ejemplos //JMP21 JOB ......//PASO2 EXEC PROC=XNATURAL//STEPCAT DD DSN=DESJMP.PROCS,DISP=SHR...
En este ejemplo, se ejecuta el procedimiento catalogado XNATURAL, siendoeste además, el nombre de un miembro de la librería DESJMP.PROCS
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 61/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 61 de 374
2.5.3 ACCT
Parámetro de palabra clave
Este parámetro sirve para contabilizar el tiempo de ejecución del paso,debiéndose ajustar a las especificaciones de la instalación.
En el caso de que hubiera que codificar subparametros, el valor de esteparámetro ira delimitado por paréntesis, y los subparametros separados enel interior por comas.
Y si algún parámetro contuviera apóstrofes (') o ampersands (&) secodificaran dobles, si bien serán considerados por el sistema comosi fueran sencillos.
La longitud total máxima de este parámetro es de 142 bytes.
Su codificación al ser de palabra clave, se ajusta al siguiente formato:
ACCT[.nom_paso_proc]=valor
Donde VALOR sigue las reglas dadas en la ficha JOB con la informacion decontabilidad.
Ejemplo:
01 //JMP11 JOB (123,456),'JMP-PRU',CLASS=X,02 // MSGLEVEL=(1,1),NOTIFY=T97661403 //PROCESO PROC04 //PASO@0 EXEC ...05 ...06 //PASO@1 EXEC ...07 ...08 // PEND09 //* ------------------ fin procedimiento10 //PASO1 EXEC PGM=PROGRAM1,ACCT=13511 ...12 //PASO2 EXEC PGM=PROGRAM2,ACCT=(123,567)13 ...14 //PASO3 EXEC PROC=PROCESO,ACCT=(123,999)15 ...16 //PASO4 EXEC PROCESO,ACCT.PASO@1=(123,555)
...
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 62/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 62 de 374
donde, la línea :
10 Determina la informacion contable para PASO1
12 En este caso la informacion contable tiene subparametros.
14 asigna informacion contable para todos los pasos delprocedimiento PROCESO.
16 Asigna informacion contable al PASO@1 del procedimiento. Elresto de los pasos se contabiliza donde indique la informacioncontable de la ficha JOB.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 63/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 63 de 374
2.5.4 ADDRSPC
Parámetro de palabra clave
Este parámetro especifica cómo se ha de ejecutar el PASO en el que se haespecificado.
Su codificación al ser de palabra clave, se ajusta al siguiente formato:
ADDRSPC[.nom_paso_proc]=valor
donde el valor puede ser : - VIRT- REAL
Por defecto asume VIRT a no ser que se haya especificado a nivel de JOB.
Como ya se dijo en la explicación de la sentencia JOB, la diferenciaentre ambos valores estriba en el hecho de que haya o no paginación.
En el caso de que se especifique este parámetro a nivel de JOB, y a nivelde EXEC, solo se tendrá en cuenta lo especificado a nivel de JOB,ignorándose los especificados a nivel de paso. Por tanto cuando se quieraejecutar unos pasos en memoria real y otros en memoria virtual deberáespecificarse este parámetro solo a nivel de EXEC.
Ejemplo
01 //JMP12 JOB (123,456),'JMP-PRU',CLASS=X,02 // MSGLEVEL=(1,1),NOTIFY=T97661403 //PROCESO PROC04 //PASO@0 EXEC ...05 ...06 //PASO@1 EXEC ...07 ...08 // PEND09 //* ------------------ fin procedimiento10 //PASO1 EXEC PGM=PROGRAM1,ADDRSPC=REAL11 ...12 //PASO2 EXEC PGM=PROGRAM2,ADDRSPC=VIRT13 ...14 //PASO3 EXEC PROC=PROCESO,ADDRSPC=VIRT15 ...
16 //PASO4 EXEC PROCESO,ADDRSPC.PASO@1=REAL...
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 64/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 64 de 374
donde, la línea :
10 Determina que PASO1 se ejecute en memoria REAL.
12 Determina que PASO2 se ejecute en memoria VIRTual.
14 Determina que todos los pasos del procedimiento se ejecuten enmemoria VIRTual.
16 Determina que PASO@1 del procedimiento se ejecute en memoriaREAL.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 65/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 65 de 374
2.5.5 COND
Parámetro de palabra clave
Este parámetro especifica la condición que de forma general deben cumplirlos códigos de retorno de los distintos pasos del JOB previos para que seejecute el paso en el que se encuentra codificado.
Como ya se vio a nivel de JOB, la codificación de este parámetro seajusta al siguiente formato:
COND[.nom_p_p]=((cod,op[,n_p_p]),(c,o[n])...EVEN)COND[.nom_p_p]=((cod,op[,n_p_p]),(c,o[n])...ONLY)
siendo nom_p_p: el nombre del paso del procedimiento
y donde
cod es un numero decimal de 0 a 4095, y representa el valorcon el que se debe comparar el código de retorno de lospasos.
op Especifica como debe ser el código de retorno para quese ejecute el paso.Los valores posibles de este campo son:
GT Mayor que (greater than)GE Mayor o igual (greater equal)LT Menor que (less than)LE Menor o igual (Less equal)EQ Igual (equal)NE No igual (Not equal)
EVEN (incluso)especifica que este paso se ha de ejecutar aun cuandoalgún paso anterior haya terminado anormalmente.
ONLY (solo)especifica que este paso solo se ejecuta si algún pasoanterior se ha terminado anormalmente.
Se puede especificar hasta 8 condiciones distintas, y solo seespecificaran los paréntesis internos si se incluye mas de una condición.
En este caso las distintas condiciones funcionan como la operación lógicaOR.
Si se especifica el parámetro COND a nivel de JOB y a nivel de EXEC, elespecificado a nivel de paso tiene prioridad sobre el parámetro CONDespecificado a nivel de JOB.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 66/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 66 de 374
Ejemplos
1 //PASO07 EXEC PROCESO1,COND=(0,NE)2 //PASO22 EXEC PROGRAMA,COND=((4,EQ,PASO01),(4,EQ,PASO02))3 //CARGAA4 EXEC PGM=IEFBR14,COND=(4,EQ,PASO04),4 //CARGAB5 EXEC PROCESO4,COND=(7,LT),5 //COPIDO1 EXEC PGM=IEBGENER,COND=EVEN
donde:
1 se ejecuta PROCESO1 si todos los pasos anteriores han devuelto uncódigo de retorno distinto de 0.
2 Se ejecuta PROGRAMA si el código devuelto por PASO01 Y PASO02 ha sido4.
3 Se ejecuta el programa IEFBR14 si el programa ejecutado en el pasoPASO04 devolvio un código de retorno igual a 4.
4 Se ejecuta PROCESO4 si todos los pasos anteriores han devuelto uncódigo de retorno menor que 7.
5 Se ejecuta el programa IEBGENER siempre
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 67/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 67 de 374
2.5.6 PARM
Parámetro de palabra clave
Este parámetro sirve para pasar datos a los programas que se ejecutan.
En el caso de un programa COBOL, estos parámetros son recogidos a travésde la LINKAGE SECTION.
La longitud máxima de este area de parámetros es de 100 caracteres.
La codificación de este parámetro se ajusta al siguiente formato:
PARM=valor
donde:
valor Representa la informacion que se pasa al programa. En el caso deque este formada por mas de una expresión, estas irán separadaspor comas, las cuales pasan al programa, y todo el conjunto debeir encerrado entre paréntesis o apóstrofes, los cuales no pasanal programa.
Ejemplos
El siguiente paso ejecuta el programa de utilidad SORT, al cual se lepasa el parámetro ABEND
//*******************************************************************//* ELIMINAR REFERENCIAS DUPLICADAS//*******************************************************************//SORT00 EXEC PGM=SORT,PARM='ABEND'//*//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(10,50))//SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,(10,50))//SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,(10,50))//SYSPRINT DD SYSOUT=*//SYSOUT DD SYSOUT=*//SYSUDUMP DD DUMMY//SORTIN DD DSN=DESJMP.ENTRADA,DISP=OLD//SORTOUT DD DSN=DESJMP.SALIDA,DISP=(OLD,CATLG,KEEP),// UNIT=SYSDA,SPACE=(CYL,(1,1),RLSE),
// DCB=*.SORTIN//SYSIN DD *SORT FORMAT=CH,FIELDS=(1,19,A)SUM FIELDS=NONE
/*//*******************************************************************
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 68/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 68 de 374
El siguiente es un JCL genérico que sirve para buscar la cadena
'CCCCCCCC' entre los miembros de la librería especificada por LLLLLLLL
//DESJMPBT JOB (123,DES),'JMP-PRU',CLASS=T,MSGCLASS=X,// NOTIFY=DESJMP,MSGLEVEL=(1,1)//*****************************************************************//* BUSCAR CADENA EN DIRECTORIO//*****************************************************************//BUSCAR EXEC PGM=ISRSUPC,PARM=(SRCHCMP,'ANYC')//NEWDD DD DISP=SHR,DSN=LLLLLLLL//OUTDD DD SYSOUT=X//SYSIN DD *SRCHFOR 'CCCCCCCC'
/*
En este caso, el programa ISRSUPC recibe dos parámetros, los que sepasan como valor del parámetro PARM
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 69/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 69 de 374
El siguiente ejemplo muestra un esqueleto de JCL para localizar el
&MODULO en las distintas librerías de la Base 10.
//DESJMPSM JOB (123,DES),'JMP-PRU',CLASS=Q,MSGCLASS=X,// NOTIFY=DESJMP,MSGLEVEL=(0,0)//* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//* BUSCAR ALGUN OBJETO MEDIANTE SYSMAIN//* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//*******************************************************************//* PROCEDIMIENTO XNATURAL//*******************************************************************//XNATURAL PROC BPID=0//PASO1 EXEC PGM=DESNATB,// PARM='INTENS=1,MT=0,FSIZE=64,ESIZE=64,BPID=&BPID'//STEPLIB DD DSN=PRU.NATURAL.PRO.LOAD,DISP=SHR
//DDKARTE DD DUMMY//DDDRUCK DD SYSOUT=*//DDPRINT DD SYSOUT=*//CMPRINT DD SYSOUT=*//SYSOUT DD SYSOUT=*//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(1,01))//SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,(1,01))//SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,(1,01))//SORTWK04 DD UNIT=SYSDA,SPACE=(CYL,(1,01))//SORTWK05 DD UNIT=SYSDA,SPACE=(CYL,(1,01))//SORTWK06 DD UNIT=SYSDA,SPACE=(CYL,(1,01))//DDCARD DD DSN=PRU.PRO.OPTION(RUNUSERM),DISP=SHR// DD DSN=PRU.PRO.OPTION(RUNTIME),DISP=SHR// PEND//*------------------------------------------------------------//SYSMAIN EXEC XNATURAL,REGION=2048K,TIME=1400,DPRTY=(13,9),// DPID=10//DDPRINT DD SYSOUT=*//CMPRINT DD SYSOUT=*//CMSYNIN DD *%*LIBRERIA/USUARIO/PASSWORDSYSMAIN FIND ALL MODULO IN * where DBID 10 FNR 9FIN
/*
Cabe resaltar en este ejemplo que los parámetros que se envían alprocedimiento XNATURAL sirven para sustituir los valores declarados pordefecto en el procedimiento in-stream XNATURAL, concretamente se envíacomo parámetro la variable BPID
el %* es un parámetro que especifica que no se liste en el LOG el nombrede la librería a la que se accede, el nombre del usuario, ni la passwordque se especifique.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 70/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 70 de 374
2.5.7 REGION
Parámetro de palabra clave
Como ya se vio al hablar del JOB, este parámetro tiene distintosignificado según se haya especificado en el parámetro ADDRSPC el valorREAL o el valor VIRT.
Si se ha especificado ADDRSPC=REAL, el tamaño definido en el parámetroREGION indica el tamaño de la memoria real que se planifica para laejecución del paso.
Si se ha especificado ADDRSPC=VIRT, el tamaño definido en el parámetroREGION indica el máximo tamaño de memoria virtual que se puede admitir enlas GETMAIN que se ejecuten en la ejecución del paso.
Al igual que en los parámetros anteriores, si se especifico un parámetroREGION a nivel de JOB se ignoran los especificados a nivel de EXEC.
La codificación de este parámetro se ajusta al siguiente formato:
REGION=nREGION=nKREGION=mM
donde n es el numero de octetos, de Kb o de Mb que representa el tamañoasignado o limitado.
Ejemplo
//PASO0010 EXEC PGM=NBATBASE,REGION=3000K,// PARM='IM=D,MADIO=0,MT=0,INTENS=1'
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 71/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 71 de 374
2.5.8 TIME
Parámetro de palabra clave
Este parámetro expresa el tiempo máximo que un paso del Job puede haceruso de la CPU. En el caso de que un paso alcanzara el valor especificadoel paso terminaría su ejecución.
A diferencia de los parámetros anteriores, si se especifico un parámetroTIME a nivel de JOB, y otro a nivel de EXEC, los dos tienen validez, perocada uno para su entorno. Es decir, el especificado a nivel de JOB limitael tiempo total del JOB, y el especificado a nivel de paso limita eltiempo para ese EXEC concreto. Si la suma de los tiempos de ejecución delos distintos pasos superara el tiempo especificado en el JOB, esteterminaría anormalmente.
La codificación de este parámetro se ajusta al siguiente formato:
TIME=([minutos],[segundos])
donde minutos puede tomar los valores de 1 a 1440segundos puede tomar los valores de 0 a 59
En el caso de que no se especifique el subparametro SEGUNDOS, no esnecesario especificar los paréntesis.
Cuando se especifica TIME=1440 , es decir 24 horas, se esta indicando queno hay limite para el uso de la CPU en ese paso.
Ejemplo 1
//JMP16 JOB (123,456),'JMP-PRU',CLASS=X,// MSGLEVEL=(1,1),TIME=5//PROCESO PROC//PASO00 EXEC DESNAT...//PASO01 EXEC PGM=PPP0,TIME=(1,30)...// PEND//* ------------------ fin procedimiento//PASO1 EXEC PGM=PROGRAM1,TIME=(,30)...
//PASO2 EXEC PGM=PROGRAM2,TIME=3...
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 72/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 72 de 374
2.6 Sentencia DD : Definición de datos
Esta sentencia se utiliza para especificar al sistema los recursos que seconsideran necesarios para ejecutar el programa indicado en la sentenciaEXEC.
En cada paso deben especificarse tantas sentencias DD como ficheros senecesiten, ya que estas fichas establecen la relación entre el nombreutilizado en el programa y el nombre del Dataset físico que soporta losdatos. En consecuencia no pueden existir varias sentencias DD con el mismonombre para un mismo paso.
A diferencia de las sentencias anteriores, esta sentencia, lógicamente, solopuede definirse a nivel de paso.
En el caso de que un fichero lógico se compusiera de varios ficherosfísicos, se especificara solo la primera DD con el nombre lógico asignado ala Ddname y el DSN del primer fichero físico. A continuación seespecificaran tantas sentencias DD sin nombre como sean necesarias,especificando en cada una de ellas el DSN de cada uno de los ficherosfísicos. En este caso se dice que los ficheros definidos son una EXTENSIONdel primer fichero especificado, y que ambas sentencias DD estánconcatenadas.
Ejemplo 1
//PASO00 EXEC PGM=IEBGENER//* ----------- fichero de entrada//SYSUT1 DD DSN=ALIAS.JMP.FICHERO1,DISP=SHR// DD DSN=ALIAS.JMP.FICHERO2,DISP=SHR//* ----------- fichero de salida//SYSUT2 DD DSN=ALIAS.JMP.FICHERO3,DISP=OLD//* ----------- otros ficheros necesarios//SYSIN DD DUMMY
En este caso se usa la utilidad de IEBGENER para copiar los ficherosespecificados en la Ddname: SYSUT1 , obteniendo el fichero de salidaespecificado en la Ddname: SYSUT2.
La Ddname SYSIN es el fichero de entrada de comandos, y debe definirseobligatoriamente ya que es un fichero de entrada de datos, y por lo tantonecesario para la ejecución del programa IEBGENER, aunque no contenga
informacion, como es el caso. (ver utilidad IEBGENER)Al igual que las dos sentencias vistas anteriormente, esta sentencia tambiéntiene parámetros posicionales y de palabra clave. Son los siguientes:
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 73/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 73 de 374
2.6.1 * (asterisco)
Parámetro Posicional. Si se usa, debe ser el primero.
Cuando la sentencia DD tiene como parámetro un * esta expresando que losdatos asociados a la DDname especificada vienen en las siguientes fichasdel JCL.
Por omisión el final del fichero definido de esta forma, viene definidopor la secuencia de caracteres "/*" situada en las columnas 1 y 2. Noobstante, las siguientes secuencias de caracteres también especifican elfin del fichero:- Sentencia vacía //- EOF (end of File)- Delimitador definido previamente como parámetro. (ver parámetro DLM)
Este parámetro puede ir acompañado del parámetro DCB en el que seespecifiquen los subparametros BLKSIZE, BUFNO, donde:
BLKSIZE especifica el tamaño del bloque en bytesBUFNO especifica el numero de buffers que debe mantener
Existe una restricción en el uso de esta sentencia: No puede usarse lasentencia DD con el parámetro * dentro de un procedimiento, ya sea InStream o catalogado.
Ejemplo //JMP15 JOB (123,456),'JMP-PRU',CLASS=X,// MSGLEVEL=(1,1),NOTIFY=T976614//**********************************//PROCESO PROC//PASO00 EXEC ......//PASO01 EXEC ......// PEND//**********************************//PASO1 EXEC PGM=PROGRAM1,ACCT=135//ENTRADA DD *19941231/*//*---------------------------------//PASO2 EXEC PROCESO//PASO00.ENTRADA DD *
P94-A8.../*//*---------------------------------//PASO3 EXEC PGM=PROCESO//PASO00.ENTRADA DD *,DCB=(BLKSIZE=80,BUFNO=5)P01-XX
...//
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 74/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 74 de 374
2.6.2 DATA
Parámetro Posicional. Si se usa debe ser el primero.
Este parámetro es idéntico al anterior, con la salvedad de que noconsidera la secuencia // en las columnas 1 y 2 como fin de JOB y enconsecuencia fin de fichero.
Se usa normalmente cuando los datos que siguen a este parámetro son lassentencias de control de otro JOB.
La restricción de este parámetro es que los datos no pueden contener unasentencia DD DATA.
Tampoco puede aparecer dentro de un procedimiento. En caso de
necesitarlo, se añadirá este fichero como dummy en el procedimiento, y sereferenciara la DDname en el paso que invoca al procedimiento.
Ejemplo
//DESJMPCA JOB (44,123),'DESARROLLO',CLASS=C,MSGCLASS=X,// NOTIFY=DESJMP,MSGLEVEL=(0,1)//PASO0030 EXEC PGM=IEBGENER,COND=(0,LT)//SYSUT2 DD SYSOUT=(A,INTRDR)//SYSPRINT DD SYSOUT=*//SYSIN DD DUMMY//SYSUT1 DD DATA,DLM=WB//DESJMPCA JOB (55,456),'TEST',CLASS=C,MSGCLASS=X,// NOTIFY=DESJMP,MSGLEVEL=(0,1)//********************************************************************//* FUSIONAR LOS REGISTROS 01 Y 11 EN UN UNICO FICHERO **//* EN LOS CASOS EN QUE HAYA 01 Y 11 DEJAR UNO SOLO CON LA SUMA: 1B **//********************************************************************//PASO03 EXEC TSORT//SORTIN DD DSN=DESJMP.WSALOPER.PRO.WORK01S,DISP=(OLD,DELETE,KEEP)// DD DSN=DESJMP.WSALOPER.PRO.WORK11S,DISP=(OLD,DELETE,KEEP)//SORTOUT DD DSN=DESJMP.WSALOPER.PRO.WORK99,// DISP=(NEW,CATLG,DELETE),// UNIT=(ACL1,,DEFER),VOL=(,,,30),LABEL=(1,SL),// DATACLAS=DFBXP,LRECL=52//SYSIN DD *
SORT FORMAT=CH,FIELDS=(16,19,A)
SUM FIELDS=(14,2,ZD)/*WB
Este ejemplo muestra como se puede submitir un Job desde otro JOB, pueslo que hace es copiar los datos que vienen en la misma cadena, acontinuación, sobre la cola "A", de entrada de trabajos (INTRDR).
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 75/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 75 de 374
El objetivo de este JOB es ejecutar en otro entorno, el de TEST
(notar que cambia la informacion de contabilidad de las fichas JOB), elprocedimiento TSORT para clasificar el fichero de entrada fusionandoregistros, tal y como lo describe el comentario del propio JOB.
Si no fuera por el parámetro DATA al encontrarse en la segunda ficha dedatos con la secuencia // daría por cerrado el JOB. De esta forma elprograma IEBGENER toma toda la secuencia como el fichero de entrada y lacopia sobre la salida.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 76/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 76 de 374
2.6.3 DLM
Parámetro de palabra clave.
Este parámetro, nemonico de delimitador, se usa conjuntamente con losparámetros anteriores a fin de definir el delimitador que se usara comofin de fichero.
Evidentemente este parámetro se usa cuando dentro del fichero de datosque siguen a la sentencia DD figura la secuencia /* formando parte delos datos, y por lo tanto no puede interpretarse como fin de fichero.
Cuando el delimitador definido contiene caracteres especiales, debe irencerrado entre apóstrofes.
Ejemplo
//PASO1 EXEC PGM=IEBGENER//SYSUT2 DD SYSOUT=(A,INTRDR)//SYSDUMP DD DUMMY//SYSUT1 DD *,DLM='$$'//DESJMP01 JOB ......$$
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 77/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 77 de 374
2.6.4 DUMMY
Parámetro posicional
Este parámetro define un fichero ficticio o fantasma, ya que estableceuna relación entre una ddname y nada. De esta forma, si su definición seconsiderara obligatoria para la ejecución del programa, estaría definido,aunque realmente no se ha definido físicamente. Cuando quieran leerse losdatos asociados a este fichero daría EOF ya que no tiene datos, y, si porel contrario el programa quisiera escribir en el, iría simulando queescribe los datos, pero realmente no se escribirían.
//PASO1 EXEC PGM=IEBGENER//SYSUT1 DD DSN=DESJMP.JCL(PRUEBA),DISP=SHR//SYSUT2 DD SYSOUT=(A,INTRDR)
//SYSIN DD DUMMY
Caso particular: Cuando en una secuencia de DDs concatenadas existealguna con el parámetro DUMMY, todas las que le sigan se considerarantambién como DUMMY, aunque no sea eso lo que tenga especificado.
Por otra parte, existe un nombre especial de fichero NULLFILE queequivale a este parámetro. Es decir:
//FICHERO DD DSN=NULLFILE equivale a //FICHERO DD DUMMY
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 78/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 78 de 374
2.6.5 SYSOUT ( para ficheros de impresión)
Parámetro de palabra clave
Se utiliza para especificar las características del fichero de salida,sabiendo que este se envía al SPOOL para su impresión.
El formato de este parámetro es:
SYSOUT=*SYSOUT=([clase],[,programa][,formulario])
donde
clase especifica la clase de la cola de salida del spool a laque se envía el fichero para su impresión.
En el caso de que se especifique * la salida se envía ala misma clase a la que se envían los mensajes del JOB, yque se ha definido en la sentencia JOB con el parámetroMSGCLASS.
Programa En el caso de que dicha salida deba ser tratada por algúnprograma para escribirle, ese será el nombre del programaque se especifique aquí.Existen dos nombres especiales:- INTRDR : nemonico de INTernal ReaDeR- STDWTR : nemonico de STandarD WriTeR
Formulario Este es el nombre del formulario que debe usarse paraimprimir la salida.Este nombre estará compuesto por una palabra de hasta 4caracteres.
Cuando se especifica INTRDR lo que le indicamos al sistema es que elfichero de salida sea enviado a la entrada del JES ya que el resultado esun conjunto de fichas de control. Es decir, es un JOB.
Ejemplo //JMP15 JOB (123,456),'DESARROLLO',CLASS=X,// MSGLEVEL=(1,1),NOTIFY=T976614//PASO1 EXEC PGM=IEBGENER//SYSUT2 DD SYSOUT=(A,INTRDR)//SYSUT1 DD DATA,DLM='$$'//JMP15C JOB (999,H,234),'PRODUCCION',CLASS=Q,
// MSGLEVEL=(1,0).../*//PASO2 EXEC PGM=IEBGENER//SYSUT2 DD SYSOUT=*//SYSUT1 DD *.../*$$
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 79/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 79 de 374
Este parámetro puede ir acompañado de los siguientes parámetros:
OUTLIM=n
donde n representa un numero comprendido entre 1 y 16777215. Pordefecto se asume que no hay limite.
Este parámetro limita el numero de registros escritos.
Su formato es :
En el caso de que se alcance el numero especificado, se cede elcontrol a una rutina del SMF para determina lo que se debe hacer. Encaso de que no exista dicha rutina, se termina el JOB.
Ejemplo:
//SALIDA DD SYSOUT=*,DEST=RMT55,OUTLIM=5000
COPIES=n
Este parámetro especifica el numero de copias a imprimir.
HOLD=YES
Este parámetro especifica que la salida quede en HOLD hasta serliberado por el usuario o por el operador.
DEST=dispositivo
Este parámetro especifica la dirección de la impresora de salida. Pordefecto se asume DEST=LOCAL
DCB=(par1[,par2[...]])
Este parámetro no es obligatorio, pero puede especificarse paradefinir atributos complementarios a la salida mediante los siguientes
subparametros:
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 80/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 80 de 374
Para impresora
PRTSP=n especifica el espaciado. Por defecto asume PRTSP=1
RECFM=fc especifica el formato y los caracteres de control,donde:
f Puede tomar los valores:F (fijo) V (variable) U (indeterminado)
c Puede tomar los valores:A : Para usar los caracteres de control ASAM : Para usar los caracteres de control maquina
Para lectora y perforadora
MODE=C especifica que se usen columnas binarias, es decir dosposiciones por carácter, por lo que en este casoBLKSIZE,LRECL y BUFL=160
MODE=E especifica que se usen columnas de EBCDIC (es el valorasumido por defecto).
UCS (Universal Character Set)
Este parámetro especifica el conjunto de caracteres a usar, pues pideal operador la cadena que debe colocar en la impresora.
Solo puede usarse este parámetro en sentencias donde UNIT especifiqueuna impresora.
El formato de este parámetro es el siguiente:
UCS=(código,FOLD,VERIFY)
FCB (Form Control Buffer)
Este parámetro especifica el formato que debe usar la impresora.
El formato de este parámetro es el siguiente:
FCB=(formato[,ajuste])
donde:
formato especifica el formato que debe usar, estando este definidopor un nombre de 4 caracteres alfanuméricos. IBM proporcionade forma standard los siguientes formatos, pero puedendefinirse los que se deseen en la instalación.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 81/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 81 de 374
STD1 y STD6 para 6 líneas por pulgada en 11 (vertical y
apaisado)
STD2 y STD8 para 8 líneas por pulgada en 8.5 (idem)
STD3 para 8 líneas por pulgada (para impresoras3800)
ajuste Puede tomar los siguientes valores:
ALIGN Especifica que el operador chequee que la impresoraesta ajustada antes de imprimir.
VERIFY Este parámetro es parecido al anterior, puesespecifica que el operador verifique que la salida
que se esta imprimiendo es la que se pide.
BURST=Y
Este parámetro especifica que la salida se haga en hojas separadas(BURST=Y) o en papel continuo (BURST=N). Aunque lo normal en lasinstalaciones es tener asignado uno de estos valores a cada una de lascolas de salida,
CHARS=(tabla0[,tabla1[,tabla2[,tabla3]]])
Este parámetro especifica el conjunto de caracteres que se debe usaren la impresión. En el caso de especificarse mas de una tabla se debeespecificar además el parámetro siguiente:
DCB=OPTCB=J
para indicar que el segundo byte de cada línea es un carácter decontrol que especifica la tabla que se debe usar pudiendo tomar losvalores de 0 a 3
MODIFY=(modulo,tabla_n)
Este parámetro especifica el nombre del modulo contenido en lalibrería SYS1.IMAGELIB que se usara para tratar datos o blancos de las
líneas impresas.Tabla_n especifica el numero de tabla a usar, correspondiendo su valorcon el conjunto que se debe usar especificado en el parámetro CHAR.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 82/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 82 de 374
2.6.6 COPIES (salida de impresión)
Parámetro de palabra clave
Este parámetro especifica el numero de copias que se desean imprimir delmismo fichero.
Como es lógico, este parámetro solo puede especificarse en fichas DD queenvían su salida al SPOOL para su posterior impresión.
El formato de este parámetro es:
COPIES=numero
donde NUMERO especifica el numero de copias a realizar. Su valor debeestar comprendido en el rango 1 a 255.
Por defecto asume 1
Ejemplo
//JMP18 JOB (123,456),'DESARROLLO',CLASS=X,// MSGLEVEL=(1,1),NOTIFY=T976614//PASO1 EXEC PGM=IEBGENER//SYSUT2 DD SYSOUT=K,COPIES=5//SYSUT1 DD DSN=DESJMP.JCL(EJEMPLO),DISP=SHR//SYSIN DD DUMMY
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 83/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 83 de 374
2.6.7 DEST ( ficheros de impresión )
Parámetro de palabra clave
Este parámetro especifica la dirección de la impresora por la que sedesea realizar la impresión del fichero.
Este parámetro, como en los anteriores, solo puede especificarse enfichas DDs que envían su salida al SPOOL para su impresión.
El formato de este parámetro es:
DEST=dirección
donde DIRECCION especifica la identificación de la impresora a la que se
envía el fichero a imprimir.
Ejemplo
//JMP18 JOB (123,456),'DESARROLLO',CLASS=X,// MSGLEVEL=(1,1),NOTIFY=T976614//PASO1 EXEC PGM=IEBGENER//SYSUT2 DD SYSOUT=K,COPIES=5,DEST=RMT57//SYSUT1 DD *.../*//PASO2 EXEC PGM=IEBGENER//SYSUT2 DD SYSOUT=K,COPIES=5,DEST=LOCAL//SYSUT1 DD *.../*
Por defecto, en el caso de no especificarse este parámetro, los trabajosquedan asignados a la impresora LOCAL.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 84/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 84 de 374
2.6.8 HOLD (para ficheros de impresión )
Parámetro de palabra clave
Este parámetro especifica que el fichero no se imprima hasta que no sealiberado desde la cola de salida por el operador, cosa que se hace con elcomando de línea 'A' en el panel del SDF correspondiente a los trabajosde salida.
Este parámetro, como en los anteriores, solo puede especificarse enfichas DDs que envían su salida al SPOOL para su impresión.
El formato de este parámetro es:
HOLD=YES/NO
Ejemplo
//JMP18 JOB (123,456),'DESARROLLO',CLASS=X,// MSGLEVEL=(1,1),NOTIFY=T976614//PASO1 EXEC PGM=IEBGENER//SYSUT2 DD SYSOUT=K,COPIES=5,DEST=RMT57,// HOLD=YES//SYSUT1 DD *.../*
En el caso de no especificarse este parámetro, el JES asume por defectoel valor HOLD=NO
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 85/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 85 de 374
2.6.9 FREE (para ficheros de impresión y de datos)
Parámetro de palabra clave.
Este parámetro especifica que el fichero asociado a este parámetro selibere:
- cuando se termine de ejecutar el paso en que se encuentra definido. Esdecir cuando termine de ejecutarse el programa.
- o cuando el programa cierre el fichero, no esperando por tanto a quetermine el paso.
Este parámetro tiene sentido en programas de largo tiempo de ejecución yen ficheros de impresión.
El formato de este parámetro es:
FREE=END/CLOSE
Ejemplo
//JMP18 JOB (123,456),'DESARROLLO',CLASS=X,// MSGLEVEL=(1,1),NOTIFY=T976614
//PASO1 EXEC PGM=BATCHP1//ENTRADA1 DD DSN=DESJMP.JMP.PARAM1,// DISP=SHR,FREE=END//ENTRADA2 DD DSN=DESJMP.JMP.FICHERO,DISP=SHR.../*
En el caso de no especificarse este parámetro, el JES asume por defectoel valor FREE=END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 86/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 86 de 374
2.6.10 DSNAME (DSN)
Parámetro de palabra clave.
Este parámetro especifica el nombre del fichero que contiene o contendrálos datos tratados por el programa que ejecuta el paso donde estadefinida esta DD.
El formato de este parámetro es:
(1) DSN=nombre_fichero(2) DSN=librería(miembro)(3) DSN=nombre_fichero(numero_versión)(4) DSN=nombre_temporal(5) DSN=*.nombre_DD
(6) DSN=*.nombre_paso.nombre_DD(7) DSN=*.nombre_paso.Nombre_paso_proc.nombre_DD(8) DSN=NULLFILE
En cualquiera de los formatos definidos, se puede utilizar tanto lapalabra clave DSN como la palabra clave DSNAME.
El nombre del fichero sigue las reglas generales, es decir, estaráformado por grupos de cualificacion de 1 a 8 caracteres separados porpuntos, no pudiendo sobrepasar todo el conjunto los 44 caracteres. Cadacualificador deberá comenzar por un carácter alfabético (A-Z) o loscaracteres especiales ($,@,=).
Como particularidad figura que el nombre de un fichero en cinta no puedecontener mas de 17 caracteres.
El formato (1) especifica el nombre del fichero secuencial que seutilizara en la ejecución del paso, ya sea de entrada, de salida o deentrada/salida.
//SORTIN DD DSN=DESJMP.SECUENC,DISP=(OLD,DELETE,KEEP)
El formato (2) especifica el nombre del miembro de una librería.
//SORTIN DD DSN=DESJMP.JCL(ENTRADA),DISP=SHR
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 87/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 87 de 374
El formato (3) especifica el numero de versión para los ficheros
generacionales (GDG).
Un fichero generacional es aquel que bajo el mismo nombre mantienediversas versiones, hasta 255. Estas versiones se referncian como:
(0) la ultima,(+1) la próxima,(-1) la anterior.
La longitud máxima del nombre de un fichero GDG es de 35 caracteres.
//** **************************************************************** **//COPIAF01 EXEC PGM=IEBGENER//SYSUT1 DD DSN=DESJMP.HISTORIA(0),DISP=SHR// DD DSN=DESJMP.MVTOS,DISP=(OLD,DELETE,KEEP)//SYSUT2 DD DSN=DESJMP.HISTORIA(+1),
// DISP=(,CATLG,DELETE),// DATACLAS=DFBXP,LRECL=133//SYSIN DD DUMMY//SYSPRINT DD DUMMY//** **************************************************************** **
El formato (4) especifica el nombre de un fichero temporal que seutilizara como continente receptor de informacion para un paso posteriordel mismo JOB.Se entiende por fichero temporal un fichero que se crea en un paso de unJOB y desaparece cuando termina el JOB. La única diferencia con respectoa los ficheros permanentes, estriba en el nombre, que en los temporalesempiezan por & o &&.Los ficheros temporales no admiten cualificadores.
//********************************************************************//PASO1 EXEC PGM=PROGRAMA//CMPRINT DD SYSOUT=W//SALIDA DD DSN=&&BAJAS,// DISP=(NEW,PASS),// SPACE=(TRK,(20,10)),// DCB=(LRECL=64,BLKSIZE=6144,RECFM=FB),// UNIT=SYSDA//********************************************************************
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 88/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 88 de 374
El formato (5) especifica un fichero por referencia, es decir, especifica
el nombre de la ficha DD en la que se encuentra definido el nombre delfichero con el parámetro DSN. El asterisco (*) significa que la ficha DDreferenciada pertenece al mismo paso de la ficha DD en la que se definela referencia.
//********************************************************************//PASO2 EXEC PGM=PROGRAMA//CMPRINT DD SYSOUT=W//ENTRADA1 DD DSN=&&BAJAS,OLD//ENTRADA2 DD DSN=*.ENTRADA1//SALIDA DD DSN=DESJMP.LISTADO,// DISP=(NEW,CATLG),// SPACE=(TRK,(20,10)),// DCB=(LRECL=64,BLKSIZE=6144,RECFM=FB),
// UNIT=SYSDA//********************************************************************
El formato (6) es parecido al anterior, pero en este caso, la ficha DDreferenciada se encuentra en un paso distinto al de la ficha DD quedefine la referencia.
//********************************************************************//PASO3 EXEC PGM=PROGRAMA//SYSPRINT DD SYSOUT=W//SYSUT1 DD DSN=*.PASO2.SALIDA,DISP=SHR//SYSUT2 DD SYSOUT=K,DEST=RMT11//********************************************************************
El formato (7) también es parecido al anterior, pero en este caso, laficha DD referenciada se encuentra en un procedimiento, y por eso sereferencia especificando el nombre del paso que llama al procedimiento, yel nombre del paso dentro del procedimiento, ya que este procedimientopuede tener varios pasos.
El formato (8) es un formato que especifica como nombre del fichero unnombre especial, el nombre NULLFILE, lo cual indica al sistema que no leasigne recursos, pero que le contemple como si existiera. Es decir esenombre define un fichero fantasma.
//FICHERO DD DSN=NULLFILE equivale a //FICHERO DD DUMMY
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 89/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 89 de 374
2.6.11 DDNAME
Parámetro de palabra clave.
Este parámetro referencia el nombre de una DDname del JCL que se deseaejecutar en el que esta definido el nombre o nombres de ficheros que sedesean definir con esta sentencia DD.
El formato de este parámetro es:
DDNAME=*.nombre_DDDDNAME=*.nombre_paso.nombre_DD
En el caso de que no se especificara la DDname referenciada, se asumiriacomo DUMMY el valor de este parámetro.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 90/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 90 de 374
2.6.12 DISP
Parámetro de palabra clave.
Este parámetro especifica la situación o disposición que tiene el ficherocuando se inicia el paso, cuando finaliza bien el paso, y cuando finalizacon error.
El formato de este parámetro es:
DISP=(dis_inicial,disp_fin_normal,disp_fin_anormal)
La disposición inicial puede ser una de las siguientes:
NEW no existe el fichero
OLD El fichero ya existeSHR El fichero es compartidoMOD Los datos se apendizan al fichero existente., Si no se especifica, se asume NEW por defecto.
La disposición en el caso de que el paso finalice normalmente puede seruna de las siguientes:
,DELETE El fichero se borrara,KEEP El fichero se mantendrá,PASS El fichero se utilizara en pasos posteriores del mismo
JOB.,CATLG El fichero se guardara y además se catalogara.,UNCATLG El fichero se guardara, pero se borrara la entrada del
catalogo., En el caso de no especificar ningún parámetro, asume:
- DELETE para estado inicial NEW- KEEP para estado inicial OLD
La disposición en el caso de que el paso finalice anormalmente puede seruna de las siguientes:
,DELETE El fichero se borrara,KEEP El fichero se mantendrá,CATLG El fichero se guardara y además se catalogara.
,UNCATLG El fichero se guardara, pero se borrara la entradadel catalogo.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 91/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 91 de 374
La diferencia entre KEEP y PASS estriba solo en como se codifica la
sentencia DD, ya que si la primera vez que codificamos la DDespecificamos KEEP, al referenciar de nuevo el fichero en un pasoposterior debemos especificar todos los parámetros de ese fichero,mientras que si hubiéramos especificado la primera vez PASS , ya no serianecesario codificar toda esa informacion en los pasos siguientes.
Restricción: En los ficheros temporales no se admite la disposiciónKEEP.
Cuando la DDname referencia un fichero particionado, lo que esteparámetro especifique se aplica al fichero completo, no a un miembroconcreto, incluso si se especifica en el DSN el nombre de un miembro.
En el caso de trabajar con cintas, si se especifica KEEP, el sistema
descargara la cinta cuando termine el paso, mientras que si se especificaPASS no se descarga la cinta.
Ejemplo //JMP20 JOB (123,456),'DESARROLLO',CLASS=X,// MSGLEVEL=(1,1),NOTIFY=T976614//PASO1 EXEC PGM=BATCHP1//ENTRADA1 DD DSN=&&FILE1,DISP=(MOD,PASS)//ENTRADA2 DD DSN=DESJMP.JMP.JCL(EJEMPLO),DISP=SHR.../*
En general, todas las fichas JOBLIB, JOBCAT, STEPLIB, STEPCAT, SYSLIB,SYSLMOD, COBLIB deben llevar obligatoriamente DISP=SHR.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 92/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 92 de 374
2.6.13 SPACE
Parámetro de palabra clave.
Este parámetro especifica el espacio que se desea asignar a un fichero.
El formato de este parámetro es :
SPACE=(unidad,(c_pri[,c_sec][,c_dir]),[,RLSE][modo][,ROUND])
Donde :
UNIDAD Especifica la unidad en la que se mide la asignación derecursos que se solicitan para el fichero. Puede ser:
- TRK : La cantidad especifica numero de pistas.- CYL : La unidad especifica numero de cilindros.- nnnn : donde nnnn representa la longitud de bloque
c_pri Cantidad PrimariaEspecifica el numero de unidades que se asignan inicialmenteal fichero.
c_sec Cantidad SecundariaEspecifica el numero de unidades que se asignaran al ficheroen el caso de que no fuera suficiente la cantidad primariaasignada.El sistema hará hasta 16 extensiones de un mismo fichero encada volumen, dando en cada extensión la cantidad especificadacomo cantidad secundaria.Esto esta establecido así a fin de no reservar espacioinnecesariamente, e ir ampliando el fichero cuando senecesite.
c_dir Este parámetro especifica dos cosas distintas:
- en el caso de que e trate de un fichero particionado:Numero de Bloques de 256 bytes que se dedican comodirectorio del fichero.
- Y, si es un fichero secuencial-indexado:Numero de cilindros que se asignan al area de índices.
RLSE Este parámetro especifica al sistema que cuando se cierre elfichero se libere el espacio que no haya sido utilizado.Para seguir las normas generales de los parámetrosposicionales, en el caso de no especificarse este parámetro,debe escribirse una coma, si es que siguen otros parámetros.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 93/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 93 de 374
modo Este parámetro puede tener los siguientes valores:
CONTIG Con este valor indicamos al sistema que el espacioque se asigne como cantidad primaria debe asignarseen un espacio contiguo del disco.
MXIG Este valor especifica casi lo mismo que el valoranterior, con la diferencia de que en este casoespecificamos al sistema que asigne el espaciocontiguo, si es que dispone de él.
ALX Con este valor, especificamos al sistema que asignepara la cantidad primaria, hasta 5 areas contiguasdel tamaño especificado como cantidad primaria.
Ejemplo
//*===================================================================//P010 EXEC PGM=IDCAMS//SYSPRINT DD SYSOUT=*//I DD DSN=DESJMP.SAP2060.DB1,DISP=(SHR)//O DD DSN=DESJMP.JMP31785.DB1(+1),DISP=(,PASS),// SPACE=(CYL,(25,2),RLSE,,ROUND),// UNIT=(SYSALLDA,01),// VOL=(SER=),// LABEL=(000),// DCB=(MODEL,LRECL=16377,BLKSIZE=16384,RECFM=VB)//SYSIN DD DSN=DESJMP.CONTROL(JMP00000),DISP=(SHR)//*===================================================================
En el siguiente ejemplo el espacio asignado se especifica dando lalongitud del bloque.
// SPACE=(09076,(003140,001046),RLSE,,ROUND),
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 94/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 94 de 374
2.6.14 VOLUME
Parámetro de palabra clave.
Este parámetro especifica el volumen en el que residirá el fichero.También puede usarse la palabra abreviada VOL.
Este parámetro es opcional, ya que el sistema, en el caso de que no seespecifique, hará la asignación del espacio solicitado en cualquiera delos volúmenes que en ese momento se encuentren montados.
El formato de este parámetro es:
VOL=([PRIVATE][,RETAIN][,sec][,cuenta][,ser_ref])
Donde:
PRIVATE especifica que el volumen es un volumen privado, y por tantoeste se asigna como de utilización exclusiva para el paso enel que figura este parámetro.
RETAIN especifica que el volumen en cinta no se desmonte, ya que deno especificar este parámetro, el volumen se desmontara cuandoacabe el paso.
sec especifica la posición del fichero dentro del volumen de cintamontado.
cuenta Numero de volúmenes que necesita un fichero multivolumen, esdecir, aquel fichero que ocupa varias cintas.
ser_ref Este parámetro puede tomar los siguientes formatos:
SER=num_serie Especifica el numero de serie del volumen
REF=nom_fichero Con este formato le indicamos al sistema quese desea asignar para el nuevo fichero elmismo volumen que el que tiene asignado elfichero cuyo nombre especificamos en esteparámetro.
REF=*.nombre_DD Es parecido al anterior, con la diferencia que
en este caso especificamos el fichero medianteel nombre de la DD que le referencia.
En el caso de que se necesite especificar mas de un numero de serie,estos se especificaran separándolos por comas, y encerrándolos entreparéntesis para seguir las normas generales de codificación de parámetrosposicionales.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 95/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 95 de 374
Ejemplos
El siguiente paso de JOB muestra cómo se puede copiar un fichero sobrecinta. En este caso son varios ficheros físicos los que se copian,aunque, al tener DDs concatenadas, son todos considerados como un unicofichero lógico. El fichero de salida puede tener hasta 30 volúmenes ocintas.
//******************************************************//* COPIAR FICHERO DE DISCO A CINTA//*- - - - - - - - - - - - - - - - - - - - - - - - - - -//PASO1 EXEC PGM=IEBGENER//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR//SYSPRINT DD SYSOUT=*//* ----------- FICHERO DE ENTRADA
//SYSUT1 DD DSN=DESJMP.WTZZ0D0X.PRO,DISP=OLD// DD DSN=DESJMP.WTZZ0D0X.PRO@01,DISP=OLD// DD DSN=DESJMP.WTZZ0D0X.PRO@02,DISP=OLD// DD DSN=DESJMP.WTZZ0D0X.PRO@03,DISP=OLD//* ----------- FICHERO DE SALIDA//SYSUT2 DD DSN=DESJMP.WTZZ0D0X.PRO.REPORT11,DISP=(NEW,CATLG,),// UNIT=(ACL1,,DEFER),VOL=(,,,30),LABEL=(1,SL),// DCB=*.SYSUT1//SYSIN DD DUMMY
El siguiente ejemplo ejecuta la utilidad IEBCOPY. Esta utilidad ejecutalo que se le indica en el fichero que contiene los comandos de entrada,identificado por la DDname SYSIN. Lo que se dice a través de esta entradaes que copie la DDname indicada en IN-DD sobre la DDname especificada enOUT-DD. En este caso se especifica que no desmonte el volumen porque,posiblemente, se quiera usar el fichero siguiente.
//*****************************************************//PASO1 EXEC PGM=IEBCOPY//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR//SYSPRINT DD SYSOUT=*//* ----------- FICHERO DE ENTRADA//LIB1 DD DSN=LINKLIB,DISP=(OLD,PASS),UNIT=482,// LABEL=(1,SL),VOL=(,RETAIN,SER=ENE001)//* ----------- FICHERO DE SALIDA//LIB2 DD DSN=DESJMP.SECLOAD,DISP=SHR//SYSIN DD *COPY INDD=LIB1,OUTDD=LIB2
/*//******************************************************
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 96/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 96 de 374
2.6.15 UNIT
Parámetro de palabra clave.
Este parámetro se usa para definir al sistema la unidad física, o tipo deunidad en la que se ubicara el nuevo fichero, ya que si el fichero yaexiste, y esta catalogado, este parámetro es ignorado si se especifica.
El formato de este parámetro es:
UNIT=([parm1][,parm2][,DEFER])
donde:
parm1 es el primer subparametro, y sirve para determinar donde se
ubicara el nuevo fichero, pudiendo especificarse de tres formasdistintas:
- dando la Dirección de la unidad
es decir especificando la dirección lógica de la unidadelegida.
- dando el tipo de la unidad
es decir especificando un nombre conocido por el sistema queagrupa unidades del mismo tipo de dispositivo.Ejemplo: 2314,3330,...
- dando el nombre genérico.
es decir especificando un nombre genérico, que identifica auna serie de dispositivos.Estos nombres, que constan de 1 a 8 caracteres, son definidosen tiempo de generación del sistema, y por tanto dependen decada instalación.Ejemplo:- SYSDA : Dispositivos de acceso directo- ALLSYSDA : Dispositivos de acceso directo- SYSSO : Dispositivos secuenciales- TAPE : Dispositivo en cinta- etc..
parm2 Este subparametro, opcional, puede tomar los siguientes valores:
- cuenta :
especifica el numero de unidades que se necesitan para elfichero.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 97/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 97 de 374
- P :
si se especifica el valor "P" le estamos indicando al sistemaque los volúmenes especificados deben montarse en unidadesdistintas, es decir, en p_aralelo.
DEFER Este subparametro se utiliza para indicarle al sistema que losvolúmenes deben montarse cuando el programa ejecute el open delfichero, no cuando comience la ejecución del paso.
Como particularidad de este parámetro figura el hecho de que es el unicoparámetro necesario de las sentencias DD de los ficheros temporales encinta magnética.
Ejemplo
//PASO1 EXEC PGM=PROG0001//ENTRADA1 DD DSN=FICHERO1,DISP=OLD,UNIT=(2400,,DEFER)//ENTRADA2 DD DSN=FICHERO2,UNIT=123,DISP=OLD//ENTRADA3 DD DSN=FICHERO3,UNIT=SYSDA,VOL=SER=DES92//SALIDA01 DD DSN=DESJMP.JMP,DISP=SHR,UNIT=2400//SALIDA02 DD DSN=&FILE1,UNIT=3330,...//SALIDA03 DD DSN=.../*
En el anterior ejemplo, la sentencia DD:
ENTRADA1 especifica que el FICHERO1 se encuentra ubicado en la unidadde cinta (tipo 2400) pero no se desea que se monte hasta queel programa ejecute el OPEN del fichero.
ENTRADA2 especifica que el FICHERO2 se encuentra ubicado en la unidadque tiene por dirección 123. Este tipo de designacion se usapara ficheros no catalogados.
ENTRADA3 especifica que el FICHERO3 se encuentra en la unidad de discoque tiene por numero de serie DES92
SALIDA01 Define un fichero sobre una unidad del tipo 2400 quecorresponde a cinta magnética.
SALIDA02 Define el fichero temporal sobre un disco del tipo 3330. Comono se especifica VOLUMEN, el sistema elegirá un dispositivo delos que tiene montados, del tipo 3330 y no declarado comoPRIVATE para ubicar en él el nuevo fichero.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 98/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 98 de 374
2.6.16 DCB
Parámetro de palabra clave.
Este parámetro es el que determina el formato interno del registro delfichero que se esta definiendo. Este parámetro solo es obligatorio en elmomento de crear un fichero, por lo que si el fichero tiene DISP=MOD/OLDno es necesario especificarlo.
El formato de este parámetro es:
DCB=(parm1,parm2,...)
donde los distintos subparametros que configuran el parámetro son todosde palabra clave, razón por la que pueden ir en el orden que se desee.
Los parámetros mas usados son:
RECFM especifica el tipo de formato del registro, pudiendo tomar lossiguientes valores:
- U : Indefinido- V : Variable- VB : Bloqueado de longitud variable.- F : Fijo- FB : Fijo bloqueado.- FBA: Fijo Bloqueado con carácter control de carro
LRECL especifica la longitud del registro en bytes.
BLKSIZE especifica el tamaño de bloque o registro físico, expresándoleen numero de bytes.
DSORG Especifica el tipo de organizacion del fichero, pudiendo tomarlos siguientes valores:
- PS : Secuencial- IS : Secuencial indexado.- DA : Organización directa.- PO : Organización particionada.
DEN Especifica el tipo de densidad de grabación, pudiendo tomar los
siguientes valores:2 para 800 bpi (Bits per Inche)3 para 1600 bpi4 para 6250 bpi
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 99/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 99 de 374
Ejemplo
//PASO1 EXEC PGM=PROG0001//ENTRADA1 DD DSN=FICHERO1,DISP=OLD//SALIDA01 DD DSN=DESJMP.JMP.JCL(EJEMPLO),// DISP=SHR,UNIT=2400,// DCB=(LRECL=80,RECFM=FBA,BLKSIZE=23440)
En el anterior ejemplo, la sentencia DD:
SALIDA01 Define un fichero que tiene una longitud de registro de 80Bytes, agrupados en bloques de 293 registros, es decir enbloques de 23440 octetos.El formato del registro es Fijo, bloqueado y se utilizara elprimer octeto del registro como informacion de control para la
impresora.
El siguiente ejemplo muestra 2 DCBs típicas de un fichero en cinta y otroen disco. Solo hay que ajustar los valores del tamaño del bloque enfunción del tamaño del registro, lo cual, dependiendo de lasinstalaciones se suele hacer usando el comando de TSO BLKSIZE, aunque enotras instalaciones se usa SPACE2, o alguno parecido.
//CMWKF04 DD DSN=DESJMP.WRK49406.D22,DISP=(NEW,CATLG,CATLG),// UNIT=(ACL1,,DEFER),VOL=(,,,30),LABEL=(1,SL),// DCB=(RECFM=FB,LRECL=4538,BLKSIZE=18152)//*//SYSUT2 DD DSN=DESJMP.WTZZ0D0X.PRO.XXX,DISP=(NEW,CATLG,),// UNIT=SYSDA,SPACE=(CYL,(4,1),RLSE),// DCB=(LRECL=33,BLKSIZE=23464,RECFM=FB)
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 100/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 100 de 374
2.6.17 DATACLASS
Parámetro de palabra clave.
Este parámetro especifica el nombre de una clase definida por eladministrador del sistema que permite simplifica las labores de alocacionde los nuevos ficheros, siendo ignorado este parámetro en el caso de queya exista el fichero.
Los parámetros estándar que cubre este parámetro son:
- LRECL y RECFM (subparametros de DCB)- SPACE- VOL
El formato de este parámetro es:
DATACLAS=nombre_clase
donde nombre_clase es el nombre de una clase definida por el administradordel sistema que puede tener de 1 a 8 caracteres y que sigue la normageneral de empezar por carácter.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 101/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 101 de 374
2.6.18 LABEL
Parámetro de palabra clave.
Este parámetro especifica el tipo de etiqueta utilizado por eldispositivo sobre el que se encuentra el fichero definido en la sentenciaDD.
El formato de este parámetro es:
LABEL=([secuencia][,tipo][,password][,expiración])
donde :
secuencia Especifica la posición relativa del fichero con respecto alorigen dentro del volumen de cinta.Por omisión se asume el valor 1, es decir es el primero dela cinta.
tipo Especifica el tipo de etiqueta usado. Puede tomar lossiguientes valores:
SL Usa Etiquetas estándar IBMSUL Usa Etiquetas estándar IBM de usuarioAL Usa Etiquetas ANSAUL Usa etiquetas ANS de usuarioNSL No usa etiquetas estándarNL No usa ninguna etiquetaLTM El sistema debe ignorar la marca de cinta de relleno
en la cabecera.BLP El sistema no debe procesar etiquetas de fichero de
cinta.
Por omisión, se asume el valor SL.
password especifica la protección asociada al fichero. Puede tomarlos siguientes valores:
PASSWORD en este caso, el fichero no podrá leerse nimodificarse ni borrarse a menos que se
especifique la clave que le protege.NOPWREAD en este caso, la clave de protección no será
necesaria para leer el fichero, pero si paraactualizarlo o borrarlo.
expiración Especifica la fecha en la que expira el fichero.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 102/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 102 de 374
Ejemplo
//PASO1 EXEC PGM=PROG0001//ENTRADA1 DD DSN=FICHERO1,DISP=OLD//SALIDA01 DD DSN=DESJMP.JMP.JCL(EJEMPLO),// DISP=SHR,UNIT=2400,// DCB=(LRECL=80,RECFM=FBA,BLKSIZE=80),// LABEL=(3,SL),VOL=SER=JMP94
En el anterior ejemplo, la sentencia DD:
SALIDA01 Define el tercer fichero de la cinta montada en la unidad detipo 2400 y cuyo numero de serie del volumen es JMP94.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 103/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 103 de 374
2.7 Sentencia OUTPUT
Esta sentencia esta íntimamente ligada al parámetro OUTPUT de la sentenciaDD, y permite especificar características especiales para cada uno de losarchivos de SYSOUT, pudiéndose incluso usar para enviar un mismo archivo avarias impresoras.
La etiqueta de esta sentencia debe ser única a nivel de JCL
//PASO1 EXEC PGM=PROGRAMA//GOYA OUTPUT DEST=RMT111//BARNA OUTPUT DEST=RMT222//SALIDA DD SYSOUT=A,OUTPUT=(GOYA,BARNA)
Esta sentencia solo es aplicable para MVS/XA y MVS/ESA, y los parámetros que
pueden especificarse son:
BURST Para especificar tipo de papel (separado o continuo)
CHARS Para especificar conjunto o conjuntos de caracteres a usar en laimpresión.
CKPTLNS=líneas
Especifica el máximo numero de líneas que puede contener una páginalógica. Debe estar comprendido en el rango 0-32767.
CKPTPAGE=paginas
Especifica el máximo numero de páginas lógicas que se puedenimprimir. Debe estar comprendido en el rango 0-32767.
CKPTSEC=segundos
Especifica el tiempo de CPU, expresado en segundos, transcurridoentre checkpoints del sysout.
CLASS=clase
Este parámetro especifica la clase de salida, y se debe usar cuandose ha especificado un valor nulo en el parámetro de la fiche DD.
//PASO1 EXEC PGM=PROGRAMA//GOYA OUTPUT DEST=RMT111,CLASS=A//BARNA OUTPUT DEST=RMT222,CLASS=J//SALIDA DD SYSOUT=(,)A,OUTPUT=(*.GOYA,*.BARNA)
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 104/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 104 de 374
2.8 Sentencias DD especiales
Una vez vista la estructura de las fichas DD y los parámetros que la puedenconfigurar, se pasa a estudiar una serie de fichas DD cuyo nombre tienesignificado propio para el sistema, pero que por ser sentencias DD siguenlas reglas generales vistas para estas fichas.
JOBLIB
Esta sentencia especifica la localización dentro del sistema delas librerías en las que se encuentran los programas que sedesean ejecutar en este JOB.
Por defecto cuando un JOB en un paso quiere ejecutar el programa
indicado en la sentencia EXEC, le busca en la libreríaSYS1.LINKLIB.
En consecuencia, esta DD se utilizara para especificar todasaquellas librerías en las que debe buscar los programas que sedesean ejecutar en los distintos pasos del JOB, cesando estabúsqueda cuando encuentre el primer miembro cuyo nombre coincidacon el nombre del programa a ejecutar.
Esta sentencia tiene validez para todo el JOB, es decir debeespecificarse a nivel de JOB, y por tanto tiene como restricciónque debe seguir inmediatamente a la sentencia JOB.
JOBCAT
Esta sentencia tiene un significado parecido al de la fichaanterior, con la salvedad de que especifica el catalogo VSAM enel que se encuentran catalogados los ficheros VSAM que use elJOB.
Para sistemas que usen el SMS esta fiche no puede usarse.
Al igual que la anterior, esta ficha por su propio significado,debe especificarse a nivel de JOB, y tiene como particularidadque si se especifica la sentencia JOBLIB, esta debe preceder a laficha JOBCAT.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 105/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 105 de 374
STEPLIB
Esta ficha es igual a la ficha JOBLIB, con la diferencia de queaquella se especifica a nivel de JOB y esta, como su propionombre indica, se especifica a nivel de paso.
En el caso de especificarse en un mismo JOB ficha JOBLIB y en unode los pasos STEPLIB, la ficha JOBLIB es ignorada en dicho paso.
Otra diferencia con la ficha JOBLIB consiste en que no esnecesario especificarla como primera DD del paso, pues puedeocupar cualquier posición del mismo.
STEPCAT
Esta ficha, es similar a la ficha JOBCAT, con la diferencia deque en este caso le indicamos al sistema que ignore la fichaJOBCAT si es que se ha especificado, y que busque los ficherosVSAM del paso en el catalogo que se especifica en esta ficha.
SYSABEND
Esta ficha referencia un fichero en el que se desea volcar lamemoria en el caso de que el programa termine anormalmente.
La zona de memoria volcada a fichero es:- Nucleo del sistema- Area del programa problema- tabla del TRACE
SYSUDUMP
Esta ficha referencia, igual que la anterior, un fichero en elque se desea volcar la memoria en el caso de que el programatermine anormalmente.
La zona de memoria volcada a fichero es únicamente el Area delprograma problema.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 106/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 106 de 374
2.9 Procedimiento
Como se ha dicho al hablar del parámetro PROC de la ficha EXEC, el nombreque acompaña a este parámetro especifica el nombre del procedimiento que sedesea ejecutar. En cambio, la Sentencia PROC define el comienzo de unprocedimiento, y la etiqueta de esta ficha PROC establece el nombre delprocedimiento.
Se entiende por PROCEDIMIENTO un conjunto de n pasos que se ejecutan deforma inseparable tantas veces como sea llamado el procedimiento. Estosprocedimientos tienen la restricción de que los pasos contenidos en ellosno pueden invocar a otros procedimientos.
Los datos variables se referencian en el procedimiento como nombres devariables, empezando por un &. Dichas variables pueden definirse al
principio del procedimiento a fin de asignarlas valores por defecto.
En el caso de tener que definir ficheros temporales en el procedimientos, elnombre asignado debe ir precedido de dos && a fin de diferenciarlos delas variables del procedimiento.
Se entiende por PROCEDIMIENTO CATALOGADO un conjunto de pasos que seencuentran catalogados en la librería definida al efecto, y que precisamentepor estar catalogados no es necesario incluir en el JOB; no obstante, estese expandirá cuando el JES interprete el JCL.
Normalmente es la librería SYS1.PROCLIB la que contiene los procedimientoscatalogados del sistema, si bien puede ser cualquier otra concatenada conesta.
Existe una restricción en la definición de los procedimientos, y es quedentro de un procedimiento no se puede especificar una DD con el parámetro *o DATA.
Como ejemplo se acompaña el JCL que sirve para:
- generar el DBRM del interface de un producto. Es decir, la rutina queDB2 ejecutara para manejar los datos de la tabla de una aplicacion.
- precompilar el modulo obtenido- compilar- linkeditar- Hacer BIND
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 107/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 107 de 374
//DESJMP19A JOB TBJMP,'PRODUCTO',
// CLASS=C,NOTIFY=DESJMP19,MSGCLASS=V//*******************************************************************//COMPILAR PROC MODULO=@@@@@@@@//*------------------------------------------------------------------//SQLGEN EXEC PGM=XXXSQLGN,PARM='&MODULO',REGION=4096K//STEPLIB DD DSN=DESJMP.XXX2060.LINKLIB,DISP=SHR//CT DD DISP=SHR,DSN=DESJMP.XXX2060.DB1//MF DD DISP=SHR,DSN=DESJMP.XXX2060.DB1//II DD DISP=SHR,DSN=JMP.JMP35071.II.DIC//IIPUR DD DISP=SHR,DSN=JMP.JMP35078.PUR//IIDAT DD DISP=SHR,DSN=JMP.JMP35072.II.DAT//IISEC DD DISP=SHR,DSN=JMP.JMP35074.II.SEC//TEMP DD DSN=DESJMP.JMP.FONTSQL(&MODULO),DISP=SHR//OUT DD SYSOUT=*
//*------------------------------------------------------------------//PC EXEC PGM=DSNHPC,PARM='HOST(ASM),SOURCE,XREF',REGION=4096K//DBRMLIB DD DSN=DESJMP.DBRMLIB(&MODULO),DISP=SHR//SYSCIN DD DSN=&&DSNHOUT,DISP=(,PASS),UNIT=SYSDA,// SPACE=(800,(500,500))//SYSIN DD DSN=DESJMP.JMP.FONTSQL(&MODULO),DISP=SHR//SYSPRINT DD SYSOUT=*,OUTLIM=999999//SYSTERM DD SYSOUT=*//SYSUT1 DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA//*------------------------------------------------------------------//ASM EXEC PGM=IEV90,// PARM='LOAD,NODECK'//SYSIN DD DSN=&&DSNHOUT,DISP=(OLD,DELETE)//SYSLIB DD DSN=DESJMP.XXX2060.MACLIB,DISP=SHR// DD DSN=SYS1.MACLIB,DISP=SHR//SYSGO DD DSN=&&LOADSET,DISP=(,PASS),UNIT=SYSDA,// SPACE=(800,(500,500))//SYSTERM DD SYSOUT=*//SYSPRINT DD SYSOUT=*,OUTLIM=999999//SYSUDUMP DD SYSOUT=*//SYSUT1 DD SPACE=(TRK,(50,5)),UNIT=SYSDA,DISP=(,DELETE)//SYSUT2 DD SPACE=(TRK,(36,5)),UNIT=SYSDA,DISP=(,DELETE)//SYSUT3 DD SPACE=(TRK,(36,5)),UNIT=SYSDA,DISP=(,DELETE)//*------------------------------------------------------------------//LKED EXEC PGM=IEWL,PARM='REUS,XREF,LIST,MAP',// COND=((4,LT,ASM),(4,LT,PC))//SYSLIB DD DISP=SHR,DSN=SYS1.DB2CT.DSNLOAD//SYSLIN DD DSN=&&LOADSET,DISP=(OLD,DELETE)// DD DDNAME=SYSIN//SYSLMOD DD DSN=DESJMP.XXX.LOAD(&MODULO),DISP=SHR//SYSPRINT DD SYSOUT=*,OUTLIM=999999//SYSUDUMP DD SYSOUT=*//SYSUT1 DD SPACE=(1024,(50,50)),UNIT=SYSDA
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 108/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 108 de 374
//*-----------------------------------------------------------------
//*---------- BIND PACKAGE ------------------------//*-----------------------------------------------------------------//BINDPACK EXEC PGM=IKJEFT01,DYNAMNBR=20//SYSTSPRT DD SYSOUT=*//SYSPRINT DD SYSOUT=*//SYSUDUMP DD SYSOUT=*//SYSTSIN DD DUMMY//COMPILAR PEND//*----------- FIN PROCEDIMIENTO -------------//*******************************************************************//STEP20 EXEC COMPILAR,MODULO=JMPL20T <--- CAMBIAR EN LOS 3 SITIOS//LKED.SYSIN DD *
NAME JMPL20T(R)/*
//BINDPACK.SYSTSIN DD *DSN SYSTEM(DBT1)BIND PACKAGE(JMPL01T) OWNER(DESJMP) MEMBER(JMPL20T) -LIBRARY('DESJMP.DBRMLIB') -VALIDATE(BIND) ISOLATION(CS) RELEASE(DEALLOCATE) -EXPLAIN(Y)
END/*//*******************************************************************
Al llamar a este procedimiento, mediante la ficha EXEC correspondiente, sepasa como parámetro el nombre del Modulo, que sustituirá al nombre dado pordefecto en el procedimiento: "@@@@@@@@"Así mismo, se pasan dos ficheros que sustituyen a los definidos en elprocedimiento, la DDname SYSIN del paso LKED y la DDname SYSTSIN del pasoBINDPACK.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 109/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 109 de 374
2.10 Utilidades
Dentro de este apartado se estudian diversos programas de utilidadproporcionados por MVS para facilitar la gestión de las librerías yficheros.
Estos programas reciben este nombre porque van a librar al usuario decodificar rutinas y códigos para realizar funciones de uso común, talescomo:
- Mantener y manipular datos del Sistema.- Reorganizar, cambiar, comparar o manipular datos y/o ficheros deusuario.
Es de resaltar el hecho de que estas utilidades operan sobre ficheros
particionados y/o secuenciales, y que todos los programas de utilidad puedenacceder a datos que estén en cualquier tipo de dispositivo: cintas, discos,etc.
Estas utilidades no se diferencian en nada de cualquier programa deaplicacion, a no ser por su finalidad, y pueden ejecutarse como cualquierotro, bien mediante un procedimiento de comandos, clist por ejemplo, o através de un trabajo batch, siendo esta ultima forma la mas normal.
Los programas de utilidad necesitan para su control dos tipos de sentencias:- las sentencias propias del JCL, para asignación de recursos; y- las sentencias de control de la utilidad, para especificar lo que debeejecutar.
Por otra parte, cada programa de utilidad tiene sus diferentes sentencias deJCL y sus diferentes sentencias de control de utilidades, que se verán endetalle cuando se vea cada uno de ellos.
El formato general de un paso que ejecuta un programa de utilidad es:
//etiqueta EXEC PGM=utilidad//SYSPRINT DD ... salida de los mensaje//SYSIN DD *fichas de control de la utilidad
/*//ddname1 DD ...//ddname2 DD ...
//...donde la DDname
SYSPRINT define donde se escribirán los mensajes devueltos por la utilidad.
SYSIN contiene las fichas de control de la utilidad.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 110/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 110 de 374
El formato de las fichas de control es el siguiente.
nombre operación operando1,operando2,... comentario
donde cada elemento va delimitado por blancos, y
nombre comienza en la columna 1 y consta de 1 a 8 caracteres
operación Identifica la operación a realizar
operandos Es el area siguiente, y esta compuesta por parámetros depalabras clave separadas por comas.
comentarios Ira separado por blancos después del ultimo parámetro.
Como ya se ha dicho, las sentencias de control de utilidades se codificandentro de una sentencia SYSIN, siguiendo las normas generales de cualquierficha DD ya vista, por lo tanto, las fichas de control pueden especificarse:
1.- mediante una entrada 'in stream' de formato//SYSIN DD *
2.- o, dentro de un fichero secuencial o miembro de un particionado de 80caracteres de longitud.
//SYSIN DD DSN=USER424.DATOS.UTIL,DISP=SHR// DD DSN=USER525.SENTEN.UTIL(miembro),DISP=SHR
El contenido de estos dos ficheros serán las sentencias decontrol de utilidades específicas para una función y utilidadparticular.
Dentro de una misma SYSIN pueden codificarse varias sentencias decontrol de utilidades.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 111/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 111 de 374
2.10.1 IEFBR14
Este programa de utilidad realmente solo ejecuta un "FIN DE PROGRAMA".
La utilidad de este programa radica en la posibilidad de manejar lacreación , catalogación o borrado de ficheros mediante una adecuadacombinación de fichas DD y parámetros de DISP.
Las DDnames de este paso no tienen significado, pudiendo especificarse oconcatenarse tantas como sean necesarias, en función de los ficheros quese quieran tratar.
El siguiente ejemplo muestra este hecho.
El primer paso, ejecuta el programa IEFBR14 y la única DD que existe,
esta asociada a un fichero con disposición MOD, lo cual quiere decir que:
- Si el fichero no existe, debe crearle con las especificaciones quesiguen (DCB,UNIT,SPACE)
- Si el fichero existe, los datos se apendizan a los ya existentes. (Esteprograma no genera informacion)
A continuación, se ejecuta el programa, y termina, con lo que el ficheroanterior, en base al parámetro DISP, se borra, pues ha terminado bien.
En una palabra, este paso asegura que cuando se termina de ejecutar noexiste el fichero de la DD especificada en el mismo.
//**************************************************************//* BORRAR FICHEROS//*//BORRAR EXEC PGM=IEFBR14//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR//D1 DD DSN=DESJMP.CMWKF01,DISP=(MOD,DELETE,)// UNIT=SYSDA,SPACE=(CYL,(4,1),RLSE),// DCB=(DSORG=PS,RECFM=FB,LRECL=205,BLKSIZE=23370)//*----------------------------------------------------------//* COPIAR FICHEROS//*//PASO1 EXEC PGM=IEBGENER//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR//SYSPRINT DD SYSOUT=*
//* ----------- FICHERO DE ENTRADA//SYSUT1 DD DSN=DESJMP.FILE01,DISP=SHR//* ----------- FICHERO DE SALIDA//SYSUT2 DD DSN=DESJMP.CMWKF01,// DISP=(NEW,CATLG,DELETE),// UNIT=SYSDA,SPACE=(CYL,(4,1),RLSE),// DCB=(DSORG=PS,RECFM=FB,LRECL=205,BLKSIZE=23370)//SYSIN DD DUMMY//**************************************************************
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 112/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 112 de 374
2.10.2 IEBGENER
La utilidad de este programa se basa en copiar ficheros, conindependencia de cual sea el dispositivo donde se encuentra el ficheroorigen o de destino, ya que básicamente lo que hace es copiar el ficheroque tiene por DDname SYSUT1 sobre el fichero especificado en la DDnameSYSUT2.
La DDname SYSIN, de especificación obligatoria, contendrá las fichas decontrol. Estas fichas solo son obligatorias en el caso de que lascaracterísticas del fichero de salida no coincidan con las del fichero deentrada. En caso contrario puede definirse como DUMMY.
Las fichas de control en este ultimo caso podrán contener:
GENERATE Esta palabra especifica que los registros de salida sondistintos a los de entrada.
MAXFIELDS = n
Este es el unico parámetro que puede llevar esta ficha decontrol, y con el se indica al sistema que en la ficha decontrol RECORD se va a encontrar con N parámetros FIELD.
RECORD Esta ficha de control especifica el diseño del registro desalida mediante la concatenacion de tantos parámetros depalabra clave FIELD como sean necesarios..
El parámetro FIELD se ajustara al siguiente formato
FIELD=(num_bytes,pos_ini,conv,pos_sal)
donde cada subparametro especifica:
num_bytes Tamaño del campopos_ini Posición inicial en el registro de entradaconv Posible conversiónpos_sal Posición del registro de salida donde
depositarla
Un caso particular le constituye el que los datos a copiar (SYSUT1) esténdefinidos en la propia cadena. En este caso debe especificarse la DCB en
la DDname SYSUT2.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 113/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 113 de 374
El siguiente ejemplo muestra cómo se usa esta utilidad para copiar tres
ficheros físicos sobre una impresora determinada.
//*******************************************************//* LISTAR POR IMPRESORA//*******************************************************//IMPRIMIR EXEC PGM=IEBGENER//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR//SYSPRINT DD SYSOUT=*//* ----------- FICHERO DE ENTRADA//SYSUT1 DD DSN=DESJMP.RESUMEN1,DISP=SHR// DD DSN=DESJMP.RESUMEN2,DISP=SHR// DD DSN=DESJMP.RESUMEN3,DISP=SHR//* ----------- FICHERO DE SALIDA//SYSUT2 DD SYSOUT=F,DEST=RMT5,COPIES=32
//SYSIN DD DUMMY//*******************************************************
El siguiente ejemplo muestra cómo copiar un fichero editando la salida,de modo que:En la posición 1 del registro de salida se coloquen los 30 octetos que seencuentran en la posición 1 y siguientes del registro de entrada. YEn la posición 50 del registro de salida se coloquen los 175 bytes que seencuentran en la posición 31 y siguientes del registro de entrada.Los octetos 31 a 49 ambos inclusive del registro de salida quedaranrellenos a ceros binarios.
//*****************************************************************//PASO1 EXEC PGM=IEBGENER//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR//SYSPRINT DD SYSOUT=*//* ----------- FICHERO DE ENTRADA//SYSUT1 DD DSN=DESJMP.FILE01,DISP=SHR//* ----------- FICHERO DE SALIDA//SYSUT2 DD DSN=DESMGO.CMWKF01,// DISP=(NEW,CATLG,DELETE),// UNIT=SYSDA,SPACE=(CYL,(4,1),RLSE),// DCB=(DMYDCB,DSORG=PS,RECFM=FB,LRECL=205,BLKSIZE=23370)//SYSIN DD *GENERATE MAXFLDS=2RECORD FIELD=(30,1,,1),FIELD=(175,31,,50)
/*//*****************************************************************
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 114/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 114 de 374
El siguiente ejemplo muestra cómo copiar un fichero especificando que las
características del fichero de salida las asume de las del ficherofuente.
//*****************************************************************//* COPIAR FICHERO DE CINTA A CINTA//*----------------------------------------------------------------//PASO1 EXEC PGM=IEBGENER//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR//SYSPRINT DD SYSOUT=*//* ----------- FICHERO DE ENTRADA//SYSUT1 DD DSN=DESJMP.PRUEBA.WORK99S,DISP=OLD//* ----------- FICHERO DE SALIDA//SYSUT2 DD DSN=DESJMP.PRUEBA.WORK99S.SEC,DISP=(NEW,CATLG,),// UNIT=(ACL1,,DEFER),VOL=(,,,30),LABEL=(1,SL),
// DCB=*.SYSUT1//SYSIN DD DUMMY//*****************************************************************
El siguiente ejemplo muestra como enviar a la cola de entrada detrabajos, un job que se encuentra escrito en el fichero asociado a laDDname SYSUT1.
//DESJMP01 JOB (44,123),'DESARROLLO',CLASS=C,MSGCLASS=X,// NOTIFY=DESJMP,MSGLEVEL=(0,1)//*-------------------------------------------------------//PASO0030 EXEC PGM=IEBGENER//SYSPRINT DD SYSOUT=*//SYSUT1 DD DSN=DESJMP.JOBPROD,DISP=(OLD,DELETE,KEEP)//SYSUT2 DD SYSOUT=(A,INTRDR)//SYSIN DD DUMMY
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 115/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 115 de 374
2.10.3 IEBCOPY
Este programa de utilidad se usa para:
- Pasar fichero particionado a secuencial- copiar fichero particionado a fichero particionado- restaurar fichero desde cinta
En el caso de que la salida sea un fichero secuencial, y el fichero deentrada un fichero particionado, copia en él todos los miembros a no serque se especifique otra cosa con las fichas de control.
Las fichas de control en este programa son obligatorias, ya que es elmedio de que se dispone para indicarle lo que debe realizar. Estas fichaspueden ser:
COPY Esta ficha se usa para indicar al programa cuales son lasDDnames de entrada y de salida, mediante el uso de losparámetros de palabra clave siguientes:
INDD=DDname_entradaOUTDD=DDname_salida
SELECT Esta ficha se usa para indicar que miembros queremos copiar,lo cual se hace mediante el uso del parámetro de palabra clavesiguiente:
MEMBER=(miembro1[,miembro2[,...]])
EXCLUDE esta ficha se usa para indicar que miembros se quieren excluirde la copia. Se hace mediante el uso del parámetro de palabraclave MEMBER visto en la ficha SELECT
Las opciones SELECT y EXCLUDE deben siempre ir acompañadas de unasentencia COPY.
El formato de la especificación del MIEMBRO en el parámetro de palabraclave MEMBER es:
(1) nombre_miembro(2) (nombre_fuente,nombre_destino)(3) (nombre_fuente,nombre_destino,R)
(4) (nombre_miembro,,R)
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 116/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 116 de 374
donde cada formato se usa para:
(1) especificar el nombre de un miembro.
(2) copiar cambiando de nombre al miembro.
(3) Copiar cambiando el nombre, y si existe en el destino,reemplazar el existente.
(4) Copiar sin cambiar el nombre, pero en caso de miembros con elmismo nombre, reemplazar el de la librería de destino.
Evidentemente, estos formatos solo son aplicables al parámetro MEMBERusado en la ficha de control SELECT.
Ejemplo 1
// EXEC PGM=IEBCOPY//SYSPRINT DD SYSOUT=*//SYSUT3 DD UNIT=SYSDA,SPACE=(TRK,(1,1))//SYSUT4 DD UNIT=SYSDA,SPACE=(TRK,(1,1))//SEC@IN DD DSN=DESJMP.ENTRADA,DISP=SHR SECUENCIAL ENTRADA//SEC@OUT DD DSN=DESJMP.SALIDA,DISP=OLD SECUENCIAL SALIDA//PDS@IN DD DSN=DESJMP.ENTRADA,DISP=SHR LIBRERIA ENTRADA//PDS@OUT DD DSN=DESJMP.SALIDA,DISP=OLD LIBRERIA SALIDA//SYSIN DD *COPY INDD=PDS@IN OUTDD=SEC@OUT
/*
Las DDnames SYSUT3 y SYSUT4 son definiciones que puede necesitar paratrabajo el propio programa, y que en caso de no especificarlas en el JCL,cuando se interrumpe el trabajo por necesitarlas, presenta en el log delJOB el mensaje explicativo de que no se ha especificado la SYSUTncorrespondiente.
En el ejemplo anterior se copia toda la librería de entrada sobre elfichero secuencial especificado como salida.
Ejemplo 2 : Copia en el secuencial los miembros M1, M2 y M5.
//SYSIN DD *COPY INDD=PDS@IN OUTDD=SEC@OUTSELECT MEMBER=(M1,M2,M5)
/*
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 117/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 117 de 374
Ejemplo 3 : Copia todos los miembros de la librería de entrada,
excluyendo los miembros M6, M7 y M9.
//SYSIN DD *COPY INDD=PDS@IN OUTDD=SEC@OUTEXCLUDE MEMBER=(M6,M7,M9)
/*
Ejemplo 4: Copia todos los miembros de la librería de entrada, a la desalida. Los miembros duplicados no los copia.
//SYSIN DD *COPY INDD=PDS@IN OUTDD=PDS@OUT
/*
Ejemplo 5: Copia todos los miembros desde el secuencial de entrada a lalibrería de salida. Se excluye de la copia el miembro EJEMPLO.
//SYSIN DD *COPY INDD=SEC@IN OUTDD=PDS@OUTEXCLUDE MEMBER=(EJEMPLO)
/*
Ejemplo 6: Copia todos los miembros de las dos librerías especificadasENTRADA1 Y ENTRADA2 sobre el fichero particionado o secuencial asociado ala DDname SALIDA.Y también copia todos los miembros de la librería especificada en laDDname ENTRADA3 sobre la librería asociada a la DDname SALIDA3. En elcaso de que algún miembro de la librería destino tuviera el mismo nombreque el de la librería fuente, seria reemplazado.
//SYSIN DD *COPY INDD=(ENTRADA1,ENTRADA2) OUTDD=SALIDACOPY INDD=((ENTRADA3,R)) OUTDD=SALIDA3
/*
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 118/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 118 de 374
2.10.4 IEBPTPCH
Este programa de utilidad se usa para imprimir o perforar lo siguiente:
- un fichero secuencial o particionado completo- Miembros específicos de un fichero particionado- Registros seleccionados de un fichero secuencial o particionado- el directorio de un fichero particionado- Versión editada de un fichero secuencial o particionado.
El fichero de entrada se especifica en la DDname SYSUT1, y el de salidaen la SYSUT2.
Las fichas de control en este programa son obligatorias, ya que es elmedio de que se dispone para indicarle lo que debe realizar. Estas fichas
pueden ser:
PRINT Esta ficha se usa para especificar determinadascaracterísticas mediante los siguientes parámetros de palabraclave:
TYPORG=valor especifica el tipo de organizacion del ficheroasociado a la DDname SYSUT1Puede tomar los valores:- PO : Organizacion particionada- PS : Organizacion secuencial.
MAXFLDS=n1 Especifica el numero de parámetros FIELD que seespecifican en la ficha de control RECORD
MAXNAME=n2 Especifica el numero de parámetros NAME que seespecifican en la ficha de control MEMBER
STRTAFT=n3 Especifica que empiece a listar desde elregistro n3
STOPAFT=n4 Especifica que pare después de escribir n4registros.
SKIP=n5 Especifica que deje una línea en blanco cada 5registros escritos
MAXGPS=n6 Este parámetro especifica el numero deparámetros IDENT que aparecen en fichas RECORD.Estos parámetros especifican tipos de registro.
MAXLITS=n7 Este parámetro especifica el numero decaracteres que componen el tipo de registro.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 119/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 119 de 374
PREFORM=p Especifica que el primer carácter del registro
es un carácter de control, y por tanto no seráimpreso.Los posibles valores de P son:PREFORM=A para caracteres de control ASAPREFORM=M para caracteres de control maquina
TOTCONV=t Este parámetro especifica el tipo de conversiónque se hará para imprimir la entrada.Los posibles valores de T son:TOTCONV=XE se imprime en formato hexadecimal,
Es decir dos caracteres porcarácter de entrada.
TOTCONV=PZ Con este parámetro se indica que laentrada viene en formatoempaquetado. La impresión se
realizara usando dos caracteresnuméricos por cada uno de entrada.
CNTRL=n8 Especifica el espaciado del fichero de salida.Los posibles valores son 1,2 o 3.Por defecto asume el espaciado simple =1
INITPG=n9 Especifica el numero de página inicial. Pordefecto asume el valor 1, y no puede exceder elvalor 9999
MAXLINE=nn Especifica el numero de líneas por página,incluyendo títulos, líneas en blanco yespaciado.
PUNCH Esta ficha es parecida a la anterior, tiene la misma finalidady los mismos parámetros, con la salvedad de que inserta ensalida un blanco cada 5 columnas.Para evitar este efecto, en el caso de salida impresa, podríaexpecificarse una ficha RECORD con el parámetro FIELD=(80).
MEMBER Esta ficha sirva para indicar al sistema, cuando existe, losmiembros de la librería que se desean listar. En el caso deque no se defina esta ficha, se asume que son todos.
NAME=miembro Este parámetro se usa para especificar elnombre del miembro a listar
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 120/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 120 de 374
RECORD Esta ficha de control se usa para especificar el formato del
registro de salida.
FIELD=(num_bytes,pos_ini,conv,pos_sal)
donde cada subparametro especifica:
num_bytes Tamaño del campopos_ini Posición inicial en el registro de entradaconv Posible conversiónpos_sal Posición del registro de salida donde
depositarlaTITLE Este parámetro sirve para especificar un literal para la
cabecera del listado, el cual ira acompañando al parámetro depalabra clave ITEM, el cual tiene el siguiente formato:
ITEM=('titulo',nn)
donde nn especifica el offset o margen izquierdo.
Cuando no se especifica DCB en el fichero de salida, asume la siguiente:
DCB=(LRECL=121,BLKSIZE=121,RECFM=FBA)
Ejemplo
// EXEC PGM=IEBPTPCH//SYSPRINT DD SYSOUT=*//SYSUT1 DD DSN=FICHERO,DISP=SHR//SYSUT2 DD SYSOUT=*//SYSIN DD *PRINT TYPORG=PO,MAXFLDS=1,STOPAFT=100RECORD FIELD=(80)
/*
Con estas fichas de control especificamos:- Organizacion del fichero de entrada: Particionada- Hay 1 parámetro FIELD en la ficha RECORD- Listar todos los miembros del fichero- Listar solo los 100 primeros registros de cada miembro.- listar los 80 primeros bytes de cada registro.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 121/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 121 de 374
//SYSIN DD *PRINT TYPORG=PO,MAXFLDS=2,MAXNAME=1,SKIP=5MEMBER NAME=EJEMPLOTITLE ITEM=('cabecera listado',40)RECORD FIELD=(40,25,,1),FIELD=(25,1,,41)
/*
Con estas fichas de control especificamos:
- Organizacion del fichero de entrada: Particionada- Hay 2 parámetro FIELD en la ficha RECORD- Hay 1 parámetro NAME en la ficha MEMBER- dejar una línea en blanco cada 5 registros- Escribir como cabecera del listado 'CABECERA SALIDA'
- escribir en la posición 1 del registro de salida los 40 bytes quese encuentran en el registro de entrada desde la posición 25.
- Escribir los 25 primero bytes del registro de entrada sobre lasposiciones 41 y siguientes del registro de salida.
//SYSIN DD *PRINT TYPORG=PS,MAXFLDS=2,STRTAFT=12,STOPAFT=200RECORD FIELD=(1,1,XE,2),FIELD=(70,2,,4)
/*
Con estas fichas de control especificamos:- Organizacion del fichero de entrada: secuencial- Hay 2 parámetros FIELD en la ficha RECORD- Listar los 200 registros que siguen al registro 12 del fichero deentrada.
- Escribir en la posición 2 del registro de salida el primer bytedel registro de entrada, pero en formato hexadecimal.- Escribir los 70 bytes del registro de entrada que se encuentran enlas posiciones 2 y siguientes sobre las posiciones 4 y siguientes delregistro de salida.
//SYSIN DD *PRINT MAXFLDS=3,MAXGPS=3,MAXLITS=1RECORD IDENT=(1,'A',1),FIELD=(75,2,,6)RECORD IDENT=(1,'B',1),FIELD=(70,5,6)RECORD IDENT=(1,'C',1),FIELD=(50,10,6)
/*Con estas fichas de control especificamos:- Hay 3 parámetros FIELD en fichas RECORD- Hay 3 tipos de registros (MAXGPS)- El tipo de registro tiene una longitud de 1 carácter.- Cuando en la primera posición de un registro, se encuentra elcarácter 'A', se utilizara el PARAMETRO FIELD de la primera ficha decontrol RECORD- Si fuera 'B' se utilizaría la segunda ficha RECORD.- Y, si fuera 'C' se utilizara la ultima.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 122/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 122 de 374
El siguiente ejemplo muestra cómo pasar todos los miembros de un fichero
particionado a un miembro de otro fichero particionado.
//******************************************************//IEBPTPCH EXEC PGM=IEBPTPCH//SYSPRINT DD SYSOUT=*//SYSUT1 DD DISP=SHR,DSN=DESJMP.SEC.DBCOBOL//SYSUT2 DD DISP=SHR,DSN=DESJMP.SEC.SALIDAS(DBCOBOL)//SYSIN DD *PRINT TYPORG=PO,MAXFLDS=1RECORD FIELD=(80)
/*//*******************************************************
El siguiente ejemplo muestra cómo listar un directorio.
Cabe resaltar el hecho de que hay que especificar el parámetro DCB en laSYSUT1 que especifica el nombre de la librería de entrada; y el parámetroTYPORG=PS en la ficha de control PUNCH.El definir el parámetro DCB=LRECL=43 es para que salga encolumnada lasentradas del directorio.
//******************************************************//IEBPTPCH EXEC PGM=IEBPTPCH//SYSPRINT DD SYSOUT=*//SYSUT1 DD DISP=SHR,DSN=DESJMP.SEC.DBCOBOL,
DCB=(RECFM=U,BLKSIZE=256)//SYSUT2 DD SYSOUT=X,DCB=LRECL=43//SYSIN DD *PUNCH TYPORG=PS
/*//*******************************************************
En el anexo se incluye la ejecución de un JCL para listar un directorio.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 123/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 123 de 374
2.10.5 IEBCOMPR
Esta utilidad permite comparar ficheros particionados o secuenciales.
IEBCOMPR considerará que dos ficheros secuenciales son iguales si:
- Contienen el mismo número de registros.- Cada registro tiene la misma información que su correspondiente en el
otro fichero.
IEBCOMPR, considerará que dos ficheros particionados son iguales si:
- Los directorios de los ficheros son iguales.- Los miembros correspondientes de los dos ficheros son iguales.- Los datos de esos miembros son iguales.
Las DDnames necesarias para esta utilidad son:
//SYSPRINT Fichero de salida de mensajes de IEBCOMPR
//SYSUT1 Sentencia DD para asignación del fichero de entrada.
//SYSUT2 Sentencia DD para asignación del fichero de salida.
//SYSIN Sentencia DD para entrada de sentencias de controlde utilidades.
Esta utilidad, IEBCOMPR, solo tiene una sentencia de control, la cual seajusta al siguiente formato:
COMPARE=TYPORG=tipo
donde
COMPARE Es una sentencia obligatoria, que expresa además la función arealizar.
TYPORG Especifica la organizacion del fichero, Para lo cual, TIPOpuede tomar los valores:
PS Secuencial.Es el valor que asume por defecto.
Si se comparan ficheros secuenciales no hace faltacodificar este parámetro, y la SYSIN puede tener DUMMY.
PO Particionado.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 124/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 124 de 374
2.10.6 IEBUPDATE
Esta utilidad se usa para crear o modificar ficheros, ya seansecuenciales o miembros de un particionado, pero siempre tomando comoreferencia registros lógicos de 80 posiciones (imagen ficha).
Las posibles operaciones que se pueden realizar con esta utilidad son:
- Añadir un nuevo miembro a un fichero particionado.- Sustituir un miembro- Añadir un registro a un fichero secuencial o particionado.- Borrar un registro lógico.- Convertir un fichero secuencial en particionado.
Las fichas de control de esta utilidad, IEBUPDTE, tienen como
particularidad, la obligatoriedad de llevar './' en las columnas 1 y 2 dela ficha, a fin de diferenciarlas de las fichas de datos que pudieran iren la misma cadena.
Por otra parte, la sentencia EXEC puede ir acompañada de los siguientesparámetros:
PARM=NEW o MOD
en función de que se vaya a crear o modificar una librería.Por defecto asume MOD
Las DDnames utilizadas por esta utilidad son las siguientes:
//SYSPRINT Fichero de salida de mensajes de la utilidad
//SYSUT1 Esta DDName se usa para especificar el fichero deentrada cuando sea necesario.Por ejemplo, para crear una librería no seespecifica pues no hay entrada.
//SYSUT2 Esta ficha no es necesaria cuando se modificanficheros.
//SYSIN Sentencia DD para entrada de sentencias de controlde utilidades.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 125/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 125 de 374
Las fichas de control en este programa son las siguientes:
./ ADD Esta sentencia hace que se añada un miembro al fichero PDSespecificado en SYSUT1. Concretamente el especificado con elparámetro NAME en esta ficha.
Los datos para crear ese nuevo miembro pueden venir acontinuación de esta ficha, en la propia cadena.
./ ADD NAME=miembro,LIST=ALL
./ REPL Esta sentencia reemplaza el miembro especificado con elparámetro NAME de la librería de SYSUT1, con los datos quevienen a continuación en la cadena.
También puede llevar el parámetro LIST=ALL
./ REPL NAME=miembro,LIST=ALL
./ NUMBER Esta sentencia se usa para numerar, y en caso de usarse debeseguir a la ficha ADD o REPL.Admite los parámetros:NEW1=nnnnINCR=incremento
./ REPRO Esta sentencia copia el miembro o el secuencial especificadodesde SYSUT1
Puede llevar el parámetro LIST=ALL
./ REPRO NAME=miembro,LIST=ALL
La siguiente sentencia copia el fichero secuencialespecificado en SYSUT1 como miembro de la libreríaespecificada en SYSUT2, con el nombre especificado en la ficha
./ REPRO NEW=PO,MEMBER=miembro,LIST=ALL
La próxima sentencia es la inversa a la anterior, pues copiael miembro de la librería especificada en SYSUT1, como unfichero secuencial con el nombre especificado en la fichaSYSUT2.
./ REPRO NEW=PS,NAME=miembro,LIST=ALL
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 126/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 126 de 374
./ CHANGE Esta sentencia precede a una sentencia DELETE o NUMBER o a
fichas de datos que updatan un fichero. Para ficherossecuenciales se puede omitir el parámetro NAME.
./ CHANGE NAME=miembro,LIST=ALL
Cuando se especifica la opción COLUMN=dd se esta indicando quelas columnas dd a 80 de los registros de datos que siguen aesta sentencia reemplazaran a las mismas columnas de aquellosregistros del fichero cuya secuencia coincida con la secuenciadel registro de datos.
./ CHANGE NAME=miembro,LIST=ALL,COLUMN=dd
Cuando se especifica la opción UPDATE=INPLACE se esta
indicando que los registros de datos que siguen a estasentencia reemplazaran a aquellos registros del fichero cuyasecuencia coincida con la secuencia del registro de datos.
./ CHANGE NAME=miembro,LIST=ALL,UPDATE=INPLACE
./ DELETE Esta sentencia va precedida por una ficha CHANGE, y borratodos los registros comprendidos entre sec1 y sec2
./ DELETE SEQ=sec1,SEQ=sec2
./ NUMBER Puede haber mas de una ficha NUMBEREl conjunto debe ir precedido por una ficha CHANGELo que hace esta ficha es renumerar un miembro o una parte delmismo. utilizando para ello los valores que se especifican enNEW1 e INCRemento.
./ NUMBER SEQ1=ALL,NEW1=val_ini,INCR=incremento
./ ENDUP Esta sentencia marca el final de todas las sentencias decontrol.
./ ENDUP
Las fichas ADD, REPL, CHANGE y REPRO pueden contener, además lassiguientes opciones:
LIST=ALL Esta opción hace que también se copie sobre SYSPRINT elmiembro.
SEQFLD=ccl Esta opción especifica que las columnas CC y la longitud Ldonde ira la secuencia de numeración. El valor de CC no puedeexceder de 80 y la longitud de 8, asumiéndose por defecto elvalor 738.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 127/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 127 de 374
LEVEL=hh Esta opción especifica el nivel de modificación. HH es un
valor hexadecimal, y el valor que representa es guardado en eldirectorio del miembro de salida, para ser usado en elmantenimiento de los sectores de los niveles modificados.
El siguiente ejemplo muestra un paso de un JCL que ejecuta esta utilidad.
//************************************************************//PASO1 EXEC PGM=IEBUPDTE,PARM=NEW//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR//SYSPRINT DD SYSOUT=*//* ----------- FICHERO DE ENTRADA//SYSUT1 DD DSN=DESJMP.JMP.ESKELETX,DISP=SHR//* ----------- FICHERO DE SALIDA//SYSUT2 DD DSN=DESJMP.JMP.ESKELETF,DISP=(NEW,CATLG,),
// SPACE=(TRK,(10,5,10),RLSE),UNIT=SYSDA,// DCB=(RECFM=FB,LRECL=80,BLKSIZE=23440)//SYSIN DD *./ ADD NAME=INTUTIPS,LIST=ALL
*************************************************************** IMPRIME LIBRERIA SOBRE UN SECUENCIAL************************************************************
./ ENDUP/*
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 128/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 128 de 374
2.10.7 IEHINITT
Este programa de utilidad del sistema se utiliza para inicializar cintasy cartuchos formateandolos para que puedan contener ficheros einformación de control.
La información y el formato de inicialización que se logra con esteprograma es el siguiente:
- Etiqueta de volumen de cinta: Contiene el número de serie delvolumen de cinta.
- 80 bytes de etiqueta de cabecera: Son rellenados y conforman laetiqueta de tipo HDR1 que serárellenada al hacer uso de la
cinta.
- Una marca de cinta física.
Cuando una cinta inicializada es usada para contener datos, las sucesivasetiquetas de ésta quedan como sigue:
- La etiqueta de volumen de cinta queda inalterada.
- El registro HDR1 creado por IEHINITT es rellenado con información defechas de creación del fichero que va a rellenar la cinta e informacióndel sistema.
- Se crea un registro HDR2 conteniendo características físicas (DCB) delfichero creado.
- Se crea una marca de cinta a continuación.
- Los datos son escritos a continuación.
Las DDnames utilizadas por la utilidad IEHINITT son:
//SYSPRINT Fichero para la salida de mensajes del programaIEHINITT.
//etiqueta Esta DD define la unidad de cinta que va a serusada en la operación de inicialización. Se pueden
referenciar en un mismo paso varias unidades decinta.
Debe ajustarse al siguiente formato:
//etiqueta DD DCB=DEN=n,UNIT=(TAPE,n,DEFER)
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 129/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 129 de 374
donde
DCB=DEN=n Este parámetro es obligatorio, ya que Nespecifica la densidad de grabacióncorrecta.Esta densidad se encuentra codificadade acuerdo con la siguiente tabla:
2 Densidad de grabación 800BPI3 Densidad de grabación 1600BPI4 Densidad de grabación 6200BPI.Por defecto se asume DCB=DEN=4
UNIT=(TAPE,n,DEFER)
Indica que se insertan n dispositivosde unidad de cinta para las operacionesde inicialización.El valor por defecto es 1.
El valor DEFER obliga a la sentencia ano asignar el dispositivo hasta que elprograma IEHINITT pida el montajefísico de la cinta.
//SYSIN DD Indica la entrada de las sentencias de control para elIEHINIT.
Esta utilidad, IEHINIT, solo tiene una sentencia de control, la cual seajusta al siguiente formato:
DDname INITT SER=nun_serie,NUMBTAPE=n
donde
DDname el nombre de la etiqueta dado a la ficha DD que describela unidad y la densidad.
INITT Palabra clave para la sentencia de control.
SER Este parámetro especifica el numero de serie con el quese quiere inicializar la/s cinta/s.
NUMBPTAPE Este parámetro especifica el numero de cintas que quieranser inicializadas.El valor por defecto de este parámetro es 1.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 130/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 130 de 374
Si el NUMBTAPE es mayor que 1, el sistema irá asignando
números de serie a las sucesivas cintas que se vayaninicializando incrementando de uno en uno a partir del nºde serie que se haya especificado en el parámetro SER.
Ejemplos:
El primer paso del siguiente JOB muestra cómo se inicializa una cintaasignandola el numero de serie, (que se grabarán en la etiqueta devolumen), 2500, y con una densidad de grabación de 1600 BPI.
//USER5000 JOB CLASS=X,MSGCLASS=X,MSGLEVEL=(1,1)//PASO1 EXEC PGM=IEHINITT//SYSPRINT DD SYSOUT=*//CINTA2 DD DCB=DEN=3,UNIT=(TAPE,,DEFER)
//SYSIN DD *CINTA2 INITTSER=002500
/*
Este 2º paso, inicializa cuatro cintas con números de serie consecutivos,empezando por el 3000 y usando para esta operación dos dispositivos deunidad de cinta. Las cintas tienen una densidad de grabación de 67200BPI.
//PASO EXEC PGM=IEHINITT//SYSPRINT DD SYSOUT=*//CINTA3 DD DCB=DEN=4,UNIT=(TAPE,2,DEFER)//SYSIN DD *CINTA3 INITTSER=003000,NUMBTAPE=4
/*
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 131/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 131 de 374
2.10.8 IEHLIST
Este programa de utilidad se usa para:
- Listar la VTOC de un volumen- Listar el directorio de un fichero particionado
La informacion que proporciona esta utilidad respecto a directorios deficheros particionados es la siguiente:
- Nombre miembro.- Punto de entrada.- Dirección relativa de comienzo del miembro.- Indicadores del sistema.- Bloques de directorio libres.
Mientras que la informacion que proporciona respecto a la VTOC (VolumeTable Of Contents) la obtiene de las DSCB de la VTOC, siendo lasiguiente:
- Información de espacio disponible en el volumen en pistas y cilindros(DSCB 0).
- Longitud de registro y tamaño del bloque (ficheros).- Alocaciones primarias y secundarias.- Formatos de registros.- Nombre del fichero.- Fechas de creación y expiración.- Organización del fichero.- Extensiones.
Las DDnames utilizadas por esta utilidad son las siguientes:
//SYSPRINT Fichero de salida de mensajes de la utilidad
//DDn Sentencia DD para descripción del volumenreferenciado en la ficha de control de la utilidad.Habrá tantas DDn como volúmenes se referencien.El hecho de codificar esta DD por cada volumen aprocesar, es para que el sistema reserve ese volumenmientras se ejecuta el paso, pues le asigna altrabajo.
//SYSIN Sentencia DD para entrada de sentencias de controlde utilidades.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 132/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 132 de 374
Las fichas de control en este programa son las siguientes:
LISTPDS Esta sentencia hace que se liste el directorio de un ficheroparticionado.
Los parámetros que acompañan a esta ficha se ajustan alsiguiente formato:
DSNAME=dsn,VOL=tipo_disp=num_serie,formato
LISTVTOC Esta sentencia hace que se liste la VTOC del volumen que seespecifique, pudiendo listarse o bien entera o bien parcial,dependiendo que de que se especifique el parámetro DSNAME ono.
Los parámetros que acompañan a esta ficha se ajustan alsiguiente formato:
VOL=tipo_disp=num_serie,formato,DSN=(dsn1[,dsn2[,...])
donde
VOL= Este parámetro describe la unidad y el numero de serie delvolumen que se quiere tratar, pues:
tipo_disp especifica el tipo de dispositivo en el que se hamontado el volumen
num_serie especifica el numero de serie del volumen.Este numero de serie es el que sirve pararelacionar la DDname con esta ficha de control.
formato especifica como se desea el listado:FORMAT : formateadoDUMP : en hexadecimal.
El siguiente ejemplo muestra estos extremos
//*****************************************************//LVTOC EXEC PGM=IEHLIST,PARM='LINECNT=56'//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR//SYSPRINT DD SYSOUT=*//DD1 DD DISP=SHR,UNIT=3390,VOL=SER=DES100//SYSIN DD *LISTVTOC VOL=3390=DES100,DSN=DESJMP.JMP.ESKELETOLISTPDS VOL=3390=DES100,DSN=DESJMP.JMP.ESKELETO
/*
Al final del tema puede verse listada la ejecución de esta utilidad.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 133/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 133 de 374
2.10.9 IEHPROGM
Esta utilidad permite realizar las siguientes operaciones:
- Borrar, catalogar, descatalogar y renombrar un fichero- Borrar y renombrar un miembro de un fichero particionado.
Las DDnames utilizadas por esta utilidad son las siguientes:
//SYSPRINT Fichero de salida de mensajes de la utilidad
//DDn Sentencia DD para descripción del volumenreferenciado en la ficha de control de la utilidad.Habrá tantas Ddn como volúmenes se referencien.El hecho de codificar esta DD por cada volumen a
procesar, es para que el sistema reserve ese volumenmientras se ejecuta el paso, pues le asigna altrabajo.
//SYSIN Sentencia DD para entrada de sentencias de controlde utilidades.
Las fichas de control en este programa son las siguientes:
CATLG Esta sentencia sirve para catalogar en el volumen que seindica, el DSNname especificado como parámetro en esta ficha.
El formato de esta ficha se ajusta al siguiente:
DSN=nombre_fichero,VOL=tipo_disp=etiqueta
UNCATLG Esta sentencia borra del catalogo, el DSname especificado,pero no borra el fichero, por lo que se mantiene en elvolumen, direccionado desde la VTOC.
SCRATCH Esta sentencia borra el fichero cuyo Dsname se especifica.Requiere especificar la etiqueta del volumen donde seencuentra el fichero.
En el caso de querer borrar solo un miembro del ficheroparticionado especificado con el parámetro DSN, hay queespecificar el parámetro MEMBER=nombre_miembro.
Esta sentencia puede ir acompañada del parámetro PURGE, elcual especifica que se borren el fichero aunque no hayaexpirado.
RENAME Este parámetro permite renombrar un fichero, dando el nombreque acompaña al parámetro NEW al fichero cuyo DSN seespecifica también en esta ficha.
En el caso de querer renombrar un miembro habría queespecificar su nombre con el parámetro MEMBER, y entonces elque acompaña al parámetro NEW seria el nuevo nombre delmiembro especificado.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 134/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 134 de 374
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 135/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 135 de 374
Los siguientes ejemplos muestran el uso de todos estos parámetros.
//*****************************************************//IEHPROGM EXEC PGM=IEHPROGM//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR//SYSPRINT DD SYSOUT=*//DD1 DD DISP=SHR,UNIT=3390,VOL=SER=DES100//SYSIN DD *CATLG DSN=DESJMP.JMP.PRUIEH01,VOL=3390=DES100CATLG DSN=DESJMP.JMP.PRUIEH02,VOL=TAPE=(002365,1,153,1)UNCATLG DSN=DESJMP.JMP.ESKELETOSCRATCH DSN=DESJMP.JMP.ESKELETO,VOL=3390=DES100,PURGESCRATCH DSN=DESJMP.JMP.ESKELETO,VOL=3390=DES100,MEMBER=PPPPPSCRATCH DSN=DESJMP.JMP.ESKELETO,VOL=3390=DES100RENAME DSN=DESJMP.JMP.ESKELETO,VOL=3390=DES100,
NEWNAME=DESJMP.JMP.EJEMPLO2RENAME DSN=DESJMP.JMP.ESKELETO,VOL=3390=DES100,
NEWNAME=EJEMPLO3,MEMBER=PRUEBA/*
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 136/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 136 de 374
2.11 Programas especiales
2.11.1 IEKFJ01
Este programa no es uno de los programas mas importantes del sistema, yaque es el propio TSO ejecutado en BATCH.
Este programa es invocado cada vez que se desee ejecutar un comando deTSO, constituyendo estos comandos las fichas de control de este programa.Dichas fichas deben especificarse asociadas a la DDName SYSTSIN.
La Ddname SYSTSPRT especifica dónde se desea recoger los mensajesdevueltos por la ejecución del TSO.
En el siguiente ejemplo lo que se hace es invocar al programa EDIT para
generar una serie de cambios en el fichero que se especifica comoparámetro.
//XXXXXXLM JOB (123,456),'JMP-PRU-4',CLASS=T,MSGCLASS=X,// NOTIFY=XXXXXX,MSGLEVEL=(1,1)//*====================================================================//* TSO EN BATCH//*====================================================================//*//EDITAR EXEC PGM=IKJEFT01//*//SYSTSPRT DD SYSOUT=*//SYSTSIN DD *EDIT 'DESJMP.TMP' OLD CNTL NONUMC * 999 'CCCCCCC' 'PRUEBA'SAVE 'DESJMP.TMP1'
/*
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 137/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 137 de 374
2.11.2 SORT
Este programa es usado para copiar los registros de un fichero de entradaen otro de salida, cambiando la secuencia en la que se encuentran estos.
Las Ddnames necesarias para la ejecución de este programa son:
SORTIN Esta Ddname especifica el fichero a clasificar
SORTOUT Esta Ddname especifica el fichero de salida
SYSIN Esta Ddname especifica las fichas de control para realizar laclasificación.
Las sentencias de control de este programa deben comenzar en la columna 2
o posterior, y son las siguientes:
SORT Esta sentencia establece los parámetros para la clasificacióndel fichero.
MERGE Esta sentencia es idéntica a la sentencia SORT, con lasalvedad de que en este caso se mezclan registros de hasta 16ficheros en lugar de los registros de un unico fichero.
RECORD Esta sentencia establece el formato del registro de salida enel caso de que se desee editar, es decir que no coincida conel de entrada.
ALTSEQ Esta sentencia permite cambiar el valor, a efectos declasificación de determinados caracteres.
INCLUDE Esta sentencia especifica los campos que permiten seleccionarlos registros del fichero de entrada en un sort
OMIT Esta sentencia especifica los campos que permiten excluirregistros del fichero de entrada en un sort
INREC Esta sentencia reformatea el registro de entrada antes deejecutar el sort, de modo que solo se ejecute la clasificacióncon aquellos campos que interesan.
OUTREC Esta sentencia reformatea el registro de salida después de
ejecutar el sortSUM Esta sentencia especifica al programa que escriba en el
fichero de salida un registro totalizando los n registros deigual clave del fichero de entrada.
Para poder llevar a buen fin su trabajo, este programa necesita alocaruna serie de recursos, definidos con las Ddnames SORTWKnn tal y como semuestra en el siguiente ejemplo suficientemente autocomentado:
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 138/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 138 de 374
//********************************************************************
//PSORT PROC// EXEC PGM=SORT,PARM='ABEND'//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(10,50))//SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,(10,50))//SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,(10,50))//SYSPRINT DD SYSOUT=*//SYSOUT DD SYSOUT=*//SYSUDUMP DD DUMMY//SORTIN DD DUMMY//SORTOUT DD DUMMY//SYSIN DD *// PEND//********************************************************************//* ELIMINAR LOS REGISTROS TIPO 01 DUPLICADOS **
//*-----------------------------------------------------------------**//PASO01 EXEC PSORT//SORTIN DD DSN=DESJMP.TRABAJO1.WORK01,DISP=SHR//SORTOUT DD DSN=DESJMP.TRABAJO1.WORK01S,DISP=(NEW,CATLG,),// UNIT=(SYSDA,3),// DATACLAS=DFBXP,LRECL=050,SPACE=(CYL,(4,1),RLSE)//SYSIN DD *
SORT FORMAT=CH,FIELDS=(16,19,A)SUM FIELDS=NONE
/*//********************************************************************//* ELIMINAR LOS REGISTROS TIPO 11 DUPLICADOS *//*-----------------------------------------------------------------**//PASO02 EXEC PSORT//SORTIN DD DSN=DESJMP.TRABAJO1.WORK11,DISP=SHR//SORTOUT DD DSN=DESJMP.TRABAJO1.WORK11S,DISP=(NEW,CATLG,),// UNIT=(SYSDA,3),// DATACLAS=DFBXP,LRECL=050,SPACE=(CYL,(4,1),RLSE)//SYSIN DD *
SORT FORMAT=CH,FIELDS=(16,19,A)SUM FIELDS=NONE
/*//********************************************************************//* FUSIONAR LOS REGISTROS 01 Y 11 EN UN UNICO FICHERO **//* EN LOS CASOS EN QUE HAYA 01 Y 11 DEJAR UNO SOLO CON LA SUMA: 1B **//*-----------------------------------------------------------------**//PASO03 EXEC PSORT//SORTIN DD DSN=DESJMP.TRABAJO1.WORK01S,DISP=(OLD,DELETE,)// DD DSN=DESJMP.TRABAJO1.WORK11S,DISP=(OLD,DELETE,)//SORTOUT DD DSN=DESJMP.TRABAJO1.WORK99,DISP=(NEW,CATLG,),// UNIT=(SYSDA,3),// DATACLAS=DFBXP,LRECL=050,SPACE=(CYL,(4,1),RLSE)//SYSIN DD *
SORT FORMAT=CH,FIELDS=(16,19,A)SUM FIELDS=(14,2,ZD)
/*//********************************************************************//* ELIMINAR DEL FICHERO RESULTANTE LOS REGISTROS SUMA 1B Y 01 **//*-----------------------------------------------------------------**//PASO04 EXEC PSORT//SORTIN DD DSN=DESJMP.TRABAJO1.WORK99,DISP=(OLD,DELETE,DELETE)
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 139/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 139 de 374
//SORTOUT DD DSN=DESJMP.TRABAJO1.WORK99S,DISP=(NEW,CATLG,),
// UNIT=(SYSDA,3),// DATACLAS=DFBXP,LRECL=050,SPACE=(CYL,(4,1),RLSE)//SYSIN DD *
SORT FORMAT=CH,FIELDS=(01,08,A)OMIT COND=(14,2,CH,EQ,C'1B',OR,14,2,CH,EQ,C'01')
/*
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 140/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 140 de 374
SORT
Esta sentencia establece los parámetros para la clasificación delfichero.
El formato de esta sentencia es :
SORT FIELDS=(clave1[,clave2[,...[,claven]]]),[FILSZ=En],[FORMAT=formato],[SKIPREC=n][CKPT][EQUALS][NOEQUALS]
donde:
clave determina cada una de las claves de clasificación.Esta formada por un cuarteto con la siguienteinformacion:
Pos_ini,longitud,formato,orden
siendo
Pos_ini : la posición inicialLongitud : El numero de bytes que configuran la claveFormato : El formato de la clasificaciónOrden : Tipo de ordenación Ascendente/Descendente
El formato de la clasificación puede ser uno de los siguientes:
cod x Descripción
CH Carácter EBCDICZD s Zoned DecimalPD s Packed DecimalFI s Fixed PointBI BinaryFL s Floating PointCSL s Numeric Character, Leading separate signCST s Numeric Character, trailing separate sign
CLO s Numeric Character, Leading overpunch signCTO s Numeric character, trailing overpunch signAC ASCII characterASL s ASCII numeric character, leading separate signAST s ASCII numeric character trailing separate signAQ EBCDIC character alternative collating sequence set
byinstallation
Donde
Cod: representa el código a incluir en el cuartetoX : Especifica si admite el signo
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 141/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 141 de 374
Ejemplo:
SORT FIELD=(3,25,CH,A,50,5,CH,D),FILSZ=E1000
Este ejemplo estima clasificar 1000 registros, de acuerdo con dos lasdos claves de clasificación dadas con las cuartetas siguientes:
3,25,ZD,A lo cual quiere decir que la primera clave se correspondecon los 25 bytes que se encuentran en las posiciones 3 ysiguientes del fichero de entrada. El formato a seguir seráel código EBCDIC y en Ascendente.
50,5,CH,D En el caso de que existan claves primarias repetidas, los
registros seguirán esta segunda clave, la cual especificaque tiene una longitud de 5 posiciones, concretamente lasque se encuentran en las posiciones 50 a 54, se seguirá elcódigo EDCDIC, y el orden será descendente.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 142/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 142 de 374
El resto de parámetros de esta ficha de control son optativos, y son
los siguientes:
FILSZ Establece una estimación del numero de registros aclasificar, lo cual hace mas eficiente el SORT.
FORMAT En el caso de que todas las claves sean del mismo formato,se puede extraer el tercer campo del cuartetoespecificandole con este parámetro, y dejando los cuartetoscon tres campos, tal y como se muestra en el siguienteejemplo que es el mismo que el anterior:
SORT FORMAT=CH,FIELD=(3,25,A,50,5,D),FILSZ=E1000
SKIPREC Con este parámetro se le dice al programa que no clasifique
los n primeros registros del fichero
EQUALS Con este parámetro se especifica que en el caso de queexistan varios registros con idéntica clave, se mantenga elorden de los registros del fichero de entrada.
NOEQUALS Con este parámetro se especifica que en el caso de queexistan varios registros con idéntica clave, no esnecesario mantener el orden de los registros del fichero deentrada.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 143/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 143 de 374
MERGE
Esta sentencia es idéntica a la sentencia SORT, con la salvedad de queen este caso se mezclan registros de hasta 16 ficheros en lugar de losregistros de un unico fichero.
Como particularidad de esta sentencia, las DDnames que especifican losficheros de entrada tienen por nombre :SORTINnn donde nn puede tomar los valores 01 a 16 debiendoespecificarse además en secuencia.
Podría usarse incluso la sentencia SORT, simplemente habría queconcatenar los distintos ficheros de entrada a la DDname SORTIN, peroel resultado no seria tan eficiente como con el uso de esta sentencia.
Aparte de esto, la sentencia MERGE se diferencia de la sentencia SORTen:
- FILSZ no es necesaria para estimar los registros deentrada- SKIPREC y EQUALS si se codifican son ignorados.
En cambio, esta sentencia tiene las siguientes reglas especiales:
- el parámetro RECFM de todos los ficheros asociados a lasDDname SORTINnn deben ser iguales.
- el parámetro LRECL para los registros de longitud fijadeben ser iguales.
- El parámetro BLKSIZE no tiene por qué coincidir en todoslos ficheros de entrada, pero en este caso, el fichero conel tamaño de bloque mayor deberá ser el asociado a laSORTIN01.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 144/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 144 de 374
RECORD
Esta sentencia establece el formato del registro de salida en el casode que se desee editar, es decir que no coincida con el de entrada.
El formato de los parámetros de esta ficha de control es:
RECORD LENGTH=(n1,n2,n3,n4,n5),TYPE=tipo
donde:
tipo puede tomar los valores siguientes:F : para registros de longitud fijaV : Para registros de longitud variable en EBCDICD : Para registros de longitud varaible en ASCII
n1 Establece la longitud del registro de entrada
n2 Establece la longitud del registro de salida
n4 Especifica la longitud de registro mínima
n5 Especifica la longitud modal, es decir para registros delongitud variable, es la longitud de registro mas normal.Este dato aumenta la eficiencia del sort.
ALTSEQ
Esta sentencia permite cambiar el valor, a efectos de clasificación dedeterminados caracteres.
El formato de esta sentencia es:
ALTSEQ CODE=hhiiALTSEQ CODE=(hhii,jjkk,..)
donde- HH representa el valor hexadecimal en EBCDIC del valor a cambiar- II representa el valor hexadecimal en EBCDIC del valor dado a HH
Ejemplo :
SORT FIELD=(3,25,CH,A,50,5,CH,D),FILSZ=E1000
ALTSEQ CODE=4161
Cambia la "A" mayúscula por la "a" minúscula.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 145/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 145 de 374
INCLUDE / OMIT
Esta sentencia especifica los campos que permiten seleccionar losregistros del fichero de entrada en un sort
El formato de esta sentencia es:
INCLUDE COND=(campo1,operador,campo2)
donde:
campo1 Especifica un campo del registro de entrada, el cual quedadefinido mediante el trió siguiente:
pos_ini,longitud,formato
operador Establece el operador mediante el que se compararan los doscampos.EQ equalNE not equalGT Greater thanGE greater than or equalLT less thanLE less than or equal
campo2 Puede ser un campo o una constante.En el caso de ser una constante hexadecimal se especificaentre comillas y precedida por la letra XEn el caso de ser una constante alfanumérica se especificaentre comillas y precedida por la letra C.
INCLUDE COND=(10,6,CH EQ, C'PRUEBA')INCLUDE COND=(10,1,BI NE, X'00110100')INCLUDE COND=(10,6,CH GT, 20,6,CH)
Las reglas aplicables a esta sentencia son
- Se permite el uso de tantos AND y OR como sean necesarios.- Solo se permite el uso de los formatos BI CH PD ZD O FI- Los campos a comparar deben encontrarse en los primeros 4092 bytesdel registro.
- Se permite la agrupación de condiciones con la siguiente secuenciade paréntesis: COND=(..(..(..))) pero no con las secuencias de lostipos siguientes: COND=(..(..)..(..)), o COND=(((...)))
- A falta de paréntesis, las condiciones AND son evaluadas antes quelas condiciones OR
- La longitud máxima de un campo es de 256 bytes.- Los campos con formato carácter son rellenados a blancos.- Los campos con formato numérico son rellenados a ceros.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 146/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 146 de 374
INREC / OUTREC
La sentencias INREC reformatea los registro de entrada antes deejecutar el sort, de modo que solo se ejecute la clasificación conaquellos campos que interesan. Mientras que la sentencia OUTRECformatea el registro de salida después de ejecutar el sort
La sentencia INREC reformatea los registros después de serseleccionados por INCLUDE u OMIT.
El formato de las sentencias SORT, MERGE, OUTREC o SUM esta referido,en el caso de contar con una sentencia INREC al resultado delreformateado.
El formato de esta sentencia es :
INREC FIELDS=(nX,pos_ini,longitud,alineación,...)
donde:
nX es opcional y representa n blancos
Pos_ini especifica la posición inical del registro de entrada
Longitud especifica el numero de octetos del campo.
Alineación es opcional y especifica el tipo de alineación, pudiendoser:H : Media palabraF : Palabra completaD : Doble palabraPor omisión se asume que no se desea alineación.
Ejemplo: Supuesto que el registro de entrada contiene:
1234567890ABCDEFGHIJ
Si se especifican las siguientes fichas de control:
INREC FIELDS=(5,6)OUTREC FIELDS=(5X,11,5,1,4,5X,5,6)
El registro de salida contendrá:
ABCDE1234_____567890
Las reglas aplicables a esta sentencia son
- El parámetro LRECL de la DDname SORTOUT tienen que especificarse sise cambia la longitud del registro.
- Si se realiza MERGE o una copia, se tiene que incluir una ficha decontrol RECORD
- Para registros de longitud variable, se anteponen al registro desalida 4 bytes especificando la longitud del registro.
- Para copiar en registros de longitud variable, la informacion quehay desde un byte determinado hasta el final, basta con especificar
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 147/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 147 de 374
la posición de comienzo, sin especificar longitud.
SUM
Esta sentencia hace que se escriba en el fichero de salida un unicoregistro que totalice los n registros de igual clave del fichero deentrada. Los registros son sumados después de la clasificación.
El formato de esta sentencia es:
(1) SUM FIELDS=(campo1[,campo2[,...]])(2) SUM FIELDS=NONE
donde:campo=pos_ini,longitud,formatoformato = BI,FI,PD,ZD o FL
El formato (2) se usa cuando no se desea totalizar nada, simplementese desea eliminar registros repetidos.
Las reglas aplicables a esta sentencia son
- No se pueden totalizar campos clave- No se pueden totalizar campos que se superponen.- Si se produce overflow, se trunca el resultado y no se produce error- Los campos a sumar deben encontrarse en los primeros 4096 bytes delregistro.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 148/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 148 de 374
2.11.3 IDCAMS
Este programa es invocado para el tratamiento de los ficheros de accesodirecto, VSAM e ISAM.
Puede usarse este programa para:- Mantener catálogos- Definir ficheros generacionales o GDGs- Copiar ficheros- Listar ficheros- Borrar ficheros
No siendo objetivo de este libro el estudio de estos tipos de ficheros,se pasa directamente a describir los comandos mas elementales de esteprograma:
Las DDnames que requiere este programa son :
//SYSPRINT Fichero de salida de mensajes del programa
//DDn DDnames para describir los ficheros de entrada y desalida.
//SYSIN DDname asociada al fichero que contiene lassentencias de control.
Las sentencias de control se codifican entre las columnas 2 y 72, y en elcaso de necesitar su continuación en otra línea, se especificaescribiendo un guión.
REPRO -INFILE(ENTRADA)
Catalogo
Los ficheros VSAM no pueden ser creados desde un JCL, como cualquierotro dataset, ya que requiere una serie de especificaciones que solo sele pueden dar a través de comandos AMS.
El primer paso para la creación de un fichero VSAM es la definición deun catalogo, la cual puede hacerse mediante el siguiente paso de JCL:
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 149/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 149 de 374
//********************************************** **
//CATALOGO EXEC PGM=IDCAMS//SYSPRINT DD SYSOUT=*//DDname1 DD UNIT=dispositivo,VOL=SER=volumen,DISP=OLD//SYSIN DD *DEFINE MASTERCATALOG -
(NAME (nombre_catalogo) -FILE(ddname1) -VOL(volumen) -
RECORDS(can_primaria can_secundaria) -MASTERPW(password) -UPDATEPW(password) -READPW(password) -
)/*
//********************************************** **
donde
DDname1 sirve para definir el volumen que contendrá el catalogo.Puede especificarse cualquier nombre de DD
RECORDS puede ser sustituido por CYLINDERS o TRAKS, pero en estecaso, las unidades especificadas como cantidades primarias ysecundarias se referiran no a numero de registros sino a launidad de medida indicada.
Después de crear el catalogo maestro,puede crearse catálogos deusuario. Estos catálogos se crean de forma similar a la del catalogomaestro, con la salvedad de que la sentencia DEFINE debe referenciaral catalogo maestro.
//********************************************** **//USERCAT EXEC PGM=IDCAMS//SYSPRINT DD SYSOUT=*//DDname1 DD UNIT=dispositivo,VOL=SER=volumen,DISP=OLD//SYSIN DD *DEFINE USERCATALOG -
(NAME (nombre_catalogo) -FILE(ddname1) -VOL(volumen) -
RECORDS(can_primaria can_secundaria) -MASTERPW(password) -UPDATEPW(password) -READPW(password) -CATALOG(nom_cat_maestro/password) -
)/*//********************************************** **donde son aplicables todas las consideraciones hechas en la anteriordefinición, incluida la de la definición de RECORDS.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 150/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 150 de 374
Para usar un catalogo de usuario en un JOB mediante la DDname JOBCAT
solo debe especificarse el DSN del catalogo y DISP=shr tal y como semuestra en el siguiente ejemplo.
//DESJMPJC JOB (123,456),'JMP-IDCAMS',MSGCLASS=(1,1)//JOBLIB DD DSN=DESJMP.LINKLIB,DISP=SHR//JOBCAT DD DSN=nombre_catalogo,DISP=SHR//PASO1 EXEC ...//STEPCAT DD DSN=nombre_catalogo,DISP=SHR...
Una vez creados los catálogos, debe asignarse (alocarse) el espacioque será usado por todos los ficheros VSAM del catalogo, lo cual sehace siguiendo la siguiente estructura:
//********************************************** **//ESPACIO EXEC PGM=IDCAMS//SYSPRINT DD SYSOUT=*//DDname1 DD UNIT=dispositivo,VOL=SER=volumen,DISP=OLD//SYSIN DD *DEFINE SPACE -
(VOLUME(volumen) -FILE(ddname1) -RECORDS(can_primaria can_secundaria) -RECORDSIZE(media máximo) -CATALOG(nom_cat_maestro/password) -
)/*//********************************************** **
También aquí es aplicables la consideración realizada en la primeradefinición sobre el parámetro de palabra clave RECORDS.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 151/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 151 de 374
Por ultimo, una vez reservado el espacio, debe reservarse el espacio aasignar a un fichero concreto. Esto es lo que realiza la siguienteestructura:
//********************************************** **//FICHERO EXEC PGM=IDCAMS//SYSPRINT DD SYSOUT=*//SYSIN DD *DEFINE CLUSTER -
(NAME(nombre_fichero) -VOLUME(volumen) -INDEXED -RECORDS(can_primaria can_secundaria) -RECORDSIZE(media máximo) -
FREESPACE(intervalo total) -KEYS(longitud posición) -UPDATEPW(password) -READPW(password) -ATTTEMPTS(0) -
)CATALOG(nom_cat_maestro/password)
/*//********************************************** **
donde :
RECORDS Admite los mismos comentarios de todos los DEFINEsanteriores.
RECORDSIZE especifica los tamaños medios y máximo de losregistros. Para el caso de registros de longitud fija,estos valores deben coincidir.
FREESPACE Este parámetro especifica el porcentaje que se debedejar como espacio libre en el intervalo de control(interval) y el porcentaje que se debe dejar comoespacio libre del fichero (total)
ATTEEMPTS(0) Solo debe codificarse en el caso de que se codifiquelos parámetros UPDATEPW O READPW
Para listar las entradas de un catalogo puede usarse el comando de
TSO: LISTCAT CATALOG(nombre_catalogo/password)
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 152/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 152 de 374
Fichero generacional (GDG)
Para poder usar un grupo de ficheros GDG o generacionales antes debedefinirse este mediante una estructura similar a la siguiente:
//********************************************** **//gdg EXEC PGM=IDCAMS//SYSPRINT DD SYSOUT=*//SYSIN DD *DEFINE GDG -
(NAME (nombre_fichero) -LIMIT(numero) -[EMPTY] -[SCRATCH] -
) -CATALOG(nombre_catalogo/password)
/*//********************************************** **
donde:
NAME este parámetro de palabra clave sirve para especificar elnombre del fichero genérico
LIMIT Establece el numero de versiones a mantener. Debe estarcomprendido en el rango 1-255
EMPTY Este parámetro es opcional, y en el caso de codificarsedescataloga todos los ficheros cuando se supera el limite.
NOEMPTY Este parámetro es el que se asume en el caso de nocodificarse EMPTY; y especifica que en el caso de superarseel limite, descatalogue la versión mas vieja.
SCRATCH Este parámetro es opcional, y lo que especifica es que enel caso de que se codifique, el fichero al descatalogarseque se borre.
NOSCRATCH Este parámetro es el que se asume en el caso de nocodificarse SCRATCH, y lo que significa es que cuando unaversión se descatalogue, que se mantenga, es decir que no
se borre.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 153/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 153 de 374
Copiar ficheros
También puede usarse el programa IDCAMS para realizar las siguientesacciones de copia de ficheros:
- Copiar fichero secuencial no-VSAM sobre fichero VSAM- Copiar VSAM sobre VSAM- Copiar VSAM sobre secuencial no-VSAM- Copiar fichero ISAM o secuencial no-VSAM sobre fichero VSAM
La ficha de control que se debe incluir en SYSIN para ejecutar estacopia es:
REPRO Este comando es el que especifica que se va a realizar una
acción de copiado. Los parámetros que admite son:
INFILE(ddname_fichero_fuente)OUTFILE(ddname_fichero_destino)
Otros parámetros opcionales son:
COUNT(n1) especifica que se copien los n primerosregistros.
SKIP(n2) especifica que no se copien los n2 primerosregistros.
//**************************************************//* REPRO (CARGA DESDE SECUENCIAL)//* - - - - - - - - - - - - - - - - - - - - -//PASO1 EXEC PGM=IDCAMS//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR//SYSPRINT DD SYSOUT=*//SYSOUT DD SYSOUT=*//INVOL1 DD DSN=DESJMP.PRUEBA,DISP=SHR//OUTVOL1 DD SYSOUT=X//SYSIN DD *REPRO INFILE(INVOL1) OUTFILE(OUTVOL1) COUNT(50)
/*//**************************************************
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 154/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 154 de 374
Listar ficheros
Otro uso del programa IDCAMS es para imprimir ficheros. En este caso laestructura del paso a incluir en el JOB se ajusta a la siguiente:
//********************************************** **//LISTAR EXEC PGM=IDCAMS//SYSPRINT DD SYSOUT=A,DEST=RMT55//entrada DD DSN=...//SYSIN DD *INFILE(entrada) formato
/*//********************************************** **
donde:
entrada referencia el fichero a listar
formato especifica el formato en el que deseamos realizar laimpresión del fichero. Puede tomar los siguientes valores:
CHAR en formato carácterHEX en formato hexadecimal - cada carácter 2 bytes.DUMP Cada registro se imprime con los dos formatos.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 155/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 155 de 374
Borrar ficheros
Por ultimo, también puede usarse el programa IDCAMS para borrarficheros.
La ficha de control que se debe incluir en SYSIN para ejecutar esteborrado puede ser cualquiera de las siguientes:
DELETE(dsn) Esta sentencia borra el fichero cuyo DSN seespecifica como argumento.
FILE(ddname) Esta sentencia borra el fichero asociado a la DDnameespecificada.
PURGE Esta sentencia borra todas los ficheros cuya fechade expiración se haya sobrepasado.
ERASE Esta sentencia borra y sobreescribe ceros binariossobre los escritos borrados para que no se puedarecuperar.
SCRATCH Esta sentencia es obligatoria para borrar ficherosno-VSAM.
CATALOG(nom_cat) esta sentencia especifica el nombre del catalogo
//********************************************** **//BORRAR01 EXEC PGM=IDCAMS//SYSPRINT DD DUMMY//SYSIN DD *DELETE DESJMP.PRUEBA.BORRADOSET MAXCC=0
//********************************************** **
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 156/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 156 de 374
2.11.4 PRINTDS (comando de TSO)
Este no es un programa normal, es un comando de TSO, y se usa paraimprimir un fichero secuencial o particionado.
El hecho de incluirlo en este capitulo es debido a la importancia quetiene en el entorno de desarrollo, pues como ya se ha dicho es elprograma invocado para listar con formato cualquier fichero.
Cuando el fichero a imprimir es un particionado, se puede imprimir, o losmiembros (MEMBERS) o el directorio (DIRECTORY) o ambos (ALL). Por defectose imprimen todos los miembros del PDS.
También pueden añadirse títulos al listado generado, conteniendo estetitulo el nombre del Dataset, la fecha, hora y el numero de página
impresa.
Los posibles opciones son:
DATASET Estas opciones, sinónimas, especifican el nombre físico delDA fichero a ser impreso.
TODATASET Estas opciones, sinonimas, direccionan la salida a un nuevoTODSNAME fichero. No es necesario que exista este fichero, ya que si no
existe este comando le crea.
PR DATASET('DESJMP.SALIDA') TODATASET('DESJMP.TMP')
FILE Estas opciones sinonimas se usan cuando en lugar deDDNAME especificar el nombre físico del fichero, se usa el nombre
lógico a DDname.
PR FILE(SALIDA) TODATASET('DESJMP.TMP')
COLUMNS Esta opción se usa para especificar las columnas del ficherode entrada que se desean imprimir en salida. Las columnas seespecifican dando el numero de los octetos inicial y final, yseparando cada grupo por blancos o por comas, tal y comomuestra el siguiente ejemplo.
PRINTDS DATASET('DESJMP.TMP') COLUMNS(1:71 86:126)
En salida cada grupo especificado se va adosando uno acontinuación del otro. En el ejemplo dado las columnas 86 a126 se escriben en las columnas 72 y siguientes.
LINES Esta opción permite especificar los registros del fichero queserán escritos. En este caso debe especificarse la línea decomienzo y de final, yendo ambas separadas por una coma.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 157/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 157 de 374
TRUNCATE Esta opción permite especificar la columna en la que se
truncara el registro de salida.
FOLD Esta opción es usada para cortar los datos en la columnaespecificada. En este caso los datos continúan escribiéndoseen sucesivas líneas.
PAGELEN Este parámetro se usa para especificar el numero de líneas queserán impresas en cada página.
LMARGIN Este parámetro se usa para especificar el margen izquierdo. Suvalor indica el numero de columnas a usar como margen.
TMARGIN Esta opción se usa para especificar el numero de líneas que sedejan como margen superior en la página impresa.
BMARGIN Esta opción se usa para especificar el numero de líneas que sedejan como margen inferior en la página impresa.
COPIES Esta opción se usa para especificar el numero de copias que sedesean obtener del fichero de entrada.
El siguiente ejemplo muestra cómo ejecutar el programa PRINTDS paraimprimir un fichero por una impresora determinada.
//*=====================================================================//* IMPRIMIR TEMPORAL CON MARGEN//*=====================================================================//IMPRIMIR EXEC PGM=IKJEFT01//*//SYSTSPRT DD SYSOUT=*//SYSTSIN DD *PRINTDS DATASET('DESJMP.TMP') DEST(RMT55) CLASS(I) +COLUMNS(1:71 86:126) LMARGIN(15)
/*
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 158/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 158 de 374
2.12 Ejemplo 1: Listar un directorio (IEBPTDIR)
Directorio a listar:****************************************************************************EDIT --- DESJMP.JMP.ESKELETO ---- --------------------- ROW 00001 OF 00005COMMAND ===> SCROLL ===> CSR
NAME VV.MM CREATED CHANGED SIZE INIT MOD IDINTUTIPS 01.09 95/01/11 95/05/10 17:26 19 19 0 DESJMPJMPINT53 01.13 94/09/27 95/03/28 10:24 38 19 37 DESJMPJMP16500 01.00 95/03/15 95/03/15 09:19 25 25 0 DESJMPPSSEC 01.01 95/03/16 95/03/16 18:53 19 19 0 TEST33SYSMAIN 01.02 95/01/09 95/01/09 19:45 17 17 0 DESJMP**END**
****************************************************************************
Jcl para listar directorio:****************************************************************************EDIT ---- DESJMP.JMP.JCL(IEBPTPCH) - 01.03 --------------- COLUMNS 001 072COMMAND ===> SCROLL ===> CSR****** ****************************** TOP OF DATA ************************000001 //XXXXXXIE JOB (123,DES),'JMP-PRU',CLASS=T,MSGCLASS=X,000002 // NOTIFY=XXXXXX,MSGLEVEL=(1,1),RESTART=*000003 //* - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - -000004 //* LISTAR DIRECTORIO000005 //* - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - -000006 //PASO1 EXEC PGM=IEBPTPCH000007 //STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR000008 //SYSPRINT DD SYSOUT=*000009 //* ----------- FICHERO DE ENTRADA000010 //SYSUT1 DD DSN=DESJMP.JMP.ESKELETO,000011 // DISP=SHR,DCB=(RECFM=U,BLKSIZE=256)000012 //* ----------- FICHERO DE SALIDA000013 //SYSUT2 DD SYSOUT=X,DCB=LRECL=43000014 //SYSIN DD *000015 PUNCH TYPORG=PS000016 //****** **************************** BOTTOM OF DATA ***********************
Salida de la ejecucion, y forma de pasar a modo hexadecimal:***************************************************************************SDSF OUTPUT DISPLAY DESJMPIE JOB12636 DSID 4 LINE 17 COLUMNS 02- 81COMMAND INPUT ===> SET HEX ON SCROLL ===> CSR
IEF375I JOB /DESJMPIE/ START 95145.1200IEF376I JOB /DESJMPIE/ STOP 95145.1200 CPU 0MIN 00.03SEC SRB 0MINPRINT/PUNCH DATA SET UTILITYPUNCH TYPORG=PS
EOF ON SYSINEND OF DATA FOR SDS OR MEMBER\INTUTIPS n n DESJMPJMPINT53 m n " DESJMPJMP16500 n n DESJMPPSSEC n ^ n ^ TEST33SYSMAIN n n DESJMP
****************************************************************************
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 159/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 159 de 374
Salida en formato hexadecimal:
****************************************************************************SDSF OUTPUT DISPLAY DESJMPIE JOB12636 DSID 4 LINE SET COMMANDCOMPLETECOMMAND INPUT ===> SCROLL ===> CSR----------------------------------------------------------------------------END OF DATA FOR SDS OR MEMBER4CDC4DC4CCEC4CDD4ECE4DD4DCDCCD44444444444444444444444444444444444444444444440554066041310669024206904542590000000000000000000000000000000000000000000000----------------------------------------------------------------------------\INTUTIPS n n DESJMP0ECDEEECDE000000010901091012010100EEDCFE4444444444444444444444444444444444440095343972023F1907051F053F76030300327782000000000000000000000000000000000000----------------------------------------------------------------------------JMPINT53 m n " DESJMP
44DDDCDEFF001000030920090712020102EEDCFE4444444444444444444444444444444444440014795353019F1D03047F058F04060305327782000000000000000000000000000000000000----------------------------------------------------------------------------JMP16500 n n DESJMP
44DDDFFFFF002000010904090401010100EEDCFE4444444444444444444444444444444444440014716500006F1007057F057F99090900327782000000000000000000000000000000000000----------------------------------------------------------------------------PSSEC n ^ n ^ TEST33
44DEECC444000000040905090515010100EEDCFF4444444444444444444444444444444444440072253000011F1101057F057F83030300327733000000000000000000000000000000000000----------------------------------------------------------------------------SYSMAIN n n DESJMP
44EEEDCCD4001000050909090914010100EEDCFE4444444444444444444444444444444444440028241950004F1207050F050F95010100327782000000000000000000000000000000000000----------------------------------------------------------------------------
44FFFFFFFF00000000000000000000000000000000444444444444444444444444444444444400FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000----------------------------------------------------------------------------00004444444444444444444444444444444444444444444444444444444444444444444444440000000000000000000000000000000000000000000000000000000000000000000000000000----------------------------------------------------------------------------****************************************************************************DSLIST -- DESJMP.JMP.ESKELETO ------------------------- ROW 00001 OF 00005COMMAND ===> SCROLL ===> CSR
NAME RENAME VV.MM CHANGED SIZE INIT MOD IDINTUTIPS 01.09 95/05/10 17:26 19 19 0 DESJMPJMPINT53 01.13 95/03/28 10:24 38 19 37 DESJMPJMP16500 01.00 95/03/15 09:19 25 25 0 DESJMPPSSEC 01.01 95/03/16 18:53 19 19 0 TEST33SYSMAIN 01.02 95/01/09 19:45 17 17 0 DESJMP**END**
****************************************************************************
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 160/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 160 de 374
2.13 Ejemplo 2: Listado de la VTOC y el directorio de un PDS IEHLIST.1
//XXXXXXIE JOB (123,DES),'JMP-PRU',CLASS=T,MSGCLASS=X,// NOTIFY=XXXXXX,MSGLEVEL=(1,1)//* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//* LISTAR VTOC DE LOS DISCOS ESPECIFICADOS EN DDXX//* HAY QUE REPETIR LA SYSIN SI SE QUIERE MAS DE UN DISCO//* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//LVTOC EXEC PGM=IEHLIST,PARM='LINECNT=56'//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR//SYSPRINT DD SYSOUT=*//DD1 DD DISP=SHR,UNIT=3390,VOL=SER=GEST00//SYSIN DD *LISTVTOC VOL=3390=GEST00,DSN=DESJMP.JMP.ESKELETOLISTPDS VOL=3390=GEST00,DSN=DESJMP.JMP.ESKELETO
/*1 J E S 2 J O B L O G -- S Y S T E M C 0 8 3 -- N017.01.13 JOB10807 IRR010I USERID DESJMP IS ASSIGNED TO THIS JOB.17.01.14 JOB10807 ICH70001I DESJMP LAST ACCESS AT 17:00:21 ON THURSDAY, MAY17.01.14 JOB10807 $HASP373 DESJMPIE STARTED - INIT 46 - CLASS T - SYS C08317.01.14 JOB10807 IEF403I DESJMPIE - STARTED - TIME=17.01.1417.01.14 JOB10807 - --TIMINGS (MINS.)-17.01.14 JOB10807 -JOBNAME STEPNAME PROCSTEP RC EXCP CPU SRB17.01.14 JOB10807 -DESJMPIE LVTOC 00 30 .00 .00 .17.01.14 JOB10807 IEF404I DESJMPIE - ENDED - TIME=17.01.1417.01.14 JOB10807 -DESJMPIE ENDED. NAME-JMP-PRU-4 TOTAL CPU TIME=17.01.14 JOB10807 $HASP395 DESJMPIE ENDED
0------ JES2 JOB STATISTICS ------- 25 MAY 2001 JOB EXECUTION DATE- 18 CARDS READ- 69 SYSOUT PRINT RECORDS- 0 SYSOUT PUNCH RECORDS- 4 SYSOUT SPOOL KBYTES- 0.01 MINUTES EXECUTION TIME
1 //DESJMPIE JOB (123,DES),'JMP-PRU',CLASS=T,MSGCLASS=X,// NOTIFY=DESJMP,MSGLEVEL=(1,1),// TIME=5/*JOBPARM TIME=30//*** JOB SUBMITIDO POR DESJMP FECHA: 95.145 HORA: 17:01:13//***//* - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//* LISTAR VTOC DE LOS DISCOS ESPECIFICADOS EN DDXX//* HAY QUE REPETIR LA SYSIN SI SE QUIERE MAS DE UN DISCO//* - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2 //LVTOC EXEC PGM=IEHLIST,PARM='LINECNT=56'3 //STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR4 //SYSPRINT DD SYSOUT=*5 //DD1 DD DISP=SHR,UNIT=3390,VOL=SER=GEST006 //SYSIN DD *
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 161/373
TSO para desarrolladores: JCL Autor: José M. Peco
Página 161 de 374
ICH70001I DESJMP LAST ACCESS AT 17:00:21 ON THURSDAY, MAY 25, 2001IEF236I ALLOC. FOR DESJMPIE LVTOCIEF237I 692 ALLOCATED TO STEPLIBIEF237I JES2 ALLOCATED TO SYSPRINTIGD103I SMS ALLOCATED TO DDNAME DD1IEF237I JES2 ALLOCATED TO SYSINIGD103I SMS ALLOCATED TO DDNAME SYS00001IGD104I DESJMP.JMP.ESKELETO RETAINED, DDNAME=SYS00001IEF142I DESJMPIE LVTOC - STEP WAS EXECUTED - COND CODE 0000IEF285I SYS1.LINKLIB KEPTIEF285I VOL SER NOS= MVSR9Y.IEF285I DESJMP.DESJMPIE.JOB10807.D0000102.? SYSOUTIGD104I SYS95145.T170114.RA000.DESJMPIE.R0216853 RETAINED, DDNAME=DD1IEF285I DESJMP.DESJMPIE.JOB10807.D0000101.? SYSIN
IEF373I STEP /LVTOC / START 95145.1701IEF374I STEP /LVTOC / STOP 95145.1701 CPU 0MIN 00.03SEC SRB 0MINIEF375I JOB /DESJMPIE/ START 95145.1701IEF376I JOB /DESJMPIE/ STOP 95145.1701 CPU 0MIN 00.03SEC SRB 0MIN
1 SYSTEMS SUPPORT UTILITIES---IEHLIST-DATE: 2001.145 TIME: 17.01.14
CONTENTS OF VTOC ON VOL GEST00 <THIS IS AN SMS MANAGED VOLUME>----------------DATA SET NAME--------------- CREATED DATE.EXP FILEDESJMP.JMP.ESKELETO 1994.270 00.000 PARTITIONED S
1 SYSTEMS SUPPORT UTILITIES---IEHLIST-DATE: 2001.145 TIME: 17.01.14DIRECTORY INFO FOR SPECIFIED PDS ON VOL GEST00DESJMP.JMP.ESKELETO
0 MEMBERS TTRC VARIABLE USER DATA ---(USER DATA AND TTRINTUTIPS 0002030F 0109001700 95011F0095 130F172600 130013000JMPINT53 0001190F 010D003300 94270F0095 087F102400 260013002JMP16500 0000260F 0100001700 95074F0095 074F091900 190019000PSSEC 0001010F 0101004100 95075F0095 075F185300 130013000SYSMAIN 0000140F 0102005700 95009F0095 009F194500 110011000
OF THE 00010 DIRECTORY BLOCKS ALLOCATED TO THIS PDS, 00009 ARE(IS) COMPLETELY
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 162/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 162 de 374
Tema 3 : CLIST
3.1 Introducción
CLIST significa lista de comandos. pero esa palabra puede tener dossignificados:
- Lenguaje de alto nivel, interprete de comandos propios y de TSO.
- Fichero secuencial que contiene el procedimiento, o conjunto decomandos a ejecutar.
En si, este lenguaje por su funcionalidad es parecido al JCL por lacapacidad que tiene para hacer uso de los recursos del sistema, pero se
diferencia del JCL en que no envía ningún trabajo al JES para su ejecuciónya que él puede realizar este cometido directamente, de forma interactiva,enviando mensajes al usuario y tratando la informacion que este introduce enel sistema.
Como se vera a lo largo de este tema, el lenguaje de clist es un lenguajesencillo, pero no por ello deja de ser potente. Puede hacer uso de todos loscomandos estándar del TSO, pero, para poder ejecutar un procedimiento declist solo es necesario estar en una sesión de TSO, aunque no es necesarioestar directamente en ISPF, ya que desde cualquier lenguaje de programaciónde aplicaciones, COBOL por ejemplo, se puede hacer una llamada y ejecutar enconsecuencia, un procedimiento escrito en lenguaje de CLIST.
Una de las ventajas que tiene la ejecución de una clist, es la de tenerprogramadas aquellos comandos que mas habitualmente se usan en el sistema,evitando los errores en el tecleo de nombres largos.
Por ultimo, también cabe destacar que este lenguaje de CLIST se puede usarpara escribir aplicaciones, si bien las sentencias para la manipulación dedatos, o de bifurcación no gozan de la flexibilidad que tienen en otroslenguajes orientados al manejo de datos.
Una combinación muy interesante es la que integra este lenguaje con lospaneles de ISPF para crear diálogos.
Por otra parte, al ser un lenguaje interprete, no necesita de compilaciónprevia, por lo que una vez escrita la secuencia de comandos a ejecutar, esta
puede ejecutarse directamenteComo cualquier lenguaje de programación, cada una de las líneas de queconsta un fichero de comandos o CLIST, configura lo que se denomina unasentencia, la cual puede:
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 163/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 163 de 374
- Asignar valores a variables
- Hacer uso de funciones- Ejecutar comandos de TSO- Alocar ficheros- Controlar ficheros en entrada y/o salida
En consecuencia, a lo largo de este tema, se definirán los distintoselementos de este lenguaje:
- Variables- Funciones- Control de errores- Tratamiento de ficheros
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 164/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 164 de 374
3.2 Librerías de CLISTs
Como ya se ha dicho en la introducción, una clist no es mas que un ficherosecuencial, y en consecuencia se almacena en el sistema como tal. Noobstante, y con objeto de facilitar grandemente, entre otras, las tareasmecánicas del desarrollo, el sistema entiende distintos defectos para laejecución de CLISTs.
El nombre del fichero o dataset que contiene la clist, ya sea un ficheroPDS, o secuencial, puede tener hasta 44 caracteres, y seguir las reglasgenerales para la construcción de los nombres de ficheros.
Se recomienda usar ficheros particionados para almacenar CLISTs, entreotras, por las siguientes razones:
- Normalmente las CLIST son ficheros pequeños, y en consecuencia, lagestión de su almacenamiento físico es gestionada mejor en unalibrería que en un fichero secuencial.
- Permite la agrupación lógica de CLISTs.
El registro del fichero que contiene una CLIST, debe cumplir los siguientesrequisitos:
- Si son de longitud fija: no puede superar los 255 bytes de longitud,reservándose los últimos 8 bytes de la longitud definida para elnumero de secuencia.
- Si son de longitud variable: pueden tener una longitud de hasta 259bytes, ya que el sistema coloca a los ficheros de longitud variable 4bytes en la cabecera del registro para especificar la longitud delmismo. En este caso, la secuencia se especifica en los 8 bytessiguientes a los de longitud.
En general, se recomienda el uso de del formato de longitud fija, no pornada en especial, sino porque admite tanto los ficheros numerados (NUMBERON) como los no numerados (UNNUM).
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 165/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 165 de 374
3.3 Como se invoca a un procedimiento de CLIST
Un procedimiento de comandos, o clist, puede invocarse por cualquiera de losmodos que se indican a continuación:
3.3.1 De forma explícita:
Invocando un procedimiento mediante la palabra clave EXEC.
Los siguientes ejemplos ilustran esta forma de invocar a la clist:
COMMAND ===> tso ex 'DESJMP.clist.jmp(lnatddm)' 'test'COMMAND ===> tso ex 'DESJMP.clist.jmp(lnatddm)','test'
En estos dos casos, se invoca la misma clist pasando como parámetro la
cadena TEST.
Los siguientes ejemplos muestran como el propio TSO nos indica cual es eldefecto que entiende cuando se invoca una clist erróneamente.
COMMAND ===> tso ex (lnatxxx)
IKJ56520I MEMBER LNATXXX NOT IN DATASET JMPDES.CLIST***
En este caso, el sistema busca el dataset 'JMPDES.CLIST(LNATXXX)' y comono le encuentra, devuelve el mensaje que se acompaña.
COMMAND ===> tso ex clist.jmp(lnatddm)
IKJ56228I DATA SET JMPDES.CLIST.JMP.CLIST NOT IN CATALOG OR CATALOG CANNOT BE ACCESSED***
En este ejemplo se espera que el sistema anteponga el prefijo del usuariotal y como hace con cualquier nombre de fichero, pero el resultado esotro, ya que por defecto el sistema no solo antepone el prefijo definidoen el PROFILE del usuario, sino que también pone como sufijo de lalibrería que es invocada con EXEC el cualificador 'CLIST', conindependencia de que se llame a un procedimiento que sea miembro de unParticionado, o que se encuentre en un fichero secuencial, como muestrael siguiente ejemplo.
COMMAND ===> tso ex JMPCOMMAND ===> tso ex 'JMPDES.JMP.CLIST'
En ambos casos estamos invocando al mismo procedimiento, suponiendo queel usuario tenga definido JMPDES como PREFIX en su perfil. (Ver anexodedicado al PROFILE del usuario)
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 166/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 166 de 374
3.3.2 De forma implícita
En este caso, se invoca procedimientos que se encuentran en las libreríasalocadas.
Existe una librería especial de procedimientos clist, la SYSPROC, que sealoca o asigna al usuario, al hacer el LOGON de TSO, y que contieneaquellos procedimientos generales de la instalación para uso común.
Además de esta, el usuario puede alocar su propia librería utilizando loscomandos de TSO:
- ALLOC para alocar la librería
- ALTLIB para asignarla como librería de comandos del usuario, tal
y como muestra el siguiente ejemplo.
/* ------------------------------------------ LLAMADA PANEL INICIAL *//* */
ALLOCATE FI(SYSUPROC) DS('DESJMP.OPER.OPERCLIB') SHR REUSEALTLIB ACTIVATE USER (CLIST)ISPEXEC SELECT PANEL(MENU000P)ALTLIB DEACTIVATE USER (CLIST)EXIT
/* */
TSO para la búsqueda del comando a ejecutar, examina todas las libreríasde CLIST alocadas en el sistema, en el orden inverso al de su alocacion,lo cual quiere decir que se puede anular una clist de uso general,creando una clist con el mismo nombre que la de uso general, de forma quecuando se mande ejecutar dicho procedimiento se ejecute antes el delusuario que el general.
Cuando se desee ejecutar una clist de la librería SYSPROC, y además, sedesea que el sistema solo busque en SYSPROC, se debe anteponer alcomando el símbolo %
El siguiente ejemplo muestra la forma de invocar un procedimiento declist usando la forma implícita, y además buscando solo en la libreríaSYSPROC. (forma implícita extendida)
COMMAND ===> tso ex %NATDESA
Este procedimiento establece el entorno de NATURAL-DESARROLLO y nosintroduce en el.
Para conocer las librerías que se encuentran alocadas, es decir,definidas o asignadas en el entorno de cada usuario, se puede ejecutar elcomando de TSO: LISTALL con la opción STATUS.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 167/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 167 de 374
3.3.3 Desde READY
Cuando un usuario ejecuta el procedimiento de logon, esta puede dejarle enel primer panel de ISPF o bien le deja en el sistema, apareciendo elmensaje READY en el terminal. Este es el caso. Desde esta pantalla sepuede ejecutar el comando ISPSTART o el comando EXEC con formatoexplícito.
El formato de este comando es el siguiente:
ISPSTART CMD(nombre_clist)
3.3.4 Desde otra clist
Ejecutando el comando EXEC o el comando ISPEXEC para invocar al servicioSELECT de ISPF con la opción CMD tal y como se vera en el temacorrespondiente.
Los formatos de ambas llamadas se ajustan a los siguientes:
- EXEC '&nomclist'- ISPEXEC SELECT CMD('&nomclist')
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 168/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 168 de 374
3.3.5 Desde un programa de aplicacion
Casi todos los programas de aplicacion disponen de la sentencia CALL parapoder invocar y ejecutar programas o rutinas escritas en un lenguajedistinto al que hace la llamada.
Este es el caso de COBOL y PL/I, que pueden invocar el procedimiento declist mediante la llamada a cualquiera de las rutinas siguientes:
COBOL: - CALL 'ISPEXEC' USING longitud parametro1- CALL 'ISPLINK' USING servicio longitug parametro2
PL/I - CALL ISPEXEC (longitud,parametro1)- CALL ISPLINK ('SELECT',longitud,parametro2)
donde
LONGITUD especifica la longitud del parámetro (1 o 2) que le sigueen formato PIC 9(6)
PARAMETRO1 Este parámetro debe especificar el servicio y el nombre dela clist que se desea ejecutar, debiendo ajustarse sucontenido a:
SELECT CMD(nomclist)
PARAMETRO2 Este parámetro debe especificar solo el nombre del comandoa ejecutar ya que el nombre del servicio invocado seespecifica en el primer parámetro, por lo que su contenidodebe ajustarse a:
CMD(nomclist)
El siguiente ejemplo escrito en COBOL muestra una forma practica derealizar esta llamada:
...WORKING-STORAGE SECTION
77 SERVICIO PIC X(8) VALUE 'SELECT'.77 LONGITUD PIC 9(6) VALUE 70 COMP.77 PARAMETRO PIC X(70)
...
PROCEDURE DIVISION...MOVE 'CMD(DESJMP.JMP.CLIST)' TO PARAMETRO.CALL 'ISPLINK' USING SERVICIO LONGITUD PARAMETRO....MOVE 'SELECT CMD(DESJMP.JMP.CLIST)' TO PARAMETROCALL 'ISPEXEC' USING LONGITUD PARAMETRO....
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 169/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 169 de 374
Otro ejemplo que ilustra esta llamada le constituye el siguiente ejemplo,
mediante el cual se invoca a una clist, concretamente la raíz de lasutilidades desarrolladas en este libro, desde el entorno de NATURAL.
************************************************************* Programa : JMP-ISPP* Autor : JMP* Fecha : 28/10/94* Objetivo : Ejecutar utilidades TSO desde NATURAL************************************************************DEFINE DATA LOCAL
1 W-SERVICIO (A8) INIT <'SELECT'>1 W-LONGITUD (I4) INIT <50>1 W-COMANDO (A50)
END-DEFINE
*INPUT MARK 2 AND SOUND ALARM08/5 '***********************************************************'09/5 '* EJECUTAR PROCEDIMIENTO DE CLIST DESDE ENTORNO NATURAL *'10/5 '***********************************************************'11/5 ' '12/5 '* COMANDO:' *OUTIN W-COMANDO13/5 ' '14/5 '==========================================================='15/5 'PF3: RETORNO PF4:MENU DE UTILIDADES DE TSO'
*DECIDE ON FIRST VALUE OF *PF-KEY
VALUE 'PF3' RESET W-COMANDOVALUE 'PF4' MOVE 'EX '''Jmpdes.JMP.CLIST''' TO W-COMANDONONE VALUE IGNORE
END-DECIDEIF W-COMANDO = ' '
ESCAPE ROUTINEEND-IF
*CALL 'ISPLINK' W-SERVICIO W-LONGITUD W-COMANDOEND
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 170/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 170 de 374
3.4 Variables
Puesto que podemos considerar una Clist como un programa, necesitaremos usarvariables para controlar su flujo. Este es el objetivo de este apartado:
- conocer cuales son las variables del sistema que podemos utilizar,- cómo se puede definir una variable ; y- cómo se pueden cargar las variables de usuario.
3.4.1 Variables de control
Las siguientes variables contienen el valor que se especifica, y pueden ono modificarse por el procedimiento que se ejecuta según se especifica enla tercera columna.
&SYSUID Contiene la identificación del usuario. no
&SYSPROC Contiene el nombre del procedimiento de LOGON que nose ejecuto cuando se conecto al sistema.
&SYSPREF Prefijo de los Datasets. no
&LASTCC Ultimo código de retorno devuelto por la ultima sifunción ejecutada.
&MAXCC Máximo código de retorno devuelto si
&SYSICMD Nombre del procedimiento invocado 'implícitamente' nopor el usuario. Si la invocacion fue de formaexplícita, su contenido esta a blancos.
&SYSSCAN limita al numero contenido en esta variable, el sinumero de sustituciones simbólicas que realizaraTSO en una línea.
&SYSDLM Delimitador de terminal usado con TERMIN no
&SYSDVAL Parámetros de terminal usado con READDVAL si
&SYSNEST Indicador de nivel de anidamiento no
&SYSPCMD Nombre del comando primario actual no
&SYSSCMD Nombre del subcomando actual no
&SYSDATE Fecha actual no
&SYSTIME Hora actual no
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 171/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 171 de 374
&SYSOUTLINE&n Esta variable se usa cuando se quiere capturar la no
salida de un comando.Es una variable compuesta por la cadena SYSOUTLINEy un contador que hace referencia a la línea quealmacena el sistema.
&SYSOUTTRAP Numero de líneas a capturar si
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 172/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 172 de 374
3.4.2 Variables de usuario simples
Las variables de usuario, para su definición, siguen las normasgenerales, es decir nombres que comiencen por un & seguido por un máximode 31 caracteres alfanuméricos, debiendo ser el primero alfabético.
Para asignar un valor a una variable se usa la sentencia SET, quedando apartir de ese momento definida la variable localmente para la Clist quese esta ejecutando.
Por ejemplo: SET &CONTA = 0SET &FICHERO = ALIAS.JMP.LISTDSSET &FICHERO1 = &SYSUID..JMP.LISTDS
en este ejemplo, se asigna:
- el valor numérico 0 a la variable CONTA- el valor alfanumérico 'ALIAS.JMP.LISTDS' a la variable FICHERO- el valor resultante de concatenar el contenido de la variable del
sistema &SYSUID (supongamos que es JMPDES) con la cadena '.JMP.LISTDS',por lo que estaríamos asignando el valor 'JMPDES.JMP.LISTDS' a lavariable FICHERO1.
Es de resaltar el hecho de que no existe diferencia entre continentespara variables numéricas y alfanuméricas; incluso para la asignación devalores no es necesario emplear los apóstrofes o las comillas paradiferenciar su contenido.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 173/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 173 de 374
3.4.3 Variables de usuario compuestas
Una variante en la forma de definir nombres de variables, es decir,continentes, consiste en concatenar cadenas de caracteres con contenidosde variables.
Por ejemplo: SET &CONTA = 0SET &SALIDA&CONTA = &FICHERO
En este ejemplo, se asigna el contenido de la variable FICHERO a lavariable SALIDA0, nombre que se ha formado concatenando la cadena SALIDAy el contenido de la variable CONTA.
3.4.4 Uso del doble & (&&) : Variables anidadas
En el punto anterior se ha visto como configurar el nombre de unavariable utilizando el contenido de otra variable mediante el uso de un&. En este punto se expone como asignar a una variable el valor contenidoen el continente definido por otra variable. Esto se hace usando el doble& al principio de la variable emisora. Es decir:
Por ejemplo: SET &CONTA = 0SET &ENTRADA&CONTA = ESTO_ES_UN_EJEMPLOSET &NOMBRE = ENTRADA&CONTASET &SALIDA&CONTA = &&NOMBRE
En este ejemplo se asigna :- el valor 0 a la variable CONTA.- el valor ESTO_ES_UN_EJEMPLO a la variable ENTRADA0- el valor ENTRADA0 a la variable NOMBRE- el valor contenido en la variable cuyo nombre se encuentra en lavariable NOMBRE, es decir el valor contenido en la variable ENTRADA0,(ESTO_ES_UN_EJEMPLO) se asigna a la variable SALIDA0.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 174/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 174 de 374
3.4.5 Variables indexadas
Una vez vistos los casos anteriores, es fácil suponer como trata estelenguaje las variables indexadas, tan necesarias para procesosrepetitivos.
Esto lo hace concatenando el nombre de la variable y el indice,obteniendo de esta forma nombres de variables distintos en lugar de unnombre unico y un índice variable, aunque el resultado es el mismo.
Como ejemplo se presenta un fragmento de la Clist 'JMPLIB05' en el que semuestra cómo se puede escribir por pantalla todos los elementosalmacenados previamente en un conjunto de variables similar a una tablaindexada.
...LOOP1: IF condición THEN GOTO EXIT1
...SET &NOMBRE&CONTA = &&SYSOUTLINE&CONTA 00001302GOTO LOOP1 00001305
EXIT1: SET &CONTA = 0 00001306WRITE NUMERO DE ELEMENTOS: &ULTIMO 00001307
/* */ 00001308LOOP2: SET &CONTA = &CONTA + 1 00001309
IF &CONTA > &ULTIMO THEN GOTO LISTAR 00001310SET &SALIDA = &&NOMBRE&CONTA 00001311WRITE &SALIDA 00001312GOTO LOOP2 00001313
/* */ 00001318LISTAR: SET &FICHERO= &SYSUID..JMP.LISTDS 00001320
Donde, la línea:
1306 inicializa la variable CONTA1307 muestra el numero de elementos que tiene la Tabla1309 incrementa en 1 el valor de la variable CONTA1310 examina si el valor de CONTA excede el numero de elementos
y si es así, bifurca al párrafo etiquetado con LISTAR (Línea 1320)1311 asigna a la variable SALIDA el contenido de la variable que tiene
por nombre NOMBRE1 , NOMBRE2 , ... , NOMBRE19 , etc...1312 Escribe en pantalla el contenido de la variable SALIDA1313 Bifurca incondicionalmente el flujo al párrafo etiquetado como
LOOP2 (Línea 1309)1320 Cuando se quiere concatenar contenidos de variables, estas debendelimitarse con un punto, tal y como se explico en el puntodedicado a las variables.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 175/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 175 de 374
3.5 Operadores y expresiones
Los operadores que un procedimiento admite en la evaluación de susexpresiones o condiciones son:
Operadores aritméticos: + Adicción- Sustracción* Multiplicación/ División** Exponenciacion// Resto o división modular
El rango de los valores contenidos en una variable numérica es-2.147.483.648 a +2.147.483.648 (= 2^31)
Operadores de Comparación = EQ igualØ= ^= NE no igual< LT Menor que> GT Mayor que<= LE Menor o igual que>= GE Mayor o igual queØ> ^> NG No mayor queØ< ^< NL No menor que
Operadores Lógicos && AND|| OR
Como ejemplo se presenta un fragmento de la Clist JMPLIB05, si bien puede
utilizarse cualquier otro fragmento, pues se usa en cualquier clist./* ============= MEMORIZAR SALIDA ====================== */ 00001220/* */ 00001230LOOP1: SET &CONTA = &CONTA + 1 00001300
IF &CONTA > &ULTIMO THEN GOTO LISTAR 00001301SET &NOMBRE&CONTA = &&SYSOUTLINE&CONTA 00001302GOTO LOOP1 00001305
LISTAR: SET &CONTA = 0 00001306WRITE NUMERO DE ELEMENTOS: &ULTIMO 00001307
En esta segunda parte, se carga una variable tabulada con cada una de laslíneas memorizadas, esto es necesario ya que el próximo comando que seejecute inicializa las variables del sistema SYSOUTLINE&nnn
La línea:
1300 Incrementa el contador de línea
1301 Examina si el numero de línea es mayor que el numero de líneascapturadas y que se encuentra contenido en la variable ULTIMO.En el caso de que sea así, bifurca al párrafo etiquetado comoLISTAR.
1302 Carga en la variable de usuario &NOMBREnnn el contenido de lavariable del sistema SYSOUTLINEnnn que contiene la línea nnncapturada en la ejecución del comando.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 176/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 176 de 374
Es de resaltar el hecho de que a pesar de comenzar por && la
variable, no es una variable anidada, pues &SYSOUTLINE es unavariable del sistema.
1305 cede el control al párrafo etiquetado como LOOP1.
El resto de la clist se comenta al final del presente tema.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 177/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 177 de 374
3.6 Etiquetas
Las etiquetas son nombres que permiten identificar puntos del procedimientoa los que poder bifurcar el flujo de ejecución.
Estos nombres pueden tener de 1 a 8 caracteres alfanuméricos, y deben irseguidos por el carácter ':' (dos puntos).
Existen dos restricciones al uso de etiquetas:
- No pueden usarse en sentencias PROC- TSO no lista nunca las etiquetas, incluso cuando se esta depurando uncomando usando la opción de control CONLIST que se estudiara mas adelante.
Como ejemplo de este apartado puede tomarse cualquier ejemplo de este tema,
ya que son usadas ampliamente en todos ellos.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 178/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 178 de 374
3.7 Sentencias del lenguaje de CLIST
Como se decía en la introducción de este tema, el lenguaje de CLIST es unomas de los lenguajes de programación. Entre sus características se encuentrala de ejecutar comandos de TSO de forma directa. En consecuencia, junto alos comandos propios de TSO pueden considerarse las siguientes instruccioneso sentencias, las cuales han sido agrupadas en base a la función querealizan.
Para control ATTN define la rutina de atenciónCONTROL Establece opciones de controlDATA-ENDDATAERROR para manejo de erroresEXIT salir de la clistGLOBAL define variables globales
GOTO salto incondicionalPROC Primera instrucciónRETURN regresoTERMIN Suspensión temporal de la clistWRITE escribir datos en terminalWRITENR escribir sin ejecutar CR
Para asignación de READ leer datos desde el terminalvalores READDVAL Separa contenido de &SYSDVAL
SET asignar valor a variable
Para bifurcación IF-THEN-ELSE bifurca en función de condiciónDO-WHILE-END repite bucle si condiciónWHEN TSO comando
Para acceso a ficheros OPENFILE abrir ficheroGETFILE leer ficheroPUTFILE escribir en ficheroCLOSEFILE cerrar fichero
Por lo general, la sintaxis de las sentencias incluidas en losprocedimientos de CLIST se ajusta a las siguientes reglas básicas:
- El verbo u operación va separado de los operandos por al menos 1blanco.
- La continuación de una sentencia en otro línea puede especificarsecon:
- el signo '-' concatena la siguiente línea ignorando losblancos de final de una y principio de otra.- el signo '+'concatena la línea siguiente incluyendo losblancos de principio de la segunda línea.
- Todas las sentencias pueden ir acompañadas de una etiqueta.
Antes de pasar a analizar cada una de las sentencias citadas, es necesariocomentar tres puntos importantes para la codificación de una clist:- Una CLIST siempre se escribe en mayúsculas- Los comentarios se delimitan con /* al principio y */ al final- La primera instrucción ejecutable de una CLIST es siempre la instrucciónPROC.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 179/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 179 de 374
El siguiente ejemplo muestra estos aspectos. Las dos primeras líneas de la
CLIST son líneas de comentarios, mientras que la tercera establece que estaCLIST no tiene ningún parámetro de entrada, pues eso es lo que indica elnumero que acompaña a la palabra clave PROC
/* <<<<<<<<<<<<<<<<<<<<<< JMPLIB00 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *//* ==== PIDE LIBRERIA DE LA QUE SE DESEA CONOCER LOS MIEMBROS ===== */
PROC 0...EXEC 'DESJMP.CLIST.JMP(JMPLIB05)','&LIBRERIA'EXIT
Este otro ejemplo muestra las primeras líneas de la CLIST llamada por elprocedimiento anterior. En ellas se observa cómo esta clist tiene unparámetro obligatorio, LIBRERIA, y otro optativo, TEST que puede venir o no
informado, tal y como se vera al hablar de la sentencia PROC.
/* <<<<<<<<<<<<<<<<<<<<<< JMPLIB05 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *//* ====== CAPTURA LOS MIEMBROS DE UNA LIBRERIA ===================== */
PROC 1 LIBRERIA TEST...
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 180/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 180 de 374
3.7.1 CONTROL : Estable opciones para el proceso de la CLIST
Esta sentencia establece las opciones básicas de control que tendránefecto en la ejecución de la Clist, tales como si se hará, o no, ecosobre la pantalla de las instrucciones que se ejecuten , antes o despuésde las sustituciones de las variables, etc.
El formato de esta instrucción es :
CONTROL [opcion1 [opcion2 [ ... opcionn]]]
donde las posibles opciones, sus opuestas y su significado, son:
MSG NOMSG mostrar mensajesPROMPT NOPROMPT especificar el prompt del terminal
LIST NOLIST Listar comandos de TSOCONLIST NOCONLIST Listar sentencias de la CLISTSYMLIST NOSYMLIST Listar las líneas de la clistFLUSH NOFLUSH Limpiar stackMAIN Determinar procedimiento ppal.END(Cadena) define la cadena que cierra bucle
Como las opciones que se establezcan, normalmente se desea que surtanefecto desde el principio, esta sentencia suele seguir a la sentenciaPROC, yendo por lo tanto, al principio de la CLIST.
El siguiente ejemplo muestra una codificación que permite, con soloasignar un valor a la variable TESTEAR, que se activen unas u otrasopciones para la ejecución de la CLIST.
/* <<<<<<<<<<<<<<<<<<<<<< LISTAR >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */PROC 0 TESTEARIF &TESTEAR = TEST THEN CONTROL SYMLIST CONLIST MSG
ELSE CONTROL NOCONLIST MSG...Notar que normalmente se usa siempre MSG.
En este ejemplo, si se llama a la clist con:
TSO EX (LNAT),'TEST'
como se asigna el valor TEST a la variable TESTEAR, se activaran las
opciones de :- Visualizar en pantalla todas las sentencias de CLIST y los comandos deTSO antes de sustituir las variables pos sus valores. (SYMLIST)
- Visualizar en pantalla todas las sentencias de CLIST después desustituir los nombres de las variables por sus valores. (CONLIST)
- Visualizar en pantalla los mensajes que devuelven los comandos de TSO olas sentencias de la CLIST.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 181/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 181 de 374
Por el contrario, si se llama a la clist con:
TSO EX (LNAT)
como no se asigna ningún valor a la variable TESTEAR, que se ha definidocomo optativa, pues el numero de parámetros posicionales es 0 (PROC 0) seactivaran las opciones de :
- No visualizar en pantalla todas las sentencias de CLIST después desustituir los nombres de las variables por sus valores. (CONLIST)
- Visualizar en pantalla los mensajes que devuelven los comandos de TSO olas sentencias de la CLIST.
A continuación se explica cada una de las opciones.
MSG / NOMSG
Esta opción establece que se muestren o se supriman los mensajesdevueltos por las ejecuciones de los comandos incluidos en la clist.
TSO por defecto tiene definida la opción CONTROL MSG
PROMPT / NOPROMPT
Esta opción establece si se permite o no el prompt para pedir losvalores de los parámetros posicionales en las clist llamadas, ya quepara la clist actual, tuvo efecto el valor que tuviera este parámetroen el profile del usuario.
El siguiente ejemplo muestra de una forma mas clara este extremo:
COMMAND ===> Tso Profile
Al ejecutar el comando PROFILE, el sistema devuelve los valores queeste tiene asignados a cada uno de los parámetros que integran elperfil del usuario.
IKJ56688I CHAR(0) LINE(0) PROMPT INTERCOM ....
Pues bien, al invocar la clist que se muestra de fondo. sin losvalores de los parámetros posicionales, el sistema muestra un mensajepidiendo el valor de cada uno de los parámetros que no se haninformado.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 182/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 182 de 374
EDIT ---- DESJMP.CLIST.JMP(LISTAR) - 01.00 --------------------------
COMMAND ===> tso ex 'DESJMP.clist.jmp(listar) SCROLL ===>CSR
/* */ 00001318/* <<<<<<<<<<<<<<<<<<<<<<< LISTAR >>>>>>>>>>>>>>>> */ 00000100/* */ 00001205/* === LISTAR POR RMT101 EN VERTICAL Y LETRA PEQUE#A ==*/ 00000100/* */ 00001205
PROC 9 FICHERO 00000200FORMATO 00000200REMOTO + 00000200CLASE + 00000200CABECERA + 00000200DERECHA + 00000200IZQUIERDA + 00000200
PIE + 00000200LRCL 00000200
/* */ 00001205SET &TEST = TESTNO 00000210IF &TEST = TEST THEN CONTROL LIST CONLIST */ 00001205
IKJ56700A ENTER POSITIONAL PARAMETER FICHERO -ejemplos(salida)
IKJ56700A ENTER POSITIONAL PARAMETER FORMATO -v
IKJ56700A ENTER POSITIONAL PARAMETER REMOTO -...
Al cambiar ahora el parámetro PROMPT del Profile del usuario medianteel siguiente comando:
COMMAND ===> Tso Profile NOPROMPT
Para validar que se ha modificado, se ejecuta de nuevo el comando sinopciones.
COMMAND ===> Tso Profile
el sistema devuelve:IKJ56688I CHAR(0) LINE(0) NOPROMPT INTERCOM ....
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 183/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 183 de 374
y al ejecutar exactamente igual la misma clist, se obtiene el mensaje
que se muestra.
EDIT ---- DESJMP.CLIST.JMP(LISTAR) - 01.00 --------------------------COMMAND ===> tso ex 'DESJMP.clist.jmp(listar) SCROLL ===>CSR
IKJ56701I MISSING POSITIONAL PARAMETER FICHEROPROC 9 FICHERO FORMATO REMOTO CLASE CABECERA DERECHA IZQUIERDA PIE LRECL***y se da por concluida la clist.
Así pues, cuando en una clist se establece el parámetro de lasentencia CONTROL como NOPROMPT, no se cambia el PROFILE del usuariocomo se ha hecho en este ejemplo, pero se activa ese valor desde que
se ejecuta la sentencia CONTROL hasta que se termine la ejecución dela clist, y por lo tanto, si ese procedimiento llama a otro sinpasarle todos los parámetros posicionales requeridos, el procedimientoinvocado sacara el mensaje IKJ56701I y dará por terminada suejecución.
TSO por defecto tiene definida la opción CONTROL NOPROMPT
LIST / NOLIST
Esta opción de control establece si se desea listar o no los comandosde TSO y los subcomandos después de que se sustituyan las variablespor sus valores.
TSO por defecto tienen definida la opción CONTROL LIST
CONLIST / NOCONLIST
Esta opción de control establece si se desea o no listar lassentencias de la clist después de sustituir las variables por susvalores.
TSO por defecto tienen definida la opción CONTROL NOCONLIST
SYMLIST / NOSYMLIST
Esta opción de control establece si se desea o no listar lassentencias de la clist, y los comandos y subcomandos de TSO antes desustituir las variables por sus valores
TSO por defecto tienen definida la opción CONTROL NOSYMLIST
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 184/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 184 de 374
FLUSH / NOFLUSH
El stack de TSO es una cola en la que se especifica a TSO la fuente dedonde debe recoger la próxima entrada, pudiendo tener los valores determinal o clist.
Cuando se produce un error en una clist, TSO hace un borrado o FLUSHdel STACK, y como TSO por defecto tiene definida la opción FLUSH, elpróximo input siempre le leerá del terminal, a menos que seespecifique NOFLUSH.
Esta es la función de esta opción de control, evitar el borrado delstack, para que así la próxima entrada la lea del stack, si es quehabía. Esta opción solo se activa si el código de retorno es mayor que12, por lo que hay que combinar esta opción con rutinas de error.
MAIN
Esta opción define la clist que se tomara como de primer nivel cuandose ejecute en una clist llamada, es decir de un nivel inferior, lasentencia EXIT QUIT.
END(cadena)
Esta opción establece la cadena que actuara como delimitadora en losgrupos de instrucciones. Estos grupos siempre empezaran por lainstrucción DO y terminaran cuando se encuentren con el delimitadorque se establezca aquí.
TSO por defecto tienen definida la opción CONTROL END(END)
Es decir tiene definida la cadena END como delimitadora de los gruposde instrucciones.
Ejemplo : CONTROL END(END-DO)
En este caso se establece la cadena END-DO como cadena delimitadora.
IF condición THEN +DO
sentenciasEND-DO
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 185/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 185 de 374
3.7.2 PROC : Primera instrucción de una CLIST
Esta instrucción establece el numero de parámetros posicionales que sedeben pasar para que se ejecute el procedimiento o CLIST.
El formato de esta instrucción es :
PROC n [variable1 [variable2 ... [variable n]]]]
donde n es el numero que representa el numero de parámetros posicionalesobligatorios que se deben pasar, asignandose cada parámetro pasado a cadauna de las variables que se establecen como receptores en esta sentencia.
En el caso de que no se pasen parámetros, el valor de n debe ser 0.
En el caso de pasar parámetros con palabra clave, los parámetros puedenvenir en el orden que se quiera ya que el valor acompaña a la palabraclave como argumento.
Ejemplo PROC 0 REMOTO(RMT20) FICHERO('JMPDES.SALIDA')
El siguiente ejemplo muestra un procedimiento o clist que edita unfichero que contiene el esqueleto de un JCL, (no confundir con unesqueleto de ISPF). Este procedimiento lo que hace es editar eseesqueleto, cambiar esos nombres genéricos por los valores reales, lanzaral JES el JCL, y salir dejando el esqueleto como estaba.
La siguiente CList seria llamada desde la línea de comando como sigue:
TSO EX JMP(LNAT),'PROGRAMA','PRUEBAS'
/* <<<<<<<<<<<<<<<<<<<<< LNAT >>>>>>>>>>>>>>>>>>>>> */ 000100/* LISTA OBJETO POR RMT101 EN VERTICAL Y LETRA PEQUEÑA */ 000200PROC 2 OBJETO LIBRERIA 000300/* CONTROL LIST CONLIST */ 000400EDIT 'JMPDES.JMP.JCLTIPO(LISTAPGM)' OLD CNTL NONUM 000500C * 999 'YYYYYYYY' '&OBJETO' ALL 000600TOP 000700C * 999 'ZZZZZZZZ' '&LIBRERIA' ALL 000800SUBMIT 000900END NOSAVE 001000
Las líneas:
0100 es un comentario que establece el nombre de la CLIST
0200 es un comentario que especifica el objetivo de la misma.
0300 es la primera instrucción ejecutable, y establece que para suejecución necesita dos parámetros posicionales obligatorios: Elprimero le asignara a la variable OBJETO y el segundo le asignara ala variable LIBRERIA.
0400 es un comentario que sirve para depurar la clist cuando deja de sercomentario.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 186/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 186 de 374
0500 llama al programa EDIT pasándole como parámetro el nombre del
fichero a editar así como las características de disposición : OLD,el tipo de fichero que es : CNTL , y un parámetro del ficheroNOMUN, que especifica la característica de NO NUMERADO de superfil. (Este parámetro afecta a cómo definir los parámetros deedición del fichero)
0600 especifica al editor que cambie desde la línea que se encuentra, yen cualquier posición de la línea, la cadena YYYYYYY por elcontenido de la variable OBJETO, y que esto lo haga en todo elfichero (ALL)
0700 también es un comando del editor mediante el que se le indica quese posicione en el comienzo del fichero.
0800 especifica que sustituya desde la línea actual (la primera) hastala 999 la cadena ZZZZZZZZ por el contenido de la variable LIBRERIA
0900 submite el fichero resultante
1000 hace que termine la ejecución del programa EDIT y que salga sinsalvar el fichero resultante.
El fichero editado : 'JMPDES.JMP.JCLTIPO(LISTAPGM)' realiza el listado deun modulo de Natural por una impresora especifica, pero los nombres delmodulo a listar y de la librería en la que se encuentra se han codificadoen dicho esqueleto de forma genérica como YYYYYYYY y ZZZZZZZZ.Su contenido es el siguiente:
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 187/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 187 de 374
//XXXXXXLP JOB (123,456),'JMP-PRU ',CLASS=T,MSGCLASS=X,// NOTIFY=XXXXXX,MSGLEVEL=(1,1)//*=======================================================//* PASAR OBJETO NATURAL A FICHERO TEMPORAL//*======================================================//*//NATBATCH EXEC DESNAT//*//DDPRINT DD DUMMY SYSOUT=*//CMPRINT DD DUMMY SYSOUT=*//CMPRT01 DD DSN=JMPDES.JMP.TMP,DISP=OLD//CMSYNIN DD DSN=JMPDES.JMP.JCL(LOGONPGM),DISP=SHR//*********************************************************// DD *
JMP0001PZZZZZZZZYYYYYYYYFIN/*//*========================================================//* IMPRIMIR TEMPORAL CON MARGEN//*========================================================//*//IMPRIMIR EXEC PGM=IKJEFT01//*//SYSTSPRT DD SYSOUT=*//SYSTSIN DD *PRINTDS DATASET('JMPDES.JMP.TMP') DEST(RMT101) CLASS(I) +COLUMNS(1:124) LMARGIN(8)
/*
Es de resaltar el hecho de que al ser NONUM, no tiene la numeración delas líneas que figura en otros ejemplos.
Por otra parte, la DDname CMSYNIN se compone de 2 sentencias DDconcatenadas.La primera DD referencia los parámetros necesarios para entrar enNatural, tales como LIBRERIA, USUARIO Y PASSWORD, y que por ser comunes atodos los JCL, se han escrito como miembro independiente ya que de estaforma, cuando cambia la password solo hay que cambiarla en un sitio.La segunda DD contiene realmente lo que se desea realizar, ejecutar elprograma JMP0001P, el cual espera recibir dos datos: El primerorepresenta la librería y el segundo el programa a listar.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 188/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 188 de 374
3.7.3 ERROR : rutina para el tratamiento de errores
Esta instrucción establece el conjunto de instrucciones que se ejecutarancuando se produzca una situación de excepción, o un código de retornodistinto de cero. Dicho conjunto de instrucciones vendrá enmarcado por lapareja DO - END, suponiendo que sea END la cadena definida con lasentencia de CONTROL END
El formato de esta sentencia es :
(1) ERROR sentencia
(2) ERROR +DO
sentenciasEND
(3) ERROR OFF
Los formatos (1) y (2) son similares, con la única salvedad de que en elformato 1 solo se ejecuta una sentencia cuando se bifurca a esta rutina,mientras que en el formato (2) se ejecuta el grupo de sentenciasincluidas entre los limitadores DO y END. Es la mas normal
El formato (3) desactiva la rutina de error.
Esta instrucción, no es una etiqueta aunque tiene un funcionamientosimilar.
La rutina para el tratamiento de los errores estará activa desde que elflujo ejecute la instrucción ERROR, hasta que se ejecute una nuevasentencia ERROR o se termine la clist, si bien no se ejecutaran susinstrucciones mas que en el caso ya dicho anteriormente de que sedevuelva un código distinto de 0.
Un caso particular de esta instrucción viene representado por el formato(3), ya que cuando se ejecuta ERROR OFF, deja de estar activa la rutinade error que lo estuviera.
En un procedimiento puede haber tantas sentencias ERROR como se
consideren necesarias, pero solo estará activa la correspondiente a laultima sentencia ERROR ejecutada. Esto quiere decir que no esindependiente de donde se encuentre dentro del procedimiento, como sueleocurrir con otros lenguajes, pues debe ejecutarse la sentencia para quese active.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 189/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 189 de 374
La siguiente secuencia se corresponde a la rutina de tratamiento de
errores de la clist DISPLAY1.
El sistema bifurcara incondicionalmente a esta rutina cada vez que seproduzca una situación de excepción, como por ejemplo, detectar el fin defichero al ejecutarse una sentencia de lectura.
ERROR + 00008100DO 00008200
SET RETCOD = &LASTCC 00008300IF &RETCOD = 8 THEN + 00008400
DO 00008500IF &PASO = EXAMEN THEN + 00008600
DO 00008700SET EXISTE = NO 00008800
RETURN 00008900END 00009000
WRITENR YA EXISTE LA TABLA JMPALO01. 00009100READ SEGUIR 00009200EXIT CODE(99) 00009300
END 00009400IF &RETCOD = 400 THEN + 00009500
DO 00009600SET EOF = SI 00009700RETURN 00009800
END 00009900ELSE + 00010000
DO 00010050WRITE error en la ejecución RC : &RETCOD 00010070EXIT CODE(&RETCOD) 00010100
END 00010150END 00010200
8300 memoriza el código de retorno que ha generado la cesión delcontrol a esta rutina. Dicho código se encuentra contenido enla variable del sistema &LASTCC.
8400 Examina si el código de retorno es 8, y si es así ejecuta lasinstrucciones contenidas entre las línea 8500 a 9400.
8600 Examina el contenido de una variable que se carga en el flujode ejecución normal, y que sirve para detectar el punto desdeel que ha bifurcado a esta rutina ya que el código de retorno8 es devuelto por mas de una función. Concretamente estaexaminando si la variable PASO contiene la cadena EXAMEN,valor que se carga en el flujo normal de la clist.
8800 En el caso de que contenga dicho valor, quiere decir que noexiste la fila que se esta buscando, cosa que es correcta yaque se quiere dar de alta una fila en una tabla indexada, ypara ello necesitamos que no exista. Por esta razón es por loque se carga la variable EXISTE con el valor NO. En el caso deque exista la fila buscada, el código de retorno es 0 y nobifurca a la rutina de error.
8900 Retorna al punto desde el que se bifurco a esta rutina.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 190/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 190 de 374
9100 Escribe el mensaje de que se quiere crear una tabla que yaexiste.Hay que tener en cuenta que el código de retorno 8 también esdevuelto cuando se quiere crear una tabla que ya existe.
9200 Se interrumpe la ejecución de la clist hasta que el usuariopulse INTRO. Esto se consigue indicando al sistema que leadesde el terminal el valor de la variable SEGUIR, la cual nosirve mas que para interrumpir la ejecución de la clist, a laespera de que se pulse INTRO.
9300 Se sale de la clist.
9500 En el caso de que el código que provoco esta bifurcación
incondicional no fuera el 8 (línea 8400) , se examina si es400, código generado cuando en la lectura de un fichero se hadetectado el fin de fichero.
9700 si se ha detectado esta condición, se carga la variable deusuario EOF con el valor SI y se regresa con RETURN al puntodesde el que se bifurco a esta rutina de errores.
10000 En el caso de no ser ninguno de estos errores, se ejecutan lasinstrucciones de las líneas 10050 a 10150.
10100 Escribe en el terminal un mensaje con el código de error queno se controla, y sale de la clist con EXIT y devuelve alprocedimiento llamante el código de retorno que ha provocadoel ERROR.
Como puede observarse en esta rutina de ERROR confluyen muchasbifurcaciones, todas unidas únicamente por el código de retorno, y por lotanto, puede usarse como elemento discriminador variables que indiquen suprocedencia, como es el caso de la variable PASO.
Las siguientes sentencias constituyen el procedimiento para el que se haescrito la rutina de errores previa. Con el fin de poder seguir esteejemplo, y dado que todavía no se han explicado todas las instruccionesusadas, es por lo que se comentan estas.
El objetivo de esta clist es presentar en un panel ISPF un ficherosecuencial que contiene el nombre de todas las librerías alocadas por elsistema, y que se ha cargado previamente con una clist previa.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 191/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 191 de 374
ALLOC FI(ENTRADA) DA('&FICHERO') SHR REUSE 00010300ISPEXEC TBCREATE JMPALO01 NOWRITE NAMES(ELEMENTO,COMENTA) 00010400OPENFILE ENTRADA INPUT 00010500/* */ 00010600GETFILE ENTRADA 00010700/* */ 00010900GETFILE ENTRADA 00011000
10300 Aloca el dataset cuyo nombre se encuentra contenido en lavariable FICHERO para ser usado de entrada con disposiciónSHARED, y le asigna el nombre lógico de ENTRADA.
10400 Llama a la función de ISPF : TBCREATE para crear una tablaISPF en memoria (NOWRITE) con los campos de nombre ELEMENTO y
COMENTA.ISPF, por haber invocado una de sus funciones, nos devuelvesiempre un código de retorno. Si este código de retorno no es0 salta a la rutina de errores que se ha comentado. Como lonormal es que en este caso sea 0, pues no existe la tabla yaque es en memoria, sigue en secuencia.
10500 Abre el fichero ENTRADA en modo INPUT.
10700 Lee el primer registro, que no interesa ya que solo contieneun texto de cabecera fijo.
11000 Lee el siguiente registro, el cual contiene informacionvalida. Por lo tanto, con un registro valido leido, se entraen la repetitiva siguiente:
SET EOF = NO 00011099DO WHILE &EOF = NO 00011100
SET ELEMENTO = &STR(&SUBSTR(01:44,&ENTRADA)) 00011200SET COMENTA = &STR(&SUBSTR(45:60,&ENTRADA)) 00011300
/* */ 00011400SET PASO = EXAMEN 00011500SET EXISTE = SI 00011600ISPEXEC TBEXIST JMPALO01 00011700IF &EXISTE = NO + 00011750
THEN ISPEXEC TBADD JMPALO01 SAVE(ELEMENTO,COMENTA) 00011800GETFILE ENTRADA 00011900
END 00012000CLOSFILE ENTRADA 00012100FREE FI(ENTRADA) 00012200
11099 Inicializa la variable de usuario EOF (End of File)
11100 Repetitiva mientras el contenido de EOF sea NO
11200 Carga en la variable ELEMENTO las posiciones de 1 a 44 de lavariable ENTRADA (buffer que contiene el registro leído)
11300 Carga en la variable COMENTA las posiciones 45 a 60 deENTRADA.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 192/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 192 de 374
11500 Carga en la variable PASO la cadena EXAMEN. Esta variable es
la que se examina en la rutina de ERROR.
11600 Carga en la variable EXISTE la cadena SI
11700 Llama a la función de ISPF : TBEXIST para saber si existe unafila en la tabla ispf de nombre JMPALO01
Llegados a este punto se puede producir una situación deexcepción, pues puede existir o no una fila con el valorcontenido en la variable ELEMENTO, dependiendo de que esténduplicados los nombres de las librerías (contenido del ficheroque se esta tratando), con lo que esta función puede retornar:- el código 0 si existe la fila, y sigue en secuencia, o- el código 8 si no existe la fila, y por tanto bifurca a la
rutina de error.Una vez en esta rutina, pregunta por el código, y como sabe dedonde viene por el contenido de la variable PASO, carga elvalor NO en la variable EXISTE y retorna a la siguientesentencia a la que provocó su bifurcación. Es decir, retorna ala sentencia 11750
11750 Pregunta por el contenido de la variable EXISTE.
11800 En el caso de que el contenido sea NO, es decir no existe unafila con la entrada dada, llama a la función de ISPF: TBADDpara añadir la fila a la tabla, con los campos ELEMENTO YCOMENTA.
11900 Lee un nuevo registro del fichero ENTRADA
12000 Cierra el bucle de la repetitiva DO-WHILE. Este bucle serepetira hasta que al leer un nuevo registro se detecte el finde fichero, con lo que se bifurcara de nuevo a la rutina deerror, y al comprobar que el código de retorno es 400, cargaren la variable EOF el valor SI, por lo que al retornar denuevo a este punto, e ir a la cabecera de la repetitiva,comprobara que el contenido de la variable EOF no es NO, ysaltara a la línea 12100.
12100 Cierra el fichero asociado al nombre lógico ENTRADA
12200 Libera para el sistema el fichero físico asociado al nombrelógico ENTRADA.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 193/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 193 de 374
Con lo cual, al llegar a este punto ya se dispone de una tabla ISPF
cargada con los datos que interesan.
Las siguientes sentencias presenta la parte de la clist que muestra latabla en un panel, y permite tratar la informacion contenida en cada unade sus líneas.
ERROR OFF 00012300ISPEXEC TBSCAN JMPALO01 ARGLIST(ELEMENTO) NEXT 00012400ISPEXEC TBSORT JMPALO01 FIELDS(ELEMENTO,C,A) 00012500
12300 ejecuta una nueva sentencia ERROR pero esta vez con elparámetro OFF por lo que la anterior rutina deja de estaractiva.
12400 establece como argumento de búsqueda para un SCAN , el campoELEMENTO, y la búsqueda se realizara hacia delante.
12500 Clasifica la tabla por el campo ELEMENTO, en ascendente, y sucontenido, aunque sea numérico, será tratado como caracteresalfanuméricos.
El siguiente fragmento contiene una repetitiva a fin de tratar todos loselementos de la tabla.
SET &SIGUE = SI 00012600DO WHILE &SIGUE = SI 00012700
ISPEXEC TBTOP JMPALO01 00012800ISPEXEC TBDISPL JMPALO01 PANEL(JMPALO02) 00012900IF &LASTCC = 8 THEN - 00013000
DO 00013100ISPEXEC TBCLOSE JMPALO01 00013200EXIT 00013300
END 00013400
12600 Inicializa la variable SIGUE con el valor SI
12700 Inicia un bucle que se ejecutara mientras la variable SIGUEcontenga el valor SI
12800 posiciona el puntero en el la primera fila de la tablaclasificada.
12900 LLama a la función de ISPF para presentar en un panel lasfilas de la TABLA. ISPF ya se encarga de la paginación, numerode filas por página, etc.
13000 Al no haber una rutina de error a la que bifurcar, después decada llamada se debe preguntar por el código de retorno quedevuelve ISPF. Esto es lo que se hace en esta línea.En el caso de que el código sea 8 , es decir no hay filas,cierra la tabla, y sale de la clist.
Las siguientes líneas preparan los datos de ELEMENTO, LIBRERIA y FICHEROde la fila seleccionada.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 194/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 194 de 374
SET &ELEMENTO = &ELEMENTO 00013500
SET &LIBRERIA = &LIBRERIA 00013600SET &FICHERO = &LIBRERIA.(&ELEMENTO.) 00013700
El resto de esta clist se limita a examinar la marca utilizada paraseleccionar la fila y ejecutar la acción correspondiente.
Es de resaltar el hecho de que ISPF se encarga de seleccionar la filacorrespondiente a la primera marca realizada en el campo MARCA.
IF &MARCA = B THEN - 00013800DO 00013900
ISPEXEC BROWSE DATASET('&FICHERO') 00014000SET &COMENTA = 'VISUALIZADA' 00014100
END 00014200
IF &MARCA = E THEN - 00014300DO 00014400
ISPEXEC EDIT DATASET('&FICHERO') 00014500SET &COMENTA = 'EDITADA ' 00014600
END 00014700IF &MARCA = M THEN - 00014800
DO 00014900EXEC 'JMPDES.CLIST.JMP(JMPZZZ0M)','&FICHERO' 00015000
END 00015100SET &MARCA = &STR( ) 00015200
END 00015300
14000 llama a la función de ISPF : BROWSE pasándole como argumentoel contenido de la variable FICHERO.
14100 Mueve el texto VISUALIZADA en la variable COMENTA de la filaseleccionada.
14500 llama a la función de ISPF : EDIT pasándole como argumento elcontenido de la variable FICHERO.
14100 Mueve el texto EDITADA en la variable COMENTA de la filaseleccionada.
15000 Llama a la clist JMPZZZ0M, pasándole como argumento elcontenido de la variable FICHERO con el fin de presentar losmiembros de una librería.
15200 mueve blancos a la variable MARCA
15300 Cierra el bucle de la repetitiva.
Al final del tema se muestra la pantalla resultante, acompañando allistado completo de esta clist.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 195/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 195 de 374
3.7.4 GOTO : salto incondicional
Esta sentencia se usa para ceder el control de la ejecución de una clistal párrafo etiquetado con el nombre que sirve de parámetro a estasentencia.
El formato de esta instrucción es :
GOTO etiquetaGOTO &variable
Como se ve, la etiqueta puede ser dinámica, es decir que un mismo GOTObifurcara a un párrafo o a otro en función del valor que se haya asignadoa la variable, en base a determinadas condiciones.
El siguiente ejemplo sigue siendo un fragmento de la clist JMPLIB05. Enél se pretende escribir en un fichero el contenido de la variableindexada que se ha cargado previamente en la captura de la salida delcomando.
SET &CONTA = 6 00003200GRABAR: SET &CONTA = &CONTA + 1 00003300
IF &CONTA > &ULTIMO THEN GOTO CERRAR 00003411SET &LINEA = &&NOMBRE&CONTA 00003600SET &SALIDA = &LINEA 00003610PUTFILE SALIDA 00003700
/* WRITE &SALIDA */ 00003800GOTO GRABAR 00003900
CERRAR: CLOSFILE SALIDA 00004000/* FREE FILE(SALIDA) */ 00004100
La línea:
3200 inicializa el contador a 6 pues las 7 primeras líneas no contieneninformacion significativa.
3300 Aquí comienza un párrafo, etiquetado como GRABAR, y como unaetiqueta no puede ir sin una sentencia que le acompañe, seaprovecha esta línea para incrementar el valor de la variableCONTA en 1.
3411 Esta sentencia examina el contenido de la variable CONTA para
saber si ha sobrepasado el valor de la ultima posición del índice.Si es así, salta al párrafo etiquetado con CERRAR.
3600 Asigna a la variable temporal LINEA el contenido de la variablecuyo nombre se forma concatenando la cadena NOMBRE con elcontenido de la variable CONTA.
3610 Asigna al buffer de salida el contenido de la variable temporalLINEA.
3700 Escribe en el fichero de salida el buffer cargado previamente.
3800 Ahora figura como comentario, pero en el caso de que no fuera así,
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 196/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 196 de 374
escribiría en pantalla el contenido de la variable escrita en el
fichero.
3900 Salta incondicionalmente al párrafo GRABAR.
4000 Esta línea contiene el nombre del párrafo CERRAR , y comosentencia ejecutable, la que cierra el fichero en el que se haescrito la tabla.
4100 Libera ese fichero para que pueda ser usado por el sistema.
El siguiente ejemplo ilustra el GOTO dinámico.
IF &RC = 8 THEN SET &LABEL = CERRARIF &RC = 4 THEN SET &LABEL = ABRIR
IF &RC = 0 THEN SET &LABEL = SEGUIRGOTO &LABEL
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 197/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 197 de 374
3.7.5 EXIT : Salir de la clist
Esta sentencia termina la ejecución de una clist.
El formato de esta instrucción es :
EXITEXIT CODE(nn)EXIT QUIT
donde nn es un valor numérico que se devuelve como código de retorno alprocedimiento llamante, para que este sepa como fue la ejecución de laCLIST llamada.
El código de retorno devuelto puede ser cualquier expresión numérica,
donde el valor se encuentre en el rango 0 - 16.777.215
Cuando se usa el parámetro QUIT se sale de la clist actual y se retorna ala clist de nivel mas alto si está protegida, es decir que tenga lassentencias de control : CONTROL MAIN NOFLUSH , y en el caso de que noexista un nivel protegido, se termina la ejecución de la clist.
Como ejemplo se muestra un fragmento de la rutina de error comentada enla sentencia ERROR.
ERROR + 00008100DO 00008200
SET RETCOD = &LASTCC 00008300IF &RETCOD = 8 THEN + 00008400
DO 00008500IF &PASO = EXAMEN THEN + 00008600
DO 00008700SET EXISTE = NO 00008800RETURN 00008900
END 00009000WRITENR YA EXISTE LA TABLA JMPALO01. 00009100READ SEGUIR 00009200EXIT CODE(99) 00009300
END 00009400...
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 198/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 198 de 374
3.7.6 RETURN : Retornar al punto desde el que se bifurco a una rutina
Esta sentencia hace que el control de la ejecución pase a la sentenciasiguiente a la que provoco la bifurcación a la rutina de error o a la deatención a fin de continuar la secuencia lógica normal de la clist. Enconsecuencia esta sentencia solo puede encontrarse en las rutinas deERROR o de ATTN.
El formato de esta instrucción es :
RETURN
Como ejemplo se muestra un fragmento de la rutina de error comentada enla sentencia ERROR.
ERROR + 00008100DO 00008200
SET RETCOD = &LASTCC 00008300IF &RETCOD = 8 THEN + 00008400
DO 00008500IF &PASO = EXAMEN THEN + 00008600
DO 00008700SET EXISTE = NO 00008800RETURN 00008900
END 00009000WRITENR YA EXISTE LA TABLA JMPALO01. 00009100READ SEGUIR 00009200EXIT CODE(99) 00009300
END 00009400...
8900 Esta línea, una vez comprobado que es normal que no exista unafila con el nombre que se quiere dar de alta, y enconsecuencia que el código de retorno devuelto por la funciónes el normal, cede de nuevo el control a la instrucciónsiguiente a la de la función que provoco que se bifurcara a larutina para el manejo de errores, a la 11750, para dar de altala fila en la tabla.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 199/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 199 de 374
3.7.7 WRITE : Escribir datos en el terminal
Esta instrucción se usa para enviar mensajes al usuario desde la clist.No espera respuesta, solo escribe el mensaje en pantalla.
El formato de esta instrucción es :
WRITE mensaje
El mensaje estará formado por cualquier secuencia de palabras yvariables. En tiempo de ejecución, estas serán sustituidas por susvalores. En el caso de que se desee evaluar y escribir el resultado deuna expresión, se debe utilizar la función &VAL.
Como ejemplo se muestra un fragmento de la rutina de error comentada en
la sentencia ERROR.
...DO 00010050
WRITE error en la ejecución RC : &RETCODE 00010070EXIT CODE(&RETCODE) 00010100
END 00010150...
10070 Escribe en el terminal un mensaje y el valor del código deretorno que ha provocado que la secuencia de ejecución pasepor esta línea.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 200/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 200 de 374
3.7.8 WRITENR : Escribir en el terminal y no ejecutar el <CR>
Esta instrucción se usa para enviar mensajes al usuario desde la clist,pero en este caso, este mensaje suele servir de prompt para que elusuario sepa que es lo que tiene que contestar al sistema, ya quenormalmente esta sentencia va seguida de la sentencia READ.
En este caso, no se ejecuta el salto de línea por lo que los datos aintroducir se escriben a continuación del mensaje enviado por la clist.
El formato de esta instrucción es :
WRITENR mensaje
El siguiente ejemplo es un fragmento del procedimiento LNATDDM. En el se
muestra cómo se pregunta por pantalla cual es el nombre del objeto alistar.
WRITENR NOMBRE DE LA DDM A LISTAR : 00001000READ &DDM 00001100
Este otro ejemplo muestra un fragmento de la rutina de error comentada enla sentencia ERROR, con un uso muy particular de esta sentencia.
ERROR + 00008100DO 00008200
SET RETCOD = &LASTCC 00008300IF &RETCOD = 8 THEN + 00008400
DO 00008500IF &PASO = EXAMEN THEN + 00008600
DO 00008700SET EXISTE = NO 00008800RETURN 00008900
END 00009000WRITENR YA EXISTE LA TABLA JMPALO01. 00009100READ SEGUIR 00009200EXIT CODE(99) 00009300
END 00009400...
9100 Esta línea saca un mensaje en pantalla.
9200 Esta sentencia interrumpe temporalmente la ejecución de laclist a la espera de que el usuario pulse INTRO.Una vez pulsado este, carga el valor tecleado por el usuarioen la variable SEGUIR.Realmente esta sentencia solo sirve para interrumpir laejecución de la clist hasta que se pulse INTRO, ya que elcontenido de la variable seguir no se examina ni se trata.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 201/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 201 de 374
3.7.9 READ : Lee datos desde el terminal
Esta instrucción se usa para leer datos desde el terminal cargando lavariable que sirve de parámetro a esta sentencia.
Normalmente esta instrucción va precedida por la WRITENR para escribir unmensaje que informa al usuario de que es lo que espera recibir elsistema.
El formato de esta instrucción es :
READ &variable
Como ejemplo se muestra la clist usada para imprimir por una impresoradeterminada una vista de un fichero ADABAS o DDM.
/* <<<<<<<<<<<<<<<<<<<<<< LNATDDM >>>>>>>>>>>>>>>>>>>>>>> */00000100/* ====== lista una DDM de Natural por la impresora RMT101 */00000200
PROC 0 TEST 00000300/* */00000400
IF &TEST = TEST THEN CONTROL SYMLIST CONLIST MSG 00000600ELSE CONTROL MSG 00000700
/* -------------------------------------------------------- */00000800/* */00000900
WRITENR NOMBRE DE LA DDM A LISTAR : 00001000READ &DDM 00001100EDIT 'JMPDES.JMP.JCLTIPO(LNATDDM)' OLD CNTL NONUM 00001200C * 999 'VVVVVVVV' '&DDM' ALL 00001300
/* LIST */00001400SUBMIT 00001500END NOSAVE 00001600EXIT 00001700
En la línea:
1000 se presenta un mensaje explicativo de lo que se desea delusuario: El nombre de la DDM a listar.
1100 se lee el nombre que escriba el usuario en el terminal y seguarda en la variable DDM.
1200 se ejecuta el programa EDIT del sistema, pasándole como
parámetro el nombre de un fichero que contiene un JCL genéricoque es quien realmente va a listar la DDM por la impresorapredeterminada.
1300 Esta línea contiene un subcomando del programa EDIT que tienepor misión cambiar la cadena VVVVVVVV por el contenido de lavariable DDM (leído desde pantalla).
1400 Esta línea, ahora comentario, solo sirve para comprobar que seha realizado lo que se pretendía. Es un subcomando de EDIT yesta enmarcado como comentario por resultar innecesario quesalga listado por pantalla el JCL con las modificacionesrealizadas.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 202/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 202 de 374
1500 Este subcomando de EDIT, envía al JES el contenido del ficheroactual, es decir submite el fichero modificado. También es unsubcomando del programa EDIT.
1600 Este subcomando finaliza la ejecución del programa EDIT y nosalva los cambios, con lo que el programa genérico siguesiendo genérico.
1700 Termina la ejecución de la clist.
A fin de completar el ejemplo, se incluye a continuación el JCL genéricoque edita la clist anterior. En el no se ha incluido la numeración ya quesu profile especifica NONUM.
//XXXXXXLD JOB (123,456),'JMP-PRU ',CLASS=U,MSGCLASS=X,// NOTIFY=XXXXXX,MSGLEVEL=(1,1)//* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//* PASAR DDM A TMP MEDIANTE CLIST//* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//NATBATCH EXEC DESNAT//DDPRINT DD SYSOUT=*//CMPRINT DD SYSOUT=*//CMPRT01 DD DSN=JMPDES.JMP.TMP,DISP=OLD//CMSYNIN DD DSN=JMPDES.JMP.JCL(LOGONPGM),DISP=SHR//*********************************************************// DD *JMP002PVVVVVVVVFIN
/*//*===========================================================//* IMPRIMIR TEMPORAL CON MARGEN//*===========================================================//*//IMPRIMIR EXEC PGM=IKJEFT01//*//SYSTSPRT DD SYSOUT=*//SYSTSIN DD *PRINTDS DATASET('JMPDES.JMP.TMP') DEST(RMT101) CLASS(I) +COLUMNS(1:71 86:126) LMARGIN(15) COPIES(1)
/*
El primer paso de este JCL se encarga de llamar a un procedimiento paraejecutar un programa de NATURAL en batch. Cuando se ejecute el programa,pedirá como entrada el nombre de la DDM a listar, y ese es el que figuraen forma genérica como VVVVVVVV y dejando la salida en el ficheroasociado a la DDname CMPRT01, es decir en el fichero JMPDES.JMP.TMP, queya existe.
El segundo paso, ejecuta el TSO en batch para ejecutar el comando de TSO:PRINTDS que se encarga de listar el dataset especificado como argumentodel parámetro clave DATASET, listandole, en la clase dada en el parámetroCLASS, por la impresora especificada como argumento del parámetro DEST.Deja un margen a la izquierda de 15 posiciones, y escribiendo acontinuación las columnas 1 a 71 y 86 a 126.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 203/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 203 de 374
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 204/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 204 de 374
3.7.10 IF-THEN-ELSE : Para bifurcación
Esta sentencia se usa para ejecutar una u otra instrucción, en base a quese cumpla la condición que acompaña a la palabra clave IF.
El formato de esta instrucción es :
IF condición THEN +DO
sentenciasEND-DO
ELSE +DO
sentenciasEND-DO
En el caso de que se cumpla dicha condición, se ejecuta la instrucciónasociada a la palabra clave THEN, y en caso contrario, se ejecuta laasociada a la palabra clave ELSE si es que existe, ya que es optativa.
Como ejemplo de esta sentencia se incluye un fragmento de la clistDISPLAY1 que se explica detalladamente al final del tema. Este fragmentopermite alocar un fichero si ya existe, o crearlo si no existe.
/* */ 001400/* ============= ESCRIBIR SALIDA EN FICHERO =========== */ 001500/* */ 001600
IF &SYSDSN('&FICHERO') = OK THEN + 001611ALLOC FILE(SALIDA) DATASET('&FICHERO') OLD REUSE 001620
ELSE ALLOC FILE(SALIDA) DATASET('&FICHERO') NEW CATALOG + 001630UNIT(3380) RECFM(F B) LRECL(80) + 001640BLKSIZE(6240) TRACKS SPACE(3 1) REUSE 001650
OPENFILE SALIDA OUTPUT 001800SET &SALIDA = 'CONTENIDO DE :' &LIBRERIA 001810
1611 antes de examinar la condición contenida en esta línea hay queexplicar que &SYSDSN('nombre_fichero') es una función delsistema que devuelve la cadena OK si existe el fichero que sele pasa como argumento.En consecuencia, la condición expresada en esta línea examinasi existe el data set cuyo nombre esta contenido en la
variable FICHERO.1620 En el caso de que exista, ejecuta el comando ALLOC a fin de
alocar dicho dataset asignándole el nombre lógico de SALIDA.
1630 En el caso de que no exista el fichero, le crea, para lo cualse especifican todos los parámetros necesarios para lacreación de un fichero.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 205/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 205 de 374
A veces, en lugar de ejecutar una única instrucción se desea ejecutar un
conjunto de instrucciones. En este caso, estas deben enmarcarse entre DOy END.
Como ejemplo de este punto se muestra un fragmento de la rutina para elmanejo de errores de la clist DISPLAY1 que se explica en detalle al finaldel tema.
ERROR + 00002000DO 00002100
SET &RC = &LASTCC 00002200IF &RC = 400 THEN + 00002300
WRITE FIN NORMAL DE LA CLIST 00002400ELSE + 00002500
DO 00026000
WRITE INESPERADO FIN DE CLIST 00002610WRITE RC ES &RC 00002700WRITE LINEA 00002700EXIT 00002800
END 00002900END 00003000
2610-2900 todas estas sentencias se ejecutaran en el caso de que elcontenido de la variable RC no sea 400
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 206/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 206 de 374
3.7.11 SET : permite asignar valores a variables
Esta sentencia se encarga de asignar un valor a una variable, o elresultado de evaluar una expresión aritmética.
El formato de esta instrucción es :
SET &variable = valor
Los valores, ya sean numéricos o alfanuméricos, se ajustan a laizquierda. En el caso de no querer que se realice esta justificación sedebe hacer uso de la función &STR. También se usara dicha función cuandoel valor asignado sea una cadena que contenga signos aritméticos, a finde que no intente evaluar las expresiones.
Como ejemplo se presenta un fragmento de la clist JMPALO00 que captura lasalida de un comando pasándola a un fichero y que se explica con detalleal final del tema.
SET &CONTA = 0 00001300SET &ULTIMO = &SYSOUTLINE 00001400
/* */00001500/* ============= MEMORIZAR SALIDA ===================*/00001600/* */00001700LOOP1: SET &CONTA = &CONTA + 1 00001800
IF &CONTA > &ULTIMO THEN GOTO LISTAR 00001900SET &TABLA&CONTA = &&SYSOUTLINE&CONTA 00002000GOTO LOOP1 00002100
1300 Inicializa la variable CONTA asignandola el valor 0
1400 Inicializa la variable ULTIMO asignándola el valor contenidoen la variable del sistema SYSOUTLINE. Es de resaltar el hechode que para asignar a una variable el contenido de otra, seindica anteponiendo el símbolo & al nombre de la variable.
1800 Esta línea incrementa el valor de la variable CONTA en unaunidad.
2000 Esta línea asigna a la variable TABLAnnn el contenido de lavariable del sistema &SYSOUTLINEnnn.En este caso es de resaltar el hecho de que las variables
indexadas se forman concatenando el índice a la variable.Lo mismo ocurre con la variable del sistema &SYSOUTLINEnnn,solo que en este caso se trata de asignar a las variablesTABLA1, TABLA2, ... el contenido de las variables cuyo nombrees &SYSOUTLINE1, ...Este es un caso particular del uso del && visto en lasvariables anidadas, ya que en este caso solo hay que tratarlocomo con un unico & ya que el segundo & forma parte del nombrede la variable por ser del sistema.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 207/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 207 de 374
3.7.12 DO-WHILE END : Repetitiva mientras se cumple una condición.
Esta sentencia establece una estructura repetitiva mediante la cual seejecutaran todas las instrucciones que se encuentren entre la sentenciaDO WHILE y END mientras se cumpla la condición que sirve de parámetro ala sentencia.
El formato de esta estructura es :
DO WHILE condiciónsentencia1...sentencian
END
Como ejemplo se presenta la repetitiva para leer un fichero que formaparte de la clist DISPLAY1 que se explica al final del tema.
OPENFILE ENTRADA INPUT 001000GETFILE ENTRADA 001010IF &LASTCC = 400 THEN SET &EOF = SI 001020
ELSE SET &EOF = NO 001030DO WHILE &EOF = NO 001040
SET MIEMBRO = &STR(&SUBSTR(1:10,&ENTRADA)) 001050ISPEXEC TBADD JMPLIB01 SAVE(MIEMBRO) 001060GETFILE ENTRADA 001070IF &LASTCC = 400 THEN SET &EOF = SI 001080
END 001090CLOSFILE ENTRADA 002000
1000 Abre el fichero físico asociado al nombre lógico ENTRADA
1010 Lee un registro del fichero lógico ENTRADA
1020-1030 Examina el código de retorno, y si es 400 carga la variableEOF con el valor SI que especifica que es fin de fichero, y encaso contrario, carga el valor NO en dicha variable.
1040 Cabecera de repetitiva con la condición que debe cumplirsepara que entre en la estructura.
1050 asigna a la variable MIEMBRO una cadena formada con los
octetos 1 a 10 del buffer que contiene el registro leído.1060 Añade a la tabla de ISPF JMPLIB01 una fila con la columna
MIEMBRO
1070 Lee un nuevo registro del fichero ENTRADA.
1080 Examina el código de retorno devuelto. y en caso de detectarseel fin de fichero carga la variable EOF con el valor SI.
1090 devuelve el control a la línea 1040.
2000 Cuando no se cumpla la condición de la línea 4 se pasara a
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 208/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 208 de 374
ejecutar esta sentencia ya que es la siguiente al bucle.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 209/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 209 de 374
3.7.13 OPENFILE : Abrir fichero
Esta sentencia abre un fichero lógico.
El formato de esta sentencia es :
OPEN fichero INPUTOPEN fichero OUTPUTOPEN fichero UPDATE
Este formato es lo suficientemente explicativo por si solo, no obstante,cabe comentar que para poder definir un fichero con el parámetro INPUTdebe existir el fichero.
Por defecto, los ficheros abiertos se abren con el modo de INPUT.
En el caso de definir un fichero como UPDATE, se permite leer y escribiren el mismo fichero, y en este caso, cuando se da la orden de escribir,se machaca el ultimo registro leído con el contenido movido al buffer.
Como ejemplo se presenta un fragmento de la clist JMPALO00 comentada masextensamente al final del tema.
SET &FICHERO= &SYSUID..JMP.LISTDS 001610IF &SYSDSN('&FICHERO') = OK THEN + 001611
ALLOC FILE(SALIDA) DATASET('&FICHERO') OLD REUSE 001620ELSE ALLOC FILE(SALIDA) DATASET('&FICHERO') NEW CATALOG + 001700
UNIT(3380) RECFM(F B) LRECL(80) + 001710BLKSIZE(6240) TRACKS SPACE(3 1) REUSE 001720
OPENFILE SALIDA OUTPUT 001800SET &SALIDA = 'LA SALIDA CONTIENE:' 001810PUTFILE SALIDA 001820
1610 Asigna a la variable FICHERO la cadena que se forma alconcatenar el prefijo del usuario a la cadena ".JMP.LISTDS"
1611 Examina si existe el fichero, y si es así le aloca; y si no esasí, establece los parámetros para su creación y le aloca.
1800 Abre para salida el fichero designado como SALIDA
1810 Carga en el buffer SALIDA la cadena que se indica.
1820 Escribe en el fichero físico el contenido del buffer.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 210/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 210 de 374
3.7.14 GETFILE : Lee el siguiente registro de un fichero secuencial
Esta sentencia lee un registro de un fichero secuencial, dejando sucontenido en el buffer que tiene como nombre el nombre lógico asociado alfichero físico en la sentencia ALLOC.
El formato de esta sentencia es :
GETFILE nombre_fichero
Cuando al ejecutar esta instrucción el sistema devuelve el código deretorno 400 es porque ha detectado el fin del fichero.
Como ejemplo se presenta el mismo fragmento de la clist DISPLAY1comentado con la sentencia ERROR, pero ligeramente modificado.
ERROR OFF 00010299ALLOC FI(ENTRADA) DA('&FICHERO') SHR REUSE 00010300ISPEXEC TBCREATE JMPALO01 NOWRITE NAMES(ELEMENTO,COMENTA) 00010400OPENFILE ENTRADA 00010500/* */ 00010600GETFILE ENTRADA 00010700IF &LASTCC ^= 0 THEN EXIT CODE(88) 00010750/* */ 00010900GETFILE ENTRADA 00010925SET RC = &LASTCC 00010950IF &RC = 400 THEN SET EOF = SI 00011960
ELSE EXIT CODE(89) 00011099
10299 desactiva la rutina de errores si la había.
10300 Aloca el dataset cuyo nombre se encuentra contenido en lavariable FICHERO para ser usado de entrada con disposiciónSHARED, y le asigna el nombre lógico de ENTRADA.
10400 Llama a la función de ISPF : TBCREATE para crear una tablaISPF en memoria (NOWRITE) con los campos de nombre ELEMENTO yCOMENTA.
10500 Abre el fichero ENTRADA
10700 Lee el primer registro, que no interesa ya que contiene un
texto fijo.10750 Examina si el código de retorno es distinto de 0, y si es así,
sale de la clist devolviendo el código de retorno 88
10925 Lee el siguiente registro, el cual contiene informacionvalida. Por lo tanto, con un registro valido leído, se entraen la repetitiva que sigue a esta instrucción.
10950 Memoriza en la variable RC el código de retorno devuelto porel sistema al leer el siguiente registro.
11960 Examina el código de retorno memorizado. Si es el
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 211/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 211 de 374
correspondiente al fin de fichero, carga la variable EOF con
el valor SI.
11099 en caso contrario sale de la clist devolviendo el código deretorno 89 para ser tratado como corresponda.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 212/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 212 de 374
3.7.15 PUTFILE : Escribe un registro en un fichero físico.
Esta sentencia escribe el contenido de un buffer como un registro en unfichero secuencial.
El formato de esta sentencia es :
PUTFILE nombre_fichero
Como ejemplo se presenta el mismo fragmento de la clist DISPLAY1comentada con la sentencia OPENFILE.
SET &FICHERO= &SYSUID..JMP.LISTDS 001610IF &SYSDSN('&FICHERO') = OK THEN + 001611
ALLOC FILE(SALIDA) DATASET('&FICHERO') OLD REUSE 001620
ELSE ALLOC FILE(SALIDA) DATASET('&FICHERO') NEW CATALOG + 001710UNIT(3380) RECFM(F B) LRECL(80) + 001720BLKSIZE(6240) TRACKS SPACE(3 1) REUSE 001730
OPENFILE SALIDA OUTPUT 001800SET &SALIDA = 'LA SALIDA CONTIENE:' 001810PUTFILE SALIDA 001820
1800 Abre para salida el fichero designado como SALIDA
1810 Carga en el buffer SALIDA la cadena que se indica.
1820 Escribe en el fichero físico el contenido del buffer.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 213/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 213 de 374
3.7.16 CLOSEFILE : Cierra el fichero
Esta sentencia cierra un fichero lógico.
El formato de esta sentencia es :
CLOSEFILE fichero1[,fichero2[,... ficheron]]])
Este formato es lo suficientemente explicativo por si solo, no obstante,cabe comentar que para poder liberar el fichero, en el caso de que sea desalida, es necesario ejecutar la sentencia FREE(fichero).
Como ejemplo se presenta un fragmento de la clist DISPLAY1 comentada masampliamente al final del tema.
ALLOC FI(ENTRADA) DA('&FICHERO') SHR 000100ISPEXEC TBCREATE JMPLIB01 NOWRITE NAMES(MIEMBRO) 000200OPENFILE ENTRADA INPUT 000300/* */ 000400
GETFILE ENTRADA 000500/* SET LIBRERIA = &STR(&SUBSTR(1:45,&ENTRADA)) */ 000600/* */ 000700GETFILE ENTRADA 000800DO WHILE &EOF = NO 000900
SET MIEMBRO = &STR(&SUBSTR(1:10,&ENTRADA)) 001000ISPEXEC TBADD JMPLIB01 SAVE(MIEMBRO) 001100GETFILE ENTRADA 001200
END 001300CLOSFILE ENTRADA 001400FREE FI(ENTRADA) 001500
0100 Aloca el fichero físico cuyo nombre se encuentra contenido enla variable FICHERO, y le asigna el nombre lógico de ENTRADA.
0300 Abre el fichero ENTRADA como de lectura
1400 cierra el fichero ENTRADA
1500 Libera para el sistema el fichero ENTRADA
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 214/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 214 de 374
3.7.17 ATTN : Rutina de ATENCION
Esta sentencia establece la rutina de atención, la cual controlara lasalida de una clist después de pulsar la tecla de atención (ATTN).
Esta sentencia es muy similar a la rutina de ERROR en el sentido de quesolo estará activa desde que el flujo de proceso ejecute esta sentencia,pero no se ejecutara mientras no se pulse la tecla de atención ATTM.
El formato de esta sentencia es :
(1) ATTN sentencia(2) ATTN DO
sentenciasEND
(3) ATTN OFF
Los formatos 1 y 2 son similares, con la única salvedad que en el formato1 solo se ejecuta una sentencia cuando se bifurca a esta rutina, mientrasque en el formato 2 se ejecuta el grupo de sentencias incluidas entre loslimitadores DO y END.
El formato 3 desactiva la rutina de atención.
Un ejemplo de esta rutina le constituye el siguiente fragmento:
ATTN DO 00100WRITENR Desea terminar la ejecución (S/N) ? 00200READ &CONTESTA 00300IF &CONTESTA = S THEN 00400
DO 00500CLOSEFILE ENTRADA 00600FREE FILE ENTRADA 00700EXIT QUIT 00800
END 00900ELSE RETURN 01000END 01100
200 Pregunta se si desea terminar la ejecución de la clist
400 En el caso de que la respuesta sea S cierra el fichero y lelibera para que no se quede "pillado" por el sistema.
800 Esta sentencia provoca la salida de la clist hasta el nivelsuperior protegido. (ver sentencia EXIT)
1000 En el caso de que no se desee terminar la ejecución de laclist se retorna al punto desde el que se bifurco a ejecutaresta rutina.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 215/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 215 de 374
3.7.18 TERMIN
Esta sentencia suspende temporalmente la ejecución de una clist,devolviendo el control de entrada de comandos al terminal.Al ejecutar desde el terminal el comando RETURN se continuara con laejecución de la clist suspendida.
El formato de esta sentencia es :
TERMIN
El siguiente ejemplo puede ilustrar el uso de esta sentencia:
ATTN DO 00100WRITE Para regresar con esta clist escriba RETURN 00200
TERMIN 00300RETURN 00400END 00500
0100 Establece la rutina de atención de la clist
0200 Saca un mensaje recordando que se va a salir temporalmente dela clist, pero que para volver a ella basta con ejecutar elcomando RETURN
0300 Sale temporalmente al sistema a fin de ejecutar comandos deTSO.
0400 Cuando se retorne a esta clist, por haber ejecutado el comandoRETURN desde el sistema, se retorna al punto desde el que sebifurco a esta rutina de atención.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 216/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 216 de 374
3.7.19 READDVAL : Separar la informacion contenida en &SYSDVAL
Esta sentencia se usa para separar en distintas variables el contenido dela variable &SYSDVAL. Esta variable del sistema puede contener:
- la ultima entrada leída desde el terminal cuando se ejecuto unasentencia READ sin el nombre de una variable; o
- un valor cargado directamente en la clist.
El formato de esta sentencia es :
READDVAL var1 [var2 [... varn]]
El siguiente ejemplo ilustra el uso de esta sentencia:
WRITE Escribe tu nombre y dos apellidos : 00100READ 00200READDVAL &NOMBRE &APE1 &APE2 00300WRITE TU NOMBRE ES &NOMBRE 00400WRITE Y TUS APELLIDOS SON &APE1 &APE2 00500
0200 Como se ejecuta la sentencia READ sin ningún nombre devariable, lo que se hace es cargar la variable SYSDVAL
0300 Asigna la primera palabra a la variable NOMBRE. El carácterblanco actúa de delimitador.La segunda a APE1 y la tercera a APE2 y desprecia el restoen el caso de que lo haya.
0400-0500 Escribe los datos para validacion
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 217/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 217 de 374
3.7.20 GLOBAL : define variables globales
La comunicación de informacion entre procedimientos de clist puedehacerse pasando el contenido de las variables como parámetros cuando sellama a otra clist, la cual a su vez, mediante las variables definidas enla sentencia PROC asigna los valores recogidos a las variablesespecificadas.
Existe una segunda forma de pasar informacion a una clist: usar variablesglobales, con lo cual no es necesario pasar parámetros a la segundaclist, y en consecuencia, no declarar las variables en la sentencia PROC.
Pero, para poder usar variables globales, es necesario definirlasmediante la sentencia GLOBAL tanto en la clist primaria como en la clistllamada.
El formato de esta sentencia es:
GLOBAL &var1 &var2 ... &varn
El siguiente ejemplo es una clist que pide el nombre de una librería parapoder listar sus miembros. Si se especifica un nombre, este es pasado aotra clist para tratar dicha librería.
/* <<<<<<<<<<<<<<<<<<<<<< JMPLIB00 >>>>>>>>>>>>>>>>>>> */ 0010100/* ====== CAPTURA LOS MIEMBROS DE UNA LIBRERIA ========= */ 0010200
PROC 0 0010300CONTROL MSG 0010400SET RC = 0 0010500GLOBAL &LIBRERIA 0010600SET &LIBRERIA = &SYSUID.. 0010700ISPEXEC DISPLAY PANEL(JMPLIB01) CURSOR(LIBRERIA) 0010800SET RC = &LASTCC 0010900IF &LIBRERIA = &STR() THEN EXIT 0010000EXEC 'DESJMP.CLIST(JMPLIB05)' 0011000EXIT 0011100
10600 Define como GLOBAL la variable LIBRERIA
10700 Carga la variable con el identificador del usuario
10800 Saca un panel para que el usuario especifique la librería de
la que se desea listar los miembros.11000 Invoca a la clist que realizara esta función sobre la librería
que el usuario especifique en el panel.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 218/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 218 de 374
/* */
/* <<<<<<<<<<<<<<<<<<<<<< JMPLIB00 >>>>>>>>>>>>>>>>>>>>>>>>*/ 00000100/* */ 00001030
PROC 0 00001040CONTROL NOLIST NOCONLIST 00001050GLOBAL &LIBRERIA 00001055SET &SYSOUTTRAP = 999 00001060LISTDS '&LIBRERIA' MEMBERS 00001070...
1055 Establece como global la variable LIBRERIA
1070 Hace uso del contenido de esa variable para ejecutar elcomando de TSO LISTDS con el parámetro LIBRERIA y con laopción MEMBERS a fin de obtener una lista de los miembros de
un fichero particionado..
El resto de la clist es similar a la que captura las librerías alocadas.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 219/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 219 de 374
3.8 Comandos de TSO
Este apartado trata los comandos de TSO de uso mas frecuente, presentandojunto al nombre del comando, la abreviatura admitida, y una brevedescripción del mismo.
ALLOCATE ALLOC este comando se usa para incluir en el entorno delusuario la librería o el fichero que le acompaña comoparámetro.
ALTLIB Este comando se usa para añadir hasta dos niveles delibrerías al fichero SYSPROC a fin de poder ejecutarclist invocandolas de forma implícita.
ATTRIB ATTR Este comando se usa para definir características deficheros
CALL Este comando se usa para ejecutar el programa contenidoen la librería(miembro) que se especifique.
CANCEL Este comando cancela la ejecución del job cuyo JOBID seespecifica como parámetro.
COPY Este comando, que puede no estar disponible en lainstalación, se usa para copiar ficheros desde un fuenteal fichero que se especifica como destino detrás de lapalabra clave TO. En el caso de que el fichero destino noexistiera, le crea.
DEFINE DEF Este comando se usa para crear entradas en el catalogodel sistema referenciando ficheros u objetos VSAM.
DELETE DEL Este comando se usa para borrar ficheros.
EDIT E Este comando permite crear o modificar los datos de unfichero.
END Este comando termina la ejecución de un procedimiento.
EXEC EX Este comando permite ejecutar un procedimiento de CLIST oun comando REXX
FORMAT FORM Este comando es usado para formatear datos que vayan aser impresos, con control de páginas, cabeceras, etc.
FREE Este comando libera, es decir desasigna, recursosdefinidos con el comando ALLOC
HELP H Este comando invoca a la aplicacion de ayudas del TSO
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 220/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 220 de 374
LINK Este comando invoca al programa linkador-editor para
convertir la salida del compilador en código ejecutable.
LIST L Lista el contenido de un fichero por el terminal. Puedeno estar disponible en la instalación.
LISTALC LISTA Este comando lista todos los recursos que están asignadosa la sesión de quien ejecuta el comando.
LISTBC LISTB Este comando lista los mensajes dejados para el usuarioen la librería de BROADCAST.
LISCAT LISTC Este comando lista el catalogo del sistema.
LISTDS LISTD Este comando lista características de los ficheros odatasets.
LOADGO LOAD Este comando se usa para convertir la salida delcompilador en un programa ejecutable, y ejecutarlodirectamente.
LOGOFF Termina la sesión de TSO.
MERGE M Este comando se usa para unir en un fichero datos devarios ficheros. Puede ser que no este disponible en lainstalación el uso de este comando.
OUTDES Este comando se usa para definir características del
fichero de SYSOUT.
OUTPUT OUT Este comando se usa para escribir la salida de un Job enun fichero.
PRINT Este comando se usa para imprimir ficheros VSAM.
PROFILE PROF Este comando se usa para cambiar característicasasociadas al perfil del usuario.
PROTECT PROT Este comando se usa para crear o cambiar la password deficheros. Es ignorado si la instalación dispone de RACF.
RENAME REN Este comando se usa para cambiar el nombre de un fichero.
REPRO Este comando es usado para copiar ficheros.
RUN Este comando se usa para compilar, cargar y ejecutar elcódigo fuente del fichero pasado como parámetro.
SEND SE Este comando se usa para enviar mensajes a otro terminalde usuario.
STATUS Este comando se usa para chequear el estado de un job queesta en ejecución.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 221/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 221 de 374
SUBMIT SUB Este comando se usa para enviar al JES un JCL para su
ejecución.
TERMINAL TERM Este comando es usado para cambiar características delterminal.
TEST Este comando se usa para testear un programa.
TIME Este comando visualiza la fecha y hora, así como otrasestadísticas.
VERIFY VFY Este comando es usado para verificar la informacion delcatalogo con la del fichero VSAM.
WHEN Este comando se usa para ejecutar condicionalmentefunciones en base al código de retorno devuelto por elprograma que le precede.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 222/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 222 de 374
3.9 Funciones estándar
3.9.1 &DATATYPE : Determinar tipo de variable
Esta función se usa para determinar si el contenido de una variable esnumérica o alfanumérica.
Los valores devueltos son: "NUM" o "CHAR" dependiendo del contenido.
Ejemplo: SET &TIPO = &DATATYPE(&VARIABLE)IF &TIPO = CHAR +
THEN SET ....ELSE SET ....
3.9.2 &EVAL : Evaluar el contenido de una expresión
Esta función se usa normalmente en sentencias WRITE para evaluar elcontenido de una expresión y escribir el resultado.
Ejemplo: SET &VAL1 = 5SET &VAL2 = 3WRITE &VAL1 + &VAL2 = &EVAL(&VAL1 + &VAL2)
3.9.3 &LENGTH : Determinar la longitud de una expresión
Esta función se usa normalmente para determinar la longitud de una cadenade caracteres o el contenido de una variable.
Suele usarse en combinación con la función &SUBSTR.
Ejemplo: SET &LONGITUD = &LENGTH(&VARIABLE)
3.9.4 &NRSTR : Determina que no se realicen sustituciones con &&
Esta función especifica que en el caso de que la cadena que sirve deargumento a esta función contenga un doble ampersand (&&), no se realicela sustitución de la variable.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 223/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 223 de 374
3.9.5 &STR : Determina que el contenido del argumento es una cadena
Esta función especifica que la cadena pasada como argumento sea tratadacomo cadena de caracteres, no debiendo efectuarse sustituciones nievaluarse expresiones.
Ejemplo: Sentencia Contenido
SET &VAL1 = UN EJEMPLO "EJEMPLO"SET &VAL2 = &STR( UN EJEMPLO ) " EJEMPLO "SET &VAL3 = ESTADOS R3-R5 Error al evaluar expresiónSET &VAL4 = &STR(ESTADOS R3-R5) "ESTADOS R3-R5"
3.9.6 &SUBSTR : Extrae una subcadena de una cadena o de una variable
Esta función extrae de una cadena o de una variable la subcadena que seindica, de acuerdo con el siguiente formato:
&SUBSTR(octeto_inicio:octeto_final,variable)
Ejemplo: SET &ELEMENTO = &SUBSTR(2:5,EJEMPLO) "JEMP"SET &VARIABLE = EJEMPLOSET &ELEMENTO = &SUBSTR(1:3,&VARIABLE) "EJE"
3.9.7 &SYSCAPS : Pasa a mayúsculas el argumento
Esta función se usa para convertir a mayúsculas el argumento de lafunción.
Ejemplo: SET &VARIABLE = &SYSCAPS(&VARIABLE)
3.9.8 &SYSDSN : Determina si existe como dataset el argumento
Esta función se usa para saber si existe un fichero determinado.
Los valores devueltos por la función son:- "OK" si existe , o- "DATASET NOT FOUND" si no existe.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 224/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 224 de 374
3.9.9 &SYSINDEX : Buscar un carácter en una cadena
Esta función se usa para determinar la posición que ocupa un determinadocarácter en una cadena.
Ejemplo: SET &POSICION = &SYSINDEX(HOLA,ESTO SIRVE PARA BUSCAR HOLA)WRITE SE ENCUENTRA EN &POSICIONAl ejecutar aparece:
SE ENCUENTRA EN 24
3.9.10 &SYSLC : Pasa a minúsculas el argumento pasado
Esta función se usa para convertir a minúsculas el valor que se le pasecomo argumento.
Ejemplo: SET &VARIABLE = &SYSLC(&VARIABLE)
3.9.11 &SYSNSUB : Determina el nivel de sustituciones.
Esta función se utiliza para controlar el nivel de sustitución devariables simbólicas y expresiones.
Ejemplo :
SET &VALOR1 = EJEMPLOSET &VALOR2 = &&VALOR1SET &VALOR3 = &&VALOR2WRITE &SYSNSUB(0,&VALOR3)WRITE &SYSNSUB(1,&VALOR3)WRITE &SYSNSUB(2,&VALOR3)WRITE &SYSNSUB(3,&VALOR3)
Al ejecutar este procedimiento, aparece escrito en pantalla:
&VALOR3
&VALOR2&VALOR1EJEMPLO
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 225/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 225 de 374
3.10 Ejemplos
3.10.1 JMPALO00 : Paso a fichero de las librerías alocadas
Salida del comando de TSO LISTA ejecutado directamente:
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ------------------- MENU PARTICULAR DE JMP ------------------------OPTION ===> tso lista
1 ...
X EXIT - SALIR DEL MENU
TERMFILEDESJMP.JMP.PANELDESJMP.ISPF.ISPPROFDESJMP.INT.TABLA ***
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 226/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 226 de 374
Listado del procedimiento de comandos:
/* <<<<<<<<<<<<<<<<<<<<<< JMPALO00 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *//* =========== CAPTURA Las librerías alocadas ==================== */
PROC 0CONTROL MSGSET CABECERA = <<< Librerías alocadas >>>SET RC = 0EXEC 'DESJMP.CLIST.JMP(JMPSEG01)','A'CONTROL NOLIST NOCONLISTSET &SYSOUTTRAP = 999LISTASET &SYSOUTTRAP = 0SET &NOMBRE = TABLASET &CONTA = 0
SET &ULTIMO = &SYSOUTLINE/* *//* ============= MEMORIZAR SALIDA ============================= *//* */LOOP1: SET &CONTA = &CONTA + 1
IF &CONTA > &ULTIMO THEN GOTO LISTARSET &NOMBRE&CONTA = &&SYSOUTLINE&CONTAGOTO LOOP1
EXIT1: SET &CONTA = 0WRITE NUMERO DE ELEMENTOS: &ULTIMO
/* */LOOP2: SET &CONTA = &CONTA + 1
IF &CONTA > &ULTIMO THEN GOTO LISTARSET &SALIDA = &&NOMBRE&CONTAWRITE &SALIDAGOTO LOOP2
/* */LISTAR: SET &FICHERO= &SYSUID..JMP.CMD/* WRITE *//* WRITENR LA SALIDA CONTIENE &ULTIMO LINEAS *//* WRITE *//* *//* ============= ESCRIBIR SALIDA EN FICHERO =================== *//* */
IF &SYSDSN('&FICHERO') = OK THEN +ALLOC FILE(SALIDA) DATASET('&FICHERO') OLD REUSE
ELSE ALLOC FILE(SALIDA) DATASET('&FICHERO') NEW CATALOG +UNIT(3380) RECFM(F B) LRECL(80) +BLKSIZE(6240) TRACKS SPACE(3 1) REUSE
/* */OPENFILE SALIDA OUTPUTSET &SALIDA = 'LA SALIDA CONTIENE:'PUTFILE SALIDA
/* */
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 227/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 227 de 374
SET &RC = 0
ERROR +DO
SET &RC = &LASTCCIF &RC = 400 THEN +
WRITE FIN NORMAL DE LA CLISTELSE +
DOWRITE INESPERADO FIN DE CLISTWRITE RC ES &RCWRITE LINEAEXIT
ENDEND
/* */
SET &CONTA = 6GRABAR: SET &CONTA = &CONTA + 1
IF &CONTA > &ULTIMO THEN GOTO CERRARSET &LINEA = &&NOMBRE&CONTASET &SALIDA = &LINEAPUTFILE SALIDA
/* WRITE &SALIDA */GOTO GRABAR
CERRAR: CLOSFILE SALIDAFREE FILE(SALIDA)EXEC 'DESJMP.CLIST.JMP(DISPLAY1)','&FICHERO'
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 228/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 228 de 374
Salida del comando :
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>------------------- MENU PARTICULAR DE JMP ------------------------OPTION ===> tso lista
1 ...
X EXIT - SALIR DEL MENU
TERMFILEDESJMP.JMP.PANELDESJMP.ISPF.ISPPROFDESJMP.INT.TABLA
***<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 229/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 229 de 374
3.10.2 DISPLAY1 : visualizar en panel el fichero generado con JMPALO00
Panel que se desea obtener:
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>@JMP-94----------------- Lista de librerías --------- ROW 1 TO 16 OF 94OPCION====> SCROLL ==> CSR
Opciones : B Browse <<< LIBRERIAS ALOCADAS >>>_______E EditM Miembros
m Librerías Observaciones- -------------------------------------------- ---------------SYS1.BRODCASTDESJMP.JMP.ESKELETO
DESJMP.JMP.MENSAJESDESJMP.JMP.PANELDESJMP.JMP.TABLASDESJMP.JMP.TABLAS(JMPINT00)DESJMP.SPFLOG1.LIST
************************* BOTTOM OF DATA *****************************
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
A continuación se muestra el listado de la clist que sirve paravisualizar con un panel el contenido de un fichero secuencial. Aunque eneste caso dicho fichero contienen las librerías alocadas, que han sidocargadas previamente en el ejemplo anterior.
Los comentarios a este ejemplo pueden verse ampliamente en la sentenciaERROR.
/* <<<<<<<<<<<<<<<<<<<<<< DISPLAY1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *//* =========== CAPTURA Las librerías alocadas ==================== */
PROC 1 FICHERO/* *//* ============= DISPLAYA LA TABLA DE ELEMENTOS ==================== *//* */CONTROL MSG
SET EOF = NOSET PF3 = &LASTCCSET RETCOD = 0SET RC = 0ERROR +DOSET RETCOD = &LASTCCIF &RETCOD = 8 THEN +
DOIF &PASO = EXAMEN THEN +
DOSET EXISTE = NORETURN
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 230/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 230 de 374
END
WRITENR YA EXISTE LA TABLA JMPALO01. NO PUEDO CREARLAREAD SEGUIREXIT
ENDIF &RETCOD = 400 THEN +
DOSET EOF = SIRETURNEND
ELSE +EXIT
ENDALLOC FI(ENTRADA) DA('&FICHERO') SHR REUSEISPEXEC TBCREATE JMPALO01 NOWRITE NAMES(ELEMENTO,COMENTA)
OPENFILE ENTRADA/* */
GETFILE ENTRADA/* SET LIBRERIA = &STR(&SUBSTR(1:45,&ENTRADA)) *//* */GETFILE ENTRADADO WHILE &EOF = NO
SET ELEMENTO = &STR(&SUBSTR(01:44,&ENTRADA))SET COMENTA = &STR(&SUBSTR(45:60,&ENTRADA))
/* */SET PASO = EXAMENSET EXISTE = SIISPEXEC TBEXIST JMPALO01IF &EXISTE = NO THEN ISPEXEC TBADD JMPALO01 SAVE(ELEMENTO,COMENTA)GETFILE ENTRADA
ENDCLOSFILE ENTRADAFREE FI(ENTRADA)ERROR OFFISPEXEC TBSCAN JMPALO01 ARGLIST(ELEMENTO) NEXTISPEXEC TBSORT JMPALO01 FIELDS(ELEMENTO,C,A)SET &SIGUE = SIDO WHILE &SIGUE = SI
ISPEXEC TBTOP JMPALO01ISPEXEC TBDISPL JMPALO01 PANEL(JMPALO02)IF &LASTCC = 8 THEN -
DOISPEXEC TBCLOSE JMPALO01EXIT
ENDSET &ELEMENTO = &ELEMENTOSET &LIBRERIA = &LIBRERIASET &FICHERO = &LIBRERIA.(&ELEMENTO.)IF &MARCA = b THEN -
DOISPEXEC BROWSE DATASET('&FICHERO')SET &COMENTA = 'VISUALIZADA'
ENDIF &MARCA = E THEN -
DOISPEXEC EDIT DATASET('&FICHERO')
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 231/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 231 de 374
SET &COMENTA = 'EDITADA '
ENDIF &MARCA = M THEN -
DOEXEC 'DESJMP.CLIST.JMP(JMPLIB05)','&FICHERO'
ENDSET &MARCA = ' '
END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 232/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 232 de 374
Panel JMPALO02:
)ATTR default($+_)? TYPE(INPUT) INTENS(low) CAPS(off) JUST(LEFT)# TYPE(OUTPUT) INTENS(high) CAPS(ON) JUST(LEFT) pad(_)
)BODY$------------------------- Lista de librerías -------------------------$ OPCION====>_Zcmd +SCROLL ==> _scin+$+ Opciones :$B+Browse #cabecera ++ $E+Edit+ $M+Miembros+ m Librerías Observaciones+ - -------------------------------------------- ---------------)MODEL ROWS(ALL)
+ _z?elemento +?comenta +)INIT&SCIN= Csr.zvars = marca&marca = ' '
)END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 233/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 233 de 374
3.10.3 JMPLIB00 : capturar los miembros de una librería
/* <<<<<<<<<<<<<<<<<<<<<< JMPLIB00 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *//* ====== CAPTURA LOS MIEMBROS DE UNA LIBRERIA ===================== */
PROC 0 TESTCONTROL MSGSET RC = 0SET LIBRERIA = &SYSUID..ISPEXEC DISPLAY PANEL(JMPLIB01) CURSOR(LIBRERIA)SET RC = &LASTCCIF &LIBRERIA = &STR() THEN EXITEXEC 'DESJMP.CLIST.JMP(JMPLIB05)','&LIBRERIA'
/* */
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 234/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 234 de 374
3.10.4 JMPLIB05 :
/* <<<<<<<<<<<<<<<<<<<<<< JMPLIB05 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *//* ====== CAPTURA LOS MIEMBROS DE UNA LIBRERIA ===================== *//* */
PROC 0 LIBRERIA TEST/* */
CONTROL NOLIST NOCONLISTSET &SYSOUTTRAP = 999LISTDS '&LIBRERIA' MEMBERSSET &SYSOUTTRAP = 0SET &NOMBRE = TABLASET &CONTA = 0SET &ULTIMO = &SYSOUTLINE
/* */
/* ============= MEMORIZAR SALIDA ============================= *//* */
IF &TEST = TEST THEN SET &ETIQUETA = EXIT1ELSE SET &ETIQUETA = LISTAR
/* */LOOP1: SET &CONTA = &CONTA + 1
IF &CONTA > &ULTIMO THEN GOTO &ETIQUETASET &NOMBRE&CONTA = &&SYSOUTLINE&CONTAGOTO LOOP1
/* */EXIT1: SET &CONTA = 0
WRITE NUMERO DE ELEMENTOS: &ULTIMO/* */LOOP2: SET &CONTA = &CONTA + 1
IF &CONTA > &ULTIMO THEN GOTO LISTARSET &SALIDA = &&NOMBRE&CONTAWRITE &SALIDAGOTO LOOP2
/* */LISTAR: IF &TEST = TEST THEN WRITENR LA SALIDA CONTIENE &ULTIMO LINEAS/* *//* ============= ESCRIBIR SALIDA EN FICHERO =================== *//* */
SET &FICHERO= &SYSUID..JMP.LISTDSIF &SYSDSN('&FICHERO') = OK THEN +
ALLOC FILE(SALIDA) DATASET('&FICHERO') OLD REUSE
ELSE ALLOC FILE(SALIDA) DATASET('&FICHERO') NEW CATALOG +UNIT(3380) RECFM(F B) LRECL(80) +BLKSIZE(6240) TRACKS SPACE(3 1) REUSE
OPENFILE SALIDA OUTPUTSET &SALIDA = 'LA SALIDA CONTIENE:'PUTFILE SALIDA
/* */
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 235/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 235 de 374
SET &RC = 0
ERROR +DO
SET &RC = &LASTCCIF &RC = 400 THEN +
WRITE FIN NORMAL DE LA CLISTELSE +
DOWRITE INEXPERADO FIN DE CLISTWRITE RC ES &RCWRITE LINEAEXIT
ENDEND
/* */
SET &CONTA = 6GRABAR: SET &CONTA = &CONTA + 1
IF &CONTA > &ULTIMO THEN GOTO CERRARSET &LINEA = &&NOMBRE&CONTASET &SALIDA = &LINEAPUTFILE SALIDA
/* WRITE &SALIDA */GOTO GRABAR
CERRAR: CLOSFILE SALIDAFREE FILE(SALIDA)
/* *//* ============== DISPLAYA LA TABLA DE MIEMBROS ==================== *//* */
CONTROL MSGSET EOF = NOSET RETCOD = 0
/* */ERROR +
DOSET RETCOD = &LASTCCIF &RETCOD = 8 THEN +
DOWRITENR YA EXISTE LA TABLA jmplib01. NO PUEDO CREARLAREAD SEGUIREXIT
ENDIF &RETCOD = 400 THEN +
DOSET EOF = SIRETURNEND
ELSE +EXIT
END/* */
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 236/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 236 de 374
ALLOC FI(ENTRADA) DA('&FICHERO') SHR
ISPEXEC TBCREATE JMPLIB01 NOWRITE NAMES(MIEMBRO)OPENFILE ENTRADAGETFILE ENTRADA/* */GETFILE ENTRADADO WHILE &EOF = NO
SET MIEMBRO = &STR(&SUBSTR(1:10,&ENTRADA))ISPEXEC TBADD JMPLIB01 SAVE(MIEMBRO)GETFILE ENTRADA
ENDCLOSFILE ENTRADAFREE FI(ENTRADA)/* -----------------------------------------------*//* PRESENTAR Y TRATAR LA TABLA */
/* -----------------------------------------------*/ERROR OFFISPEXEC TBSCAN JMPLIB01 ARGLIST(MIEMBRO) NEXTISPEXEC TBSORT JMPLIB01 FIELDS(MIEMBRO,C,A)SET &SIGUE = SIDO WHILE &SIGUE = SI
ISPEXEC TBTOP JMPLIB01ISPEXEC TBDISPL JMPLIB01 PANEL(JMPLIB02)IF &LASTCC = 8 THEN -
DOISPEXEC TBCLOSE JMPLIB01EXIT
ENDSET &MIEMBRO = &MIEMBROSET &LIBRERIA = &LIBRERIASET &FICHERO = &LIBRERIA.(&MIEMBRO.)IF &MARCA = B THEN -
DOISPEXEC BROWSE DATASET('&FICHERO')
ENDIF &MARCA = E THEN -
DOISPEXEC EDIT DATASET('&FICHERO')
ENDIF &MARCA = P THEN -
DOEXEC 'DESJMP.CLIST(IMPRIMIR)','&fichero'
ENDSET &MARCA = ' '
END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 237/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 237 de 374
Panel JMPLIB01:
)ATTR default($+_)? TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT) PAD('_')
)BODY$----------------- Listar miembros de un directorio (PDS) -------------$ OPCION ===> _Zcmd+ +$$$+ Librería ........ : ?librería +$++
+ Esta opción lista los miembros de un fichero particionado+ dejando la salida en$&zuser..jmp.listds++$$$)INIT)PROCVER (&librería,dsname)&ZSEL = TRANS( TRUNC (&ZCMD,'.')
x,'exit'' ',' '*,'?' )
)END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 238/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 238 de 374
Panel JMPLIB02:
)ATTR default($+_)? TYPE(INPUT) INTENS(low) CAPS(ON) JUST(LEFT)# TYPE(OUTPUT) INTENS(high) CAPS(ON) JUST(LEFT) pad(_)
)BODY$----------------- Listado de miembros de un PDS -----------------------$ OPCION====>_Zcmd + $SCROLL == > _scin+$+ Librería ........ :#librería comandos $B+Browse $E+Edit $P+Imprimir$$ Miembros Mensaje+ * ******** ***********************************)MODEL ROWS(ALL)+ _z?miembro +#mensaje +
)INIT&SCIN= Csr.zvars = marca.cursor = marca&marca = ' '
)END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 239/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 239 de 374
3.10.5 LISTAR : Listar por impresora, con IEBGENER un fichero
/* <<<<<<<<<<<<<<<<<<<<<<< LISTAR >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */* */* ====== LISTAR FICHERO POR RMT101 EN VERTICAL Y LETRA PEQUE#A ==== */* *
PROC 9 FICHERO +FORMATO +REMOTO +CLASE +CABECERA +DERECHA +IZQUIERDA +PIE +LRCL
/* *SET &LABEL=LEERSET &TEST = TESTNOIF &TEST = TEST THEN CONTROL SYMLIST CONLIST MSG
ELSE CONTROL NOMSG/* ----------------------------------------------------------------- *
IF &LRCL = 0 THEN SET LRCL = 80/* */* */* ---------------------------------- EXAMINAR FORMATO/* *
IF '&FORMATO' = 'V' THEN GOTO VERTICAL/* */* ========================= PONER HORIZONTAL ====================== */* *HORIZONTAL: +
ALLOC FILE(SYSUT1) DATASET('DESJMP.JMP.JCL(HORIZONT)') SHR REUSEALLOC FILE(SYSUT2) DATASET('&SYSUID..JMP.TMP') OLD REUSEOPENFILE SYSUT1 INPUTOPENFILE SYSUT2 OUTPUTGETFILE SYSUT1SET &SYSUT2 = &SYSUT1PUTFILE SYSUT2CLOSFILE SYSUT1CLOSFILE SYSUT2FREE FILE(SYSUT1 SYSUT2)GOTO SEGUIR
/* *
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 240/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 240 de 374
/* ========================= PONER VERTICAL ======================== *
/* *VERTICAL: +
ALLOC FILE(SYSUT1) DATASET('DESJMP.JMP.JCL(VERTICAL)') SHR REUSEALLOC FILE(SYSUT2) DATASET('&SYSUID..JMP.TMP') OLD REUSEOPENFILE SYSUT1 INPUTOPENFILE SYSUT2 OUTPUTGETFILE SYSUT1SET &SYSUT2 = &SYSUT1PUTFILE SYSUT2CLOSFILE SYSUT1CLOSFILE SYSUT2FREE FILE(SYSUT1 SYSUT2)
/* */* ========================= ESCRIBIR FORMATO ====================== *
/* *SEGUIR: +
FREE DA('&SYSUID..JMP.TMP')ALLOC FILE(SALIDA) DATASET('&SYSUID..JMP.TMP') MOD REUSEOPENFILE SALIDA OUTPUT
/* */* ========================= ESCRIBIR FICHERO ====================== */* *
ALLOC F(ENTRADA) REUSE DA('&FICHERO') SHRIF &LASTCC NE 0 THEN DO
WRITE ERROR EN LA ALOCACION DEL FICHERO DE ENTRADA &FICHEROFREE DA('&FICHERO')EXIT
ENDOPENFILE ENTRADA INPUTSET &RC = 0/* --------------------- RUTINA DE ERROR ------------------------ *
ERROR +DO
SET &RC = &LASTCCIF &RC = 400 THEN +
GOTO FINPASO1ELSE +
DOWRITE INESPERADO FIN DE CLIST : RETURN CODE = &RCWRITE ===========================================EXIT
ENDEND
/* =======================================================SET &BLANCOS = &STR( )SET &SALIDA = &STR(&BLANCOS &BLANCOS FICHERO: &FICHERO )PUTFILE SALIDASET &SALIDA = &BLANCOSPUTFILE SALIDAPUTFILE SALIDALEER: GETFILE ENTRADAIF &LASTCC NE 400 THEN +
DOSET &SALIDA = &STR(&BLANCOS &SUBSTR(1:&LRCL,&ENTRADA))PUTFILE SALIDA
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 241/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 241 de 374
GOTO &LABEL
ENDFINPASO1: +CLOSFILE ENTRADACLOSFILE SALIDAFREE FILE(ENTRADA SALIDA)
/* */* ========================= IMPRMIR TEMPORAL ====================== */* *
ALLOC FILE(SYSUT1) DATASET('&SYSUID..JMP.TMP') SHR REUSEALLOC FILE(SYSUT2) SYSOUT(&CLASE) DEST(&REMOTO) REUSEALLOC FILE(SYSPRINT) DUMMY REUSEALLOC FILE(SYSIN) DUMMY REUSECALL 'SYS1.LINKLIB(IEBGENER)'FREE FILE(SYSUT1 SYSUT2 SYSPRINT SYSIN)
/* *WRITE =====>> FICHERO : &FICHERO IMPRESO POR RMT101 : < OK >
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 242/373
TSO para desarrolladores: CLIST Autor: José M. Peco
Página 242 de 374
3.10.6 NAT
/* <<<<<<<<<<<<<<<<<<<<<< LNAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *//* ====== LISTA OBJETO POR RMT101 EN VERTICAL Y LETRA PEQUE#A ====== */PROC 2 OBJETO LIBRERIA/* CONTROL LIST CONLIST */EDIT 'DESJMP.JMP.JCLTIPO(INT0051J)' OLD CNTL NONUMC * 999 'YYYYYYYY' '&OBJETO' ALLTOPC * 999 'ZZZZZZZZ' '&LIBRERIA' ALLSUBMITEND NOSAVE
DESJMP.JMP.JCLTIPO(INT0051J):
//XXXXXXLP JOB (123,456),'JMP-PRU',CLASS=T,MSGCLASS=X,// NOTIFY=XXXXXX,MSGLEVEL=(0,0)//*=====================================================================//* PASAR OBJETO NATURAL A FICHERO TEMPORAL//*=====================================================================//*//NATBATCH EXEC DNATURAL//*//DDPRINT DD DUMMY SYSOUT=*//CMPRINT DD DUMMY SYSOUT=*//*MPRT01 DD SYSOUT=I,DEST=RMT101,COPIES=1,OUTPUT=*.OUT1//OUT1 OUTPUT CHARS=GTE2,PAGEDEF=388STU,FORMDEF=STDA//CMPRT01 DD DSN=DESJMP.JMP.TMP,DISP=OLD//CMSYNIN DD DSN=DESJMP.JMP.JCL(LOGONPGM),DISP=SHR//************************************************************// DD *JMP0001PZZZZZZZZYYYYYYYYFIN/*//*=====================================================================
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 243/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 243 de 374
Tema 4 : Diálogos ISPF
4.1 Generalidades
Un dialogo ISPF esta formado por la adecuada combinación de los distintoscomponentes que pueden intervenir en el mismo.
Estos componentes son:
- Paneles- Funciones- Mensajes- Tablas- Esqueletos- Tutorial
Este tema tratara de ampliar cada uno de los componentes citados acompañandocada explicación con un ejemplo aclaratorio.
Panel: Un panel es la definición de una pantalla completa tal y como lavera el usuario, pudiendo ir acompañada de procesos elementales.
En función de la finalidad del panel, se pueden considerar 4tipos distintos:
- Menu- Entrada de datos- Visualizador de datos- Pantallas de HELP
Como norma general, se debe tener en cuenta que los panelesdiferencian entre mayúsculas y minúsculas los valores que seasignen a las variables, si bien, a la hora de su codificación,se pueden escribir con mayúsculas o minúsculas, ya internamentesus especificaciones son interpretadas como mayúsculas.
Panel MENU o panel de Selección
Este tipo de panel presenta al usuario las distintas opciones quepuede elegir desde dicho panel.
La opción elegida por el usuario se recoge en una variable, y enbase a este valor se ejecutara el siguiente paso del dialogo,pudiendo ser este:
- Otro panel- Un comando- Un programa
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 244/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 244 de 374
Panel de Entrada de datos
Este tipo de panel pide los datos necesarios para la ejecución deuna función; o visualiza el contenido de determinadas variablespreviamente cargadas, como por ejemplo el resultado de unafunción, etc.; o una mezcla de ambas.
Panel para visualizar datos
Este tipo de pantalla representa una particularizacion del tipoanterior, necesitando para su ejecución un proceso repetitivo,pues se utiliza para visualizar el contenido de ficheros dedatos.
La definición de este panel consiste en definir el proceso de unafila genérica. Posteriormente, en tiempo de ejecución, ISPF seencargara de procesar el fichero completo en base a la definiciónrealizada.
Panel de HELP
Este tipo de Panel solo contiene texto, pues como su nombreindica, representan la explicación que el desarrollador hapreparado para que el usuario pueda seguir un dialogo ISPF sinproblemas.
En ISPF se dispone del comando PANELID que permite visualizar enel ángulo superior izquierdo el nombre del miembro que contieneel panel que esta en pantalla.
Función
Se entiende por Función un procedimiento escrito en cualquierlenguaje y que tiene por finalidad proporcionar una salida en
base a determinados parámetros de entrada pasados como argumentosen el momento de llamar a la misma.
Un ejemplo de función podría ser el escribir en un fichero losnombres de las distintas librerías alocadas para su posteriortratamiento.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 245/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 245 de 374
Mensajes
Es la forma diseñada por ISPF para poder informar al usuario a lolargo del dialogo del resultado de determinadas acciones o deciertas validaciones.
Existen dos tipos de mensajes en un dialogo:
- Mensajes cortos- Mensajes largos
ISPF dispone de forma predeterminada del ángulo superior derechode la pantalla para la presentación de los mensajes cortos, y dela tercera línea de la pantalla para la presentación de losmensajes largos.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 246/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 246 de 374
Tablas
Las tablas son matrices de datos de dos dimensiones, y enconsecuencia son el equivalente de los ficheros de datos, ya querepresentan:
Campo 1 ... Campo n
Fila 1
...
Fila m
Una característica importante de las tablas ISPF es que para serprocesadas deben residir en memoria, lo cual puede afectar altamaño de la tabla, ya que si esta reside en disco, debe sercargada previamente en memoria.
Esqueletos
Se entiende por esqueleto un fichero preformateado con la salidadeseada, en el cual se han sustituido los valores variables pornombres de variables precedidos por un &.
Posteriormente, este fichero será procesado para generar la
salida deseada, y será en este proceso, llamado 'FILE TAILORING'en el que se sustituirán las variables por los valorescorrespondientes.
Tutorial
Es la manera prevista en un dialogo para poder informar alusuario de las acciones que se ejecutaran cuando se elija cadauna de las opciones de un menu, o de los datos, formato, etc quese deben aportar para ejecutar una determinada acción.
Este dialogo se disparará automáticamente al pulsar la tecla
asociada al HELP, que normalmente será la PF1.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 247/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 247 de 374
4.2 Variables
Una variable es una dirección de memoria simbólica, pero para evitarreferenciar direcciones por el peligro que esto entraña, utilizamos nombresasociados a estas direcciones.
La nomenclatura seguida para designar estas variables sigue las reglasgenerales, es decir de 1 a 8 caracteres alfanuméricos, siendoobligatoriamente el primero alfabético.
En ISPF podemos considerar tres tipos de variables:
del sistema Sus nombres están predeterminados por el sistema ycomienzan por "Z".
de usuario Sus nombres son elegidos por el desarrollador a fin de
que tengan un significado apropiado al contenido querepresenta.
de control Son variables de propósito especial y comienzan por "."
4.2.1 Variables del sistema
Como se ha dicho anteriormente, estas variables son de uso general.
La lista completa se muestra en el anexo correspondiente, no obstante, acontinuación se listan las de uso mas común, con indicación del contenidoque representan.
ZDATE Contiene la fecha en formato yy/mm/dd
ZTIME Contiene la hora en formato HH.MMZTERM Contiene el tipo de terminalZPFnn Contiene el conjunto de PFsZCMD Contiene el comando de entradaZSEL Cadena de selección desde el panel de selecciónZPRIM Flag de panel como opción primaria de menu.ZERRMSG Identificación del mensaje de errorZPARENT Nombre del panel de selección del primer nivel.
------- VARIABLES ESPECIALES DE LOS PANELES DEL TUTORIAL
ZHTOP Nombre del panel raíz del tutorial.ZCONT Nombre del panel de continuación del tutorial.ZUP Nombre del panel de nivel superior al actual.ZHINDEX Nombre del panel tutorial índice.ZIND Indicador para panel índice.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 248/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 248 de 374
La descripción de las variables mas usadas se muestra a continuación:
ZCMD
En esta variable del sistema se recoge el valor de la selección hechapor el usuario final, pero también puede contener cualquier comando,figure o no como opción en el panel de selección o menu. Este caso sepuede dar, por ejemplo, cuando se desea ejecutar un comando de TSO.
ISPF permite navegar directamente por los menús cuando se conocen lasdistintas opciones que marcan el camino. Esto se consigue separando laopción elegida de cada nivel por un punto ".".
Por esta razón, lo unico que debemos hacer es obtener la primera partede esta variable para saber cual es la primera opción elegida. Esto sehace con la función TRUNC, tal y como se muestra en el siguiente
ejemplo:
&ZSEL = TRUNC(TRANS(&ZCMD,'.') 1,'...'2,'...'*,'?')
El propio servicio ISPF SELECT se encargara de efectuar de formaautomática la navegación, colocando la parte truncada del comando enla variable ZCMD del siguiente panel de selección.
Otra utilidad disponible en ISPF es el uso del símbolo "=" paraindicar que las opciones elegidas deben realizarse desde el menú raíz,es decir desde el panel que tenga codificado ZPRIM=YES.
El siguiente ejemplo muestra un fragmento de un panel de selección, omenú, en el que se puede apreciar lo comentado con respecto a estavariable.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 249/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 249 de 374
)BODY%-------------------- Menú Principal de JMP ----------------------
%OPCION ===>~ZCMD +%% 1 +Librerías del entorno% 2 +Editar fichero +% 3 +Imprimir fichero con margen +
...% +% X +EXIT - SALIR DEL MENU)INIT&ZPRIM = YES&ZHTOP = JMPH000.HELP = JMPH100
&ZHINDEX = JMPH999)PROC
&ZSEL = TRANS(TRUNC(&ZCMD,'.')1,'CMD(EX ''Jmpdes.CLIST.INT(ENTORNO)'')'2,'PANEL(ISREDM01) NEWAPPL(JMP) '3,'CMD(EX ''Jmpdes.CLIST(PRT)'')'
...X,'EXIT'
' ',' '*,'?' )
)END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 250/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 250 de 374
ZSEL
Esta variable contiene siempre una cadena especificando el comando,panel o programa que se debe ejecutar.
Debe encontrarse en los paneles de datos y de visualización de tablaspara indicar al sistema qué es lo siguiente que se debe ejecutar.
Solo es ejecutable desde un panel, ya sea de datos o de visualizaciónde tablas, debiendo ser invocado mediante el servicio DISPLAY oTBDISPL en una función.
Ejemplo: ISPEXEC DISPLAY PANEL(panelxxx)
El valor asignado a esta variable siempre tiene que ajustarse a uno delos siguientes formatos:
'CMD(comando [parámetros]) [LANG(APL)] +[NOCHECK] +[opciones_aplicacion]'
'PANEL(nombre_panel) [OPT(opción)[opciones_aplicacion]]'
'PGM(programa) [PARM(parámetros)][NOCHECK][opciones_aplicacion]'
'EXIT'
donde [opciones_aplicacion] puede ser:
NEWPOOL Esta opción especifica que se desea comenzar un nuevo poolde variables para los niveles que se inician en el panelllamado.
Cuando se regrese al panel desde el que se hace estallamada, es decir, cuando se regrese a este panel, serecuperan los valores del pool actual.
En ISPF existen 3 tipos de POOL de variables:
- de aplicacion- SHARED o compartido- Profile
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 251/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 251 de 374
NEWAPPL [ [(id_aplicacion)] [PASSLIB] ]
Este parámetro permite indicar a ISPF que comienza unanueva aplicacion, cuyo nombre se especifica conid_aplicacion. Esto normalmente conlleva el uso de nuevospools de variables, perfiles y tablas de comandos.
Este parámetro por tanto esta especificando que se usen losmiembros de la librería PROFILE que tienen por nombre:
Perfil de la aplicacion xxxxPROF
Perfil de edición xxxxEDIT
Tabla de comandos xxxxCMDS
donde xxxx es el id_aplicacion. Si no se especificarael prefijo id_aplicacion, por defecto asumirá el valor"ISP" .
Con PASSLIB se puede especificar si se desea pasar a lanueva aplicacion las librerías que se encuentran alocadasen la aplicacion actual.
Parámetros de CMD:
LANG(APL) Con este parámetro se indica a ISPF que seinicia un entorno realizado con APL2 (lenguajede comandos)
NOCHECK Este parámetro indica a ISPF que si el caminomarcado en ZCMD no es correcto, que ignore elerror.
Parámetros de PANEL:
OPT(opción) Con este parámetro indicamos a ISPF que elija laopción especificada del nuevo panel deselección.Es equivalente a la concatenacion de opcionesvista al tratar la variable ZCMD.
Parámetros de PGM
PARM( ... ) permite pasar valores de parámetros a unprograma.
NOCHECK Este parámetro indica a ISPF que si el caminomarcado en ZCMD no es correcto, que ignore elerror.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 252/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 252 de 374
Es de resaltar el hecho de que los parámetros se pasan de forma
distinta a un comando y a un programa.
Por ultimo, si se elige la cadena EXIT, simplemente ISPF retorna alpanel previo.
Ejemplo:
&opción = TRUNC(&ZCMD,'.')&resto = .TRAIL&ZSEL = TRANS(&opción 1,'PGM(programa) PARM(&resto.)' +
2,'CMD(EX JMPPRTDS &fichero)' +3,'PANEL(jmptab00) NEWAPPL(jmp)' +4,'CMD(LISTA)'X,'EXIT'
' ',' '*,'?' )
En este ejemplo, si la opción elegida es :
1 se ejecuta el programa especificado y se pasa como parámetro elresto de la variables ZCMD una vez truncada.
2 Se ejecuta el procedimiento "alias.jmpprtds.clist" y se pasa comoparámetro a dicho procedimiento el nombre del fichero a listar.
3 En este caso se elige el panel jmptab00, y se comienza una nuevaaplicacion, denominada jmp.
4 Esta opción especifica que se ejecute el comando de TSO LISTA, afin de obtener en pantalla una relación de todas las libreríasalocadas.
x Esta opción especifica que se desea retornar al menú anterior.
' ' Esta opción especifica que si pulsa INTRO sin haber elegidoninguna opción, se mantenga en el mismo panel sin que sevisualice ningún mensaje.
* Si la opción elegida no es ninguna de las anteriores, entonces elvalor devuelto a ZSEL es una interrogación, lo cual provoca quese visualice el mensaje de OPCION INVALIDA.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 253/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 253 de 374
ZPRIM
Esta variable simplemente sirve para especificar que el menú que lacontenga será considerado como panel raíz.
Es de resaltar el hecho de que en ISPF se mantiene una estructura enforma de árbol invertido. Por lo tanto, esta variable especificaaquellos nudos raíces que nos permiten recorrer cada una de las ramasprincipales.
El formato de esta variable es &ZPRIM = YES
El uso habitual de esta variable esta relacionado con el comandoRETURN.
En ISPF, cuando se esta en un nivel bajo de panel, escribiendo END o
EXIT, se retorna al menú de nivel inmediatamente superior, peroescribiendo RETURN se regresa al menú raíz. Este regreso a veces puedeser problematico, ya que cuando se esta en un nivel bajo de unaaplicacion, y se ejecuta el comando RETURN, se sale de los distintospools compartidos cerrándolos sin salvarlos previamente, por lo que elusuario podría perder parte de su trabajo.
Este problema se resuelve codificando raíces intermedias mediante lavariable ZPRIM.
El siguiente ejemplo es un fragmento de un panel de selección o menú,concretamente la sección INIT, en el que se muestra la codificación deesta variable, mediante la cual se hace panel raíz a este panel.
)INIT&ZPRIM = YES&ZHTOP = JMPH000.HELP = JMPH100&ZHINDEX = JMPH999&USUARIO = &ZUSERIF (&ZUSER = DESJMP , DESMGO )
&OPCIONES = 'ES PS UN HH UU U0 JJ J M T U N A '
en dicha sección:
- Se hace a este panel raíz o principal- se define el panel JMPH100 como panel de help asociado a este- se define el panel JMPH999 como panel índice del help- se define el panel JMPH000 como panel raíz del help asociado- se carga la variable de usuario USUARIO con el contenido de lavariable del sistema ZUSER
- Si el usuario es Jmpdes o TEST33 se carga la variable OPCIONES conla cadena representada.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 254/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 254 de 374
ZPARENT
Normalmente en ISPF el usuario va navegando por los distintos panelesen función de la jerarquía que representan las distintas opciones delos mismos.
Esta jerarquía puede variarse usando esta variable.
Su formato es : &ZPARENT = id_panel
Es decir, se puede llegar al panel que contenga esta variable porcualquier camino, pero al ejecutar EXIT, no se retornara al panelprevio, sino al especificado por esta variable.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 255/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 255 de 374
4.2.2 Variables de Usuario
Sus nombres son elegidos por el desarrollador a fin de que tengan unsignificado apropiado al contenido que representa.
El siguiente ejemplo muestra un panel que pide la cadena a buscar y elnombre de la librería en la que buscar dicha cadena, cargando lasvariables de usuario CADENA y LIBRERIA
)ATTR DEFAULT(%@!)| TYPE(OUTPUT) INTENS(LOW) CAPS(OFF) JUST(RIGHT) PAD(' '){ TYPE(input) iNTENS(high) CAPS(On) just(left) pad('_')} TYPE(TEXT) INTENS(LOW) CAPS(OFF)
)BODY%JMP-94@------------%Buscar una palabra en una librería@--------------@%OPCION ===>!ZCMD
@@%@ Cadena a buscar: {cadena @@ Librería ......: {librería @%@@ Esta utilidad%submite@un proceso que se dedica a@ buscar la cadena especificada entre los miembros@ la librería indicada.@@ El%resultado@le deja en la cola de salida con el@ nombre:%&Zuser@y el sufijo%ST@
@@)INITvget (zdldsnlv) profile&librería = &zdldsnlv)PROCver(&librería,dsname)&Zcmd = '99'&zdldsnlv = &libreríavput (zdldsnlv) profileif (&librería = all,'') &Zcmd = 'X'if (&cadena = all,'') &Zcmd = 'X'&ZSEL = TRANS(TRUNC(&ZCMD,'.')
99,'CMD(EX ''DESJMP.CLIST.MGO(SCANTSOC)'' ''&CADENA.,&LIBRERIA.'')'X,'EXIT'
' ',' '*,'?' )
)END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 256/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 256 de 374
a fin de tener el ejemplo completo se acompañan la clist y el JCLasociados.
clist: 'DESJMP.CLIST.MGO(SCANTSOC)'
/* <<<<<<<<<<<<<<<<<<<<<< SCANTSOC >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *//* ====== BUSCA UNA CADENA EN LOS MIEMBROS QUE SE ESPECIFIQUEN ==== */
PROC 2 CADENA LIBRERIA/* */
EDIT 'Jmpdes.JMP.JCLTIPO(SCANTSOC)' OLD CNTL NONUMC * 999 'LLLLLLLL' '&LIBRERIA' ALLC * 999 'CCCCCCCC' '&CADENA' ALL
/* LIST */SUBMIT
END NOSAVEEXIT
jcl: 'Jmpdes.JMP.JCLTIPO(SCANTSOC)'
//XXXXXXBT JOB (123,456),'JMP-PRU-4',CLASS=T,MSGCLASS=X,// NOTIFY=XXXXXX,MSGLEVEL=(1,1)//*****************************************************************//* BUSCAR CADENA EN DIRECTORIO//*****************************************************************//BUSCAR EXEC PGM=ISRSUPC,PARM=(SRCHCMP,'ANYC')
//NEWDD DD DISP=SHR,DSN=LLLLLLLL//OUTDD DD SYSOUT=X//SYSIN DD *SRCHFOR 'CCCCCCCC'
/*
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 257/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 257 de 374
4.2.3 Variables de control
Son variables que sirven para controlar determinadas funciones en unpanel.
La lista completa de estas variables es :
.ALARM = { YES | NO }
.ATTR(&variable | .cursor) = 'nombre_attr(valor)'
.ATTRCHAR (carácter) = 'nombre_attr(valor)'
.AUTOSEL = { YES | NO }
.CURSOR = nombre_variable
.CSRPOS = { nn | &variable }
.CSRROW = { nn | &variable }
.HELP = id_panel
.MSG = id_mensaje
.PFKEY
.RESP
.TRAIL
.ZVARS
Siendo su significado el siguiente:
.ALARM Define si se activa o no la alarma del terminal.
.ATTR Permite cambiar el atributo de un campo en un panel, comopor ejemplo pasar un campo a protegido.
.ATTRCHAR Esta variable es parecida a la anterior, con la diferenciade que en este caso, cambia el atributo asociado a uncarácter. Ejemplo, en lugar de proteger todos los campos deentrada de un panel, se cambia el atributo asociado alcarácter en el sentido de decir que tal carácter que antesera de entrada ahora es de salida, con lo que los datos delos campos que antes eran de entrada, ahora quedanprotegidos.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 258/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 258 de 374
.AUTOSEL esta variable solo puede ser usada en los paneles devisualización de tablas, y controla que se haya seleccionado
una fila.
.CURSOR Controla el posicionamiento del cursor en la variable que seespecifique.
.CSRPOS Controla el posicionamiento del cursor dentro de unavariable del panel.
.CSRROW Esta variable solo puede ser usada en los paneles devisualización de tablas, y controla la ubicación del cursoren una fila determinada.
.HELP Esta variable contiene el nombre del panel de HELP asociadoa la función de ayuda.
.MSG Esta variable contiene el identificador del mensaje que sevisualizara en la pantalla.
.PFKEY Esta variable contiene el valor de la ultima PF pulsada.Ejemplo: If (.PFKEY = PF10 ) ...
.RESP Identifica el tipo de respuesta dado por el usuario (END oRETURN)
.TRAIL Esta variable contiene el resto de la ultima función detruncamiento realizada.
Así, por ejemplo:
&alfa = '123.456'&entero = trunc(&alfa,'.') resulta : &entero = 123&decimal = .TRAIL resulta : &decimal = 456
.ZVARS Establece la correlación entre las variables Z con su nombrelargo.
Como ya se vera al tratar la definición del panel, lalongitud de una variable viene definida por el delimitadorque se establezca. Pero si la variable tiene que tener unalongitud de 1 carácter, y con objeto de dar a las variablesde usuario nombres con significado, en la definición delpanel se define, en ese caso, como "Z", y en la seccióninicial se establece la correlación entre las variables z,ya que puede haber varias, con sus nombres largos, deacuerdo con el siguiente formato:
.ZVARS = '(variable1, variable2, ... )'
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 259/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 259 de 374
El siguiente ejemplo muestra el panel JMPINT58 el cual haceuso de este tipo de variables, ya que las variables que
recogen los valores de TIPO ABSOLUTO y TIPO DE OBJETO en losque buscar, representan variables de 1 posición.
)ATTR DEFAULT(%@!)| TYPE(OUTPUT) INTENS(LOW) CAPS(OFF) JUST(RIGHT) PAD(' '){ TYPE(input) iNTENS(high) CAPS(On) just(left) pad('_')} TYPE(TEXT) INTENS(LOW) CAPS(OFF)
)BODY%JMP-94@-----------%Buscar una palabra en una libreria@--------------@%OPCION ===>!ZCMD@@ Libreria ......... : {libreria@@ Máscara de fuentes : {máscara @@ Cadena a buscar .. : {cadena @
@ Reemplazar por ... : {newval @@ Valor absoluto ... : {Z@ (Y,N) (%Y@indica no buscar palabra completa)@ Tipo de Objetos .. : {Z@ (A,G,L,P,N,S,M,H,C,T,R,*)%@@ Esta utilidad%submite@un proceso que se dedica a@ buscar la cadena especificada entre los miembros@ de la libreria de NATURAL cuyo nombre se ajuste@ a la máscara especificada.@@ El%resultado@le deja en la cola de salida con el@ nombre:%&Zuser@y el sufijo%SN@@
)INIT.Zvars = '(completo,tipo)'&libreria= 'INTNAL-D'&cadena = ' '&newval = ' '&tipo = '*'&completo= 'Y')PROCver (&tipo, nb, list P,N,S,M,H,A,G,L,C,T,R,*)ver (&completo, nb, list Y,N)&Zcmd = '99'if (&libreria = all,'') &Zcmd = 'X'if (&máscara = all,'') &Zcmd = 'X'if (&cadena = all,'') &Zcmd = 'X'&ZSEL = TRANS(TRUNC(&ZCMD,'.')
99,'CMD(EX ''DESJMP.CLIST.MGO(SCANNATC)'' +''&cadena.,&libreria.,&máscara.,&completo.,&tipo.,&newval.'')'
X,'EXIT'' ',' '*,'?' )
)END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 260/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 260 de 374
La particularidad de este panel se centra no solo en las variables "Z"sino también en cómo siendo un panel de entrada de datos es tratado como
un panel de selección con el uso de la variable &ZSEL.
clist: DESJMP.CLIST.MGO(SCANNATC)
/* <<<<<<<<<<<<<<<<<<<<<< SCANNATC >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *//* ====== BUSCA UNA CADENA EN LA LIBRERIA QUE SE ESPECIFIQUE ==== */
PROC 5 CADENA LIBRERIA MASCARA COMPLETO TIPO NEWVAL/*
SET &TEST = NOTESTIF &TEST = TEST THEN CONTROL SYMLIST CONLIST MSG
ELSE CONTROL MSG/* ----------------------------------------------------------------- *//* */
EDIT 'Jmpdes.JMP.JCLTIPO(SCANNATP)' OLD CNTL NONUM
C * 999 'CCCCCCCC' '&CADENA' ALLC * 999 'LLLLLLLL' '&LIBRERIA' ALLC * 999 'MMMMMMMM' '&MASCARA' ALLC * 999 'TTTTTTTT' '&TIPO' ALLC * 999 'OOOOOOOO' '&COMPLETO' ALLC * 999 'NNNNNNNN' '&NEWVAL' ALL
/* LIST */SUBMITEND NOSAVEEXIT
/* ----------------------------------------------------------------- */
jcl: JMPDES.JMP.JCLTIPO(SCANNATP)
//XXXXXXSN JOB (123,456),'JMP-PRU-4',CLASS=T,MSGCLASS=X,// NOTIFY=XXXXXX,MSGLEVEL=(0,0)//* ------------------------------------------------------------------//* BUSCAR EN LIBRERIA NATURAL UNA CADENA JCL-CLIST//* ------------------------------------------------------------------//NATBATCH EXEC DNATURAL,PARM='IM=D,MT=0,INTENS=1'//DDCARD DD DSN=PRU.DES.OPTION(RUNUSERM),DISP=SHR// DD DSN=PRU.DES.OPTION(RUNTIME),DISP=SHR//CMPRINT DD SYSOUT=W,DEST=RMT101//CMSYNIN DD *INTNAL-D/BATCH/BATCHSCANS/CCCCCCCC/NNNNNNNN/LLLLLLLL/MMMMMMMM/TTTTTTTT/OOOOOOOO/NFIN/*
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 261/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 261 de 374
4.3 Sentencias
Los paneles de ISPF, mediante las sentencias que se explican a continuación,permiten, en si mismos, ejecutar una lógica sencilla, aunque no por elloincompleta, lo cual simplifica la programación del dialogo.
También permiten comentar la lógica asociada encerrando los comentariosentre las cadenas '/*' para indicar el comienzo y '*/' para el final .Ejemplo: /* ------- comentario ---------- */
Atendiendo a su finalidad, podemos agrupar las sentencias de los paneles deISPF en los siguientes grupos:
- Sentencias de asignación- Sentencias de verificación- Sentencia IF
- Sentencia VGET- Sentencia VPUT- Sentencia Referesh
4.3.1 Sentencias de asignación
Esta sentencia permite asignar valores a variables.
Su formato es:
&Nombre_variable = valor
donde "valor" puede ser :
- un numero 123- una cadena de caracteres 'ABC'- el contenido de otra variable &fichero- el resultado de una función TRANS(&código s,si n,no)
Es de resaltar el hecho de que cuando una cadena contenga apóstrofes, secodificaran dos apóstrofes por cada apóstrofe de la cadena.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 262/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 262 de 374
4.3.2 Sentencias de verificación
Estas sentencias se usan para realizar de forma sencilla y rápidavalidaciones sobre el contenido de las variables.
Su formato es:
VER ( &variable [NONBLANK | NB ] +palabra_clave +[valores] +[MSG=id-mensaje] )
donde palabra_clave representa:
ALPHA valores alfabéticos (A-Z,a-z,@,#,$)
NUM valores numéricos (0-9)
HEX Valores hexadecimales (0-9,A-F,a-f)
BIT valores binarios (0,1)
NAME Valida que sigue las reglas generalespara el nombre de variables y objetos(primer carácter alfabético y el restohasta 8 alfanuméricos)
DSNAME Valida que sigue las reglas generalespara la designación de
datasets.(Nombres de hasta ochocaracteres concatenados con puntos conuna longitud total de hasta 44posiciones)
FILEID
RANGE chequea que el valor de la variable desde,hastaesta contenido en el rangoespecificado.El numero puede tener un máximo de 16dígitos.
LIST Chequea que el valor de la variable es val1,val2,...uno de la lista especificada.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 263/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 263 de 374
PICT Chequea el valor de la variable con la 'cadena'máscara representada por la cadena
dada.La cadena estará formada por lossiguientes caracteres:c = carácterA = alfabéticoN | 9 = numéricoX = HexadecimalCualquier otro carácter distinto aestos se chequeara por igual.
Cada uno de los parámetros puede ir separado por comas o blancos
El parámetro NONBLANK o NB significa que el campo es obligatorio.
En caso de que la verificación no la superara, se visualiza un mensaje deerror genérico y el cursor se sitúa en la variable examinada. Y, si seespecificara el parámetro MSG se visualizara el mensaje correspondienteen lugar del genérico.
Ejemplos:
VER (&job, NB, NAME)VER (&libreria, DSNAME)VER (&fecha, PICT '99-99-9999')VER (&lregis, range 0,254 MSG=jmpcad00)VER (&estado LIST s,c,v,d)
El siguiente ejemplo se corresponde con la sección PROC del Panel
JMPINT51 diseñado para pedir una cadena y una libreria de NATURAL, ypasar esos datos a una clist para listar todos los objetos NATURAL cuyonombre se ajuste a la máscara especificada.
Como la utilidad que se desea ejecutar admite el '*' como comodín paralistar varios objetos con la misma raíz, y en el caso de especificar unaraíz muy corta puede provocar un listado demasiado grande, esteprocedimiento lo que hace es truncar la cadena con los 5 primeroscaracteres cargando la variable PREFIJO, y luego examinar si dichavariable sigue las reglas de la nomenclatura. En el caso de quecontuviera un carácter especial, como por ejemplo un '*' daría un errordiciendo que no es un nombre valido.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 264/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 264 de 374
)PROC&Zcmd = '99'
if (&libreria = all,'') &Zcmd = 'X'if (&objeto = all,'') &Zcmd = 'X'/* verificar longitud del nombre del objeto */&prefijo = TRUNC(&objeto,5)VER(&prefijo,NAME)&ZSEL = TRANS(TRUNC(&ZCMD,'.')
99,'CMD(EX''DESJMP.CLIST.MGO(FAGLNAT)'' +''&objeto.,&libreria.'')'
X,'EXIT'' ',' '*,'?' )
)END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 265/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 265 de 374
4.3.3 Sentencia IF
ISPF permite que los paneles puedan procesar una lógica sencilla, dejandoque los problemas complejos sean resueltos por la programación de lafunción o del procedimiento. Esta sentencia es la que permite controlarla lógica condicional en los paneles.
Su formato es:
IF ( ope1 operador ope2 [,ope3 ...]) sentencia
donde :
Ope1, ope2, ope3 son los operandos ; yoperador es = o Ø=
Nota: Dependiendo del terminal el símbolo ^ equivale a Ø
Esta sentencia tiene las siguientes particularidades:
- Solo se permite el chequeo por igual o por no igual.- No se permite la opcion ELSE
Por lo que se refiere a asociar un grupo de sentencias a una ciertacondición, hay que especificar que la agrupación se implementa mediantela indentacion de las sentencias con respecto a la sentencia IF.
El siguiente ejemplo aclarara este punto:
1 IF (&var1 Ø= N)
2 IF (&var2 = val1,val2)3 set &var3 = 'cumple los dos IF'4 set &var4 = 'idem'5 set &var5 = 'cumple solo el IF de la línea 1'6 set &var6 = ...7 IF (&var7 = &var8) &var9 = ...
La línea 1 chequea que la variable 1 no es igual al valor "N"
Las líneas 2 a 5 solo se ejecutan si superan el chequeo de la línea 1.
La línea 2 solo se ejecuta si se supera el chequeo de la línea 1 por loque se están concatenando dos condiciones, y por tanto equivale aloperador lógico AND (no valido en la lógica de paneles).
La línea 2 chequea que el valor de la variable 2 sea igual al valor1 o alvalor2. Por lo tanto, equivale al operador lógico OR.
Las líneas 3 y 4 solo se ejecutan si se supera la condición de la línea 2
La línea 5 se ejecuta si se supero la condición de la línea 1, sinimportar la condición de la línea 2 ya que esta a la misma altura que elIF de dicha línea.
La línea 6 se ejecuta siempre, pues esta a la misma altura que la línea1.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 266/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 266 de 374
La línea 7 se ejecuta siempre y si se cumple la condición se ejecuta lasentencia de asignación que la sigue.
Este ejemplo denota la importancia de la indentacion a la hora deprogramar la lógica en los paneles ISPF.
Por lo que se refiere a la utilización o no de la cláusula ELSE, lasnuevas versiones de ISPF ya la contemplan, pero no obstante el siguienteejemplo muestra una forma de implementarla.
1 IF ( &var1 = val1 ) sentencia12 IF ( &var1 ^= val1 ) sentencia2
La línea 1 chequea una condición por igual y la línea 2 chequea la mismacondición por no-igual, por lo que equivale a ELSE.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 267/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 267 de 374
El siguiente ejemplo muestra un fragmento del panel JMPINT00, en el quese muestra este extremos.
)BODY%-------------------- Menú Principal de JMP ----------------------%OPCION ===>~ZCMD +%% 1 +Librerías del entorno% 2 +Editar fichero +% 3 +Imprimir fichero con margen +
...% +% X +EXIT - SALIR DEL MENU)INIT&ZPRIM = YES&ZHTOP = JMPH000
.HELP = JMPH100&ZHINDEX = JMPH999
)PROC/* ------------------------------ editar salida -------- */
IF (&OPCION = EE , ES )IF (&ZUSER = DESJMP , DESMGO )
&ZCMD = 'U.21'/* ------------------------------------------------------*/&ZSEL = TRANS(TRUNC(&ZCMD,'.')
1,'CMD(EX ''Jmpdes.CLIST.INT(ENTORNO)'')'2,'PANEL(ISREDM01) NEWAPPL(JMP) '3,'CMD(EX ''Jmpdes.CLIST(PRT)'')'
...X,'EXIT'
' ',' '*,'?' )
)END
Este ejemplo transforma la entrada escrita en línea de comando, de modoque si se escribe EE o ES y además el usuario es DESJMP o DESMGO,entonces cambia el valor escrito por el valor U.21.
¿Para que esta transformación?
Esta es una forma de generar abreviaturas para realizar acciones,personalizandolas para un usuario determinado.La opcion U nos lleva a otro panel, del cual elegimos la opcion 21. y loque hace es editar un fichero secuencial de uso general, de nombre fijoy que se puede usar entre otras cosas, para recoger la salida del spool,o para editar ficheros excesivamente grandes.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 268/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 268 de 374
/* <<<<<<<<<<<<<<<<<<<<<< INTUTI21 >>>>>>>>>>>>>>>>>>>>>>>>> *//* */
PROC 0 LIBRERIAISPEXEC EDIT DATASET('Jmpdes.JMP.SALIDA')EXIT
En resumen, cuando el usuario Jmpdes o el usuario TEST33 escriba en lalínea de comando EE o ES lo que se ejecutara automáticamente será laedición del dataset o fichero 'DESJMP.JMP.SALIDA'.
El hecho de colgar esta opcion de otro panel en lugar de especificar laacción a realizar en el propio panel de selección es con objeto de tenerun panel que recoja la abreviatura y su significado, aunque entiendo quepuede haber muchas formas de realizar esta funcionalidad.
El siguiente ejemplo, es otro fragmento del mismo panel, y limita las
opciones U, T, ... para ser usadas solo por los usuarios DESJMP o DESMGO,ya que si algún usuario que no sea alguno de los dos especificadosselección cualquiera de las opciones se cambiara ese valor por "X", porlo que abandonaría el panel.
IF (&OPCION = U , T , J , M , A , TE)IF (&ZUSER ^= DESJMP)
IF (&ZUSER ^= DESMGO)&ZCMD = 'X'
&ZSEL = TRANS(TRUNC(&ZCMD,'.')1,'CMD(EX ''DESMGO.XXX.CLIST(ENTORNO)'')'2,'PGM(ISREDIT) PARM(P,ISREDM01) NEWAPPL'3,'PANEL(MGOUTI00)'
...
P,'CMD(EX ''DESJMP.CLIST.MGO(JMPLLL00)'')'S,'PANEL(ZSDSFOP2) NEWAPPL(ISF)'X,'EXIT'
' ',' '*,'?' )
&ZTRAIL = .TRAIL)END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 269/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 269 de 374
4.3.4 Sentencia VGET
Esta sentencia es usada para leer el contenido de variables del pool quese especifique.
Su formato es:
VGET (var1 var2 ... varn) pool
Siendo POOL el nombre del pool del que se desea leer el contenido de lasvariables var1, var2, ... varn.
Como ejemplo se recomienda ver el que acompaña a la sentencia VPUT.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 270/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 270 de 374
4.3.5 Sentencias VPUT
Esta sentencia es usada para escribir contenidos de variables en otrosPOOLs.
Su formato es:
VPUT (var1 var2 ... varn) pool
Siendo POOL el nombre del pool en el que se desea guardar el contenido delas variables var1, var2, ... varn.
Por ejemplo, al ejecutar el siguiente panel, este nos pide una cadenapara buscarla entre los miembros de la libreria que se especifique.
Con objeto de no tener que estar escribiendo el nombre de la libreria
cada vez que se ejecute este panel, lo que se hace es:En la sección INIC, previa a la presentación del panel, se lee elcontenido de la variable ZDEDSNLV recuperando su contenido desde elperfil activo. A continuación asignamos el valor de esta variable a lavariable LIBRERIA.
Una vez que se presenta el panel, y a fin de memorizar el contenido de lavariable LIBRERIA, para que cuando se vuelva a ejecutar este panel, serecupere el ultimo valor, hay que grabar su contenido, lo cual se hacecon la sentencia VPUT.
)BODY%JMP-94@----------%Buscar una palabra en una libreria@-----------@%OPCION ===>!ZCMD
%@ Cadena a buscar: {cadena @@ Libreria ......: {libreria @...)INITvget (zdldsnlv) profile&libreria = &zdldsnlv)PROCver(&libreria,dsname)&Zcmd = '99'&zdldsnlv = &libreriavput (zdldsnlv) profileif (&libreria = all,'') &Zcmd = 'X'if (&cadena = all,'') &Zcmd = 'X'&ZSEL = TRANS(TRUNC(&ZCMD,'.')
99,'CMD(EX ''JMPDES.CLIST.MGO(SCANTSOC)'' +''&CADENA.,&LIBRERIA.'')'
X,'EXIT'' ',' '*,'?' )
)END
Nota: El hecho de usar la variable ZDLDSNLV es porque es una variablepropia del ISPF, concretamente es la variable que en el panel querepresenta la opcion general 3.4 (utilidades), representa el campo nombredel DSN, y así el usuario puede ahorrase el tener que escribir el nombrede la libreria, si antes se ha usado esta variable.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 271/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 271 de 374
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 272/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 272 de 374
4.3.6 Sentencias REFRESH
Esta sentencia es usada para refrescar el contenido de las variables delpanel.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 273/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 273 de 374
4.4 Mensajes
En la introducción de este tema, se comento que ISPF diseña sus pantallasreservando dos zonas para mensajes, el ángulo superior derecho y la terceralínea de la pantalla.
Mediante estos mensajes el desarrollador puede planificar la informacion queofrecerá al usuario a lo largo del dialogo, bien para informarle delresultado de la acción desarrollada, bien del porqué no se ha superado unavalidación, etc.
Existen dos tipos de mensajes en un dialogo:
- Mensajes cortos : Aparecerán en el ángulo superior derecho- Mensajes largos : Apareceran en la tercera línea
Un mensaje se compone de :
Id-mensaje obligatorio Identificador del mensaje
mensaje-corto opcional texto del mensaje con una longitud máximade 24 caracteres.
Panel-help obligatorio Identificador del panel de help asociado aeste mensaje.
ind-alarma opcional Indicador de si ejecuta la alarma (en elcaso de que el hardware lo permita)
mensaje-largo texto mensaje largo con un longitud máxima
de 78 caracteres.
Estos 5 atributos de un mensaje se graban en dos líneas de un miembro de lalibreria de mensajes, siendo el diseño de estas líneas :
ID-MENSAJE ['m_corto'] [.HELP={panel | *}] [.ALARM={YES|NO}]'mensaje largo'
Los componentes que intervienen en esta definición ya han sido comentados,con la excepción del siguiente:
ID-MENSAJE: debe tener de 4 a 8 caracteres.Tiene que ajustarse al formato : AAAAA999Y
siendo AAAAA de 1 a 5 caracteres alfabéticos (a-z,$,@,#)
999 3 caracteres numéricos (0-9)
Y un carácter alfabético como sufijo. Opcional
m_corto El texto del mensaje corto
panel El identificador del panel de ayuda
En base al identificador del mensaje se determina el miembro en el que se
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 274/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 274 de 374
grabara dicho mensaje truncando dicho identificador por el segundo dígito.Dentro del miembro asignado, los mensajes son grabados secuencialmente,
siendo por tanto necesario para la recuperación del mensaje que dichalibreria de mensajes (o miembro) sea recorrida secuencialmente.
Ejemplo:
JMPTB01A 'tabla &tabla no existe' .ALARM = YES'No se puede abrir la tabla &tabla porque no existe'JMPTB01B 'Tabla &tabla borrada ' .HELP=*'Se ha borrado con exito la tabla &tabla'JMPTB02 .ALARM=YES'Pulse ''PF1'' para invocar al HELP.'JMPTB10'Miembro salvado OK'...
Pues bien, estos mensajes se grabaran en el miembro JMPTB01 de la libreriaespecificada para mensajes.
Como puede verse en el ejemplo, un mensaje puede contener en su definiciónnombres de variables para que en el momento de su ejecución sean sustituidaspor el valor correspondiente, truncando el resultado en el caso de que seexcediera del tamaño especificado.
Es importante asegurarse de que el profile de este miembro tenga NUMBER OFFya que si no se machacarian las posiciones 72 a 80 por la numeración, para locual, estando editando el miembro, se ejecutaran desde línea de comando lossiguientes:
PROFILE NUMBER ON para activar la numeración de las líneasPROFILE UNNUM para limpiar de numeración las columnas 72 a 80PROFILE NUMBER OFF Para que desde ahora no numere las líneas.
Como puede observarse en el formato del mensaje, el mensaje corto esopcional, mientras que el largo es obligatorio. ISPF usara el mensaje largoen caso de que no se hubiera especificado el mensaje corto.
La notación "*" en el componente .HELP para especificar a ISPF que utilicecomo panel de help el panel de help asociado al panel que se esteprocesando.
Para invocar un mensaje se pueden utilizar diversas formas. El siguienteejemplo adelanta lo que se vera en el próximo apartado, las funciones, ymuestra como invocar un mensaje desde una clist.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 275/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 275 de 374
/* <<<<<<<<<<<<<<<<<<<<<< SYSMAIN >>>>>>>>>>>>>>>>>>>>>>>>>>>> *//* ========= BUSCAR UN OBJETO EN DESARROLLO =================== */
/* */PROC 0/* *//*--------------------------------------------------------------*//* */
SET &TEST = TESTNOIF &TEST = TEST THEN CONTROL SYMLIST CONLIST MSG
ELSE CONTROL NOMSG/* */
SET ESKELETO = SYSMAINSET DSN = '&SYSUID..SALIDA.TMP'
/* */ISPEXEC DISPLAY PANEL(SYSMAIN)IF &LASTCC NE 0 THEN EXIT
/* */FREE FI(ISPFILE)ALLOCATE FI(ISPFILE) DA(&DSN.) OLD REUSE
/* */ISPEXEC FTOPENIF &LASTCC NE 0 THEN GOTO ERROR1
/* */ISPEXEC FTINCL &ESKELETOIF &LASTCC NE 0 THEN GOTO ERROR2
/* */ISPEXEC FTCLOSEIF &LASTCC NE 0 THEN GOTO ERROR3
/* */ISPEXEC SETMSG MSG(JMPFT04)
SUBMIT &DSNIF &TEST = TEST THEN WRITE SUBMITIDO PROCESO DE BUSQUEDA OK
/* */GOTO EXIT/* --------------------- mensajes ----------------- */
ERROR1: ISPEXEC SETMSG MSG(JMPFT01)GOTO EXIT
ERROR2: ISPEXEC SETMSG MSG(JMPFT02)ISPEXEC FTCLOSEGOTO EXIT
ERROR3: ISPEXEC SETMSG MSG(JMPFT03)/* --------------------------------------------------*/
EXIT: FREE FI(ISPFILE)EXITEND
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 276/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 276 de 374
Los siguientes ejemplos muestran distintas formas de invocar un mensajedesde un panel:
/* si el usuario no es DESJMP o DESMGO pide password */IF (&USERID ^= DESJMP , DESMGO )
VER (&PASSWORD,NONBLANK,MSG=JMPI100) /* password incorrecta */
/* si la cadena no esta a blancos visualiza el mensaje JMPI133 */
IF (&cadena ^= ' ' ).MSG = JMPI133
/* validar que el contenido de LIBRERIA sea distinto de blancos */VER (&LIBRERIA,NONBLANK,MSG=JMPP187)
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 277/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 277 de 374
4.5 Funciones
ISPF como cualquier otro sistema también tiene sus propias funciones.
Estas son:
TRUNC Para truncamiento de cadenas.
TRANS Para decodificación (traducción) de valores
PFK Para recoger el texto asociado a una PF.
LVLINE Para buscar la ultima línea visualizada.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 278/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 278 de 374
4.5.1 Función TRUNC
Esta función permite truncar una cadena de caracteres en una posiciónfija o bien al encontrar un carácter.
Su formato es:
&variable1 = TRUNC(&variable2, {nn | 'carácter'})
En el caso de que la cadena no contenga el carácter especificado,&VARIABLE1 contiene &VARIABLE2
La diferencia entre usar el truncamiento por una posición fija y eltruncamiento por búsqueda de una carácter, es que en el primer caso lavariable .TRAIL contiene las posiciones n+1 hasta el final, mientras queen el segundo caso, el carácter buscado no pertenece a ningún resultado.
Asi, por ejemplo:
&alfa = '123.456'
&entero1 = TRUNC(&alfa,3) &entero1 = 123
&decimal1 = .TRAIL &decimal1 = .456
&entero2 = TRUNC(&alfa,'.') &entero2 = 123&decimal2 = .TRAIL &decimal2 = 456
El siguiente ejemplo presenta un fragmento de la lógica seguida, cuandose pide el nombre de un dataset, para poner el apóstrofe al final del
nombre si se ha puesto apóstrofe al principio del nombre del mismo.
&punto = '.'&comilla = ''''if (&fichero Ø= ' ')
&prefijo = TRUNC(&fichero,1) /* separar el primer carácter */IF (&prefijo = &comilla ) /* **** empieza por comilla **** */
&nombre = .TRAIL&cuerpo = TRUNC(&nombre,'''') /* separar el apóstrofe final */IF (&cuerpo = &nombre ) /* nombre no termina con comilla */
&fichero = '&fichero&comilla'IF (&prefijo ^= &comilla )
&fichero = '&comilla&zprefix&punto&fichero&comilla'
De esta forma si &fichero = 'DESJMP.JMP.CLISTse transforma en 'DESJMP.JMP.CLIST'Y si &fichero = JMP.CLISTse transforma en 'DESJMP.JMP.CLIST'y si &fichero = 'DESJMP.JMP.CLIST'no sufre ninguna transformación.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 279/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 279 de 374
4.5.2 Función TRANS
Esta función transforma una cadena de caracteres en otra.
Su formato es :
&variable1 = TRANS(&variable2 cod1,valor1 +cod2,valor2 ... +[MSG=id_mensaje] )
donde :
cod1 es el valor de entrada 1
valor1 es el valor de salida 1
cod2 es el valor de entrada 2
valor2 es el valor de salida 2
id_mensaje Es el identificador del mensaje que se visualizara enel caso de que el valor de variable2 no coincida conningún valor de entrada de los distintos pares devalores especificados.
Nota: El uso de las comas es opcional, ya que el blanco sirve dedelimitador, pero el uso de la coma ayuda a dar mas claridad.
Como puede adivinarse por el formato de la función, esta lo que hace eschequear el valor contenido en variable2 con los valores de entrada decada una de las parejas de valores especificadas, y, en caso de
coincidencia, devuelve en variable1 el valor de salida de la primerapareja de valores cuyo código coincida. Si ninguno de los valores deentrada coincidiera con el valor de salida, ISPF visualizará el mensajeespecificado en el parámetro MSG, al tiempo que carga a blancosvariable1.
Otro uso frecuente de esta función es para decodificar valores devariables.
Ejemplo: &Estado=TRANS(&código S,Soltero C,Casado V,viudo )
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 280/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 280 de 374
Como parejas de valores especiales validas, tratadas por ISPF seencuentran:
*,cadena En este caso, sea cual sea el valor de variable 2 sedevolverá en variable1 la cadena especificada como parejadel "*".
*.* En este caso, se devuelve en variable1 el valor devariable2
' ',' ' En este caso, se admite el blanco como valor, y se devuelveblanco, por lo que se queda en el mismo panel sin sacarmensaje de error.
Un uso muy normal de esta función se encuentra en los paneles deselección (tipo menú) en donde traduciremos el valor de la opcion elegida
por el comando a ejecutar, como ya se vera al estudiar dicho tipo depanel.
&ZSEL = TRANS(&opcion 1,'PGM(programa1)'2,'CMD(comando1)'3,'PANEL(panel1)'
' ',' '*,'?' )
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 281/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 281 de 374
4.5.3 Función PFK
Esta función permite obtener informacion asociada a una PF.
Su formato es:
&variable1 = PFK( nn | 'cadena' | &variable2 )
El contenido de variable1 será un numero en caso de que el argumento dela función sea una cadena, o una cadena en el caso de que el argumentosea un numero, correspondiendo en cualquier caso el numero con el numerode PF que tiene asociada la cadena que es pasada o recibida.
Ejemplo: &variable1 = PFK(04)&variable2 = PFK('TSO EX JMP')
En este caso el contenido de variable1 es 'TSO EX JMP',mientras que el contenido de variable2 es 4 ya que la PF4 esta programadacomo 'TSO EX JMP'.
En el caso de que hubiera varias PFs programadas con el mismo contenido,esta función devolverá el numero menor de la PF.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 282/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 282 de 374
4.5.4 Función LVLINE
Esta función esta asociada a la zona definida como AREA en un panel.
Su formato es:
&variable1 = LVLINE( nombre_area )
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 283/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 283 de 374
4.6 Panel
Como se ha comentado en la introducción de este tema, el panel es la partevisible de cualquier dialogo, y por tanto, podría decirse que es la partemas importante del mismo, ya que por lo que el usuario ve será juzgadoprobablemente el dialogo.
El diseño estándar de un panel ISPF es :
+-------------------------------------------------------------+ID-pantalla Titulo mensaje cortocomando /opcion scrollmensaje largo+-------------------------------------------------------------+
... zona aplicacion ...
+-------------------------------------------------------------+
Las secciones de que se compone la definición de un panel son:
- ATTR Definición de los caracteres que servirán de atributos
- BODY Cuerpo del Panel
- INIT Lógica anterior a la presentación del panel
- PROC Lógica posterior a la presentación del panel
- REINIT Lógica anterior a la presentación del panel en caso de que sevuelva a presentar el panel como consecuencia de un error, etc.
- MODEL Esta sección solo se utiliza en paneles de visualización dedatos, y define el modelo de una fila.
- END Esta sección establece el final de la definición del panel
Todas estas secciones tienen la siguiente sintaxis para su definición:
)Sección_id [parámetro [parámetro ... ]]
es decir todas se definen por el carácter ")" seguido del identificador dela sección.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 284/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 284 de 374
Cada panel debe ser un miembro de una libreria alocada previamente como depaneles, debiendo tener en el perfil de cada miembro la opcion de UNNUM, ya
que se debe disponer de las 80 columnas para el diseño de la pantalla.
El siguiente ejemplo muestra como alocar la libreria de paneles y llamar alprimer panel o panel raíz de las utilidades desarrolladas como ejemplo. Elejemplo completo se encuentra en el anexo de esta tema.
PROC 0/* ----------------------------------------- LIBRERIA DE PANELES */
ISPEXEC LIBDEF ISPPLIB DATASET ID('JMPDES.JMP.PANEL')ISPEXEC SELECT PANEL(JMPMENU0)EXIT
Como norma general, como se dijo en la introducción, se debe tener en cuentaque los paneles diferencian en los valores asignados a las variables, entre
mayúsculas y minúsculas, si bien, a la hora de su codificación, se puedenescribir con mayúsculas o minúsculas, ya internamente las especificacionesson interpretadas como mayúsculas.
Por ultimo cabe comentar el comando PANELID que activa o desactiva lavisualización del nombre del panel en el ángulo superior izquierdo delmismo. Entendiendo por nombre del panel el nombre del miembro que contienela definición del panel visualizado.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 285/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 285 de 374
4.6.1 Sección ATTR
Esta sección es OPCIONAL.
Su formato es:
)ATTR [DEFAULT(abc | %+_)]
donde abc representan los caracteres con los que definimos:
a : Texto intensificado. Por defecto ISPF asume "%"
b : Texto normal. Por defecto ISPF asume "+"
c : Campo de entrada. Por defecto ISPF asume "_"
ISPF permite no obstante asociar cualquier carácter a un conjunto deatributos básicos a fin de indicar mediante dicho carácter el tipo quevisualización que se desea para determinada variable o texto.
Dicho carácter puede ser cualquier carácter del teclado o un carácterhexadecimal.
Los atributos básicos son:
Atributo Valores
ATTN ( ON | OFF )
AREA ( DYNAMIC | GRAPHIC )
CAPS ( ON | OFF | IN | OUT )
COLOR ( WHITE | RED | BLUE | GREEN | YELOW )
DATAMOD ( código )
EXTEND ( ON | OFF )
HILITE ( BLINK | USCORE | REVERSE )
INTENS ( HIGH | LOW | NONE )
JUST ( LEFT | RIGHT | ASIS )PAD ( NULLS | USER | carácter )
PADC ( NULLS | USER | carácter )
SKIP ( ON | OFF )
SCROLL ( ON | OFF )
TYPE ( TEXT | INPUT | OUTPUT | DATAIN | DATAOUT )
USERMOD ( código )
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 286/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 286 de 374
Siendo el significado de cada atributo el siguiente:
Atributo Significado
ATTN Campo seleccionable por lápiz luminoso (light-pen)
AREA Permite definir el tipo de datos que contendrá una zona delpanel o ventana.
CAPS Especifica si se convierte a mayúsculas la entrada alfabética (ON | OFF ) , o si esto solo se hace en la entrada de datos (IN)o en la salida (OUT).
COLOR Especifica el color asociado al carácter del atributo.
DATAMOD Atributo asociado al tipo de area dinámica.El area dinámica presenta mezclados en una cadena tantovariables de datos como de texto. El carácter que se defina coneste atributo permitirá cambiar el valor del campo de entradaque nos interese.
EXTEND Atributo asociado al tipo de area dinámica.Indica que la ventana o area puede extenderse a 132 columnas enel caso de que se trabaje con una pantalla que permita dichoancho.
HILITE Especifica la característica de contraste asociado al tipo decampo ( Parpadeante, Subrayado o Video-inverso).
INTENS Establece la característica de intensidad ( alta, baja oninguna).
JUST Establece la característica de Justificación (derecha oizquierda) o sin justificación (ASIS).
PAD Este atributo sirve para definir el carácter de relleno pudiendoespecificarse este tanto PAD('_') como PAD(_).Eligiendo la opcion de PAD(USER) se asumirá el carácter derelleno que el usuario tenga definido en su perfil general(opcion 0.1) del menú principal de ISPF.
PADC Este atributo, parecido al anterior en cuanto a su definición,especifica el carácter de relleno que se utilizara solo cuandoel campo contenga totalmente blancos o nulos.
SKIP Este atributo especifica si cuando en la entrada de datos sellena totalmente un campo, si salta al campo siguiente (ON) o sibloquea el teclado (OFF).
SCROLL Este atributo también esta asociado al area dinámica.
TYPE Este atributo especifica el tipo de campo :
TEXT se refiere a constantes
INPUT se refiere a campos de entrada (no protegidos)
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 287/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 287 de 374
OUTPUT se refiere a campos de salida (protegidos)
DATAIN se refiere a datos de entrada en el area dinámica
DATAOUT se refiere a datos de salida en el area dinámica
USERMOD Este atributo esta asociado al area dinámica y especifica quequeremos detectar si el usuario ha modificado algún campo delarea, aunque solo sea sobrescribiendo los mismos caracteres.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 288/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 288 de 374
El siguiente ejemplo es un fragmento del panel JMPINT58 vistoanteriormente:
)ATTR DEFAULT(%@!)| TYPE(OUTPUT) INTENS(LOW) CAPS(OFF) JUST(RIGHT) PAD(' '){ TYPE(input) iNTENS(high) CAPS(On) just(left) pad('_')} TYPE(TEXT) INTENS(LOW) CAPS(OFF)
)BODY%JMP-94@---------%Buscar una palabra en una libreria@--------------@%OPCION ===>!ZCMD@@ Libreria ............. : {libreria@@ Máscara de los fuentes : {máscara @
...
@
@ Esta utilidad%submite@un proceso que se dedica a@ buscar la cadena especificada entre los miembros@ de la libreria de NATURAL cuyo nombre se ajuste@ a la máscara especificada.@@ El%resultado@le deja en la cola de salida con el@ nombre:%&Zuser@y el sufijo%SN@
En el vemos que:
- la variable LIBRERIA es una variable de entrada, sale en pantalla enintensificado, lo que se escriba se pasa a mayúsculas, y al aparecer elpanel el campo sale relleno con el carácter '_'.
- La palabra "submite" dentro del texto explicativo apareceráintensificada pues va precedida del carácter %, y este atributo deintensificado termina cuando se encuentra con @ que especifica textonormal por definirse así en el DEFAULT.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 289/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 289 de 374
4.6.2 Sección BODY
Esta sección es OBLIGATORIA.
Su formato es:
)BODY [DEFAULT(abc)] +[WIDTH(ancho)] +[EXPAND(xy)] +[CMD(campo1)] +[SMSG(campo2)] +[LMSG(campo3)] +[KANA] +[ASIS]
Siendo el significado de cada uno de los parámetros el siguiente:
DEFAULT(abc) Este parámetro tiene el mismo significado que en lasección anterior.
WIDTH(ancho) Este parámetro permite establecer el ancho de la pantalla.
EXPAND(xy) Establece los caracteres de comienzo (x) y fin (y) de lazona a expandir.
CMD(campo1) Establece el campo de comando en campo1
SMSG(campo2) Establece que el mensaje corto aparezca en el campo2
LMSG(campo3) Establece que el mensaje largo aparezca en el campo3
KANA Informa a ISPF que los caracteres KATAKANA puedenencontrarse en el BODY.
ASIS Indica que cuando el usuario cambie la posición de lalínea de comando (por ejemplo a través de la opcion 0.4del menú principal de ISPF , el panel se procesara comoesta diseñado.
Esta sección es la que realmente contiene el diseño de la pantalla, tal ycomo la vera el usuario final, siendo lo normal que únicamente secodifique )BODY si el panel va a ser llamado por una clist por ejemplo.
Para el diseño de la pantalla se combinaran tanto cadenas de texto comonombres de variables, todos ellos acompañados de los caracteres decontrol de atributos definidos en la primera sección a fin de obtener eldiseño deseado.
Las variables se identifican por ir precedidas del carácter & , y losnombres de estas variables se regirán por las reglas generales, es decir:
- Deben empezar por carácter alfabético- Deben seguir a este primer carácter hasta 7 caracteresalfanuméricos.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 290/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 290 de 374
Pueden concatenarse variables, pero para ello se delimitara el final dela primera variable con un punto.
Ejemplos:
&nombre = 'ABCDE12'&numero = 4
&nombre.&numero = 789 En esta caso se asigna a la variable&nombre4 el valor 789
CMD(printo &fichero.) En este caso debe delimitarse la variableFICHERO pues va seguido por otro carácterespecial.
La longitud de las variables viene definida por el limitador del campo.
Las distintas variables serán de entrada o de salida dependiendo delcarácter de atributo que se asocie en el diseño de la pantalla.
Asi, por ejemplo:
(1) )ATTR DEFAULT(%+_)(2) )BODY(3) +-----------------%iMPRIMIR FICHERO+---------------+(4) + Comando ==> _ZCMD(5) +(6) + Fichero ... : _fichero +(7) + Impresora.. : _impre+(8) +
(9) ... etc
De este ejemplo podemos hacer las siguientes puntualizaciones,correspondientes a las líneas numeradas a la derecha:
(1) Define los atributos por defecto:% Texto-intensificado+ Texto-normal_ Variable-de-entrada
(2) Define el comienzo de la sección correspondiente al cuerpo.
(3) Define el guionado como texto-normal y el texto "imprimir-fichero"en intensificado para pasar de nuevo a texto-normal.
(4) Viene el texto normal "Comando ==>" y la variable de entrada _ZCMD.Esta variable, por empezar por "Z" nos indica que es una variabledel sistema, concretamente es la variable que se utiliza en lospaneles para recoger el comando de entrada.
(5) Es una línea en blanco.
(6) Define la posición del texto "Fichero ... :" con el atributo detexto-normal; y
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 291/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 291 de 374
La posición de comienzo de la variable FICHERO, campo de entradapor lo que no se especifica &; Es de notar que la longitud de la
variable viene delimitada por el delimitador "+", por lo que elnombre de fichero mas largo solo podrá contener 8 posiciones.
(7) Las mismas reflexiones que las de la línea 6, pero en este caso lalongitud de la variable &impre esta limitado a 5 posiciones.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 292/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 292 de 374
4.6.3 Sección INIT
Esta sección es OPCIONAL.
Su formato es:
)INIT
La lógica contenida en esta sección se ejecutara antes de que el panelsea presentado al usuario.
Las sentencias que pueden contener son:
- Sentencias de asignación- Sentencias de verificación- Sentencias IF
- Sentencias VPUT- Sentencias REFRESH
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 293/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 293 de 374
4.6.4 Sección PROC
Esta sección es OPCIONAL.
Su formato es:
)PROC
La lógica contenida en esta sección se ejecutara después de que elusuario devuelva el control al sistema, lo cual ocurrirá al pulsar INTROo cualquier otra PF en el panel visualizado.
Las sentencias que puede contener esta sección son:
- Sentencias de asignación- Sentencias de verificación
- Sentencias IF- Sentencias VPUT- Sentencias REFRESH
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 294/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 294 de 374
4.6.5 Sección REINIT
Esta sección es OPCIONAL.
Su formato es:
)REINIT
La lógica contenida en esta sección se ejecutara cuando se detectenerrores en la sección PROC, ya que hace que ISPF mantenga el mismo panelen la pantalla, o bien al ser invocado de nuevo el servicio sinespecificar el nombre del PANEL.
También esta sección puede contener todos los tipos de sentenciasdefinidas en la sección INIT, si bien, las que normalmente se usaran enesta sección serán las de resaltar los campos erroneos o de invocar
determinados mensajes.
)REINITIF (&CADENA ^= ' ').CURSOR = &LIBRERIA
)PROCIF (&LIBRERIA = ' ').MSG = JMPI005
VER(&LIBRERIA,NAME)...
En el ejemplo presentado, en la sección PROC se valida que el contenidode LIBRERIA este a blancos, y si es así, visualiza el mensaje JMPI005.En el caso de que este a blancos, visualiza el mensaje y pasa a ejecutar
la sección REINIT, con lo que coloca el cursor en la variable LIBRERIA.
Si ha superado la anterior validación, examina que el contenido deLIBRERIA sigue las reglas de nomenclatura, y de nuevo, si no supera estavalidación, posiciona el cursor en la variable LIBRERIA.
Con el fin de resaltar el error detectado, esta sección puede cambiar losatributos del campo erróneo de la siguiente forma:
)REINIT.ATTR(.CURSOR) = 'HILITE(REVERSE)'
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 295/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 295 de 374
4.6.6 Sección MODEL
Esta sección es obligatoria pero solo en los paneles de visualización detablas.
Su formato es:
)MODEL [ROWS( ALL | SCAN )] +[CLEAR (var1 [var2...])]
El objeto de esta sección es definir la ubicación de cada uno de loscampos a visualizar de una fila genérica. El propio servicio de ISPF, elTBDISPL que se estudiara con las funciones, será el encargado de, en basea esta definición, visualizar el numero de filas que quepan, etc. perosiempre ajustándose al modelo establecido, permitiendo el scroll, etc sincodificación alguna.
Este modelo, es decir, el diseño de una fila, puede ocupar de una a ocholíneas del panel. En el caso de que en el momento de su ejecución nocupiera la informacion de una fila multilinea en la pantalla, ISPF novisualiza dicha fila.
La sintaxis de esta sección es la misma que la vista en la sección )BODY.
Si se especifica el parámetro ROWS(SCAN), el servicio de ISPF examinarael argumento de búsqueda especificado en TBSARG para presentar soloaquellas filas satisfacen la búsqueda.
Como ya se dijo en la introducción de este tema, ISPF ve las tablas comomatrices de dos dimensiones (campos y filas) donde se presupone que cada
fila contiene todos los campos, y por tanto podemos considerarlas comoregistros de longitud fija. Pero a veces, nos puede interesar definirvariables que amplíen la informacion de una fila, pero que no esténdefinidas en la tabla. Este tipo de variables, que solo acompañan a lasfilas desde que se abre la tabla hasta que se cierra, es decir solomientras esta en memoria, reciben el nombre de VARIABLES DE EXTENSION.
Las tablas para ser procesadas, deben cargarse previamente en memoria.Por eso, cuando se van leyendo las distintas filas de una tabla, cadavalor se va metiendo en su celda correspondiente dentro de la matriz a laque se ha hecho mención anteriormente. Pero las variable de extensión noforman parte de esa matriz, ya que son variables que se definen de formagenérica. Por tanto, si se cargara esa variable con un valor, alvisualizar la tabla, ese valor se visualizaría para todas las filasdisplayadas. Si se quiere que no ocurra esto, debe especificarse elparámetro CLEAR pasándole como argumento aquellas variables de extensiónque se deben resetear.
Esta sección se volverá a estudiar cuando se traten los servicios de ISPFen el apartado correspondiente a FUNCIONES.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 296/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 296 de 374
)ATTR default($+_)? TYPE(INPUT) INTENS(low) CAPS(off) JUST(LEFT)
# TYPE(OUTPUT) INTENS(high) CAPS(ON) JUST(LEFT) pad(_))BODY$------------------------ DSN especiales ----------------------------$ COMANDO ===>_opcion +SCROLL ==> _scin+$+ Línea: $B+Browse $M+Miembros Comando: $A+Alta DSN +tabla:$&tabla ++ $E+Edit $D+Borrar $X+Retornar$ $P+Rmt101 $V+Vput:4+ m DSN Observaciones+ - ------------------------------------------- ---------------------)MODEL ROWS(ALL)+_z?elemento +?comenta +)INIT&SCIN= Csr /* modo scrool */
.zvars = marca&marca = ' '&opcion = ' '.cursor = marca /* Donde se posiciona el cursor */
/* --------------------------------------- */)PROCVER (&MARCA LIST B,E,b,e,M,m,D,d,P,p,V,v))END
Este panel es el usado para presentar el siguiente resultado. En el sepuede apreciar cómo se usa la sección MODEL, definiendo las tresvariables usadas en una línea: MARCA (que es una Zvariable), ELEMENTO yCOMENTA:
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>------------------------------ DSN especiales ----- ROW 1 TO 12 OF 12COMANDO ===> SCROLL ==> CSRLínea: B Browse M Miembros Comando: A Alta DSN tabla: JMPINT00
E Edit D Borrar X RetornarP Rmt101 V Vput:4
m DSN Observaciones- -------------------------------------------- ----------------------JMPDES.CLIST CLIST PRIMARIASJMPDES.CLIST.MGO CLIST AP. PARTICULARJMPDES.INT.CLIST CLIST DESARROLLOJMPDES.JMP.CLIST CLIST RAIZJMPDES.JMP.ESKELETO ESQUELETOSJMPDES.JMP.JCL LIBRERIA DE JCLSJMPDES.JMP.JCLTIPO JCLS USADOS EN Proc.JMPDES.JMP.NOTAS NOTAS
******************************* BOTTOM OF DATA **********************<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 297/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 297 de 374
4.6.7 Sección END
Esta sección es obligatoria.
Esta sección es una sección vacía, es decir no puede contener ningún tipode sentencia, ya que su única misión es informar a ISPF que se haterminado la definición del panel.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 298/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 298 de 374
4.7 Tablas ISPF
Las tablas ISPF son matrices de datos de dos dimensiones, y en consecuenciason el equivalente de los ficheros de datos, ya que representan la siguienteestructura:
Campo 1 ... Campo n
Fila 1
...
Fila m
Al representar ficheros de datos, su contenido puede residir en disco deforma permanente. No obstante, una característica importante de las tablas
ISPF es que para ser procesadas deben residir en memoria viéndose afectadala memoria disponible por el tamaño de la tabla.
ISPF proporciona para el tratamiento de estas tablas un conjunto deservicios que se estudian en el apartado correspondiente a FUNCIONES ya quenormalmente serán invocados dichos servicios dentro de alguna función.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 299/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 299 de 374
4.8 Función
Se denomina FUNCION al conjunto formado por la pantalla o panel, mas lalógica asociada a los datos capturados o presentados en el mismo.
Hasta ahora se ha estudiado, cómo se define un panel y de que partes consta.Este capitulo trata sobre cómo asociar una lógica a los datos, de modo quese pueda crear un dialogo en tiempo de ejecución con el usuario.
Una función puede estar escrita en lenguaje de comandos o en cualquierlenguaje de programación (COBOL,FORTRAN,...), y tiene por objetivo larealización de una tarea concreta, para lo cual puede hacer uso una o variasveces de los servicios de ISPF.
La sintaxis de llamada de los servicios de ISPF es:
ISPEXEC servicio parámetro [parámetro ... ]
donde los servicios, agrupados por su funcionalidad son:
Uso General
DISPLAY Para visualizar paneles de DATOSSETMSG Para visualizar un mensaje en un panelSELECT Visualiza un panel de selección
Para tratamiento de tablas
TBDISPL Para visualizar un panel de TABLATBCREATE Crea tabla
TBOPEN Abre una tabla permanenteTBSORT Clasifica una tablaTBSTATS Devuelve estadísticas de una tablaTBQUERY Devuelve informacion acerca de una tablaTBSAVE Salva una tabla a discoTBCLOSE Cierra una tablaTBEND Termina de procesar una tabla sin salvarlaTBERASE Borra una tabla
Para tratamiento de filas
TBADD Añade una filaTBDELETE Borra una filaTABEXIST Chequea la existencia de una clave en una tablaTBGET lee una filaTBMOD Modifica una filaTBPUT Escribe una filaTBSARG Establece el argumento de búsquedaTBSCAN Realiza la búsqueda de las filasTBVCLEAR Hace reset de los campos de la fila que se especifican.
De posicionamiento en tablas
TBTOP Se sitúa en la primera fila de una tablaTBSKIP Salta a la siguiente filaTBBOTTOM Se sitúa en la ultima fila de una tabla.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 300/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 300 de 374
De FILE TAILORING
FTOPEN Abre un fichero de FILE TAILORINGFTINCL Incluye en la salida un esqueletoFTCLOSE Cierra un fichero de FILE TAILORINGFTERASE Borra el fichero de salida
De variables
VGET Lee variables de un poolVPUT escribe variables en un pool
Otros servicios
BROWSE Invoca al programa de BROWSE de ISPF
CONTROL Especifica parámetros para el control de erroresEDIT Invoca al programa de EDIT de ISPFEDREC Recupera una sesión de EDITGETMSG Lee informacion de un mensajeISREDIT Invoca al editor de macros de ISPFLIBDEF Define las librerías ISPF de un dialogoLOG Escribe los mensajes en un fichero LOGPQUERY Recupera informacion desde un area de un panel
Como respuesta a la llamada a un servicio, ISPF devuelve siempre un códigode retorno, cuyos valores, por regla general, significan :
0 Se ha ejecutado con éxito el servicio4 Se ha detectado informacion de aviso (Warning)
8 Se ha detectado error grave12 Se ha detectado error fatal
En el anexo se especifica el código de retorno y el significado para cadauno de los servicios de ISPF.
Puesto que para la realización de los ejemplos explicativos, seguiremos ellenguaje de comandos CLIST, la sintaxis para examinar el código de retornodebe ser :.
IF &LASTCC operador valor THEN sentencia
donde:
operador puede ser >,<,>=,=,=<,Ø=,Ø>,Ø<,^=,^<,^>Valor puede ser una constante, una variable o una expresión
En los párrafos siguientes se analizan los distintos servicios de ISPFenunciados.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 301/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 301 de 374
4.8.1 Servicios Generales
DISPLAY
Este servicio se utiliza para visualizar paneles de DATOS, entendiendopor tal un panel para entrada o salida de datos.
El formato de la llamada a este servicio es:
ISPEXEC DISPLAY [PANEL(id-panel)] [MSG(id-mensaje)] +[CURSOR(campo)] [CSRPOS(posición)]
donde
PANEL especifica el miembro de la libreria de paneles que serávisualizado
MSG especifica el mensaje que será visualizado cuando sevisualice el panel.
CURSOR especifica el nombre del campo en el que se posicionara elcursor cuando se visualice el panel.
CSRPOS especifica la posición del campo en la que se situara elcursor cuando se visualice el panel.
Como ejemplo de este servicio, se presenta la clist JMPINT06 que sirvepara imprimir un fichero por una impresora no predeterminada,
pidiéndose estos datos por el panel JMPINT06
El comando PRINTO que usa la clist invocada es un comando de TSO quesirve para imprimir un fichero por la impresora que se defina en elparámetro de palabra clave DEST().
/* -------- jmpint06 --------- */PROC 0ISPEXEC DISPLAY PANEL(JMPINT06)IF &LASTCC Ø= 0 THEN EXITPRINTO DA(&FICHERO.) DEST(&REMOTO.)EXIT.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 302/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 302 de 374
Definición del panel JMPINT06:
)ATTR DEFAULT(%@!))BODY%JMP-94@-------------------%Imprimir Fichero @-------------------@%OPCION ===>!ZCMD@@ Impresora...:!remoto@%@ Fichero ....:!fichero @%%)INIT&remoto = 'RMT101'&fichero = &Zuser.cursor = fichero
.csrpos = 7)PROCver(&fichero,dsname)&Zcmd = '99'if (&fichero = all,'') &Zcmd = 'X')END
En el panel se puede poner la validación de que el nombre del ficherose ajuste a las reglas de nomenclatura de DSN, pero es en la CLISTdonde se debe validar que el fichero existe, y en el caso de que noexista mandar el mensaje correspondiente, para lo cual se deben añadirlas siguientes líneas :
IF &SYSDSN('&FICHERO') ^= OK +
THEN ISPEXEC DISPLAY MSG(JMPP001) CURSOR(&fichero)
Esta llamada al servicio DISPLAY carece del parámetro PANEL, lo cualhace que se revisualice el ultimo que se visualizo, y además, que seejecute la sección )REINIT del mismo.
Con el fin de resaltar el error detectado, esta sección puede cambiarlos atributos del campo erróneo de la siguiente forma:
)REINIT.ATTR(.CURSOR) = 'HILITE(REVERSE)'
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 303/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 303 de 374
SETMSG
Este servicio se utiliza para visualizar un mensaje.
El formato de la llamada a este servicio es:
ISPEXEC SETMSG [MSG(id-mensaje)]
donde MSG especifica el identificador del mensaje que sequiere visualizar.
ejemplo:
ISPEXEC TBEXIST JMPLIB01
IF &LASTCC = 8 THEN +ISPEXEC SETMSG MSG(JMPM001W) /* ya existe */
Como ya se vio en el párrafo dedicado a los mensajes JMPM001W es unmensaje contenido en el miembro JMPM00 de la libreria definida paramensajes.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 304/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 304 de 374
SELECT
Este servicio esta previsto para que presente una pantalla de tipo"MENU", es decir, el diseño de la pantalla es prácticamente solo detexto informando de las distintas opciones que se pueden elegir, y uncampo para recoger la opcion elegida por el usuario.
El formato de la llamada a este servicio es:
ISPEXEC SELECT PANEL(id-panel)]
donde id-panel especifica el miembro de la libreria de paneles quese quiere visualizar.
El siguiente ejemplo muestra una clist, la cual termina presentando elpanel raíz con todas las utilidades desarrolladas en este libro, poreso lo primero que hace es alocar las distintas librerías, que seusaran en los paneles y clists invocados desde el panel invocado(JMPMENU0).
PROC 0/* ----------------------------------- LIBRERIA DE PANELES/*ISPEXEC LIBDEF ISPPLIB DATASET ID('JMPDES.JMP.PANEL')/*/* -------------------------------- LIBRERIA DE PROCEDURES/*ISPEXEC LIBDEF ISPTLIB DATASET ID('JMPDES.CLIST')
/*/* -------------------------------- LIBRERIA DE ESQUELETOS/*ISPEXEC LIBDEF ISPSLIB DATASET ID('JMPDES.CLIST.JCLTIPO')/*/* --------------------------------- LLAMADA PANEL INICIAL/*ISPEXEC SELECT PANEL(JMPMENU0)
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 305/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 305 de 374
A continuación se muestra la definición del panel JMPMENU0
)ATTR DEFAULT($+~)| TYPE(OUTPUT) INTENS(LOW) CAPS(OFF) JUST(RIGHT) PAD(' '){ TYPE(TEXT) INTENS(LOW) CAPS(OFF)} TYPE(TEXT) INTENS(LOW) CAPS(OFF)
)BODY+-------------------$MENU PARTICULAR DE JMP+----------------------$OPCION===>~ZCMD +$$$$ 1+Utilidades particulares +$ 2+Tratamiento de tablas +$ 3+Tratamiento de cadenas +$ 4+Miembros de una libreria +
$ 5+Borrar tabla +$ 6+Librerías alocadas +$ 7+Librerías especiales +$ 8+Testear aplicaciones +$ 9+Visualizar o no las PF's +$ +$ X+EXIT - SALIR DEL MENU)INIT&ZHTOP = USRH000.HELP = USRH100&ZHINDEX = USRH999
)PROC&ZSEL = TRANS(TRUNC(&ZCMD,'.')
1,'CMD(EX ''JMPDES.CLIST.MGO(JMP)'')'
2,'PANEL(JMPTAB00)'3,'PANEL(JMPCAD00)'4,'CMD(EX ''JMPDES.CLIST.MGO(JMPLIB00)'')'5,'CMD(EX ''JMPDES.CLIST.MGO(JMPDEL00)'')'6,'CMD(EX ''JMPDES.CLIST.MGO(JMPALO00)'')'7,'CMD(EX ''JMPDES.CLIST.MGO(JMPESP00)'')'8,'PGM(ISPYXDR) PARM(ISR) NOCHECK'9,'PGM(ISPOPF) PARM(PFK,&ZPARM)'X,'EXIT'
' ',' '*,'?' )
)END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 306/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 306 de 374
4.8.2 Servicios para el Tratamiento de tablas
Como se dijo en la introducción de este tema, las tablas de ISPF tienencomo especial característica el hecho de que para su uso deben cargarseen memoria, lo cual puede imponer restricciones al tamaño de las mismas.
Estos servicios proporcionan la posibilidad de usar y mantener las tablasde ISPF.
TBDISPL
Este servicio se utiliza para visualizar FILAS de una TABLA.
El formato de la llamada a este servicio es:
ISPEXEC TBDISPL nombre-tabla [PANEL(id-panel)] +[MSG(id-mensaje)] [CSRROW(num-fila)] +[CURSOR(campo)] [CSRPOS(posición)] +[AUTOSEL(YES|NO)] +[POSITION(vname)] [ROWID(vname)]
donde
PANEL especifica el panel que será visualizado debiendo serdel tipo de visualización de tablas, es decir, debetener definida la sección )MODEL
MSG especifica el mensaje que será visualizado cuando sevisualice el panel.
CSRROW especifica el numero de la fila en la que se situara elcursor al aparecer el panel.
CURSOR especifica el nombre del campo en el que se posicionarael cursor cuando se visualice el panel.
CSRPOS especifica la posición del campo en la que se situara elcursor cuando se visualice el panel.
AUTOSEL especifica si la fila se selecciona solo con posicionarel cursor en cualquier campo de la fila (YES) , o si espreciso marcar alguna campo de selección paraseleccionar la fila, con independencia de donde se sitúeel cursor (NO).
ROWID El panel visualizara el panel especificadocorrespondiendo la primera fila visualizada del panelcon la fila que tiene por puntero (CRP : current rowpointer) el numero especificado en la variable queacompaña a este argumento.Si val1 = 0 se posionara en el TOP de la tabla.
POSITION Este parámetro es parecido al anterior, solo que en elcaso de especificarse, devuelve en la variableespecificada el valor del CRP de la fila seleccionada.
Como ejemplo de este servicio, se presenta el procedimiento JMPALO01
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 307/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 307 de 374
visto en los ejemplos del tema de clist, el cual presenta clasificadaspor orden alfabético, las librerías que se tienen alocadas, y que en
un paso previo se han cargado en la tabla JMPALO01. Una vez elegidauna de esta librerías mediante una marca en el campo correspondientese visualizaran todos los miembros de dicha libreria.
/* -------- jmpalo01 ---------*/PROC 0...cargar en la tabla JMPTAB01 librerías alocadas...
1 ISPEXEC CONTROL DISPLAY SAVE2 ISPEXEC TBDISPL JMPTAB01 PANEL(JMPINT01)3 IF &LASTCC Ø= 0 THEN GOTO T_ERROR4 IF &MARCA Ø= STR() THEN DO5 ISPEXEC BROWSE &LIBRERIA
6 IF &LASTCC Ø= 0 THEN GOTO T_ERROR7 END8 ISPEXEC CONTROL DISPLAY RESTORE
...
Este ejemplo cuenta con llamadas a varios servicios de ISPF por lo quese comentara cada una de sus líneas a fin de aclarar los conceptoscorrespondientes, con independencia de que sean tratados con masextensión en sus apartados correspondientes.
1 Salva la situación actual para no perderla ya que se va a llamar aun servicio de TBDISPL con un nombre de panel distinto o no.
2 presenta el panel JMPALO01 con los nombres de las librerías
alocadas mas un campo para marcar la libreria de la que se deseaver los miembros.
3 Si hay algún problema a la hora de presentar ese panel se desvíael flujo del procedimiento al párrafo T_ERROR.
4 Si se ha marcado con algún carácter el campo marca, se ejecutanlas sentencias contenidas entre DO y END
5 Llama al programa BROWSE pasándole como parámetro la libreriacuyos miembros se quieren consultar.
8 Restaura la situación salvada antes de invocar al servicio BROWSE
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 308/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 308 de 374
TBCREATE
Este servicio se utiliza para crear una tabla, especificando losnombres de los campos (columnas) y los nombres de aquellos campos queconllevan el atributo de clave.
El formato de la llamada a este servicio es:
ISPEXEC TBCREATE nombre-tabla +[NAMES(lista1)] [KEYS(lista2)] +[WRITE | NOWRITE] [SHARE] +[LIBRARY(ddname)] [REPLACE]
donde
lista1 Especifica la lista de campos que componen una fila de latabla. Solo se especifica el nombre de la columna, no la
longitud ni el tipo.La lista de campos puede delimitarse por blancos o porcomas.
Lista2 Especifica la lista de campos que componen la clave deacceso, solo en el caso de que la tabla este indexada.
WRITE Especifica que la tabla es permanente, es decir que segrabara en disco cuando se cierre.
NOWRITE Especifica que la tabla es temporal, es decir solo existehasta que se cierre, momento en el cual desaparece.Esta es la opcion por defecto.
SHARED Este parámetro esta relacionado con el SPLIT de pantalla.Una tabla solo puede crearse para una pantalla, pero comoel identificador es el terminal, este parámetro estaespecificando si dicha tabla puede ser accesible por laotra pantalla lógica asociada al mismo terminal.
LIBRARY Este parámetro permite especificar la ddname, es decir elnombre asignado al dataset en la alocacion del fichero,el caso de que se quiera crear la tabla en unalibreria distinta a la especificada por defecto.con elservicio LIBDEF.
REPLACE Especifica que si la tabla ya existe, que la sustituyapor la nueva, y si no existe que la cree.
Los códigos de retorno devueltos por este servicio son:
8 la tabla ya existe12 La tabla esta siendo usada.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 309/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 309 de 374
El siguiente ejemplo muestra el panel y la clist usados para dar dealta el nombre de un dataset en la tabla que tiene por nombre el
nombre del usuario, y que contiene todos los nombres de aquellosficheros de uso mas frecuente.
/* <<<<<<<<<<<<<<<<<<<<<< JMPZZZ0A >>>>>>>>>>>>>>>>>>>>>>>>>>> *//* */
PROC 0 TESTIF &TEST = TEST THEN CONTROL SYMLIST CONLIST MSG
ELSE CONTROL NOMSG/* ------------------------------------------------------------- *//* */
SET CABECERA = <<< LIBRERIAS PARTICULARES >>>SET &FICHERO= DESJMP.JMP.TABLAS(&SYSUID.)
/* *//* -------------------------- PEDIR ENTRADA -------------------- */
/* */ISPEXEC DISPLAY PANEL(JMPZZZ01)IF ( &ELEMENTO = &STR( ) ) THEN EXIT
/* */INICIO: +/* */
ISPEXEC CONTROL ERRORS RETURNALLOC FI(ENTRADA) DA('&FICHERO') SHR REUSEIF &LASTCC ^= 0 THEN FREE DA('&FICHERO')
/* *//* ----------------------- DEFINIR LIBRERIA DE TABLAS OUTPUT --- *//* */
ISPEXEC LIBDEF ISPTABL DATASET ID('DESJMP.JMP.TABLAS')SET &RC = &LASTCC
/* *//* -------------------------------- ABRIR TABLA --------------- *//**/
ISPEXEC TBOPEN &SYSUID WRITESET &RC = &LASTCC
/* ----- LA TABLA ESTA ABIERTA -----*/IF &RC = 12 THEN +
DOISPEXEC TBCLOSE &SYSUIDSET RC = &LASTCCWRITE ===> CERRAR TABLA DE ENTRADA : &RCFREE DA ('&FICHERO')EXIT
END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 310/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 310 de 374
/* ----- NO EXISTE LA TABLA --------*/IF &RC = 8 THEN +
DO ISPEXEC TBCREATE &SYSUID NAMES(ELEMENTO,COMENTA) +WRITE REPLACE
SET &RC = &LASTCCIF &RC ^= 0 THEN +
WRITE ===> CREAR TABLA DE ENTRADA : &RCISPEXEC TBSORT &SYSUID FIELDS(ELEMENTO)SET &RC = &LASTCCIF &RC ^= 0 THEN +
WRITE ===> CLASIFICAR TABLA ......... : &RCEND
/* *//* -------------------------- PEDIR ENTRADA -------------------- *//* */
ERROR OFF/* */
ISPEXEC TBADD &SYSUID SAVE(ELEMENTO,COMENTA) ORDERSET &RC = &LASTCCIF &RC EQ 0 THEN +
DOISPEXEC TBSAVE &SYSUID NEWCOPYSET &RC = &LASTCC
ENDISPEXEC TBEND &SYSUIDFREE DA ('&FICHERO.')
/* */EXIT
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 311/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 311 de 374
La definición del panel JMPZZZ01 es la siguiente:
)ATTR default($+_)? TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT) PAD('_'))BODY$------------------- Mantenimiento de DSNs especiales -------------$++ Esta opcion da de alta en la tabla de DSNs especiales+ el nombre del DSN que se especifique a continuación.+ También se puede acompañar una peque|a reseña de su+ contenido.+$+ Nombre DSN ...... : ?elemento +$
+ Descripción breve : ?comenta +$$$)INIT&elemento= ' '&comenta = ' '&salir = ' '
)PROC/* IF ( &ELEMENTO = ALL,'') &SALIR = 'SI' *//* VER (&elemento,dsname) */)END
El resultado obtenido es el siguiente:
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>---------------------- DSN especiales ----------- ROW 1 TO 12 OF 12COMANDO ===> SCROLL ==> CSR
Línea: B Browse M Miembros Comando: A Alta DSN tabla: JMPINT00E Edit D Borrar X RetornarP Rmt101 V Vput:4
m DSN Observaciones- --------------------------------- -------------------------------DESJMP.CLIST CLIST PRIMARIASDESJMP.CLIST.MGO CLIST DE APLICACION PARTICULARDESJMP.INT.CLIST CLIST DESARROLLO ParticularDESJMP.JMP.CLIST CLIST RAIZDESJMP.JMP.ESKELETO ESQUELETOS
************************** BOTTOM OF DATA *************************<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 312/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 312 de 374
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>------------------ Mantenimiento de DSNs especiales --------------
Esta opcion da de alta en la tabla de DSNs especialesel nombre del DSN que se especifique a continuación.También se puede acompañar una pequeña reseña de sucontenido.
Nombre DSN ...... : DESJMP.JMP.JCL__________________________Descripción breve : LIBRERIA DE JCLS______________
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-------------------- DSN especiales ------------- ROW 1 TO 12 OF 12COMANDO ===> SCROLL ==> CSR
Línea: B Browse M Miembros Comando: A Alta DSN tabla: JMPINT00E Edit D Borrar X RetornarP Rmt101 V Vput:4
m DSN Observaciones- --------------------------------- -------------------------------DESJMP.CLIST CLIST PRIMARIASDESJMP.CLIST.MGO CLIST DE APLICACION PARTICULARDESJMP.INT.CLIST CLIST DESARROLLO Particular
DESJMP.JMP.CLIST CLIST RAIZDESJMP.JMP.ESKELETO ESQUELETOSDESJMP.JMP.JCL LIBRERIA DE JCLS
************************** BOTTOM OF DATA *************************<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 313/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 313 de 374
TBOPEN
Este servicio se utiliza para abrir una tabla permanente, ya que latemporal desaparece cuando se cierra.
El formato de la llamada a este servicio es:
ISPEXEC TBOPEN nombre-tabla +[WRITE | NOWRITE] [SHARE] +[LIBRARY(ddname)]
donde
WRITE Especifica que la tabla se grabara en disco cuando secierre.
NOWRITE Especifica que la tabla no se grabara en disco cuando se
cierre.
SHARE Este parámetro esta relacionado con el SPLIT de pantalla.
Una tabla solo puede crearse para una pantalla, pero comoel identificador es el terminal, este parámetro estaespecificando si dicha tabla va a poder ser accedida porla otra pantalla lógica asociada al mismo terminal.
LIBRARY Este parámetro permite especificar la ddname, es decir elnombre asignado al dataset en la alocacion del fichero,en el caso de que la tabla se encuentre en una libreriadistinta a la especificada por defecto.mediante elservicio LIBDEF.
Los códigos de retorno devueltos por este servicio son:
8 la tabla NO existe12 La tabla esta siendo usada.
Ejemplo:
ISPEXEC TBOPEN &SYSUID WRITEIF &LASTCC = 8 DO +
ISPEXEC TBCREATE &SYSUID +NAMES(LIBRERIA, OBSERVA)KEYS(LIBRERIA)
END
En este caso se abre una tabla que tiene por nombre el nombre delusuario, ya que es el valor contenido en la variable del sistema&SYSUID; y, en el caso de que no exista la tabla, se crea como miembrode la libreria definida para tablas de salida, y con los camposLIBRERIA y OBSERVA, estando clasificada por el campo LIBRERIA.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 314/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 314 de 374
TBSORT
Este servicio se utiliza para clasificar una tabla.
Además, este servicio se encarga de guardar la informacion relativa alsort a fin de que si en momentos posteriores a su clasificación seinsertaran nuevas filas, estas se clasificaran en el sitio que lescorresponda de acuerdo con las especificaciones dadas en esteservicio.
El formato de la llamada a este servicio es:
ISPEXEC TBSORT nombre-tabla +FIELDS(lista-tríos)
donde
lista-tríos Especifica la lista de tríos en base a los que seclasificara la tabla, siendo el formato de un trióel siguiente:
campo,C|N,A|D
donde C significa carácterN significa NuméricoA orden ascendenteD orden descendente
Los códigos de retorno devueltos por este servicio son:
0 Todo correcto12 La tabla no esta abierta16 Error en la conversión20 error grave
Ejemplo: El siguiente ejemplo muestra como clasificar una tabla poruna clave compuesta de dos campos: miembro y libreria.
ISPEXEC TBCREATE jmptab02 +NAMES(miembro libreria, observa)
ISPEXEC TBSORT FIELDS(miembro,c,a libreria,c,a)
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 315/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 315 de 374
TBSTATS
Devuelve estadísticas de una tabla
Este servicio se utiliza para obtener estadísticas de datos de unatabla, pudiendo estar o no abierta dicha tabla.
El formato de la llamada a este servicio es:
ISPEXEC TBSTATS nombre-tabla +[CDATE(variable_1)] +[UDATE(variable_2)] +[CTIME(variable_3)] +[UTIME(variable_4)] +[USER(variable_5)] +
[ROWCREAT(variable_6)] +[ROWCURR(variable_7)] +[ROWUPD(variable_8)] +[TABLEUPD(variable_9)] +[SERVICE(variable_10)] +[RETCODE(variable_11)] +[STATUS1(variable_12)] +[STATUS2(variable_13)] +[STATUS3(variable_14)] +[LIBRARY(nombre_dd)]
donde
CDATE devuelve la fecha de creación de la tabla en lavariable_1
UDATE Devuelva la fecha en la que se realizo la ultimamodificación a la tabla.
CTIME Devuelve la hora del día en el que se creo la tabla.
UTIME Devuelve la hora del día en el que se realizó la ultimamodificación a la tabla.
USER Devuelve en variable_5 el usuario que accedió por ultimavez a la tabla.
ROWCREAT Devuelve el numero de filas iniciales de la tabla
ROWCURR Devuelve el numero de filas actuales de la tabla.
ROWUPD Devuelve el numero de filas modificadas de la tabla.
TABLEUPD Devuelve el numero de veces que ha sido modificadala tabla
SERVICE Devuelve el nombre del ultimo servicio de ISPF queaccedió a la tabla.
RETCODE Devuelve el valor del código de retorno que devolvió esteultimo servicio.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 316/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 316 de 374
STATUS1 Devuelve uno de los siguientes valores:
1 - la tabla existe en la libreria de tablas deentrada alocada.2 - La tabla no existe en la libreria de tablas de
entrada alocada.3 - No se encuentra alocada la libreria de tablas
de entrada
STATUS2 Devuelve uno de los siguientes valores en función de comose haya abierto esta tabla para la pantalla lógica desdela que se hace la consulta:
1 - La tabla no esta abierta para esta pantalla.2 - esta abierta en modo NOWRITE3 - esta abierta en modo WRITE
4 - esta abierta en modo SHARED NOWRITE5 - esta abierta en modo SHARED WRITE
STATUS3 Devuelve uno de los siguientes valores en función de quese encuentra disponible para ser abierta en modo WRITE:
1 - La tabla esta disponible2 - La tabla no esta disponible
LIBRARY Este parámetro especifica el nombre lógico de otra DDdistinta a la ISPTLIB, asociado a la libreria donde seencuentra la tabla de la que se desea obtenerestadísticas.
Ejemplo:
ISPEXEC TBSTATS JMPTAB01 CDATE(FECHAC) UDATE(FECHAU)WRITE la fecha de creación de la tabla fue : &FECHACWRITE La fecha de la ultima modificación fue : &FECHAU
En tiempo de ejecución resulta:
la fecha de creación de la tabla fue : '94/11/10'La fecha de la ultima modificación fue : '95/03/12'
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 317/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 317 de 374
TBQUERY
Este servicio devuelve informacion relativa a la tabla, la cual debeestar abierta.
ISPEXEC TBQUERY nombre-tabla +[KEYS(variable_1)] +[NAMES(variable_2)] +[KEYNUM(variable_3)] +[NAMENUM(variable_4)] +[ROWNUM(variable_5)] +[POSITION(variable_6)] +
Donde:
KEYS Devuelve una cadena con el conjunto de campos queconfiguran la clave.
NAMES Devuelve una cadena con el resto de campos
KEYNUM devuelve el numero de campos que configuran la clave
NAMENUM Devuelve el numero de campos no clave de la tabla
ROWNUM Devuelve el numero de filas de la tabla
POSITION Devuelve el valor del CRP (current row pointer), esdecir el puntero de la fila actual.
Ejemplo:
Al ejecutar el programa resulta:
ISPEXEC TBQUERY TABEJEM KEYS(CLAVE) +NAMES(NOCLAVE) +KEYNUM(CLAVEN) +NAMENUM(NOCLAVEN) +ROWNUM(FILAS)
WRITE La clave esta formada por los campos &CLAVEWRITE El resto de campos son : &NOCLAVEWRITE La clave tiene &CLAVEN camposWRITE El numero de campos no clave es &NOCLAVENWRITE La tabla tiene &FILAS filas
En tiempo de ejecución resulta:
La clave esta formada por los campos '(CLAVE1 CLAVE2)'El resto de campos son : '(CAMPO1 CAMPO2 CAMPO3)'La clave tiene 2 camposEl numero de campos no clave es 3La tabla tiene 123 filas
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 318/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 318 de 374
TBSAVE
Este servicio se encarga de escribir el contenido de una tabla desdememoria a disco.
El formato de la llamada a este servicio es:
ISPEXEC TBSAVE nombre-tabla [+][LIBRARY(nombre_ddname) +][NAME(nombre_miembro) +][NEWCOPY | REPLCOPY +][PAD(porcentaje) +]
donde
Nombre-tabla es el nombre de la tabla ISPF que se encuentra enmemoria.
Nombre_ddname Es el nombre lógico asociado al nombre de una libreriade tablas distinto al usado por defecto (ISPTABL)mediante una sentencia ALLOC.
Nombre_miembro Es el nombre del nuevo miembro en la libreria definidapara tablas de salida.
NEWCOPY especifica que el nuevo miembro se escriba al final dela libreria de tablas.
REPLCOPY Especifica que el nuevo miembro se escriba sobre elanterior, reemplazando al que existía, si es queexistía.
PAD Especifica el porcentaje que se debe reservar parafuturas modificaciones. Este espacio se reserva alfinal del miembro creado, y solo en creación.
Como ejemplo se muestra un fragmento de la clist que acompaña laexplicación de la sentencia TBCREATE. En el se muestra cómo se salva adisco la tabla ISPF que esta en memoria con el nombre del usuario, quees el nombre contenido en la variable del sistema &SYSUID.
DOISPEXEC TBSAVE &SYSUID NEWCOPYSET &RC = &LASTCC
END
El siguiente fragmento muestra el contenido del miembro que contienela tabla salvada. Dicho contenido se muestra en formato normal yhexadecimal.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 319/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 319 de 374
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
BROWSE -- JMPDES.JMP.TABLAS(JMPINT00) --- LINE 00000000 COL 001 080COMMAND ===> Hex on SCROLL ===> CSR*************************** TOP OF DATA ****************************..TIR:... .{JMPINT00....'d...0........m.?. .n.....JMPDES ...........TO...q]a..COMENTA ...q]n.........]..........JMPDES.CLIST..CLIST PRIMATO..JMPDES.CLIST.COMENTA ..CLIST PRIMARIAS.......q...b.....&.,..JMPDE..CLIST DE APLICACION PARTICULAR.ELEMENTO..JMPDES.CLIST.MGO.COMENTA ....
********************** BOTTOM OF DATA ********************************<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>BROWSE -- JMPDES.JMP.TABLAS(JMPINT00) ---- LINE 00000000 COL 001 080
COMMAND ===> SCROLL ===> CSR************************* TOP OF DATA *******************************---------------------------------------------------------------------..TIR:... .{JMPINT00....'d...0........m.?. .n.....JMPDES ...........04ECD700040CDDDCDEFF008078000F00000000936140900113EEDCFE440000000000004399A006000147953000200D400600002000C43F30151F273327782000001000C000---------------------------------------------------------------------TO...q]a..COMENTA ...q]n.........]..........JMPDES.CLIST..CLIST PRIMAED01095820CDDCDEC400095900800700050102030500EEDCFE4CDCEE00CDCEE4DDCDC360008A107364553100508A5060000040A0E0C0D040C327782B339230F33923079941...
************************** BOTTOM OF DATA ***************************<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 320/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 320 de 374
TBCLOSE
Este servicio realiza una doble función, salva el contenido de latabla que se va a cerrar sobre disco, y borra de la memoria la tablasalvada.
El formato de la llamada a este servicio es por lo tanto similar alformato de la sentencia TBSAVE:
ISPEXEC TBCLOSE nombre-tabla [+][LIBRARY(nombre_ddname) +][NAME(nombre_miembro) +][NEWCOPY | REPLCOPY +][PAD(porcentaje) +]
donde
Nombre-tabla es el nombre de la tabla ISPF que se encuentra enmemoria.
Nombre_ddname Es el nombre lógico asociado al nombre de una libreriade tablas distinto al usado por defecto (ISPTABL)mediante una sentencia ALLOC.
Nombre_miembro Es el nombre del nuevo miembro en la libreria definidapara tablas de salida.
NEWCOPY especifica que el nuevo miembro se escriba al final de
la libreria de tablas.
REPLCOPY Especifica que el nuevo miembro se escriba sobre elanterior, reemplazando al que existía, si es queexistía.
PAD Especifica el porcentaje que se debe reservar parafuturas modificaciones. Este espacio se reserva alfinal del miembro creado, y solo en creación.
Como ejemplo se muestra un fragmento de la clist que acompaña laexplicación de la sentencia TBCREATE. En el se muestra cómo se cierrauna tabla salva a disco la tabla ISPF que esta en memoria con elnombre del usuario, que es el nombre contenido en la variable delsistema &SYSUID.
ISPEXEC TBCLOSE &SYSUID NEWCOPY
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 321/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 321 de 374
TBEND
Este servicio se encarga de borrar de memoria la tabla especificadasin salvar su contenido a disco.
El formato de la llamada a este servicio es:
ISPEXEC TBEND nombre-tabla
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 322/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 322 de 374
TBERASE
Este servicio se encarga de borrar una tabla de la libreria definidapor defecto, o si es distinta, de la libreria que se especifique.
El formato de la llamada a este servicio es:
ISPEXEC TBERASE nombre-tabla [+][LIBRARY(nombre_ddname) ]
donde nombre_ddname especifica el nombre de una libreria alocada, ydistinta de la ISPTABL, que es la usada por defecto.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 323/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 323 de 374
4.8.3 Tratamiento de filas
TBADD
Este servicio añade una fila a la tabla especificada inmediatamentedespués de la fila actual, a no ser que se especifique el parámetroORDER o que la tabla se encuentre previamente clasificada.
El formato de la llamada a este servicio es:
ISPEXEC TBADD nombre_tabla +[SAVE(lista _campos)] +ORDER
donde
SAVE Permite especificar variables de extensión, es decir camposque no existen para todas las filas y que serán salvadosacompañando a la fila que tenga.
ORDER Este parámetro es aplicable a tablas que han sidoclasificadas previamente.
Después de llamar a este servicio debe, como siempre, chequearse elcódigo de retorno, ya que si fuera 8 especificaria que no se haañadido la fila por tener clave duplicada, es decir, que ya existeotra fila con esa clave.
Como ejemplo ilustrativo se acompaña un fragmento de la clist JMPZZZ0Aque da de alta el nombre de un DSN en la tabla que tiene por nombre elnombre del usuario.
/* <<<<<<<<<<<<<<<<<<<<<< JMPZZZ0A >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*//* */
PROC 0 TESTIF &TEST = TEST THEN CONTROL SYMLIST CONLIST MSG
ELSE CONTROL NOMSG/* ------------------------------------------------------------- *//* */
SET CABECERA = <<< LIBRERIAS PARTICULARES >>>
SET &FICHERO= DESJMP.JMP.TABLAS(&SYSUID.)/* *//* -------------------------- PEDIR ENTRADA -------------------- *//* */
ISPEXEC DISPLAY PANEL(JMPZZZ01)IF ( &ELEMENTO = &STR( ) ) THEN EXIT
/* */INICIO: +/* */
ISPEXEC CONTROL ERRORS RETURNALLOC FI(ENTRADA) DA('&FICHERO') SHR REUSEIF &LASTCC ^= 0 THEN FREE DA('&FICHERO')
/* */
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 324/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 324 de 374
/* -------------------------- DEFINIR LIBRERIA DE TABLAS OUTPUT *//* */
ISPEXEC LIBDEF ISPTABL DATASET ID('DESJMP.JMP.TABLAS')SET &RC = &LASTCC/* *//* -------------------------------- ABRIR TABLA --------------- *//* */
ISPEXEC TBOPEN &SYSUID WRITESET &RC = &LASTCC
/* ----- LA TABLA ESTA ABIERTA -----*/IF &RC = 12 THEN +
DOISPEXEC TBCLOSE &SYSUIDSET RC = &LASTCCWRITE ===> CERRAR TABLA DE ENTRADA : &RCFREE DA ('&FICHERO')
EXITEND
/* ----- NO EXISTE LA TABLA --------*/IF &RC = 8 THEN +
DOISPEXEC TBCREATE &SYSUID NAMES(ELEMENTO,COMENTA) +
WRITE REPLACESET &RC = &LASTCCIF &RC ^= 0 THEN +
WRITE ===> CREAR TABLA DE ENTRADA : &RCISPEXEC TBSORT &SYSUID FIELDS(ELEMENTO)SET &RC = &LASTCCIF &RC ^= 0 THEN +
WRITE ===> CLASIFICAR TABLA ......... : &RC
END/* *//* -------------------------- PEDIR ENTRADA -------------------- *//* */
ERROR OFF/* */
ISPEXEC TBADD &SYSUID SAVE(ELEMENTO,COMENTA) ORDERSET &RC = &LASTCCIF &RC EQ 0 THEN +
DOISPEXEC TBSAVE &SYSUID NEWCOPYSET &RC = &LASTCC
ENDISPEXEC TBEND &SYSUIDFREE DA ('&FICHERO.')EXIT
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 325/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 325 de 374
TBDELETE
Este servicio borra una fila de la tabla que se especifique.Para tablas con sin campos clave, borrar la fila actual, mientras quepara tablas con clave borrar la fila cuya clave coincida con losvalores cargados en las variables que tengan los nombres de los camposclave.
El formato de la llamada a este servicio es:
ISPEXEC TBDELETE nombre_tabla
Después de llamar a este servicio debe, como siempre, chequearse elcódigo de retorno, ya que si fuera 8 especificaría que no se haborrado la fila, bien porque no existe una fila con la claveespecificada, o bien, para tablas sin clave, porque nos encontramos en
el TOP de la tabla, por lo que el CSR no tiene un valor determinado.
Como ejemplo ilustrativo se acompaña un fragmento de la clist JMPZZZ0Mque borra una fila de la tabla y carga el mensaje 'BORRADO' en elcampo de observaciones.
IF &MARCA = B THEN -DO
ISPEXEC CONTROL DISPLAY SAVESET &MENSAJE = BORRADOISPEXEC TBDELETE JMPLIB01ISPEXEC CONTROL DISPLAY RESTORE
END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 326/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 326 de 374
TBEXIST
Este servicio chequea la existencia de una clave en una tabla
El formato de la llamada a este servicio es:
ISPEXEC TBEXIST nombre_tabla
En el caso de que no exista la clave buscada o de que la tabla no esteindexada, este servicio devuelve el código de retorno 8.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 327/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 327 de 374
TBGET
Este servicio hace que ISPF se reposicione en la fila de la tabla quese especifique, y que recupere los valores de los campos de esa fila.
El formato de la llamada a este servicio es:
ISPEXEC TBGET nombre_tabla +[SAVENAME(variable_1)] +[NOREAD] +[POSITION(variable_2)] +[ROWID(variable_3)]
donde
SAVENAME este parámetro permite conocer el nombre de las variables
de extensión que se grabaron con TBADD.
NOREAD este parámetro permite posicionarse en una fila concreta,pero no lee el contenido de los campos.
POSITION estos parámetros posicionan el cursor en la fila que seROWID especifique.
En el caso de que no exista la clave buscada o de que la tabla no esteindexada, este servicio devuelve el código de retorno 8.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 328/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 328 de 374
TBMOD
Este servicio hace que ISPF añada una fila a la tabla si no existe unafila con la clave especificada, o , si existe, que modifique la fila.
El formato de la llamada a este servicio es:
ISPEXEC TBMOD nombre_tabla +[SAVE(lista _campos)] +ORDER
donde
SAVE Permite especificar variables de extensión, es decir camposque no existen para todas las filas y que serán salvadosacompañando a la fila que tenga.
ORDER Este parámetro es aplicable a tablas que han sidoclasificadas previamente.
En el caso de que no exista la clave buscada da de alta la fila, ydevuelve como código de retorno 8 o de que la tabla no este indexada,este servicio devuelve el código de retorno 8.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 329/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 329 de 374
TBPUT
Este servicio hace que ISPF modifique una fila de la tabla que seespecifique si la tabla esta indexada, o la fila actual si no lo esta.
El formato de la llamada a este servicio es:
ISPEXEC TBMOD nombre_tabla +[SAVE(lista _campos)] +ORDER
donde
SAVE Permite especificar variables de extensión, es decir camposque no existen para todas las filas y que serán salvadosacompañando a la fila que tenga.
ORDER Este parámetro es aplicable a tablas que han sidoclasificadas previamente.
En el caso de que no exista la clave buscada devuelve como código deretorno 8.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 330/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 330 de 374
TBSARG
Este servicio permite definir los argumentos de búsqueda que seránusados para limitar las filas a procesar mas tarde por los serviciosTBSCAN o por TBDISPL al visualizar datos en un panel visualizador dedatos con la sección )MODEL y ROWS(SCAN).
El formato de la llamada a este servicio es:
ISPEXEC TBSARG nombre_tabla +[ARGLIST(lista)] +[NEXT | PREVIOUS] +[NAMECOND(condiciones)]
donde
lista Permite especificar las variables de extensión sobrelas que se aplicara la búsqueda, junto con los camposde la tabla.
NEXT Estos parámetros especifican que en el momento dePREVIOUS hacer la búsqueda, esta se realice desde la fila
actual hacia atrás (PREVIOUS) o hacia delante (NEXT)desde la fila actual.
condiciones representa pares de valores del tipo :(nombre1,condicion1 nombre2,condicion2 ... )Los valores posibles de condición son:EQ | NE | GE | GT | LT | LEPor defecto asume EQ.
El siguiente ejemplo muestra su uso. Concretamente se trata de laclist encargada de borrar un elemento de la tabla de DSNs especiales.Su función es simple, recibe un nombre de fichero, y debe borrar de latabla de DSNs especiales asociados a un usuario, dicho nombre de latabla que tiene por nombre el nombre del usuario. (no se borrar elfichero, solo el nombre de la tabla de nombres especiales):
/* <<<<<<<<<<<<<<<<<<<<<< JMPZZZ02 >>>>>>>>>>>>>>>>>>>>>>>>>>>> *//* BORRAR UN ELEMENTO DE LA TABLA DE DSN ESPECIALES *//* */
PROC 1 NOMBRE/* */
SET &TEST = TESTNOIF &TEST = TEST THEN CONTROL SYMLIST CONLIST MSG
ELSE CONTROL NOMSG/* ------------------------------------------------------------- *//* */
SET CABECERA = <<< LIBRERIAS PARTICULARES >>>SET &FICHERO= DESJMP.JMP.TABLAS(&SYSUID.)
/* *//* ----- RUTINA DE ERRORES ------------------------------------- *//* */INICIO: +/* */
ISPEXEC CONTROL ERRORS RETURNALLOC FI(ENTRADA) DA('&FICHERO') SHR REUSE
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 331/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 331 de 374
IF &LASTCC ^= 0 THEN FREE DA('&FICHERO')/* */
/* --------------------------- DEFINIR LIBRERIA DE TABLAS OUTPUT *//* */
ISPEXEC LIBDEF ISPTABL DATASET ID('DESJMP.JMP.TABLAS')SET &RC = &LASTCCIF &TEST = TEST THEN WRITE ===> LIBRERIA DE SALIDA : &RC
/* *//* -------------------------------- ABRIR TABLA --------------- *//* */
ISPEXEC TBOPEN &SYSUID WRITESET &RC = &LASTCCIF &TEST = TEST THEN WRITE ===> ABRIR T.ENTRADA : &RC
/* ----- LA TABLA ESTA ABIERTA -----*/IF &RC = 12 THEN +
DOISPEXEC TBCLOSE &SYSUIDSET RC = &LASTCCWRITE ===> CERRAR TABLA DE ENTRADA : &RCFREE DA ('&FICHERO')EXIT
END/* ----- NO EXISTE LA TABLA --------*/
IF &RC = 8 THEN +DO
WRITE NO PUEDO BORRAR PORQUE NO EXISTE LA TABLAEXIT
END/* */
/* -------------------------- PEDIR ENTRADA -------------------- *//* */
IF ( &NOMBRE NE STR() ) THEN +DO
SET ELEMENTO = &NOMBREISPEXEC TBSARG &SYSUID NAMECOND(ELEMENTO,EQ)ISPEXEC TBSCAN &SYSUIDSET A1 = &ELEMENTOSET A2 = &COMENTAISPEXEC TBDELETE &SYSUIDSET &RC = &LASTCCIF &TEST = TEST THEN WRITE ===> TBDELETE : &RCISPEXEC TBSAVE &SYSUIDSET &RC = &LASTCCIF &TEST = TEST THEN WRITE ===> TBSAVE : &RCISPEXEC TBCLOSE &SYSUIDSET &RC = &LASTCCIF &TEST = TEST THEN WRITE ===> TBCLOSE : &RCIF &TEST = TEST THEN WRITE BORRAR : &A1 '-' &A2SET &RC = &LASTCC
ENDISPEXEC TBEND &SYSUIDFREE DA ('&FICHERO.')
/* */EXIT
/* */
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 332/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 332 de 374
En el caso de que no exista la clave buscada devuelve como código deretorno 8.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 333/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 333 de 374
TBSCAN
Este servicio permite realiza la búsqueda en base a los argumentosdefinidos en TBSARG y recupera los datos de los campos de la filaseleccionada.
El formato de la llamada a este servicio es:
ISPEXEC TBSCAN nombre_tabla +[ARGLIST(lista)] +[NEXT | PREVIOUS] +[SAVENAME(variable_1)][NOREAD][POSITION(variable_2)][ROWID(variable_3)]
donde
lista Permite especificar las variables de extensión sobre lasque se aplicara la búsqueda, junto con los campos de latabla.En el caso de que se especifique este parámetro, ISPFignorara los argumentos especificados en TBSARG.
NEXT Estos parámetros especifican que en el momento de hacer laPREVIOUS búsqueda, esta se realice desde la fila actual hacia atrás
(PREVIOUS) o hacia delante (NEXT) desde la fila actual.
SAVENAME este parámetro permite conocer el nombre de las variablesde extensión que se grabaron con TBADD.
NOREAD este parámetro especifica que se posicione en la filabuscada, pero que no lea el contenido de los campos.
POSITION estos parámetros posicionan el cursor en la fila que seROWID especifique.
En el caso de que no exista la clave buscada devuelve como código deretorno 8.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 334/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 334 de 374
TBVCLEAR
Este servicio realiza un reset, (-mueve blancos-), a todas lasvariables que tengan por nombre cualquier nombre de campo de la tablaque se especifica como unico parámetro de este servicio.
El formato de la llamada a este servicio es:
ISPEXEC TBVCLEAR nombre_tabla
Suele usarse este servicio después de escribir una fila en la tabla, afin de que la nueva fila no mantenga valores de la anterior.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 335/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 335 de 374
4.8.4 Servicios para el posicionamiento
Los siguientes servicios simplemente se mencionan ya que su propiadefinición es lo suficientemente explicativa.
TBTOP
Este servicio posiciona el puntero (CSR) en el principio de la tablaque se especifique.
El formato de la llamada a este servicio es:
ISPEXEC TBTOP nombre_tabla
Es de resaltar el hecho de que no se sitúa en la primera fila, sino enel principio de la tabla, que como se puede ver en el ejemplo que seacompaña, son conceptos distintos, pues desde el principio de la tablaal primer elemento hay informacion asociada con la tabla,estadísticas, etc.
Cuando se dice que se posicione en el principio de la tabla, estamosdiciendo que se posicione antes de la primera fila.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>BROWSE -- JMPDES.JMP.TABLAS(JMPINT00) -------------- LINE 000COMMAND ===> =
********************************* TOP OF DATA *****************..TIR:... .{JMPINT00....'d...0........m.?. .n.....JMPDES .....TO...q]a..COMENTA ...q]n.........]..........JMPDES.CLIST..CLISATO..JMPDES.CLIST.COMENTA ..CLIST PRIMARIAS.......q...b.....&.,C..CLIST DE APLICACION PARTICULAR.ELEMENTO..JMPDES.CLIST.MGO.COLPLICACION PARTICULAR.........q...b.....&.,..JMPDES.INT.CLIST..ANTERNACIONAL.ELEMENTO..JMPDES.INT.CLIST.COMENTA ..CLIST DESARRR
El anterior ejemplo se corresponde con un BROWSE de la tabla usadapara contener DSNs asociados a una aplicacion.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 336/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 336 de 374
TBSKIP
Este servicio hace que ISPF se posicione en la siguiente fila de latabla que se especifique, y que recupere los valores de los campos deesa fila.
El formato de la llamada a este servicio es:
ISPEXEC TBSKIP nombre_tabla +[NUMBER(numero)] +[ROW(fila)] +[SAVENAME(variable_1)] +[NOREAD] +[POSITION(variable_2)] +[ROWID(variable_3)]
donde
NUMBER este parámetro indica a ISPF que salte un numerodeterminado de filas, el especificado como NUMERO. Pordefecto entiende NUMBER(+1)
ROW este parámetro permite ir a una fila determinada, aquellacuyo numero se especifica como argumento de este parámetro,y que debe cargarse con anterioridad.
SAVENAME este parámetro permite conocer el nombre de las variablesde extensión que se grabaron con TBADD.
NOREAD este parámetro permite poscionarse en una fila concreta,pero no lee el contenido de los campos.
POSITION estos parámetros posicionan el cursor en la fila que seROWID especifique.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 337/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 337 de 374
TBBOTTOM
Este servicio sitúa el puntero (CSR) en la ultima fila de una tabla yrecupera sus datos.
El formato de la llamada a este servicio es:
ISPEXEC TBBOTTOM nombre_tabla +[SAVENAME(variable_1)] +[NOREAD] +[POSITION(variable_2)] +[ROWID(variable_3)]
donde
SAVENAME este parámetro permite conocer el nombre de las variablesde extensión que se grabaron con TBADD.
NOREAD este parámetro permite posicionarse en la ultima fila, perono lee el contenido de los campos.
POSITION estos parámetros posicionan el cursor en la fila que seROWID especifique.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 338/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 338 de 374
4.8.5 De FILE TAILORING
Se entiende por esqueleto un fichero preformateado con la salida deseada,en el cual se sustituyen los valores variables por el nombre de lasvariables.
Posteriormente, este fichero será procesado para generar la salidadeseada, y será en este proceso, llamado 'FILE TAILORING' en el que sesustituirán las variables por los valores correspondientes.
Como ejemplo se incluye el esqueleto usado para copiar todos los miembrosde una libreria a un fichero secuencial: MGOUTIPS
//XXXXXXPS JOB (123,456),'JMP-PRU-4',CLASS=T,MSGCLASS=X,// NOTIFY=XXXXXX,MSGLEVEL=(1,1)//* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//* TRATAR FICHEROS//* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//PASO1 EXEC PGM=IEBPTPCH//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR//SYSPRINT DD SYSOUT=*//* ----------- FICHERO DE ENTRADA//SYSUT1 DD DSN=&LIBRERIA,DISP=SHR//* ----------- FICHERO DE SALIDA//SYSUT2 DD DSN=&SECUENCI.,DISP=(&DIS.,CATLG,CATLG),// SPACE=(CYL,(1,1),RLSE),UNIT=SYSDA,// DCB=(RECFM=FBA,LRECL=133,BLKSIZE=23408)//* ----------- PARAMETROS -------//SYSIN DD *PRINT TYPORG=PO,MAXFLDS=1
RECORD FIELD=(80)/*
Donde las variables son:&LIBRERIA : Nombre de la libreria&SECUENCI : Nombre del fichero secuencial&DIS : Disposición del fichero
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 339/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 339 de 374
FTOPEN
Este servicio abre el fichero de FILE TAILORING, es decir el ficherode salida que contendrá el resultado del proceso.
El formato de la llamada a este servicio es:
ISPEXEC FTOPEN [TEMP]
/* <<<<<<<<<<<<<<<<<<<<<< MGOUTIPS >>>>>>>>>>>>>>>>>>>>>> *//* ========= BUSCAR UN OBJETO EN DESARROLLO ============== *//* */PROC 0/* *//*-------------------------------------------------------- *//* */
SET &TEST = TESTNOIF &TEST = TEST THEN CONTROL SYMLIST CONLIST MSG
ELSE CONTROL NOMSG/* */
SET ESKELETO = MGOUTIPSSET FICHERO = '&SYSUID..SALIDA.TMP'
/* */ISPEXEC DISPLAY PANEL(MGOUTIPS)IF &LASTCC NE 0 THEN EXIT
/* */FREE FI(TEMPORAL)ALLOCATE FI(TEMPORAL) DA(&FICHERO.) OLD REUSE
/* */ISPEXEC FTOPEN
IF &LASTCC NE 0 THEN GOTO ERROR01/* */
ISPEXEC FTINCL &ESKELETOIF &LASTCC NE 0 THEN GOTO ERROR02
/* */ISPEXEC FTCLOSEIF &LASTCC NE 0 THEN GOTO ERROR03
/* *//* ISPEXEC SETMSG MSG(DDSM120A) */
SUBMIT &FICHEROWRITENR PROCESO SUBMITIDO OK
/* */GOTO EXIT/* -------------------------------------- */
ERROR01: ISPEXEC SETMSG MSG(JMPP001A)GOTO EXIT
ERROR02: ISPEXEC SETMSG MSG(JMPP002A)ISPEXEC FTCLOSEGOTO EXIT
ERROR03: ISPEXEC SETMSG MSG(JMPP003A)EXIT: FREE FI(TEMPORAL)
EXITEND
Asi mismo, para poder completar el ejemplo, se acompaña la definicióndel panel MGOUTIPS
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 340/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 340 de 374
)ATTR DEFAULT(%@!)| TYPE(OUTPUT) INTENS(LOW) CAPS(OFF) JUST(RIGHT) PAD(' ')
{ TYPE(input) iNTENS(high) CAPS(On) just(left) pad('_')} TYPE(TEXT) INTENS(LOW) CAPS(OFF))BODY%JMP-94@---%Copiar todos los miembros de un PDS a un secuencial@---@@@%@ Libreria :{libreria @@ Secuencial :{Secuenci @%@ Disposición del fichero secuencial:{dis@%@@ Esta utilidad%submite@un proceso que copia todos @
@ los miembros de una libreria en el fichero secuen-@ cial que se especifique.@)INIT&libreria = 'tspg'&secuenci = ' '&dis = 'OLD')PROC&Zcmd = '99'if (&libreria = all,'') &Zcmd = 'X'if (&secuenci = all,'') &Zcmd = 'X'VER(&libreria,dsname)VER(&secuenci,dsname)&ZSEL = TRANS(TRUNC(&ZCMD,'.')
99,'CMD(EX ''DESJMP.CLIST.MGO(MGOUTIPS)'' +''&libreria.,&secuenci.'')'
X,'EXIT'' ',' '*,'?' )
)END
Nota: De este panel cabe resaltar el hecho de que al haber sidollamado mediante el servicio DISPLAY no se tendrá en cuenta el valorde la variable del sistema &ZSEL.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 341/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 341 de 374
FTINCL
Este servicio es el que copia el esqueleto en el fichero alocado comofichero de salida, y al tiempo que lo copia, realiza las sustitucionesde las variables por sus valores.
El formato de la llamada a este servicio es:
ISPEXEC FTINCL nombre_esqueleto [NOFT]
donde NOFT especifica, en caso de usarse, que el esqueleto sea copiadotal cual sobre el fichero de salida, es decir, sin realizarsustituciones (NO FileTailoring)
Un ejemplo de su uso puede verse en el servicio FTOPEN
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 342/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 342 de 374
FTCLOSE
Este servicio es el que cierra el fichero de salida.
El formato de la llamada a este servicio es:
ISPEXEC FTCLOSE [NAME(miembro) +[NOREPL] +[LIBRARY(nombre_dd)]
donde
NAME este parámetro especifica el nombre del miembro quecontendrá el fichero de salida en el caso de que la
alocacion del fichero de salida sea una libreria, o ficheroparticionado.
NOREPL este parámetro especifica que no se ejecute el proceso desustitución si existe un miembro con el nombreespecificado.
LIBRARY Este parámetro permite especificar el nombre lógico delfichero de salida, o DDNAME asignado al fichero de salidaen el momento de la alocacion, y que por defecto esISPFILE.
Un ejemplo de su uso puede verse en el servicio FTOPEN
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 343/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 343 de 374
FTERASE
Este servicio suele ser invocado para borrar el fichero de salida unavez que ha cumplido su objetivo.
El formato de la llamada a este servicio es:
ISPEXEC FTERASE miembro +[LIBRARY(nombre_dd)]
donde
miembro este parámetro especifica el nombre del miembro quecontiene el fichero de salida en el caso de que la
alocacion del fichero de salida sea una libreria, o ficheroparticionado.
LIBRARY Este parámetro permite especificar el nombre lógico delfichero de salida, o DDNAME asignado al fichero de salidaen el momento de la alocacion, y que por defecto esISPFILE.
Un ejemplo de su uso puede verse en el servicio FTOPEN
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 344/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 344 de 374
4.8.6 De variables
Los servicios de variable permiten intercambiar los contenidos de lasvariables desde el pool del procedimiento de clist que se esta ejecutandohasta el pool definido a nivel de aplicacion (PROFILE) o el poolcompartido por todas las aplicaciones (SHARED).
Prácticamente los servicios que se van a ver ya se estudiaron comosentencias de las secciones INIT o PROC de la definición del panel, noobstante se mencionaran otros servicios para el manejo de variables, queno van a ser tratados por estar relacionados con el intercambio deinformacion con otras aplicaciones, por lo que se sale del ámbito de estelibro.
Estos servicios son:
VGET Lee el contenido de una variable de un pool
VPUT escribe en un pool el contenido de una variable
VDEFINE Define las variables que se usaran para intercambiode informacion con un modulo de un programa
VDELETE Este servicio hace desaparecer del pool de lafunción las variables especificadas.
VCOPY Este servicio, invocado desde un programa, permiteobtener el contenido de variables del pool de lafunción en el programa.
VREPLACE Este servicio, invocado desde un programa, modificael contenido de las variables especificadas en elpool de la función.
VRESET Este servicio, invocado desde un programa, hacereset de las variables especificadas en el pool dela función.
VERASE Este servicio, parecido a VDELETE, hace desaparecerlas variables especificadas y su contenido, del poolque se especifique (SHARED o PROFILE).
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 345/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 345 de 374
VGET
Este servicio permite leer el contenido de una o varias variablesdesde el pool que se especifique sobre una variable que tenga el mismonombre que la variable del pool en el procedimiento o función.
El formato de la llamada a este servicio es:
ISPEXEC VGET (lista) [ SHARED | PROFILE | ASSIS ]
donde
lista especifica la lista de variables que quieren leerse.En el caso de que solo se desee recuperar el valor de una
variable, puede omitirse los paréntesis.
SHARED este parámetro especifica que los valores de las variablesespecificadas en la lista deben obtenerse del poolcompartido por todas las aplicaciones.
PROFILE este parámetro especifica que los valores de las variablesespecificadas en la lista deben obtenerse del pool definidopara la aplicacion.
ASIS este parámetro especifica que los valores de las variablesespecificadas en la lista deben obtenerse del poolcompartido por todas las aplicaciones (SHARED), y si noexiste, entonces debe leer su valor del pool de aplicacion.
En el caso de que no exista en el pool especificado la variable, elservicio devuelve como código de retorno el valor 8.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 346/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 346 de 374
VPUT
Este servicio permite escribir el contenido de una o variasvariables desde el pool de la función o procedimiento,sobre el pool que se especifique. En el caso de que noexistiera en el pool una variable con el nombreespecificado, la crearía.
El formato de la llamada a este servicio es:
ISPEXEC VPUT (lista) [ SHARED | PROFILE | ASSIS ]
donde
lista especifica la lista de variables que quiere salvarse sobreel pool.En el caso de que solo se desee recuperar el valor de unavariable, puede omitirse los paréntesis.
SHARED este parámetro especifica que los valores de las variablesespecificadas en la lista deben salvarse sobre el poolcompartido por todas las aplicaciones.
PROFILE este parámetro especifica que los valores de las variablesespecificadas en la lista deben grabarse en el pooldefinido para la aplicacion.
ASIS este parámetro especifica que los valores de las variables
especificadas en la lista deben guardarse sobre el poolcompartido por todas las aplicaciones (SHARED), y si noexiste, entonces debe guardar su valor en el pool deaplicacion.En el caso de que exista una variable con el nombre dado,en ambos pools, solo se modificara el contenido del poolcompartido (SHARED).
En el caso de que no exista en la función la variable especificada, elservicio devuelve como código de retorno el valor 8.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 347/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 347 de 374
4.8.7 Definición de librerias
Este servicio es uno de los mas importantes por la trascendencia quetiene ya que es el encargado de definir los nombres lógicos o DD_namesasociados a las librerias físicas.
El formato de la llamada a este servicio es:
ISPEXEC LIBDEF tipo_libreria DATASET ID(lista_dsn) +LIBRARY ID(dd_name) +
donde
tipo_ libreria Puede tomar uno de los siguientes valores:
ISPPLIB : Libreria de módulos cargablesISPPLIB : Libreria de panelesISPMLIB : Libreria de mensajesISPTLIB : Libreria de tablas de entradaISPTABL : Libreria de tablas de salidaISPSLIB : Libreria de esqueletosISPFILE : Libreria de ficheros de salida del File
tailoring.
Lista_dsn La palabra clave DATASET permite asociar una lista dedatasets con el tipo de libreria que se especifique,quedando alocados para la aplicacion los ficheros que sedefinan en esta lista.
LIBRARY la ddname que acompaña como argumento a este parámetroespecifica el nombre de la libreria que se asocia al tipode libreria de ISPF definido con este servicio.
Cuando se usa este parámetro es necesario ejecutar elcomando ALLOC para asignar la libreria a nuestro entornode trabajo.
Como ejemplo de este servicio se acompaña la clist sencilla yautocomentada que cumple con la importantisima misión de alocar lasdistintas librerias necesarias para poder ejecutar las utilidadesdesarrolladas.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 348/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 348 de 374
/* <<<<<<<<<<<<<<<<<<<<<=============>>>>>>>>>>>>>>>>>>>>>>>>>>> *//* <<<<<<<<<<<<<<<<<<<<< CLIST RAIZ >>>>>>>>>>>>>>>>>>>>>>>>>>> */
/* <<<<<<<<<<<<<<<<<<<<<=============>>>>>>>>>>>>>>>>>>>>>>>>>>> */PROC 0*/
/* ----------------------------------------- LIBRERIA DE PANELES *//* */
ISPEXEC LIBDEF ISPPLIB DATASET ID('JMPDES.JMP.PANEL')/* *//* ----------------------------------------LIBRERIAIDEDPROCEDURES *//* */
ISPEXEC LIBDEF ISPTLIB DATASET ID('JMPDES.CLIST')/* *//* --------------------------------------- LIBRERIA DE ESQUELETOS *//* */
ISPEXEC LIBDEF ISPSLIB DATASET ID('JMPDES.CLIST.JCLTIPO')
/* *//* ------------------------------------------- LIBRERIA DE TABLAS *//* */
ISPEXEC LIBDEF ISPSLIB DATASET ID('JMPDES.CLIST.JCLTIPO')/* *//* ---------------------------------------- LLAMADA PANEL INICIAL *//* */
ISPEXEC SELECT PANEL(JMPMENU0)/* */
EXIT
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 349/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 349 de 374
4.8.8 Otros servicios
ISPF dispone de otros muchos servicios, algunos de los cuales se listan acontinuación, con una breve reseña de la función que realizan.
BROWSE Invoca al programa de BROWSE de ISPFCONTROL Especifica parámetros para el control de errores
ADDPOP activa la visualización del identificador del panelREMPOP desactiva la identificación del panel del ángulo superior
izquierdo.
EDIT Invoca al programa de EDIT de ISPFEDREC Recupera una sesión de EDITGETMSG Lee informacion de un mensajeGRxxxxxx Establece el interface con GDDM
ISREDIT Invoca al editor de macros de ISPFLIBDEF Define las librerias ISPF de un dialogoLMxxxxxx Permite hacer uso de la libreria PDF de serviciosLOG Escribe los mensajes en un fichero LOGPQUERY Recupera informacion desde un area de un panel
Para obtener una informacion mas detallada de estos servicios, serecomienda usar la opcion del TUTORIAL de ISPF.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 350/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 350 de 374
4.9 Tutorial
ISPF para poder asesorar al usuario en tiempo de ejecución, permite asociarpaneles solo de texto, es decir, de salida, a la PF que se haya definidocomo de HELP.
Esto se consigue haciendo uso de la variable .HELP del sistema, asignando aesta variable, en la sección )INIT, el nombre del panel que va a servir deHELP cuando se pulse la tecla correspondiente.
Existen otras dos variables asociadas con el tutorial: &ZHTOP y &ZHINDEX,las cuales pueden cargarse con los nombres de los paneles que sirven detabla de contenidos y de índice por páginas respectivamente.
Los paneles de help o tutoriales son iguales a los de datos, con ladiferencia de que solo se usa la variable ZSEL para seleccionar opcion en el
caso de que desde un panel (índice por ejemplo) se puedan elegir distintasopciones.
Otra variable usada en estos paneles es &ZUP establece cual es, a partir deque se le asigne un valor en un panel en la sección )INIT )PROC o )REINIT,el panel anterior o padre del actual.
El comando SKIP o S hace que se salga de la aplicacion de tutorial y seregrese a la aplicacion real, ya que una vez situados en un panel deltutorial, puede navegarse por ellos como si de otra aplicacion se tratara.
El comando ENTER hace que se visualice el siguiente panel y que debecargarse en la variable &ZCONT de la sección )PROC.
El comando BACK o B hace que se retroceda un nivel en la aplicacion detutorial.
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 351/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 351 de 374
4.10 Ejemplos:
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 352/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 352 de 374
4.10.1 Pasar un archivo particionado o PDS a fichero secuencial.
Como ejemplo del uso de esqueletos se incluye el siguiente procedimientousado para copiar todos los miembros de una libreria o ficheroparticionado, a un fichero secuencial:
Clist principal:
/* <<<<<<<<<<<<<<<<<<<<<< INTUTIPS >>>>>>>>>>>>>>>>>>>>>> *//* ================ PASAR PDS A SECUENCIAL =============== *//* */PROC 0
SET &TEST = TESTNOIF &TEST = TEST THEN CONTROL SYMLIST CONLIST MSG
ELSE CONTROL NOMSG/* */
SET ESKELETO = INTUTIPSSET DSN = '&SYSUID..SALIDA.TMP'
/* */ISPEXEC DISPLAY PANEL(INTUTIPS)IF &LASTCC NE 0 THEN EXITIF &LIBRERIA = STR() THEN EXITIF &SECUENCI = STR() THEN EXIT
/* */FREE FI(ISPFILE)ALLOCATE FI(ISPFILE) DA(&DSN.) OLD REUSE
/* */ISPEXEC FTOPENIF &LASTCC NE 0 THEN GOTO ERROR1
/* */
ISPEXEC FTINCL &ESKELETOIF &LASTCC NE 0 THEN GOTO ERROR2
/* */ISPEXEC FTCLOSEIF &LASTCC NE 0 THEN GOTO ERROR3
/* *//* ISPEXEC SETMSG MSG(JMPH004) */
SUBMIT &DSNWRITENR PROCESO SUBMITIDO OK
/* */GOTO EXIT/* -------------------------------------- */
ERROR1: ISPEXEC SETMSG MSG(JMPH001)GOTO EXIT
ERROR2: ISPEXEC SETMSG MSG(JMPH002)ISPEXEC FTCLOSEGOTO EXIT
ERROR3: ISPEXEC SETMSG MSG(JMPH003)EXIT: FREE FI(ISPFILE)
EXITEND
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 353/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 353 de 374
Panel: INTUTIPS
)ATTR DEFAULT(%@!)| TYPE(OUTPUT) INTENS(LOW) CAPS(OFF) JUST(RIGHT) PAD(' '){ TYPE(input) iNTENS(high) CAPS(On) just(left) pad('_')} TYPE(TEXT) INTENS(LOW) CAPS(OFF)
)BODY%JMP-94@--%Copiar todos los miembros de un PDS a un secuencial@---@@@%@ Libreria :{libreria @@ Secuencial :{Secuenci @%@ Disposición del fichero secuencial:{dis@%
@@ Esta utilidad%submite@un proceso que copia todos@ los miembros de una libreria en el fichero secuen-@ cial que se especifique.@@@@@)INIT&libreria = 'tspg'&secuenci = ' '&dis = 'OLD')PROC
VER(&libreria,dsname)VER(&secuenci,dsname))END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 354/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 354 de 374
Esqueleto : INTUTIPS
//XXXXXXPS JOB (123,456),'JMP-PRU-4',CLASS=T,MSGCLASS=X,// NOTIFY=XXXXXX,MSGLEVEL=(1,1)//* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//* TRATAR FICHEROS//* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//PASO1 EXEC PGM=IEBPTPCH//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR//SYSPRINT DD SYSOUT=*//* ----------- FICHERO DE ENTRADA//SYSUT1 DD DSN=&LIBRERIA,DISP=SHR//* ----------- FICHERO DE SALIDA//SYSUT2 DD DSN=&SECUENCI.,DISP=(&DIS.,CATLG,CATLG),// SPACE=(CYL,(1,1),RLSE),UNIT=SYSDA,// DCB=(RECFM=FBA,LRECL=133,BLKSIZE=23408)
//* ----------- PARAMETROS -------//SYSIN DD *PRINT TYPORG=PO,MAXFLDS=1RECORD FIELD=(80)
/*
Donde las variables son:&LIBRERIA : Nombre de la libreria&SECUENCI : Nombre del fichero secuencial&DIS : Disposición del fichero
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 355/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 355 de 374
4.10.2 Listar archivo por impresora:
Panel:
)ATTR DEFAULT(%@!)| TYPE(OUTPUT) INTENS(LOW) CAPS(OFF) JUST(RIGHT) PAD(' '){ TYPE(input) iNTENS(high) CAPS(On) just(left) pad('_')} TYPE(TEXT) INTENS(LOW) CAPS(OFF)
)BODY%JMP-94@-------------------%Imprimir Ficheros@-----------------------@%OPCION ===>!ZCMD@ ---- Margenes ---@ Usuario ....: %&usuario @ Cabecera .. :%!ca@@ Impresora...:%!rm @ Derecha ... :%!de@@ Clase salida:%!Z@ Izquierda.. :%!iz@
@ Formato ....:%!z@ (Vertical/Horizontal) Pie ....... :%!pi@@ Longitud reg:%!lrg@%@ Fichero ....: {fi @%% VerticalHorizontal@@ +------------------+ +----------------------+@ ] cabecera ] ] cabecera ]@ +---+----------+---+ +---+--------------+---+@ ] d ] ] i ] ] d ] ] i ]@ ] d ] ] i ] ] d ] ] i ]@ ] d ] ] i ] +---+--------------+---+
@ ] d ] ] i ] ] pie ]@ +---+----------+---+ +----------------------+@ ] pie ]@ +------------------+)INIT&USUARIO = &Zuser.ZVARS = '(cl , ft )'&rm = 'RMT101'&cl = 'A'&ft = 'V'&ca = 5&de = 30&iz = 10&pi = 5&lrg = 80&fi = &Zuser.cursor = fi.csrpos = 7
)PROCver(&fi,dsname)ver(&ft, NB, list V,H)&Zcmd = '99'if (&fi = all,'') &Zcmd = 'X'&ZSEL = TRANS(TRUNC(&ZCMD,'.')
99,'CMD(EX ''JMPDES.CLIST.MGO(LISTAR)'' +
''&fi.,&ft.,&rm.,&cl.,&ca.,&de.,&iz.,&pi.,&lrg.'')'
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 356/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 356 de 374
X,'EXIT'' ',' '
*,'?' ))END
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 357/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 357 de 374
Clist LISTAR
/* <<<<<<<<<<<<<<<< LISTAR >>>>>>>>>>>>>>>>>>>>>>>>>>> *//* *//* LISTAR FICHERO POR RMT101 EN VERTICAL Y LETRA PEQUE#A *//* */
PROC 9 FICHERO +FORMATO +REMOTO +CLASE +CABECERA +DERECHA +IZQUIERDA +PIE +LRCL
/* */
/*---------------------------------------------------------*//* */
SET &LABEL=LEER/* *//*---------------------------------------------------------*//* */
SET &TEST = TESTNOIF &TEST = TEST THEN CONTROL SYMLIST CONLIST MSG
ELSE CONTROL NOMSG/* *//* --------------------------------------------------------*//* */
IF &LRCL = 0 THEN SET LRCL = 80/* */
/* */ALOCAR: SET &FILEALOC = &SYSUID..JMP.TMP/* *//* ============= ALOCAR Y/O CREAR FICHERO DE SALIDA ==*//* */
IF &SYSDSN('&FILEALOC') ^= OK THEN +DOALLOC FILE(SYSUT2) DATASET('&FILEALOC') +
NEW CATALOG +UNIT(3380) RECFM(F B) LRECL(133) +BLKSIZE(23408) TRACKS SPACE(3 1) REUSE
FREE DA('&FILEALOC')END
/* *//* ---------------------------------- EXAMINAR FORMATO/* */
IF '&FORMATO' = 'V' THEN GOTO VERTICAL/* *//* ========================= PONER HORIZONTAL ============= *//* */
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 358/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 358 de 374
HORIZONTAL: +ALLOC FILE(SYSUT1) DATASET('Jmpdes.JMP.JCL(HORIZONT)')+
SHR REUSEALLOC FILE(SYSUT2) DATASET('&SYSUID..JMP.TMP') OLD REUSEOPENFILE SYSUT1 INPUTOPENFILE SYSUT2 OUTPUTGETFILE SYSUT1SET &SYSUT2 = &SYSUT1PUTFILE SYSUT2CLOSFILE SYSUT1CLOSFILE SYSUT2FREE FILE(SYSUT1 SYSUT2)GOTO SEGUIR
/* *//* ========================= PONER VERTICAL ============== *//* */
VERTICAL: +ALLOC FILE(SYSUT1) DATASET('Jmpdes.JMP.JCL(VERTICAL)') +
SHR REUSEALLOC FILE(SYSUT2) DATASET('&SYSUID..JMP.TMP') +
OLD REUSEOPENFILE SYSUT1 INPUTOPENFILE SYSUT2 OUTPUTGETFILE SYSUT1SET &SYSUT2 = &SYSUT1PUTFILE SYSUT2CLOSFILE SYSUT1CLOSFILE SYSUT2FREE FILE(SYSUT1 SYSUT2)
/* */
/* ========================= ESCRIBIR FORMATO ==============*//* */SEGUIR: +
FREE DA('&SYSUID..JMP.TMP')ALLOC FILE(SALIDA) DATASET('&SYSUID..JMP.TMP') +
MOD REUSEOPENFILE SALIDA OUTPUT
/* *//* ========================= ESCRIBIR FICHERO ============= *//* */
ALLOC F(ENTRADA) REUSE DA('&FICHERO') SHRIF &LASTCC NE 0 THEN DO
WRITE ERROR EN LA ALOCACION DEL FICHERO &FICHEROFREE DA('&FICHERO')EXIT
ENDOPENFILE ENTRADA INPUTSET &RC = 0
/* --------------------------------------------------- */
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 359/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 359 de 374
ERROR DOSET &RC = &LASTCC
IF &RC = 400 THEN +GOTO FINPASO1ELSE +
DOWRITE INESPERADO FIN DE CLIST : RC = &RCWRITE ====================================EXIT
ENDEND
/* -------------------------------------------------- */SET &BLANCOS = &STR( )SET &SALIDA = &STR(&BLANCOS &BLANCOS FICHERO: &FICHERO )PUTFILE SALIDASET &SALIDA = &BLANCOS
PUTFILE SALIDAPUTFILE SALIDA
/* --------------------------------------------------- */LEER: GETFILE ENTRADA
IF &LASTCC NE 400 THEN +DOSET &SALIDA = &STR(&BLANCOS &SUBSTR(1:&LRCL,&ENTRADA))PUTFILE SALIDAGOTO &LABELEND
/* --------------------------------------------------- */FINPASO1: +
CLOSFILE ENTRADACLOSFILE SALIDA
FREE FILE(ENTRADA SALIDA)/* *//* ================ IMPRMIR TEMPORAL ====================== *//* */
ALLOC FILE(SYSUT1) DATASET('&SYSUID..JMP.TMP') SHR REUSEALLOC FILE(SYSUT2) SYSOUT(&CLASE) DEST(&REMOTO) REUSEALLOC FILE(SYSPRINT) DUMMY REUSEALLOC FILE(SYSIN) DUMMY REUSECALL 'SYS1.LINKLIB(IEBGENER)'FREE FILE(SYSUT1 SYSUT2 SYSPRINT SYSIN)WRITE =====>> FICHERO : &FICHERO IMPRESO POR RMT101 < OK >EXIT
/* */
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 360/373
TSO para desarrolladores: ISPF Autor: José M. Peco
Página 360 de 374
Formato:
Los parámetros para poner la impresora en vertical o en horizontal seincluyen como archivos aunque pudieran especificarse directamente comovariables, pero se hace así por claridad. Son los siguientes
Horizontal: DSN=Jmpdes.JMP.JCL(HORIZONT)
1&&??% %Y2,8% %Y3,12% %Y4,1% %Y10,1% %Y5,65% %Y6,133%
Vertical : DSN=Jmpdes.JMP.JCL(VERTICAL)
1&&??% %Y2,8% %Y3,12% %Y4,1% %Y10,0% %Y5,80% %Y6,90%
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 361/373
TSO para desarrolladores: ANEXOS Autor: José M. Peco
Página 361 de 374
ANEXOS
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 362/373
TSO para desarrolladores: ANEXOS Autor: José M. Peco
Página 362 de 374
Anexo 1 : Perfil del Usuario
JMP-94 ---------------- Utilidades Desarrollo Particular ------------------OPCION ===> TSO PROFILE
IKJ56688I CHAR(0) LINE(0) PROMPT INTERCOM NOPAUSE MSGID MODEWTPMSG NORECOVER PREFIX(TEST33) PLANGUAGE(ENU) SLANGUAGE(ENU)IKJ56689I DEFAULT LINE/CHARACTER DELETE CHARACTERS IN EFFECT FOR THIS TERMINAL***
JMP-94 ---------------- Utilidades Desarrollo Particular ------------------OPCION ===> TSO PROFILE prefix(tspg8s)
JMP-94 ---------------- Utilidades Desarrollo Particular ------------------OPCION ===> TSO PROFILE
IKJ56688I CHAR(0) LINE(0) PROMPT INTERCOM NOPAUSE MSGID MODEWTPMSG NORECOVER PREFIX(TEST8S) PLANGUAGE(ENU) SLANGUAGE(ENU)IKJ56689I DEFAULT LINE/CHARACTER DELETE CHARACTERS IN EFFECT FOR THIS TERMINAL***
--------------------- ISPF MASTER APPLICATION MENU ------------------------===> tso ex jmp
USERID - TEST8S1 ISPF/PDF - ISPF/Program Development Facility TIME - 09:42...X EXIT - Terminate ISPF using list/log defaults
Enter END command to terminate ISPF.
IKJ56228I DATA SET JMP.CLIST NOT IN CATALOG OR CATALOG CAN NOT BE ACCESSED***
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 363/373
TSO para desarrolladores: ANEXOS Autor: José M. Peco
Página 363 de 374
<<<<<<<<<< este error se produce por tener en el profile noprefix >>>>>>
--------------------- ISPF MASTER APPLICATION MENU ------------------------===> tso profile
IKJ56688I CHAR(0) LINE(0) PROMPT INTERCOM NOPAUSE MSGID MODEWTPMSG NORECOVER NOPREFIX PLANGUAGE(ENU) SLANGUAGE(ENU)IKJ56689I DEFAULT LINE/CHARACTER DELETE CHARACTERS IN EFFECT FOR THIS TERMINAL***
JMP-94 ---------------- Utilidades Desarrollo Particular ------------------OPCION ===> TSO PROFILE
IKJ56688I CHAR(0) LINE(0) PROMPT INTERCOM NOPAUSE MSGID MODEWTPMSG NORECOVER PREFIX(TEST33) PLANGUAGE(ENU) SLANGUAGE(ENU)IKJ56689I DEFAULT LINE/CHARACTER DELETE CHARACTERS IN EFFECT FOR THIS TERMINAL***
JMP-94 ---------------- Utilidades Desarrollo Particular ------------------OPCION ===> TSO PROFILE prefix(tspg8s)
JMP-94 ---------------- Utilidades Desarrollo Particular ------------------OPCION ===> TSO PROFILETEST33 95/05/05 09:59 PFs:24
IKJ56688I CHAR(0) LINE(0) PROMPT INTERCOM NOPAUSE MSGID MODEWTPMSG NORECOVER PREFIX(TEST8S) PLANGUAGE(ENU) SLANGUAGE(ENU)IKJ56689I DEFAULT LINE/CHARACTER DELETE CHARACTERS IN EFFECT FOR THIS TERMINAL***
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 364/373
TSO para desarrolladores: ANEXOS Autor: José M. Peco
Página 364 de 374
<<<<<<<< otro error que se produce por tener noprefix en el profile es: >>>>>>>>
JMP-94 ----------------- Buscar una palabra en una libreria -----------------OPCION ===>
Cadena a buscar: IKJ_______________Libreria ......: TEST8S.JMP.JCL___________________________
Esta utilidad submite un proceso que se dedica abuscar la cadena especificada entre los miembrosla libreria indicada.
El resultado le deja en la cola de salida con elnombre: TEST33 y el sufijo ST
IKJ56883I DATA SET SUBMIT.D95125.T0094427.CNTL NOT ALLOCATED, REQUEST CANCELEDEDIT
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ya que no puede alocar el fichero que quiere submitir por no estar autorizado.<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 365/373
TSO para desarrolladores: ANEXOS Autor: José M. Peco
Página 365 de 374
Anexo 2 : Códigos de retorno
Los siguientes códigos de retorno corresponden a los codigis devueltos por losservicios que se especifican cuando son invocados mediante la sentenciaISPEXEC:
CONTROL
0 normal4 Se quiere inhibir la facilidad de SPLIT cuando se trabaja en
control. Se ignora el SPLIT DISABLE20 Error grave
DISPLAY
0 Normal
4 Algun mandato en el stack no se puede encontrar8 final por end o Return12 No se encuentra el objeto invocado (panel, mensaje, cursor)16 se ha producido un truncamiento al grabar una variable definia20 Error grave
FTCLOSE
0 Normal4 ya existe el miembro y no se ha indicado NOREPL.
El miembro original se mantiene8 Archivo no abierto (no hay archivo FTOPEN previo)12 Archivo de salida en uso.16 Archivo de esqueletos o de salida no asignados
20 Error grave
FTERASE
0 Normal8 el archivo no existe12 El archivo de salida esta en uso.16 Libreria alternativa de salida no asignada20 Error grave
FTINCL
0 Normal8 el esqueleto no existe12 El esqueleto esta en uso16 La libreria de esqueletos o el archivo de salida no esta
alocado.20 Error grave
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 366/373
TSO para desarrolladores: ANEXOS Autor: José M. Peco
Página 366 de 374
FTOPEN
0 Normal8 el "file tailoring" ya se esta ejecutando.12 La libreria de esqueletos o el archivo de salida no están
alocado.16 El archivo de salida esta en uso.20 Error grave
GETMSG
0 Normal12 no se encuentra el mensaje20 Error grave
LIBDEF
0 Normal4 No existe una biblioteca de ese tipo8 Ya existe una biblioteca de ese tipo (COND)12 Se ha indicado ISPPROF16 no se ha alocado la libreria20 Error grave
SELECT
0 Normal por END4 Normal por RETURN o EXIT12 No se ha encontrado el panel16 Se ha trancado ZCMD o ZSEL
20 Error grave
SETMSG
0 Normal por END4 Se ha ejecutado con COND y hay un SETMSG pendiente12 Mensaje no encontrado20 Error grave
TBADD
0 Normal por END4 Se ha especificado numero de filas y solo se obtiene espacio
para una fila8 Ya existe una fila con esa clave. CRP=012 La tabla esta cerrada16 Error de conversión a numérico (SOlo en tablas clasificadas)20 Error grave
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 367/373
TSO para desarrolladores: ANEXOS Autor: José M. Peco
Página 367 de 374
TBBOTTOM
0 Normal8 La tabla esta vacía. CRP=012 La tabla esta cerrada16 Valor de variable truncado .20 Error grave
TBCLOSE
0 Normal12 La tabla esta cerrada16 La biblioteca alternativa de tablas no esta asignada.20 Error grave
TBCREATE
0 Normal4 Normal. Existe una tabla igual pero se ha indicado REPLACE8 Ya existe una tabla con el nombre dado y no se ha especificado
la opcion REPLACE, o bien, se ha indicado REPLACE pero la dis-posición es SHARE
12 La tabla esta en uso16 Se ha indicado WRITE y no se ha signado una biblioteca alter-
nativa20 Error grave
TBDELETE
0 Normal
8 En tablas con clave: No existe la fila a modificar (CRP=0)En tablas sin clave: el CRP esta en el TOP y ahi sigue.
12 La tabla no esta abierta.20 Error grave
TBEND
0 Normal4 La tabla no esta abierta.20 Error grave
TBERASE
0 Normal8 No existe la tabla en la libreria de salida.12 La tabla esta en uso.16 La libreria de tablas de salida no esta abierta.20 Error grave
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 368/373
TSO para desarrolladores: ANEXOS Autor: José M. Peco
Página 368 de 374
TBEXIST
0 Normal. El CRP se posiciona en la fila indicada.8 En tablas con clave: No existe la fila indicada (CRP=0)En tablas sin clave: No se puede invocar este servicio (CRP=0)
12 La tabla no esta abierta20 Error grave
TBGET
0 Normal.8 En tablas con clave: No existe la fila indicada (CRP=0)
En tablas sin clave: El CRP estaba en el TOP y alli se queda.12 La tabla no esta abierta16 Valor de la variable truncado20 Error grave
TBMOD
0 Normal.En tablas con clave: La fila se ha actualizado (CRP=0)En tablas sin clave: La fila se ha añadido
8 Solo en tablas con clave: La fila se ha añadido12 La tabla no esta abierta16 Error de conversión. Solo en tablas clasificadas.20 Error grave
TBOPEN
0 Normal.
8 La tabla no existe12 Fallo de ENQ: Esta en uso por este u otro usuario16 No esta signada la libreria de tablas de entrada.20 Error grave
TBPUT
0 Normal.8 En tablas con clave: La clave no coincide con la apuntada
por el CRP (el CRP se pone a 0)En tablas sin clave: El CRP esta en el TOP y alli se mantiene.
12 La tabla no esta abierta16 Error de conversión en tablas aplicadas20 Error grave
TBSAVE
0 Normal.12 La tabla no esta abierta16 No esta signada la libreria de salida.20 Error grave
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 369/373
TSO para desarrolladores: ANEXOS Autor: José M. Peco
Página 369 de 374
TBSKIP
0 Normal.8 El salto especificado sobrepasa el numero de filas de la tabla12 La tabla no esta abierta16 Valor de la variable truncado20 Error grave
TBSORT
0 Normal.12 La tabla no esta abierta16 Error de conversión en tablas aplicadas20 Error grave
TBTOP
0 Normal.12 La tabla no esta abierta20 Error grave
TBVCLEAR
0 Normal.12 La tabla no esta abierta20 Error grave
VCOPY
0 Normal.
8 No existe alguna variable16 Valor de la variable truncado20 Error grave
VDEFINE
0 Normal.8 No existe alguna variable16 Valor de la variable truncado20 Error grave
VDELETE
0 Normal.8 No existe alguna variable20 Error grave
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 370/373
TSO para desarrolladores: ANEXOS Autor: José M. Peco
Página 370 de 374
VERASE
0 Normal.8 No existe alguna variable20 Error grave
VGET
0 Normal.8 No existe alguna variable16 Valor de la variable truncado20 Error grave
VPUT
0 Normal.
8 No existe alguna variable16 Valor de la variable truncado al grabar las variables en el
pool profile20 Error grave
VREPLACE
0 Normal.16 Valor de la variable truncado.20 Error grave
VRESET
0 Normal.
20 Error grave
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 371/373
TSO para desarrolladores: ANEXOS Autor: José M. Peco
Página 371 de 374
Anexo 3 : Variables del sistema en ISPF
Este anexo especifica los nombres de variables del sistema que pueden serusados en ISPF, con indicación del pool al que pertenecen, formato ydescripción.
FECHA Y HORA ************
-------- ---- ---- ---- ---------------------------------------------NOMBRE POOL TIPO LONG DESCRIPCION-------- ---- ---- ---- ---------------------------------------------ZDATE Shr NM 8 Fecha actualZDATEF Shr NM 8 Fecha actual con delimimtador dependiendo del
idioma (DD/MM/YY,YY/MM/DD,MM.DD.YY,...)ZDATEFD Shr NM 8 Fecha actual como en ZDATEF pero con los
caracteres que se especifiquenZDAY Shr NM 2 Día del mesZJDATE Shr NM 6 Fecha Juliana en formato (YY.DDD)ZMONTH Shr NM 2 Mes del añoZtime Shr NM 5 Hora en formato (hh:mm)Zyear Shr NM 2 Año-------- ---- ---- ---- ---------------------------------------------
GENERAL*******
-------- ---- ---- ---- ---------------------------------------------Z Shr NM 0 Variable nulaZapplid Shr NM 8 Identificador de la aplicacionZenvir Shr NM 32 Descripción del entorno :
de 1:08 Nombre producto, versión y release9:16 Sistema operativo17:24 Entorno de operación (TSO o BATCH)25:32 Reservado
Zispfrc Shr I 8 Código de retorno de ISPSTARTZlang Pro nm 8 IdiomaZlogon Shr nm 8 Procedimiento de LogonZplace pro I/O 7 Posición de la línea de comando (ASSIS/BOTTOM)Zprefix Shr nm 8 Prefijo TSOZprofapp pro I 8 Nombre de la tabla extensión del profile poolZtempf Shr nm 44 Nombre del archivo temporal usado para el
proceso de file tailoring
Ztempn Shr nm 8 DDname del archivo temporal usado en el procesode file tailoring.Zuser Shr nm 8 Identificacion del usuarioZsysid Shr nm 4 Identificacion del entorno-------- ---- ---- ---- ---------------------------------------------
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 372/373
TSO para desarrolladores: ANEXOS Autor: José M. Peco
Página 372 de 374
TERMINAL Y TECLAS DE FUNCION ****************************
-------- ---- ---- ---- ---------------------------------------------NOMBRE POOL TIPO LONG DESCRIPCION-------- ---- ---- ---- ---------------------------------------------ZCOLORS Shr no m 4 Numero de colores soportados por el terminalZFKA Shr no m 3 Formato del area de visualización de PFs
(Long,Short,no)ZHILITE Shr no m 3 especificación de si el terminal soporta brillo
(YES,NO)ZKEYS Prof S 4 Numero de teclas PFZPFCTL Prof E/S 5 Autorizacion al mandato PFSHOWZPFFMT Prof E/S 4 Numero de PFs visualizadas por líneaZPFSET Prof E/S 4 PFs visualizadasZPFSHOW Prof E/S 8 Estado del parámetro PFSHOW
ZPFxx Prof E/S 255 Valor asignado a la PF de numero xxZPF13-ZPF24 : primariasZPF01-ZPF12 : alternativas
ZPFLxx Prof E/S 8 Valor asignado a las etiquetas de la PF xx.ZPFL13-ZPFL24 : primariasZPFL01-ZPFL12 : alternativas
ZPRIKEYS Prof E/S 4 especifica el conjunto de PFs que será tratadocomo conjunto primario.LOW especifica el conjunto 01 A 12UPP especifica el conjunto 13 a 24
ZSCREEN Shr no m 1 Numero de pantalla lógica (rango: 1-4)ZSCREEND Shr no m 4 Numero de líneas de la pantalla disponiblesZSCREENW Shr no m 4 Numero de columnas de la pantalla disponiblesZSCRMAXD Shr no m 4 Numero máximo de líneas por pantalla
ZSCRMAXW Shr no m 4 Numero máximo de columnas de la pantallaZSPLIT Shr no m 4 Pantalla partida (YES,NO)ZTERM Shr no m 4 Tipo de terminal
definido en PROFILE de ISPF (opcion 0)-------- ---- ---- ---- ---------------------------------------------
ARCHIVOS LOG Y LIST*******************
-------- ---- ---- ---- ---------------------------------------------NOMBRE POOL TIPO LONG DESCRIPCION-------- ---- ---- ---- ---------------------------------------------ZLOGNAME Shr no m 44 Nombre del archivo de log
ZLSTNAME Shr no m 44 Nombre del archivo de list-------- ---- ---- ---- ---------------------------------------------
7/16/2019 Tso Para Desarrolladores Nr 33933
http://slidepdf.com/reader/full/tso-para-desarrolladores-nr-33933-5634fab2742da 373/373
TSO para desarrolladores: ANEXOS Autor: José M. Peco
DESPLAZAMIENTO DE PANTALLAS***************************
-------- ---- ---- ---- ---------------------------------------------NOMBRE POOL TIPO LONG DESCRIPCION-------- ---- ---- ---- ---------------------------------------------ZSCBR Prof E/S 4 Desplazamiento en BROWSEZSCED Prof E/S 4 Desplazamiento en EDITZSCML Prof E/S 4 Desplazamiento en listas de miembrosZSCROLLA Shr S 4 Valor del despalzamiento (PAGE,MAX,numero)ZSCROLLN Shr S 4 Numero calculado dependiendo de ZSCROLLAZSCROLLD Shr S 4 Valor por omisión utilizado en visualización
de tablas y areas dinamicas.-------- ---- ---- ---- ---------------------------------------------
Mandato PRINTG
**************
-------- ---- ---- ---- ---------------------------------------------NOMBRE POOL TIPO LONG DESCRIPCION-------- ---- ---- ---- ---------------------------------------------ZFAMPRT Func no m 4 Tipo de impresora para PRINTGZDEVNAM Func E 8 Nombre del dispositivo para PRINTGZASPECT Func E 4-------- ---- ---- ---- ---------------------------------------------
Servicio LIST*************
-------- ---- ---- ---- ---------------------------------------------NOMBRE POOL TIPO LONG DESCRIPCION-------- ---- ---- ---- ---------------------------------------------ZLSTLPP Shr no m 4 Numero de líneas por página en archivo listZLSTNUML Shr no m 4 Numero de líneas impresas en la página actualZLSTTRUN Shr no m 4 Longitud del registro-------- ---- ---- ---- ---------------------------------------------
Errores*******
-------- ---- ---- ---- ---------------------------------------------NOMBRE POOL TIPO LONG DESCRIPCION-------- ---- ---- ---- ---------------------------------------------
ZERRHM Func S 8 Nombre del panel de ayuda asociado al mensajeZERRMSG Func S 8 Identificador del mensajeZERRSM Func S 24 Texto del mensaje cortoZERRLM Func S 78 Texto del mensaje largoZERRALRM Func S 3 Indicador de alarma (YES o NO)-------- ---- ---- ---- ---------------------------------------------