Vous êtes sur la page 1sur 596

AS/400 Advanced Series

IBM

ILE COBOL/400
Gua del Programador
Versin 3 Release 7

SC10-9658-01

AS/400 Advanced Series

IBM

ILE COBOL/400
Gua del Programador
Versin 3 Release 7

SC10-9658-01

Atencin!
Antes de utilizar esta informacin y el producto al que da soporte, lea la informacin general que se incluye en el
apartado Avisos en la pgina xix.

Segunda edicin (Noviembre 1996)


Este manual es la traduccin del original en ingls AS/400 Advanced Series ILE COBOL/400 Programmer's Guide, SC09-2072-01.
Esta edicin slo es aplicable a la Versin 3, Release 7, Nivel de Modificacin 0 de IBM Application System/400 ILE COBOL/400
(Nmero de Programa 5716-CB1) y a todos los releases y modificaciones posteriores hasta que se indique lo contrario en las ediciones nuevas. Asegrese de que utiliza la edicin adecuada para el nivel del producto.
Las modificaciones o adiciones al texto y a las ilustraciones se indican mediante una lnea vertical situada a la izquierda de la
modificacin o adicin.
Efecte el pedido de publicaciones a su representante de ventas IBM o a la sucursal de IBM que preste servicio a su localidad. En
la direccin que figura ms abajo no hay existencias de las publicaciones.
Al final de la publicacin se adjunta una hoja para comentarios del cliente. Si este formulario ha sido extrado, puede enviar sus
comentarios a:
IBM, S.A.
National Language Solutions Center
Avda. Diagonal, 571
08029 Barcelona
Espaa
o puede enviar sus comentarios por fax o por correo electrnico.
Cuando se enva informacin a IBM, se otorga a IBM un derecho no exclusivo para utilizar o distribuir la informacin en la forma
que crea ms adecuada sin incurrir por ello en ninguna obligacin para con el remitente.
Copyright International Business Machines Corporation 1994, 1996. Reservados todos los derechos.

Contenido
Avisos . . . . . . . . . . . . . . . . . . . . . . .
Informacin sobre la interfaz de programacin
Marcas registradas y marcas de servicio . . .
Reconocimiento . . . . . . . . . . . . . . . . . .
|
|

. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .

Acerca de la publicacin ILE COBOL/400 Gua del programador,


SC10-9658 (SC09-2072) . . . . . . . . . . . . . . . . . . . . . . . . . .
A quin va dirigido este manual . . . . . . . . . . . . . . . . . . . . . .
Normativa para la industria . . . . . . . . . . . . . . . . . . . . . . . . .
Reconocimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Notacin de la sintaxis de ILE COBOL/400 . . . . . . . . . . . . . . . .
Lectura de diagramas de sintaxis . . . . . . . . . . . . . . . . . . . .
Identificacin de sintaxis de documentacin . . . . . . . . . . . . . .
Interpretacin de cdigos de entrada de lenguaje de control (CL) de
AS/400 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

xix
xix
xx
xx

. . . .

xxi
xxi
xxii
xxiii
xxiv
xxv
xxvi

. . . .

xxvi

. . . . .
. . . . .
. . . . .
. . . .
. . . .
. . . . .

Captulo 1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Entorno de Lenguajes Integrados . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
ILE COBOL/400
Pasos principales para crear un objeto de programa ILE COBOL/400 ejecutable 8
Diseo del programa fuente ILE COBOL/400 del usuario . . . . . . . . . . . . 9
Entrada de instrucciones fuente en un miembro fuente . . . . . . . . . . . . 11
Compilacin de un programa fuente en objetos de mdulo . . . . . . . . . . 11
Creacin de un objeto de programa . . . . . . . . . . . . . . . . . . . . . . . 11
Ejecucin de un objeto de programa . . . . . . . . . . . . . . . . . . . . . . . 12
Depuracin de un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Otras herramientas para el desarrollo de aplicaciones . . . . . . . . . . . . . . 12

Compilacin, ejecucin y depuracin de programas ILE COBOL/400

. . . . . . . .

15

|
|
|
|
|
|
|
|
|
|
|
|
|

Captulo 2. Entrada de instrucciones fuente en un miembro fuente


. . .
Creacin de una biblioteca y de un archivo fsico fuente . . . . . . . . . . . . .
Entrada de instrucciones fuente utilizando el Programa de Utilidad para Entrada
del Fuente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Formato de archivo fuente COBOL . . . . . . . . . . . . . . . . . . . . . . . .
Arranque de SEU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizacin del corrector sintctico COBOL en SEU
. . . . . . . . . . . . . .
Ejemplo de entrada de instrucciones fuente en un miembro fuente . . . . . . .
Utilizacin de identificadores del juego de caracteres codificados . . . . . . . .
Asignacin de un CCSID a un archivo fsico fuente . . . . . . . . . . . . . .
Inclusin de miembros de copia con CCSID diferentes en el archivo fuente
Definicin del CCSID para el corrector sintctico COBOL en el SEU . . . .
Manipulacin de CCSID diferentes con el depurador fuente ILE . . . . . . .

17
17
18
18
19
19
22
23
24
24
25
25

|
|
|
|
|

Captulo 3. Compilacin de programas fuente en objetos de mdulo


Definicin de un objeto de mdulo . . . . . . . . . . . . . . . . . . . . . . .
Utilizacin del mandato Crear mdulo COBOL (CRTCBLMOD)
. . . . .
Utilizacin de pantallas de solicitud con el mandato CRTCBLMOD . .
Sintaxis del mandato CRTCBLMOD . . . . . . . . . . . . . . . . . . . .

27
27
30
31
32

Copyright IBM Corp. 1994, 1996

. .
. . .
. . .
. . .
. . .

iii

Parmetros del mandato CRTCBLMOD . . . . . . . . . . . . . . . . . . . . .


Ejemplo de compilacin de un programa fuente en un objeto de mdulo . . .
Especificacin de un release destino diferente . . . . . . . . . . . . . . . . . . .
Especificacin de la secuencia de ordenacin de idioma en CRTCBLMOD . .
Utilizacin de la instruccin PROCESS para especificar opciones de compilador
Comprensin de la salida del compilador . . . . . . . . . . . . . . . . . . . . . .
Especificacin del formato del listado
. . . . . . . . . . . . . . . . . . . . . .
Examen del listado del compilador utilizando el SEU
. . . . . . . . . . . . .
Programa de ejemplo y listados . . . . . . . . . . . . . . . . . . . . . . . . . .

33
45
45
46
47
53
54
55
56

Captulo 4. Creacin de un objeto de programa . . . . . . . . . . . . . . .


Definicin de un objeto de programa
. . . . . . . . . . . . . . . . . . . . . . .
El proceso de enlace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizacin del mandato Crear programa (CRTPGM) . . . . . . . . . . . . . .
Ejemplo de enlace de varios mdulos para crear un objeto de programa . .
Utilizacin del mandato Crear COBOL enlazado (CRTBNDCBL) . . . . . . .
Utilizacin de pantallas de solicitud con el mandato CRTBNDCBL
. . . .
Sintaxis del mandato CRTBNDCBL . . . . . . . . . . . . . . . . . . . . . . .
Parmetros del mandato CRTBNDCBL . . . . . . . . . . . . . . . . . . . .
Invocacin a CRTPGM de forma implcita desde CRTBNDCBL . . . . . .
Ejemplo de enlace de un objeto de mdulo para crear un objeto de programa
Especificacin de la secuencia de ordenacin de idioma en CRTBNDCBL .
Lectura de un listado del enlazador . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de un listado del enlazador . . . . . . . . . . . . . . . . . . . . . .
Modificacin de un objeto de mdulo y enlace del objeto de programa de
nuevo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Modificacin del programa fuente ILE COBOL/400 . . . . . . . . . . . . . .
Modificacin de los niveles de optimizacin . . . . . . . . . . . . . . . . . .
Eliminacin de observabilidad de mdulo . . . . . . . . . . . . . . . . . . . . .
Habilitacin de recogida de rendimiento . . . . . . . . . . . . . . . . . . . . . .
Niveles de recogida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Procedimientos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

71
71
71
73
76
76
76
77
78
81
82
83
83
84

Captulo 5. Creacin de un programa de servicio . . . . . . . . . . . . .


Definicin de un programa de servicio
. . . . . . . . . . . . . . . . . . . . .
Utilizacin de programas de servicio . . . . . . . . . . . . . . . . . . . . . . .
Escritura de mandatos del lenguaje enlazador para un programa de servicio
ILE COBOL/400 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizacin del mandato Crear programa de servicio (CRTSRVPGM) . . . .
Ejemplo de creacin de un programa de servicio . . . . . . . . . . . . . . .
Llamada a procedimientos ILE exportados en programas de servicio
. . .
Compartimiento de datos con programas de servicio . . . . . . . . . . . . .
Cancelacin de un programa ILE COBOL/400 en un programa de servicio

.
.
.
.
.
.
.
.
.

Captulo 6. Ejecucin de un programa ILE COBOL/400 . . . . . . . . . .


Ejecucin de un programa COBOL utilizando el mandato CALL de CL
. . .
Cmo pasar parmetros a un programa ILE COBOL/400 mediante el
mandato CALL de CL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejecucin de un programa ILE COBOL/400 utilizando la instruccin CALL de
HLL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejecucin de un programa ILE COBOL/400 desde una aplicacin dirigida por
mens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejecucin de un programa ILE COBOL/400 utilizando un mandato creado por
el usuario
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

iv

ILE COBOL/400 Gua del Programador

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

91
92
92
97
99
99
99
101
101
101
102
102
103
104
105
105
107
107
107
108
109
110

Finalizacin de un programa ILE COBOL/400 . . . . . .


Respuesta a mensajes de consulta durante la ejecucin

|
|
|
|
|
|

. . . . . . . . . . . .

Captulo 7. Depuracin de un programa


. . . . . . . . . . . . . . . . . . .
El depurador fuente ILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mandatos de depuracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Preparacin de un objeto de programa para una sesin de depuracin . . .
Utilizacin de una vista de listado . . . . . . . . . . . . . . . . . . . . . . . .
Utilizacin de una vista fuente . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizacin de una vista de instruccin . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
Arranque del depurador fuente ILE
Establecimiento de opciones de depuracin . . . . . . . . . . . . . . . . . . .
Ejecucin de un objeto de programa en una sesin de depuracin . . . . . .
Adicin de objetos de programa y programas de servicio a una sesin de
depuracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eliminacin de objetos de programa o programas de servicio de una sesin
de depuracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Visualizacin del fuente del programa . . . . . . . . . . . . . . . . . . . . . . .
Modificacin del objeto de mdulo que aparece . . . . . . . . . . . . . . .
Modificacin de la vista del objeto de mdulo que se muestra . . . . . . .
Establecimiento y eliminacin de puntos de interrupcin . . . . . . . . . . . .
Establecimiento y eliminacin de puntos de interrupcin incondicionales .
Establecimiento y eliminacin de puntos de interrupcin condicionales . .
Eliminacin de todos los puntos de interrupcin . . . . . . . . . . . . . . .
Establecimiento y eliminacin de condiciones de observacin . . . . . . . . .
Caractersticas de las observaciones . . . . . . . . . . . . . . . . . . . . . .
Establecimiento de condiciones de observacin . . . . . . . . . . . . . . .
Visualizacin de observaciones activas . . . . . . . . . . . . . . . . . . . .
Eliminacin de las condiciones de observacin . . . . . . . . . . . . . . . .
Ejemplo del establecimiento de una condicin de observacin
. . . . . . . .
Ejecucin de un objeto de programa o procedimiento ILE despus de un
punto de interrupcin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .
Reanudacin de un objeto de programa o procedimiento ILE
Ejecucin por pasos del objeto de programa o procedimiento ILE . . . . .
Visualizacin de variables, expresiones, registros, elementos de grupo y
matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Visualizacin de variables y expresiones
. . . . . . . . . . . . . . . . . . .
Visualizacin de registros, elementos de grupo y matrices . . . . . . . . .
Modificacin del valor de las variables
. . . . . . . . . . . . . . . . . . . . . .
Equivalencia entre un nombre y una variable, expresin o mandato . . . . .
Soporte de idioma para el depurador fuente ILE . . . . . . . . . . . . . . . . .

ILE COBOL/400 Consideraciones sobre la programacin


|
|
|
|
|
|
|
|
|

. . . . . . . . . . . .

110
111
113
114
114
116
116
117
118
118
120
121
121
123
124
124
125
126
127
128
130
130
131
132
134
135
136
137
137
138
140
141
144
146
148
148

. . . . . . . . . . . . . . . .

151

Captulo 8. Trabajo con elementos de datos . . . . . . . . . . . . . . . . .


Visualizacin general de los nmeros en ILE COBOL/400 (clusula PICTURE)
Definicin de elementos numricos . . . . . . . . . . . . . . . . . . . . . . .
Posicin de signo separada (para mejorar la portabilidad)
. . . . . . . . .
Posiciones adicionales para smbolos visualizables (edicin numrica) . .
Representacin computacional de datos (clusula USAGE) . . . . . . . . . .
Elementos decimales externos (USAGE DISPLAY) . . . . . . . . . . . . .
Elementos decimales internos (USAGE PACKED-DECIMAL o COMP-3) .
Elementos binarios (USAGE BINARY o COMP-4) . . . . . . . . . . . . . .

153
153
153
154
154
155
155
156
156

Contenido

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Elementos de coma flotante interno (USAGE COMP-1 y COMP-2)


Elementos de coma flotante externos (USAGE DISPLAY)
. . . .
Conversiones de formato de datos . . . . . . . . . . . . . . . . . . . .
Significado de una conversin . . . . . . . . . . . . . . . . . . . . .
Una conversin requiere su tiempo . . . . . . . . . . . . . . . . . .
Conversiones y precisin . . . . . . . . . . . . . . . . . . . . . . . .
Representacin y proceso del signo . . . . . . . . . . . . . . . . . . .
Con la opcin *CHGPOSSN del compilador . . . . . . . . . . . . .
Comprobacin de datos incompatibles (prueba de clase numrica) .
Cmo realizar una prueba de clase numrica . . . . . . . . . . . .
Realizacin de operaciones aritmticas . . . . . . . . . . . . . . . . .
COMPUTE y otras instrucciones aritmticas
. . . . . . . . . . . .
Expresiones aritmticas
. . . . . . . . . . . . . . . . . . . . . . . .
Funciones numricas intrnsecas . . . . . . . . . . . . . . . . . . .
Conversin de elementos de datos (funciones intrnsecas) . . . .
Aritmtica de coma fija frente a aritmtica de coma flotante . . . . .
Evaluaciones de coma flotante . . . . . . . . . . . . . . . . . . . .
Evaluaciones de coma fija . . . . . . . . . . . . . . . . . . . . . . .
Comparaciones aritmticas (condiciones de relacin) . . . . . . .
Ejemplos de evaluaciones de coma fija y de coma flotante . . . .
Proceso de elementos de tablas . . . . . . . . . . . . . . . . . . .
Cul es el problema con el ao 2000?
. . . . . . . . . . . . . . . .
Solucin a largo plazo . . . . . . . . . . . . . . . . . . . . . . . . .
Solucin a corto plazo . . . . . . . . . . . . . . . . . . . . . . . . .

. . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .

Captulo 9. Llamada y compartimiento de datos entre programas ILE


COBOL/400 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Conceptos de ejecucin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Activacin y grupos de activacin . . . . . . . . . . . . . . . . . . . . . . . .
Unidad de ejecucin COBOL . . . . . . . . . . . . . . . . . . . . . . . . . .
Lmites de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programas principales y subprogramas . . . . . . . . . . . . . . . . . . . .
Inicializacin del almacenamiento . . . . . . . . . . . . . . . . . . . . . . . .
Transferencia de control a otro programa . . . . . . . . . . . . . . . . . . . . .
Llamada a un programa ILE COBOL/400 . . . . . . . . . . . . . . . . . . . . .
Identificacin del tipo de enlace de programas y procedimientos llamados
Llamada a programas anidados . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizacin de llamadas estticas de procedimiento y llamadas dinmicas de
programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizacin de CALL identificador . . . . . . . . . . . . . . . . . . . . . . . .
Utilizacin de CALL puntero de procedimiento . . . . . . . . . . . . . . . .
Devolucin del control desde un programa ILE COBOL/400 . . . . . . . . . .
Devolucin del control desde un programa principal . . . . . . . . . . . . .
Devolucin del control desde un subprograma . . . . . . . . . . . . . . . .
Mantenimiento de la semntica de STOP RUN definida por la unidad de
ejecucin OPM COBOL/400 . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplos de devolucin de control desde un programa ILE COBOL/400 .
Transferencia de informacin sobre cdigos de devolucin de control
(registro especial RETURN-CODE) . . . . . . . . . . . . . . . . . . . . . .
Transferencia y compartimiento de datos entre programas . . . . . . . . . . .
Comparacin de datos locales y globales . . . . . . . . . . . . . . . . . . .
Transferencia de datos utilizando CALL...BY REFERENCE, BY VALUE o
BY CONTENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compartimento de datos EXTERNAL
. . . . . . . . . . . . . . . . . . . . .

vi

ILE COBOL/400 Gua del Programador

157
157
158
158
158
158
159
160
160
160
161
161
162
162
165
169
169
170
170
171
171
171
172
172

175
175
175
176
177
178
178
178
179
180
182
186
189
190
191
191
192
192
193
198
198
198
199
203

Compartimento de archivos EXTERNAL . . . . . . . . . . . . . . . . . . .


Transferencia de datos utilizando punteros . . . . . . . . . . . . . . . . .
Transferencia de datos utilizando reas de datos
. . . . . . . . . . . . .
Efecto de EXIT PROGRAM, STOP RUN, GOBACK y CANCEL en archivos
internos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Cancelacin de un programa ILE COBOL/400 . . . . . . . . . . . . . . . . .
Cancelacin desde otro programa ILE COBOL/400 . . . . . . . . . . . .
Cancelacin desde otro lenguaje . . . . . . . . . . . . . . . . . . . . . . .
Captulo 10. Llamada de datos y compartimento de datos con otros
lenguajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Llamada a programas y procedimientos ILE C/400 y VisualAge C++ para
OS/400 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transferencia de datos a un programa o procedimiento ILE C/400 . . .
Compartir datos externos con un programa o procedimiento ILE C/400 .
Devolucin del control desde un programa o procedimiento ILE C/400 .
Llamada a programas y procedimientos ILE RPG/400 . . . . . . . . . . . .
Transferencia de datos a un programa o procedimiento ILE RPG/400
.
Devolucin del control desde un programa o procedimiento ILE RPG/400
Llamada a programas y procedimientos ILE CL . . . . . . . . . . . . . . . .
Transferencia de datos a un programa o procedimiento ILE CL . . . . .
Devolucin del control desde un programa o procedimiento ILE CL . . .
Llamada a lenguajes OPM . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
Llamada a programas OPM COBOL/400
Llamada a lenguajes EPM
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Emitir un mandato CL desde un programa ILE COBOL/400 . . . . . . . . .
Inclusin de sentencias SQL (Lenguaje de Consulta Estructurada) en el
programa ILE COBOL/400 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Llamada a un API ILE para recuperar el siglo actual . . . . . . . . . . . . .

Captulo 11. Utilizacin de punteros en un programa ILE COBOL/400


Definicin de punteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Alineacin de puntero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Escritura de la File Section y de la Working Storage Section para la
alineacin del puntero . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Redefinicin de punteros . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Inicializacin de punteros utilizando la constante figurativa NULL . . . . .
Lectura y grabacin de punteros . . . . . . . . . . . . . . . . . . . . . . . .
Utilizacin del registro especial LENGTH OF con punteros
. . . . . . . .
Establecimiento de la direccin de elementos de la Linkage Section . . .
Utilizacin de ADDRESS OF y del registro especial ADDRESS OF . .
Utilizacin de punteros en una instruccin MOVE . . . . . . . . . . . . . .
Utilizacin de punteros en una instruccin CALL
. . . . . . . . . . . . . .
Ajuste del valor de los punteros . . . . . . . . . . . . . . . . . . . . . . . .
Acceso a espacios de usuario utilizando punteros y API . . . . . . . . . .
Proceso de una lista encadenada utilizando punteros . . . . . . . . . . . .
Transferencia de punteros entre programas y procedimientos . . . . .
Comprobacin del final de la lista encadenada . . . . . . . . . . . . . .
Proceso del registro siguiente . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .
Aumento de las direcciones recibidas desde otro programa
Transferencia de las direcciones de punto de entrada con punteros de
procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Captulo 12. Manejo de errores y excepciones ILE COBOL/400

.
.
.

204
211
211

214
215
215
216

217

218
219
222
222
223
224
227
227
228
229
230
230
231
233

.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

. .
. .

233
234
235
235
236

. .

237
238
239
239
240
240
241
241
243
243
245
255
257
258
259
259

. .

260

. . . . .

261

. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .

Contenido

vii

Manejo de condiciones ILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Finalizacin de un programa ILE COBOL/400 . . . . . . . . . . . . . . . . . .
Utilizacin de Interfaces de programacin de aplicaciones (API) de enlace de
manejo de errores
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Inicializacin de vuelcos intencionados . . . . . . . . . . . . . . . . . . . . . .
Manejo de errores en operaciones de serie
. . . . . . . . . . . . . . . . . . .
Manejo de errores en operaciones aritmticas . . . . . . . . . . . . . . . . . .
La expresin ON SIZE ERROR . . . . . . . . . . . . . . . . . . . . . . . . .
Manejo de errores en clculos de coma flotante . . . . . . . . . . . . . . .
Manejo de errores en operaciones de entrada-salida . . . . . . . . . . . . . .
Proceso de verbos de entrada-salida . . . . . . . . . . . . . . . . . . . . . .
Deteccin de condiciones de fin de archivo (expresin AT END)
. . . . .
Deteccin de condiciones de clave no vlida (expresin INVALID KEY) .
Utilizacin de procedimientos declarativos EXCEPTION/ERROR
(Instruccin USE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Determinacin del tipo de error mediante la clave de estado de archivo .
Cmo se establece el estado del archivo . . . . . . . . . . . . . . . . . . .
Manejo de errores en operaciones de Ordenar/Fusionar . . . . . . . . . . . .
Manejo de excepciones en la instruccin CALL . . . . . . . . . . . . . . . . .
Rutinas de manejo de errores escritas por el usuario . . . . . . . . . . . . . .
Excepciones comunes y algunas de sus causas . . . . . . . . . . . . . . . . .
Recuperacin despus de una anomala . . . . . . . . . . . . . . . . . . . . .
Recuperacin de archivos con control de compromiso
. . . . . . . . . . .
Recuperacin de archivos TRANSACTION . . . . . . . . . . . . . . . . . .

Consideraciones sobre entrada y salida en ILE COBOL/400

viii

261
263
264
265
266
267
267
268
269
270
271
272
273
274
276
278
279
279
280
281
281
282

. . . . . . . . . . . . . .

289

Captulo 13. Definicin de archivos . . . . . . . . . . . . . . . . . . . . . .


Tipos de descripciones de archivos . . . . . . . . . . . . . . . . . . . . . . . .
Definicin de archivos descritos por el programa . . . . . . . . . . . . . . . .
Definicin de archivos descritos externamente . . . . . . . . . . . . . . . . . .
Descripcin de archivos utilizando especificaciones de descripcin de datos
(DDS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

291
291
292
292

Captulo 14. Proceso de archivos . . . . . . . . . . . . . . . . . . . . . . . .


Asociacin de archivos con dispositivos de entrada-salida . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
Especificacin de spooling de entrada y salida
Spooling de entrada
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Spooling de salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Alteracin temporal de atributos de archivos . . . . . . . . . . . . . . . . . . .
Redireccin de entrada y salida de archivos . . . . . . . . . . . . . . . . . . .
Bloqueo y liberacin de archivos . . . . . . . . . . . . . . . . . . . . . . . . . .
Bloqueo y liberacin de registros . . . . . . . . . . . . . . . . . . . . . . . .
Compartimiento de una va de acceso de datos abierta para acceder a un
archivo
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Desbloqueo de registros de entrada y bloqueo de registros de salida . . . .
Utilizacin del estado de archivo y de reas de realimentacin . . . . . . . .
FILE STATUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
rea OPEN-FEEDBACK . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
rea I-O-FEEDBACK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizacin del control de compromiso . . . . . . . . . . . . . . . . . . . . . . .
mbito de control de compromiso
. . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de utilizacin de control de compromiso . . . . . . . . . . . . . . .

301
301
303
303
304
304
305
306
306

ILE COBOL/400 Gua del Programador

293

307
308
309
309
309
310
310
314
315

Clasificacin y fusin de archivos . . . . . . . . . . . . . . . . . . . . . . . . .


Descripcin de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Clasificacin de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fusin de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Especificacin del criterio de clasificacin . . . . . . . . . . . . . . . . . . .
Grabacin del proceso de entrada . . . . . . . . . . . . . . . . . . . . . . .
Grabacin del proceso de salida . . . . . . . . . . . . . . . . . . . . . . . .
Restricciones en los procedimientos de entrada y en los procedimientos de
salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Determinacin de si la clasificacin o fusin ha sido satisfactoria . . . . .
Finalizacin prematura de una operacin de clasificacin o fusin . . . . .
Clasificacin de registros de longitud variable . . . . . . . . . . . . . . . . .
Ejemplo de clasificacin y fusin de archivos . . . . . . . . . . . . . . . . .
Declaracin de elementos de datos utilizando tipos de datos SAA . . . . . .
Campos de longitud variable
. . . . . . . . . . . . . . . . . . . . . . . . . .
Campos de fecha, hora e indicacin de la hora . . . . . . . . . . . . . . . .
Campos con posibilidad de nulos . . . . . . . . . . . . . . . . . . . . . . . .
Campos grficos DBCS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Campos grficos DBCS de longitud variable . . . . . . . . . . . . . . . . .
Campos de coma flotante . . . . . . . . . . . . . . . . . . . . . . . . . . . .

321
321
323
324
324
325
326
327
327
328
328
329
332
332
334
335
335
336
339

Captulo 15. Acceso a dispositivos conectados externamente . . . . . .


Tipos de archivos de dispositivos
. . . . . . . . . . . . . . . . . . . . . . . . .
Acceso a dispositivos de impresora . . . . . . . . . . . . . . . . . . . . . . . .
Denominacin de archivos de impresora
. . . . . . . . . . . . . . . . . . .
Descripcin de archivos de impresora . . . . . . . . . . . . . . . . . . . . .
Grabacin en archivos de impresora . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de utilizacin de archivos FORMATFILE en un programa ILE
COBOL/400
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Acceso a archivos almacenados en dispositivos de cinta . . . . . . . . . . . .
Denominacin de archivos almacenados en dispositivos de cinta . . . . .
Descripcin de archivos almacenados en dispositivos de cinta . . . . . . .
Lectura y grabacin de archivos almacenados en dispositivos de cinta . .
Acceso a archivos almacenados en dispositivos de disquete . . . . . . . . .
Denominacin de archivos almacenados en dispositivos de disquete . . .
Descripcin de archivos almacenados en dispositivos de disquete
. . . .
Lectura y grabacin de archivos almacenados en dispositivos de disquete
Acceso a dispositivos de pantalla y archivos ICF . . . . . . . . . . . . . . . .

346
350
351
351
353
355
355
356
356
358

Captulo 16. Utilizacin de archivos DISK y DATABASE . . . .


Diferencias entre archivos DISK y DATABASE
. . . . . . . . . . .
Organizacin de archivos y vas de acceso a archivos AS/400 . .
Mtodos de proceso de archivos para archivos DISK y DATABASE
Proceso de archivos secuenciales . . . . . . . . . . . . . . . . .
Proceso de archivos relativos . . . . . . . . . . . . . . . . . . . .
Proceso de archivos indexados . . . . . . . . . . . . . . . . . . .
Proceso de archivos con secuencias por clave descendentes .
Proceso de archivos con registros de longitud variable . . . . .
Ejemplos de proceso de archivos DISK y DATABASE . . . . . . .
Creacin de archivos secuenciales . . . . . . . . . . . . . . . . .
Actualizacin y ampliacin de archivos secuenciales
. . . . . .
Creacin de archivos relativos . . . . . . . . . . . . . . . . . . . .
Actualizacin de archivos relativos . . . . . . . . . . . . . . . . .
Recuperacin de archivos relativos . . . . . . . . . . . . . . . . .

359
359
359
360
360
362
365
374
374
377
377
379
381
383
385

. . . . . .
. . . . . .
. . . . . .
. . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .

Contenido

341
341
342
343
343
345

ix

Creacin de archivos indexados


.
Actualizacin de archivos indexados

. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .

Captulo 17. Utilizacin de archivos de transaccin . . . . . . . . . . . .


Definicin de archivos de transaccin con especificaciones de descripcin de
datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Proceso de un archivo de transaccin descrito externamente . . . . . . . . .
Escritura de programas que utilicen archivos de transaccin
. . . . . . . . .
Denominacin de un archivo de transaccin . . . . . . . . . . . . . . . . .
Descripcin de un archivo de transaccin . . . . . . . . . . . . . . . . . . .
Proceso de un archivo de transaccin . . . . . . . . . . . . . . . . . . . . .
Ejemplo de un programa de consulta bsica con archivos de transaccin
Utilizacin de indicadores con archivos de transaccin . . . . . . . . . . . . .
Traspaso de indicadores en un rea de indicadores por separado
. . . .
Traspaso de indicadores en el rea de registro . . . . . . . . . . . . . . .
Ejemplos de utilizacin de indicadores en programas ILE COBOL/400 . .
Utilizacin de archivos de transaccin de subarchivo . . . . . . . . . . . . . .
Definicin de un subarchivo con especificaciones de descripcin de datos
Utilizacin de subarchivos en un archivo de pantalla . . . . . . . . . . . . .
Acceso a archivos de un solo dispositivo y a archivos de mltiples
dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Escritura de programas que utilicen archivos de transaccin de subarchivo .
Denominacin de un archivo de transaccin de subarchivo . . . . . . . . .
Descripcin de un archivo de transaccin de subarchivo . . . . . . . . . .
Proceso de un archivo de transaccin de subarchivo . . . . . . . . . . . .
Ejemplo de utilizacin de WRITE SUBFILE en un programa de consulta de
pedidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de utilizacin de READ SUBFILE...NEXT MODIFIED y REWRITE
SUBFILE en un programa de actualizacin de pagos . . . . . . . . . . .
Apndice A. Nivel de soporte de lenguaje . . . . . . . . . . . . . . . .
Norma COBOL
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nivel de soporte de lenguaje ILE COBOL/400 . . . . . . . . . . . . . .
Soporte de interfaz comn de programacin (CPI) de Arquitectura para
Aplicaciones de Sistemas* (SAA*)
. . . . . . . . . . . . . . . . . . . .

ILE COBOL/400 Gua del Programador

395
397
398
398
400
400
404
411
412
412
413
426
426
427
431
439
439
440
441
445
459

. .
. .

479

481

. . . . . . . . . . . . . . . . . . . .

483
483
485
485
485
489

. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .

Apndice D. Soporte a idiomas internacionales con juegos de


caracteres de doble byte . . . . . . . . . . . . . . . . . . . . . . .
Utilizacin de los caracteres DBCS en literales . . . . . . . . . .
Identification Division . . . . . . . . . . . . . . . . . . . . . . . . .
Environment Division . . . . . . . . . . . . . . . . . . . . . . . . .
Data Division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Procedure Division . . . . . . . . . . . . . . . . . . . . . . . . . .
SORT/MERGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

395

477
477
478

. .
. .

Apndice B. El distintivo de norma de proceso de informacin federal


(FIPS)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Apndice C. Mensajes ILE COBOL/400
Descripcin de mensajes COBOL . . . .
Mensajes de compilacin . . . . . . . . .
Listados de programas . . . . . . . . .
Mensajes interactivos . . . . . . . . . . .
Respuesta a mensajes
. . . . . . . . . .

388
390

. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .

491
491
495
495
496
497
503

Instrucciones que dirigen al compilador . . . . . . . .


Comunicaciones entre programas
. . . . . . . . . . .
Distintivos FIPS . . . . . . . . . . . . . . . . . . . . . .
Listados de programa COBOL
. . . . . . . . . . . . .
Funciones intrnsecas sensibles al orden de clasificacin

. . . . . . . . . . . .
. . . . . . . . . . .

503
504
504
505
505

Apndice E. Ejemplo de vuelco con formato COBOL

. . . . . . . . . . .

507

. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .

Apndice F. Consideraciones sobre migracin y compatibilidad entre


OPM COBOL/400 e ILE COBOL/400 . . . . . . . . . . . . . . . . . . . . .
Estrategia de migracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Consideraciones sobre compatibilidad . . . . . . . . . . . . . . . . . . . . . .
Consideraciones generales
. . . . . . . . . . . . . . . . . . . . . . . . . .
Mandatos CL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instrucciones que dirigen al compilador . . . . . . . . . . . . . . . . . . .
Environment Division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Data Division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Procedure Division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Interfaces de Programacin de Aplicaciones (API) . . . . . . . . . . . . .
Ejecucin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

513
513
514
514
515
517
518
518
520
529
529

. . . . . . . . . . . . . . . . . . . . .

533

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

537

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

541

Apndice G. Glosario de abreviaturas


Bibliografa
ndice

.
.
.
.
.
.
.
.
.
.

Contenido

xi

xii

ILE COBOL/400 Gua del Programador

Figuras
1.

|
|
|
|
|
|
|

|
|
|
*
*

2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.

Copyright IBM Corp. 1994, 1996

Pasos principales para crear un objeto de programa ILE COBOL/400


ejecutable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de estructura de programa ILE COBOL/400
. . . . . . . . . . .
Un formato de pantalla SEU . . . . . . . . . . . . . . . . . . . . . . . . . .
Mensaje de error del corrector sintctico COBOL generado por una
instruccin incompleta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
El mensaje de error del corrector sintctico COBOL desaparece cuando
la instruccin se completa . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
Pantalla Editar para un miembro nuevo
Creacin de objetos de mdulo utilizando el mandato CRTCBLMOD . .
Utilizacin de COPY en la instruccin PROCESS . . . . . . . . . . . . . .
Listado resumen del mandato CRTCBLMOD . . . . . . . . . . . . . . . .
Listado resumen del mandato CRTBNDCBL . . . . . . . . . . . . . . . . .
Lista de opciones en vigor . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de un listado fuente ILE COBOL/400 . . . . . . . . . . . . . . . .
Listado de recuento de utilizacin de verbos
. . . . . . . . . . . . . . . .
Mapa de la Data Division . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mensajes FIPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Listado de referencias cruzadas . . . . . . . . . . . . . . . . . . . . . . . .
Mensajes de diagnstico . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dos vas para crear un objeto de programa . . . . . . . . . . . . . . . . .
Listado resumen de opciones del mandato CRTPGM . . . . . . . . . . .
Listado CRTPGM - Tabla de resumen breve
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
Listado CRTPGM - Tabla de resumen ampliado
Listado CRTPGM - Listado de informacin del enlazador . . . . . . . . .
Listado CRTPGM - Listado de referencias cruzadas . . . . . . . . . . . .
Listado CRTPGM - Estadsticas de enlace . . . . . . . . . . . . . . . . . .
Primera pantalla Visualizar informacin de mdulo . . . . . . . . . . . . .
Segunda pantalla Visualizar informacin de mdulo . . . . . . . . . . . .
Tercera pantalla Visualizar informacin de mdulo . . . . . . . . . . . . .
Pantalla de solicitud del mandato CHGMOD . . . . . . . . . . . . . . . . .
Ejemplo de un men de aplicacin . . . . . . . . . . . . . . . . . . . . .
Especificacin de descripcin de datos de un men de aplicacin . . .
Ejemplo de un programa CL que llama a programas ILE COBOL/400.
Arranque de una sesin de depuracin . . . . . . . . . . . . . . . . . . .
Adicin de un objeto de programa ILE a una sesin de depuracin. . .
Eliminacin de un objeto de programa ILE de una sesin de depuracin
Visualizacin de una vista de mdulo . . . . . . . . . . . . . . . . . . . .
Modificacin de la vista de un objeto de mdulo . . . . . . . . . . . . .
Establecimiento de un punto de interrupcin condicional . . . . . . . . .
Ejemplo de una pantalla Trabajar con observacin . . . . . . . . . . . .
Ejemplo de una ventana Visualizar observacin . . . . . . . . . . . . . .
Ejemplo de una pantalla Visualizar observaciones de depuracin . . .
Ejemplo de una pantalla Visualizar fuente del mdulo . . . . . . . . . .
Ejemplo de una ventana Visualizar fuente del mdulo . . . . . . . . . .
Visualizacin de una variable utilizando F11 (Visualizar variable) . . . .
Visualizacin de una variable utilizando el mandato de depuracin EVAL
Visualizacin del valor hexadecimal de una variable utilizando el
mandato de depuracin EVAL . . . . . . . . . . . . . . . . . . . . . . . .

8
10
18
20

21
23
29
53
56
57
58
59
62
63
65
67
69
72
84
85
86
87
90
91
94
95
96
97
109
109
110
120
122
123
125
126
129
133
133
135
136
137
141
142
143

xiii

46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.

xiv

Visualizacin de una subserie de una variable de serie de caracteres


utilizando el operador %SUBSTR . . . . . . . . . . . . . . . . . . . . . .
Visualizacin de un elemento de grupo utilizando el mandato de
depuracin EVAL
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Visualizacin de una matriz utilizando el mandato de depuracin EVAL
Estructura de programas anidados con programas contenidos directa e
indirectamente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Estructura de programas anidados con programas contenidos directa e
indirectamente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de comportamiento de EXIT PROGRAM, STOP RUN y
GOBACK en un nico grupo de activacin con nombre . . . . . . . . .
Ejemplo de comportamiento de EXIT PROGRAM, STOP RUN y
GOBACK en dos grupos de activacin con nombre
. . . . . . . . . . .
Ejemplo de comportamiento de EXIT PROGRAM, STOP RUN y
GOBACK en mltiples grupos de activacin *NEW y con nombre . . .
Ejemplo de comportamiento de EXIT PROGRAM, STOP RUN y
GOBACK en grupos de activacin *NEW, con nombre y *DFTACTGP
Elementos de datos comunes durante el enlace de subprogramas . . .
. . . . . . . . . . . . . .
Entrada-salida utilizando archivos EXTERNAL
Llamada a un procedimiento Pascal desde un programa ILE
COBOL/400. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Punto de entrada Pascal al que ha de llamarse desde un programa ILE
COBOL/400. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Emisin de un mandato CL desde un programa ILE COBOL/400. . . .
Ejemplo de recuperacin del siglo actual. . . . . . . . . . . . . . . . . .
Utilizacin de punteros en una instruccin MOVE . . . . . . . . . . . . .
Ejemplo de la utilizacin de punteros para acceder a espacios de
usuario -- DDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de la utilizacin de punteros para acceder a espacios de
usuario
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Representacin de una lista encadenada que finaliza con NULL . . . .
Programa ILE COBOL/400 para procesar una lista encadenada . . . .
Proceso de verbos de E/S . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo del procedimiento de recuperacin de errores -- DDS . . . . .
Ejemplo del procedimiento de recuperacin de errores
. . . . . . . . .
Ejemplo de un archivo de referencia de campos . . . . . . . . . . . . .
Ejemplo de Especificaciones de descripcin de datos para un archivo
lgico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de los resultados de la instruccin COPY de formato 2 (DDS)
Ejemplo de Especificaciones de descripcin de datos con ALIAS
. . .
Ejemplo de los resultados de la instruccin COPY de formato 2 (DD)
con la palabra clave ALIAS . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo que muestra cmo ILE COBOL/400 puede relacionarse con
archivos AS/400 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de utilizacin del control de compromiso -- DDS de archivo
maestro de cuentas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de utilizacin del control de compromiso -- DDS de pantalla de
solicitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de utilizacin de control de compromiso . . . . . . . . . . . . .
Entradas de ENVIRONMENT DIVISION y DATA DIVISION para un
programa de ordenacin . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de utilizacin de SORT/MERGE . . . . . . . . . . . . . . . . . .
Longitud de campo COBOL/400 de un campo de longitud variable
. .
Comparacin de datos de un slo byte y datos grficos . . . . . . . . .

ILE COBOL/400 Gua del Programador

144
145
146
183
184
193
194
195
196
203
206
232
232
233
234
242
245
246
256
257
270
283
284
294
295
296
297
297
298
315
316
317
322
330
334
335

82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.

106.

107.

108.
109.
110.
111.
112.
113.

Archivo DDS definiendo un campo de datos grficos de longitud variable


Programa ILE COBOL/400 utilizando elementos de datos grficos DBCS
de longitud variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programa ILE COBOL/400 utilizando elementos de datos DBCS de
longitud variable y *CVTPICGGRAPHIC . . . . . . . . . . . . . . . . . .
Ejemplo de utilizacin de archivos FORMATFILE en un programa ILE
COBOL/400 -- DDS de archivos fsicos . . . . . . . . . . . . . . . . . . .
Ejemplo de utilizacin de archivos FORMATFILE en un programa ILE
COBOL/400 -- DDS de archivos de impresora
. . . . . . . . . . . . . .
Ejemplo de utilizacin de archivos FORMATFILE en un programa ILE
COBOL/400 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instrucciones START utilizando un archivo descrito por programa . . .
Instrucciones START utilizando un archivo descrito externamente -- DDS
Instrucciones START utilizando un archivo descrito externamente . . .
Utilizacin de las Especificaciones de descripcin de datos para definir
. . . . . . . . . . . . . . . .
la va de acceso para un archivo indexado
Especificaciones de descripcin de datos para definir la va a acceso
(una clave compuesta) de un archivo indexado . . . . . . . . . . . . . .
Ejemplo de un archivo secuencial de registros de salarios de empleados
Ejemplo de un programa de actualizacin de archivos secuenciales . .
. . . . . . . . . . . . . .
Ejemplo de un programa de archivos relativos
Ejemplo de un programa de actualizacin de archivos relativos
. . . .
Ejemplo de un programa de recuperacin de archivos relativos
. . . .
Ejemplo de un programa de archivos indexados . . . . . . . . . . . . .
Ejemplo de un programa de actualizacin de archivos indexados . . .
Ejemplo de especificaciones de descripcin de datos para un archivo de
dispositivo de pantalla . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de un programa de consulta TRANSACTION con un solo
dispositivo de pantalla . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Especificacin de descripcin de datos del formato de registro CUSMST.
Listado fuente de un programa de consulta TRANSACTION con un solo
dispositivo de pantalla. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de un programa con indicadores en el rea de registro sin
. . . .
utilizar la expresin INDICATORS en la instruccin E/S -- DDS
Ejemplo de un programa con indicadores en el rea de registro sin
utilizar la expresin INDICATORS en la instruccin E/SPrograma fuente
COBOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de programa con indicadores en el rea de registro y la
expresin INDICATORS en las instrucciones de E/Sprograma fuente
COBOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de un programa con indicadores en un rea de indicadores
separada definida en WORKING-STORAGE con la instruccin COPY -DDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Listado COBOL con indicadores en un rea de indicadores por separado
Ejemplo de programa con indicadores en un rea de indicadores por
separado, definida en una tabla en WORKING-STORAGE . . . . . . .
Pantalla de subarchivo . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Especificaciones de descripcin de datos para un formato de registro de
subarchivo
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo del uso de archivos de mltiples dispositivos -- archivo de
pantalla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo del uso de archivos de mltiples dispositivos -- archivo fsico
PASSWORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Figuras

337
338
339
346
347
348
369
370
371
373
374
378
380
382
384
386
389
391
397
404
406
407
413

415

418

420
421
424
427
429
432
432

xv

114. Ejemplo del uso de archivos de mltiples dispositivos -- archivo fsico


TERM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
115. Listado fuente ILE COBOL/400 para soporte de archivos de mltiples
dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
116. Especificaciones de descripcin de datos para un programa de consulta
. . . . . . . . . . . . . . . .
de pedidos - archivo de detalles de pedido
117. Especificaciones de descripcin de datos para un programa de consulta
de pedidos - archivo de revisin de pedido
. . . . . . . . . . . . . . . .
118. Especificaciones de descripcin de datos para un programa de consulta
de pedidos - archivo de cabecera de pedido
. . . . . . . . . . . . . . .
119. Ejemplo de un programa de consulta de pedidos . . . . . . . . . . . . .
120. Ejemplo de especificacin de descripcin de datos para un programa de
actualizacin de pagos - archivo lgico de pedidos . . . . . . . . . . . .
121. Ejemplo de especificacin de descripcin de datos para un programa de
actualizacin de pagos - archivo de dispositivo de pantalla . . . . . . .
122. Listado fuente de un ejemplo de programa de actualizacin de pagos
123. Ejemplo de mensaje del corrector sintctico ILE COBOL/400 . . . . . .
124. Mensaje de error de ejecucin . . . . . . . . . . . . . . . . . . . . . . . .
125. Mensaje de error de ejecucintexto de segundo nivel . . . . . . . . .
126. Programa COBOL utilizado para generar un vuelco con formato COBOL
127. Ejemplo de vuelco con formato COBOL . . . . . . . . . . . . . . . . . .

xvi

ILE COBOL/400 Gua del Programador

433
433
446
447
448
449
460
461
462
486
487
488
508
510

Tablas
1.
2.
3.
4.
5.
6.
|
*
|

7.
8.
9.
10.
11.
12.
13.
14.
15.
16.

|
|
|
|
|
|

17.
18.
19.
20.
21.
22.
23.

Copyright IBM Corp. 1994, 1996

Parmetros del mandato CRTPGM y sus valores por omisin . . . . . .


Secciones del listado del enlazador en base al parmetro DETAIL
. . .
Parmetros del mandato CRTSRVPGM y sus valores por omisin . . .
Mandatos del depurador fuente ILE . . . . . . . . . . . . . . . . . . . . .
Equivalencia entre atributos de variables del depurador fuente ILE y
categoras de datos ILE COBOL/400 . . . . . . . . . . . . . . . . . . . .
Parmetros para los mandatos STRDBG y CHGDBG y sus valores por
omisin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Evaluacin de operadores . . . . . . . . . . . . . . . . . . . . . . . . . .
Tipos de datos que manejan las funciones numricas . . . . . . . . . .
Tipos de operaciones aritmticas que manejan las funciones numricas
Jerarqua de llamadas para estructuras anidadas con programas
COMMON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nombres de programas para un ejemplo de entrada-salida que utilice
archivos EXTERNAL
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compatibilidad de tipos de datos ILE COBOL/400 con ILE C/400 . . .
Compatibilidad de tipos de datos ILE COBOL/400 con ILE RPG/400 .
Compatibilidad de tipos de datos ILE COBOL/400 con ILE CL . . . . .
Consideraciones sobre el bloqueo de registros con y sin control de
compromiso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Archivos de dispositivos y sus dispositivos asociados conectados
externamente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Caractersticas de archivos secuenciales accesibles a programas de
norma COBOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Caractersticas de archivos relativos accesibles a programas de norma
COBOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Inicializacin de archivos de salida relativos . . . . . . . . . . . . . . . .
Caractersticas de archivos indexados accesibles a programas de norma
COBOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilizaciones de los subarchivos . . . . . . . . . . . . . . . . . . . . . . .
Nivel de soporte del compilador ILE COBOL/400 . . . . . . . . . . . . .
Norma COBOL y COBOL FIPS 21-4 . . . . . . . . . . . . . . . . . . . .

75
83
103
115
116
119
162
163
164
185
205
220
225
229
312
342
361
362
364
366
428
479
482

xvii

xviii

ILE COBOL/400 Gua del Programador

Avisos
Las referencias a programas bajo licencia IBM que se hagan en esta publicacin
no implican que slo puedan utilizarse programas bajo licencia IBM. Cualquier servicio, programa o producto funcionalmente equivalente que no infrinja los derechos
de propiedad intelectual de IBM puede utilizarse en lugar de los productos, programas o servicios IBM. Es responsabilidad del usuario la evaluacin y verificacin
de su funcionamiento conjuntamente con otros productos excepto aquellos expresamente designados por IBM.
IBM tiene patentes o solicitudes de patente pendientes que tratan la materia objeto
de esta publicacin. La posesin de este documento no le otorga ninguna licencia
sobre estas patentes. Puede enviar consultas sobre licencias, por escrito, a IBM
Director of Licensing, IBM Corporation, 500 Columbus Avenue, Thornwood, NY
10594, USA.
Los usuarios que posean una licencia de este programa y deseen informacin
sobre la posibilidad de: (i) intercambiar informacin entre programas creados independientemente y otros programas (incluyendo ste) y (ii) utilizar mutuamente la
informacin que se ha intercambiado, deberan ponerse en contacto con IBM
Canada Ltd., Department 071, 1150 Eglinton Avenue East, North York, Ontario
M3C 1H7, Canada. Esta informacin puede estar disponible sujeta a los trminos
y condiciones adecuados, incluyendo en algunos casos el pago de una tarifa.
Esta publicacin contiene ejemplos de datos e informes que se utilizan en operaciones diarias. Para ilustrarlas del modo ms completo posible, los ejemplos
incluyen nombres de personas, empresas, sucursales y productos. Todos estos
nombres son ficticios y cualquier parecido con nombres y direcciones de empresas
reales es mera coincidencia.

Informacin sobre la interfaz de programacin


La ILE COBOL/400 Gua del programador tiene como objetivo ayudarle a crear
programas ILE COBOL/400. Contiene informacin necesaria para utilizar el compilador ILE COBOL/400. Esta publicacin aporta informacin sobre las interfaces de
programacin de uso general e informacin asociada proporcionada por el compilador ILE COBOL/400.
Las interfaces de programacin de uso general le permiten crear programas que
van a utilizar los servicios del compilador ILE COBOL/400.

Copyright IBM Corp. 1994, 1996

xix

Marcas registradas y marcas de servicio


Los trminos siguientes son marca registrada de International Business Machines
Corporation en los Estados Unidos y/o en otros pases:
AS/400
Application System/400
C/400
CL/400
CICS
CICS/400
COBOL/400
IBM
ILE Integrated Language Environment
Integrated Language Environment
IBMLink
MVS
Operating System/400

OS/400
PROFS
RPG/400
SAA
SQL/400
System/370
S/370
System/390
S/390
Systems Application Architecture
VM
400

Windows es marca registrada de Microsoft Corporation.


PC DIRECT es marca registrada de Ziff Communications Company; IBM
Corporation lo utiliza bajo licencia.
UNIX es marca comercial registrada en los Estados Unidos y en otros pases cuya
licencia se obtiene exclusivamente a travs de X/Open Company Limited.
Otros nombres de servicios, productos y empresas sealados con doble asterisco
(**), pueden ser marcas registradas o marcas de servicio de terceros.

Reconocimiento
IBM reconoce la utilizacin del siguiente producto de investigacin en el compilador
ILE COBOL/400:
S/SL

xx

ILE COBOL/400 Gua del Programador

Copyright 1981 by the University of Toronto

|
|

Acerca de la publicacin ILE COBOL/400 Gua del


programador, SC10-9658 (SC09-2072)
La publicacin ILE COBOL/400 Gua del programador describe cmo escribir, compilar, enlazar, ejecutar, depurar y mantener programas de Entorno de Lenguajes
Integrados*(ILE*) COBOL/400* en el AS/400*(Application System/400*). Proporciona informacin de programacin sobre cmo llamar a otros programas ILE
COBOL/400 y no ILE COBOL/400, compartir datos con otros programas, utilizar
punteros y manejar condiciones de excepcin.Tambin describe cmo llevar a
cabo operaciones de entrada/salida en dispositivos conectados externamente,
archivos de bases de datos, archivos de pantalla y archivos ICF.
Si utiliza este manual, podr:

Disear y codificar programas ILE COBOL/400


Entrar, compilar y enlazar programas ILE COBOL/400
Ejecutar y depurar programas ILE COBOL/400
Examinar ejemplos ILE COBOL/400 codificados.

Nota: Debera familiarizarse con los captulos 1 a 6 de esta gua antes de continuar con los otros captulos.
Este manual hace referencia a otras publicaciones IBM*. Estas publicaciones se
listan en el apartado Bibliografa en la pgina 537 con el ttulo completo y el
nmero de pedido base. Cuando se alude a stas en el texto, se utiliza una
versin abreviada del ttulo.

A quin va dirigido este manual


Este manual va dirigido a los programadores de aplicaciones que tienen experiencia en lenguaje de programacin COBOL y a los operadores que ejecutan los
programas. Es una gua para programar en lenguaje ILE COBOL/400 para usuarios del sistema AS/400.
Para utilizar esta gua debera tener conocimientos bsicos sobre:
Conceptos relacionados con el proceso de datos
Lenguaje de programacin COBOL
El sistema operativo IBM OS/400* (Operating System/400*)
Conceptos sobre el Entorno de Lenguajes Integrados (ILE)
Interfaces de programacin de aplicaciones (API)
Herramientas para el desarrollo, como por ejemplo el Juego de herramientas
para el desarrollo de aplicaciones (ADTS/400) para para terminales no programables (NPT).
Cmo utilizar los controles e indicaciones de la pantalla y cmo utilizar las
teclas del teclado como, por ejemplo:

Copyright IBM Corp. 1994, 1996

Teclas
Teclas
Teclas
Teclas

de movimiento del cursor


de funcin
de salida de campo
Insertar y Suprimir

xxi

Tecla Restaurar error


Cmo utilizar la estacin de pantalla cuando est conectada al sistema
AS/400 de IBM y ejecutando software AS/400. Esto significa saber utilizar el
sistema operativo OS/400 y el Lenguaje de control (CL) para:

Iniciar y terminar la sesin en la estacin de pantalla


Interactuar con pantallas
Utilizar la ayuda
Entrar mandatos CL
Utilizar Herramientas para el desarrollo de aplicaciones
Responder a mensajes
Gestionar archivos.

Los conceptos bsicos de funciones CL de OS/400.


Cmo utilizar el soporte de gestin de datos para que una aplicacin pueda
trabajar con archivos.
Cmo utilizar las siguientes herramientas del Juego de herramientas para el
desarrollo de aplicaciones/400:
Ayuda para el Diseo de Pantallas (SDA), que se utiliza para disear y
codificar pantallas.
Programa de Utilidad para Entrada del Fuente (SEU) que se utiliza para
entrar y actualizar miembros fuente.
Lenguaje de consulta estructurada (SQL) que se utiliza para insertar sentencias SQL en programas ILE COBOL/400.

Normativa para la industria


*
*

En este documento, norma COBOL hace referencia al lenguaje de programacin


de COBOL tal como se define en el documento:

*
*

American National Standard for Information Systems - Programming Language


- COBOL, ANSI X3.23-1985, ISO 1989:1985

*
*

actualizado con el contenido de los siguientes documentos, en el orden en que


aparecen:

*
*
*
*

ANSI X3.23a-1989, American National Standard for Information Systems Programming Language - Intrinsic Function Module for COBOL and ISO
1989:1985/Amd.1:1992, Programming Languages - COBOL, Amendment 1:
Intrinsic function module

*
*
*
*

ANSI X3.23b-1993, American National Standard for Information Systems Programming Language - Correction Amendment for COBOL and ISO/IEC
1989 DAM2 Programming Languages - COBOL, Amendment 2: Correction
and clarification amendment for COBOL

*
*

El compilador ILE COBOL/400 est diseado para dar soporte a la norma COBOL
(tal como se ha definido) y

FIPS Publication 21-4, Federal Information Processing Standard 21-4, COBOL

*
*

en el nivel de subconjunto intermedio, tal como IBM lo entiende e interpreta con


fecha de enero de 1995.

xxii

ILE COBOL/400 Gua del Programador

*
*

A partir de estos momentos, se utilizar el trmino norma COBOL para hacer referencia al estndar ANSI que hemos descrito.

Partes de este manual estn copiadas de documentos de la norma COBOL y se


reproducen con el permiso de estas publicaciones (copyright 1985 de American
National Standards Institute). Puede obtener copias de stos escribiendo a American National Standard Institute, 1430 Broadway, New York, New York, 10018.
El comit tcnico X3J4 de ANSI es el encargado de mantener el lenguaje COBOL.
Consulte el Apndice A, Nivel de soporte de lenguaje en la pgina 477 para
obtener ms informacin sobre la normativa para la industria a que da soporte el
compilador ILE COBOL/400.

Reconocimiento
Para su informacin y gua le presentamos el siguiente extracto del nmero de formulario 1965-0795689 de la U.S. Government Printing Office:
Cualquier organizacin que est interesada en reproducir las especificaciones y el informe COBOL parcialmente o en su totalidad, utilizando
ideas tomadas de este informe como base para una gua de instrucciones
o cualquier otro propsito, puede hacerlo. Sin embargo, tales organizaciones debern reproducir esta seccin en el apartado destinado a la
introduccin del documento. Las organizaciones que utilicen un pasaje
corto, como en una revisin de un manual, deben mencionar COBOL en
reconocimiento de la fuente, pero no debern citar literalmente esta
seccin por completo.
COBOL es un lenguaje de la industria y no es propiedad de ninguna
empresa ni grupo de empresas, ni de ninguna organizacin ni grupo de
organizaciones.
Ningn colaborador ni el comit COBOL han otorgado garantas explcitas
ni implcitas en relacin al funcionamiento y exactitud del lenguaje y del
sistema de programacin. Es ms, no se presume ningn tipo de responsabilidad por parte de ningn colaborador ni del comit en relacin a ello.
Se han establecido procedimientos para el mantenimiento de COBOL. Las
consultas en relacin a estos procedimientos para proponer modificaciones
deberan dirigirse al Executive Committee of the Conference on Data
Systems Languages.

Acerca de la publicacin ILE COBOL/400 Gua del programador, SC10-9658 (SC09-2072)

xxiii

Los autores y los tenedores del derecho de propiedad intelectual del material bajo copyright:
FLOW-MATIC** Programming for the UNIVAC (R) I and II, Data
Automation Systems copyrighted 1958, 1959, by Unisys Corporation;
IBM Commercial Translator, Form No. F28-8013, copyrighted 1959 by
IBM; FACT, DSI 27A5260-2760, copyrighted 1960 by MinneapolisHoneywell
han autorizado la utilizacin de este material parcialmente o por completo,
en las especificaciones de COBOL. Tal autorizacin abarca adems la
reproduccin y utilizacin de las especificaciones de COBOL en manuales
de programacin o publicaciones similares.

Notacin de la sintaxis de ILE COBOL/400


Los formatos bsicos de ILE COBOL/400 se presentan en un sistema uniforme de
notacin de sintaxis . En los prrafos siguientes encontrar una explicacin sobre
esta notacin, pensada para ayudarle a escribir instrucciones fuente COBOL:
Las palabras opcionales y las palabras clave de COBOL aparecen en letras
maysculas; por ejemplo:
MOVE
Deben escribirse exactamente como se indica. Si falta alguna palabra clave, el
compilador lo considera como un error.
Las variables que representan valores o nombres proporcionados por el
usuario aparecen en letras minsculas; por ejemplo:
parmx
Para facilitar las referencias de texto, algunas palabras aparecen seguidas de
un guin y un dgito o una letra como, por ejemplo:
identificador-1
Este sufijo no modifica la definicin sintctica de la palabra.
Los operadores lgicos y aritmticos (+, , *, /, **, >, <, =, >= y <=) que aparecen en los formatos de sintaxis son obligatorios. Estos operadores son palabras reservadas de caracteres especiales. Para obtener una lista completa de
palabras ILE COBOL/400 reservadas, consulte el manual ILE COBOL/400
Reference.
La puntuacin y dems caracteres especiales que aparecen en el diagrama
son necesarios para la sintaxis del formato cuando se muestran; si no los tiene
en cuenta, provocar errores en el programa.
Debe escribir las clusulas obligatorias y opcionales (cuando se utilicen) en el
orden en que aparecen en el diagrama a menos que las normas asociadas
determinen explcitamente algo diferente.

xxiv

ILE COBOL/400 Gua del Programador

Lectura de diagramas de sintaxis


En este manual, la sintaxis se describe utilizando la estructura definida a continuacin.
Lea los diagramas de sintaxis de izquierda a derecha y de principio a fin,
siguiendo el sentido de la lnea:
55

Indica el principio de una instruccin. Los diagramas de unidades sintcticas que no son instrucciones como, por ejemplo, clusulas, expresiones y prrafos tambin empiezan con este smbolo.

Indica que la sintaxis de la instruccin continua en la lnea siguiente.

Indica que una instruccin es continuacin de la lnea anterior.

5%

Indica el final de la instruccin. Los diagramas de unidades sintcticas que no son instrucciones como, por ejemplo, clusulas, expresiones y prrafos tambin finalizan con este smbolo.

Nota: Las instrucciones de todo un prrafo incluidas en un diagrama no


empiezan con 55 ni acaban con 5% a menos que el principio o el fin
coincida con el del prrafo.
Los elementos obligatorios aparecen en la lnea horizontal (la va principal).
Los elementos opcionales aparecen por debajo de la va principal:
55INSTRUCCINelemento obligatorio5%
elemento opcional

Cuando se puede elegir entre dos o ms elementos, stos aparecen verticalmente, en una lista.
Si es obligatorio escoger uno de los elementos, un elemento de la lista
aparece en la va principal. Si escoger un elemento es opcional, toda la lista
aparece por debajo de la va principal.
55INSTRUCCINopcin-obligatoria-15%
opcin-obligatoria-2 elemento-opcional-1
elemento-opcional-2

Una flecha que vuelve hacia la izquierda por encima del elemento indica que el
elemento puede repetirse:

55INSTRUCCIN6elemento-repetible5%

Una flecha de repeticin por encima de una lista de elementos opcionales u


obligatorios indica que puede realizar ms de una eleccin entre los elementos
listados, o repetir una seleccin nica:

55INSTRUCCIN6opcin-165%
opcin-2
opcin-3
opcin-4

Acerca de la publicacin ILE COBOL/400 Gua del programador, SC10-9658 (SC09-2072)

xxv

El ejemplo siguiente muestra cmo se utiliza la sintaxis:


Formato

65
(1) identificador-1
(2)
55INSTRUCCION
(3)
literal-1
elemento 1

(4) 5
56TOidentificador-m
ROUNDED
(5) 5%
5
(6)
SIZE ERRORinstruccin-obligatoria-m
END-STATEMENT
ON

elemento 1:
identificador-2
literal-2
expresin-aritmtica-1

Notas:
1 La palabra clave INSTRUCCIN debe especificarse y codificarse como se
indica.
2 Este operando es obligatorio. identificador-1 o literal-1 deben codificarse.
3 El fragmento de elemento 1 es opcional; puede codificarse o no segn lo
requiera la aplicacin. Si el elemento 1 se codifica, puede repetirse con
cada entrada separado por uno o ms separadores COBOL. Las selecciones de entrada permitidas para este fragmento se describen al final del
diagrama.
4 El operando identificador-m y la palabra clave asociada TO son obligatorios y pueden repetirse con uno o ms separadores COBOL entre
cada entrada. Puede asignarse la palabra clave ROUNDED a cada
entrada.
5 La expresin ON SIZE ERROR con la instruccin-obligatoria-m asociada
son opcionales. Si la expresin ON SIZE ERROR se codifica, la palabra
clave ON es opcional.
6 Puede codificarse la palabra clave END-STATEMENT para finalizar la instruccin. No es un delimitador obligatorio.

Identificacin de sintaxis de documentacin


Las instrucciones y clusulas COBOL ilustradas en diagramas de sintaxis cuya sintaxis se comprueba pero que el compilador ILE COBOL/400 trata como documentacin, se identifican con notas a pie de pgina.

Interpretacin de cdigos de entrada de lenguaje de control (CL) de


AS/400
El cdigo que aparece en la esquina superior derecha de cada diagrama de sintaxis de CL contiene los cdigos de entrada que especifican el entorno en que el
mandato puede entrarse. Los cdigos indican si el mandato puede o no puede:
Utilizarse en un trabajo interactivo o de proceso por lotes (fuera de un programa compilado; Trabajo: B o I)
Utilizarse en un programa compilado interactivo o de proceso por lotes (Pgm:B
o I)
Utilizarse en un procedimiento REXX interactivo o de proceso por lotes
(REXX:B o I)
Utilizarse como un parmetro del mandato CL CALL o pasarse como una serie
de caracteres al programa del sistema QCMDEXC (Exec).

xxvi

ILE COBOL/400 Gua del Programador

Captulo 1. Introduccin
COBOL (COmmon Business Oriented Language) es un lenguaje de programacin
parecido al ingls. Como su propio nombre sugiere, COBOL es particularmente
eficaz para procesar problemas de gestin.Concede importancia a la descripcin y
gestin de elementos de datos y registros de entrada/salida; as, COBOL se
adapta bien a la gestin de grandes archivos de datos.
Este captulo proporciona la informacin siguiente:
una introduccin al Entorno de Lenguajes Integrados*(ILE*)
una introduccin a ILE COBOL/400
una visin general sobre funciones incorporadas en ILE COBOL/400 que no
estn disponibles en OPM COBOL/400.
una visin general sobre los pasos importantes que se deben seguir para crear
un objeto de programa ejecutable.
una visin general sobre otras herramientas para el desarrollo de aplicaciones
disponibles para ayudarle a desarrollar aplicaciones ILE COBOL/400 de forma
ms eficaz.

Entorno de Lenguajes Integrados


El Entorno de Lenguajes Integrados (ILE) es la fase en la que se encuentra
actualmente la evolucin de los modelos de programas OS/400*. Cada fase se ha
desarrollado para cumplir con las necesidades actuales de los programadores de
aplicaciones. Para obtener una descripcin completa de los conceptos y terminologa perteneciente a ILE, consulte el manual ILE Conceptos..
El entorno de programacin que se proporcion cuando el sistema AS/400 se present por primera vez se denomina modelo de programa original (OPM).
COBOL, RPG, CL, BASIC y PL/1 funcionaban segn este modelo. En la Versin
1 Release 2, se introdujo el modelo de programa ampliado (EPM) . EPM se cre
para dar soporte a lenguajes como C, Pascal y FORTRAN. Para obtener una descripcin de las principales caractersticas del OPM y del EPM, consulte el apartado
"Historia de ILE" del manual ILE Conceptos.
La diferencia ms importante entre el entorno OPM COBOL/400 y el entorno ILE
COBOL/400 es la forma de crear objetos de programa ejecutables. El compilador
ILE COBOL/400 no produce objetos de programa ejecutables. Produce uno o ms
objetos de mdulo que pueden enlazarse entre s en diferentes combinaciones
para formar una o ms unidades ejecutables conocidas como objetos de programa.
ILE le permite enlazar objetos de mdulo escritos en diferentes lenguajes. Por
consiguiente, es posible crear objetos de programa ejecutables que consten de
objetos de mdulo escritos separadamente en COBOL, RPG, C, C++ y CL.

Copyright IBM Corp. 1994, 1996

ILE COBOL/400
Se han incorporado una serie de funciones nuevas en ILE COBOL/400 que no se
encuentran disponibles en OPM COBOL/400. Estas funciones nuevas incluyen:
|

Soporte de siglo (nuevo en V3R7)

|
|

Se ha aadido la posibilidad de que el usuario trabaje con un ao de 4 dgitos


en las siguientes instrucciones y funciones:

Instruccin ACCEPT con las expresiones YYYYDDD y YYYYMMDD

|
|

Las siguientes funciones intrnsecas convierten un ao de 2 dgitos en uno


de 4 dgitos:

|
|
|

- DATE-TO-YYYYMMDD
- DAY-TO-YYYYDDD
- YEAR-TO-YYYY

Las siguientes funciones intrnsecas devuelven un ao de 4 dgitos:

|
|
|
|

CURRENT-DATE
DAY-OF-INTEGER
DATE-OF-INTEGER
WHEN-COMPILED

Soporte de comas flotantes (nuevo en V3R7)

|
|
|
|
|

El valor *FLOAT del parmetro CVTOPT de los mandatos CRTCBLMOD y


CRTBNDCBL permite utilizar elementos de datos de coma flotante en programas ILE COBOL/400. Adems, las instrucciones afectadas (por ejemplo,
ACCEPT, DISPLAY, MOVE, COMPUTE, ADD, SUBTRACT, MULTIPLY y
DIVIDE) dan soporte a comas flotantes.

Soporte del rea de datos (nuevo en V3R7)

|
|
|

Se han aadido nuevos formatos de las instrucciones ACCEPT y DISPLAY


para posibilitar la recuperacin y actualizacin del contenido de las reas de
datos de AS/400.

Funciones intrnsecas (nuevo en V3R7)

Se han aadido las siguientes funciones intrnsecas nuevas:

|
|
|
|
|
|
|
|
|
|
|
|
|
|

ACOS
ASIN
ATAN
CHAR
COS
CURRENT-DATE
DATE-OF-INTEGER
DATE-TO-YYYYMMDD
DAY-OF-INTEGER
DAY-TO-YYYYDDD
INTEGER-OF-DATE
INTEGER-OF-DAY
LENGTH
LOG

LOG10
LOWER-CASE
MEAN
NUMVAL
NUMVAL-C
ORD
REVERSE
SIN
SQRT
TAN
UPPER-CASE
WHEN-COMPILED
YEAR-TO-YYYY

Parmetro de directorio de enlaceBNDDIR (nuevo en V3R7)

ILE COBOL/400 Gua del Programador

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Se ha aadido el parmetro BNDDIR al mandato CRTBNDCBL para permitir la


especificacin de la lista de directorios enlazados que se utilizan en la resolucin de smbolos.
Parmetro de grupo de activacinACTGRP (nuevo en V3R7)
Se ha aadido el parmetro ACTGRP al mandato CRTBNDCBL para permitir
la especificacin del grupo de activacin al que un programa debe estar asociado cuando se llama.
Objectos de programa y reas de datos calificados con biblioteca (nuevo en
V3R7)
Se ha aadido la expresin LIBRARY a las siguientes instrucciones ILE
COBOL/400 para permitir que los objectos de programa y las reas de datos
de OS/400 se califiquen con un nombre de biblioteca de OS/400:

CALL
CANCEL
SET
ACCEPT
DISPLAY

Recogida de datos de rendimiento (nuevo en V3R7)


Se ha aadido el parmetro ENBPFRCOL a los mandatos CRTCBLMOD y
CRTBNDCBL y a la instruccin PROCESS para permitir la generacin de
cdigo de medida del rendimiento en un mdulo o programa. La herramienta
de rendimiento del sistema puede utilizar los datos recogidos para crear un
perfil del rendimiento de una aplicacin.
Nuevo soporte del depurador de ILE (nuevo en V3R7)
El depurador de ILE le permite ahora:

Depurar la mayor parte de programas OPM

|
|
|

Establecer condiciones de observacin, peticiones para establecer puntos


de interrupcin cuando cambia el valor de una variable (o de alguna expresin que determina la direccin de una ubicacin de almacenamiento).

*
|
|
|
|
|
|
|

Nueva expresin EXIT PROGRAM (nuevo en V3R6/V3R2)


Se ha aadido la expresin AND CONTINUE RUN UNIT a la instruccin EXIT
PROGRAM para permitir que pueda abandonarse un programa de llamada sin
necesidad de detener la unidad de ejecucin.
Nuevo formato de puntero de la instruccin SET (nuevo en V3R6/V3R2)
Se ha aadido un nuevo formato de la instruccin SET que permite la actualizacin de referencias de puntero.
Soporte de datos DBCS (nuevo en V3R6/V3R2)
Ahora, se pueden procesar datos de Juego de caracteres de doble byte
(DBCS) en ILE COBOL/400. El compilador ILE COBOL/400 da soporte a
DBCS, donde cada carcter lgico est representado por dos bytes. DBCS
proporciona soporte para lenguajes ideogrficos como, por ejemplo, el Juego
de caracteres grficos japoneses de IBM, Kanji.

Soporte de CALL...BY VALUE y CALL...RETURNING (nuevo en V3R6/V3R2)


CALL...BY VALUE y CALL...RETURNING le permiten pasar argumentos BY
VALUE en lugar de BY REFERENCE y recibir valores RETURN. De este

Captulo 1. Introduccin

modo se facilita la migracin y se mejora el soporte entre lenguajes ya que


tanto ILE C como ILE RPG dan soporte a CALL... BY VALUE y a
CALL...RETURNING.
Soporte a las expresiones BY VALUE y RETURNING de la cabecera
PROCEDURE DIVISION (nuevo en V3R6/V3R2)

La expresin BY VALUE de la cabecera PROCEDURE DIVISION permite a


COBOL recibir argumentos BY VALUE de un programa de llamada COBOL o
de otros lenguajes ILE como, por ejemplo, RPG, C o VisualAge C++ for
OS/400. La expresin RETURNING de la cabecera PROCEDURE DIVISION
permite a COBOL devolver un VALUE al procedimiento ILE de llamada.
Elementos de datos EXTERNAL
El usuario puede definir los elementos de datos que estn disponibles para
cada uno de los programas en la unidad de ejecucin ILE COBOL/400 utilizando la clusula EXTERNAL. Ya no es necesario pasar todas las variables
que se van a compartir entre programas como argumentos en la instruccin
CALL. Este soporte favorece la modularidad de las aplicaciones permitiendo
que se compartan datos sin utilizar argumentos ni parmetros en la instruccin
CALL.
Archivos EXTERNAL
El usuario puede definir los archivos que estn disponibles para cada programa en la unidad de ejecucin.Puede realizar solicitudes E/S para el mismo
archivo desde cualquier programa ILE COBOL/400 de la unidad de ejecucin
que declare el archivo como EXTERNAL. Para los archivos externos slo
existe un cursor de archivo sin tener en cuenta el nmero de programas que
utilicen el archivo.Se pueden compartir archivos entre programas y, de ese
modo, desarrollar programas ms pequeos de fcil mantenimiento. Resulta
ms ventajoso utilizar archivos EXTERNAL que archivos abiertos compartidos
ya que tan slo se necesita una operacin OPEN y CLOSE para que todos los
programas participantes utilicen el archivo. No obstante, los archivos
EXTERNAL no pueden compartirse entre grupos de activacin diferentes ni
con programas escritos en otros lenguajes de programacin.
Programas fuente anidados
Un programa fuente ILE COBOL/400 puede contener otros programas fuente
ILE COBOL/400. Estos programas contenidos pueden hacer referencia a
algunos de los recursos como, por ejemplo, elementos de datos y archivos de
los programas en los que se encuentran contenidos o definir sus propios
recursos localmente, que nicamente estarn visibles en el programa que los
define. Como los programas ILE COBOL/400 son tambin recursos, su mbito
tambin est controlado por la estructura de anidamiento y por el atributo de
mbito asociado al programa. De este modo se proporciona ms flexibilidad al
controlar el conjunto de programas ILE COBOL/400 que puede llamar un programa ILE COBOL/400. Los programas ILE COBOL/400 anidados proporcionan un mecanismo para ocultar recursos que de otro modo seran visibles.
Clusula INITIAL
El usuario tiene un mecanismo por el que un programa ILE COBOL/400 y los
programas contenidos en ste pasan a su estado inicial cada vez que se les
llama.Esto se consigue especificando INITIAL en el prrafo PROGRAM-ID. As
se proporciona ms flexibilidad al controlar la unidad de ejecucin COBOL.
Instruccin REPLACE

ILE COBOL/400 Gua del Programador

La instruccin REPLACE resulta til para sustituir texto del programa fuente
durante el proceso de compilacin. Funciona en todo el archivo o hasta que se
encuentra otra instruccin REPLACE, a diferencia de lo que ocurre con la instruccin COPY en la expresin REPLACING. Las instrucciones REPLACE se
procesan una vez que se han procesado todas las instrucciones COPY. As se
proporciona ms flexibilidad al modificar el texto ILE COBOL/400 que se va a
compilar.
Instruccin DISPLAY WITH NO ADVANCING
Cuando se utiliza la expresin NO ADVANCING en la instruccin DISPLAY, el
usuario podr dejar el cursor a continuacin del ltimo carcter que se
visualiza. Esto le permite encadenar elementos para que se visualicen en una
nica lnea desde varios puntos del programa ILE COBOL/400.
Instruccin ACCEPT FROM DAY-OF-WEEK
ILE COBOL/400 le permite recuperar el da de la semana (Lunes = 1, Martes =
2 ...) y asignarlo a un identificador. Este soporte complementa el soporte
ACCEPT FROM DAY/DATE/TIME existente.
Clusula SELECT OPTIONAL para archivos relativos
Permite la creacin automtica de archivos relativos aunque el archivo sea
abierto de E-S.Esto ampla el soporte ya existente para archivos secuenciales.
Soporte para instrucciones COPY anidadas
Los miembros a los que se hace referencia en COPY pueden contener instrucciones COPY ampliando de este modo la aplicacin de la instruccin COPY.
Si un miembro COPY contiene una directiva COPY, ni la directiva COPY contenedora ni la directiva COPY contenida pueden especificar la expresin
REPLACING.
Mejoras realizadas a las instrucciones ACCEPT y DISPLAY ampliadas
Se puede trabajar con tablas en la instruccin ACCEPT ampliada. Esto le
permite actualizar de forma selectiva y fcilmente los elementos de la tabla.
Tambin se permiten las tablas de longitud variable en las instrucciones
ACCEPT y DISPLAY ampliadas.
Asimismo, tambin se da soporte a la clusula SIZE en la instruccin ACCEPT
ampliada.
Soporte de puntero de procedimiento
Puntero a procedimiento es un nuevo tipo de datos que contienen la direccin
de programas ILE COBOL/400 o programas que no son ILE COBOL/400. Los
punteros a procedimiento se definen especificando la clusula USAGE IS
PROCEDURE-POINTER en un elemento de datos. Este nuevo tipo de datos
resulta til para llamar programas y/o procedimientos ILE que esperan este tipo
de datos como parmetro. Los elementos de datos de tipo puntero de procedimiento tambin pueden utilizarse como destino de una instruccin CALL para
llamar a otro programa.
Registros especiales nuevos
Registro especial RETURN-CODE
Permite que la informacin de retorno se pase entre programas ILE
COBOL/400. Normalmente, este registro se utiliza para pasar informacin
sobre si ha finalizado satisfactoriamente o no una llamada de programa.
Captulo 1. Introduccin

Registro especial SORT-RETURN


Devuelve informacin sobre la finalizacin satisfactoria de una instruccin
SORT o MERGE.Tambin permite al usuario terminar el proceso de una
instruccin SORT/MERGE desde un rea declarativa de error o un procedimiento de entrada-salida.
Opciones nuevas del compilador
*PICGGRAPHIC/*NOPICGGRAPHIC
|

*PICGGRAPHIC es un parmetro nuevo para la opcin CVTOPT que


permite que el usuario transfiera datos DBCS al programa ILE COBOL/400.
opcin *IMBEDERR/*NOIMBEDERR
*IMBEDERR es una opcin nueva del compilador que muestra los errores
que se producen durante la compilacin en el momento en que ocurren en
el listado del compilador as como al final del listado.
*FLOAT/*NOFLOAT

*FLOAT es un parmetro nuevo de la opcin CVTOPT que le permite


transferir elementos de datos de coma flotante a programas ILE
COBOL/400 utilizando los nombres de DDS y un USAGE de COMP-1 (precisin simple) o COMP-2 (precisin doble).
opcin *NOSTDTRUNC/*STDTRUNC
*NOSTDTRUNC es una opcin de compilador nueva que suprime el truncamiento de valores en elementos de datos BINARY. Esta opcin resulta
til cuando se migran aplicaciones desde IBM System/390* (S/390*).
opcin *CHGPOSSGN/*NOCHGPOSSGN
Esta opcin es til cuando se comparten datos entre OS/400 y IBM S/390.
Esta opcin se proporciona para compatibilidad con IBM System/390.
Modifica la representacin de bits de elementos de datos con zona y
empaquetados con signo cuando se utilizan en instrucciones aritmticas o
en instrucciones MOVE y los valores de estos elementos de datos son
positivos.
Soporte de nombres de sistema entrecomillados
Se ha aadido soporte para aceptar literales donde se permiten nombres de
sistema. Se permite la utilizacin de cualquier nombre al que el sistema d
soporte y no se limita a los nombres COBOL vlidos.
No existe lmite de COBOL en las funciones siguientes ya que stas vienen
determinadas por las limitaciones del sistema.
Nmero de archivos declarados
Nmero de parmetros en la instruccin CALL y en la expresin USING de
la PROCEDURE DIVISION. Se aplica un lmite del sistema de 400 para
procedimientos ILE y 255 para objetos de programa.
Nmero de archivos de entrada SORT-MERGE y nmero de claves
SORT-MERGE. El nmero mximo de archivos de entrada SORT-MERGE
es 32 y la longitud mxima de clave SORT-MERGE es 2000 bytes.
Instruccin START con NO LOCK.
Cuando se utiliza la expresin NO LOCK en la instruccin START, el cursor del
archivo se coloca en el primer registro que se va a leer sin poner un bloqueo

ILE COBOL/400 Gua del Programador

en el registro. Este soporte se proporciona para archivos relativos e indexados


y complementa la funcin READ con NO LOCK ya disponible.
Nota: START con NO LOCK es una instruccin nueva tanto para ILE
COBOL/400 como para OPM COBOL/400.
Soporte de llamada esttica de procedimientos
El usuario puede desarrollar las aplicaciones en objetos de mdulo ms
pequeos de mejor mantenimiento y enlazarlos como un objeto de programa,
sin incurrir en el inconveniente de sobrecarga del sistema que supone la
llamada dinmica de programas. Este recurso, junto con el entorno en tiempo
de ejecucin comn que proporciona el sistema, tambin mejora la posibilidad
de escribir aplicaciones utilizando varios lenguajes.Los lenguajes de programacin ILE permiten el enlace de C, RPG, COBOL y CL en un objeto de programa nico haciendo caso omiso de la mezcla de los lenguajes fuente.
Se ha aadido una nueva sintaxis en la instruccin CALL literal y una opcin
nueva de compilador a ILE COBOL/400 para diferenciar entre llamadas estticas de procedimientos y llamadas dinmicas de programas.
Soporte de registros de longitud variable (clusula RECORD IS VARYING)
Puede definir y utilizar con facilidad registros de longitud diferente en el mismo
archivo utilizando la sintaxis COBOL ANSI. No slo supone un ahorro importante de almacenamiento sino que adems facilita la tarea de migracin de
aplicaciones complejas desde otros sistemas.
Lmites ampliados del compilador
ILE COBOL/400 ofrece lmites ampliados del compilador:
tamao de elementos de datos elementales y de grupo
tamao de tablas de longitud variable y fija
nmero de niveles de anidamiento para instrucciones condicionales
nmero de operandos en varias instrucciones de Procedure Division

Captulo 1. Introduccin

Pasos principales para crear un objeto de programa ILE COBOL/400


ejecutable
La Figura 1 ilustra los pasos habituales que deben seguirse para desarrollar un
objeto de programa ejecutable en ILE COBOL/400:
Pasos principales

Mandatos CL

1. Disear el
programa fuente
ILE COBOL/4

2. Entrar el

Arrancar el Programa de
programa fuente
Miembro de
utilidad para entrada
en un
cd. fuente % del fuente (STRSEU)
miembro fuente

3. Compilar el

Crear un
programa fuente
Objeto(s)
mdulo
en un objeto
de mdulo
(CRTCBLMOD)
de mdulo

4. Crear el objeto

Crear un
de programa
Objeto(s)
programa
enlazando
de programa
(CRTPGM)
uno o ms

objetos de mdulo

5. Habilitar modalidad

Arrancar depuracin
de depuracin OS/4

(STRDBG)

6. Ejecutar el

Llamar
programa
Programa(s)
programa
en ejecucin
(CALL)

7. Utilizar el depu-

rador fuente ILE


Modalidad

depuracin

Figura 1. Pasos principales para crear un objeto de programa ILE COBOL/400 ejecutable

Los pasos 3 y 4 pueden llevarse a cabo con un nico mandato, CRTBNDCBL.


Este mandato crea objetos de mdulo temporales a partir del programa fuente ILE
COBOL/400 y a continuacin crea el objeto de programa. Una vez creado el
objeto de programa, los objetos de mdulo se suprimen.

ILE COBOL/400 Gua del Programador

Diseo del programa fuente ILE COBOL/400 del usuario


El primer paso que debe llevarse a cabo cuando se crea un objeto de programa
ILE COBOL/400 ejecutable es disear el programa fuente ILE COBOL/400.
Un programa fuente ILE COBOL/400 consta de cuatro divisiones. El programa
esquemtico que aparece en la Figura 2 en la pgina 10 muestra la estructura de
un programa fuente ILE COBOL/400 . Puede utilizarse como ejemplo para disear
programas fuente ILE COBOL/400.
Los programas ILE COBOL/400 pueden encontrarse dentro de otros programas
ILE COBOL/400. Este concepto se conoce como anidamiento y el programa contenido se denomina programa anidado. La Figura 2 en la pgina 10 muestra
cmo se incluye un programa ILE COBOL/400 anidado en un programa ILE
COBOL/400 ms externo. No todas las entradas que se proporcionan en el programa esquemtico son obligatorias; la mayora se proporcionan con carcter informativo.

Captulo 1. Introduccin

IDENTIFICATION DIVISION. 1
PROGRAM-ID. nombre-programa-ms externo.
AUTHOR. entrada-comentario.
INSTALLATION. entrada-comentario.
DATE-WRITTEN. entrada-comentario.
DATE-COMPILED. entrada-comentario.
SECURITY.
\
El prrafo SECURITY puede utilizarse para especificar
\
la informacin sobre derechos de autor perteneciente
\
al objeto de mdulo generado. Las 8 primeras lneas
\
del prrafo SECURITY generan la informacin sobre
\
derechos de autor que se visualiza en el panel de
\
Informacin sobre derechos de autor cuando se
\
emite el mandato CL Visualizar mdulo (DSPMOD).
ENVIRONMENT DIVISION. 2
CONFIGURATION SECTION. 3
SOURCE-COMPUTER. IBM-AS4.
OBJECT-COMPUTER. IBM-AS4.
SPECIAL-NAMES.
REQUESTOR IS CONSOLE.
INPUT-OUTPUT SECTION. 4
FILE-CONTROL.
SELECT nombre-archivo ASSIGN TO DISK-nombre-archivo
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS nombre-datos.
DATA DIVISION. 5
FILE SECTION.
FD nombre-archivo.
1 nombre-registro PIC X(132).
WORKING-STORAGE SECTION.
77 nombre-datos PIC XX.
LINKAGE SECTION.
PROCEDURE DIVISION. 6
DECLARATIVES
END DECLARATIVES.
proceso-principal SECTION.
prrafo-proceso-principal
instrucciones ILE COBOL/4.
STOP RUN.
IDENTIFICATION DIVISION. 7
PROGRAM-ID. nombre-programa-anidado.
ENVIRONMENT DIVISION. 8
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT nombre-archivo ASSIGN TO DISK-nombre-archivo
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS nombre-datos.
DATA DIVISION.
FILE SECTION.
FD nombre-archivo.
1 nombre-registro PIC X(132).
WORKING-STORAGE SECTION.
77 nombre-datos PIC XX.
LINKAGE SECTION.
PROCEDURE DIVISION.
DECLARATIVES
END DECLARATIVES.
proceso-principal SECTION.
prrafo-proceso-principal
instrucciones ILE COBOL/4.
EXIT PROGRAM.

La Identification Division 1 es la nica divisin que debe incluirse; el resto de divisiones


son opcionales.
La Environment Division 2 se compone de
dos secciones: La Configuration Section 3 ,
que describe las especificaciones generales
de los sistemas objeto y fuente, y la Inputoutput Section 4 , que define cada uno de
los archivos y especifica la informacin necesaria para transmitir datos entre un soporte
externo y el programa ILE COBOL/400.
La Data Division 5 describe los archivos
que van a utilizarse en el programa y los
registros que se encuentran en los archivos.
Tambin describe los elementos de datos de
trabajo del programa en Working-Storage
necesarios.
La Procedure Division 6 consta de declarativas opcionales y procedimientos que contienen secciones y/o prrafos, sentencias e
instrucciones.
Esta segunda Identification Division 7 marca
el principio de un programa ILE COBOL/400
anidado contenido en un programa ILE
COBOL/400 ms externo.
Los programas anidados no pueden tener una
Configuration section 8 en la Environment
Division.El programa ms externo debe especificar todas las opciones de la Configuration
Section que puedan resultar necesarias.
Los programas anidados y el programa ms
externo deben finalizar con la cabecera END
PROGRAM 9 .

END PROGRAM nombre-programa-anidado. 9


END PROGRAM nombre-programa-ms externo.

Figura 2. Ejemplo de estructura de programa ILE


COBOL/400

Un programa ILE COBOL/400 se identifica mediante el PROGRAM-ID que se


encuentra en la IDENTIFICATION DIVISION. Contiene un conjunto de instrucciones autocontenidas que llevan a cabo una tarea determinada.
En ILE, a los programas fuente ILE COBOL/400 se les considera procedimientos
ILE. Si un programa ILE COBOL/400 contiene programas ILE COBOL/400
anidados, cada uno de los programas ILE COBOL/400 anidados es un procedimiento ILE. El nombre del programa anidado slo se conoce en el programa
contenedor. Si el programa anidado tiene el atributo COMMON, el nombre del pro-

10

ILE COBOL/400 Gua del Programador

grama anidado tambin es conocido por otros programas de la misma unidad de


compilacin. Los procedimientos ILE no deben confundirse con los procedimientos
COBOL, que se encuentran en la Procedure Division de un programa COBOL y
que contienen secciones, prrafos, sentencias e instrucciones.
Para obtener ms informacin sobre cmo escribir un programa ILE COBOL/400,
consulte el manual ILE COBOL/400 Reference.

Entrada de instrucciones fuente en un miembro fuente


Despus de disear el programa ILE COBOL/400, debe entrarlo en un miembro
fuente.
El mandato Arrancar Programa de Utilidad para Entrada del Fuente (STRSEU) del
Programa de Utilidad para Entrada del Fuente (SEU) se utiliza para entrar y editar
las instrucciones fuente de ILE COBOL/400. Para ayudarle a entrar instrucciones
ILE COBOL/400 correctas en el sistema, la pantalla del SEU corresponde al
formato de codificacin de la norma COBOL y a medida que entre o modifique una
lnea de cdigo, el verificador de sintaxis COBOL comprobar si existen errores en
la lnea.
Una unidad de compilacin es el programa ILE COBOL/400 ms externo y cualquiera de los programas ILE COBOL/400 anidados en el programa ms externo.
Pueden entrarse varias unidades de compilacin en un nico miembro fuente.
Para obtener ms informacin sobre cmo entrar instrucciones fuente, consulte el
Captulo 2, Entrada de instrucciones fuente en un miembro fuente en la
pgina 17.

Compilacin de un programa fuente en objetos de mdulo


Cuando haya acabado de entrar o editar las instrucciones fuente en un miembro
fuente, tendr que crear objetos de mdulo utilizando el mandato Crear mdulo
COBOL (CRTCBLMOD). Este mandato compila las instrucciones fuente del
miembro fuente en uno o ms objetos de mdulo. Cada unidad de compilacin del
miembro fuente crea un objeto de mdulo separado.
Los objetos de mdulo son la salida del compilador ILE COBOL/400. Se representan en el sistema mediante el tipo *MODULE.Los objetos de mdulo no pueden
ejecutarse si primero no se han enlazado en objetos de programa.
Para obtener ms informacin sobre la creacin de objetos de mdulo utilizando el
mandato CRTCBLMOD, consulte el Captulo 3, Compilacin de programas fuente
en objetos de mdulo en la pgina 27.

Creacin de un objeto de programa


Para poder crear un objeto de programa ejecutable, deben enlazarse los objetos
de mdulo entre s. Es posible enlazar uno o ms objetos de mdulo entre s para
crear un objeto de programa. Los objetos de mdulo tienen que enlazarse en
objetos de programa ya que nicamente los objetos de programa pueden ejecutarse. Los objetos de mdulo escritos en varios lenguajes de programacin
pueden enlazarse entre s para crear un objeto de programa. Por ejemplo, un
objeto de programa puede constar de objetos de mdulo COBOL o RPG para el
informe pero de un objeto de mdulo C para los clculos. Un objeto de programa
puede crearse utilizando uno de los mandatos siguientes:
Captulo 1. Introduccin

11

Crear programa (CRTPGM)


Crear programa COBOL enlazado (CRTBNDCBL)
Para obtener ms informacin sobre estos mandatos, consulte el Captulo 4,
Creacin de un objeto de programa en la pgina 71.

Ejecucin de un objeto de programa


Se ejecuta un objeto de programa llamndolo. Se puede utilizar uno de los
mtodos siguientes para llamar a un objeto de programa:

El mandato CL CALL en una lnea de mandatos


Una instruccin CALL de lenguaje de alto nivel
Un men orientado a la aplicacin
Un mandato creado por el usuario

Para obtener informacin sobre la ejecucin de un programa, consulte el


Captulo 6, Ejecucin de un programa ILE COBOL/400 en la pgina 107.

Depuracin de un programa
El depurador fuente ILE se utiliza para detectar errores en los programas de servicio y objetos de programa y eliminarlos. Puede utilizar el depurador fuente ILE
para:

Visualizar el fuente del programa


Establecer y eliminar puntos de interrupcin condicionales e incondicionales.
Ir a pasos por el programa
Visualizar el valor de variables, estructuras, registros y matrices
Modificar el valor de variables
Modificar el mbito de referencia
Equiparar un nombre abreviado a una variable, una expresin o un mandato
de depuracin.

Para obtener ms informacin sobre el depurador, consulte el Captulo 7, Depuracin de un programa en la pgina 113.

Otras herramientas para el desarrollo de aplicaciones


Los siguientes productos estn disponibles para ayudarle a desarrollar aplicaciones
ILE COBOL/400 de forma ms eficaz.

Gestor para el Desarrollo de Aplicaciones/400


El programa bajo licencia Gestor para el Desarrollo de Aplicaciones/400 proporciona a las organizaciones para el desarrollo de aplicaciones un mecanismo para
gestionar de forma eficaz objetos de aplicaciones durante la vida de la aplicacin.
Este producto permite a un grupo de programadores crear, gestionar y organizar
mltiples versiones de la aplicacin mediante el producto Workstation Platform/2 o
directamente desde la lnea de mandatos de AS/400. Para obtener ms informacin sobre el programa bajo licencia Gestor para el Desarrollo de
Aplicaciones/400, consulte el manual ADTS/400: Gestor para el Desarrollo de Aplicaciones ADM/400 Introduccin y Gua de Planificacin, GC10-9401 (GC09-1807).

12

ILE COBOL/400 Gua del Programador

|
|
|
|

Juego de Herramientas de Desarrollo de Aplicaciones ADTS


para OS/400 (ADTS para OS/400)

|
*
*
*

Application Development ToolSet Client Server for OS/400

Juego de Herramientas de Desarrollo de Aplicaciones ADTS para OS/400 (ADTS


para OS/400) proporciona un conjunto integrado de herramientas basadas en el
sistema diseadas para satisfacer las necesidades de los profesionales de la
informtica. Este producto proporciona herramientas para manipular archivos de
base de datos, objetos y fuentes en el sistema AS/400. Se proporciona un editor
de pantalla completa as como herramientas para disear pantallas e informes.

Entorno de Desarrollo Coorperativo CODE/400 (CODE/400) es una caracterstica


de Application Development ToolSet Client Server for OS/400 (ADTS CS for
OS/400). CODE/400 ahora da soporte a ILE COBOL/400 con la funcin de
edicin/compilacin/depuracin completa. Adems, proporciona verificacin de programas y comprobacin de sintaxis en el PWS. .*

Captulo 1. Introduccin

13

14

ILE COBOL/400 Gua del Programador

|
|

Compilacin, ejecucin y depuracin de programas ILE


COBOL/400

Copyright IBM Corp. 1994, 1996

15

16

ILE COBOL/400 Gua del Programador

Captulo 2. Entrada de instrucciones fuente en un miembro


fuente

|
|
|

Este captulo proporciona la informacin necesaria para entrar las instrucciones


fuente ILE COBOL/400. Tambin describe brevemente la metodologa y
herramientas necesarias para realizarlo.

|
|

Para entrar instrucciones fuente ILE COBOL/400 en el sistema, utilice uno de los
mtodos siguientes:

|
|

1. Entre instrucciones fuente utilizando el Programa de utilidad para entrada del


fuente (SEU). Este mtodo se explica en este captulo.

|
|

2. Entre instrucciones fuente desde disquete o cinta utilizando los mandatos CL


de OS/400 CPYFRMTAP y CPYFRMDKT.

|
|

Para obtener informacin sobre cmo entrar instrucciones fuente utilizando los
mandatos CL, consulte el manual CL Reference, SC41-4722.

Creacin de una biblioteca y de un archivo fsico fuente

|
|
|

Las instrucciones fuente se entran en un miembro de un archivo fsico. Para poder


entrar el fuente, en primer lugar debe crear una biblioteca y un archivo fsico
fuente.

|
|
|

Una biblioteca es un objeto del sistema que sirve como directorio a otros objetos.
Las bibliotecas agrupan objetos relacionados y permiten al usuario buscar objetos
por el nombre. El tipo de objeto para las bibliotecas es *LIB.

|
|
|

Un archivo fsico fuente es un archivo que almacena miembros. Estos miembros


contienen instrucciones fuente como, por ejemplo instrucciones fuente ILE
COBOL/400.

|
|

Para crear una biblioteca denominada MYLIB, utilice el mandato Crear biblioteca
(CRTLIB):

CRTLIB LIB(MYLIB)

|
|

Para crear un archivo fsico fuente denominado QCBLLESRC en la biblioteca


MYLIB, utilice el mandato Crear archivo fsico fuente (CRTSRCPF):

CRTSRCPF FILE(MYLIB/QCBLLESRC)

|
|

Nota: En el ejemplo anterior, la biblioteca MYLIB debe existir para poder crear el
archivo fsico fuente.

|
|
|

Para obtener ms informacin sobre la creacin de bibliotecas y archivos fsicos


fuente, consulte el manual ADTS/400: Gestor de Desarrollo de Programas (PDM),
SC10-9419 (SC09-1771).

|
|
|
|

Cuando haya creado la biblioteca y el archivo fsico fuente, podr iniciar una sesin
de edicin. Puede utilizar el mandato Arrancar programa de utilidad para entrada
del fuente (STRSEU) para iniciar una sesin de edicin y entrar las instrucciones
fuente.

Copyright IBM Corp. 1994, 1996

17

|
|
|

|
|

Nota: Adems puede entrar el programa fuente desde disquete o cinta con la
funcin de copia de OS/400. Para obtener ms informacin sobre la
funcin de copia de OS/400, consulte el manual CL Reference.

Entrada de instrucciones fuente utilizando el Programa de Utilidad


para Entrada del Fuente

|
|
|
|
|
|

El Programa de Utilidad para Entrada del Fuente proporciona formatos de pantalla


especiales para COBOL que corresponden al Formato de codificacin COBOL y
estn pensados para facilitarle la entrada de instrucciones fuente COBOL. La
Figura 3 muestra un ejemplo de formato de pantalla que el SEU proporciona para
COBOL. El SEU puede mostrar una lnea de formato para ayudarle a entrar o
realizar modificaciones en el cdigo fuente, posicin por posicin (vea 1 ).

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Columnas. . . :
1 71
Editar
MYLIB/QCBLLESRC
SEU==> ____________________________________________________________
XMPLE1
FMT CB ......-A+++B+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1
\\\\\\\\\\\\\\\ Principio de datos \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
1.
IDENTIFICATION DIVISION.
2.
PROGRAM-ID. XMPLE1.
3.
4.
ENVIRONMENT DIVISION.
5.
CONFIGURATION SECTION.
6.
SOURCE-COMPUTER. IBM-AS4.
7.
INPUT-OUTPUT SECTION.
8.
FILE-CONTROL.
9.
SELECT FILE-1 ASSIGN TO DATABASE-MASTER.
\\\\\\\\\\\\\\\\\\ Fin de datos \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Tipo solicitud. .
CB
Nmero secuencia. . . 8.

|
|
|
|

Continuacin
_
Area-A
Area-B
FILE
-CONTROL.

|
|

F3=Salir F4=Solicitud
F12=Cancelar

F5=Renovar
F23=Seleccionar solicitud

F11=Registro anterior
F24=Ms teclas

Figura 3. Un formato de pantalla SEU

|
|
|

Para obtener una descripcin completa sobre cmo entrar instrucciones fuente .*
using SEU, refer to the &1338.. utilizando el SEU, consulte el manual ADTS/400:
Programa de Utilidad para Entrada del Fuente (SEU), SC10-9422 (SC09-1774).

|
|
|

Una unidad de compilacin es el programa ILE COBOL/400 ms externo y cualquiera de los programas ILE COBOL/400 anidados en el programa ms externo.
Pueden entrarse varias unidades de compilacin en un nico miembro fuente.

|
|
|
|
|

Formato de archivo fuente COBOL


La longitud de registro estndar de los archivos fuente es de 92 caracteres. Estos
92 caracteres se componen de un nmero de secuencia de 6 caracteres, un
campo de datos de 80 caracteres y un rea de fecha de ltima modificacin de 6
caracteres.

18

ILE COBOL/400 Gua del Programador

|
|
|
|
|
|
|

El compilador ILE COBOL/400 da soporte a una longitud de registro adicional de


102; al final del registro (posiciones 93-102) se sita un campo de 10 caracteres
que contiene informacin complementaria. El compilador ILE COBOL/400 no
utiliza esta informacin, pero se coloca en el extremo derecho del listado del compilador. El usuario es el responsable de colocar esta informacin en dicho campo.
Si desea utilizar este campo adicional, cree un archivo fuente cuya longitud de
registro sea 102.

|
|
|
|

Se proporciona un archivo fuente en el que se pueden almacenar los registros


fuente si no desea crear su propio archivo. Este archivo, denominado
QCBLLESRC, est en la biblioteca QGPL y tiene una longitud de registro de 92
caracteres.

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Arranque de SEU
Para entrar el programa fuente ILE COBOL/400 utilizando el SEU, entre el
mandato Arrancar el programa de utilidad para entrada del fuente (STRSEU) y
especifique CBLLE para el parmetro TYPE. Especifique SQLCBLLE para el parmetro TYPE si el programa fuente contiene instrucciones SQL intercaladas.
Si no especifica un parmetro TYPE, SEU utiliza como valor por omisin el mismo
tipo que se utiliz cuando el miembro se edit por ltima vez. Si no especifica el
parmetro TYPE y est creando un miembro nuevo, SEU asigna un tipo de
miembro por omisin asociado al nombre del archivo fsico fuente. Para ILE
COBOL/400, este tipo de miembro por omisin es CBLLE. Para obtener informacin sobre otros mtodos para arrancar el SEU, consulte el manual ADTS/400:
Programa de Utilidad para Entrada del Fuente (SEU), SC10-9422 (SC09-1774).

Utilizacin del corrector sintctico COBOL en SEU


Para utilizar el corrector sintctico COBOL en SEU, especifique el parmetro TYPE
(CBLLE) del mandato STRSEU. El corrector sintctico COBOL comprueba todas
las lneas para detectar errores a medida que el usuario entra lneas nuevas o
modifica las existentes. Se identifican las instrucciones fuente que no son
correctas y aparece un mensaje de error que permite corregir los errores antes de
compilar el programa.

|
|
|
|
|

Cada vez que entre o modifique una lnea fuente otras lneas del cdigo fuente
pueden verificarse sintcticamente como parte de esa unidad de verificacin de
sintaxis. La longitud de una nica unidad de verificacin de sintaxis se determina
realizando una extensin desde una lnea modificada o entrada de la forma
siguiente:

|
|
|

Una unidad de verificacin de sintaxis se extiende hacia el principio del


miembro fuente hasta que se encuentra el principio de la primera lnea fuente
o bien se halla una lnea que finaliza con un punto.

|
|
|

Una unidad de verificacin de sintaxis se extiende hacia el final del miembro


fuente hasta que se halla el final de la ltima lnea fuente o se encuentra una
lnea que finaliza con un punto.

|
|
|
|

Como el corrector sintctico COBOL slo comprueba una sentencia cuando sta
se entra o modifica, con independencia de las sentencias de la precedan o la
sigan, slo se detectan los errores de sintaxis contenidos en cada sentencia
fuente. No se detectan errores interrelacionados como, por ejemplo, nombres no

Captulo 2. Entrada de instrucciones fuente en un miembro fuente

19

|
|

definidos o referencias incorrectas a nombres. El compilador ILE COBOL/400


detecta estos errores cuando se compila el programa.

|
|
|
|
|
|
|
|

Sin embargo, si se realiza una modificacin en una sentencia que forma parte de
una entrada de comentario de un prrafo opcional de la Identification Division, el
corrector sintctico no reconocer que el contexto permite que se entre cualquier
combinacin de caracteres. Es posible que genere varios errores al intentar identificar el contenido de la sentencia como una instruccin de COBOL vlida. Esto
puede evitarse escribiendo la entrada de comentario como una sola sentencia que
empiece en la misma lnea que el nombre del prrafo o sustituyendo la entrada de
comentario por una serie de lneas de comentario.

|
|
|
|

Si hay un error en una unidad de verificacin de sintaxis, la parte de la unidad en


la que se identifica el error aparece en contraste invertido. El mensaje que
aparece en la parte inferior de la pantalla hace referencia al primer error de la
unidad.

|
|
|
|

La verificacin de sintaxis se produce a medida que se entra el cdigo fuente. Los


mensajes de error los generan lneas que constan de instrucciones incompletas.
Estos desaparecen cuando las instrucciones se completan, como en el siguiente
ejemplo:

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Columnas. . . :
1 71
Editar
TESTLIB/QCBLLESRC
SEU==> ____________________________________________________________
ADDATOB
FMT CB ......-A+++B+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
\\\\\\\\\\\\\\\ Principio de datos \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
.1
IDENTIFICATION DIVISION.
.2
PROGRAM-ID. ADDATOB.
.3
ENVIRONMENT DIVISION.
.4
CONFIGURATION SECTION.
.5
SOURCE-COMPUTER. IBM-AS4.
.6
OBJECT-COMPUTER. IBM-AS4.
.7
DATA DIVISION.
.8
WORKING-STORAGE SECTION.
.9
1 A
PIC S9(8) VALUE 5.
1.
1 B
PIC S9(8) VALUE 1.
1.1
PROCEDURE DIVISION.
1.2
MAINLINE.
1.3
ADD A
'''''''
\\\\\\\\\\\\\\\\\\ Fin de datos \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

|
|
|
|

|
|

Figura 4. Mensaje de error del corrector sintctico COBOL generado por una instruccin
incompleta

F3=Salir F4=Solicitud F5=Renovar F9=Recuperar


F16=Repetir bsqueda
F17=Repetir cambio
TO esperado, EOL encontrado. Lnea rechazada.

20

ILE COBOL/400 Gua del Programador

F1=Cursor F11=Conmutar
F24=Ms teclas

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|

Columnas. . . :
1 71
Editar
TESTLIB/QCBLLESRC
SEU==> ____________________________________________________________
ADDATOB
FMT CB ......-A+++B+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
\\\\\\\\\\\\\\\ Principio de datos \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
.4
IDENTIFICATION DIVISION.
.5
PROGRAM-ID. ADDATOB.
.6
ENVIRONMENT DIVISION.
.7
CONFIGURATION SECTION.
.8
SOURCE-COMPUTER. IBM-AS4.
.9
OBJECT-COMPUTER. IBM-AS4.
.91
DATA DIVISION.
.92
WORKING-STORAGE SECTION.
.93
1 A
PIC S9(8) VALUE 5.
.94
1 B
PIC S9(8) VALUE 1.
1.
PROCEDURE DIVISION.
1.1
MAINLINE.
2.
ADD A
3.
TO B.
'''''''
\\\\\\\\\\\\\\\\\\ Fin de datos \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
F3=Salir F4=Solicitud
F16=Repetir bsqueda

F5=Renovar F9=Recuperar
F17=Repetir cambio

F1=Cursor F11=Conmutar
F24=Ms teclas

|
|

Figura 5. El mensaje de error del corrector sintctico COBOL desaparece cuando la instruccin se completa

|
|

Un mensaje de error se genera despus de entrar la primera lnea y desaparece


tras entrar la segunda lnea, cuando se completa la instruccin.

|
|

Las siguientes normas se aplican a la verificacin de sintaxis para el cdigo fuente


de ILE COBOL/400:

|
|
|
|

No se realiza la verificacin de sintaxis del cdigo fuente que se encuentra en


una lnea con un asterisco (*) o con una barra inclinada (/) en la columna 7.
Un asterisco indica una lnea de comentarios; una barra inclinada indica una
lnea de comentarios y una expulsin de pgina.

|
|

Durante la verificacin de sintaxis no se respeta ninguna opcin del compilador.

|
|
|
|
|

Por ejemplo, el corrector sintctico acepta comillas y apstrofos como


delimitadores no numricos siempre que no se encuentren combinados en una
unidad de verificacin de sintaxis. El corrector sintctico no comprueba si el
delimitador es el que se especificar en los mandatos CRTCBLMOD o
CRTBNDCBL o en la instruccin PROCESS.

|
|
|

La sustitucin de caracteres que especifican las clusulas CURRENCY y


DECIMAL-POINT del prrafo SPECIAL-NAMES no se respeta durante la verificacin de sintaxis interactiva.

|
|
|
|

Cuando se utiliza la clusula REPLACING Identificador-1 BY Identificador-2 de


la instruccin COPY y cuando alguno de los identificadores incluye una modificacin de referencias, el corrector sintctico COBOL del SEU comprueba nicamente los parntesis emparejados.

|
|

En las instrucciones COPY y REPLACE se comprueba la estructura de la sintaxis.

Se comprueba la sintaxis de las instrucciones SQL intercaladas.


Captulo 2. Entrada de instrucciones fuente en un miembro fuente

21

Ejemplo de entrada de instrucciones fuente en un miembro fuente

|
|
|
|

Este ejemplo le muestra cmo crear una biblioteca y un archivo fsico fuente,
arrancar una sesin de edicin y entrar instrucciones fuente utilizando los mandatos Crear biblioteca (CRTLIB), Crear archivo fsico fuente (CRTSRCPF) y
Arrancar SEU (STRSEU).

|
|

Nota: Para poder llevar a cabo estas tareas con estos mandatos, en primer lugar
debe tener autorizacin para utilizar estos mandatos.

1. Para crear una biblioteca cuyo nombre sea MYLIB, teclee

CRTLIB LIB(MYLIB)

y pulse Intro.

El mandato CRTLIB crea una biblioteca cuyo nombre es MYLIB.

2. Para crear un archivo fsico fuente cuyo nombre sea QCBLLESRC, teclee

|
|

CRTSRCPF FILE(MYLIB/QCBLLESRC)
TEXT ('Archivo fsico fuente para un programa ILE COBOL/4')

y pulse Intro.

|
|

El mandato CRTSRCPF crea un archivo fsico fuente cuyo nombre es


QCBLLESRC en la biblioteca MYLIB.

|
|

3. Para arrancar una sesin de edicin y crear un miembro de archivo fsico


fuente XMPLE1, teclee

|
|

STRSEU SRCFILE(MYLIB/QCBLLESRC) SRCMBR(XMPLE1)


TYPE(CBLLE) OPTION(2)

y pulse Intro.

|
|

El mandato STRSEU crea un nuevo miembro XMPLE1 en el archivo


QCBLLESRC de la biblioteca MYLIB.

La pantalla Editar de SEU aparece como se muestra en la Figura 6.

22

ILE COBOL/400 Gua del Programador

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Columnas. . . :
1 71
Editar
MYLIB/QCBLLESRC
SEU==> ____________________________________________________________
XMPLE1
FMT CB ......-A+++B+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
\\\\\\\\\\\\\\\ Principio de datos \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
'''''''
'''''''
'''''''
'''''''
'''''''
'''''''
'''''''
'''''''
'''''''
'''''''
'''''''
'''''''
'''''''
'''''''
'''''''
\\\\\\\\\\\\\\\\\\ Fin de datos \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

|
|
|
|

Figura 6. Pantalla Editar para un miembro nuevo

F3=Salir F4=Solicitud F5=Renovar F9=Recuperar F1=Cursor F11=Conmutar


F16=Repetir bsqueda
F17=Repetir cambio
F24=Ms teclas
El miembro XMPLE1 se ha aadido al archivo MYLIB/QCBLLESRC.

4. Teclee el fuente en la pantalla Editar de SEU.

|
|

5. Pulse F3 (Salir) para ir a la pantalla Salir. Teclee Y (S) para salvar XMPLE1 y
pulse Intro.

El miembro XMPLE1 se salva.

Utilizacin de identificadores del juego de caracteres codificados

|
|
|
|
|

Un identificador de un juego de caracteres codificados (CCSID) es un nmero que


identifica un juego especfico de identificadores de esquemas de codificacin, identificadores de juegos de caracteres, identificadores de pginas de cdigos y ms
informacin relacionada con la codificacin que identifica de forma exclusiva la
representacin de caracteres grficos codificados que se utiliza.

|
|
|
|
|

Todos los caracteres ILE COBOL/400 vlidos excepto el signo $ se encuentran


entre los caracteres invariables del juego de caracteres sintctico CS640 y todos
los caracteres tienen el mismo elemento de cdigo en las pginas de cdigos
EBCDIC de un slo byte excepto la pgina de cdigos Katakana (que se utiliza en
Japn).

|
|
|

Nota: En la pgina de cdigos Katakana, a los caracteres Katakana se les


asignan los elementos de cdigos que se asignan a los caracteres alfabticos en minscula en otras pginas de cdigos EBCDIC de un slo byte.

|
|

El compilador ILE COBOL/400 aceptar el cdigo fuente escrito en cualquier


CCSID EBCDIC de un solo byte excepto el CCSID 290 (Katakana).

|
|

Los CCSID pueden ayudarle a mantener la integridad de los datos de tipo carcter
entre sistemas.

Captulo 2. Entrada de instrucciones fuente en un miembro fuente

23

|
|
|
|

La Arquitectura de representacin de datos de tipo carcter (CDRA) define los


valores de CCSID para identificar los elementos de cdigo que se utilizan para
representar caracteres y convertir estos cdigos como sea necesario para preservar su significado.

|
|

Las instrucciones ACCEPT y DISPLAY ampliadas no dan soporte a la conversin


de CCSID.

|
|
|
|
|
|

Asignacin de un CCSID a un archivo fsico fuente


Se asigna un CCSID a todos los archivos fuente en el momento en que se crea en
el sistema. Se puede especificar, de forma explcita, el juego de caracteres que se
desea utilizar con el parmetro CCSID del mandato CRTSRCPF cuando se crea el
archivo fsico fuente, o se puede aceptar el valor por omisin *DFTCCSID. Por
ejemplo, para crear un archivo fsico fuente con CCSID 273, teclee:

CRTSRCPF FILE(MYLIB/QCBLLESRC) CCSID(273)

|
|
|

Si se acepta el valor por omisin, se asignar el CCSID del trabajo al archivo fsico
fuente. El CCSID que se asigne depende de la pgina de cdigos que utilizaba la
mquina AS/400 en la que se cre el archivo fuente.

|
|
|

El CCSID por omisin para un sistema AS/400 es el CCSID 65535. Si el CCSID


del sistema es 65535, el CCSID que se asigne al archivo fsico fuente viene determinado por el identificador del lenguaje del trabajo.

|
|
|
|
|

Inclusin de miembros de copia con CCSID diferentes en el archivo


fuente
El programa fuente ILE COBOL/400 puede constar de ms de un archivo fuente.
Puede haber un archivo fuente primario y varios archivos fuente secundarios como,
por ejemplo, miembros de copia y archivos DDS.

|
|
|
|

Los archivos fuente secundarios pueden tener CCSID diferentes del CCSID del
archivo fuente primario. En este caso, el contenido de los archivos secundarios se
convierte al CCSID de los archivos fuente primarios a medida que el compilador
ILE COBOL/400 los procesa.

|
|
|
|
|
|

El CCSID 65535 implica que no se va a efectuar ninguna conversin del archivo


fuente.Si el archivo fuente primario, el archivo fuente secundario o ambos tienen
asignado el CCSID 65535, no se lleva a cabo ninguna conversin. El compilador
ILE COBOL/400 podra informar de un error de sintaxis si el archivo fuente secundario contiene caracteres que el juego de caracteres especificado por el CCSID del
archivo fuente primario no reconoce.

|
|
|
|
|

Cuando una instruccin COPY de Formato 2 se utiliza para incorporar descripciones de archivo DDS en el programa fuente, la conversin CCSID no se lleva a
cabo. Si el fuente DDS tiene un CCSID diferente que el miembro fuente en el que
se est copiando, el fuente DDS copiado puede contener algunos caracteres que
no sean vlidos.Estos caracteres se sealarn como errores de sintaxis.

|
|
|
|
|

Si el archivo fuente primario y los archivos fuente secundarios tiene un CCSID diferente y ninguno es el CCSID 65535, el rendimiento de la compilacin puede verse
afectado. El compilador ILE COBOL/400 debe invertir tiempo convirtiendo los
archivos fuente secundarios de un CCSID al CCSID del archivo fuente primario.
Este tiempo puede resultar significativo segn el tamao de los archivos fuente.

24

ILE COBOL/400 Gua del Programador

|
|
|
|
|
|
|
|

Definicin del CCSID para el corrector sintctico COBOL en el SEU


Para que el corrector sintctico COBOL en el SEU se comporte de igual manera
que el compilador ILE COBOL/400, debe definir el CCSID del trabajo que ejecuta
el SEU para que sea igual que el CCSID del archivo fuente primario que est editando. En la mayora de los casos, ya son iguales.Sin embargo, si son diferentes,
se puede modificar el CCSID del trabajo especificando el nmero de CCSID nuevo
en el parmetro CCSID del mandato CHGJOB. Por ejemplo, para modificar el
CCSID del trabajo actual y establecerlo en 280, teclee:

CHGJOB CCSID(28)

|
|

Para obtener ms informacin sobre cmo modificar los atributos de un trabajo,


consulte el mandato CHGJOB en el manual CL Reference.

|
|
|
|

Manipulacin de CCSID diferentes con el depurador fuente ILE


Consulte el apartado Soporte de idioma para el depurador fuente ILE en la
pgina 148 para obtener una descripcin sobre cmo el depurador fuente ILE
maneja los diferentes CCSID.

Captulo 2. Entrada de instrucciones fuente en un miembro fuente

25

26

ILE COBOL/400 Gua del Programador

|
|

Captulo 3. Compilacin de programas fuente en objetos de


mdulo

|
|
|
|
|
|

El compilador ILE COBOL/400 no genera objetos de programa ejecutables.


Produce uno o ms objetos de mdulo que pueden enlazarse entre s en diferentes
combinaciones para formar una o ms unidades ejecutables conocidas como
objetos de programa. Para obtener ms informacin sobre la creacin de objetos
de programa ejecutables, consulte el Captulo 4, Creacin de un objeto de
programa en la pgina 71.

Este captulo describe:

cmo crear un objeto de mdulo

el mandato CRTCBLMOD y sus parmetros

cmo utilizar la instruccin PROCESS para especificar opciones de compilador

cmo entender la salida que genera el compilador ILE COBOL/400

Definicin de un objeto de mdulo

|
|
|
|
|
|
|
|
|
|
|
|
|

Los objetos de mdulo son la salida producida por todos los compiladores ILE
incluyendo el compilador ILE COBOL/400. Son objetos del sistema de tipo
*MODULE. Para ILE COBOL/400, el nombre de cualquier objeto de mdulo
creado de forma permanente viene determinado por el mandato CRTCBLMOD o el
prrafo PROGRAM-ID del programa fuente ILE COBOL/400 ms externo. Cada
unidad de compilacin de un miembro fuente crea un objeto de mdulo separado.
Un programa ILE COBOL/400 de un objeto de mdulo puede llamar al programa
ILE COBOL/400 ms externo de un objeto de mdulo diferente a travs de una
llamada enlazada de procedimiento. Tambin pueden llamarlo utilizando una
llamada de dinmica de programas despus de haber enlazado el objeto de
mdulo en un objeto de programa. Consulte el apartado Llamada a un programa
ILE COBOL/400 en la pgina 179 para obtener una descripcin de llamadas enlazadas de procedimiento y llamadas dinmicas de programa.

|
|
|
|

Los objetos de mdulo no pueden ejecutarse por s mismos. Primero, deben enlazarse en un objeto de programa. Puede enlazar uno o ms objetos de mdulo
entre s para crear un objeto de programa (tipo *PGM) o un programa de servicio
(tipo *SRVPGM). Esta posibilidad de combinar objetos de mdulo le permite:

|
|

Volver a utilizar fragmentos de cdigo dando como resultado programas ms


pequeos.

|
|
|

Compartir cdigo entre varios programas y, por consiguiente, evitar que se produzcan errores en otras partes del programa general mientras se actualiza una
seccin compartida.

|
|

Combinar lenguajes para seleccionar el que mejor lleva a cabo la tarea que se
tienen que realizar.

|
|

Un objeto de mdulo puede constar de uno o varios procedimientos ILE. .* The


number of procedures allowed is language dependent.

|
|

El mandato Crear mdulo COBOL (CRTCBLMOD) crea uno o ms objetos de


mdulo a partir de instrucciones fuente ILE COBOL/400. Estos objetos de mdulo
Copyright IBM Corp. 1994, 1996

27

|
|
|
|
|
|
|
|
|
|
|
|

permanecen almacenados en la biblioteca designada hasta que se sustituyan o eliminen de forma explcita. Los objetos de mdulo se pueden enlazar ms tarde en
un objeto de programa ejecutable utilizando el mandato Crear programa
(CRTPGM) o en un programa de servicio utilizando el mandato Crear programa de
servicio (CRTSRVPGM). Los objetos de mdulo todava se encuentran en la
biblioteca despus de haber creado el objeto de programa o el programa de servicio. Para obtener ms informacin sobre la creacin de un objeto de programa a
partir de uno o ms objetos de mdulo, consulte el apartado Utilizacin del
mandato Crear programa (CRTPGM) en la pgina 73. Para obtener ms informacin sobre la creacin de un programa de servicio a partir de uno o ms objetos
de mdulo, consulte el Captulo 5, Creacin de un programa de servicio en la
pgina 101.

|
|
|
|
|
|

El mandato Crear programa COBOL enlazado (CRTBNDCBL) crea objeto(s) de


programa a partir de instrucciones fuente ILE COBOL/400 en un solo
paso.CRTBNDCBL crea objetos de mdulo; sin embargo, estos objetos de mdulo
se crean slo de forma temporal y no pueden volver a utilizarse. Cuando
CRTBNDCBL ha completado la creacin de objetos de programa, los objetos de
mdulo temporales se suprimen.

|
|
|

Para obtener ms informacin sobre la creacin de un objeto de programa en un


slo paso, consulte el apartado Utilizacin del mandato Crear COBOL enlazado
(CRTBNDCBL) en la pgina 76.

Cuando se crea un objeto de mdulo, ste puede contener:

Datos de depuracin

|
|
|
|

Los datos de depuracin son los datos necesarios para depurar un objeto de
programa utilizando el depurador fuente ILE. Estos datos se generan en base
a la opcin especificada en el parmetro DBGVIEW de los mandatos
CRTCBLMOD o CRTBNDCBL.

Procedimiento de entrada de programa (PEP)

|
|
|
|
|
|
|
|
|
|
|

Un procedimiento de entrada de programa es el cdigo generado por el


compilador que es el punto de entrada para un objeto de programa en una
llamada dinmica de programa. El control se pasa al PEP de un objeto de
programa cuando ste se llama utilizando una llamada dinmica de programa.
Es semejante al cdigo que se proporciona para el punto de entrada de un
programa OPM. EL PEP identifica el procedimiento ILE dentro de un objeto de
mdulo que debe ejecutarse en primer lugar cuando se llama a su objeto de
programa utilizando una llamada dinmica de programa. Cuando el compilador
ILE COBOL/400 crea un objeto de mdulo, se genera un PEP. Este PEP llama
al programa ILE COBOL/400 ms externo que se encuentra en la unidad de
compilacin.

|
|
|
|
|
|
|

Cuando se enlazan varios objetos de mdulo entre s para crear un objeto de


programa, debe especificarse qu objeto de mdulo tendr el PEP del objeto
de programa que se est creando. Esto se lleva a cabo identificando el objeto
de mdulo en el parmetro ENTMOD del mandato CRTPGM. El PEP de este
objeto de mdulo se convierte entonces en el PEP del objeto de programa.
Los PEP del resto de objetos de mdulo se suprimen lgicamente del objeto
de programa.

Procedimiento de entrada de usuario (UEP)

28

ILE COBOL/400 Gua del Programador

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Cuando el compilador ILE COBOL/400 crea un objeto de mdulo, el programa


ILE COBOL/400 ms externo que se encuentra en la unidad de compilacin es
el procedimiento de entrada de usuario. Durante una llamada dinmica de
programa, el UEP es el procedimiento ILE que obtiene el control del PEP.
Durante llamadas estticas de procedimiento entre procedimientos ILE de diferentes objetos de mdulo, el UEP recibe el control directamente.
Cdigo fuente COBOL A

Proced. ILE
A:
ID DIVISION.

\PGM A
PROGRAM-ID. A.

\MODULE A
\MODULE A

Proced. ILE
Z: Proc. compilacin

ID DIVISION.

CRTCBLMOD
Proced. ILE
A:
Proced. ILE
A:
PROGRAM-ID. Z.5

Proced. ILE
Z:
Proced. ILE
Z:
END PROGRAM Z.




END PROGRAM A.

Cdigo fuente COBOL B


\MODULE B

\MODULE B

Proc. compilacin

Proced. ILE
B:
CRTCBLMOD
Proced. ILE
B:
Proced. ILE B:
ID DIVISION.
5



PROGRAM-ID. B.

Proc. enlace

CRTPGM

Cdigo fuente COBOL C


\MODULE C

\MODULE C

Proc. compilacin

Proced. ILE
C:
CRTCBLMOD
Proced. ILE
C:
Proced. ILE
C:
ID DIVISION.
5



PROGRAM-ID. C.







END PROGRAM C.

Proced. ILE
D:

ID DIVISION.

\MODULE D

\MODULE D

PROGRAM-ID. D.

Proced. ILE
D:
Proced. ILE
D:
END PROGRAM D.
5

Figura 7. Creacin de objetos de mdulo utilizando el mandato CRTCBLMOD

|
|
|
|
|
|
|
|
|
|
|
|

En la Figura 7, *PGM A se crea y se designa *MODULE A como el objeto de


mdulo que contiene el punto de entrada para el objeto de programa. El PEP para
*MODULE A llama al Procedimiento ILE A. El PEP para *MODULE A tambin
pasa a ser el PEP para *PGM A as el PEP para *PGM A llama al Procedimiento
ILE A. El UEP para *PGM A es tambin el Procedimiento ILE A. *MODULE B,
*MODULE C y *MODULE D tambin tienen PEP pero *PGM A hace caso omiso de
ellos. Adems, el Procedimiento Z de ILE slo puede llamarse desde el procedimiento A de ILE. EL Procedimiento Z de ILE no es visible para los Procedimientos B, C ni D de ILE ya que se encuentran en objetos de mdulo separados
y el Procedimiento Z de ILE no es el programa COBOL ms externo en el
*MODULE A. Los Procedimientos A, B, C y D de ILE s que pueden llamarse entre
s. No se permite la recurrencia.

|
|

Cada procedimiento de declaracin de un programa fuente ILE COBOL/400 genera


un procedimiento ILE separado.

Cada programa COBOL anidado genera un procedimiento ILE separado.

Captulo 3. Compilacin de programas fuente en objetos de mdulo

29

|
|

Un objeto de mdulo puede tener exportaciones e importaciones de mdulo asociados a l.

|
|
|
|
|
|
|
|

Una exportacin de mdulo es el nombre de un procedimiento o elemento de


datos que otros objetos ILE pueden utilizar mediante el proceso de enlace. La
exportacin de mdulo se identifica por su nombre y el tipo que tiene asociado:
procedimiento o datos. El mbito de las exportaciones de mdulo abarca: el objeto
de programa y el grupo de activacin.No todos los nombres que se exportan al
objeto de programa se exportan al grupo de activacin. El compilador ILE
COBOL/400 crea exportaciones de mdulo para cada una de las siguientes construcciones de lenguaje de programacin COBOL:

|
|
|
|
|

Un nombre de procedimiento correspondiente al programa ILE COBOL/400


ms externo de una unidad de compilacin.
Un nombre de procedimiento de cancelacin correspondiente al programa ILE
COBOL/400 ms externo de una unidad de compilacin.
Una exportacin dbil de un archivo EXTERNAL o de datos EXTERNAL.

|
|
|
|
|
|

Una importacin de mdulo es la utilizacin de o referencia al nombre de un


procedimiento o elemento de datos no definido en un objeto de mdulo al que se
hace referencia. La importacin de mdulo se identifica por su nombre y el tipo
que tiene asociado, o bien procedimiento o datos. El compilador ILE COBOL/400
crea importaciones de mdulo para cada una de las siguientes construcciones de
lenguaje de programacin COBOL:

|
|
|
|
|
|
|
|
|
|

Un nombre de procedimiento correspondiente al programa ILE COBOL/400


que se llama utilizando una llamada esttica de procedimiento.
Un nombre de procedimiento de cancelacin correspondiente a un programa
ILE COBOL/400 que se llama utilizando una llamada esttica de procedimiento.
Una importacin dbil de un archivo EXTERNAL o de datos EXTERNAL.
Un nombre de procedimiento correspondiente a un programa ILE COBOL/400
establecido mediante la instruccin SET elemento-puntero-procedimiento TO
ENTRY nombre-procedimiento, donde el nombre-procedimiento va a interpretarse como un procedimiento ILE.

|
|
|
|

La importacin de mdulo se genera cuando el procedimiento destino no est definido en el objeto de mdulo al que hace referencia. Una importacin dbil de elementos de datos se genera cuando se hace referencia a elementos de datos del
programa ILE COBOL/400

Utilizacin del mandato Crear mdulo COBOL (CRTCBLMOD)

|
|
|
|
|
|

Para compilar instrucciones fuente ILE COBOL/400 en uno o ms objetos de


mdulo, debe utilizar el mandato CRTCBLMOD. Este mandato arranca el compilador ILE COBOL/400 que crea objeto(s) de mdulo en base a las instrucciones
ILE COBOL/400 del miembro fuente. El mandato CRTCBLMOD se puede utilizar
de forma interactiva, en modalidad de proceso por lotes o desde un programa CL
del sistema AS/400.

|
|

Nota: Para crear un objeto de mdulo con el mandato CRTCBLMOD debe tener
autorizacin para utilizar el mandato.

30

ILE COBOL/400 Gua del Programador

|
|
|

Si se utiliza el formato 2 de la instruccin COPY en el programa para acceder a


archivos descritos externamente, el sistema operativo proporciona al programa
compilado informacin sobre los archivos descritos externamente.

Si el compilador ILE COBOL/400 se detiene, se emitir el mensaje LNC9001

|
|

Se ha producido un error en la compilacin.


nombre-mdulo no se ha creado.

|
|

Puede utilizar un programa de lenguaje de control que supervise esta excepcin


utilizando el mandato Supervisar mensaje (MONMSG) de CL.

|
|
|
|

Utilizacin de pantallas de solicitud con el mandato CRTCBLMOD


Se puede entrar el mandato CRTCBLMOD utilizando las pantallas de solicitud.
Para entrar parmetros del mandato con este mtodo, teclee CRTCBLMOD y pulse
F4.

|
|
|
|
|
|
|

Todos los parmetros de la pantalla muestran un valor por omisin. Teclee sobre
los elementos para establecer diferentes opciones o valores. Si no est seguro
sobre cmo establecer un valor de un parmetro, teclee un signo de interrogacin
(?) en la primera posicin del campo y pulse Intro, o F4 (Solicitud), para recibir
informacin ms detallada. El signo de interrogacin debe ir seguido de un blanco.
Si ha entrado algunos parmetros antes de pedir la pantalla de solicitud, se
visualizarn los valores que haya entrado para estos.

|
|

Para obtener la descripcin de los parmetros del mandato CRTCBLMOD, consulte


el apartado Parmetros del mandato CRTCBLMOD en la pgina 33.

Captulo 3. Compilacin de programas fuente en objetos de mdulo

31

Sintaxis del mandato CRTCBLMOD

Mandato CRTCBLMOD - Formato

|
|
|
|
|

55CRTCBLMOD5

\CURLIB/ \PGMID

MODULE(nombre-biblioteca/nombre-mdulo)

|
|
|

55

\LIBL/ QCBLLESRC

\MODULE

SRCFILE(\CURLIB/nombre-archivo-fuente) SRCMBR(nombre-miembro-archivo-fuente)
nombre-biblioteca/

|
|
|

55

\PRINT

3

\SRCMBRTXT

OUTPUT(\NONE) GENLVL(valor-nivel-gravedad) TEXT(\BLANK)


'descripcin-texto'

|
|
|
|
|

55
OPTION( Detalles de OPTION )
\NOVARCHAR \NODATETIME \NOPICXGRAPHIC \NOFLOAT

CVTOPT()
\VARCHAR \DATETIME \PICXGRAPHIC \FLOAT
\NOPICGGRAPHIC
\PICGGRAPHIC

Trabajo: B,I

Pgm: B,I

REXX: B,I

Exec

55

\NOMAX 3

\STMT

\NONE

MSGLMT(nmero-mximonivel-gravedad) DBGVIEW(\SOURCE) OPTIMIZE(\BASIC)


\LIST
\FULL
\ALL
\NONE
55

\NOFIPS \NOOBSOLETE

\DFRWRT \UNDSPCHR \ACCUPDALL

FLAGSTD() EXTDSPOPT()
\MINIMUM \OBSOLETE
\NODFRWRT \NOUNDSPCHR \ACCUPDNE
\INTERMEDIATE
\HIGH
55


\YES

\LIBCRTAUT

FLAG(nivel-gravedad) REPLACE(\NO) AUT(\ALL)


\CHANGE
\USE
\EXCLUDE
nombre-lista-autorizaciones

|
|
|

55

\PGM

\CURRENT

LINKLIT(\PRC) TGTRLS(\PRV)
nivel-release
55

\HEX

\JOBRUN

SRTSEQ(\JOB) LANGID(\JOB)
\JOBRUN
nombre-identificador-idioma
\LANGIDUNQ
\LANGIDSHR
\LIBL/nombre-tabla-sec-ordenacin
\CURLIB/
nombre-biblioteca/

|
|
|

55%

\PEP

ENBPFRCOL(\ENTRYEXIT)
\FULL

32

ILE COBOL/400 Gua del Programador

Mandato CRTCBLMOD - Formato (continuacin)


Detalles de OPTION:
\SOURCE
\SRC \NOXREF \GEN \NOSEQUENCE \NOVBSUM \NONUMBER \NOMAP \NOOPTIONS
5
\NOSOURCE \XREF \NOGEN \SEQUENCE \VBSUM \NUMBER \MAP \OPTIONS
\NOSRC
\LINENUMBER
\QUOTE \NOSECLVL \PRTCORR \MONOPRC \RANGE \NOUNREF \NOSYNC \NOCRTF
55
\APOST \SECLVL \NOPRTCORR \NOMONOPRC \NORANGE \UNREF \SYNC \CRTF
\NODUPKEYCHK \NOINZDLT \NOBLK \STDINZ \NODDSFILLER \NOIMBEDERR \STDTRUNC
55
\DUPKEYCHK \INZDLT \BLK \NOSTDINZ \DDSFILLER \IMBEDERR \NOSTDTRUNC

|
|

\NOCHGPOSSGN \NOEVENTF
5
\CHGPOSSGN \EVENTF

Parmetros del mandato CRTCBLMOD


En este apartado encontrar una descripcin de los parmetros del mandato CRTCBLMOD. Los parmetros y opciones se describen en el orden en que aparecen en las pantallas de solicitud.
Los valores por omisin se visualizan primero y aparecen subrayados.
Todos los nombres de objeto especificados para el mandato CRTCBLMOD deben seguir el convenio de
denominacin de AS/400: los nombres deben tener 10 caracteres de longitud, estar compuestos por
caracteres alfanumricos, siendo el primero un carcter alfabtico; o pueden ser nombres entrecomillados, de ocho caracteres de longitud, incluidos entre comillas.
Puede especificar varias opciones de compilador utilizando el parmetro OPTION del mandato
CRTCBLMOD o desde el programa fuente utilizando la instruccin PROCESS. Cualquier opcin que se
especifique en la instruccin PROCESS altera temporalmente las opciones correspondientes del mandato
CRTCBLMOD.

Parmetro MODULE:
Especifica el nombre de mdulo y el nombre
de biblioteca para el objeto de mdulo que se
est creando. EL nombre de mdulo y el
nombre de biblioteca deben cumplir las
normas del convenio de denominacin de
AS/400. Los valores posibles son:
*PGMID
EL nombre del mdulo se toma del
prrafo PROGRAM-ID del programa
fuente ILE COBOL/400 ms externo de la
unidad de compilacin.

nombre-mdulo
Entre un nombre para identificar el
mdulo ILE COBOL/400 compilado. Si se
especifica un nombre de mdulo para
este parmetro y se compila una
secuencia de programas fuente (varias
unidades de compilacin en un nico
miembro de archivo fuente), el primer
mdulo de la secuencia utiliza este

nombre; el resto de mdulos utilizan el


nombre especificado en el prrafo
PROGRAM-ID del correspondiente programa fuente ILE COBOL/400 ms
externo de la unidad de compilacin.
Los posibles valores para la biblioteca son:
*CURLIB
El objeto de mdulo creado se almacena
en la biblioteca actual. Si no se ha asignado una biblioteca como biblioteca
actual, se utiliza QGPL.

nombre-biblioteca
Entre el nombre de la biblioteca donde se
va a almacenar el objeto de mdulo
creado.
Parmetro SRCFILE:
Especifica el nombre de la biblioteca y el
archivo fuente que contiene el cdigo fuente
ILE COBOL/400 que se va a compilar. La

Captulo 3. Compilacin de programas fuente en objetos de mdulo

33

longitud de registro de este archivo fuente


debera ser 92. Los valores posibles son:

*PRINT
Se genera un listado de compilador.

QCBLLESRC
Especifica que el archivo fuente,
QCBLLESRC, contiene el cdigo fuente
ILE COBOL/400 que se va a compilar.

*NONE
No se genera un listado de compilador.

nombre-archivo-fuente
Entre el nombre del archivo fuente que
contiene el cdigo fuente ILE COBOL/400
que se va a compilar.
Los posibles valores para la biblioteca son:
*LIBL
Se busca en la lista de bibliotecas, la
biblioteca donde se ubica el archivo
fuente.
*CURLIB
Se utiliza la biblioteca actual.Si no se ha
asignado una biblioteca como biblioteca
actual, se utiliza QGPL.

Los valores posibles son:

nombre-biblioteca
Entre el nombre de la biblioteca donde se
ubica el archivo fuente.

nivel-gravedad
Especifique un nmero de uno o dos
dgitos, de 0 a 30. Este nmero es el nivel
de gravedad que se desea utilizar para
determinar si un objeto de mdulo se va a
crear o no. No se crearn objetos de
mdulo si se genera un error con un nivel
de gravedad igual o mayor que este nivel
de gravedad.

Parmetro SRCMBR:
Especifica el nombre del miembro que contiene el cdigo fuente ILE COBOL/400 que se
va a compilar.Se puede especificar este parmetro slo si el archivo fuente al que se hace
referencia en el parmetro SCRFILE es un
archivo de base de datos. Los valores posibles son:
*MODULE
Se utiliza el miembro de archivo fuente
cuyo nombre es igual al nombre de
mdulo especificado en el parmetro
MODULE.
Si no especifica un nombre de mdulo
para el parmetro MODULE, se utiliza el
primer miembro de archivo fuente de la
base de datos.

nombre-miembro-archivo-fuente
Entre el nombre del miembro que contiene el cdigo fuente ILE COBOL/400.
Parmetro OUTPUT:
Especifica si se genera o no se genera el
listado del compilador. Los valores posibles
son:

34

Parmetro GENLVL:
Especifica el nivel de gravedad que determina
si se va a crear un objeto de mdulo. El nivel
de gravedad corresponde al nivel de gravedad
de los mensajes que se generan durante la
compilacin. Este parmetro se aplica de
modo individual a cada una de las unidades
de compilacin de un miembro de archivo
fuente. El resto de unidades de compilacin
del miembro del archivo fuente tambin se
compilarn aunque se produzcan anomalas
en una unidad de compilacin anterior.

ILE COBOL/400 Gua del Programador

30 No se crea ningn objeto de mdulo si se


genera un error cuyo nivel de gravedad
sea igual o mayor que 30.

Parmetro TEXT:
Le permite entrar texto que describe brevemente el mdulo y su funcin.
*SRCMBRTXT
Para describir el objeto de mdulo se
utiliza el mismo texto que describe el
miembro del archivo de base de datos
que contiene el cdigo fuente ILE
COBOL/400. Si el fuente proviene de un
dispositivo o archivo incorporado, especificar *SRCMBRTXT tiene el mismo efecto
que especificar *BLANK.
*BLANK
No se especifica texto.

descripcin-texto
Entre texto que describa brevemente el
mdulo y su funcin.El texto puede tener
un mximo de 50 caracteres SBCS de
longitud y debe ir incluido entre

apstrofos.Los apstrofos no forman parte


de la serie de 50 caracteres.
Parmetro OPTION:
Especifica las opciones para utilizar cuando
se compila el cdigo fuente ILE COBOL/400.
Las opciones que se especifican en la instruccin PROCESS de un programa fuente ILE
COBOL/400 alteran temporalmente las
opciones correspondientes del parmetro
OPTION.
Los valores posibles para el parmetro
OPTION son:
*SOURCE o *SRC
El compilador genera un listado fuente en
el que se incluyen todos los mensajes de
error producidos durante la compilacin y
el programa fuente ILE COBOL/400.
*NOSOURCE o *NOSRC
El compilador no genera la parte del
fuente del listado. Si no necesita un
listado fuente debera utilizar esta opcin,
ya que entonces la compilacin se realizar ms rpido.
*NOXREF
El compilador no genera un listado de
referencias cruzadas para el programa
fuente ILE COBOL/400.
*XREF
El compilador genera un listado de referencias cruzadas para el programa fuente.
*GEN
El compilador crea un objeto de mdulo
una vez que se ha compilado el fuente
ILE COBOL/400.

No se producen errores de secuencia si


se ha especificado la opcin
*LINENUMBER.
*NOVBSUM
No se imprime el recuento de utilizacin
de verbos.
*VBSUM
Se imprime el recuento de utilizacin de
verbos.
*NONUMBER
Los nmeros de secuencia del archivo
fuente se utilizan para nmeros de referencia.
*NUMBER
Los nmeros de secuencia proporcionados por el usuario (columnas 1 a 6) se
utilizan para nmeros de referencia.
*LINENUMBER
Se utilizan los nmeros de secuencia
creados por el compilador para nmeros
de referencia. Esta opcin combina el
cdigo fuente del programa ILE
COBOL/400 y el cdigo fuente introducido
mediante las instrucciones COPY en una
secuencia numerada consecutivamente.
Utilice esta opcin si especifica la opcin
para sealar con distintivos FIPS (Federal
Information Processing Standards).
*NOMAP
El compilador no lista el mapa de la Data
Division.
*MAP
El compilador lista el mapa de la Data
Division.

*NOGEN
El compilador no crea un objeto de
mdulo una vez que se ha compilado el
programa fuente ILE COBOL/400. Puede
especificar esta opcin si slo desea mensajes de error o listados.

*NOOPTIONS
Las opciones que se encuentran en vigor
no se listan para esta compilacin.

*NOSEQUENCE
No se comprueba si existen errores de
secuencia en los nmeros de referencia.

*QUOTE
Especifica que el delimitador comillas (")
se utiliza para literales no numricos, literales hexadecimales y literales booleanos.
Esta opcin tambin especifica que el
valor de la constante figurativa QUOTE
tiene el valor EBCDIC de unas comillas.

*SEQUENCE
Se comprueba si existen errores de
secuencia en los nmeros de referencia.

*OPTIONS
Las opciones que se encuentran en vigor
se listan para esta compilacin.

Captulo 3. Compilacin de programas fuente en objetos de mdulo

35

*APOST
Especifica que el delimitador apstrofo (')
se utiliza para literales no numricos, literales hexadecimales y literales booleanos.
Esta opcin tambin especifica que el
valor de la constante figurativa QUOTE
tiene el valor EBCDIC de un apstrofo.
*NOSECLVL
No se lista el texto de mensajes de
segundo nivel para esta compilacin.
*SECLVL
En la seccin de mensajes del listado del
compilador, se lista el texto de mensajes
de segundo nivel para esta compilacin
junto con el texto de errores de primer
nivel.
*PRTCORR
Las lneas de comentarios se insertan en
el listado de compilador indicando qu
elementos primarios se incluyeron como
resultado de la utilizacin de la expresin
CORRESPONDING.
*NOPRTCORR
Las lneas de comentario no se insertan
en el listado del compilador cuando se
utiliza la expresin CORRESPONDING.
*MONOPRC
El nombre-programa (literal o palabra) que
se encuentra en el prrafo PROGRAM-ID,
las instrucciones CALL, CANCEL o SET
ENTRY y la cabecera END PROGRAM se
convierten a caracteres en maysculas y
se hacen cumplir las normas para la formacin del nombre-programa.
*NOMONOPRC
El nombre-programa (literal o palabra) que
se encuentra en el prrafo PROGRAM-ID,
las instrucciones CALL, CANCEL o SET
ENTRY y la cabecera END PROGRAM no
se convierten a caracteres en maysculas
y no se hacen cumplir las normas para la
formacin del nombre-programa. Esta
opcin permite que se utilicen en el CALL
destino caracteres especiales no permitidos para la norma COBOL.
*RANGE
En el momento de la ejecucin, se comprueba si los subndices se encuentran
entre los rangos correctos pero los rangos

36

ILE COBOL/400 Gua del Programador

de ndice no se comprueban. Tambin se


comprueban las operaciones de subserie
generadas por el compilador y la modificacin de referencias.
*NORANGE
Los rangos no se comprueban en el
momento de la ejecucin.
Nota: La opcin *RANGE genera un
cdigo para la comprobacin de
rangos de subndices. Por
ejemplo, se asegura de que no se
est intentando acceder al elemento 21 de una matriz de 20 elementos.
La opcin *NORANGE no genera
un cdigo para comprobar los
rangos de subndice. Como resultado, la opcin *NORANGE
genera un cdigo de ejecucin
ms rpido.
*NOUNREF
Los elementos de datos no referenciados
no se incluyen en el mdulo compilado.
Esto reduce la cantidad del almacenamiento utilizado, de forma que puede
compilarse un programa ms grande. No
puede verse ni asignarse a un elemento
de datos no referenciado durante la depuracin cuando se selecciona la opcin
*NOUNREF. Los elementos de datos no
referenciados seguirn apareciendo en los
listados de referencias cruzadas al especificar OPTION (*XREF).
*UNREF
Los elementos de datos no referenciados
se incluyen en el mdulo compilado.
*NOSYNC
Se comprueba slo la sintaxis de la clusula SYNCHRONIZED.
*SYNC
EL compilador compila la clusula
SYNCHRONIZED. La clusula
SYNCHRONIZED hace que los elementos
de datos se alineen de tal forma que el
extremo derecho (menos significativo) se
encuentre en el lmite normal del almacenamiento. El lmite normal de almacenamiento es el siguiente al lmite de 4
bytes, 8 bytes o 16 bytes ms cercano
segn la longitud y el tipo de datos que se

almacenen. Para conseguir este alineamiento se reserva almacenamiento


suplementario contiguo al elemento sincronizado. Cada uno de los elementos de
datos primarios que se describen como
SYNCHRONIZED se alinea con el lmite
normal de almacenamiento que corresponde a su asignacin de almacenamiento de datos.
*NOCRTF
Los archivos de disco que no se encuentran disponibles cuando se efecta una
operacin OPEN no se crean de forma
dinmica.
*CRTF
Los archivos de disco que no se encuentran disponibles cuando se efecta una
operacin OPEN se crean de forma dinmica.
Nota: La longitud de registro mxima
para un archivo que se va a crear
dinmicamente es 32 766. Los
archivos indexados no se crearn
dinmicamente aunque se haya
especificado la opcin *CRTF.
*NODUPKEYCHK
No comprueba la existencia de claves primarias duplicadas para archivos
INDEXED.
*DUPKEYCHK
Comprueba la existencia de claves primarias duplicadas para archivos INDEXED.
*NOINZDLT
Los archivos relativos con acceso secuencial no se inicializan con registros suprimidos durante la operacin CLOSE si
stos se han abierto para OUTPUT. El
lmite de registros se determina mediante
el nmero de registros grabados durante
la operacin OPEN OUTPUT. Las operaciones OPEN siguientes slo permiten
el acceso hasta el lmite antes indicado.
*INZDLT
Los archivos relativos con acceso secuencial se inicializan con registros suprimidos
durante la operacin CLOSE si stos se
abrieron para OUTPUT. Los registros
activos de los archivos no se ven afectados. Para las operaciones OPEN

siguientes, el lmite de registro se define


como el tamao de archivo.
*NOBLK
El compilador permite la agrupacin en
bloques slo de archivos de acceso
SEQUENTIAL sin la instruccin START.
La clusula BLOCK CONTAINS, si se
especifica, se hace caso omiso excepto
para los archivos de cintas.
*BLK
Cuando se utiliza *BLK y se ha especificado una clusula BLOCK CONTAINS, el
compilador permite la agrupacin en
bloques para archivos de acceso
DYNAMIC y archivos de acceso
SEQUENTIAL con una instruccin
START.No se permite la agrupacin en
bloques para archivos RELATIVE abiertos
para operaciones de salida. La clusula
BLOCK CONTAINS contiene el nmero
de registros que van a agruparse en
bloques.
Cuando *BLK se utiliza y no se especifica
una clusula BLOCK CONTAINS, el compilador permite la agrupacin en bloques
slo de archivos de acceso SEQUENTIAL
sin instruccin START. El sistema operativo determina el nmero de registros
que van a agruparse en bloques.
*STDINZ
Para aquellos elementos que no tienen la
clusula VALUE, el compilador inicializa
los elementos de datos a los valores por
omisin del sistema.
*NOSTDINZ
Par aquellos elementos que no tienen la
clusula VALUE, el compilador no
inicializa los elementos de datos a los
valores por omisin del sistema.
*NODDSFILLER
Si no se encuentran campos coincidentes
con una instruccin COPY DDS, no se
generan descripciones de campo.
*DDSFILLER
Si no se encuentran campos coincidentes
con una instruccin COPY DDS, siempre
se crea una nica descripcin de campo
FILLER de caracteres, "07 FILLER PIC
X".

Captulo 3. Compilacin de programas fuente en objetos de mdulo

37

*NOIMBEDERR
Los mensajes de error no se incluyen en
la seccin del listado fuente del listado del
compilador. Los mensajes de error nicamente aparecen en la seccin de mensajes de error del listado del compilador.
*IMBEDERR
Los mensajes de error de primer nivel se
incluyen en la seccin de listado fuente
del listado del compilador, inmediatamente
despus de la lnea donde se ha producido el error. Los mensajes de error
tambin aparecen en la seccin de mensajes de error del listado del compilador.
*STDTRUNC
Esta opcin slo se aplica a los datos
USAGE BINARY. Cuando se selecciona
*STDTRUNC, los datos USAGE BINARY
se truncan en el nmero de dgitos que se
indica en la clusula PICTURE del campo
receptor BINARY.
*NOSTDTRUNC
Esta opcin slo se aplica a los datos
USAGE BINARY. Cuando se selecciona
*NOSTDTRUNC, los campos receptores
BINARY se truncan nicamente en los
lmites de media palabra, palabra completa o palabra doble. Los campos de
envo BINARY tambin se manejan como
medias palabras, palabras completas o
palabras dobles. Por consiguiente, el contenido binario completo del campo es significativo. Asimismo, la instruccin
DISPLAY convertir todo el contenido de
un campo BINARY, sin truncarlo.
Nota: *NOSTDTRUNC no tiene efecto
en la clusula VALUE.
*NOCHGPOSSGN
Se utiliza el hexadecimal F como el signo
positivo por omisin para datos numricos
empaquetados y con zona.El hexadecimal
F es el valor por omisin del sistema para
el sistema operativo OS/400.
*CHGPOSSGN
Se utiliza el hexadecimal C como el signo
positivo por omisin para datos numricos
empaquetados y con zona. Esto se aplica
a todos los resultados de las instrucciones
MOVE, ADD, SUBTRACT, MULTIPLY,

38

ILE COBOL/400 Gua del Programador

DIVIDE, COMPUTE e INITIALIZE, as


como a los resultados de la clusula
VALUE.

|
|
|
|
|

|
|
|
|

*NOEVENTF
No crear un Archivo de eventos para su
utilizacin con Entorno de Desarrollo
Coorperativo CODE/400 (CODE/400).
CODE/400 utiliza este archivo para proporcionar informacin sobre el error integrada con el editor CODE/400. Un
Archivo de eventos suele crearse al crear
un mdulo o programa desde CODE/400.
*EVENTF
Crear un Archivo de eventos para su utilizacin con CODE/400. El Archivo de
eventos se crea como un miembro en el
archivo EVFEVENT de la biblioteca en la
que va a almacenarse el mdulo o programa que se ha creado. Si no existe el
archivo EVFEVENT, ste se crea de
forma automtica. El nombre de miembro
del Archivo de eventos es el mismo que el
del objeto que se crea.
CODE/400 utiliza este archivo para proporcionar informacin sobre el error integrada con el editor CODE/400. Un
Archivo de eventos suele crearse al crear
un mdulo o programa desde CODE/400.

Parmetro CVTOPT:
Especifica la forma en que el compilador
maneja los tipos de campo de fecha, hora e
indicacin de hora, el tipo de campo DBCS,
|
los tipos de campo de caracteres de longitud
|
variable y los tipos de campo de coma flo|
tante que han pasado de archivos descritos
externamente al programa mediante COPY
DDS. Los valores posibles son:
*NOVARCHAR
Los campos de longitud variable se
declaran como campos FILLER.
*VARCHAR
Los campos de longitud variable se
declaran como elemento de grupo y son
accesibles para el programa fuente ILE
COBOL/400.
*NODATETIME
Los tipos de datos de fecha, hora e indicacin de hora se declaran como campos
FILLER.

*DATETIME
Los tipos de datos de fecha, hora e indicacin de hora se declaran como campos
de tipo carcter y son accesibles para el
programa fuente COBOL.
*NOPICXGRAPHIC
Los tipos de datos grficos DBCS se
declaran como campos FILLER.
*PICXGRAPHIC
Los tipos de datos grficos DBCS de longitud fija se declaran como campos
alfanumricos de longitud fija y son accesibles para el programa fuente ILE
COBOL/400.
Cuando la opcin *VARCHAR tambin se
utiliza, los tipos de datos grficos DBCS
de longitud fija se declaran como elementos de grupo de longitud fija y son
accesibles para el programa fuente ILE
COBOL/400

|
|

*PICGGRAPHIC
Los tipos de datos grficos DBCS de longitud fija se declaran como campos tipo G
de longitud fija y son accesibles para el
programa fuente ILE COBOL/400.
Cuando tambin se utiliza la opcin
*VARCHAR, los tipos de datos grficos
DBCS de longitud variable se declaran
como elementos de grupo de longitud fija
(formados por un campo numrico
seguido de un campo tipo G) y son accesibles para el programa fuente ILE
COBOL/400.
*NOPICGGRAPHIC
Los tipos de datos grficos DBCS se
declaran como campos FILLER.
*NOPICGGRAPHIC aparecer como
*NOPICXGRAPHIC en el listado.

|
|
|
|

*NOFLOAT
Los tipos de datos de coma flotante se
declaran como campos FILLER con un
USAGE binario.

|
|
|
|
|
|
|

*FLOAT
Los tipos de datos de coma flotante se
transfieren al programa con los nombres
de las DDS y un USAGE de COMP-1
(precisin simple) o COMP-2 (precisin
doble). Los campos son accessibles para
el programa fuente ILE COBOL/400.

Parmetro MSGLMT:
Especifica el nmero mximo de mensajes de
un nivel de gravedad de error determinado
que pueden producirse para cada unidad de
compilacin antes de que la compilacin se
detenga. Tan pronto como la unidad de compilacin alcance el nmero mximo, la compilacin se detiene para todo el miembro fuente.
Por ejemplo, si se especifica 3 para el nmero
mximo de mensajes y 20 para el nivel de
gravedad de error, la compilacin se detendr
si se producen tres o ms errores cuyo nivel
de gravedad sea 20 o superior. Si ningn
mensaje iguala o supera el nivel de gravedad
de error determinado, la compilacin continuar haciendo caso omiso del nmero de
errores que se produzcan.

nmero-de-mensajes
Especifica el nmero mximo de mensajes. Los valores posibles son:
*NOMAX
La compilacin continua hasta que
termine normalmente haciendo caso
omiso del nmero de errores que se
produzcan.

nmero-mximo
Especifica el nmero mximo de mensajes que pueden producirse con el
nivel de gravedad de error especificado o con un nivel superior antes de
que se detenga la compilacin. El
rango vlido es 0-9999.
gravedad-lmite-mensaje
Especifica el nivel de gravedad de error
que se utiliza para determinar si la compilacin va a detenerse o no. Los valores
posibles son:
30 La compilacin se detiene si el
nmero de errores cuyo nivel de gravedad sea 30 o superior excede el
nmero mximo de mensajes especificado.

nivel-gravedad-error
Entre un nmero de uno o dos dgitos,
de 0 a 30, para indicar el nivel de gravedad que desea utilizar para determinar si detener o no la compilacin.
La compilacin se detiene si el
nmero de errores con este nivel de

Captulo 3. Compilacin de programas fuente en objetos de mdulo

39

gravedad o superior excede el nmero


mximo de mensajes especificado.
Parmetro DBGVIEW:
Especifica opciones que controlan las vistas
del programa fuente o listado generado que
se encuentran disponibles para depurar el
mdulo compilado. Los valores posibles son:
*STMT
El mdulo compilado puede depurarse utilizando nombres simblicos y nmeros de
instruccin.
*SOURCE
El miembro fuente primario, as como los
miembros fuente copiados que se
incluyeron mediante instrucciones COPY,
tendrn vistas fuente disponibles para
depurar el mdulo compilado. Estas
vistas slo estn disponibles si el
miembro fuente primario y los miembros
fuente copiados provienen de archivos
fuente de bases de datos locales. No
modifique ni suprima miembros durante el
perodo de tiempo comprendido entre la
compilacin y la depuracin.
*LIST
Una vista de listado, equivalente al listado
de compilador de archivos en spool,
estar disponible para la depuracin del
mdulo compilado. Esta opcin aumenta
el tamao del mdulo compilado, sin
afectar el rendimiento de la ejecucin del
mdulo compilado.
Las vistas de listado se ven afectadas por
las opciones de compilador especificadas
en el parmetro OPTION cuando se
compila el mdulo. Por ejemplo,
OPTION(*XREF) hace que se incluya una
tabla de referencias cruzadas en la vista
de listado as como al archivo en spool.
Las vistas de listado pueden generarse
haciendo caso omiso de la procedencia
de los miembros fuente primarios y de los
miembros fuente copiados. Las vistas de
listado no se ven afectadas por las modificaciones ni las supresiones que se efecten en miembros fuente despus de la
compilacin.
*ALL
Equivale a especificar *STMT, *SOURCE
y *LIST a la vez.

40

ILE COBOL/400 Gua del Programador

*NONE
El mdulo compilado no puede depurarse.
Esto reduce el tamao del programa compilado, pero no afecta el rendimiento de la
ejecucin. Cuando se especifica esta
opcin, no es posible tener un vuelco con
formato.
Parmetro OPTIMIZE:
Especifica el nivel de optimizacin del mdulo.
Los valores posibles son:
*NONE
No se lleva a cabo optimizacin alguna en
el mdulo compilado. Cuando esta
opcin se utiliza, disminuye el tiempo de
compilacin. Esta opcin permite que se
visualicen y modifiquen variables durante
la depuracin.
*BASIC
Se lleva a cabo cierta optimizacin (slo a
nivel de agrupacin en bloques local) en
el mdulo compilado. Esta opcin permite
visualizar pero no modificar variables de
usuario durante la depuracin.
*FULL
Se lleva cabo una optimizacin completa
(a nivel global) en el mdulo compilado.
Esta optimizacin aumenta el tiempo que
se invierte en la compilacin pero tambin
genera el cdigo ms eficaz. Esta opcin
permite visualizar pero no modificar
variables de usuario durante la depuracin. Es posible que los valores
visualizados de las variables no sean sus
valores actuales. Es posible que algunas
variables no puedan visualizarse.
Nota: Haciendo caso omiso del nivel de
optimizacin escogido, se genera
toda las informacin para permitir
la optimizacin completa. El
usuario puede pasar los niveles de
optimizacin del objeto de mdulo
de *NONE a *FULL utilizando el
mandato CHGMOD sin tener que
volver a compilar el programa
fuente.
Parmetro FLAGSTD:
Especifica las opciones para distintivos FIPS.

(Seleccione la opcin *LINENUMBER para


asegurarse de que los nmeros de referencia
que se utilizan en los mensajes FIPS son
exclusivos.) Los valores posibles son:

*NOUNDSPCHR
Las instruccioness DISPLAY y ACCEPT
ampliadas slo manejan caracteres
visualizables.
Aunque debe utilizar esta opcin para
estaciones de pantalla conectadas a controladores 3174 y 3274 remotos, tambin
puede utilizarla para estaciones de trabajo
locales. Si no utiliza esta opcin, los
datos deben contener caracteres
visualizables exclusivamente. Si los datos
contienen valores inferiores al
hexadecimal 20, el resultado puede ser
imprevisible, desde errores de formato de
pantalla inesperados hasta errores graves.

*NOFIPS
El programa fuente ILE COBOL/400 no se
seala con un distintivo FIPS.
*MINIMUM
Distintivo FIPS para subconjunto mnimo y
superior.
*INTERMEDIATE
Distintivo FIPS para subconjunto intermedio y superior.
*HIGH
Distintivo FIPS para subconjunto superior.
*NOOBSOLETE
Los elementos de lenguaje obsoletos no
se sealan con distintivos.
*OBSOLETE
Los elementos de lenguaje obsoletos se
sealan con distintivos.
Parmetro EXTDSPOPT:
Especifica las opciones que se pueden utilizar
para las instrucciones ACCEPT y DISPLAY
ampliadas para E/S de estacin de trabajo.
Los valores posibles son:
*DFRWRT
Las instrucciones DISPLAY ampliadas se
guardan en un almacenamiento intermedio hasta que se encuentra una instruccin ACCEPT ampliada o hasta que el
almacenamiento intermedio se llena.
El contenido del almacenamiento intermedio se escribe en la pantalla cuando se
encuentra la instruccin ACCEPT
ampliada o cuando el almacenamiento
intermedio est lleno.
*NODFRWRT
Cada una de las instrucciones DISPLAY
ampliadas se llevan a cabo a medida que
se encuentra.
*UNDSPCHR
Las instrucciones ACCEPT y DISPLAY
ampliadas manejan caracteres
visualizables y no visualizables.

*ACCUPDALL
Todos los tipos de datos se visualizan
previamente en las instrucciones ACCEPT
ampliadas haciendo caso omiso de la
existencia de la expresin UPDATE.
*ACCUPDNE
Slo los datos editados numricos se
visualizan previamente en las instrucciones ACCEPT ampliados que no contienen la expresin UPDATE.
Parmetro FLAG:
Especifica el nivel de gravedad mnimo de
mensajes que aparecern en el listado del
compilador. Los valores posibles son:
0

Todos los mensajes aparecern en el


listado del compilador.

nivel-gravedad
Entre un nmero de uno o dos dgitos que
especifique el nivel de gravedad mnimo
de los mensajes que desea que aparezcan en el listado del compilador. Los
mensajes cuyo nivel de gravedad sea
igual o superior que el especificado aparecern en el listado del compilador.
Parmetro REPLACE:
Especifica si se crea un mdulo nuevo
cuando ya existe un mdulo con el mismo
nombre en la biblioteca especificada o presupuesta. Los valores posibles son:
*YES
Se crea un mdulo nuevo que sustituye
cualquier mdulo existente con el mismo
nombre en la biblioteca especificada o
presupuesta. El mdulo existente con el

Captulo 3. Compilacin de programas fuente en objetos de mdulo

41

mismo nombre que se encuentra en la


biblioteca especificada o presupuesta se
traslada a la biblioteca QRPLOBJ.
*NO
No se crea un mdulo nuevo si en la
biblioteca especificada o presupuesta ya
existe un mdulo con el mismo nombre.
El mdulo existente no se sustituye,
aparece un mensaje en pantalla y la compilacin se detiene.
Parmetro AUT:
Especifica la autorizacin que se da a los
usuarios que no tienen una autorizacin especfica sobre el objeto de mdulo, los usuarios
que no se encuentran en la lista de autorizaciones o aqullos cuyo grupo no tiene autorizacin especfica sobre el objeto de mdulo.
Se puede modificar la autorizacin para todos
lo usuarios, o para determinados usuarios
despus de crear el objeto de mdulo utilizando los mandatos GRTOBJAUT (Otorgar
autorizacin sobre objeto) o RVKOBJAUT
(Revocar autorizacin sobre objeto).
Los valores posibles son:
*LIBCRTAUT
La autorizacin pblica para el objeto se
toma de la palabra clave CRTAUT de la
biblioteca destino (la biblioteca que va a
contener el objeto de mdulo creado).
Este valor se determina cuando se crea el
objeto de mdulo. Si el valor CRTAUT
para la biblioteca se modifica despus de
haber creado el objeto de mdulo, el
nuevo valor NO afecta a ninguno de los
objetos existentes.
*ALL
Proporciona autorizacin para realizar
todas las operaciones en el objeto de
mdulo excepto aquellas limitadas al propietario o controladas por la autoridad de
gestin de la lista de autorizaciones.El
usuario puede controlar la existencia del
objeto de mdulo, especificar su seguridad, modificarlo y realizar funciones
bsicas sobre ste, pero no puede transferir su propiedad.
*CHANGE
Proporciona autorizacin sobre todos los
datos y autorizacin para realizar todas

42

ILE COBOL/400 Gua del Programador

las operaciones en el objeto de mdulo


excepto aquellas limitadas al propietario o
controladas por la autorizacin sobre
objeto y la autorizacin de gestin de
objetos. El usuario puede modificar el
objeto y realizar funciones bsicas sobre
ste.
*USE
Proporciona autorizacin operativa sobre
objetos y autorizacin de lectura; autorizacin para realizar operaciones bsicas
en el objeto de mdulo. El usuario puede
realizar operaciones bsicas sobre el
objeto pero no puede modificarlo.
*EXCLUDE
El usuario no puede acceder al objeto de
mdulo.

nombre-lista-autorizacin
El nombre de una lista de autorizaciones
de usuario y autorizaciones a las que se
aade el mdulo.El objeto de mdulo se
protege con esta lista de autorizaciones y
la autorizacin pblica para el objeto de
mdulo se establece en *AUTL. La lista
de autorizaciones debe existir en el
sistema cuando se emite el mandato
CRTCBLMOD. Utilice el mandato Crear
lista de autorizaciones (CRTAUTL) para
crear una lista de autorizaciones propia.
Parmetro LINKLIT:
Especifica el tipo de enlace para el destino
externo de CALL/CANCEL 'literal' y el destino
de SET ENTRY. Puede alterar temporalmente esta opcin para las listas de destinos externos de CALL/CANCEL 'literal' y de
SET ENTRY especificando la instruccin
siguiente en el prrafo SPECIAL-NAMES:
LINKAGE TYPE IS nombre-implementador FOR lista-destinos.

Los valores posibles para LINKLIT son:


*PGM
El destino para CALL/CANCEL o SET
ENTRY es un objeto de programa.
*PRC
El destino para CALL/CANCEL o SET
ENTRY es un procedimiento ILE.
Parmetro TGTRLS:
Especifica el entorno del Release de destino
para el mdulo que se est creando.

|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

En los ejemplos que aparecen a continuacin,


para especificar el release se utiliza el formato
VxRxMx, en el que Vx es la versin, Rx el
release y Mx el nivel de modificacin. Por
ejemplo, V2R3M0 es la versin 2, release 3,
nivel de modificacin 0. Los valores posibles
son los siguientes:
*CURRENT
El objeto va a utilizarse en el release del
sistema operativo que se est ejecutando
en el sistema actualmente. Por ejemplo,
si en el sistema se est ejecutando
V3R7M0, *CURRENT significa que piensa
utilizar el objeto en un sistema en el que
se ha instalado V3R7M0. El objeto
tambin puede utilizarse en un sistema
que tenga instalado un release posterior
del sistema operativo.
Nota: Si en el sistema se est ejecutando V2R3M5 y el objeto debe
utilizarse en un sistema que tiene
instalado V2R3M0, especifique
TGTRLS(V2R3M0) en lugar de
TGTRLS(*CURRENT).

|
|
|
|
|
|
|
|
|
|
|

*PRV
El objeto va a utilizarse en el release
anterior del sistema operativo, con un
nivel de modificacin de 0. Por ejemplo,
si se est ejecutando V3R7M0 en el
sistema del usuario, *PRV significa que
intenta utilizar el objeto en un sistema que
tiene instalado V3R6M0. Tambin puede
utilizar el objeto en un sistema que tenga
instalado un release posterior del sistema
operativo.

|
|
|
|
|
|

nivel-release
Especifique el nivel de release del entorno
destino en el formato VxRxMx. El objeto
puede utilizarse en un sistema que tenga
instalado el release especificado o un
release posterior del sistema operativo.

|
|
|
|
|
|
|
|

Los valores vlidos dependen de la


versin, release y nivel de modificacin
actuales y cambian con cada release. Si
especifica un nivel-release anterior al
primer nivel de release al que este
mandato da soporte, se enva un mensaje
de error que indica el primer release que
se soporta.

Parmetro SRTSEQ:
Especifica la secuencia de ordenacin que se
utiliza cuando se asocia NLSSORT a un
nombre-alfabeto en la clusula ALPHABET.
El parmetro SRTSEQ se utiliza junto con el
parmetro LANGID para determinar qu tabla
de secuencia de ordenacin definida por el
usuario o definida por el sistema va a utilizar
el mdulo. Los valores posibles son:
*HEX
No se utilizar ninguna tabla de secuencia
de ordenacin; para determinar la
secuencia de ordenacin se utilizarn los
valores hexadecimales de los caracteres.
*JOB
La secuencia de ordenacin se resolver
y asociar con el mdulo durante la compilacin utilizando la secuencia de ordenacin del trabajo de compilacin. La
tabla de secuencia de ordenacin del
trabajo de compilacin debe existir en el
sistema en el momento de la compilacin.
Si en el momento de la ejecucin el
CCSID del trabajo en ejecucin difiere del
CCSID del trabajo en el momento de la
compilacin, la tabla de secuencia de
ordenacin que se ha cargado en el
momento de la compilacin se convierte
para que coincida con el CCSID del
trabajo en ejecucin.
*JOBRUN
La secuencia de ordenacin se resolver
y asociar con el mdulo en el momento
de la ejecucin. Este valor permite que el
mdulo se compile una vez y se utilice
con diferentes secuencias de ordenacin
en el momento de la ejecucin.
*LANGIDUNQ
Especifica que la tabla de secuencia de
ordenacin que se utiliza debe contener
un peso nico para cada carcter de la
pgina de cdigos. La tabla de secuencia
de ordenacin utilizada ser la nica tabla
con significacin asociada al idioma especificado en el parmetro LANGID.
*LANGIDSHR
Especifica que la tabla de secuencia de
ordenacin que se utiliza puede contener
el mismo peso para varios caracteres de
la pgina de cdigos. La tabla de
secuencia de ordenacin utilizada ser la

Captulo 3. Compilacin de programas fuente en objetos de mdulo

43

tabla con significacin compartida asociada al idioma especificado en el parmetro LANGID.

nombre-tabla
Entre el nombre de la tabla de secuencia
de ordenacin que se va a utilizar. La
tabla contiene pesos para todos los caracteres de una pgina de cdigos determinada. Un peso se asocia al carcter que
se define en el elemento de cdigo.
Cuando se utiliza un nombre de tabla de
secuencia de ordenacin, se puede especificar la biblioteca donde reside el objeto.
Los valores vlidos para la biblioteca son:
*LIBL
La biblioteca en la que se ubica la
tabla de secuencia de ordenacin se
busca en la lista de bibliotecas.
*CURLIB
Se utiliza la biblioteca actual. Si no
se ha asignado una biblioteca como
biblioteca actual, se utiliza QGPL.

nombre-biblioteca
Entre el nombre de la biblioteca
donde se encuentra la tabla de
secuencia de ordenacin.
Parmetro LANGID:
Especifica el identificador de idioma que se
utiliza junto con la secuencia de ordenacin.
El parmetro LANGID se utiliza slo cuando
el valor SRTSEQ en vigor es *LANGIDUNQ o
*LANGIDSHR. Los valores posibles son:
*JOBRUN
El identificador de idioma del mdulo se
resolver en el momento de la ejecucin.
Este valor permite que el mdulo se
compile una vez y se utilice con diferentes
identificadores de idioma durante la ejecucin.
*JOB
El identificador de idioma del mdulo se
resolver en el momento de la compilacin utilizando el identificador de idioma
del trabajo de compilacin.

nombre-identificador-idioma
Entre un identificador de idioma de 3
caracteres vlido.

44

ILE COBOL/400 Gua del Programador

| Parmetro ENBPFRCOL:
|
Especifica si debe generarse el cdigo de
|
medida de rendimiento en el mdulo o pro|
grama. La herramienta de rendimiento del
|
sistema puede utilizar los datos recogidos
|
para crear un perfil del rendimiento de una
|
aplicacin. Al generar un cdigo de medida
|
de rendimiento en un mdulo o programa
|
compilado, los objetos pasarn a ser lige|
ramente mayores y es posible que ello afecte
|
el rendimiento.
|
|
|
|
|
|
|
|
|
|

*PEP
Slo se renen estadsticas de rendimiento en la entrada y salida del procedimiento de entrada de programa.
Seleccione este valor si desea tener
infomacin general sobre el rendimiento
de una aplicacin. Este soporte es equivalente al soporte que la herramienta
TPST proporcionaba anteriormente. Se
trata del valor por omisin.

|
|
|
|
|

*ENTRYEXIT
Se renen estadsticas sobre el rendimiento en la entrada y salida de todos
los procedimientos del programa. Incluye
la rutina del PEP del programa.

|
|
|
|
|
|
|
|
|
|
|
|
|
|

Esta opcin le resultar de utilidad si


desea capturar informacin sobre todas
las rutinas. Utilice esta opcin si sabe que
todos los programas a los que la aplicacin ha llamado se han compilado con
la opcin *PEP, *ENTRYEXIT o *FULL.
En caso contrario, si la aplicacin llama a
otros programas en los que no se ha
habilitado la medida de rendimiento, la
herramienta de rendimiento cargar a la
aplicacin la utilizacin de recursos de los
programas llamados. Esto dificultara la
determinacin del lugar en que los
recursos se utilizan realmente.

|
|
|
|
|
|

*FULL
Se renen estadsticas sobre el rendimiento en la entrada y salida de todos
los procedimientos. Adems, tambin se
renen estadsticas antes y despus de
cada llamada a un procedimiento externo.

|
|
|
|
|

Utilice esta opcin si piensa que la aplicacin llamar a otros programas que no
se hayan compilado con *PEP,
*ENTRYEXIT o *FULL. Esta opcin
permite que las herramientas de ren-

|
|
|
|

dimiento distingan entre los recursos utilizados por la aplicacin y los utilizados por
los programas a los que llama (incluso
aunque en estos programas no se haya

|
|
|
|

habilitado la medida de rendimiento). Es


la opcin ms cara pero le permite el anlisis selectivo de varios programas dentro
de una aplicacin.

Ejemplo de compilacin de un programa fuente en un objeto de


mdulo
Este ejemplo muestra cmo crear un objeto de mdulo ILE COBOL/400 utilizando
el mandato CRTCBLMOD.
1. Para crear un objeto de mdulo, teclee:

CRTCBLMOD MODULE(MYLIB/XMPLE1)
SRCFILE(MYLIB/QCBLLESRC) SRCMBR(MYLIB/XMPLE1)
OUTPUT(\PRINT)
TEXT('Programa ILE COBOL/4')
CVTOPT(\FLOAT)

|
|
|
|

El mandato CRTCBLMOD crea el mdulo XMPLE1 en MYLIB, la misma biblioteca que contiene el fuente. La opcin de salida OUTPUT(*PRINT) especifica
un listado del compilador. La opcin de conversin CVTOPT(*FLOAT) especifica que los tipos de datos de coma flotante se transfieren al programa con los
nombres de DDS y un USAGE de COMP-1 (precisin simple) o COMP-2 (precisin doble).
2. Teclee uno de los siguientes mandatos CL para ver el listado del compilador.
Nota: Para poder ver un listado del compilador debe tener autorizacin para
utilizar los mandatos que se listan a continuacin.
DSPJOB y a continuacin seleccione la opcin 4 (Visualizar archivos en
spool)
WRKJOB
WRKOUTQ nombre-cola
WRKSPLF

Especificacin de un release destino diferente


Se puede compilar un programa ILE COBOL/400 en un sistema AS/400 utilizando
el release actual del sistema operativo OS/400.
Nota: El compilador ILE COBOL/400 y el compilador OPM COBOL/400 son
opciones de producto individuales separadas. La informacin que se
incluye en este apartado se aplica nicamente al release actual del compilador ILE COBOL/400.

|
|

El parmetro Release destino (TGTRLS) de los mandatos CRTCBLMOD y


CRTBNDCBL permite especificar el nivel de release en el que se planifica utilizar
el objeto de mdulo. El parmetro TGTRLS cuenta con tres valores posibles:
*CURRENT, *PRV y nivel-release.
Especifique *CURRENT si el objeto de mdulo va a utilizarse en el release del
sistema operativo que se est ejecutando actualmente en el sistema. Por
ejemplo, si en el sistema se est ejecutando V3R1M0, *CURRENT significa
que piensa utilizar el programa en un sistema en el que se ha instalado
V3R1M0. Este es el valor por omisin.

Captulo 3. Compilacin de programas fuente en objetos de mdulo

45

|
|
|
|
|
|

Si especifica *PRV el objeto va a utilizarse en el release anterior del sistema


operativo, con un nivel de modificacin de 0. Por ejemplo, si se est ejecutando V3R7M0 en el sistema del usuario, *PRV significa que intenta utilizar el
objeto en un sistema que tiene instalado V3R6M0. Tambin puede utilizar el
objeto en un sistema que tenga instalado un release posterior del sistema operativo.
nivel-release permite especificar el nivel de release en el que se piensa utilizar
el objeto de mdulo. Los valores que se pueden entrar para este parmetro
dependen de la versin, release y nivel de modificacin actuales y cambian
con cada release nuevo.

|
|
|

Especifique el nivel de release del entorno destino en el formato VxRxMx. El


objeto puede utilizarse en un sistema que tenga instalado el release especificado o un release posterior del sistema operativo.

|
|

Por ejemplo, si especifica V3R2M0, el objeto puede utilizarse en un sistema


V3R2M0.
Para obtener ms informacin sobre el parmetro TGTRLS, consulte la pgina 42.
Debera tener en cuenta las limitaciones siguientes :
Se puede restaurar un programa objeto al release actual o a un release posterior. No se puede restaurar un programa objeto en un release anterior distinto
al permitido por el nivel-release de TGTRLS.

|
|

No debera haber ninguna biblioteca del producto en la parte del sistema de la


lista de bibliotecas.

Especificacin de la secuencia de ordenacin de idioma en


CRTCBLMOD
En el momento en que se compila el programa fuente ILE COBOL/400, se puede
especificar de forma explcita el orden de clasificacin que el programa utilizar
cuando se ejecute, o se puede especificar cmo se va a determinar el orden de
clasificacin cuando se ejecute el programa.
Para especificar el orden de clasificacin, primero se define un nombre-alfabeto en
el prrafo SPECIAL-NAMES utilizando la clusula ALPHABET y se asocia ese
nombre-alfabeto al nombre de implementador NLSSORT. A continuacin, haga
referencia a este nombre-alfabeto en la clusula PROGRAM COLLATING
SEQUENCE de la ENVIRONMENT DIVISION, o en la expresin COLLATING
SEQUENCE de las instrucciones SORT/MERGE, para indicar que el nombrealfabeto especificado determinar el orden de clasificacin que va a utilizarse.
Se especifica el orden de clasificacin real utilizado con las opciones de los parmetros SRTSEQ y LANGID de los mandatos CRTCBLMOD y CRTBNDCBL.Por
ejemplo, si se especifica SRTSEQ(*JOBRUN) y LANGID(*JOBRUN), el orden de
clasificacin del programa se resolver en el momento de la ejecucin.Este valor
permite que el programa fuente se compile una vez y se utilice con diferentes
rdenes de clasificacin en el momento de la ejecucin. Las opciones de la instruccin PROCESS asociadas a SRTSEQ y LANGID tambin pueden utilizarse
para especificar el orden de clasificacin (consulte el apartado Utilizacin de la
instruccin PROCESS para especificar opciones de compilador en la pgina 47).

46

ILE COBOL/400 Gua del Programador

Si el programa fuente no tiene NLSSORT asociado a un nombre-alfabeto en su


clusula ALPHABET, o en la clusula ALPHABET se especifica NLSSORT pero no
se hace referencia al nombre-alfabeto en ninguna clusula PROGRAM
COLLATING SEQUENCE ni en ninguna expresin COLLATING SEQUENCE de
las instrucciones SORT/MERGE, la secuencia de ordenacin identificada mediante
los parmetros SRTSEQ y LANGID no se utiliza.
El nombre-alfabeto asociado a NLSSORT no puede utilizarse para determinar el
juego de cdigos de caracteres, como en la clusula CODE-SET de la entrada
Descripcin de archivo (FD).El nombre-alfabeto que se utiliza para determinar el
juego de cdigos de caracteres debe identificarse en una clusula ALPHABET
separada.
Consulte el manual ILE COBOL/400 Reference para obtener una descripcin completa de la clusula ALPHABET, la clusula PROGRAM COLLATING SEQUENCE
y las instrucciones SORT/MERGE. Consulte el apartado Parmetros del mandato
CRTCBLMOD en la pgina 33 para obtener una descripcin de los parmetros
SRTSEQ y LANGID.

Utilizacin de la instruccin PROCESS para especificar opciones de


compilador
La instruccin PROCESS es una parte opcional del programa fuente ILE
COBOL/400. Se puede utilizar la instruccin PROCESS para especificar opciones
que normalmente especificara en el momento de la compilacin.
Las opciones especificadas en la instruccin PROCESS alteran temporalmente
las opciones correspondientes especificadas en los mandatos CL CRTCBLMOD o
CRTBNDCBL.
Se aplican las siguientes normas:
La instruccin debe colocarse antes que la primera instruccin fuente del programa fuente ILE COBOL/400 que empiece una unidad de compilacin nueva,
justo delante de la cabecera IDENTIFICATION DIVISION.
La instruccin empieza con la palabra PROCESS. Las opciones pueden aparecer en ms de una lnea; sin embargo, la palabra PROCESS slo puede
aparecer en la primera lnea.
La palabra PROCESS y todas las opciones deben aparecer en las posiciones
8 a 72. La posicin 7 debe quedar en blanco. Las restantes posiciones
pueden utilizarse igual que en las instrucciones fuente de ILE COBOL/400: las
posiciones 1 a 6 para los nmeros de secuencia y las posiciones 73 a 80 para
la identificacin.
Las opciones deben separarse con blancos y/o comas.
Las opciones pueden aparecer en cualquier orden. Si se especifican opciones
en conflicto, por ejemplo, XREF y NOXREF, tendr prioridad la ltima opcin
que se encuentre.
Si la palabra clave de opcin es correcta y la subopcin tiene un error, se
asumir la subopcin por omisin.
No todos los parmetros de los mandatos CRTCBLMOD y CRTBNDCBL tienen
una opcin correspondiente en la instruccin PROCESS. Consulte las tablas
Captulo 3. Compilacin de programas fuente en objetos de mdulo

47

siguientes que indican las opciones de la instruccin PROCESS permitidas y las


opciones y parmetros de los mandatos CRTCBLMOD o CRTBNDCBL equivalentes. Los valores por omisin aparecen subrayados. Las descripciones de las
opciones de la instruccin PROCESS corresponden a las descripciones de las
opciones y parmetros que se encuentran en el apartado Parmetros del mandato
CRTCBLMOD en la pgina 33.
Opciones de la instruccin PROCESS

CRTCBLMOD/CRTBNDCBL
Opciones del parmetro OUTPUT

OUTPUT
NOOUTPUT

Opcin de la instruccin PROCESS

*PRINT
*NONE

CRTCBLMOD/CRTBNDCBL
Opcin del parmetro GENLVL

GENLVL(nn)

Opciones de la instruccin PROCESS

nn

CRTCBLMOD/CRTBNDCBL
Opciones del parmetro OPTION

48

SOURCE
SRC
NOSOURCE
NOSRC

*SOURCE
*SRC
*NOSOURCE
*NOSRC

NOXREF
XREF

*NOXREF
*XREF

GEN
NOGEN

*GEN
*NOGEN

NOSEQUENCE
SEQUENCE

*NOSEQUENCE
*SEQUENCE

NOVBSUM
VBSUM

*NOVBSUM
*VBSUM

NONUMBER
NUMBER
LINENUMBER

*NONUMBER
*NUMBER
*LINENUMBER

NOMAP
MAP

*NOMAP
*MAP

NOOPTIONS
OPTIONS

*NOOPTIONS
*OPTIONS

QUOTE
APOST

*QUOTE
*APOST

NOSECLVL
SECLVL

*NOSECLVL
*SECLVL

PRTCORR
NOPRTCORR

*PRTCORR
*NOPRTCORR

ILE COBOL/400 Gua del Programador

Opciones de la instruccin PROCESS

CRTCBLMOD/CRTBNDCBL
Opciones del parmetro OPTION

|
|

MONOPRC
NOMONOPRC

*MONOPRC
*NOMONOPRC

RANGE
NORANGE

*RANGE
*NORANGE

NOUNREF
UNREF

*NOUNREF
*UNREF

NOSYNC
SYNC

*NOSYNC
*SYNC

NOCRTF
CRTF

*NOCRTF
*CRTF

NODUPKEYCHK
DUPKEYCHK

*NODUPKEYCHK
*DUPKEYCHK

NOINZDLT
INZDLT

*NOINZDLT
*INZDLT

NOBLK
BLK

*NOBLK
*BLK

STDINZ
NOSTDINZ

*STDINZ
*NOSTDINZ

NODDSFILLER
DDSFILLER

*NODDSFILLER
*DDSFILLER

STDTRUNC
NOSTDTRUNC

*STDTRUNC
*NOSTDTRUNC

CHGPOSSGN
NOCHGPOSSGN

*CHGPOSSGN
*NOCHGPOSSGN

Opciones de la instruccin PROCESS

CRTCBLMOD/CRTBNDCBL
Opciones del parmetro CVTOPT

|
|

NOVARCHAR
VARCHAR

*NOVARCHAR
*VARCHAR

NODATETIME
DATETIME

*NODATETIME
*DATETIME

NOCVTPICXGRAPHIC
CVTPICXGRAPHIC
CVTPICGGRAPHIC
NOCVTPICGGRAPHIC

*NOPICXGRAPHIC
*PICXGRAPHIC
*PICGGRAPHIC
*NOPICGGRAPHIC

NOFLOAT
FLOAT

*NOFLOAT
*FLOAT

Captulo 3. Compilacin de programas fuente en objetos de mdulo

49

Opciones de la instruccin PROCESS

CRTCBLMOD/CRTBNDCBL
Opciones del parmetro OPTIMIZE

NOOPTIMIZE
BASICOPT
FULLOPT

Opciones de la instruccin PROCESS

*NONE
*BASIC
*FULL

CRTCBLMOD/CRTBNDCBL
Opciones del parmetro FLAGSTD

NOFIPS
MINIMUM
INTERMEDIATE
HIGH

*NOFIPS
*MINIMUM
*INTERMEDIATE
*HIGH

NOOBSOLETE
OBSOLETE

*NOOBSOLETE
*OBSOLETE

Opciones de la instruccin PROCESS


EXTDSPOPT(a b c)

CRTCBLMOD/CRTBNDCBL
Opciones del parmetro EXTDSPOPT

DFRWRT
NODFRWRT

*DFRWRT
*NODFRWRT

UNDSPCHR
NOUNDSPCHR

*UNDSPCHR
*NOUNDSPCHR

ACCUPDALL
ACCUPDNE

*ACCUPDALL
*ACCUPDNE

Opcin de la instruccin PROCESS

CRTCBLMOD/CRTBNDCBL
Opcin del parmetro FLAG

FLAG(nn)

Opciones de la instruccin PROCESS

nn

CRTCBLMOD/CRTBNDCBL
Opcin del parmetro LINKLIT

LINKPGM
LINKPRC

50

ILE COBOL/400 Gua del Programador

*PGM
*PRC

Opciones de la instruccin PROCESS


SRTSEQ(a)
HEX
JOB
JOBRUN
LANGIDUNQ
LANGIDSHR
"LIBL/nombre-tabla-sec-ord"
"CURLIB/nombre-tabla-sec-ord"
"nombre-biblioteca/nombre-tabla-sec-ord"
"nombre-tabla-sec-ord"

Opciones de la instruccin PROCESS


LANGID(a)
JOBRUN
JOB
"nombre-identificador-idioma"

Opciones de la instruccin PROCESS


ENBPFRCOL(a)

|
|
|

PEP
ENTRYEXIT
FULL

CRTCBLMOD/CRTBNDCBL
Opciones del parmetro SRTSEQ
*HEX
*JOB
*JOBRUN
*LANGIDUNQ
*LANGIDSHR
*LIBL/nombre-tabla-sec-ord
*CURLIB/nombre-tabla-sec-ord
nombre-biblioteca/nombre-tabla-sec-ord
nombre-tabla-sec-ord

CRTCBLMOD/CRTBNDCBL
Opciones del parmetro LANGID
*JOBRUN
*JOB
nombre-identificador-idioma

CRTCBLMOD/CRTBNDCBL
Opciones del parmetro ENBPFRCOL
*PEP
*ENTRYEXIT
*FULL

Opcin de la instruccin PROCESS


NOGRAPHIC
GRAPHIC

CRTCBLMOD/CRTBNDCBL
no aplicable

La opcin GRAPHIC de la instruccin PROCESS est disponible para el proceso


de caracteres DBCS en literales mixtos. Los literales mixtos son literales que
combinan caracteres SBCS y caracteres DBCS. Si se especifica la opcin
GRAPHIC, los literales mixtos se manejarn con la suposicin de que hex 0E y
hex 0F son caracteres de desplazamiento a teclado estndar y a teclado
ideogrfico respectivamente y que incluyen los caracteres DBCS en el literal mixto.
Los caracteres de desplazamiento a teclado estndar y a teclado ideogrfico
ocupan 1 byte cada uno. Si se especifica o presupone NOGRAPHIC, el compilador ILE COBOL/400 tratar los literales no numricos que contienen hex 0E y
hex 0F como si slo contuvieran caracteres SBCS. Hex 0E y hex 0F no se tratan
como caracteres de desplazamiento a teclado estndar ni a teclado ideogrfico,
sino que se considerar que forman parte de una serie de caracteres SBCS. Consulte el Apndice D, Soporte a idiomas internacionales con juegos de caracteres
de doble byte en la pgina 491 para obtener ms informacin sobre el soporte de
DBCS.

Captulo 3. Compilacin de programas fuente en objetos de mdulo

51

La opcin EXTDSPOPT de la instruccin PROCESS debera codificarse con las


opciones asociadas entre parntesis semejante a la sintaxis de FLAG(nn). Puede
especificar ms de una opcin entre parntesis para la opcin EXTDSPOPT. Por
ejemplo, para especificar DFRWRT y UNDSPCHR, teclee
EXTDSPOPT(DFRWRT UNDSPCHR)
Tambin es vlido especificar EXTDSPOPT o EXTDSPOPT( ).
Cuando slo se especifica EXTDSPOPT en la instruccin PROCESS, todos los
valores por omisin para las opciones adicionales quedan en vigor.
Si se especifica EXTDSPOPT( ), no tiene efecto en el programa.
|

Las opciones SRTSEQ, LANGID i ENBPFRCOL de la instruccin PROCESS


deberan codificarse con las opciones adecuadas entre parntesis, de forma similar
a la sintaxis de FLAG(nn).

Compilacin de varios programas fuente


La instruccin PROCESS puede colocarse al principio de cada unidad de compilacin siguiendo la secuencia de los programas fuente ILE COBOL/400 del
miembro fuente de entrada. Al compilar varios programas fuente ILE COBOL/400,
los resultados fusionados de todas las opciones especificadas en el mandato
CRTCBLMOD o CRTBNDCBL, ms todas las opciones por omisin y las opciones
especificadas en la ltima instruccin PROCESS anterior al programa fuente ILE
COBOL/400 estarn vigentes para la compilacin de este programa fuente ILE
COBOL/400. Toda la salida del compilador se dirige a los destinos especificados
por los mandatos CRTCBLMOD o CRTBNDCBL.
Todos los objetos de mdulo u objetos de programa se almacenan en la biblioteca
especificada en el parmetro MODULE o en el parmetro PGM. Si se especifica
nombre-mdulo o nombre-programa para el parmetro MODULE o para el parmetro PGM, el primer objeto de mdulo u objeto de programa correspondiente al
primer programa fuente ILE COBOL/400 de la secuencia de programas fuente ILE
COBOL/400 utiliza ese nombre, y todos los objetos de mdulo u objetos de programa correspondientes al resto de programas fuente ILE COBOL/400 del mismo
miembro fuente de entrada utilizan el nombre especificado en el prrafo
PROGRAM-ID del programa fuente ILE COBOL/400.

Utilizacin de COPY en la instruccin PROCESS


Las instrucciones COPY pueden utilizarse en un programa fuente siempre que
puedan utilizarse series de caracteres o separadores. Cada una de las instrucciones COPY debe ir precedida de un espacio y seguida de un punto y un espacio.
Para obtener ms informacin sobre la instruccin COPY, consulte el apartado
Instruccin COPY del manual ILE COBOL/400 Reference.
La instruccin COPY Formato 1 puede utilizarse en la instruccin PROCESS para
recuperar opciones de compilador previamente almacenadas en una biblioteca
fuente e incluirlas en la instruccin PROCESS. COPY puede utilizarse para incluir
opciones que alteren temporalmente aqullas que el compilador especifica como
valores por omisin. Con la instruccin COPY pueden recuperarse cualesquiera
opciones de la instruccin PROCESS.
Las opciones de compilador pueden tanto preceder como ir a continuacin de la
instruccin COPY dentro de una instruccin PROCESS. La opcin que se

52

ILE COBOL/400 Gua del Programador

encuentre en ltimo lugar altera temporalmente las anteriores apariciones de esa


opcin.
El ejemplo siguiente muestra la utilizacin de la instruccin COPY en la instruccin
PROCESS. Observe tambin que en este caso, NOMAP altera temporalmente la
opcin correspondiente del miembro de biblioteca:

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/COPYPROC

AS4SYS

96/7/4 11:48:2

Pgina

F u e n t e
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN

1
2
3
4
5
6
7
8
9

1
2
+1
3
4
5
6
7
8
9
1
11
12
13

PROCESS XREF
COPY PROCDFLT.
MAP, SOURCE, APOST
NOMAP, FLAG(2)
IDENTIFICATION DIVISION.
PROGRAM-ID. COPYPROC.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-AS4.
OBJECT-COMPUTER. IBM-AS4.
PROCEDURE DIVISION.
MAINLINE.
DISPLAY "HOLA MUNDO".
STOP RUN.
\ \ \ \ \

F I N

S NOMCOPIA

FECHCAM

PROCDFLT

D E

F U E N T E

\ \ \ \ \

Figura 8. Utilizacin de COPY en la instruccin PROCESS

Comprensin de la salida del compilador


La salida del compilador puede incluir:
Un resumen de opciones de mandatos
Un listado de opciones: un listado de las opciones en vigor para la compilacin. Utilice OPTION(*OPTIONS).
Un listado fuente: un listado de las instrucciones que se encuentran en el programa fuente. Utilice OPTION(*SOURCE).
Un listado de utilizacin de verbos: un listado de los verbos COBOL y las
veces que se utiliza cada verbo. Utilice OPTION(*VBSUM).
Un mapa de Data Division: un glosario de informacin generada por el compilador sobre los datos. Utilice OPTION(*MAP).
Mensajes FIPS: una lista de mensajes para un subconjunto FIPS COBOL,
para cualquiera de los mdulos opcionales, para todos los elementos del lenguaje obsoletos o para una combinacin de un subconjunto FIPS COBOL,
mdulos opcionales y todos los elementos obsoletos. Consulte la informacin
que aparece en el apartado Parmetro FLAGSTD en la pgina 40 para
conocer opciones especficas disponibles para distintivos FIPS.
Listado de referencias cruzadas. Utilice OPTION(*XREF).
Listado de errores intercalados. Utilice OPTION(*IMBEDERR).
Mensajes del compilador (incluyendo estadsticas de diagnstico).

Captulo 3. Compilacin de programas fuente en objetos de mdulo

53

Estadsticas de compilacin.
Objeto(s) de mdulo. Utilice el mandato CRTCBLMOD.
Objeto(s) de programa. Utilice el mandato CRTBNDCBL.
La presencia o ausencia de alguno de estos tipos de salida de compilador
depende de las opciones especificadas en la instruccin PROCESS o mediante el
mandato CRTCBLMOD o el mandato CRTBNDCBL. EL nivel de mensajes de
diagnstico impreso depende de la opcin FLAG. La opcin DBGVIEW indica la
clase de datos de depuracin que se encuentran en el objeto de programa u objeto
de mdulo generado.

Especificacin del formato del listado


Una barra inclinada (/) en el rea de indicador (columna 7) de una lnea da como
resultado la expulsin de pgina del listado de programa fuente. Tambin se
puede entrar texto de comentario despus de la barra inclinada (/) en esta lnea.
La lnea de comentario de la barra inclinada (/) se imprime en la primera lnea de
la siguiente pgina.
Si se especifica la instruccin EJECT en el programa, la siguiente instruccin
fuente se imprime en la parte superior de la siguiente pgina del listado del compilador. Esta instruccin pude escribirse en cualquier parte del rea A o del rea B
y debe ser la nica instruccin de la lnea.
La instruccin SKIP1/2/3 provoca que se inserten lneas en blanco en el listado del
compilador. Una instruccin SKIP1/2/3 puede escribirse en cualquier parte del
rea A o del rea B. Debe ser la nica instruccin de la lnea.
SKIP1 inserta una lnea en blanco (doble espacio).
SKIP2 inserta dos lneas en blanco (triple espacio).
SKIP3 inserta tres lneas en blanco (cuatro espacios).
Cada una de las instrucciones SKIP anteriores provoca una nica insercin de una,
dos o tres lneas.
Una instruccin TITLE coloca un ttulo en cada una de las pginas que se indique.
Se pueden listar o suprimir de forma selectiva las instrucciones fuente ILE
COBOL/400 utilizando las instrucciones *CONTROL, *CBL o COPY:
*CONTROL NOSOURCE y *CBL NOSOURCE suprimen el listado de instrucciones fuente.
*CONTROL SOURCE y *CBL SOURCE continan el listado de instrucciones
fuente.
Una instruccin COPY que incluye una expresin SUPPRESS suprime el
listado de instrucciones copiadas. Mientras est en vigor, esta instruccin
altera temporalmente cualquier instruccin *CONTROL o *CBL. Si el miembro
copiado contiene instrucciones *CONTROL o *CBL, la ltima se ejecuta
cuando el miembro COPY se ha procesado.
Consulte el manual ILE COBOL/400 Reference para obtener informacin adicional
sobre las instrucciones EJECT, SKIP1/2/3, *CONTROL, *CBL, COPY y TITLE.

54

ILE COBOL/400 Gua del Programador

Caracteres de separacin de hora


El parmetro TIMSEP de los mandatos relacionados con el trabajo (como
CHGJOB) ahora especifica el carcter de separacin de hora que se utiliza en las
indicaciones de hora que aparecen en el listado el compilador. Si no se especifica
un valor TIMSEP, se utiliza por omisin el valor del sistema QTIMSEP.

Examen del listado del compilador utilizando el SEU


El Programa de utilidad para entrada del fuente (SEU) permite examinar un listado
de compilador de una cola de salida. Puede volver a ver el resultado de una compilacin anterior mientras realiza las modificaciones necesarias en el cdigo fuente.
Mientras se examina el listado de compilador, se pueden buscar los errores y
corregir las instruccioness fuentes que tienen errores. Para buscar errores, teclee
F \ERR en la lnea de mandatos SEU.
Para obtener ms informacin sobre cmo examinar un listado de compilador, consulte el manual ADTS/400: Programa de Utilidad para Entrada del Fuente (SEU).

Captulo 3. Compilacin de programas fuente en objetos de mdulo

55

Programa de ejemplo y listados


Los siguientes listados de ejemplo muestran las opciones de compilador y listado
fuente que se generan para el programa de ejemplo. En el texto siguiente se hace
referencia a las figuras. Estas referencias se indican mediante la impresin invertida de las letras sobre fondo oscuro, por ejemplo ( Z ). Las letras del texto en
impresin invertida corresponden a las letras que se encuentran en las figuras.

Resumen de mandatos
Este resumen, resultado de la compilacin, lista todas las opciones especificadas
en los mandatos CRTCBLMOD y CRTBNDCBL. Consulte el apartado Utilizacin
del mandato Crear mdulo COBOL (CRTCBLMOD) en la pgina 30 para obtener
ms informacin sobre las opciones definidas por el usuario.

5716CB1 V3R7M
Mandato

96118 LN

IBM ILE COBOL/4

. . . . . . . . . . . . . . . :

TESTLIB/SAMPLE

CRTCBLMOD

Valores reales:
Mdulo . . . .
Biblioteca .
Archivo fuente
Biblioteca .
CCSID . . .
Miembro fuente
Descripcin de

. . . . . . . . . . . :
. . . . . . . . . . . :
. . . . . . . . . . . :
. . . . . . . . . . . :
. . . . . . . . . . . :
. . . . . . . . . . . :
texto. . . . . . . . . :

SAMPLE
TESTLIB
QCBLLESRC
TESTLIB
65535
SAMPLE
94/8/22 13:43:33
Programa muestra para generar listado

Opciones de mandato:
Mdulo . . . . . . . . . . . . . .
Biblioteca . . . . . . . . . . .
Archivo fuente . . . . . . . . . .
Biblioteca . . . . . . . . . . .
Miembro fuente . . . . . . . . . .
Salida . . . . . . . . . . . . . .
Nivel de gravedad de generacin. .
Texto 'descripcin' . . . . . . .
Opciones de compilador . . . . . .
Opciones de conversin . . . . . .
Lmite de mensajes:
Nmero de mensajes . . . . . . .
Gravedad lmite de mensajes. . .
Vista de depuracin. . . . . . . .
Nivel de optimizacin. . . . . . .
Distintivo FIPS . . . . . . . . .
Opciones de pantalla ampliada. . .
Gravedad de distintivos. . . . . .
Sustituir mdulo . . . . . . . . .
Autorizacin . . . . . . . . . . .
Literal de enlace. . . . . . . . .
Release destino. . . . . . . . . .
Secuencia de ordenacin. . . . . .
Biblioteca . . . . . . . . . . .
Identificador de idioma. . . . . .
Habilitar recogida de rendimiento:
Nivel de recogida. . . . . . . .
Directorio de enlace . . . . . . .
Biblioteca . . . . . . . . . . .
Grupo de activacin. . . . . . . .
Compilador . . . . . . . . . . . .

|
|
|
|
|

.
.
.
.
.
.
.
.
.
.

:
:
:
:
:
:
:
:
:
:

SAMPLE
TESTLIB
QCBLLESRC
TESTLIB
\MODULE
\PRINT
3
\SRCMBRTXT
\IMBEDERR
\NONE

.
.
.
.
.
.
.
.
.
.
.
.
.
.

:
:
:
:
:
:
:
:
:
:
:
:
:
:

\NOMAX
3
\STMT
\NONE
\NOFIPS \NOOBSOLETE
\NONE

\YES
\LIBCRTAUT
\PGM
\CURRENT
\HEX

.
.
.
.
.

:
:
:
:
:

\PEP
\NONE

\JOBRUN

QILE
IBM ILE COBOL/4

Figura 9. Listado resumen del mandato CRTCBLMOD

56

ILE COBOL/400 Gua del Programador

AS4SYS

96/7/4 14:4:27

Pgina

5716CB1 V3R7M
Mandato

96118 LN

IBM ILE COBOL/4

. . . . . . . . . . . . . . . :

TESTLIB/SAMPLE

AS4SYS

96/7/4 14:4:27

Pgina

CRTBNDCBL

Valores reales:
Programa . . .
Biblioteca .
Archivo fuente
Biblioteca .
CCSID . . .
Miembro fuente
Descripcin de

. . . . . . . . . . . :
. . . . . . . . . . . :
. . . . . . . . . . . :
. . . . . . . . . . . :
. . . . . . . . . . . :
. . . . . . . . . . . :
texto. . . . . . . . . :

SAMPLE2
TESTLIB
QCBLLESRC
TESTLIB
65535
SAMPLE
96/1/22 13:43:33
Programa muestra para generar listado

Opciones de mandato:

|
|
|
|
|

Programa . . . . . . . . . . . . .
Biblioteca . . . . . . . . . . .
Archivo fuente . . . . . . . . . .
Biblioteca . . . . . . . . . . .
Miembro fuente . . . . . . . . . .
Salida . . . . . . . . . . . . . .
Nivel de gravedad de generacin. .
Texto 'descripcin' . . . . . . .
Opciones de compilador . . . . . .
Opciones de conversin . . . . . .
Lmite de mensajes:
Nmero de mensajes . . . . . . .
Gravedad lmite de mensajes. . .
Vista de depuracin. . . . . . . .
Nivel de optimizacin. . . . . . .
Distintivo FIPS . . . . . . . . .
Opciones de pantalla ampliada. . .
Gravedad de distintivos. . . . . .
Sustituir programa . . . . . . . .
Programa simple. . . . . . . . . .
Autorizacin . . . . . . . . . . .
Literal de enlace. . . . . . . . .
Release destino. . . . . . . . . .
Perfil de usuario. . . . . . . . .
Secuencia de ordenacin. . . . . .
Biblioteca . . . . . . . . . . .
Identificador de idioma. . . . . .
Habilitar recogida de rendimiento:
Nivel de recogida. . . . . . . .
Directorio de enlace . . . . . . .
Biblioteca . . . . . . . . . . .
Grupo de activacin. . . . . . . .
Compilador . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.

:
:
:
:
:
:
:
:
:
:

SAMPLE2
TESTLIB
QCBLLESRC
TESTLIB
SAMPLE
\PRINT

\SRCMBRTXT
\IMBEDERR
\NONE

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:

\NOMAX
3
\NONE
\NONE
\NOFIPS \NOOBSOLETE
\NONE

\YES
\YES
\LIBCRTAUT
\PGM
\CURRENT
\USER
\HEX

.
.
.
.
.

:
:
:
:
:

\PEP
\NONE

\JOBRUN

QILE
IBM ILE COBOL/4

Figura 10. Listado resumen del mandato CRTBNDCBL

Captulo 3. Compilacin de programas fuente en objetos de mdulo

57

Identificacin de las opciones del compilador en vigor


En primer lugar se imprime la instruccin PROCESS, si se especifica. La
Figura 11 presenta una lista que incluye todas las opciones en vigor para la compilacin del programa de ejemplo: las opciones que se especifican en el mandato
CRTCBLMOD, tal como las modifica la instruccin PROCESS. Las opciones de
compilador se listan al principio de toda salida generada por el compilador si se
especifica el parmetro OPTIONS.

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/SAMPLE

AS4SYS

96/7/4 14:4:27

F u e n t e
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN

1 PROCESS OPTIONS, SOURCE, VBSUM, MAP,


2
FLAG(), MINIMUM, OBSOLETE, XREF
Opciones de compilador COBOL en vigor
SOURCE
XREF
GEN
NOSEQUENCE
VBSUM
NONUMBER
MAP
OPTIONS
QUOTE
NOSECLVL
PRTCORR
MONOPRC
RANGE
NOUNREF
NOSYNC
NOCRTF
NODUPKEYCHK
NOINZDLT
NOBLK
STDINZ
NODDSFILLER
NOIMBEDERR
STDTRUNC
NOCHGPOSSGN
NOEVENTF
OUTPUT
GENLVL(3)
NOOPTIMIZE
MINIMUM
OBSOLETE
DFRWRT
UNDSPCHR
ACCUPDALL
FLAG()
LINKPGM
SRTSEQ(\HEX
)
LANGID(\JOBRUN
)
ENBPFRCOL(PEP)
NOGRAPHIC

|
|

Opciones de conversin COBOL en vigor


NOVARCHAR
NODATETIME
NOCVTPICXGRAPHIC
NOFLOAT

|
|

Figura 11. Lista de opciones en vigor

58

ILE COBOL/400 Gua del Programador

S NOMCOPIA

FEC CAMB

Pgina

Listado fuente
La Figura 12 muestra un listado fuente. Las instrucciones del programa fuente se
listan exactamente de la forma en que fueron sometidas con excepcin del texto
fuente de programa, que se identifica en la instruccin REPLACE. El texto de sustitucin aparecer en el listado fuente. Despus de la pgina en la que se lista el
prrafo PROGRAM-ID, en todas las pginas de salida del compilador el nombre de
id-programa aparece listado en la cabecera antes del nombre de sistema.

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/SAMPLE

AS4SYS

INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN


A
B
C
1

3 IDENTIFICATION DIVISION.

2
3
4
5
6

5 PROGRAM-ID.
SAMPLE.
6
AUTHOR.
PROGRAMMER NAME.
7
INSTALLATION. COBOL DEVELOPMENT CENTRE.
8
DATE-WRITTEN. 2/24/96.
9
DATE-COMPILED. 96/9/12 14:4:27

11 ENVIRONMENT DIVISION.

8
9
1

13 CONFIGURATION SECTION.
14 SOURCE-COMPUTER. IBM-AS4.
15 OBJECT-COMPUTER. IBM-AS4.

11
12
13

17 INPUT-OUTPUT SECTION.
18 FILE-CONTROL.
19
SELECT FILE-1 ASSIGN TO DISK-SAMPLE.

15

21 DATA DIVISION.

23 FILE SECTION.
24 FD FILE-1
25
LABEL RECORDS ARE STANDARD
\==>
a
\=a> LNC848
Se comprueba la sintaxis de la clusula LABEL y no se tiene en cuenta.

96/7/4 14:4:27
S NOMCOPIA
D
E

Pgina

FEC CAMB
F

16
17

26
27
\==>
\=a> LNC848
18
19
2
21
22
23
24
25
26
27

28
29
3
31
32
33
34
35
36

RECORD CONTAINS 2 CHARACTERS


DATA RECORD IS RECORD-1.
a
Se comprueba la sintaxis de la clusula DATA RECORDS y no se tiene en cuenta.

28 1 RECORD-1.
29
2 FIELD-A
31
32
33
34
35
36
37
38
39
4
41
+1
+2
+3
+4
+5
+6
+7
+8
+9
+1

PIC X(2).

WORKING-STORAGE SECTION.
1 FILLER.
5 KOUNT
PIC S9(2) COMP-3.
5 LETTERS
PIC X(26) VALUE "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
5 ALPHA REDEFINES LETTERS
PIC X(1) OCCURS 26 TIMES.
5 NUMBR
PIC S9(2) COMP-3.
5 DEPENDENTS
PIC X(26) VALUE "12341234123412341234".
5 DEPEND REDEFINES DEPENDENTS
PIC X(1) OCCURS 26 TIMES.
COPY WRKRCD.
1 WORK-RECORD.
5 NAME-FIELD
PIC X(1).
5 FILLER
PIC X(1) VALUE SPACE.
5 RECORD-NO
PIC S9(3).
5 FILLER
PIC X(1) VALUE SPACE.
5 LOCATION
PIC A(3) VALUE "NYC".
5 FILLER
PIC X(1) VALUE SPACE.
5 NO-OF-DEPENDENTS
PIC X(2).
5 FILLER
PIC X(7) VALUE SPACES.

WRKRCD
WRKRCD
WRKRCD
WRKRCD
WRKRCD
WRKRCD
WRKRCD
WRKRCD
WRKRCD
WRKRCD

Figura 12 (Parte 1 de 3). Ejemplo de un listado fuente ILE COBOL/400

Captulo 3. Compilacin de programas fuente en objetos de mdulo

59

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/SAMPLE

AS4SYS

INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN

37

42 77

38

44\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
45\ EL PRRAFO SIGUIENTE ABRE EL ARCHIVO DE SALIDA QUE\
46\ VA A CREARSE E INICIALIZA LOS CONTADORES
\
47\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
48 PROCEDURE DIVISION.

39
4

5 STEP-1.
51
OPEN OUTPUT FILE-1.
52
MOVE ZERO TO KOUNT, NUMBR.

41
42
43
44

54\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
55\ LOS 3 PRRAFOS SIGUIENTES CREAN INTERNAMENTE LOS \
56\ REGISTROS QUE DEBEN INCLUIRSE EN EL ARCHIVO, LOS \
57\ GRABA EN DISCO Y LOS VISUALIZA
\
58\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
59 STEP-2.
6
ADD 1 TO KOUNT, NUMBR.
61
MOVE ALPHA (KOUNT) TO NAME-FIELD.
62
MOVE DEPEND (KOUNT) TO NO-OF-DEPENDENTS.
63
MOVE NUMBR
TO RECORD-NO.

45
46

65 STEP-3.
66
DISPLAY WORK-RECORD.
67
WRITE RECORD-1 FROM WORK-RECORD.

47

69 STEP-4.
7
PERFORM STEP-2 THRU STEP-3 UNTIL KOUNT IS EQUAL TO 26.

48
49

72\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
73\ EL PRRAFO SIGUIENTE CIERRA EL ARCHIVO ABIERTO
\
74\ PARA SALIDA Y VUELVE A ABRIRLO PARA ENTRADA
\
75\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
76 STEP-5.
77
CLOSE FILE-1.
78
OPEN INPUT FILE-1.

5
51

8\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
81\ LOS PRRAFOS SIGUIENTES LEEN DE NUEVO EL ARCHIVO \
82\ Y DISTINGUEN LOS EMPLEADOS SIN SUBORDINADOS
\
83\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
84 STEP-6.
85
READ FILE-1 RECORD INTO WORK-RECORD
86
AT END GO TO STEP-8.

52
53
54

88 STEP-7.
89
IF NO-OF-DEPENDENTS IS EQUAL TO ""
9
MOVE "Z" TO NO-OF-DEPENDENTS.
91
GO TO STEP-6.

S NOMCOPIA

FEC CAMB

WORKPTR USAGE POINTER.

93 STEP-8.

Figura 12 (Parte 2 de 3). Ejemplo de un listado fuente ILE COBOL/400

60

96/7/4 14:4:27

ILE COBOL/400 Gua del Programador

96/7/4
96/7/4

Pgina

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/SAMPLE

AS4SYS

INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN

96/7/4 14:4:27
S NOMCOPIA

Pgina

FEC CAMB

55
94
CLOSE FILE-1.
56
95
STOP RUN.
\==> LNC65
Agrupar/desagrupar bloques para archivo 'FILE-1' se llevar a cabo mediante cdigo generado por compilador.
\ \ \ \ \

F I N

D E

F U E N T E

\ \ \ \ \

Figura 12 (Parte 3 de 3). Ejemplo de un listado fuente ILE COBOL/400

La Figura 12 visualiza los siguientes campos:


A

Nmero de instruccin generado por el compilador: El nmero aparece


situado a la izquierda del listado de programa fuente. Se hace referencia a
estos nmeros en todos los listados de salida de compilador excepto en el
caso de .* and SAA messages los listados FIPS. Una instruccin puede
ocupar varias lneas y una lnea puede contener ms de una instruccin.
Cuando hay una secuencia de programas fuente ILE COBOL/400 en el
miembro fuente de entrada, el nmero de instruccin se restablece a 1 en
cada una de las unidades de compilacin nuevas. El nmero de instruccin no se restablece en una nica unidad de compilacin que contiene
uno o ms programas COBOL anidados.

Nivel de anidamiento de programa: El nmero que aparece en este campo


indica el nivel de anidamiento del programa.

Nmero de referencia: Los nmeros aparecen situados a la izquierda de


las instrucciones fuente. Los nmeros que aparecen en este campo y la
cabecera de columna (que aparece como NUMSEC en este listado)
dependen de una opcin especificada en el mandato CRTCBLMOD o
CRTBNDCBL o en la instruccin PROCESS, tal como se muestra en la
tabla siguiente:
Opcin

Cabecera

Origen

NONUMBER
NUMBER
LINENUMBER

NUMSEC
NUMBER
NUMLIN

Nmeros de secuencia del archivo fuente


Nmeros de secuencia proporcionados por el usuario
Nmeros de secuencia generados por el compilador

Columna de indicador de error de secuencia: Una S en esta lnea indica


que la lnea est fuera de secuencia. La comprobacin de secuencia se
lleva a cabo en el campo de nmero de referencia slo si se especifica la
opcin SEQUENCE.

Nombrecopia: Se indica el nombrecopia, tal como se especifica en la instruccin COPY ILE COBOL/400, para todos los registros que esa instruccin COPY ha incluido en el programa fuente. Si se utiliza la expresin
DDS-ALL-FORMATS, aparece el nombre <--ALL-FMTS bajo NOMCOPIA.

Campo fecha/modificacin: Aqu se indica la fecha en que la lnea se modific por ltima vez.

Error intercalado: El mensaje de error de primer nivel se incluye en el


listado despus de la lnea en la que se produjo el error.Se identifica la
clusula, instruccin o expresin que provoc el error.

Captulo 3. Compilacin de programas fuente en objetos de mdulo

61

Listado de recuento de utilizacin de verbos


La Figura 13 muestra la lista alfabtica que se genera de todos los verbos utilizados en el programa fuente. Adems se incluye un recuento de las veces que se
ha utilizado cada verbo. Este listado se genera cuando se especifica la opcin
VBSUM.

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

U t i l i z a c i n
VERBO

d e

v e r b o s

TESTLIB/SAMPLE
p o r

AS4SYS

96/7/4 14:4:27

Pgina

n m e r o

CUENTA

ADD
CLOSE
DISPLAY
GOTO
IF
MOVE
OPEN
PERFORM
READ
STOP
WRITE

1
2
1
2
1
5
2
1
1
1
1
\ \ \ \ \

F I N

D E

U T I L I Z A C I N

D E

V E R B O S

P O R

N M E R O

\ \ \ \ \

Figura 13. Listado de recuento de utilizacin de verbos

Mapa de la Data Division


El mapa de la Data Division se lista cuando se especifica la opcin MAP. Contiene
informacin sobre los nombres del programa fuente ILE COBOL/400. Al final del
mapa de la Data Division se indica el nmero mnimo de bytes necesarios para
File Section y Working-Storage Section.

62

ILE COBOL/400 Gua del Programador

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

M a p a

d e

D a t a

INST NIV NOMBRE FUENTE


H
I
J

TESTLIB/SAMPLE

AS4SYS

96/7/4 14:4:27

Pgina

D i v i s i o n

SECCION
K

17

FD

FILE-1

FS

18
19
21
22
23
24
25
26
27
28
29
3
31
32
33
34
35
36
37

1
2
1
5
5
5
5
5
5
1
5
5
5
5
5
5
5
5
77

RECORD-1
FIELD-A
FILLER
KOUNT
LETTERS
ALPHA
NUMBR
DEPENDENTS
DEPEND
WORK-RECORD
NAME-FIELD
FILLER
RECORD-NO
FILLER
LOCATION
FILLER
NO-OF-DEPENDENTS
FILLER
WORKPTR

FS
FS
WS
WS
WS
WS
WS
WS
WS
WS
WS
WS
WS
WS
WS
WS
WS
WS
WS

DESP

LONG

TIPO
ATRIBUTOS
M
N
O

DEVICE DISK, ORGANIZATION SEQUENTIAL,


ACCESS SEQUENTIAL, RECORD CONTAINS 2
CHARACTERS

2
2
28
3
3

1
2
5
6
9
1
12

2
2
56
2
26
1
2
26
1
19
1
1
3
1
3
1
2
7
16

GROUP
AN
GROUP
PACKED
AN
AN
PACKED
AN
AN
GROUP
AN
AN
ZONED
AN
A
AN
AN
AN
POINTR

VALUE
REDEFINES LETTERS, DIMENSION(26)
VALUE
REDEFINES DEPENDENTS, DIMENSION(26)

VALUE
VALUE
VALUE
VALUE
VALUE

FILE SECTION utiliza como mnimo 2 bytes de almacenamiento


WORKING-STORAGE SECTION utiliza como mnimo 91 bytes de almacenamiento
\ \ \ \ \

F I N

D E

M A P A

D E

D A T A

D I V I S I O N

\ \ \ \ \

Figura 14. Mapa de la Data Division

El mapa de la Data Division muestra los campos siguientes:


H

Nmero de instruccin: Se lista el nmero de instruccin generado por el


compilador donde se defini el elemento de datos para cada uno de los
elementos de datos del mapa de la Data Division.

Nivel de elemento de datos: Se indica el nmero de nivel del elemento de


datos tal como se ha especificado en el programa fuente. Los nombres de
ndice se identifican mediante IX en el nmero de nivel y campos en
blanco en los campos SECCION, DESP, LONG y TIPO.

Nombre fuente Se indica el nombre de datos, como se especifica en el


programa fuente.

Seccin: Se indica la seccin donde se defini el elemento utilizando los


cdigos siguientes:
FS
WS
LS
SM
SR

File Section
Working-Storage Section
Linkage Section
Sort/Merge Section
Special Register.

Desplazamiento: Se indica el desplazamiento, en bytes, del elemento


desde el elemento de grupo nivel -01.

Longitud: Se indica la longitud decimal del elemento, en bytes.

Captulo 3. Compilacin de programas fuente en objetos de mdulo

63

Tipo: Se indica el tipo de clase de datos del elemento utilizando los


cdigos siguientes:
Cdigo

Tipo de clase de datos

GROUP
A
AN
ANE
INDEX
BOOLN
ZONED
PACKED

Elemento de grupo
Alfabtico
Alfanumrico
Alfanumrico editado
Elemento de datos de ndice (USAGE INDEX)
Booleano
Decimal con zona (decimal externo)
Decimal empaquetado (decimal interno) (USAGE COMP,
COMP-3 o PACKED-DECIMAL)
Binario (USAGE COMP-4 o BINARY)
Coma flotante interno (USAGE COMP-1 o COMP-2)
Coma flotante externo (USAGE DISPLAY)
Numrico editado
Elementos de datos de puntero (USAGE POINTER)
Elemento de datos de puntero de procedimiento (USAGE
PROCEDURE-POINTER) .*
DBCS
DBCS-editado

BINARY
FLOAT
EFLOAT
NE
POINTR
PRCPTR

|
|

G
GE

Atributos: Se indican los atributos del elemento de la forma siguiente:


Para archivos, se puede dar la informacin siguiente:
DEVICE tipo
ORGANIZATION informacin
ACCESS modalidad
BLOCK CONTAINS informacin
RECORD CONTAINS informacin
LABEL informacin
Se indica RERUN
Se indica SAME AREA
Se indica CODE-SET
Se indica SAME RECORD AREA
Se indica LINAGE.
Para elementos de datos, los atributos indican si la siguiente informacin se especific para elemento:
REDEFINES informacin
VALUE
JUSTIFIED
SYNCHRONIZED
BLANK WHEN ZERO
SIGN IS LEADING
SIGN IS LEADING SEPARATE CHARACTER
SIGN IS SEPARATE CHARACTER
INDICATORS.
Para elementos de tabla, se indican las dimensiones del elemento en
el formato DIMENSION (nn). Para cada dimensin se da un valor
OCCURS mximo. Cuando una dimensin es una variable, se lista
como tal, dando los valores OCCURS inferior y superior.

64

ILE COBOL/400 Gua del Programador

Mensajes FIPS
Los mensajes FIPS, Figura 15, se listan si se especifica el parmetro FLAGSTD.
Consulte la pgina 40 para obtener ms informacin sobre cmo especificar la
opcin para sealar con distintivos FIPS. nicamente se listan los mensajes para
el subconjunto FIPS, mdulos opcionales y/o elementos obsoletos especificados.
Nota: Se indica el nmero de secuencia y el nmero de columna para cada vez
que se emite el mensaje.
*
|
|
|

5716CB1 V3R7M

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

LNC81
LNC812

ID-FIPS
P

LNC813
LNC814
LNC815
LNC8117

96118 LN
IBM ILE COBOL/4
TESTLIB/SAMPLE
M e n s a j e s
C O B O L
F I P S
DESCRIPCIN Y NMEROS DE SECUENCIA CON DISTINTIVO Q

TORAS15

96/7/4 13:57:14

Pgina

Los elementos siguientes son elementos de lenguaje obsoletos.


Prrafo AUTHOR.
6
1
Prrafo DATE-COMPILED.
9
1
Prrafo INSTALLATION.
7
1
Prrafo DATE-WRITTEN.
8
1
Clusula LABEL RECORDS.
25
12

LNC8177

Clusula DATA RECORDS.


27
12
LNC82
Los elementos siguientes estndar no conformes slo son vlidos al nivel FIPS intermedio o superior.
LNC821
Instruccin COPY.
41
8
LNC85
Los elementos siguientes no estndar no conformes son definidos por IBM o extensiones IBM. S
LNC854
Nombre-asignacin en clusula ASSIGN.
19
36
LNC8518
USAGE IS COMPUTATIONAL-3.
33
36
37
36
LNC852
USAGE IS POINTER o PROCEDURE-POINTER.
42
26
LNC8561
Biblioteca por omisin tomada para instruccin COPY.
41
8
LNC8572
Instruccin SKIP1/2/3.
4
13
1
13
12
13
16
13
2
13
22
13
3
13
43
13
49
13
53
13
64
13
68
13
71
13
79
13
87
13
92
13
28 violaciones FIPS con distintivo.
\ \ \ \ \
F I N
D E
M E N S A J E S
C O B O L
F I P S \ \ \ \ \

Figura 15. Mensajes FIPS

Los mensajes FIPS constan de los campos siguientes:


P

ID-FIPS: Este campo lista el nmero de mensaje FIPS.

Nmeros de referencia y descripcin con distintivo: Este campo lista una


descripcin de la condicin con distintivo, seguida de una lista de nmeros
de referencia del programa fuente donde esta condicin se encuentra.
El tipo de nmeros de referencia que se utiliza y sus nombres en la cabecera (que aparece como NMEROS DE SECUENCIA en este listado)
Captulo 3. Compilacin de programas fuente en objetos de mdulo

65

dependen de una opcin especificada en el mandato CRTCBLMOD o en el


mandato CRTBNDCBL o en la instruccin PROCESS, como aparece en la
tabla siguiente:
Opcin

Cabecera

NONUMBER

DESCRIPCIN Y NMEROS DE SECUENCIA CON DISTINTIVO


DESCRIPCIN Y NMEROS PROPORCIONADOS POR EL
USUARIO CON DISTINTIVO
DESCRIPCIN Y NMEROS DE LNEA CON DISTINTIVO

NUMBER
LINENUMBER

Elementos agrupados segn nivel: Estas cabeceras subdividen los mensajes FIPS segn nivel y categora.

Violaciones FIPS con distintivo: Al final del listado FIPS se incluye el


nmero total de violaciones FIPS con distintivo.

Listado de referencias cruzadas


La Figura 16 muestra el listado de referencias cruzadas que se genera cuando se
especifica la opcin XREF. Proporciona una lista que incluye todas las referencias
de datos, referencias de nombre-procedimiento y referencias de nombre-programa
del programa fuente, por nmero de instruccin.

66

ILE COBOL/400 Gua del Programador

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

R e f e r e n c i a s

TESTLIB/SAMPLE

AS4SYS

96/7/4 14:4:27

Pgina

c r u z a d a s

Referencias de datos:
Tipo-datos se indica mediante la letra que sigue a una definicin de nombre-datos.
Estas letras y su significado son:
E = EXTERNAL
G = GLOBAL
X = EXTERNAL y GLOBAL

NOMBRES DATOS
T
ALPHA
DEPEND
DEPENDENTS
FIELD-A
FILE-1
KOUNT
LETTERS
LOCATION
NAME-FIELD
NO-OF-DEPENDENTS
NUMBR
RECORD-NO
RECORD-1
WORK-RECORD
WORKPTR

DEFINIDO
U
24
27
26
19
17
22
23
33
29
35
25
31
18
28
37

REFERENCIAS (\ = CAMBIADO)
V
42
43
27
39
4\
24
42\
43\
4\
44\
46\
45

48
41\

49
42

52
41\

53\
44

46

5\

5
43

55
47

Referencias de procedimiento:
La utilizacin de contexto se indica mediante la letra que sigue a una referencia de nombre-procedimiento.
Estas letras y su significado son:
A
D
E
G
P
T

=
=
=
=
=
=

ALTER (nombre-procedimiento)
GO TO (nombre-procedimiento) DEPENDING ON
Fin de rango de (PERFORM) hasta (nombre-procedimiento)
GO TO (nombre-procedimiento)
PERFORM (nombre-procedimiento)
(ALTER) TO PROCEED TO (nombre-procedimiento)

NOMBRES PROCEDIMIENTO

STEP-1
STEP-2
STEP-3
STEP-4
STEP-5
STEP-6
STEP-7
STEP-8

DEFINIDO

38
4
44
46
47
49
51
54

REFERENCIAS

47P
47E

54D
51D

Figura 16 (Parte 1 de 2). Listado de referencias cruzadas

Captulo 3. Compilacin de programas fuente en objetos de mdulo

67

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/SAMPLE

AS4SYS

96/7/4 14:4:27

Pgina

Referencias de programa:
Tipo-programa del programa externo se indica mediante la palabra que se encuentra en una definicin de nombre-programa.
Estas palabras y su significado son:
EPGM = un objeto de programa que va a enlazarse dinmicamente
BPRC = un programa COBOL o una funcin C o un programa RPG que va a enlazarse
SYS = un programa del sistema

NOMBRES PROGRAMA

DEFINIDO

SAMPLE

REFERENCIAS

2
\ \ \ \ \

F I N

D E

R E F E R E N C I A S

C R U Z A D A S \ \ \ \ \

Figura 16 (Parte 2 de 2). Listado de referencias cruzadas

El listado de referencias cruzadas muestra los campos siguientes:


|
|
|
|

Campo nombres: Se indica el nombre de dato o de procedimiento o el


nombre de programa al que se hace referencia. Los nombres se listan
alfabticamente. Los nombres de programa pueden estar calificados por
un nombre de biblioteca.

Campo Definido: Se indica el nmero de instruccin en el que se defini el


nombre dentro del programa fuente.

Campo Referencias: Se listan todos los nmeros de instruccin en la


misma secuencia con que se hace referencia al nombre en el programa
fuente. Un * a continuacin del nmero de instruccin indica que el elemento se modific en esa instruccin.

Mensajes
La Figura 17 muestra los mensajes generados durante la compilacin del programa.

68

ILE COBOL/400 Gua del Programador

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/SAMPLE

AS4SYS

96/7/4 14:4:27

Pgina

11

M e n s a j e s
INST

W
Y
X
17 IDMEN: LNC848 GRAVEDAD: NUMSEC: 25
Mensaje . . . . :
Se comprueba la sintaxis de la clusula LABEL y no se tiene en cuenta.
17

IDMEN: LNC848 GRAVEDAD: NUMSEC: 27


Mensaje . . . . :
Se comprueba la sintaxis de la clusula DATA RECORDS y no se tiene
en cuenta.
IDMEN: LNC65 GRAVEDAD: NUMSEC:
Mensaje . . . . :
Agrupar/desagrupar bloques para archivo 'FILE-1' se
realizar mediante cdigo generado por compilador.

Resumen de mensajes
AA
Total de mensajes:
Informacin (-4) . . . . . . . . :
3
Aviso
(5-19) . . . . . . . . :

Error
(2-29) . . . . . . . . :

Graves
(3-39) . . . . . . . . :

Terminales (4-99) . . . . . . . . :

-------------------------------------------Total
3

\ \ \ \ \

F I N

BB
Estadsticas:
Registros fuente ledos . . . . . .
Registros de copia ledos . . . . .
Miembros de copia procesados. . . .
Errores de secuencia. . . . . . . .
Mensajes gravedad superior emitidos

LNC899

D E

:
:
:
:
:

M E N S A J E S

\ \ \ \ \

95
1
1

Mdulo SAMPLE creado en biblioteca TESTLIB el 8/11/96 a las 14:4:34.


\ \ \ \ \

F I N

D E

C O M P I L A C I O N

\ \ \ \ \

Figura 17. Mensajes de diagnstico

Se visualizan los campos siguientes:


W

Nmero de instruccin: Este campo lista el nmero de instruccin generado por el compilador asociado a la instruccin del programa fuente para
la que se emiti el mensaje.1 para la que se emiti el mensaje.
Nota: El nmero de instruccin y el nmero de referencia no aparecen
para algunos mensajes que hacen referencia a elementos que
faltan. Por ejemplo, si el prrafo PROGRAM-ID falta, el mensaje
LBL0031 aparece en el listado sin nmero de referencia ni de instruccin

Nmero de referencia: Se indica el nmero de referencia.1 Los nmeros


que aparecen en este campo y la cabecera de columna (que aparece
como NUMSEC) dependen de una opcin especificada en el mandato

El nmero de instruccin y el nmero de referencia no aparecen en algunos mensajes que hacen referencia a elementos que
faltan. Por ejemplo, si falta el prrafo PROGRAM-ID, el mensaje LNC0031 aparece en el listado sin nmero de referencia ni de
instruccin.

Captulo 3. Compilacin de programas fuente en objetos de mdulo

69

CRTCBLMOD o en el mandato CRTBNDCBL o en la instruccin


PROCESS, como se indica en la tabla siguiente.
Opcin

Cabecera

Origen

NONUMBER
NUMBER
LINENUMBER

NUMSEC
NUMBER
NUMLIN

Nmeros de secuencia del archivo fuente


Nmeros de secuencia proporcionados por el usuario
Nmeros de secuencia generados por el compilador

Cuando se emite un mensaje para un registro de un archivo de copia, el


nmero va precedido de un signo +.
Y

IDMEN y Nivel de gravedad: Estos campos indican el nmero de mensaje


y el nivel de gravedad asociado. Los niveles de gravedad se definen del
modo siguiente:

1
2
3
4
5

Informativo
Aviso
Error
Error grave
Irrecuperable (normalmente un error del usuario)
Irrecuperable (normalmente un error de compilador)

Mensaje: El mensaje identifica la condicin e indica la accin que realiza


el compilador.

AA

Estadsticas de mensajes: Este campo indica el nmero total de mensajes


y el nmero de mensajes segn el nivel de gravedad.
El total que se indica es el nmero de mensajes que el compilador genera
para cada nivel de gravedad y no siempre son el nmero listado. Por
ejemplo, si se ha especificado FLAG(10), no se listan aquellos mensajes
cuyo nivel de gravedad sea inferior a 10. El recuento, sin embargo, indica
el nmero que se hubiera impreso si estos no se hubieran suprimido.

BB

70

Estadsticas del compilador: Este campo lista el nmero total de registros


fuente ledos, registros de copia ledos, miembros de copia procesados,
errores de secuencia encontrados y los mensajes de gravedad superior
emitidos.

ILE COBOL/400 Gua del Programador

Captulo 4. Creacin de un objeto de programa


Este apartado proporciona informacin sobre:
cmo crear un objeto de programa enlazando uno o ms objetos de mdulo
entre s.
cmo crear un objeto de programa a partir de instrucciones fuente ILE
COBOL/400
el mandato CRTBNDCBL y sus parmetros
cmo leer un listado del enlazador
cmo crear objetos de programa utilizando uno o ms objetos de mdulo, programas de servicio y directorios de enlace ILE.

Definicin de un objeto de programa


Un objeto de programa es un objeto del sistema ejecutable de tipo *PGM. Para
ILE COBOL/400, el nombre del objeto de programa viene determinado por el
mandato CRTBNDCBL, el mandato CRTPGM o el prrafo PROGRAM-ID del programa fuente COBOL ms externo. El proceso que crea un objeto de programa a
partir de uno o ms objetos de mdulo y programas de servicio referenciados se
conoce como enlace. Uno o ms objetos de mdulo se crean con el mandato
CRTCBLMOD, o se crean temporalmente con el mandato CRTBNDCBL antes de
crear uno o ms objetos de programa enlazados. El enlace es un proceso que
toma objetos de mdulo producidos por los mandatos CRTCBLMOD o
CRTBNDCBL y los combina para crear un programa de servicio o un objeto de
programa enlazado ejecutable.
Cuando se crea un objeto de programa, slo los procedimientos ILE en aquellos
objetos de mdulo que contienen datos de depuracin pueden depurarse con el
depurador fuente ILE. Los datos de depuracin no afectan el rendimiento del objeto
de programa en ejecucin. Los datos de depuracin aumentan el tamao del
objeto de programa generado.
Los objetos de programa se ejecutan utilizando llamadas dinmicas de programas.
El punto de entrada al objeto de programa es el PEP.

El proceso de enlace
El proceso de enlace mejora el rendimiento de la ejecucin ya que los objetos de
programa pueden utilizar llamadas estticas de procedimientos a rutinas ya enlazadas como parte de un objeto de programa. Las llamadas dinmicas de programas no son necesarias para acceder a las rutinas. Los objetos de mdulo
individuales que se han creado con diferentes compiladores HLL ILE pueden enlazarse conjuntamente en el mismo objeto de programa permitiendo que una rutina
se codifique en el lenguaje ms apropiado y a continuacin se enlace a un objeto
de programa que la requiera. Los objetos de mdulo compilados anteriormente
pueden enlazarse en varias secuencias para crear nuevos objetos de programa
ejecutables. Los objetos de mdulo compilados anteriormente pueden volver a utilizarse para crear nuevos objetos de programa ejecutables sin tener que volver a
compilar el programa fuente original. De este modo, el objeto de mdulo puede
volver a utilizarse cuando sea necesario. En lugar de volver a crear programas

Copyright IBM Corp. 1994, 1996

71

cada vez que el objeto de mdulo cambia, pueden utilizarse programas de servicio.
Las rutinas comunes pueden crearse como programas de servicio. Si la rutina
cambia pero su interfaz no lo hace, o si slo se realizan cambios compatibles
avanzados en la interfaz, el cambio podr incorporarse volviendo a crear el programa de servicio. Los objetos de programa y programas de servicio que utilizan
esas rutinas comunes no tienen que volver a crearse.
Existen dos vas para crear un objeto de programa utilizando el proceso de enlace.
El diagrama que aparece a continuacin le indica las dos vas disponibles:

Va

Va

Programa fuente ILE COBOL/4

Archivos descritos externamente,

Cdigo fuente de copia

CRTCBLMOD

CRTBNDCBL

6

Programas de ser-

vicio, objetos de
Objeto(s)

mdulo creados

de mdulo

anteriormente

CRTPGM

Objeto(s) de pro-
grama ejecutables

Objeto(s) de pro-
grama ejecutables

Figura 18. Dos vas para crear un objeto de programa

Estas dos vas utilizan el proceso de enlace. El mandato Crear programa


(CRTPGM) crea un objeto de programa con objetos de mdulo creados a partir de
programas fuente ILE COBOL/400 utilizando el mandato Crear mdulo COBOL
(CRTCBLMOD) y cero o ms programas de servicio.
Nota: Los objetos de mdulo creados con los mandatos Crear mdulo RPG
(CRTRPGMOD), Crear mdulo C (CRTCMOD) y Crear mdulo CL
(CRTCLMOD) tambin pueden enlazarse utilizando el mandato Crear programa (CRTPGM).
El mandato Crear COBOL enlazado (CRTBNDCBL) crea uno o ms objetos de
mdulo temporales a partir de una ms unidades de compilacin ILE COBOL/400,
y a continuacin crea uno o ms objetos de programa. Una vez creado el objeto
de programa, CRTBNDCBL suprime el o los objetos de mdulo que ha creado.
Este mandato realiza las tareas combinadas de los mandatos Crear mdulo
COBOL (CRTCBLMOD) y Crear programa (CRTPGM) en un slo paso. No obstante, solo puede enlazarse un nico miembro fuente de entrada utilizando este
paso.
Nota: Cada uno de los objetos de programa slo reconoce un PEP (y un UEP).
Si se enlazan varios objetos de mdulo entre s para crear un objeto de
programa utilizando CRTPGM y cada uno de estos objetos de mdulo tiene
un PEP, es preciso especificar qu PEP de objetos de mdulo va a utili-

72

ILE COBOL/400 Gua del Programador

zarse como PEP del objeto de programa en el parmetro ENTMOD. Asimismo, el orden en que los objetos de mdulo y programas de servicio se
especifican en el mandato CRTPGM afecta el modo en que se resuelven
los smbolos durante el proceso de enlace. Por lo tanto, es importante que
se comprenda cmo se realiza el proceso de enlace. Para obtener ms
informacin sobre el proceso de enlace, consulte el manual ILE Conceptos.
|
|
|
|
|
|

Un directorio de enlace contiene los nombres de los mdulos y programas de


servicio que es posible que necesite para crear un programa de servicio o programa ILE. Los mdulos o programas de servicio que aparecen en el directorio de
enlace se utilizan cuando proporcionan una exportacin que permite satisfacer
alguna peticin de importacin no resuelta. Un directorio de enlace es un objeto
del sistema que se identifica mediante el smbolo *BNDDIR.

|
|

Los directorios de enlace son opcionales. Los motivos para la utilizacin de directorios de enlace son la comodidad y el tamao del programa.

|
|
|
|
|
|
|

Ofrecen un mtodo conveniente para empaquetar los mdulos o programas de


servicio que es posible que necesite al crear su propio programa de servicio o
programa ILE. Por ejemplo, un directorio de enlace puede contener todos los
mdulos y programas de servicio que proporcionan funciones matemticas. Si
desea utilizar algunas de estas funciones, es suficiente con especificar el directorio de enlace sin necesidad de especificar cada mdulo o programa de servicio que utilice.

|
|

Los directorios de enlace pueden reducir el tamao del programa, ya que no


es necesario especificar mdulos o programas de servicio que no se utilizan.

|
|
|

Las restricciones de las entradas de un directorio de enlace son escasas. El


nombre de un mdulo o programa de servicio puede aadirse a un directorio de
enlace aunque este objeto todava no exista.

|
|

Para obtener una lista de los mandatos CL que se utilizan con los directorios de
enlace, consulte el manual ILE Conceptos. Caractersticas de un objeto *BNDDIR:

|
|
|

Es un mtodo conveniente para agrupar los nombres de los mdulos y programas de servicio que es posible que se necesiten para crear un programa de
servicio o un programa ILE.

|
|

Como las entradas de un directorio de enlace son slo nombres, no es necesario que la lista de objetos ya exista en el sistema.

Los nicos nombres de biblioteca vlidos son *LIBL o la biblioteca especfica.

|
|
|

Los objetos de la lista son opcionales. Los objetos incluidos slo se utilizan si
existen importaciones no resueltas y el objeto proporciona una exportacin que
permite cumplir la peticin de importacin no resulta.

Utilizacin del mandato Crear programa (CRTPGM)


El mandato Crear programa (CRTPGM) crea un objeto de programa a partir de uno
o ms objetos de mdulo creados anteriormente y, si es necesario, uno o ms
programas de servicio. Es posible enlazar objetos de mdulo creados con cualquiera de los mandatos Crear mdulo ILE: CRTCBLMOD, CRTCMOD,
CRTRPGMOD o CRTCLMOD.

Captulo 4. Creacin de un objeto de programa

73

Nota: Para utilizar el mandato CRTPGM, debe tener autorizacin sobre ste y los
mdulos necesarios tienen que haberse creado con anterioridad utilizando
los mandatos CRTCBLMOD, CRTCMOD, CRTRPGMOD o CRTCLMOD.
Antes de crear un objeto de programa utilizando el mandato CRTPGM, siga los
pasos siguientes:
1. Establezca un nombre de programa.
2. Identifique el objeto u objetos de mdulo y, si es necesario, el programa o programas de servicio que desea enlazar en el objeto de programa.
3. Identifique los directorios de enlace que va a utilizar. Las referencias implcitas
a directorios de enlace para programas de servicio de ejecucin ILE
COBOL/400 y API enlazables ILE, se realizan a partir de objetos de mdulo
creados con los mandatos CRTCBLMOD y CRTBNDCBL.
4. Identifique qu PEP de objeto de mdulo se va a utilizar como el PEP para el
objeto de programa que se est creando.Especifique este objeto de mdulo en
el parmetro ENTMOD de CRTPGM.
Si se especifica ENTMOD(*FIRST) en lugar de identificar de forma explcita un
objeto de mdulo en el parmetro ENTMOD, el orden en que se produce el
enlace es importante para decidir qu objeto de mdulo contiene el PEP para
el objeto de programa que se est creando. Es posible que los objetos de
mdulo que se listan en el parmetro MODULE o aquellos localizados
mediante un directorio de enlace contengan uno o ms PEP cuando slo
puede utilizarse uno. El orden en que se realiza el enlace tambin es importante por otras razones como, por ejemplo, la resolucin de smbolos. Para
obtener ms informacin sobre el enlace, consulte el manual ILE Conceptos.
5. Establezca si el mandato permitir nombres de variables y/o procedimientos
duplicados.
Es posible que est enlazando en un objeto de programa objetos de mdulo
en los que cada uno define los mismos nombres de procedimiento y nombres
de variables de varias formas diferentes.
6. Identifique el grupo de activacin donde se ejecuta el programa. Consulte el
apartado Activacin y grupos de activacin en la pgina 175 para obtener
una descripcin sobre los grupos de activacin.
Para crear un objeto de programa utilizando el mandato CRTPGM, lleve a cabo los
pasos siguiente:
1. Entre el mandato CRTPGM.
2. Entre los valores adecuados para los parmetros del mandato.
La Tabla 1 en la pgina 75 lista los parmetros del mandato CRTPGM y sus
valores por omisin. Para obtener una descripcin completa del mandato
CRTPGM y sus parmetros, consulte el manual CL Reference.

74

ILE COBOL/400 Gua del Programador

Tabla 1. Parmetros del mandato CRTPGM y sus valores por omisin


Grupo parmetros

Parmetro(Valor por omisin)

Identificacin

PGM(nombre biblioteca/nombre programa)


MODULE(*PGM)

Acceso programa

ENTMOD(*FIRST)

Enlace

BNDSRVPGM(*NONE)
BNDDIR(*NONE)

Ejecucin

ACTGRP(*NEW)

Varios

OPTION(*GEN *NODUPPROC *NODUPVAR *WARN *RSLVREF)


DETAIL(*NONE)
ALWUPD(*YES)
ALWRINZ(*NO)
REPLACE(*YES)
AUT(*LIBCRTAUT)
TEXT(*ENTMODTXT)
TGTRLS(*CURRENT)
USRPRF(*USER)

Una vez que se ha entrado el mandato CRTPGM, el objeto de programa se crea


de la forma siguiente:
1. Los objetos de mdulo listados se copian en lo que se convertir en el objeto
de programa.
2. El objeto de mdulo que contiene el PEP se identifica y se localiza la primera
importacin de este mdulo.
3. Los objetos de mdulo se comprueban en el orden en que se listan y la
primera importacin se compara con una exportacin de mdulo.
4. Se vuelve al primer objeto de mdulo y se localiza la siguiente importacin.
5. Se resuelven todas las importaciones del primer objeto de mdulo.
6. Se continua con el siguiente objeto de mdulo y se resuelven todas las importaciones.
7. Se resuelven todas las importaciones de cada uno de los objetos de mdulo
siguientes hasta que se hayan resuelto todas.
8. Si se especifica OPTION(*RSLVREF) y alguna de las importaciones no pueden
resolverse con una exportacin, el proceso de enlace termina sin crear el
objeto de programa. Si se especifica OPTION(*UNRSLVREF) no es necesario
que todas las importaciones se resuelvan con exportaciones para crear el
objeto de programa. Si el objeto de programa utiliza una de estas importaciones no resueltas durante la ejecucin, se emitir el mensaje de excepcin
MCH4439.
9. Cuando todas las importaciones se hayan resuelto, el proceso de enlace finalizar y se crear el objeto de programa.

Captulo 4. Creacin de un objeto de programa

75

Ejemplo de enlace de varios mdulos para crear un objeto de


programa
Este ejemplo muestra cmo utilizar el mandato CRTPGM para enlazar los objetos
de mdulo A, B y C en el objeto de programa ABC. El objeto de mdulo que
contiene el PEP y el UEP para el objeto de programa es el objeto de mdulo indicado en el parmetro ENTMOD.
Deberan resolverse todas las referencias externas para que el mandato CRTPGM
enlace varios mdulos en un objeto de programa. Las referencias a las funciones
de ejecucin ILE COBOL/400 se resuelven a medida que se enlazan automticamente en un objeto de programa que contiene objetos de mdulo ILE
COBOL/400.
1. Para enlazar varios objetos de mdulo para crear un objeto de programa,
teclee:
CRTPGM PGM(ABC) MODULE(A B C) ENTMOD(\FIRST) DETAIL(\FULL)
y pulse Intro.

Utilizacin del mandato Crear COBOL enlazado (CRTBNDCBL)


El mandato Crear COBOL enlazado (CRTBNDCBL) crea uno o ms objetos de
programa a partir de un nico miembro de archivo fuente ILE COBOL/400 en un
solo paso. Este mandato arranca el compilador ILE COBOL/400 y crea objetos de
mdulo temporales que enlaza en uno o ms objetos de programa de tipo *PGM.
A diferencia de lo que ocurre con el mandato CRTPGM, cuando se utiliza el
mandato CRTBNDCBL, no es necesario realizar un paso anterior independiente
para crear uno o ms objetos de mdulo utilizando el mandato CRTCBLMOD. El
mandato CRTBNDCBL realiza las tareas combinadas de los mandatos Crear
mdulo COBOL (CRTCBLMOD) y Crear programa (CRTPGM) creando objetos de
mdulo temporales a partir del miembro de archivo fuente y a continuacin creando
uno o ms objetos de programa. Una vez creado el o los objetos de programa,
CRTBNDCBL suprime los objetos de mdulo que ha creado.
Nota: Si desea conservar los objetos de mdulo, utilice CRTCBLMOD en lugar de
CRTBNDCBL. Si utiliza CRTCBLMOD, tendr que utilizar CRTPGM para
enlazar los objetos de mdulo en uno o ms objetos de programa.
Adems, si desea utilizar opciones de CRTPGM diferentes de las presupuestas por CRTBNDCBL, utilice CRTCBLMOD y CRTPGM.

Utilizacin de pantallas de solicitud con el mandato CRTBNDCBL


Si necesita solicitudes, teclee CRTBNDCBL y pulse F4 (Solicitud). Aparecer la
pantalla CRTBNDCBL que lista parmetros y proporciona valores por omisin. Si
ya se han proporcionado parmetros antes de pedir solicitudes, la pantalla aparecer con los valores de los parmetros cumplimentados. Si necesita ayuda, teclee
CRTBNDCBL y pulse F1 (Ayuda).

76

ILE COBOL/400 Gua del Programador

Sintaxis del mandato CRTBNDCBL


Mandato CRTBNDCBL - Formato
Trabajo: B,I

Pgm: B,I

REXX: B,I

Exec

55CRTBNDCBL5

\CURLIB/ \PGMID

PGM(nombre-biblioteca/nombre-programa)
55

\LIBL/ QCBLLESRC

\PGM

SRCFILE(\CURLIB/nombre-archivo-fuente) SRCMBR(nombre-miembro-archivo-fuente)
nombre-biblioteca/
55

\PRINT

3

\SRCMBRTXT

OUTPUT(\NONE) GENLVL(valor-nivel-gravedad) TEXT(\BLANK)


'descripcin'

|
|

55
OPTION( Detalles de OPTION )
\NOVARCHAR \NODATETIME \NOPICXGRAPHIC \NOFLOAT

CVTOPT()
\VARCHAR \DATETIME \PICXGRAPHIC \FLOAT
\PICGGRAPHIC
\NOPICGGRAPHIC
55

\NOMAX 3

\STMT

\NONE

MSGLMT(nmero-mximonivel-gravedad) DBGVIEW(\SOURCE) OPTIMIZE(\BASIC)


\LIST
\FULL
\ALL
\NONE
55

\NOFIPS \NOOBSOLETE

\DFRWRT \UNDSPCHR \ACCUPDALL

FLAGSTD() EXTDSPOPT()
\MINIMUM \OBSOLETE
\NODFRWRT \NOUNDSPCHR \ACCUPDNE
\INTERMEDIATE
\HIGH
55


\YES

\USER

FLAG(nivel-gravedad) REPLACE(\NO) USRPRF(\OWNER)


55

\LIBCRTAUT

\PGM

\YES

AUT(\ALL) LINKLIT(\PRC) SIMPLEPGM(\NO)


\CHANGE
\USE
\EXCLUDE
nombre-lista-autorizaciones

|
|

55

\CURRENT

\HEX

TGTRLS(\PRV) SRTSEQ(\JOB)
nivel-release
\JOBRUN
\LANGIDUNQ
\LANGIDSHR
\LIBL/nombre-tabla-sec-ordenacin
\CURLIB/
nombre-biblioteca/

|
|
|

55

\JOBRUN

\PEP

LANGID(\JOB) ENBPFRCOL(\ENTRYEXIT)
nombre-identificador-idioma
\FULL

|
|
|
|
|
|

55%

\NONE

QILE

BNDDIR(nombre-directorio-enlace) ACTGRP(\NEW)
\LIBL

\CALLER
\CURLIB
nombre-grupo-activacin
\USRLIBL
nombre-biblioteca

Captulo 4. Creacin de un objeto de programa

77

Mandato CRTBNDCBL - Formato (continuacin)


Detalles de OPTION:
\SOURCE
\SRC \NOXREF \GEN \NOSEQUENCE \NOVBSUM \NONUMBER \NOMAP \NOOPTIONS
5
\NOSOURCE \XREF \NOGEN \SEQUENCE \VBSUM \NUMBER \MAP \OPTIONS
\NOSRC
\LINENUMBER
\QUOTE \NOSECLVL \PRTCORR \MONOPRC \RANGE \NOUNREF \NOSYNC \NOCRTF
55
\APOST \SECLVL \NOPRTCORR \NOMONOPRC \NORANGE \UNREF \SYNC \CRTF
\NODUPKEYCHK \NOINZDLT \NOBLK \STDINZ \NODDSFILLER \NOIMBEDERR \STDTRUNC
55
\DUPKEYCHK \INZDLT \BLK \NOSTDINZ \DDSFILLER \IMBEDERR \NOSTDTRUNC

|
|

\NOCHGPOSSGN \NOEVENTF
5
\CHGPOSSGN \EVENTF

Parmetros del mandato CRTBNDCBL


Casi todos los parmetros de CRTBNDCBL son idnticos a los que se han mostrado para CRTCBLMOD anteriormente. En este apartado nicamente se indicarn las diferencias entre los dos mandatos.
CRTBNDCBL se diferencia de CRTCBLMOD en lo siguiente:
introduccin del parmetro PGM en lugar del parmetro MODULE
el parmetro SRCMBR utiliza la opcin *PGM (en lugar de la opcin
*MODULE)
utilizacin diferente del parmetro REPLACE
introduccin del parmetro USRPRF
introduccin del parmetro SIMPLEPGM
|

introduccin del parmetro BNDDIR

introduccin del parmetro ACTGRP


Parmetro PGM:
Especifica el nombre de programa y el nombre de biblioteca para el objeto de
programa que se est creando. El nombre de programa y de biblioteca deben
cumplir las normas del convenio de denominacin de AS/400. Los valores
posibles son:
*PGMID
El nombre para el objeto de programa compilado se toma del prrafo
PROGRAM-ID del programa fuente ILE COBOL/400. Cuando se especifica SIMPLEPGM(*NO), el nombre del objeto de programa compilado se
toma del prrafo PROGRAM-ID del primer programa fuente ILE
COBOL/400 de la secuencia de programas fuente (varias unidades de
compilacin en un nico miembro de archivo fuente).

Nombre-programa
Entre un nombre para identificar el programa ILE COBOL/400 compilado.
Si se especifica un nombre de programa para este parmetro y se compila
una secuencia de programas fuente y se especifica SIMPLEPGM(*YES), el
primer objeto de programa de la secuencia utiliza este nombre; el resto de
objetos de programa utilizan el nombre especificado en el prrafo
PROGRAM-ID del programa fuente ILE COBOL/400 correspondiente.

78

ILE COBOL/400 Gua del Programador

Los posibles valores para la biblioteca son:


*CURLIB
El objeto de programa que se crea se almacena en la biblioteca actual. Si
no se ha asignado una biblioteca como biblioteca actual, se utiliza QGPL.

nombre-biblioteca
Entre el nombre de la biblioteca donde se va a almacenar el objeto de programa creado.
Parmetro REPLACE:
Especifica si se crea un objeto de programa nuevo cuando ya existe un objeto
de programa con el mismo nombre en la biblioteca especificada o presupuesta.
Los objetos de mdulo intermedios que se crean durante el proceso del
mandato CRTBNDCBL no estn sujetos a las especificaciones de REPLACE y
tienen un REPLACE(*NO) presupuesto contra la biblioteca QTEMP. Los
objetos de mdulo intermedios se suprimen cuando el mandato CRTBNDCBL
finaliza el proceso. Los valores posibles para el parmetro REPLACE son:
*YES
Se crea un objeto de programa nuevo y se sustituyen los objetos de programa con el mismo nombre existentes en la biblioteca especificada o presupuesta. El objeto de programa con el mismo nombre existente en la
biblioteca especificada o presupuesta se traslada a la biblioteca QRPLOBJ.
*NO
No se crea un objeto de programa nuevo si un objeto de programa con el
mismo nombre ya existe en la biblioteca especificada. El objeto de programa existente no se sustituye, aparece un mensaje y la compilacin se
detiene.
Parmetro USRPRF:
Especifica el perfil de usuario que ejecutar el objeto de programa que se ha
creado. Se utiliza el perfil del propietario del programa o del usuario del programa para ejecutar el objeto de programa y controlar los objetos que puede
utilizar este objeto (incluyendo la autorizacin que el objeto de programa tiene
sobre cada objeto). Este parmetro no se actualiza si el objeto de programa
ya existe. Para modificar el valor de USRPRF, suprima el objeto de programa
y vuelva a compilar utilizando el valor correcto (o, si los objetos *MODULE
componentes existen, puede elegir invocar el mandato CRTPGM).
Los valores posibles son:
*USER
Cuando se ejecute el objeto de programa se utilizar el perfil del usuario
del programa.
*OWNER
Cuando se ejecute el objeto de programa se utilizarn tanto el perfil de
usuario de propietario como el de usuario. La agrupacin conjunta de
autorizaciones sobre objetos de los perfiles de usuario y de propietario se
utilizarn para encontrar y acceder a objetos durante la ejecucin del
objeto de programa. Todos los objetos que se crean cuando se ejecuta el
programa son propiedad del usuario del programa.
Parmetro SIMPLEPGM:
Especifica si se crea un objeto de programa para cada una de las unidades de
compilacin de la secuencia de programas fuente. Esta opcin solo tiene
Captulo 4. Creacin de un objeto de programa

79

sentido si el miembro fuente de entrada para este mandato contiene una


secuencia de programas fuente que generan varios objetos de mdulo. Esta
opcin no se tendr en cuenta si se especifica pero el miembro fuente de
entrada no tiene una secuencia de programas fuente. Los valores posibles
son:
*YES
Se crea un objeto de programa para cada una de las unidades de compilacin de la secuencia de programas fuente. Si se especifica
REPLACE(*NO) y un objeto de programa con el mismo nombre ya existe
para una unidad de compilacin de la secuencia de programas fuente, ese
objeto de programa no se sustituye y la compilacin contina en la
siguiente unidad de compilacin
*NO
Slo se crea un objeto de programa de todas las unidades de compilacin
de la secuencia, siendo la primera unidad de compilacin la que represente
la Entrada de programa. Con SIMPLEPGM(*NO), si un programa fuente
de la secuencia de programas fuente no puede generar un objeto de
mdulo debido a una anomala, ninguno de los programas fuente
siguientes de la secuencia podr generar objetos de mdulo.
|
|
|

Parmetro BNDDIR:
Especifica la lista de directorios de enlace que se utilizan en la resolucin de
smbolos. Es posible especificar hasta 50 directorios de enlace.

|
|

*NONE
No se especifica ningn directorio de enlace.

|
|
|
|

nombre-directorio-enlace
Especifique el nombre del directorio de enlace que se utiliza en la resolucin de smbolos. El nombre de directorio puede calificarse con uno de los
siguientes valores de biblioteca:

|
|
|
|

*LIBL
El sistema busca en la lista de bibliotecas para hallar la biblioteca en la
que est almacenado el directorio de enlace. Se trata del valor por
omisin.

|
|
|
|

*CURLIB
La bsqueda se realiza en la biblioteca actual del trabajo. Si no se especifica ninguna biblioteca como la biblioteca actual del trabajo se utiliza la
biblioteca QGPL.

|
|
|

*USRLIBL
La bsqueda slo se realiza en las bibliotecas de la parte del usuario de la
lista de bibliotecas del trabajo.

|
|

nombre-biblioteca
Especifique el nombre de la biblioteca en que debe realizarse la bsqueda.

|
|
|

Parmetro ACTGRP:
Especifica el grupo de activacin al que este programa est asociado cuando
se llama.

|
|
|

QILE
Cuando se llama a este programa, ste se activa en el grupo de activacin
QILE indicado. Se trata del valor por omisin.

80

ILE COBOL/400 Gua del Programador

|
|
|

*NEW
Cuando se llama a este programa, ste se activa en un grupo de activacin nuevo.

|
|
|

*CALLER
Cuando se llama a este programa, ste se activa en el grupo de activacin
del llamador.

|
|
|

nombre-grupo-activacin
Especifique el nombre del grupo de activacin que debe utilizarse cuando
se llame a este programa.

Invocacin a CRTPGM de forma implcita desde CRTBNDCBL


Existen valores por omisin presupuestos para utilizar cuando CRTPGM se invoca
implcitamente desde el mandato CRTBNDCBL. Se describen a continuacin.
Los parmetros utilizados en CRTPGM cuando se invoca desde CRTBNDCBL son
los siguientes:
PGM
Cuando se especifica o presupone SIMPLEPGM(*YES), se invoca a CRTPGM
para cada unidad de compilacin en la secuencia de programas fuente. El
nombre de programa especificado en el prrafo PROGRAM-ID del programa
fuente ILE COBOL/400 ms externo de cada unidad de compilacin se utiliza
con el parmetro PGM para CRTPGM cada vez que ste se invoca. Se crea
un objeto de programa enlazado individualmente para cada unidad de compilacin.
Cuando se especifica SIMPLEPGM(*NO), CRTPGM se invoca slo una vez
contra todas las unidades de compilacin de la secuencia de programas fuente
a la vez. nicamente se utiliza el nombre de programa especificado en el
prrafo PROGRAM-ID del programa fuente ILE COBOL/400 ms externo
correspondiente de la primera unidad de compilacin de la secuencia de programas fuente con el parmetro PGM para CRTPGM cuando ste se invoca.
Todas las unidades de compilacin se enlazan entre s para crear un objeto de
programa.
MODULE
Cuando se especifica o presupone SIMPLEPGM(*YES), el nombre del mdulo
creado en QTEMP para cada unidad de compilacin se utiliza con el parmetro
MODULE para CRTPGM cada vez que ste se invoca.
Cuando se especifica SIMPLEPGM(*NO), todos los nombres de los mdulos
que se han creado en QTEMP para las unidades de compilacin se listan en el
parmetro MODULE para el mandato CRTPGM cuando ste se invoca.
|
|
|

BNDDIR
Especifica la lista de directorios de enlace que se utilizan en la resolucin de
smbolos.

|
|

Si se especifica *NONE (el valor por omisin), no se utiliza ningn directorio de


enlace.

|
|
|

Si se especifica nombre-directorio-enlace, el nombre del directorio de enlace


que especifique se utiliza en la resolucin de smbolos. El nombre de directorio puede calificarse con uno de los siguientes valores de biblioteca:

.
Captulo 4. Creacin de un objeto de programa

81

|
|
|

*LIBL

El sistema busca en la lista de bibliotecas para hallar la biblioteca


en la que est almacenado el directorio de enlace. Se trata del valor
por omisin.

|
|
|

*CURLIB La bsqueda se realiza en la biblioteca actual del trabajo. Si no se


especifica ninguna biblioteca como la biblioteca actual del trabajo se
utiliza la biblioteca QGPL.

|
|
|

*USRLIBL

|
|
|

nombre-biblioteca
Especifique el nombre de la biblioteca en que debe realizarse la
bsqueda.

La bsqueda slo se realiza en las bibliotecas de la parte del


usuario de la lista de bibliotecas del trabajo.

|
|

ACTGRP
Se utiliza el grupo de activacin especificado
REPLACE
Se utiliza la opcin REPLACE especificada en el mandato CRTBNDCBL
USRPRF
Se utiliza la opcin USRPRF especificada en el mandato CRTBNDCBL
AUT
Se utiliza la opcin AUT especificada en el mandato CRTBNDCBL
TEXT
Se utiliza la opcin TEXT especificada en el mandato CRTBNDCBL
TGTRLS
Se utiliza la opcin TGTRLS especificada en el mandato CRTBNDCBL
Se utilizan los valores por omisin para el resto de parmetros de CRTPGM
cuando se invoca desde el mandato CRTBNDCBL. Consulte el mandato CRTPGM
en el manual CL Reference para obtener una descripcin de estos valores por
omisin.

Ejemplo de enlace de un objeto de mdulo para crear un objeto de


programa
Este ejemplo muestra cmo crear un objeto de programa a partir de un mdulo
utilizando el mandato CRTBNDCBL.
1. Para crear un objeto de programa, teclee:
CRTBNDCBL PGM(MYLIB/XMPLE1)
SRCFILE(MYLIB/QCBLLESRC) SRCMBR(XMPLE1)
OUTPUT(\PRINT)
TEXT('Programa ILE COBOL/4')
CVTOPT(\FLOAT)

y pulse Intro.
El mandato CRTBNDCBL crea el programa XMPLE1 en MYLIB. La opcin
OUTPUT(*PRINT) especifica que desea un listado de compilacin.
2. Teclee uno de los siguientes mandatos CL para ver el listado.

82

ILE COBOL/400 Gua del Programador

Nota: Para poder ver un listado de compilador debe tener autorizacin para
utilizar los mandatos que se listan a continuacin.
DSPJOB y a continuacin seleccione la opcin 4 (Visualizar archivos en
spool)
WRKJOB
WRKOUTQ nombre-cola
WRKSPLF

Especificacin de la secuencia de ordenacin de idioma en


CRTBNDCBL
En el momento en que se compila el programa fuente COBOL, se puede especificar de forma explcita el orden de clasificacin que el programa utilizar cuando
se ejecute, o se puede especificar cmo se va a determinar el orden de clasificacin cuando se ejecute el programa.
El orden de clasificacin se especifica mediante CRTBNDCBL del mismo modo
que se hace con CRTCBLMOD. Para obtener una descripcin completa de cmo
especificar un orden de clasificacin NLS, consulte el apartado Especificacin de
la secuencia de ordenacin de idioma en CRTCBLMOD en la pgina 46.

Lectura de un listado del enlazador


El proceso de enlace puede producir un listado que describe los recursos que se
han utilizado, los smbolos y objetos encontrados y los problemas resueltos o no
producidos durante el proceso de enlace. El listado se produce como un archivo
de spool para el trabajo que se utiliza para entrar el mandato CRTPGM. El valor
por omisin del mandato, *NONE, indica que no se genere esta informacin. Sin
embargo, puede seleccionar generarla como salida impresa segn tres niveles de
detalle, que se pueden especificar como valor del parmetro DETAIL:
*BASIC
*EXTENDED
*FULL
El listado del enlazador incluye las secciones siguientes segn el valor especificado en DETAIL:
Tabla 2. Secciones del listado del enlazador en base al parmetro DETAIL
Nombre seccin
Resumen de opciones de
mandato
Tabla de resumen breve
Tabla de resumen ampliado
Listado de informacin del
enlazador
Listado de referencias cruzadas
Estadsticas de enlace

*NONE

*BASIC

*EXTENDED

*FULL

X
X

X
X
X

X
X
X
X

La informacin que se incluye en este apartado puede ayudarle a diagnosticar problemas si el enlace no ha sido satisfactorio o dar informacin sobre lo que el enlazador se ha encontrado durante el proceso.
Captulo 4. Creacin de un objeto de programa

83

Ejemplo de un listado del enlazador


Los listados de ejemplo que se presentan a continuacin muestran el listado del
enlazador que se genera utilizando el mandato CRTPGM. En el texto siguiente se
hace referencia a figuras. Estas referencias se indican mediante la impresin invertida de las letras sobre fondo oscuro, por ejemplo ( Z ). Las letras del texto en
impresin invertida corresponden a las letras que se encuentran en las figuras.

Resumen de opciones de mandato


El resumen de opciones de mandato se produce siempre que se solicita un listado
del enlazador. Muestra las opciones que se utilizaron cuando el programa ILE se
cre. Es posible que desee guardar esta informacin sobre el mandato para consultarla en un futuro si tiene que crear el programa de nuevo. La Figura 19
muestra el listado de resumen de opciones de mandato
Crear Programa
5716SS1 V3R7M

96118

TESTLIB/EXTLFL

Programa . . . . . . . . . . . . . . .
Biblioteca . . . . . . . . . . . . .
Mdulo de proc. de entrada de programa
Biblioteca . . . . . . . . . . . . .
Grupo de activacin. . . . . . . . . .
Opciones de creacin . . . . . . . . .
Detalle de listados. . . . . . . . . .
Permitir actualizacin . . . . . . . .
Perfil de usuario. . . . . . . . . . .
Sustituir programa existente . . . . .
Autorizacin . . . . . . . . . . . . .
Release destino. . . . . . . . . . . .
Permitir reinicializacin. . . . . . .
Texto. . . . . . . . . . . . . . . . .
Mdulo

Biblioteca

EXTLFL

TESTLIB

Programa
servicio

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

:
:
:
:
:
:
:
:
:
:
:
:
:
:

Pgina
1
9:46:41

AS4SYS

96/7/4

EXTLFL
TESTLIB
\FIRST
\NEW
\GEN
\FULL
\YES
\USER
\YES
\LIBCRTAUT
\CURRENT
\NO
\ENTMODTXT

\NODUPPROC

\NODUPVAR

\WARN

\RSLVREF

Mdulo

Biblioteca

Mdulo

Biblioteca

Mdulo

Biblioteca

Biblioteca

Programa
servicio

Biblioteca

Programa
servicio

Biblioteca

Programa
servicio

Biblioteca

Biblioteca

Directorio
enlace

Biblioteca

Directorio
enlace

Biblioteca

Directorio
enlace

Biblioteca

\NONE
Directorio
enlace
\NONE

Figura 19. Listado resumen de opciones del mandato CRTPGM

Tabla de resumen breve


Esta Tabla de resumen breve, disponible cuando se especifica *BASIC,
*EXTENDED o *FULL, refleja los errrores hallados durante el proceso de enlace.
La Figura 20 en la pgina 85 muestra el diseo de la Tabla de resumen breve

84

ILE COBOL/400 Gua del Programador

Crear Programa
5716SS1 V3R7M

96118

TESTLIB/EXTLFL

AS4SYS

Pgina
3
9:46:41

96/7/4

Tabla de resumen breve


Procedimientos de entrada de programa. . . . . . :
Smbolo
D

Tipo
E
\MODULE

Biblioteca
F
TESTLIB

Objeto
G
EXTLFL

Identificador
H
_Qln_pep

Varias definiciones firmes . . . . . . . . . . :

Referencias no resueltas . . . . . . . . . . . :

\ \ \ \ \

F I N

D E

T A B L A

D E

R E S U M E N

B R E V E

\ \ \ \ \

Figura 20. Listado CRTPGM - Tabla de resumen breve

La tabla consta de tres listas con el nmero de entradas en cada una de las
siguientes categoras:
A

Procedimientos de entrada de programa: Nmero de procedimientos controlados por un programa de llamada.

Varias definiciones firmes: Nmero de procedimientos de exportacin de


mdulo con el mismo nombre. Debera ser 0.

Referencias no resueltas: Nmero de variables o procedimientos importados para los que no se localiz una exportacin. Debera ser 0.

Smbolo #: El nmero de Smbolo se obtiene del listado de informacin del


enlazador que aparece en el apartado Listado de informacin del
enlazador en la pgina 86. Si se especifica *BASIC en el parmetro
DETAIL, este rea queda en blanco.

Tipo: En el campo Tipo se indica el tipo de objeto que contiene el identificador.

Biblioteca: En el campo Biblioteca se indica el nombre de la biblioteca que


contiene el objeto.

Objeto: En el campo Objeto se indica el objeto que tiene el procedimiento


de entrada de programa, la referencia no resuelta o la definicin firme.

Identificador: Se indica el nombre del procedimiento o variable del fuente


de mdulo.

En este ejemplo, el nmero total de procedimientos de entrada de programa, referencias no resueltas o mltiples definiciones firmes son 1, 0 y 0, respectivamente.
Los recuentos de utilizacin que aparecen en la Figura 20 se indican en formato
decimal.

Tabla de resumen ampliado


La Tabla de resumen ampliado se proporciona si se indica *EXTENDED o *FULL.
Contiene informacin estadstica que no se incluye en la Tabla de resumen breve.
Esta informacin da una idea general de las importaciones y exportaciones que el
enlazador ha resuelto. La Figura 21 en la pgina 86 muestra el diseo de la
Tabla de resumen ampliado.

Captulo 4. Creacin de un objeto de programa

85

Crear Programa
5716SS1 V3R7M

96118

TESTLIB/EXTLFL

AS4SYS

Pgina
2
9:46:41

96/7/4

Tabla de resumen ampliado


Definiciones vlidas . . . .
Firmes . . . . . . . . . .
Dbiles. . . . . . . . . .
Referencias resueltas. . . .
Para definiciones firmes .
Para definiciones dbiles.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

\ \ \ \ \

.
.
.
.
.
.

:
:
:
:
:
:

F I N

15
149
1
15
14
1

D E

T A B L A

D E

R E S U M E N

A M P L I A D O \ \ \ \ \

Figura 21. Listado CRTPGM - Tabla de resumen ampliado

La Tabla de resumen ampliado proporciona informacin estadstica sobre los


siguientes elementos:
I

Definiciones vlidas: Este campo indica el nmero de procedimientos y


variables nombrados disponibles para la exportacin. Las definiciones
adems se clasifican entre definiciones firmes o definiciones dbiles.
En el caso de definiciones firmes, se asigna almacenamiento para la
variable o procedimiento. En el caso de definiciones dbiles, se hace referencia al almacenamiento de la variable o el procedimiento.
En ILE COBOL/400, el programa fuente COBOL ms externo y el procedimiento CANCEL asociado tendrn definiciones firmes. Los datos
EXTERNAL y los archivos EXTERNAL tendrn definiciones dbiles. CALL,
CANCEL y SET ENTRY para un procedimiento esttico externo tendrn
importaciones de mdulo que son definiciones firmes. Las referencias a
datos EXTERNAL y a archivos EXTERNAL tendrn definiciones dbiles
como importaciones de mdulo.

Referencias resueltas: Este campo proporciona el nmero de importaciones que coinciden con exportaciones entre mdulos.

Los recuentos de utilizacin que aparecen en la Figura 21 se indican en formato


decimal.

Listado de informacin del enlazador


Este listado, que proporciona informacin mucho ms detallada sobre el proceso
de enlace, est disponible si se especifica *EXTENDED o *FULL. La Figura 22 en
la pgina 87 muestra el diseo del Listado de informacin del enlazador

86

ILE COBOL/400 Gua del Programador

Crear Programa
5716SS1 V3R7M

96118

TESTLIB/EXTLFL

AS4SYS

Pgina
4
9:46:41

96/7/4

Listado de informacin del enlazador


Mdulo . . .
Biblioteca
Enlazado .
Fecha/hora

. . . . . . .
. . . . . . .
. . . . . . .
modificacin.

Nmero
M
1

Smbolo
N
Def

2
3
4
5
6
7
8
9
A
B
C
D
E
F
1
11
12

Def
Def
Ref
Ref
Ref
Ref
Ref
Ref
Ref
Ref
Ref
Ref
Ref
Ref
Ref
Ref
Ref

.
.
.
.

:
:
:
:

EXTLFL
TESTLIB
\YES
96/7/4

Ref
O

\\\\

Programa servicio. . . . .
Biblioteca . . . . . . .
Enlazado . . . . . . . .
Fecha/hora modificacin.
Nmero

Smbolo

13
14
15
16
17
18
19
1A
1B
1C
1D
1E

Def
Def
Def
Def
Def
Def
Def
Def
Def
Def
Def
Def

Programa servicio. . . . .
Biblioteca . . . . . . .
Enlazado . . . . . . . .
Fecha/hora modificacin.

4D
1
67
66
4E
4F
7
5
5E
27
61
23
6F
68
6
.
.
.
.

:
:
:
:
Ref

.
.
.
.

:
:
:
:

K
L
9:45:32

Identificador
P
EF1
mejor definicin dbil
EF1MAIN
EF1MAIN_reset
_Qln_rut
EF1
Q LE AG_prod_rc
Q LE AG_user_rc
_Qln_init_mod
_Qln_init_mod_bdry
Q LE leBdyEpilog
_Qln_init_oprg
_Qln_recurse_msg
_Qln_disp_norm
_Qln_stop_prg
_Qln_cancel_msg
Q LE leBdyCh
Q LE leDefaultEh
_Qln_fc_hdlr

Mdulo

Exportacin
S
Dbil

Proc
Proc
Datos
Datos
Datos
Datos
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc

Mdulo
Mdulo

Firme
Firme

Identificador

Tipo

mbito

Exportacin

_Qln_acpt_norm
_Qln_acpt_console
_Qln_acpt_session
_Qln_acpt_time
_Qln_acpt_date
_Qln_acpt_day
_Qln_acpt_day_of_week
_Qln_acpt_attribute
_Qln_acpt_pip
_Qln_acpt_lda
_Qln_acpt_open_feed
_Qln_acpt_io_feed

Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc
Proc

QLNRACPT
\LIBL
\NO
96/7/4

QLNRCALL
\LIBL
\NO
96/7/4

Tipo
Q
Datos

mbito
R

Clave
T
F

1:5:44
Clave

Firme
Firme
Firme
Firme
Firme
Firme
Firme
Firme
Firme
Firme
Firme
Firme

1:5:48

Figura 22 (Parte 1 de 2). Listado CRTPGM - Listado de informacin del enlazador

Captulo 4. Creacin de un objeto de programa

87

Crear Programa
5716SS1 V3R7M

96118

Nmero

Smbolo

1F
2
21

Def
Def
Def

TESTLIB/EXTLFL
Ref

Programa servicio. . . . .
Biblioteca . . . . . . .
Enlazado . . . . . . . .
Fecha/hora modificacin.
Nmero

Smbolo

22
23

Def
Def

.
.
.
.

:
:
:
:

Identificador

Tipo

_Qln_call_resolve
_Qln_call_resolve_external
_Qln_set_proc_pointer

Proc
Proc
Proc

Ref

QLNRCNCL
\LIBL
\YES
96/7/4

AS4SYS

mbito

Pgina
5
9:46:41

96/7/4

Exportacin

Clave

Firme
Firme
Firme

1:5:51

Identificador

Tipo

_Qln_cancel_resolve_external
_Qln_cancel_msg

Proc
Proc

mbito

Exportacin

Clave

Firme
Firme

.
.
.
.

Programa servicio. . . .
Biblioteca . . . . . .
Enlazado . . . . . . .
Fecha/hora modificacn
Nmero

Smbolo

9F
A
A1
A2
A3
A4
A5

Def
Def
Def
Def
Def
Def
Def

.
.
.
.

.
.
.
.

:
:
:
:
Ref

QBNPREPR
QSYS
\NO
96/7/4

\ \ \ \ \

19:49:37

Identificador

Tipo

QbnStartPreProcessor
QbnAddExtendedAttributeData
QbnAddAssociatedSpaceEntry
QbnRetrieveAssociatedSpace
QbnAddPreProcessorLevelData
QbnAddBindtimeExit
QbnEndPreProcessor

Proc
Proc
Proc
Proc
Proc
Proc
Proc

F I N

D E

L I S T A D O

D E

mbito

I N F O R M A C I N

Exportacin

Clave

Firme
Firme
Firme
Firme
Firme
Firme
Firme

D E

E N L A Z A D O R \ \ \ \ \

Figura 22 (Parte 2 de 2). Listado CRTPGM - Listado de informacin del enlazador

Las columnas del listado contienen la informacin siguiente:

88

Mdulo y biblioteca: Este campo identifica la biblioteca y el nombre del


objeto de mdulo o programa de servicio que se ha procesado.

Enlazado: Si en este campo aparece el valor *YES para un objeto de


mdulo, significa que el objeto de mdulo se ha enlazado por copia. Si en
este campo aparece el valor *YES para un programa de servicio, significa
que el programa de servicio se ha enlazado por referencia. Si en este
campo aparece el valor *NO para un objeto de mdulo o programa de servicio, ese objeto no se incluye en el enlace.

Nmero: Un identificador exclusivo asignado a cada uno de los elementos


de datos o procedimiento ILE de este programa. Este nmero se utiliza en
las referencias cruzadas.

Smbolo: Este campo identifica el smbolo como una exportacin o una


importacin. Si este campo muestra el valor Def significa que el smbolo
es una exportacin. Si este campo muestra el valor Ref significa que el
smbolo es una importacin.

ILE COBOL/400 Gua del Programador

Ref: Este campo queda en blanco si Smbolo es Def. Contiene un nmero


de smbolo si el valor de la columna Smbolo es Ref. Si la columna
Smbolo es Ref, este campo contiene el nmero exclusivo que identifica la
exportacin (Def) que satisface la solicitud de importacin.
Identificador: Este es el nombre del smbolo que se exporta o importa.

Tipo: Si el nombre de smbolo es un procedimiento ILE, este campo contiene Proc. Si el nombre de smbolo es un elemento de datos, este campo
contiene Datos.

mbito: Este campo identifica el nivel al que se puede acceder al nombre


de smbolo exportado.

Exportacin: Este campo identifica si los elementos de datos exportados


tienen una definicin dbil o firme.

Clave: Este campo contiene la longitud de los elementos dbiles exportados. Los valores que aparecen en este campo se indican en formato
hexadecimal.

Listado de referencias cruzadas


El listado de referencias cruzadas, proporcionado nicamente si se especifica
*FULL, es til para el programador que tiene un listado del enlazador muy largo y
desea un ndice ms manejable. El listado de referencias cruzadas lista alfabticamente todos los identificadores exclusivos del listado del enlazador con una
lista correspondiente de todas las definiciones y referencias resueltas de ese identificador. La Figura 23 en la pgina 90muestra el diseo del Listado de referencias
cruzadas.

Captulo 4. Creacin de un objeto de programa

89

Crear Programa
5716SS1 V3R7M

96118

TESTLIB/EXTLFL

AS4SYS

Pgina
9
9:46:41

96/7/4

Listado de referencias cruzadas

Identificador
U
__CEEDOD
__CEEGSI
__CEEHDLR
__CEEHDLU
__CEERTX
__CEETSTA
__CEEUTX
_C_session_cleanup
_C_session_open
_Qln_acpt_attribute
_Qln_acpt_console

Defs
V
8D
8E
7A
7B
73
8C
74
82
83
1A
14

--------Refs-------Ref
Ref
W

Tipo

Biblioteca
Y
\LIBL
\LIBL
\LIBL
\LIBL
\LIBL
\LIBL
\LIBL
\LIBL
\LIBL
\LIBL
\LIBL

Objeto

X
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM

\SRVPGM
\SRVPGM
\MODULE
\MODULE
\MODULE
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM
\SRVPGM

\LIBL
\LIBL
TESTLIB
TESTLIB
TESTLIB
\LIBL
\LIBL
\LIBL
\LIBL
\LIBL
\LIBL
\LIBL
QSYS
QSYS
QSYS
QSYS
QSYS
QSYS
QSYS
\LIBL
\LIBL
\LIBL

QLEAWI
QLEAWI
EXTLFL
EXTLFL
EXTLFL
QLEAWI
QLEAWI
QLEAWI
QLEAWI
QLEAWI
QLEAWI
QLEAWI
QBNPREPR
QBNPREPR
QBNPREPR
QBNPREPR
QBNPREPR
QBNPREPR
QBNPREPR
QLNRMAIN
QLNRMAIN
QLNRMAIN

Z
QLEAWI
QLEAWI
QLEAWI
QLEAWI
QLEAWI
QLEAWI
QLEAWI
QLEAWI
QLEAWI
QLNRACPT
QLNRACPT

.
.
.
.

CEE4RAGE
CEE4RIN
EF1
EF1MAIN
EF1MAIN_reset
Q LE leBdyCh
Q LE leBdyEpilog
Q LE leDefaultEh
Q LE AG_prod_rc
Q LE AG_user_rc
Q LE HdlrRouterEh
Q LE RtxRouterCh
QbnAddAssociatedSpaceEntry
QbnAddBindtimeExit
QbnAddExtendedAttributeData
QbnAddPreProcessorLevelData
QbnEndPreProcessor
QbnRetrieveAssociatedSpace
QbnStartPreProcessor
QlnDumpCobol
QlnRtvCobolErrorHandler
QlnSetCobolErrorHandler

\ \ \ \ \

72
7D
1
2
3
6F
7
68
67
66
76
75
A1
A4
A
A3
A5
A2
9F
63
64
65

F I N

D E

L I S T A D O

1
A
11
6
7

D E

R E F E R E N C I A S

C R U Z A D A S \ \ \ \ \

Figura 23. Listado CRTPGM - Listado de referencias cruzadas

Los campos contienen la informacin siguiente:

90

Identificador: Nombre de la exportacin que se ha procesado durante la


resolucin del smbolo.

Defs: Nmero de identificacin exclusivo asociado a cada exportacin.

Refs: Lista los nmeros de identificacin exclusivos de las importaciones


(Ref) que se han resuelto para esta importacin (Def).

Tipo: Identifica si la exportacin proviene de un objeto de mdulo


(*MODULE) o de un programa de servicio (*SRVPGM).

Biblioteca: Nombre de la biblioteca en la que se ha definido el smbolo descrito en esta lnea.

ILE COBOL/400 Gua del Programador

Objeto: Nombre del objeto de mdulo o programa de servicio en el que se


ha definido el smbolo descrito en esta lnea.

Estadsticas de enlace
La seccin de Estadsticas de enlace solo se produce si se utiliza el valor *FULL
en el parmetro DETAIL. Muestra cunto tiempo de CPU del sistema se ha utilizado para enlazar determinadas partes del programa. Es posible que estos
valores slo tengan sentido cuando se comparan con salidas parecidas de otros
programas ILE u otras veces en que se ha creado un programa determinado. El
valor para el tiempo de CPU de compilacin de lenguaje de enlace es siempre
cero para un programa ILE. La Figura 24 muestra el diseo de la seccin Estadsticas de enlace

Crear Programa
5716SS1 V3R7M

96118

TESTLIB/EXTLFL

AS4SYS

Pgina 12
9:46:41

96/7/4

Estadsticas de enlace
Tiempo
Tiempo
Tiempo
Tiempo
Tiempo
Tiempo

de
de
de
de
de
de

CPU
CPU
CPU
CPU
CPU
CPU

para
para
para
para
para
para

recogida de smbolos. . . . . . . . . . .
resolucin de smbolos. . . . . . . . . .
resolucin de directorio de enlace. . . .
compilacin de lenguaje enlazador . . . .
creacin de listados. . . . . . . . . . .
creacin de programas servicio/programas.

:
:
:
:
:
:

.8
.4
.138
.
.462
.1

Tiempo CPU total. . . . . . . . . . . . . . . . . . . . . . :


Tiempo CPU transcurrido. . . . . . . . . . . . . . . . . . . :

.999
3.379

\ \ \ \ \

F I N

D E

E S T A D S T I C A S

D E

E N L A C E \ \ \ \ \

\CPC5D7 - Programa EXTLFL creado en la biblioteca TESTLIB.

\ \ \ \ \

F I N

D E

L I S T A D O

D E

C R E A R

P R O G R A M A

\ \ \ \ \

Figura 24. Listado CRTPGM - Estadsticas de enlace

Modificacin de un objeto de mdulo y enlace del objeto de programa


de nuevo
Despus de haber creado un objeto de programa, es posible que haya que modificarlo para solucionar problemas o para que cumpla con nuevos requisitos. Un
objeto de programa se crea a partir de objetos de mdulo, por lo tanto es posible
que no se tenga que modificar el objeto de programa por completo. Se puede
aislar el mdulo que se tiene que modificar, modificarlo y despus enlazarlo al
objeto de programa de nuevo. Los cambios que se realizan en el objeto de
mdulo dependen de lo que deba modificarse.
Un objeto de mdulo se puede cambiar de cuatro formas:
Cambiar el programa fuente ILE COBOL/400 del objeto de mdulo
Cambiar el nivel de optimizacin del objeto de mdulo
Cambiar la observabilidad del objeto de mdulo.
Cambiar la habilitacin de recogida de datos sobre el rendimiento.

Captulo 4. Creacin de un objeto de programa

91

Nota: Necesitar autorizacin sobre el cdigo fuente y sobre los mandatos necesarios para realizar cualquiera de estas modificaciones en el objeto de
mdulo.
Si desea cambiar el nivel de optimizacin u observabilidad de un objeto de mdulo,
no tendr que volver a crearlo de nuevo. Esto ocurre muchas veces cuando desea
depurar un objeto de programa o cuando el objeto de programa est preparado
para el proceso de produccin. Tales modificaciones pueden llevarse a cabo con
ms rapidez y utilizando menos recursos del sistema que si se crea el objeto de
mdulo de nuevo.
En estas situaciones puede tener muchos objetos de mdulo para crear a la vez.
Puede utilizar el mandato Trabajar con mdulos (WRKMOD) para obtener una lista
de los objetos de mdulo seleccionados por biblioteca, nombre, smbolo genrico o
*ALL. Se puede limitar la lista para que tan slo aparezcan los objetos de mdulo
que ha creado el compilador ILE COBOL/400.
Cuando se haya realizado una modificacin en el objeto de mdulo, se debe utilizar el mandato CRTPGM o el mandato UPDPGM para volver a enlazar el objeto
de programa.

Modificacin del programa fuente ILE COBOL/400


Cuando tenga que realizar modificaciones en el programa fuente ILE COBOL/400,
siga los pasos siguientes:
1. Modifique el programa fuente ILE COBOL/400 donde sea necesario utilizando
el SEU.Consulte el apartado Entrada de instrucciones fuente utilizando el Programa de Utilidad para Entrada del Fuente en la pgina 18 para obtener ms
detalles sobre cmo modificar el cdigo fuente.
2. Compile el programa fuente ILE COBOL/400 utilizando el mandato
CRTCBLMOD para crear uno o ms objetos de mdulo nuevos.Consulte el
apartado Utilizacin del mandato Crear mdulo COBOL (CRTCBLMOD) en la
pgina 30 para obtener una descripcin de cmo compilar el programa fuente
ILE COBOL/400.
3. Enlace los objetos de mdulo utilizando el mandato CRTPGM o el mandato
UPDPGM para crear un objeto de programa nuevo. Consulte el apartado Utilizacin del mandato Crear programa (CRTPGM) en la pgina 73 para obtener
informacin sobre la creacin de un objeto de programa.

Modificacin de los niveles de optimizacin


Se pueden modificar los niveles a los que se optimiza el cdigo generado para su
ejecucin en el sistema. Cuando el compilador optimiza el cdigo, busca el
mtodo de proceso ms corto para reducir la cantidad de recursos del sistema
necesarios para producir la misma salida. Entonces convierte este mtodo a
cdigo de mquina.
Por ejemplo: a = (x + y) + (x + y) + 1. Para resolver "a", el compilador
reconoce la equivalencia entre las dos expresiones "(x + y)" y utiliza el valor que se
ha calculado para suministrar el valor de la segunda expresin.
Una mayor optimizacin aumenta la eficacia con que el objeto de programa se
ejecuta en el sistema. No obstante, si la optimizacin es mayor, se aumentar el
tiempo de compilacin y tambin es posible que no pueda ver variables que se
hayan optimizado. Se puede modificar el nivel de optimizacin de un objeto de

92

ILE COBOL/400 Gua del Programador

mdulo para visualizar variables con precisin mientras se depura un objeto de


programa y a continuacin modificar el nivel de optimizacin cuando el objeto de
programa est preparado para la produccin.
Los compiladores ILE dan soporte a un rango de niveles de optimizacin.
Actualmente, existen cuatro niveles de optimizacin, tres de los cuales estn disponibles para usuarios ILE COBOL/400:
*NONE o 10

No se lleva a cabo optimizacin adicional en el cdigo generado.


Este nivel de optimizacin permite visualizar variables y modificarlas cuando el objeto de programa se est depurando. Este valor
proporciona el nivel de rendimiento ms bajo durante la ejecucin.

*BASIC o 20

Se lleva a cabo cierta optimizacin (slo a nivel de bloque local) en


el cdigo generado. Las variables pueden visualizarse pero no
modificarse cuando se est depurando el objeto de programa. Este
nivel de optimizacin mejora ligeramente el rendimiento de la ejecucin.

*FULL o 30

Se lleva cabo una optimizacin completa (a nivel global) en el


cdigo generado. Las variables no pueden modificarse pero
pueden visualizarse mientras el objeto de programa se depura. Sin
embargo, puede ser que el valor que se visualice para las variables
durante la depuracin no sea su valor actual.

El efecto de la optimizacin en el rendimiento de la ejecucin vara segn el tipo


de la aplicacin.Por ejemplo, en una aplicacin que realice gran cantidad de clculos, la optimizacin puede mejorar el rendimiento de la ejecucin de forma significativa mientras que en una aplicacin con gran cantidad de E/S, la optimizacin
puede mejorar el rendimiento de la ejecucin mnimamente.
Para modificar el nivel de optimizacin de un objeto de mdulo en un objeto de
programa, utilice el mandato Trabajar con mdulos (WRKMOD). Teclee WRKMOD
en la lnea de mandatos y aparecer la pantalla Trabajar con mdulos. Seleccione
la opcin 5 (Visualizar) de la pantalla Trabajar con mdulos para ver los valores de
atributo que deben modificarse. La pantalla Visualizar informacin de mdulo
aparece en la Figura 25 en la pgina 94.

Captulo 4. Creacin de un objeto de programa

93

Visualizar informacin de mdulo


Pantalla 1 de 7
Mdulo . . . . . .
Biblioteca . . .
Detalle. . . . . .
Atributo de mdulo

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

:
:
:
:

COPYPROC
TESTLIB
\BASIC
CBLLE

Informacin de mdulo
Fecha/hora creacin de mdulo . . . . . . .
Archivo fuente. . . . . . . . . . . . . . .
Biblioteca. . . . . . . . . . . . . . . .
Miembro fuente. . . . . . . . . . . . . . .
Fecha/hora modificacin archivo fuente. . .
Propietario . . . . . . . . . . . . . . . .
Identificador juego caracteres codificados.
Descripcin de texto. . . . . . . . . . . .
Instruccin PROCESS
Datos de creacin . . . . . . . . . . . . .
Tabla secuencia ordenacin. . . . . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

:
:
:
:
:
:
:
:

. . . . . :
. . . . . :

96/7/4

11:46:6

TESTLIB
65535
PG - COPY en Ejemplo
\YES
\HEX
Ms....

Pulse Intro para continuar


F3=Salir

F12=Cancelar

Figura 25. Primera pantalla Visualizar informacin de mdulo

Primero, compruebe si el valor de plantilla de instrucciones de mquina incluida es


*YES. Esto significa que el objeto de mdulo puede convertirse de nuevo despus
de modificar el valor del nivel de optimizacin. Si el valor es *NO, debe crear el
objeto de mdulo de nuevo e incluir la plantilla de instrucciones de mquina para
cambiar el nivel de optimizacin.
A continuacin, pulse la tecla Giro abajo, para ver ms informacin sobre el objeto
de mdulo.

94

ILE COBOL/400 Gua del Programador

Visualizar informacin de mdulo


Pantalla 1 de 7
Mdulo . . . . . .
Biblioteca . . .
Detalle. . . . . .
Atributo de mdulo

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

:
:
:
:

COPYPROC
TESTLIB
\BASIC
CBLLE

Identificador de idioma . . . . . . . . . . .
Nivel de optimizacin . . . . . . . . . . . .
Nivel optimizacin mximo . . . . . . . . . .
Datos depuracin. . . . . . . . . . . . . . .
Compactado . . . . . . . . . . . . . . . . .
Nombre procedimiento entrada programa . . . .
Nmero de parmetros . . . . . . . . . . . .
Estado de mdulo. . . . . . . . . . . . . . .
Dominio de mdulo . . . . . . . . . . . . . .
Nmero de smbolos definidos exportados . . .
Nmero de smbolos (no resueltos) importados.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

:
.
.
.
.
.
.
.
.
.
.

:
:
:
:
:
:
:
:
:
:

\JOBRUN
\NONE
\FULL
\NO
\NO
_Qln_pep

\USER
\SYSTEM
2
14
Ms....

Pulse Intro para continuar


F3=Salir

F12=Cancelar

Figura 26. Segunda pantalla Visualizar informacin de mdulo

Compruebe el valor del nivel de optimizacin. Puede ser que ya est en el nivel
que desee.
Si el mdulo tiene la plantilla de instrucciones de mquina y desea cambiar el nivel
de optimizacin, pulse F12 (Cancelar). Aparecer la pantalla Trabajar con
mdulos. Seleccione la opcin 2 (Cambiar) para el objeto de mdulo cuyo nivel de
optimizacin desea cambiar. Aparecer la pantalla del mandato CHGMOD como
se ilustra en la Figura 28 en la pgina 97. Teclee sobre el valor especificado para
la solicitud Optimizar mdulo.
|
|

A continuacin, pulse la tecla Giro abajo, para ver el final de la informacin sobre
el objeto de mdulo.

Captulo 4. Creacin de un objeto de programa

95

|
|
|
|
|
|
|

Visualizar informacin de mdulo


Pantalla 1 de 7
Mdulo . . . . . .
Biblioteca . . .
Detalle. . . . . .
Atributo de mdulo

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

:
:
:
:

COPYPROC
TESTLIB
\BASIC
CBLLE

Habilitar recogida de rendimiento . . . . . . . . . . :

|
|
|
|
|

Compatibilidad de mdulo:
Mdulo creado en. . . . . .
Mdulo creado para. . . . .
Primer release en que puede
Conversin requerida. . . .

|
|

Pulse Intro para continuar

F3=Salir

. . . . . .
. . . . . .
restaurarse
. . . . . .

. . . . .
. . . . .
el mdulo
. . . . .

.
.
.
.

\PEP

.
.
.
.

:
:
:
:

V3R7M
V3R7M
V3R7M
\NO

Ms....
F12=Cancelar

Figura 27. Tercera pantalla Visualizar informacin de mdulo

|
|
|
|
|

La solicitud Habilitar recogida de rendimiento muestra que el mdulo se ha creado


con un cdigo de medida de rendimiento solamente para la entrada al punto de
entrada del programa y la salida del mismo. Las solicitudes de compatibilidad de
mdulo muestran el release y la versin del sistema operativo con el que el mdulo
es compatible.

96

ILE COBOL/400 Gua del Programador

Cambiar mdulo (CHGMOD)

Teclee opciones, pulse Intro.


Mdulo . . . . . . . . . . . . . > COPYPROC
Biblioteca . . . . . . . . . . >
TESTLIB
Optimizar mdulo . . . . . . . .
\NONE_
Eliminar info observable . . . .
\DBGDTA
Habilitar recogida de rendimiento:
Nivel de recogida. . . . . . .
\PEP
Procedimientos . . . . . . . .
Forzar recreacin de mdulo. . .
\NO_
Texto 'descripcin'. . . . . . .
'PG - COPY en
'____________________________

F3=Salir F4=Solicitud F5=Renovar


F24=Ms teclas

F12=Cancelar

Nombre, generic\, \ALL


Nombre, \USRLIBL, \LIBL
\SAME, \FULL, \BASIC. . .
\SAME, \ALL, \NONE...
\SAME, \NONE, \PEP, \FULL...
\ALLPRC, \NONLEAF
\NO, \YES
ejemplo instruccin PROCESS

Final
F13=Utilizacin de pantalla

Figura 28. Pantalla de solicitud del mandato CHGMOD

Cambiar el objeto de mdulo a un nivel de optimizacin inferior permite visualizar y


posiblemente cambiar los valores de las variables durante la depuracin.
Repita el proceso para cualquier otro objeto de mdulo cuyo nivel de optimizacin
desee cambiar. No importa si se modifica uno o varios objetos de mdulo en el
mismo programa; el tiempo de creacin del programa es el mismo ya que todas las
importaciones se resuelven cuando el sistema las encuentra.
Cuando haya terminado de modificar el nivel de optimizacin para los objetos de
mdulo de un objeto de programa, cree el objeto de programa de nuevo utilizando
el mandato CRTPGM o actualice el objeto de programa existente con los objetos
de mdulo nuevos utilizando el mandato UPDPGM.

Eliminacin de observabilidad de mdulo


La observabilidad de mdulo hace referencia a dos tipos de datos que pueden
almacenarse con un objeto de mdulo. Estos datos permiten depurar el objeto de
mdulo o cambiarlo sin tener que crearlo de nuevo. Una vez creado el objeto de
mdulo, slo se pueden eliminar estos datos. Una vez eliminados los datos, debe
crear el objeto de mdulo de nuevo para sustituirlo. Los dos tipos de datos son:
Datos de creacin
Representados mediante el valor *CRTDTA. Estos datos son necesarios para convertir el cdigo a instrucciones de mquina. La
plantilla de instrucciones de mquina (MI) se incluye con el objeto
de mdulo cuando ste se crea utilizando el mandato
CRTCBLMOD. La plantilla MI contina all hasta que se elimine de

Captulo 4. Creacin de un objeto de programa

97

forma explcita. El objeto de mdulo debe contener estos datos


para poder cambiar el nivel de optimizacin.
Datos de depuracin
Representados mediante el valor *DBGDTA. Estos datos son
necesarios para que el objeto de mdulo pueda depurarse. Los
datos de depuracin se incluyen con el objeto de mdulo cuando
ste se crea utilizando el mandato CRTCBLMOD. El tipo y cantidad de datos de depuracin viene determinado por el parmetro
DBGVIEW.
Eliminar toda observabilidad reduce el objeto de mdulo a su tamao mnimo (con
compresin). Una vez eliminada la observabilidad, no se puede modificar el objeto
de mdulo de ninguna forma a menos que vuelva a crearlo.
Para eliminar cualquier tipo de datos del objeto de mdulo, eliminar ambos tipos o
no eliminar ninguno, utilice el mandato Trabajar con mdulos (WRKMOD). Teclee
WRKMOD en la lnea de mandatos y aparecer la pantalla Trabajar con mdulos.
Seleccione la opcin 5 (Visualizar) para ver los valores de atributo que deben
modificarse. La pantalla Visualizar informacin de mdulo aparece en la Figura 25
en la pgina 94.
Primero, compruebe el valor del parmetro plantilla instrucciones mquina incluida.
Si es *YES, los datos de creacin existen y pueden eliminarse. Si el valor es *NO,
no existen datos de creacin para eliminar. El objeto de mdulo no puede convertirse de nuevo a menos que vuelva a crearlo e incluya la plantilla de instrucciones
de mquina.
A continuacin, pulse la tecla Giro abajo, para ver ms informacin sobre el objeto
de mdulo. Compruebe el valor del parmetro Datos de depuracin. Si es *YES,
los datos de depuracin existen y el objeto de mdulo puede depurarse. Si es
*NO, los datos de depuracin no existen y el objeto de mdulo no puede depurarse
a menos que vuelva a crearlo e incluya los datos de depuracin. Seleccione la
opcin 2 (Cambiar) para el objeto de mdulo cuya observabilidad desea cambiar.
Aparecer la pantalla de solicitud del mandato CHGMOD. Teclee sobre el valor
especificado para la solicitud Eliminar info observable.
Para asegurar que el objeto de mdulo se crea de nuevo, utilice el parmetro
Forzar recreacin de mdulo. Cuando el nivel de optimizacin se modifica, el
objeto de mdulo se vuelve a crear siempre si los datos de creacin no se han
eliminado. Si desea que el objeto de programa se convierta de nuevo eliminando
los datos de depuracin y sin cambiar el nivel de optimizacin, debe cambiar el
valor del parmetro Forzar recreacin de mdulo a *YES.
Repita el proceso para cualquier otro objeto de mdulo que desee cambiar. No
importa si se modifica uno o varios objetos de mdulo en el mismo programa; el
tiempo de creacin del programa es el mismo ya que todas las importaciones se
resuelven cuando el sistema las encuentra.
Cuando haya terminado de modificar el nivel de optimizacin para los objetos de
mdulo de un objeto de programa, cree el objeto de programa de nuevo utilizando
el mandato CRTPGM o actualice el objeto de programa existente con los objetos
de mdulo nuevos utilizando el mandato UPDPGM.

98

ILE COBOL/400 Gua del Programador

Habilitacin de recogida de rendimiento


A continuacin se indican las opciones que pueden especificarse cuando se solicitan datos estadsticos sobre el rendimiento para una unidad de compilacin.

Niveles de recogida
Los niveles de recogida son:
|
|
|
|
|
|

*PEP

Slo se reunen estadsticas de rendimiento en la entrada y salida


del procedimiento de entrada de programa. Seleccione este valor
si desea tener la infomacin general sobre el rendimiento de una
aplicacin. Este soporte es equivalente al soporte que la
herramienta TPST proporcionaba anteriormente. Se trata del
valor por omisin.

|
|
|

*ENTRYEXIT

Se renen estadsticas sobre el rendimiento en la entrada y


salida de todos los procedimientos del programa. Incluye la
rutina del PEP del programa.

|
|
|
|
|
|
|
|
|
|
|
|
|

Esta opcin le resultar de utilidad si desea capturar informacin


sobre todas las rutinas. Utilice esta opcin si sabe que todos los
programas a los que la aplicacin ha llamado se han compilado
con la opcin *PEP, *ENTRYEXIT o *FULL. En caso contrario, si
la aplicacin llama a otros programas en los que no se ha habilitado la medida de rendimiento, la herramienta de rendimiento
cargar a la aplicacin la utilizacin de recursos de estos. Esto
dificultara la determinacin del lugar en que los recursos se utilizan realmente.
*FULL

|
|
|
|
|
|
|
|

Se renen estadsticas sobre el rendimiento en la entrada y


salida de todos los procedimientos. Adems, tambin se renen
estadsticas antes y despus de cada llamada a un procedimiento externo.
Utilice esta opcin si piensa que la aplicacin llamar a otros programas que no se hayan compilado con *PEP, *ENTRYEXIT o
*FULL. Esta opcin permite que las herramientas de rendimiento
distingan entre los recursos utilizados por la aplicacin y los utilizados por los programas a los que llama (incluso aunque en
estos programas no se haya habilitado la medida de rendimiento). Es la opcin ms cara pero le permite el anlisis selectivo de varios programas dentro de una aplicacin.

Procedimientos
Los valores para el nivel de procedimiento son:
*ALLPRC Se recogen datos de rendimiento para todos los procedimientos.
*NONLEAF Se recogen datos sobre el rendimiento de procedimientos que no son
procedimientos de hoja y del PEP.
|

Nota: *NOLEAF no afecta a los programas ILE COBOL/400.

Captulo 4. Creacin de un objeto de programa

99

100

ILE COBOL/400 Gua del Programador

Captulo 5. Creacin de un programa de servicio


Un programa de servicio es un tipo especial de objeto del sistema que proporciona
un conjunto de servicios a los objetos de programa ILE que se enlazan a l.
Este captulo describe:

cmo
cmo
cmo
cmo

pueden utilizarse los programas de servicio


escribir mandatos de lenguaje enlazador para un programa de servicio
crear un programa de servicio utilizando el mandato CRTSRVPGM
llamar y compartir datos con un programa de servicio.

Definicin de un programa de servicio


Un programa de servicio es un conjunto de procedimientos ejecutables y elementos de datos disponibles que utilizan otros programas de servicio y objetos de
programa ILE. Los programas de servicio son objetos del sistema de tipo
*SRVPGM y se les especifica un nombre cuando el programa de servicio se crea.
Utilice el mandato Crear programa de servicio (CRTSRVPGM) para crear un programa de servicio. Un programa de servicio se parece a un objeto de programa en
que ambos constan de uno o ms objetos de mdulo que se han enlazado entre s
para formar un objeto ejecutable. Sin embargo, un programa de servicio se diferencia en que no tiene PEP. Y como no tiene PEP no puede llamarse ni cancelarse. En lugar de un PEP, el programa de servicio puede exportar
procedimientos. Slo los procedimientos exportados desde un programa de servicio pueden llamarse mediante llamadas de procedimiento estticas realizadas
desde el exterior del programa de servicio. Las exportaciones de programas de
servicio se definen utilizando el lenguaje enlazador.
Consulte el manual ILE Conceptos para obtener ms informacin sobre programas
de servicio.

Utilizacin de programas de servicio


Normalmente, los programas de servicio se utilizan para rutinas comunes que se
llaman con frecuencia desde dentro de una aplicacin y entre aplicaciones. Por
ejemplo, el compilador ILE COBOL/400 utiliza programas de servicio para proporcionar servicios de ejecucin como, por ejemplo, funciones matemticas y rutinas
de entrada/salida. Los programas de servicio permiten volver a utilizar los programas fuente, simplifican el mantenimiento y reducen los requisitos de almacenamiento. En muchos aspectos, los programas de servicio se parecen a las
bibliotecas de subrutinas o a las bibliotecas de procedimiento.
Se puede actualizar un programa de servicio sin tener que volver a crear el resto
de objetos de programa o programas de servicio que utilizan el programa de servicio actualizado siempre que la interfaz no se modifique o tan slo se modifique
de forma compatible ascendente. El usuario es quien controla si los cambios son
compatibles con el soporte existente proporcionado por el programa de servicio.
Para realizar cambios compatibles en un programa de servicio, debera aadir
nombres de procedimientos o nombres de datos nuevos al final de la lista de
exportaciones y retener la misma signatura que antes.

Copyright IBM Corp. 1994, 1996

101

Escritura de mandatos del lenguaje enlazador para un programa de


servicio ILE COBOL/400
El lenguaje enlazador permite definir la lista de elementos de datos y nombres de
procedimiento que pueden exportarse desde un programa de servicio.Para obtener
una descripcin completa del lenguaje enlazador y los mandatos del lenguaje enlazador, consulte el manual ILE Conceptos.
Las signaturas se generan a partir de elementos de datos y nombres de procedimientos y a partir del orden en que se especifican en el lenguaje enlazador.Una
signatura es un valor que identifica la interfaz a la que da soporte el programa de
servicio. Se puede especificar de forma explcita la signatura con el parmetro
SIGNATURE en el lenguaje enlazador.
Para los programas de servicio creados a partir de programas fuente ILE
COBOL/400, los elementos de lenguaje siguientes son exportaciones de mdulo
que pueden incluirse en la lista de exportaciones del lenguaje enlazador:
El nombre que se indica en el prrafo PROGRAM-ID del programa ILE
COBOL/400 ms externo de una unidad de compilacin.
El nombre generado por el compilador ILE COBOL/400 derivado del nombre
del prrafo PROGRAM-ID del programa ILE COBOL/400 ms externo de una
unidad de compilacin siempre que el programa no tenga el atributo INITIAL.
El nombre se forma aadiendo el sufijo _reset al nombre del prrafo
PROGRAM-ID. Este nombre tiene que incluirse en la lista de exportaciones
nicamente si el programa ILE COBOL/400 del programa de servicio tiene que
cancelarse.

Utilizacin del mandato Crear programa de servicio (CRTSRVPGM)


Los programas de servicio se crean utilizando el mandato Crear programa de servicio (CRTSRVPGM). Cualquier objeto de mdulo ILE puede enlazarse en un programa de servicio.Los objetos de mdulo deben existir para poder crear un
programa de servicio con ellos. Se pueden crear objetos de mdulo a partir de
programas fuente ILE COBOL/400 utilizando el mandato CRTCBLMOD. Consulte
el apartado Utilizacin del mandato Crear mdulo COBOL (CRTCBLMOD) en la
pgina 30 para obtener una descripcin de cmo crear objetos de mdulo utilizando el mandato CRTCBLMOD.
La Tabla 3 en la pgina 103 lista los parmetros de CRTSRVPGM y sus valores
por omisin. Para obtener una descripcin completa del mandato CRTSRVPGM y
sus parmetros, consulte el manual CL Reference.

102

ILE COBOL/400 Gua del Programador

Tabla 3. Parmetros del mandato CRTSRVPGM y sus valores por omisin


Grupo parmetros

Parmetro(Valor por omisin)

Identificacin

SRVPGM(nombre-biblioteca/nombre-programa-servicio)
MODULE(*SRVPGM)

Acceso programa

EXPORT(*SRCFILE)
SRCFILE(*LIBL/QSRVSRC)
SRCMBR(*SRVPGM)

Enlace

BNDSRVPGM(*NONE)
BNDDIR(*NONE)

Ejecucin

ACTGRP(*CALLER)

Varios

OPTION(*GEN *NODUPPROC *NODUPVAR *WARN *RSLVREF)


DETAIL(*NONE)
REPLACE(*YES)
AUT(*LIBCRTAUT)
ALWUPD(*YES)
ALWRINZ(*NO)
TEXT(*BLANK)
USRPRF(*USER)
TGTRLS(*CURRENT)

|
|

Ejemplo de creacin de un programa de servicio


Este ejemplo muestra cmo utilizar el lenguaje enlazador para crear un programa
de servicio para realizar clculos econmicos.
Supongamos que los siguientes programas fuente ILE COBOL/400 contienen los
objetos de mdulo que constituirn el programa de servicio.
RATE
Calcula el tipo de inters, conociendo el importe del prstamo, el plazo y el
importe de la cuota.
AMOUNT
Calcula el importe del prstamo, conociendo el tipo de inters, el plazo y el
importe de la cuota.
PAYMENT
Calcula el importe de la cuota, conociendo el tipo de inters, el plazo y el
importe del prstamo.
TERM
Calcula el plazo de la cuota conociendo el tipo de inters, el importe del prstamo y el importe de la cuota.
1. El lenguaje enlazador para el programa de servicio que hace disponibles los
programas ILE COBOL/400 RATE, AMOUNT, PAYMENT y TERM tiene el
siguiente aspecto:

Captulo 5. Creacin de un programa de servicio

103

FILE: MYLIB/QSRVSRC

MEMBER: FINANCIAL

STRPGMEXP PGMLVL(\CURRENT)
EXPORT SYMBOL('TERM')
EXPORT SYMBOL('RATE')
EXPORT SYMBOL('AMOUNT')
EXPORT SYMBOL('PAYMENT')
ENDPGMEXP
Se puede utilizar el SEU para entrar instrucciones fuente de lenguaje enlazador. El comprobador de sintaxis de SEU solicitar y validar la entrada de
lenguaje enlazador cuando se especifique el tipo fuente BND. Para arrancar
una sesin de edicin para entrar el fuente de lenguaje enlazador, teclee
STRSEU SRCFILE(MYLIB/QSRVSRC) SRCMBR(FINANCIAL)
TYPE(BND) OPTION(2)
y pulse Intro.
2. Compile los cuatro programas fuente ILE COBOL/400 en objetos de mdulo
utilizando el mandato CRTCBLMOD. Suponga que los objetos de mdulo
tambin tienen los nombres RATE, AMOUNT, PAYMENT y TERM.
Para crear un programa de servicio se pueden ejecutar las instrucciones de
enlazador necesarias con este mandato:
CRTSRVPGM

SRVPGM(MYLIB/FINANCIAL)
MODULE(MYLIB/TERM MYLIB/RATE MYLIB/AMOUNT MYLIB/PAYMENT)
EXPORT(\SRCFILE)
SRCFILE(MYLIB/QSRVSRC)
SRCMBR(\SRVPGM)

Notas:
a. El archivo fuente QSRVSRC que se encuentra en la biblioteca MYLIB es el
archivo que contiene el fuente del lenguaje enlazador.
b. No es necesario un directorio de enlace ya que todos los objetos de
mdulo necesarios para crear el programa de servicio se han especificado
con el parmetro MODULE.
Podr encontrar ms ejemplos de la utilizacin del lenguaje enlazador y
creacin de programas de servicio en el manual ILE Conceptos.

Llamada a procedimientos ILE exportados en programas de servicio


Los procedimientos ILE exportados en programas de servicio slo pueden llamarse
desde un objeto de programa ILE o desde otro programa de servicio utilizando una
llamada esttica de procedimientos.
Se puede llamar un procedimiento ILE exportado en un programa de servicio
desde un programa ILE COBOL/400 utilizando la instruccin CALL literal (donde
literal es el nombre de un procedimiento ILE del programa de servicio). Consulte
el apartado Realizacin de llamadas estticas de procedimiento utilizando CALL
literal en la pgina 187 para obtener informacin detallada sobre cmo escribir la
instruccin CALL en el programa ILE COBOL/400 de forma que llame a un procedimiento ILE exportado en un programa de servicio.

104

ILE COBOL/400 Gua del Programador

Compartimiento de datos con programas de servicio


Los datos externos pueden compartirse entre objetos de mdulo en un programa
de servicio, entre programas de servicio, entre objetos de programa y entre objetos
de programa y programas de servicio.
En el programa ILE COBOL/400, los elementos de datos que se van a compartir
entre objetos de mdulo diferentes deben describirse con la clusula EXTERNAL
en la Working Storage Section. Consulte el apartado Compartimento de datos
EXTERNAL en la pgina 203 o consulte el apartado sobre la clusula EXTERNAL
del manual ILE COBOL/400 Reference para obtener ms informacin sobre cmo
se utilizan datos externos en un programa ILE COBOL/400.
Los archivos y datos declarados como EXTERNAL en un programa ILE
COBOL/400 de un programa de servicio no pueden incluirse en la lista de exportaciones del lenguaje enlazador para el programa de servicio. Los datos y archivos
declarados como EXTERNAL en un programa ILE COBOL/400 que est fuera del
programa de servicio pueden compartirse con un programa ILE COBOL/400 que
est dentro del programa de servicio mediante la resolucin en tiempo de activacin de los datos EXTERNAL y de los archivos EXTERNAL. Este mismo mecanismo tambin permite compartir datos EXTERNAL y archivos EXTERNAL entre
dos objetos de programa completamente separados que estn activados en el
mismo grupo de activacin.

Cancelacin de un programa ILE COBOL/400 en un programa de


servicio
Para cancelar un programa ILE COBOL/400 que forma parte de un programa de
servicio desde fuera de ese programa de servicio, debe especificar CANCEL para
el nombre de procedimiento del programa ILE COBOL/400 en la lista de exportaciones del lenguaje enlazador.

Captulo 5. Creacin de un programa de servicio

105

106

ILE COBOL/400 Gua del Programador

Captulo 6. Ejecucin de un programa ILE COBOL/400


Este captulo proporciona la informacin necesaria para ejecutar el programa ILE
COBOL/400.
Los mtodos ms habituales para ejecutar un programa ILE COBOL/400 son:
Utilizar un mandato CALL de Lenguaje de control (CL)
Utilizar una instruccin CALL de un Lenguaje de alto nivel (por ejemplo, la instruccin CALL del ILE COBOL/400)
Utilizar un programa de aplicaciones dirigido por mens
Emitir un mandato creado por el usuario.

Ejecucin de un programa COBOL utilizando el mandato CALL de CL


Se puede utilizar el mandato CALL de CL para ejecutar un programa ILE
COBOL/400. Se puede utilizar un mandato CALL de CL de forma interactiva,
como parte de un trabajo de proceso por lotes, o incluirlo en un programa CL. A
continuacin se presenta un ejemplo de un mandato CALL de CL:
CALL nombre-programa
El objeto de programa especificado mediante nombre-programa debe existir en una
biblioteca y esta biblioteca debe encontrarse en la lista de bibliotecas *LIBL.
Tambin se puede especificar la biblioteca explcitamente en el mandato CALL de
CL de la forma siguiente:
CALL nombre-biblioteca/nombre-programa
Consulte el manual CL Reference para obtener ms informacin sobre la utilizacin
del mandato CALL de CL.
Cuando se ejecuta un trabajo de proceso por lotes que llama a un programa ILE
COBOL/400 que utiliza el Formato 1 de la instruccin ACCEPT, los datos de
entrada se toman de la corriente de trabajos. Estos datos deben colocarse inmediatamente despus del CALL de CL para el programa ILE COBOL/400. Debe
asegurarse de que el programa solicita (mediante varias instrucciones ACCEPT) la
misma cantidad de datos que hay disponible. Consulte el apartado Instruccin
ACCEPT del manual ILE COBOL/400 Reference para obtener ms informacin.
Si se solicitan ms datos que los disponibles, el mandato CL que sigue a los datos
se tratar como datos de entrada. Si hay ms datos disponibles que los solicitados, cada lnea de datos adicional se trata como un mandato CL. En cada caso,
pueden producirse resultados indeseables.

Cmo pasar parmetros a un programa ILE COBOL/400 mediante el


mandato CALL de CL
Se utiliza la opcin PARM del mandato CALL de CL para pasar parmetros al programa ILE COBOL/400 cuando se ejecuta.
CALL PGM(nombre-programa) PARM(parmetro-1 parmetro-2 parmetro-3)
Cada uno de los valores de parmetro slo puede especificarse en una de las
formas siguientes:
Copyright IBM Corp. 1994, 1996

107

constante de serie de caracteres


constante numrica
constante lgica
constante de coma flotante de precisin doble
variable de programa

Consulte el mandato CALL en el manual CL Reference o el apartado "Pasar parmetros entre programas" del manual CL Programacin para obtener informacin
completa sobre cmo se manejan los parmetros.

Ejecucin de un programa ILE COBOL/400 utilizando la instruccin


CALL de HLL
Se puede ejecutar un programa ILE COBOL/400 llamndolo desde otro programa
HLL.
Se puede utilizar la instruccin CALL ILE COBOL/400 en un programa ILE
COBOL/400 para llamar a otro programa ILE COBOL/400. Si la llamada de ILE
COBOL/400 es una llamada dinmica de programas, el objeto de programa puede
calificarse con una biblioteca utilizando la expresin IN LIBRARY. Por ejemplo,
para llamar al objeto de programa PGMNAME de la biblioteca LIBNAME, debera
especificar:

|
|
|
|
|
|

CALL "PGMNAME" IN LIBRARY "LIBNAME" USING variable1.

|
|

Sin la expresin IN LIBRARY, la bsqueda del objeto de programa se realiza en la


lista de bibliotecas *LIBL. Consulte el apartado Instruccin CALL del manual ILE
COBOL/400 Reference para obtener ms informacin.
Para ejecutar un programa ILE COBOL/400 desde ILE C/400, utilice una llamada
de funcin ILE C/400. El nombre de la funcin corresponde al nombre del programa ILE COBOL/400. Por omisin, esta llamada de funcin es una llamada
esttica de procedimientos. Para llevar a cabo una llamada dinmica de programas, utilice la instruccin directriz #pragma linkage (PGMNAME, OS). PGMNAME
representa el nombre del programa ILE COBOL/400 que desea ejecutar desde el
programa ILE C/400. Una vez utilizada la instruccin directriz #pragma linkage
(PGMNAME, OS) para indicar al compilador ILE C/400 que PGMNAME es un programa
externo, se puede ejecutar el programa ILE COBOL/400 con una llamada de
funcin ILE C/400. Para obtener ms informacin, consulte el captulo que trata
sobre cmo escribir programas que llaman a otros programas del manual ILE
C/400 Programmers Guide.
Para ejecutar un programa ILE COBOL/400 desde un programa ILE RPG/400,
utilice el cdigo de operacin CALL para realizar una llamada dinmica de programas o el cdigo de operacin CALLB para realizar una llamada esttica de procedimientos. El programa que se va a llamar se identifica especificando su
nombre como la entrada Factor 2. Para obtener ms informacin, consulte el captulo sobre procedimientos y programas de llamada en el manual ILE RPG/400
Gua del programador.
Para ejecutar un programa ILE COBOL/400 desde VisualAge C++ for OS/400,
utilice la llamada de funcin VisualAge C++ for OS/400. El nombre de la funcin
corresponde al nombre del programa ILE COBOL/400.Para evitar que VisualAge
C++ for OS/400 modifique internamente el nombre de la funcin, es decir, para

108

ILE COBOL/400 Gua del Programador

evitar que el nombre de funcin ILE C++ se mutile, debe realizar un prototipo de la
llamada de funcin utilizando la palabra clave extern.Para llamar a un procedimiento ILE COBOL/400 que no devuelve nada y que toma un nmero binario de
dos bytes, el prototipo VisualAge C++ for OS/400 sera:
extern "COBOL" void PGMNAME(short int);
Para llamar al mismo objeto de programa COBOL, se especificara un enlace de
"OS". El prototipo se convierte en:
extern "OS" void PGMNAME(short int);
Un enlace de "COBOL" en una llamada de funcin VisualAge C++ for OS/400 no
slo evita que el nombre de funcin se mutile sino que provoca que los argumentos que se han pasado al procedimiento ILE COBOL/400 se pasen BY
REFERENCE. Si el procedimiento ILE COBOL/400 espera un parmetro BY
VALUE, debera especificarse un enlace "C".

Ejecucin de un programa ILE COBOL/400 desde una aplicacin


dirigida por mens
Otra forma de ejecutar un programa ILE COBOL/400 es desde una aplicacin dirigida por mens. El usuario de la estacin de trabajo selecciona una opcin desde
un men, llamando al programa adecuado. La figura siguiente muestra un ejemplo
de un men de aplicacin

MEN DEPARTAMENTO NMINAS


1.
2.
3.
4.

Consultar en archivo principal de empleados


Cambiar archivo principal de empleados
Aadir empleado nuevo
Volver

Opcin:

Figura 29. Ejemplo de un men de aplicacin

El men que aparece en esta figura normalmente se visualiza mediante un programa CL en el que cada opcin llama a un programa COBOL separado.
La DDS para el archivo de pantalla del anterior MEN DEPARTAMENTO NMINA
tiene el aspecto siguiente:
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
A\ MENU PAYROLLD MEN DEPARTAMENTO NMINAS
A
A
R MENU
TEXT('MEN DEPARTAMENTO NMINAS')
A
1 29'MEN DEPARTAMENTO NMINAS'
A
5 4'1. Consultar en archivo principal de empleados'
A
6 4'2. Cambiar archivo principal de empleados'
A
7 4'3. Aadir empleado nuevo'
A
8 4'4. Volver'
A
12 2'Opcin:'
A
RESP
12 1VALUES(1 2 3 4)
A
DSPATR(MDT)

Figura 30. Especificacin de descripcin de datos de un men de aplicacin

Captulo 6. Ejecucin de un programa ILE COBOL/400

109

La Figura 30 muestra un ejemplo del programa CL para el men de aplicacin de


la Figura 29.
PGM /\ PAYROLL Men departamento nminas\/
DCLF FILE (PAYROLLD)
START: SNDRCVF RCDFMT(MENU)
IF (&RESP=1) THEN(CALL CBLINQ)
/\ Consultar \/
ELSE +
IF (&RESP=2) THEN(CALL CBLCHG)
/\ Cambiar \/
ELSE +
IF (&RESP=3) THEN(CALL CBLADD)
/\ Aadir \/
ELSE +
IF (&RESP=4) THEN(RETURN)
/\ Volver \/
GOTO START
ENDPGM

Figura 31. Ejemplo de un programa CL que llama a programas ILE COBOL/400.

Si el usuario entra 1, 2 3 desde el men de aplicacin, el programa CL de la


Figura 31 llama a los programas ILE COBOL/400 CBLINQ, CBLCHG o CBLADD
respectivamente. Si el usuario entra 4 en el men de la aplicacin, el programa
CL vuelve al programa que lo llam.

Ejecucin de un programa ILE COBOL/400 utilizando un mandato


creado por el usuario
El usuario puede crear sus propios mandatos para ejecutar un programa ILE
COBOL/400 utilizando una definicin de mandato. Una definicin de mandato es
un objeto que contiene la definicin de un mandato (incluyendo el nombre del
mandato, las descripciones de los parmetros y la informacin de comprobacin de
validez) e identifica al programa que realiza la funcin que solicita el mandato. El
tipo de objeto reconocido por el sistema es *CMD.
Por ejemplo, se puede crear un mandato, PAY, que llama a un programa,
PAYROLL. PAYROLL es el nombre de un programa ILE COBOL/400 que se llama
y se ejecuta. Se puede entrar el mandato de forma interactiva o en un trabajo de
proceso por lotes. Consulte el manual CL Programacin para obtener ms informacin sobre la utilizacin de la definicin de mandato.

Finalizacin de un programa ILE COBOL/400


Cuando un programa ILE COBOL/400 termina de formal normal, el sistema
devuelve el control al llamador. El llamador podra ser un usuario de una estacin
de trabajo, un programa CL (como, por ejemplo, el programa de manejo de mens)
u otro programa HLL.
Si un programa ILE COBOL/400 termina anormalmente durante la ejecucin, se
emite el mensaje de escape CEE9901
Error de aplicacin. id-mensaje no supervisado por nombre-programa
en instruccin nmero-instruccin, instruccin nmero-instruccin.
al llamador de la unidad de ejecucin. Un programa CL puede supervisar esta
excepcin utilizando el mandato Supervisar mensajes (MONMSG). Consulte el
manual CL Reference para obtener ms informacin sobre los mandatos de lenguaje de control.

110

ILE COBOL/400 Gua del Programador

Si un programa terminar por una causa que no es una de las siguientes:

La utilizacin de la instruccin STOP RUN

La utilizacin de la instruccin GOBACK en el programa principal

|
|

La utilizacin de la instruccin EXIT-PROGRAM AND CONTINUE RUN UNIT


en el programa principal

La desactivacin al final del programa,

el atributo de trabajo RTNCDE se establece en 2.


Consulte los mandatos RTVJOBA y DSPJOB del manual CL Programacin para
obtener ms informacin sobre los cdigos de retorno.

Respuesta a mensajes de consulta durante la ejecucin


Cuando se ejecuta un programa ILE COBOL/400, es posible que se generen mensajes de consulta de ejecucin. Estos mensajes requieren una respuesta para que
el programa contine la ejecucin.
Los mensajes de consulta se pueden aadir a una lista de respuestas del sistema
para proporcionar respuestas automticas a los mensajes. Las respuestas para
estos mensajes pueden especificarse individualmente o de forma general. Este
mtodo de respuesta a mensajes de consulta es especialmente adecuado para
programas de proceso por lotes que, de otro modo, necesitaran un operador que
emitiera las respuestas.
Los siguientes mensajes de consulta ILE COBOL/400 se pueden aadir a la lista
de respuestas del sistema:
LNR7200
LNR7201
LNR7203
LNR7204
LNR7205
LNR7206
LNR7207
LNR7208
LNR7209
LNR7210
LNR7211
LNR7212
LNR7213
LNR7214
LNR7604.
La lista de respuestas slo se utiliza cuando un trabajo que tiene el atributo Respuesta de mensajes de consulta (INQMSGRPY) especificado como
INQMSGRPY(\SYSRPYL), enva un mensaje de consulta.
El parmetro INQMSGRPY se produce en los mandatos CL siguientes:

Cambiar trabajo (CHGJOB)


Cambiar descripcin de trabajo (CHGJOBD)
Crear descripcin de trabajo (CRTJOBD)
Someter trabajo (SBMJOB).
Captulo 6. Ejecucin de un programa ILE COBOL/400

111

Se puede seleccionar una de las cuatro modalidades de respuesta especificando


uno de los valores siguientes para el parmetro INQMSGRPY:
SAME

No se realiza ninguna modificacin en la forma en que las respuestas


se envan a los mensajes de consulta.

RQD

Todos los mensajes de consulta precisan una respuesta por parte del
receptor de los mensajes de consulta.

DFT

Se emite una respuesta por omisin.

SYSRPYL

Se comprueba si en las lista de respuestas del sistema existe una


entrada de la lista de respuestas coincidente. Si se produce una
coincidencia, se utiliza el valor de respuesta de esa entrada. Si no
existe ninguna entrada para ese mensaje de consulta, es necesario
proporcionar una respuesta.

Se puede utilizar el mandato Aadir entrada en lista de respuestas (ADDRPYLE)


para aadir entradas a la lista de respuestas del sistema, o el mandato Trabajar
con entradas de lista de respuestas (WRKRPYLE) para modificar o eliminar
entradas de la lista de respuestas del sistema. Consulte el manual CL Reference
para obtener detalles sobre los mandatos ADDRPYLE y WRKRPYLE. Tambin se
puede responder a los mensajes de consulta de ejecucin con un manejador de
errores definido por el usuario. Para obtener ms informacin sobre las API de
manejo de errores, consulte el manual System API Reference.

112

ILE COBOL/400 Gua del Programador

Captulo 7. Depuracin de un programa


|

La depuracin permite detectar, diagnosticar y eliminar errores de un programa.


Puede depurar los programas OPM y ILE COBOL/400 utilizando el depurador
fuente ILE.
Este captulo describe cmo utilizar el depurador fuente ILE para:

Preparar el programa ILE COBOL/400 para la depuracin


Arrancar una sesin de depuracin
Aadir y eliminar programas de una sesin de depuracin
Visualizar el fuente del programa desde una sesin de depuracin
Establecer y eliminar puntos de interrupcin condicionales e incondicionales.
Establecer y eliminar condiciones de observacin
Ejecutar un programa por pasos
Visualizar el valor de variables, registros, elementos de grupo y matrices
Modificar el valor de variables
Modificar el mbito de referencia
Equiparar un nombre abreviado a una variable, una expresin o un mandato
de depuracin.

Mientras depure y pruebe los programas, asegrese de que la lista de bibliotecas


se ha modificado para dirigir los programas a una biblioteca de prueba que contenga datos de prueba de tal forma que los datos reales existentes no se vean
afectados.
Puede evitar que los archivos de base de datos de las bibliotecas de produccin se
modifiquen de forma no intencionada utilizando uno de los siguientes mandatos
CL:

*
*
*
*
*

Utilice el mandato Arrancar depuracin (STRDBG) y especifique el parmetro


UPDPROD(*NO)
Utilice el mandato Cambiar depuracin (CHGDBG) y especifique el valor *NO
del parmetro UPDPROD
Utilice el mandato de depuracin SET de la pantalla Visualizar fuente del
mdulo. La sintaxis para impedir que se produzcan modificaciones en el
archivo sera la siguiente:

SET UPDPROD NO

que puede abreviarse a

SET U N
Consulte el manual CL Reference para obtener ms informacin.
Consulte el captulo sobre depuracin del manual ILE Conceptos para obtener ms
informacin sobre el depurador fuente ILE (incluyendo la autorizacin necesaria
para depurar un objeto de programa o un programa de servicio y los efectos de los
niveles de optimizacin).

Copyright IBM Corp. 1994, 1996

113

El depurador fuente ILE


El depurador fuente ILE se utiliza para detectar errores en los programas de servicio y objetos de programa y eliminarlos. Si utiliza los mandatos de depuracin
con cualquier programa ILE que contenga datos de depuracin podr:

|
|

Depurar aplicaciones de lenguaje ILE COBOL/400 o ILE mixtas.


Supervisar el flujo de un programa utilizando los mandatos de depuracin
mientras se ejecuta el programa.
|

Visualizar el fuente del programa o modificar la vista de depuracin


Establecer y eliminar puntos de interrupcin condicionales e incondicionales.

Establecer y eliminar condiciones de observacin


Ejecutar por pasos un nmero determinado de instrucciones
Visualizar o modificar los valores de variables, registros, elementos de grupo y
matrices.
Nota: El depurador fuente ILE no da soporte a la clusula COLLATING
SEQUENCE ILE COBOL/400. Si utiliza esta clusula en el programa ILE
COBOL/400 para especificar un orden de clasificacin propio, el depurador
fuente ILE no utilizar este orden.
Si un programa se detiene debido a un punto de interrupcin o a un mandato de
paso, la vista del objeto de mdulo pertinente aparece en la pantalla en el punto en
que se ha detenido el programa. En este punto se pueden entrar ms mandatos
de depuracin.
Para poder utilizar el depurador fuente, debe especificar el parmetro DBGVIEW
con un valor diferente de *NONE cuando cree el objeto de mdulo o el objeto de
programa utilizando el mandato CRTCBLMOD o CRTBNDCBL. Una vez haya
arrancado el depurador, puede establecer puntos de interrupcin u otras opciones
de depuracin fuente ILE y a continuacin deber ejecutar el programa.

|
|

Mandatos de depuracin
Con el depurador fuente ILE pueden utilizarse muchos mandatos de
depuracin.Los mandatos de depuracin y sus parmetros se entran en la lnea de
mandatos de depuracin que se visualiza en la parte inferior de las pantallas
Visualizar fuente del mdulo y Evaluar expresin. Estos mandatos se pueden
entrar en letras maysculas, minsculas o mixtas. Consulte el manual ILE Conceptos para obtener ms detalles sobre los mandatos de depuracin.
Nota: Los mandatos de depuracin que se entran en la lnea de mandatos de
depuracin no son mandatos CL.
La Tabla 4 en la pgina 115 resume estos mandatos de depuracin. La ayuda en
lnea disponible para el depurador fuente ILE describe los mandatos de depuracin
y explica las abreviaturas que se permiten.

114

ILE COBOL/400 Gua del Programador

Tabla 4. Mandatos del depurador fuente ILE


Mandato de
depuracin

Descripcin

ATTR

Permite visualizar los atributos de una variable. Los atributos son el


tamao y el tipo de la variable como se registra en la tabla de smbolos
de depuracin. Consulte la Tabla 5 en la pgina 116 para obtener una
lista de atributos y de sus equivalencias en ILE COBOL/400. Estos atributos no son los mismos que los definidos por ILE COBOL/400.

BREAK

Permite entrar un punto de interrupcin condicional o incondicional en


una posicin del programa que se est probando. Utilice BREAK posicin WHEN expresin para entrar un punto de interrupcin condicional.

CLEAR

Permite eliminar puntos de interrupcin condicionales e incondicionales


o eliminar una o todas las condiciones de observacin activas.

DISPLAY

Permite visualizar los nombres y definiciones que se han asignado utilizando el mandato EQUATE. Tambin permite visualizar un mdulo
fuente diferente del que aparece actualmente en la pantalla Visualizar
fuente del mdulo. El objeto de mdulo debe existir en el objeto de
programa actual.

EQUATE

Permite asignar una expresin, una variable o un mandato de depuracin a un nombre para su utilizacin abreviada.

EVAL

Permite visualizar o modificar el valor de una variable o visualizar los


valores de expresiones, registros, elementos de grupo o matrices.

QUAL

Permite definir el mbito de las variables que aparecen en los mandatos EVAL posteriores.

SET

Permite modificar las opciones de depuracin, como por ejemplo la


posibilidad de actualizar archivos de produccin o de habilitar el soporte
de depuracin fuente OPM.

STEP

Permite ejecutar una o ms instrucciones del programa que se est


depurando.

WATCH

Permite solicitar un punto de interrupcin cuando se cambia el valor


actual del contenido de una ubicacin de almacenamiento especfica.

FIND

Busca avanzando en el mdulo que se visualiza actualmente un texto,


una serie o un nmero de lnea determinado.

UP

Mueve la ventana del fuente que se visualiza hacia el principio de la


vista tanto como se indique.

DOWN

Mueve la ventana del fuente que se visualiza hacia el final de la vista


tanto como se indique.

|
|

LEFT

Mueve la ventana del fuente que se visualiza hacia la izquierda el


nmero de caracteres que se haya entrado.

*
*

RIGHT

Mueve la ventana del fuente que se visualiza hacia la derecha el


nmero de caracteres que se haya entrado.

TOP

Coloca la vista para que se muestre la primera lnea.

BOTTOM

Coloca la vista para que se muestre la ltima lnea.

NEXT

Coloca la vista en el siguiente punto de interrupcin del fuente que se


visualiza actualmente.

PREVIOUS

Coloca la vista en el punto de interrupcin anterior del fuente que se


visualiza actualmente.

HELP

Muestra la informacin de ayuda en lnea para los mandatos disponibles del depurador fuente.

|
|
|

|
|

Captulo 7. Depuracin de un programa

115

Atributos de variables
El depurador fuente ILE no describe los atributos de las variables de la misma
forma que ILE COBOL/400. La Tabla 5 muestra la equivalencia entre los atributos
de variables descritas por el depurador fuente ILE y por las categoras de datos
ILE COBOL/400.
Tabla 5. Equivalencia entre atributos de variables del depurador fuente ILE y categoras de
datos ILE COBOL/400
Atributos de variables del depurador
fuente ILE

Categoras de datos ILE COBOL/400

FIXED LENGTH STRING

Alfabtico
Alfanumrico
Alfanumrico editado
Numrico editado
Coma flotante externo

GRAPHIC

DBCS
DBCS-editado

CHAR

Booleano

BINARY

Binario

ZONED(2,0)

Decimal con zona

PACKED(2,0)

Decimal empaquetado

PTR

Puntero
Puntero de procedimiento

Real

Coma flotante interno

Preparacin de un objeto de programa para una sesin de depuracin


Para poder utilizar el depurador fuente ILE, se tiene que utilizar el mandato
CRTCBLMOD o el mandato CRTBNDCBL especificando el parmetro DBGVIEW.
Se puede crear una de las tres vistas para cada objeto de mdulo ILE COBOL/400
que desee depurar. Estas son:
Vista de listado
Vista fuente
Vista de instruccin

Utilizacin de una vista de listado


Una vista de listado es parecida a la parte del listado fuente del listado de compilacin o archivo de spool que genera el compilador ILE COBOL/400.
Para poder depurar un objeto de mdulo ILE COBOL/400 utilizando una vista de
listado, debe utilizar el valor *LIST o *ALL en el parmetro DBGVIEW para el
mandato CRTCBLMOD o CRTBNDCBL cuando se crea el objeto de mdulo o el
objeto de programa.
A continuacin se indica un mtodo para crear una vista de listado:
CRTCBLMOD MODULE(MYLIB/xxxxxxxx)
SRCFILE(MYLIB/QCBLLESRC) SRCMBR(xxxxxxxx)
TEXT('programa CBL') DBGVIEW(\LIST)

116

ILE COBOL/400 Gua del Programador

Cuando se genera una vista de listado especificando el parmetro


DBGVIEW(*LIST) en el mandato CRTCBLMOD o en el mandato CRTBNDCBL, el
tamao del objeto de mdulo que se crea aumenta debido a la vista de listado. La
vista de listado proporciona todas las ampliaciones (por ejemplo, las instrucciones
COPY y REPLACE) que realiza el compilador ILE COBOL/400 cuando crea el
objeto de mdulo o el objeto de programa. La vista de listado existe independientemente del miembro fuente. El miembro fuente puede modificarse o suprimirse
sin afectar a la vista de listado.
Si el miembro fuente contiene varias unidades de compilacin, la vista de listado
contendr los listados fuente de todas las unidades de compilacin, aunque slo
una de ellas se depure. Sin embargo, cualquier mandato de depuracin que se
emita desde la pantalla Visualizar fuente del mdulo se aplicar nicamente a la
unidad de compilacin que pueda depurarse.

Utilizacin de una vista fuente


Las vistas fuente contienen referencias a las instrucciones fuente del miembro
fuente.
Para utilizar la vista fuente con el depurador fuente ILE, el compilador ILE
COBOL/400 crea referencias al miembro fuente mientras se est creando el objeto
de mdulo (*MODULE).
Nota: El objeto de mdulo se crea utilizando referencias a ubicaciones de las instrucciones fuente en el miembro fuente raz en lugar de copiar las instrucciones fuente en la vista. Por consiguiente, no debera modificar,
renombrar ni mover miembros fuente raz entre la creacin del mdulo y la
depuracin del mdulo que se ha creado a partir de estos miembros.
Para depurar un objeto de mdulo ILE COBOL/400 utilizando una vista fuente,
utilice los valores *SOURCE o *ALL del parmetro DBGVIEW para el mandato
CRTCBLMOD o para el mandato CRTBNDCBL.
A continuacin se indica un mtodo para crear una vista fuente:
CRTCBLMOD MODULE(MYLIB/xxxxxxxx)
SRCFILE(MYLIB/QCBLLESRC) SRCMBR(xxxxxxxx)
TEXT('programa CBL') DBGVIEW(\SOURCE)
Cuando se genera la vista fuente especificando DBGVIEW(*SOURCE) en el
mandato CRTCBLMOD o en el mandato CRTBNDCBL, el tamao del objeto de
mdulo que se ha creado aumenta debido a la vista fuente, pero el tamao es
menor que aqul generado con la vista de listado. El tamao del objeto de mdulo
generado ser el mismo que para la vista de instruccin. La vista fuente no proporciona ninguna de las ampliaciones que el compilador ILE COBOL/400 realiza
cuando crea un objeto de mdulo o un objeto de programa. La vista fuente
depende de la existencia no modificada del miembro fuente. Cualquier cambio
realizado en el miembro fuente afectar a la vista fuente.
Si el miembro fuente contiene varias unidades de compilacin, la vista fuente contendr el cdigo fuente de todas las unidades de compilacin, aunque slo una de
ellas pueda depurarse. Sin embargo, los mandatos de depuracin que se emitan
desde la pantalla Visualizar fuente del mdulo se aplicar nicamente a la unidad
de compilacin que se est depurando.

Captulo 7. Depuracin de un programa

117

Utilizacin de una vista de instruccin


Las vista de instruccin no contienen instrucciones fuente. Contienen nmeros de
lnea y nmeros de instruccin. Para depurar un objeto de mdulo ILE
COBOL/400 utilizando una vista de instruccin, es necesario una copia impresa del
listado del compilador.
Nota: No aparece ningn cdigo fuente en la pantalla Visualizar fuente del
mdulo cuando se utiliza una vista de instruccin para depurar un objeto de
mdulo ILE COBOL/400.
Para depurar un objeto de mdulo ILE COBOL/400 utilizando una vista de instruccin, utilice los valores *STMT, *SOURCE, *LIST o *ALL en el parmetro
DBGVIEW para el mandato CRTCBLMOD o para el mandato CRTBNDCBL cuando
cree el mdulo.
A continuacin se indica un mtodo para crear una vista de instruccin:
CRTCBLMOD MODULE(MYLIB/xxxxxxxx)
SRCFILE(MYLIB/QCBLLESRC) SRCMBR(xxxxxxxx)
TEXT('programa CBL') DBGVIEW(\STMT)
Cuando se genera la vista de instruccin especificando DBGVIEW(*STMT) en los
mandatos CRTCBLMOD o CRTBNDCBL, el tamao del objeto de mdulo creado
aumenta mnimamente debido a la vista de instruccin. El tamao del objeto de
mdulo creado es menor que aquellos generados con la vista de listado o la vista
fuente. La vista de instruccin minimiza el tamao del objeto de mdulo creado a
la vez que sigue siendo posible algn tipo de depuracin. La vista de instruccin
slo proporciona la tabla de smbolos y una correlacin entre nmeros de instrucciones y nmeros de lnea de depuracin.

Arranque del depurador fuente ILE


Una vez creada la vista de depuracin, se puede empezar la depuracin de la aplicacin.
Para arrancar el depurador fuente ILE, utilice el mandato Arrancar depurador
(STRDBG). Una vez arrancado, el depurador permanecer activo hasta que se
entre el mandato Finalizar depurador (ENDDBG). Los atributos de la modalidad de
depuracin se pueden modificar ms adelante en el trabajo utilizando el mandato
Cambiar depuracin (CHGDBG).
La Tabla 6 en la pgina 119 lista los parmetros y los valores por omisin para el
mandato STRDBG y para el mandato CHGDBG. El mandato ENDDBG no tiene
ningn parmetro asociado. Para obtener una descripcin completa de los mandatos STRDBG, CHGDBG ENDDBG y sus parmetros, consulte el manual CL
Reference.

118

ILE COBOL/400 Gua del Programador

Tabla 6. Parmetros para los mandatos STRDBG y CHGDBG y sus valores por omisin

|
|

Grupo parmetros

Mandato STRDBG
Parmetro(Valor por omisin)

Mandato CHGDBG
Parmetro(Valor por omisin)

Identificacin

PGM(*NONE)
DFTPGM(*PGM)

DFTPGM(*SAME)

Rastreo

MAXTRC(200)
TRCFULL(*STOPTRC)

MAXTRC(*SAME)
TRCFULL(*SAME)

Varios

UPDPROD(*NO)
OPMSRC(*NO)
DSPMODSRC(*PGMDEP)
SRCDBGPGM(*SYSDFT)
UNMONPGM(*NONE)

UPDPROD(*SAME)
OPMSRC(*SAME)

Nota: El rastreo slo se aplica a programas OPM y no se aplica a programas de servicio ni


a programas ILE.

|
|
|
|
|

Inicialmente, puede aadir hasta 20 objetos de programa a una sesin de depuracin utilizando el parmetro Program (PGM) en el mandato STRDBG. (Segn
cmo se hayan compilado los programas OPM y de cules sean las definiciones
del entorno de depuracin, es posible que pueda depurarlos utilizando el depurador
fuente ILE). Puede tratarse de cualquier combinacin de programas ILE o OPM.
En el parmetro PGM del mandato STRDBG slo pueden especificarse objetos de
programa; aqu no se pueden especificar programas de servicio. Los programas
de servicio se pueden aadir a la sesin de depuracin despus de haberla arrancado.

|
|
|
|
|

Aparece el primer programa especificado en el mandato STRDBG si ste tiene


datos de depuracin y si el OPM, el parmetro OPMSRC est definido en *YES.
Si se trata de un programa ILE, el primer mdulo de entrada, slo se muestra si
tiene datos de depuracin; en caso contrario, aparece el primer mdulo enlazado al
programa ILE que tenga datos de depuracin.

|
|

Para depurar un programa OPM utilizando el depurador fuente, deben cumplirse


las siguientes condiciones:

|
|
|
|

1. El programa OPM debe estar compilado con OPTION(*LSTDBG) u


OPTION(*SRCDBG). (Se da soporte a tres lenguajes OPM: RPG, COBOL y
CL. Los programas RPG y COBOL pueden compilarse con *LSTDBG o
*SRCDBG, pero los programas CL deben compilarse con *SRCDBG).

|
|
|

2. El entorno de depuracin de ILE debe estar definido para aceptar programas


OPM. Para ello, especifique OPMSRC(*YES) en el mandato STRDBG. (El
valor por omisin del sistema es OPMSRC(*NO)).

|
|

Si no se cumplen estas dos condiciones, deber depurar el programa OPM con el


depurador OPM del sistema.

|
|
|

Por ejemplo, para arrancar una sesin de depuracin para el programa de depuracin de muestra MYPGM1 y para un programa OPM de llamada, MYPGM2,
teclee:

STRDBG PGM(TESTLIB/MYPGM1 MYLIB/MYPGM2) OPMSRC(\YES)


Nota: Para poder aadir un objeto de programa a una sesin de depuracin debe
tener autorizacin *CHANGE sobre ste.

Captulo 7. Depuracin de un programa

119

|
|
|
|
|
|

Despus de entrar el mandato STRDBG, aparece la pantalla Visualizar fuente del


mdulo. Si se especifica un conjunto de programas ILE y programas OPM que
permite el uso del depurador en el mandato STRDBG, se muestra el primer programa que presenta datos de depuracin. Si este primer programa es un programa
ILE, se muestra el primer objeto de mdulo enlazado al objeto de programa que
presente datos de depuracin como se observa en la Figura 32.

Visualizar fuente del mdulo


Programa:
1
2
3
4
5
6
7
8
9
1
11
12
13
14
15

MYPGM1
Biblioteca: TESTLIB
Mdulo:
IDENTIFICATION DIVISION.
PROGRAM-ID. MYPGM1.
\
\ Es el programa principal que controla
\ el proceso de archivos externos.
\

MYPGM1

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EF1
ASSIGN TO DISK-EFILE1
FILE STATUS IS EFS1
ORGANIZATION IS SEQUENTIAL.

Ms....
Depuracin... ________________________________________________________________
_______________________________________________________________________________
F3=Fin programa F6=Aadir/Borrar punto int. F1=Paso F11=Visualizar variable
F12=Reanudar
F13=Trabajar con punt.interr.mdulo
F24=Ms teclas

Figura 32. Arranque de una sesin de depuracin

Establecimiento de opciones de depuracin

|
*
|

Una vez haya arrancado una sesin de depuracin, puede definir o modificar las
siguientes opciones de depuracin utilizando el mandato de depuracin SET en la
lnea de mandatos:

|
|
|

Si los archivos de la base de datos pueden actualizarse mientras el programa


se est depurando. (Esta opcin corresponde al parmetro UPDPROD del
mandato STRDBG).

|
|

Si las bsquedas de texto utilizando la opcin FIND son sensibles a las maysculas y minsculas.

|
|

Si los programas OPM deben depurarse utilizando el depurador fuente ILE.


(Esta opcin corresponde al parmetro OPMSRC).

*
*
|
|

Al modificar las opciones de depuracin utilizando el mandato de depuracin SET


slo se afecta al valor del parmetro correspondiente especificado en el mandato
STRDBG, si ste est definido. Tambin puede utilizar el mandato Cambiar depuracin (CHGDBG) para establecer las opciones de depuracin.

|
|

Suponga que se halla en una sesin de depuracin trabajando con un programa


ILE y decide que tambin debera depurar un programa OPM que presenta datos

120

ILE COBOL/400 Gua del Programador

|
|
|
|
|

de depuracin. Para que el depurador fuente ILE acepte los programas OPM,
debe seguir los siguientes pasos:
1. Despus de entrar STRDBG, si la pantalla actual no es la pantalla Visualizar
fuente de mdulo teclee:
DSPMODSRC

2. Teclee:

SET

Aparece la pantalla Establecer opciones de depuracin.

|
|

3. En esta pantalla, teclee Y (S) en el campo soporte de depuracin fuente OPM


y pulse la tecla Intro para volver a la pantalla Visualizar fuente de mdulo.

|
|

A continuacin puede aadir el programa OPM, utilizando la pantalla Trabajar con


mdulo o procesando una instruccin de llamada para este programa.

Ejecucin de un objeto de programa en una sesin de depuracin


Cuando la sesin de depuracin ya se ha arrancado, se puede ejecutar un objeto
de programa en la sesin de depuracin, pulsando:
F3 (Fin programa),
F12 (Reanudar), o
F21 (Lnea de mandatos)
en la pantalla Visualizar fuente del mdulo.A continuacin, se llama al objeto de
programa desde la lnea de mandatos utilizando el mandato CL CALL.
Cuando se produce una excepcin en un objeto de programa durante una sesin
de depuracin, la excepcin se maneja con las rutinas de manejo de excepciones
y errores especificadas para el objeto de programa. Si la excepcin no se maneja
con un manejador de excepciones antes de que se convierta en una comprobacin
de funcin, se invoca el depurador y aparece la pantalla Visualizar fuente del
mdulo. El objeto de mdulo donde se ha producido la excepcin se visualiza en la
instruccin que provoc la excepcin. Consulte el Captulo 12, Manejo de errores
y excepciones ILE COBOL/400 en la pgina 261 para obtener ms informacin
sobre el manejo de excepciones y errores.
La ejecucin de un programa se puede detener estableciendo puntos de interrupcin o pulsando F3 (Fin programa) en la pantalla Visualizar fuente del mdulo.
Consulte el apartado Establecimiento y eliminacin de puntos de interrupcin en
la pgina 126 para obtener ms informacin acerca de cmo se establecen puntos
de interrupcin.

Adicin de objetos de programa y programas de servicio a una sesin


de depuracin
Se pueden aadir ms objetos de programa y programas de servicio a una sesin
de depuracin una vez arrancada.
Para aadir programas de servicio y objetos de programa ILE a una sesin de
depuracin, utilice la opcin 1 (Aadir programa) y teclee el nombre del objeto de
programa en la primera lnea de la pantalla Trabajar con lista de mdulos (vea la
Figura 33 en la pgina 122). Se puede acceder a la pantalla Trabajar con lista de

Captulo 7. Depuracin de un programa

121

mdulos pulsando F14 (Trabajar con lista de mdulos) en la pantalla Visualizar


fuente del mdulo. Para aadir un programa de servicio, cambie el tipo de programa por omisin de *PGM a *SRVPGM. No hay lmite para el nmero de programas de servicio y objetos de programa ILE que pueden incluirse en una sesin
de depuracin en un momento determinado.
|
|
|
|
|
|
|
|
|
|

Para aadir objetos de programa OPM a una sesin de depuracin, tiene dos
opciones en funcin del valor especificado para OPMSRC. Si ha especificado
OPMSRC(*YES) utilizando STRDBG, el mandato de depuracin SET o CHGDBG,
debe aadir un programa OPM utilizando la pantalla Trabajar con lista de mdulos.
(Observe que no aparecer ningn nombre de mdulo para un programa OPM).
No hay lmite para el nmero de programas OPM que pueden incluirse en una
sesin de depuracin en un momento determinado cuando se especifica
OPMSRC(*YES). Si ha especificado OPMSRC(*NO), deber utilizar el mandato
Aadir programa (ADDPGM). Cuando se especifica OPMSRC(*NO), slo puede
haber 20 programas OPM en una sesin de depuracin.

|
|
|
|
|
|
|

Nota: No es posible depurar un programa OPM con datos de depuracin que provengan de una sesin de depuracin ILE y OPM. Si un programa OPM ya
se encuentra en una sesin de depuracin OPM, debe eliminarlo en primer
lugar de esta sesin antes de aadirlo a la sesin de depuracin de ILE o
entrar en l desde una instruccin de llamada. De forma similar, si desea
depurarlo desde una sesin de depuracin OPM, debe eliminarlo primero
de una sesin de depuracin ILE.

Trabajar con lista de mdulos


Sistema:
AS4SYS
Teclee opciones, pulse Intro.
1=Aadir programa 4= Eliminar programa 5= Visualizar fuente del mdulo
8=Trabajar con puntos de interrupcin de mdulos
Opc
1
_
_
_
_
_

Programa/mdulo
TEST________
MYPGM1
MYPGM1
USERDSP
SAMPMDF
GETUSER

Biblioteca
TESTLIB___
TESTLIB
DSPLIB

Tipo de
programa
\PGM___
\PGM
\MODULE
\SRVPGM
\MODULE
\MODULE

Selected

Final
Mandato
===> ___________________________________________________________________
F3=Salir F4=Solicitud F5=Renovar
F9=Recuperar
F12=Cancelar

Figura 33. Adicin de un objeto de programa ILE a una sesin de depuracin.

Cuando termine de aadir objetos de programa o programas de servicio a la


sesin de depuracin, pulse F3 (Salir) en la pantalla Trabajar con lista de mdulos
para volver a la pantalla Visualizar fuente del mdulo.
Nota: Debe tener autorizacin *CHANGE sobre un programa para aadirlo a una
sesin de depuracin. Los programas de servicio ILE nicamente pueden

122

ILE COBOL/400 Gua del Programador

aadirse a una sesin de depuracin utilizando la opcin 1 de la pantalla


Trabajar con lista de mdulos. Los programas de servicio ILE no pueden
especificarse en el mandato STRDBG.

Eliminacin de objetos de programa o programas de servicio de una


sesin de depuracin
Puede eliminar objetos de programa o programas de servicio de una sesin de
depuracin despus de arrancar la sesin.
Para eliminar objetos de programa y programas de servicio ILE de una sesin de
depuracin, utilice la opcin 4 (Eliminar programa), junto al objeto de programa o
programa de servicio que desea eliminar, en la pantalla Trabajar con lista de
mdulos (vea la Figura 34). Se puede acceder a la pantalla Trabajar con lista de
mdulos pulsando F14 (Trabajar con lista de mdulos) en la pantalla Visualizar
fuente del mdulo.
|
|
|
|
|
|
|
|
|
|

Para eliminar objetos de programa OPM de una sesin de depuracin, tiene dos
opciones en funcin del valor especificado para OPMSRC. Si ha especificado
OPMSRC(*YES) utilizando STRDBG, el mandato de depuracin SET o CHGDBG,
debe eliminar un programa OPM utilizando la pantalla Trabajar con lista de
mdulos. (Observe que no aparecer ningn nombre de mdulo para un programa
OPM). No hay lmite para el nmero de programas OPM que pueden eliminarse
de una sesin de depuracin en un momento determinado cuando se especifica
OPMSRC(*YES). Si ha especificado OPMSRC(*NO), deber utilizar el mandato Eliminar programa (RMVPGM). Cuando se especifica OPMSRC(*NO), slo puede
haber diez programas OPM en una sesin de depuracin.

Trabajar con lista de mdulos


Sistema:
AS4SYS
Teclee opciones, pulse Intro.
1=Aadir programa 4= Eliminar programa 5= Visualizar fuente del mdulo
8=Trabajar con puntos de interrupcin de mdulos
Opc
_
4
_
_
_
_
_
_

Programa/mdulo
____________
TEST
SAMPMDF
MYPGM1
MYPGM1
USERDSP
SAMPMDF
GETUSER

Biblioteca
\LIBL_____
TESTLIB
TESTLIB
DSPLIB

Tipo de
programa
\PGM___
\PGM
\MODULE
\PGM
\MODULE
\SRVPGM
\MODULE
\MODULE

Selected

Final
Mandato
===> ___________________________________________________________________
F3=Salir F4=Solicitud F5=Renovar
F9=Recuperar
F12=Cancelar

Figura 34. Eliminacin de un objeto de programa ILE de una sesin de depuracin

Cuando termine de eliminar objetos de programa o programas de servicio de una


sesin de depuracin, pulse F3 (Salir) en la pantalla Trabajar con lista de mdulos
para volver a la pantalla Visualizar fuente del mdulo.
Captulo 7. Depuracin de un programa

123

Nota: Debe tener autorizacin *CHANGE sobre un programa para eliminarlo de


una sesin de depuracin.

Visualizacin del fuente del programa


|
|

La pantalla Visualizar fuente del mdulo muestra el fuente de un objeto de programa o programa de servicio ILE, visualizando un objeto de mdulo cada vez.
Los fuentes de los objetos de mdulo pueden mostrarse si los objetos de mdulo
estn creados con datos de depuracin, utilizando una de las siguientes opciones
de vista de depuracin:

|
|
|

DBGVIEW(*STMT)

DBGVIEW(*SOURCE)

DBGVIEW(*LIST)

DBGVIEW(*ALL)

|
|

El fuente de un programa OPM puede mostrarse si se cumplen las siguientes condiciones:

|
|
|

1. El programa OPM debe estar compilado con OPTION(*LSTDBG) u


OPTION(*SRCDBG). (Slo los programas RPG y COBOL pueden compilarse
con *LSTDBG).

|
|
|

2. El entorno de depuracin de ILE debe estar definido para aceptar programas


OPM, es decir, el valor de OPMSCR deber ser *YES. (El valor por omisin del
sistema es OPMSRC(*NO)).
Hay dos mtodos para modificar lo que se muestra en la pantalla Visualizar fuente
del mdulo:
Cambiar el objeto de mdulo que aparece.
Cambiar la vista del objeto de mdulo que aparece.
El depurador fuente ILE recuerda la ltima posicin en la que visualiz el objeto de
mdulo y lo muestra en la misma posicin cuando vuelve a visualizarlo. Se
resaltan los nmeros de las lneas en las que se han establecido puntos de interrupcin. Cuando un punto de interrupcin, un paso o un mensaje provoque la
detencin del programa y su aparicin en la pantalla, se resaltar la lnea fuente
donde se produjo el suceso.

Modificacin del objeto de mdulo que aparece


Se puede cambiar el objeto de mdulo que aparece en la pantalla Visualizar fuente
del mdulo utilizando la opcin 5 (Visualizar fuente del mdulo) de la pantalla Trabajar con lista de mdulos. Se puede acceder a la pantalla Trabajar con lista de
mdulos pulsando F14 (Trabajar con lista de mdulos) en la pantalla Visualizar
fuente del mdulo. La pantalla Trabajar con lista de mdulos se muestra en la
Figura 35 en la pgina 125.
Para seleccionar un objeto de mdulo, teclee 5 (Visualizar fuente del mdulo) junto
al objeto de mdulo que desea mostrar. Si utiliza esta opcin con un objeto de
programa ILE, aparece el objeto de mdulo que contiene la vista fuente (si existe).
En caso contrario, se muestra el primer objeto de mdulo enlazado al objeto de
programa que presente datos de depuracin. Si utiliza esta opcin con un objeto
de programa OPM, aparece la vista fuente o de listado (si existe).

124

ILE COBOL/400 Gua del Programador

Trabajar con lista de mdulos


Sistema:
AS4SYS
Teclee opciones, pulse Intro.
1=Aadir programa 4= Eliminar programa 5= Visualizar fuente del mdulo
8=Trabajar con puntos de interrupcin de mdulos
Opc
_
_
5
_
_
_
_
_

Programa/mdulo
____________
TEST
SAMPMDF
MYPGM1
MYPGM1
USERDSP
SAMPMDF
GETUSER

Biblioteca
\LIBL_____
TESTLIB
TESTLIB
DSPLIB

Tipo de
programa
\PGM___
\PGM
\MODULE
\PGM
\MODULE
\SRVPGM
\MODULE
\MODULE

Selected

Final
Mandato
===> ___________________________________________________________________
F3=Salir F4=Solicitud F5=Renovar
F9=Recuperar
F12=Cancelar

Figura 35. Visualizacin de una vista de mdulo

Cuando haya seleccionado el objeto de mdulo que desea ver, pulse Intro y la
vista seleccionada aparecer en la pantalla Visualizar fuente del mdulo.
Otro mtodo alternativo para cambiar el objeto de mdulo que se muestra es utilizar el mandato de depuracin DISPLAY. En la lnea de mandatos de depuracin,
teclee:
DISPLAY MODULE nombre-mdulo
Se mostrar el objeto de mdulo nombre-mdulo. El objeto de mdulo debe existir
en un objeto de programa que se haya aadido a la sesin de depuracin.

Modificacin de la vista del objeto de mdulo que se muestra


Hay disponibles diferentes vistas de un objeto de mdulo ILE COBOL/400 segn
los valores que se especifiquen cuando ste se crea. Estas vistas son:
Vista de listado ILE COBOL/400
Vista fuente ILE COBOL/400
Se puede cambiar la vista del objeto de mdulo que aparece en la pantalla
Visualizar fuente del mdulo a travs de la pantalla Seleccionar vista. Puede accederse a la pantalla Seleccionar vista pulsando F15 (Seleccionar vista) en la pantalla Visualizar fuente del mdulo. En la Figura 36 en la pgina 126 se muestra la
pantalla Seleccionar vista. La vista actual se lista en la parte superior de la pantalla y debajo el resto de vistas disponibles. Cada uno de los objetos de mdulo
de un objeto de programa o programa de servicio puede tener un conjunto diferente de vistas disponibles, segn las opciones de depuracin que se utilizaron
para crearlo.
Para seleccionar una vista, teclee 1 (Seleccionar) junto a la vista que desea
mostrar.

Captulo 7. Depuracin de un programa

125

Visualizar fuente del mdulo


..............................................................................
:
Seleccionar vista
:
:
:
: Vista actual . . . :
Vista fuente ILE COBOL/4
:
:
:
: Teclee la opcin, pulse Intro.
:
:
1=Seleccionar
:
:
:
: Opc
Vista
:
:
1
Vista de listado ILE COBOL/4
:
:
_
Vista fuente ILE COBOL/4
:
:
:
:
:
:
Final
:
: F12=Cancelar
:
:
:
:............................................................................:
Ms....
Depuracin... _______________________________________________________________
_______________________________________________________________________________
F5=Renovar
F9=Recuperar F14=Trabajar con lista de mdulo F15= Selec. vista
F16=Def. opc. dep. F19=Izq. F2=Derecha F22=Ejec. paso interno F24=Ms teclas

Figura 36. Modificacin de la vista de un objeto de mdulo

Cuando haya seleccionado la vista del objeto de mdulo que desea mostrar, .*
press F3 (Exit) pulse Intro y la vista seleccionada del objeto de mdulo aparecer
en la pantalla Visualizar fuente del mdulo.

Establecimiento y eliminacin de puntos de interrupcin


Puede utilizar puntos de interrupcin para detener un objeto de programa o programa de servicio en un punto determinado cuando ste se ejecuta. Un punto de
interrupcin incondicional detiene el objeto de programa o programa de servicio
en una instruccin determinada. Un punto de interrupcin condicional detiene
el objeto de programa o programa de servicio cuando se cumple una condicin
especfica en una instruccin determinada.
Cuando se detiene el objeto de programa o programa de servicio, aparece la pantalla Visualizar fuente del mdulo. El objeto de mdulo apropiado se muestra con
el fuente situado en la lnea donde se ha producido el punto de interrupcin.Esta
lnea se resalta. En este punto, puede evaluar las variables, establecer ms
puntos de interrupcin y ejecutar cualquiera de los mandatos de depuracin.
Antes de utilizar puntos de interrupcin, debera conocer las siguientes caractersticas:
Si un punto de interrupcin se salta, por ejemplo, con la instruccin GO TO,
ese punto de interrupcin no se procesa.
Cuando un punto de interrupcin se establece en una instruccin, ste se
produce antes de procesar la instruccin.
Cuando se alcanza una instruccin que tiene un punto de interrupcin condicional, la expresin condicional asociada al punto de interrupcin se evala
antes de procesar la instruccin.

126

ILE COBOL/400 Gua del Programador

Las funciones de los puntos de interrupcin se especifican con los mandatos


de depuracin.
Estas funciones incluyen:

Aadir puntos de interrupcin


Eliminar puntos de interrupcin
Visualizar informacin acerca de puntos de interrupcin
Reanudar la ejecucin de un objeto de programa o programa de servicio
despus de haber alcanzado un punto de interrupcin.

Establecimiento y eliminacin de puntos de interrupcin


incondicionales
Puede establecer o eliminar un punto de interrupcin incondicional utilizando:
F6 (Aadir/Borrar punto de interrupcin) en la pantalla Visualizar fuente del
mdulo
F13 (Trabajar con puntos de interrupcin de mdulo) en la pantalla Visualizar
fuente del mdulo
El mandato de depuracin BREAK para establecer un punto de interrupcin
El mandato de depuracin CLEAR para eliminar un punto de interrupcin
El mtodo ms sencillo para establecer y eliminar un punto de interrupcin es utilizar F6 (Aadir/Borrar punto de interrupcin) en la pantalla Visualizar fuente del
mdulo. Para establecer un punto de interrupcin incondicional utilizando F6
(Aadir/Borrar punto de interrupcin), site el cursor en la lnea donde desea
aadir el punto de interrupcin y pulse F6 (Aadir/Borrar punto de interrupcin).Los
puntos de interrupcin incondicionales se establecen en la lnea. Para eliminar un
punto de interrupcin incondicional utilizando F6 (Aadir/Borrar punto de interrupcin), site el cursor en la lnea de la que quiere eliminar el punto de interrupcin y
pulse F6 (Aadir/Borrar punto de interrupcin).Los puntos de interrupcin se eliminan de la lnea.
Repita los pasos anteriores para cada punto de interrupcin incondicional que
desee establecer.
Si la lnea en la que desea establecer el punto de interrupcin contiene varias instrucciones, al pulsar F6 (Aadir/Borrar punto de interrupcin) se establecer el
punto de interrupcin en la primera instruccin de la lnea.
Nota: Si la lnea donde desea establecer el punto de interrupcin no es una instruccin ejecutable, el punto de interrupcin se establecer en la siguiente
instruccin ejecutable.
Cuando haya establecido los puntos de interrupcin, pulse F3 (Fin programa) para
salir de la pantalla Visualizar fuente del mdulo. Tambin puede utilizar F21 (Lnea
de mandatos) en la pantalla Visualizar fuente del mdulo para llamar al programa
desde una lnea de mandatos.
Llame al objeto de programa. Cuando se alcanza un punto de interrupcin, se
detiene el objeto de programa o programa de servicio y aparece de nuevo la pantalla Visualizar fuente del mdulo. En este punto, puede evaluar las variables,
establecer ms puntos de interrupcin y ejecutar cualquiera de los mandatos de
depuracin.

Captulo 7. Depuracin de un programa

127

Un mtodo alternativo para establecer y eliminar puntos de interrupcin incondicionales es utilizar los mandatos de depuracin BREAK y CLEAR.
Para establecer un punto de interrupcin incondicional utilizando el mandato de
depuracin BREAK, teclee:
BREAK nmero-lnea
en la lnea de mandatos de depuracin.Nmero-lnea es el .* number of the
debugger line nmero de lnea de la vista del objeto de mdulo que se visualiza
actualmente donde desea establecer un punto de interrupcin.
Si la lnea en la que desea establecer un punto de interrupcin contiene varias
instrucciones, el mandato de depuracin BREAK establecer el punto de interrupcin en la primera instruccin de la lnea.
Para eliminar un punto de interrupcin incondicional utilizando el mandato de depuracin CLEAR, teclee:
CLEAR nmero-lnea
en la lnea de mandatos de depuracin.Nmero-lnea es el nmero de lnea de la
vista del objeto de mdulo que se visualiza actualmente de la que desea eliminar
un punto de interrupcin.

Establecimiento y eliminacin de puntos de interrupcin condicionales


Puede establecer o eliminar un punto de interrupcin condicional utilizando:
La pantalla Trabajar con puntos de interrupcin de mdulos
El mandato de depuracin BREAK para establecer un punto de interrupcin
El mandato de depuracin CLEAR para eliminar un punto de interrupcin
Nota: Los operadores relacionales que se soportan para puntos de interrupcin
condicionales son <, >, =, =<, => y <>.
Un mtodo para establecer o eliminar puntos de interrupcin condicionales es utilizar la pantalla Trabajar con puntos de interrupcin de mdulos. Se puede
acceder a la pantalla Trabajar con puntos de interrupcin de mdulos pulsando
F13 (Trabajar con puntos de interrupcin de mdulos) en la pantalla Visualizar
fuente del mdulo. En la Figura 37 en la pgina 129 se muestra la pantalla Trabajar con puntos de interrupcin de mdulos. Para establecer un punto de interrupcin condicional, teclee 1 (Aadir) en el campo Opc, teclee el nmero de lnea
del depurador donde desea establecer el punto de interrupcin en el campo Lnea,
teclee una expresin condicional en el campo Condicin y pulse Intro. Por
ejemplo, para establecer un punto de interrupcin condicional en la lnea de depurador 35, teclee 1 (Aadir) en el campo Opc, teclee 35 en el campo Lnea, teclee
I=21 en el campo Condicin y pulse Intro, como se muestra en la Figura 37 en la
pgina 129. La expresin condicional slo puede ser una expresin simple. El
trmino situado en la parte derecha de la ecuacin slo puede contener un valor
numrico nico.Por ejemplo, I=21 se acepta pero I=A+2 o I=3*2 no se aceptan.
Para eliminar un punto de interrupcin condicional, teclee 4 (Borrar) en el campo
Opc junto al punto de interrupcin que desee eliminar y pulse Intro. Tambin puede
eliminar puntos de interrupcin incondicionales de este modo.

128

ILE COBOL/400 Gua del Programador


Programa . . . :
Mdulo . . . :

Trabajar con puntos de interrupcin de mdulo


Sistema:
AS4SYS
TEST
Biblioteca . . :
TESTLIB
SAMPMDF
Tipo . . . . . :
\PGM

Teclee opciones, pulse Intro.


1=Aadir 4=Borrar
Opc
1
_

Lnea
35____
______

Condicin
I=21________________________
____________________________

Figura 37. Establecimiento de un punto de interrupcin condicional

Repita los pasos anteriores para cada punto de interrupcin condicional que desee
establecer o eliminar.
Si la lnea en la que desea establecer el punto de interrupcin contiene varias instrucciones, el punto de interrupcin se establece en la primera instruccin de la
lnea.
Nota: Si la lnea donde desea establecer el punto de interrupcin no es una instruccin ejecutable, el punto de interrupcin se establecer en la siguiente
instruccin ejecutable.
Cuando haya terminado de especificar todos los puntos de interrupcin que desea
establecer o eliminar, pulse F3 (Salir) para volver a la pantalla Visualizar fuente del
mdulo.
A continuacin, pulse F3 (Fin programa) para salir de la pantalla Visualizar fuente
del mdulo. Tambin puede utilizar F21 (Lnea de mandatos) en la pantalla
Visualizar fuente del mdulo para llamar al programa desde una lnea de mandatos.
Ejecute el objeto de programa o el programa de servicio. Cuando se alcanza una
instruccin que tiene un punto de interrupcin condicional, la expresin condicional
asociada al punto de interrupcin se evala antes de ejecutar la instruccin. Si el
resultado es falso, el objeto de programa contina la ejecucin. Si el resultado es
verdadero, el objeto de programa se detiene y aparece la pantalla Visualizar fuente
del mdulo. En este punto, puede evaluar las variables, establecer ms puntos de
interrupcin y ejecutar cualquiera de los mandatos de depuracin.
Un mtodo alternativo para establecer y eliminar puntos de interrupcin condicionales es utilizar los mandatos de depuracin BREAK y CLEAR.
Para establecer un punto de interrupcin condicional utilizando el mandato de
depuracin BREAK, teclee:
BREAK nmero-lnea WHEN expresin
en la lnea de mandatos de depuracin.Nmero-lnea es el nmero de lnea de la
vista del objeto de mdulo que actualmente se visualiza en la que desea establecer el punto de interrupcin y expresin es la expresin condicional que se
evala cuando se encuentra el punto de interrupcin. La expresin condicional
slo puede ser una expresin simple. El trmino situado en la parte derecha de la
ecuacin slo puede contener un valor numrico nico.Por ejemplo, I=21 se acepta
pero I=A+2 o I=3*2 no se aceptan.
Captulo 7. Depuracin de un programa

129

Si la lnea en la que desea establecer un punto de interrupcin contiene varias


instrucciones, el mandato de depuracin BREAK establecer el punto de interrupcin en la primera instruccin de la lnea.
Para eliminar un punto de interrupcin condicional utilizando el mandato de depuracin CLEAR, teclee:
CLEAR nmero-lnea
en la lnea de mandatos de depuracin.Nmero-lnea es el nmero de lnea de la
vista del objeto de mdulo que se visualiza actualmente de la que desea eliminar
un punto de interrupcin.

Eliminacin de todos los puntos de interrupcin


Se pueden eliminar todos los puntos de interrupcin, condicionales o incondicionales, de un objeto de programa que tiene un objeto de mdulo que aparece en la
pantalla Visualizar fuente del mdulo utilizando el mandato de depuracin CLEAR
PGM.Para utilizar este mandato de depuracin, teclee:
CLEAR PGM
en la lnea de mandatos de depuracin. Los puntos de interrupcin se eliminan de
todos los mdulos enlazados al programa.

Establecimiento y eliminacin de condiciones de observacin

|
|
|
|
|
|

Una condicin de observacin le permite solicitar un punto de interrupcin


cuando se cambia el valor actual del contenido de una variable especificada (o de
una expresin que se relaciona con una subserie o con un elemento de matriz).
La manera de establecer condiciones de observacin es similar a la forma de establecer puntos de interrupcin condicionales pero existen las siguientes diferencias,
que son importantes:

|
|

Las condiciones de observacin detienen el programa tan pronto como el


cambia el valor actual de la expresin o variable observada.

|
|

Los puntos de interrupcin condicionales slo detienen el programa si una


variable llega al valor especificado en la condicin.

|
|
|
|
|
|

El depurador observa una expresin o una variable en funcin del contenido de


una direccin de almacenamiento, calculado en el momento en que se establece
la condicin de observacin. Cuando el contenido de la direccin de almacenamiento es distinto del valor que tena cuando se estableci la condicin de
observacin o cuando se produjo la ltima condicin de observacin, se establece
un punto de interrupcin y el programa se detiene.

|
|
|
|
|

Nota: Despus de registrarse una condicin de observacin, el contenido nuevo


en la ubicacin de almacenamiento observada se guarda como el nuevo
valor actual de la expresin o variable correspondiente. La siguiente condicin de observacin se registrar si el nuevo contenido de la ubicacin de
almacenamiento observada cambia con posterioridad.

130

ILE COBOL/400 Gua del Programador

|
|
|
|
|

Caractersticas de las observaciones


Antes de utilizar observaciones, debera conocer las siguientes caractersticas:
Las observaciones se supervisan en todo el sistema y puede activarse un
mximo de 256 observaciones de forma simultnea. Este nmero incluye las
observaciones establecidas por el propio sistema.

|
|
|
|
|

En funcin de la utilizacin general del sistema, es posible que el nmero de


condiciones de observacin que puede establecer en un momento determinado
est restringido. Si intenta establecer una condicin de observacin mientras
se ha excedido el nmero mximo de observaciones activas en el sistema,
recibir un mensaje de error y no se establecer la condicin de observacin.

|
|
|
|
|

Nota: Si una expresin o variable pasa el lmite de pgina, se utilizan dos


observaciones internamente para supervisar las ubicaciones de almacenamiento. Por este motivo, el nmero mximo de expresiones o
variables que se puede observar de forma simultnea en todo el
sistema oscila entre 128 y 256.

|
|
|
|
|

Las condiciones de observacin slo pueden establecerse cuando un programa se detiene mientras realiza una depuracin y la expresin o variable
que debe observarse se encuentra en su mbito. En caso contrario, se emitir
un mensaje de error cuando se solicite una observacin, indicando que no
existe la entrada de la pila de llamadas correspondiente.

|
|
|
|

Una vez se haya establecido la condicin, la direccin de una ubicacin de


almacenamiento bajo observacin no cambia. Por consiguiente, si una observacin est definida en una ubicacin temporal, podran producirse falsos
avisos de condiciones de observacin.

|
|
|

Un ejemplo de este caso lo tenemos en el almacenamiento automtico de un


procedimiento ILE COBOL/400, que puede volverse a utilizar una vez finaliza
el procedimiento.

|
|
|
|

Es posible que se registre una condicin de observacin aunque la variable


observada ya no se encuentre en su mbito. No debe asumir que una variable
est en su mbito simplemente porque se ha comunicado una condicin de
observacin.

|
|
|
|
|

Dos ubicaciones de observacin que se encuentren en un mismo trabajo no


deben solaparse de ninguna forma. Dos ubicaciones de observacin que se
encuentren en trabajos distintos no deben empezar en la misma direccin de
almacenamiento; en caso contrario, se permite el solapamiento. Si se violan
estas restricciones, se emite un mensaje de error.

|
|
|

Nota: Las modificaciones realizadas en una ubicacin de almacenamiento


que est bajo observacin no se tienen en cuenta a menos que se realicen por el trabajo que ha establecido la condicin de observacin.

|
|
|
|

Despus de ejecutar el mandato de forma satisfactoria, la aplicacin se detiene


si algn programa de la sesin modifica el contenido de la ubicacin de almacenamiento que se observa, en cuyo caso aparece la pantalla Visualizar fuente
del mdulo.

|
|
|
|
|

Si el programa presenta datos de depuracin y la vista de texto fuente est


disponible, sta se visualizar. Se resalta la lnea fuente de la instruccin que
estaba a punto de ser ejecutada cuando se detect el cambio de contenido de
la ubicacin de almacenamiento. Un mensaje indica la condicin de observacin que se ha cumplido.

Captulo 7. Depuracin de un programa

131

|
|

Si no es posible depurar el programa, el rea de texto de la pantalla aparecer


en blanco.

|
|
|

Los programas seleccionables se aaden de forma automtica a la sesin de


depuracin si son responsables de la condicin por la que se detuvo la observacin.

|
|

Cuando existen varias condiciones de observacin en la misma instruccin de


un programa, slo se informa de la primera.

|
|
|

Tambin es posible establecer condiciones de observacin al utilizar trabajos


de servicio para realizar la depuracin, es decir, al depurar un trabajo desde
otro.

|
|
|
|

Establecimiento de condiciones de observacin


Antes de establecer una condicin de observacin, el programa debe detenerse en
una depuracin y la expresin o variable que desea observar debe estar en su
mbito.

|
|
|

Para observar una variable global, debe asegurarse de que el programa


COBOL en el que est definida la variable est activo antes de establecer la
condicin de observacin.

|
|

Para observar una variable local, debe entrar en el programa COBOL en el


que est definida la variable antes de establecer la condicin de observacin.

Puede establecer una condicin de observacin utilizando:

|
|

F18 (Trabajar con observacin) para mostrar la pantalla Trabajar con observacin desde la que puede borrar o visualizar las observaciones

|
|
|

F17 (Variable de observacin) para establecer una condicin de observacin


para una variable (un elemento de datos de COBOL) en la que se encuentra
situado el cursor

|
|

El mandato de depuracin WATCH, tanto si tiene parmetros especificados


como si no.

Utilizacin del mandato WATCH

|
|
|

Si utiliza el mandato WATCH, ste debe entrarse como un nico mandato; no se


permite ningn otro mandato de depuracin en la misma lnea de mandatos.

|
|

Para acceder a la pantalla Trabajar con observacin que se muestra a continuacin, teclee:

WATCH

en la lnea de mandatos, sin especificar ningn parmetro.

132

ILE COBOL/400 Gua del Programador

|
|

|
|
|

Sistema:

Opc
-

Nm
1

Variable
KOUNT

Direccin
8956F274

|
|
|
|
|

Figura 38. Ejemplo de una pantalla Trabajar con observacin

Longitud
4

Final
Mandato
===>____________________________________________________________________
F3=Salir F4=Solicitud F5=Renovar
F9=Recuperar F12=Cancelar

|
|
|
|
|

La pantalla Trabajar con observacin muestra todas las observaciones que


actualmente estn activas en la sesin de depuracin. Puede eliminar o
visualizar observaciones desde esta pantalla. Si selecciona la Opcin 5
(Visualizar), la ventana Visualizar observacin que aparece a continuacin
muestra informacin acerca de la observacin que est activa actualmente.

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Figura 39. Ejemplo de una ventana Visualizar observacin

DEBUGGER

Teclee opciones, pulse Intro.


4=Borrar 5=Visualizar

|
|

|
|

Trabajar con observacin

Trabajar con observacin


..........................................................
:
Visualizar observacin
:
:
:
: Nm. observacin..: 1
:
: Direccin.........: 8956F274
:
: Longitud..........: 4
:
: Nm. coincidencias:
:
:
:
: mbito cuando se defini el programa:
:
:
Programa/biblioteca/tipo:
PAYROLL
ABC
\PGM
:
:
:
:
Mdulo...:
PAYROLL
:
:
Procedim.:
main
:
:
Variable.:
KOUNT
:
:
:
: F12=Cancelar
:
:
:
..........................................................

DEBUGGER

Final
Mandato
===>____________________________________________________________________
F3=Salir F4=Solicitud F5=Renovar
F9=Recuperar F12=Cancelar

Para especificar una variable o expresin que debe observarse, realice una de
las siguientes acciones:
Para especificar una variable que desea observar, teclee:

Captulo 7. Depuracin de un programa

133

WATCH SALARY

|
|

en la lnea de mandatos de depuracin, en la que SALARY es una


variable.

|
|

Este mandato solicita el establecimiento de un punto de interrupcin si


cambia el valor actual de SALARY.

|
|

El mbito de las variables de expresin en una observacin viene definido


por el mandato QUAL que se haya emitido ms recientemente.

Para especificar una expresin que debe observarse:

WATCH %SUBSTR(A 1 3)

|
|
|

donde A forma parte de una expresin de subserie. Para obtener ms


informacin sobre subserie consulte el apartado Visualizacin de una subserie de una variable de serie de caracteres en la pgina 143.

|
|

Nota: En ILE COBOL/400, slo es posible observar expresiones relacionadas


con subseries o elementos de matriz.

|
|

Para establecer una condicin de observacin y especificar una longitud de


observacin, teclee:

WATCH expresin : longitud-observacin

en una lnea de mandatos de depuracin.

|
|
|
|

Cada observacin le permite supervisar y comparar 128 bytes de almacenamiento contiguo como mximo. Si se sobrepasa la longitud mxima de 128
bytes, no se establecer la condicin de observacin y el depurador emitir un
mensaje de error.

|
|
|
|
|

Por omisin, la longitud del tipo de expresin coincide con la longitud de la


comparacin de observacin. El parmetro longitud-observacin altera este
valor por omisin temporalmente. Determina el nmero de bytes de una expresin que deben compararse para determinar si se ha producido algn cambio
en un valor.

|
|
|
|
|

Por ejemplo, si se especifica un entero binario de 4 bytes como la variable, sin


incluir el parmetro longitud-observacin, la longitud de la comparacin ser de
cuatro bytes. Sin embargo, si se especifica el parmetro longitud-observacin,
ste altera la longitud de la expresin temporalmente y determina la longitud
de la observacin.

|
|
|

Visualizacin de observaciones activas


Para visualizar una lista de todas las observaciones activas del sistema y mostrar
el trabajo que las ha establecido, teclee:

DSPDBGWCH

|
|

en una lnea de mandatos CL. El mandato visualiza la pantalla Visualizar observaciones de depuracin que se muestra a continuacin.

134

ILE COBOL/400 Gua del Programador

|
|

|
|
|
|
|
|
|

-----------Trabajo-----------MYJOBNAME1 MYUSERPRF1 123456


JOB456789 PRF456789 222222
JOB456789 PRF456789 222222
JOB
PROFILE
333333
SOMEJOB
SOMEPROFIL 444444

|
|

Visualizar observaciones de depuracin


NM
1
1
2
14
3

LONGITUD
4
4
4
4
4

Sistema: DEBUGGER
DIRECCIN
8956F274
984943845A2C32
9849438456AA
468957839AF9
549834848242A

Final
Pulse Intro para continuar

|
|

Figura 40. Ejemplo de una pantalla Visualizar observaciones de depuracin

|
|

Nota: Esta pantalla no muestra las condiciones de observacin establecidas por


el sistema.

|
|
|
|
|

F3=Salir

F5=Renovar

F12=Cancelar

Eliminacin de las condiciones de observacin


Es posible eliminar observaciones de las formas siguientes:
El mandato CLEAR utilizado con la palabra clave WATCH termina una o todas
las observaciones de forma selectiva. Por ejemplo, para borrar la observacin
identificada mediante nmero-observacin, teclee:

CLEAR WATCH nmero-observacin

|
|

El nmero de observacin puede obtenerse de la pantalla Trabajar con observaciones.

Para borrar todas las observaciones de la sesin, teclee:

CLEAR WATCH ALL

en una lnea de mandatos de depuracin.

|
|
|
|
|

Nota: Aunque el mandato CLEAR PGM elimina todos los puntos de interrupcin del programa que contiene el mdulo que se visualiza, su efecto
sobre las observaciones es nulo. Es preciso utilizar la palabra clave
WATCH de forma explcita con el mandato CLEAR para eliminar las
condiciones de observacin.

|
|
|
|
|
|

El mandato de CL Finalizar depuracin (ENDDBG) elimina las observaciones


establecidas en el trabajo local o en un trabajo de servicio.
Nota: En situaciones anormales, ENDDBG se llama de forma automtica para
asegurar la eliminacin de todas las observaciones afectadas.
La carga del programa inicial (IPL) del sistema AS/400 elimina todas las condiciones de observacin del sistema.

Captulo 7. Depuracin de un programa

135

Ejemplo del establecimiento de una condicin de observacin

|
|

En este ejemplo, se muestra una variable kount del programa MYLIB/PAYROLL.


Para establecer la condicin de observacin, teclee:

WATCH kount

|
|

en una lnea de depuracin, aceptando el valor por omisin de longitudobservacin.

|
|
|

Si el valor de la variable kount cambia posteriormente, la aplicacin se detiene y se


muestra la pantalla Visualizar fuente del mdulo, tal como se ilustra en la
Figura 41.

*
*

Visualizar fuente del mdulo

*
*
*
*
*
*
*
*
*
*

Programa:
42
43
44
45
46
47
48
49
5

*
*
*

51
52
53

STEP-3.
DISPLAY WORK-RECORD.
WRITE RECORD-1 FROM WORK-RECORD.

*
*
*
*
*
*
*
*
*

54
55

STEP-4.
PERFORM STEP-2 THRU STEP-3 UNTIL KOUNT IS =

Figura 41. Ejemplo de una pantalla Visualizar fuente del mdulo

PAYROLL
Biblioteca:
MYLIB
Mdulo: PAYROLL
\ LOS 3 PRRAFOS SIGUIENTES CREAN INTERNAMENTE LOS \
\ REGISTROS QUE DEBEN INCLUIRSE EN EL ARCHIVO, LOS \
\ GRABA EN DISCO Y LOS VISUALIZA
\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
STEP-2.
ADD 1 TO KOUNT, NUMBR.
MOVE ALPHA (KOUNT) TO NAME-FIELD.
MOVE DEPEND (KOUNT) TO NO-OF-DEPENDENTS.
MOVE NUMBR
TO RECORD-NO.

Ms....
Depuracin . . . ______________________________________________________
________________________________________________________________________
F3=Fin programa F6=Aadir/Borrar punto int. F1=Paso F11=Visualizar variable
F12=Reanudar
F17=Observar variable F18=Trabajar observacin F24=Ms teclas
Nmero observacin 1 en la lnea 55, variable: KOUNT

|
|
|

Se resalta el nmero de lnea de la instruccin en la que se detect la modificacin en la variable de observacin. Suele tratarse de la primera lnea ejecutable despus de la instruccin que ha modificado la variable.

Un mensaje indica que se ha cumplido la condicin de observacin.

|
|
|

Nota: Si no est disponible una vista de texto, aparece una pantalla Visualizar
fuente del mdulo en blanco y en el rea de mensajes de aparece este
mismo mensaje.

No es posible aadir los siguientes programas al entorno de depuracin ILE:

1. Programas ILE sin datos de depuracin

|
|

2. Programas OPM que slo contienen datos de depuracin que no son


fuente

3. Programas OPM sin datos de depuracin

|
|

En los dos primeros casos, se muestra el nmero de la instruccin en el que


se ha detenido. En el tercer caso, se muestra la instruccin MI en la que se

136

ILE COBOL/400 Gua del Programador

|
|
|
*
*

ha detenido. La informacin se visualiza al final de una pantalla Visualizar


fuente del mdulo en blanco, tal como se muestra a continuacin. En lugar del
nmero de lnea, se proporciona la instruccin MI o el nmero de sta.

Programa:

Visualizar fuente del mdulo


PAYROLL

Biblioteca:

MYLIB

Mdulo:

PAYROLL

(Fuente no disponible).

*
*
*
*
*
*
*

Figura 42. Ejemplo de una ventana Visualizar fuente del mdulo

Final
Depuracin . . . ______________________________________________________
________________________________________________________________________
F3=Fin programa F6=Aadir/Borrar punto int. F1= Paso F11= Visualizar variable
F12=Reanudar
F17=Observar variable F18=Trabajar observacin F24=Ms teclas
Nmero observacin 1 en la instruccin 18, variable: KOUNT

Ejecucin de un objeto de programa o procedimiento ILE despus de


un punto de interrupcin
Despus de encontrar un punto de interrupcin, se puede reanudar la ejecucin de
un objeto de programa o procedimiento ILE de dos maneras:
reanude la ejecucin del objeto de programa o procedimiento ILE en la
siguiente instruccin despus del punto de interrupcin y detngala en el
siguiente punto de interrupcin o cuando el programa finalice.
ejecute por pasos un nmero de instrucciones determinado despus del punto
de interrupcin y detenga el objeto de programa de nuevo.

Reanudacin de un objeto de programa o procedimiento ILE


Despus de encontrar un punto de interrupcin, se puede reanudar un objeto de
programa o procedimiento ILE pulsando F12 (Reanudar) en la pantalla Visualizar
fuente del mdulo. El objeto de programa o procedimiento ILE empieza a ejecutarse en la siguiente instruccin del objeto de mdulo donde el programa se
detuvo. El objeto de programa o procedimiento ILE se detendr de nuevo en el
siguiente punto de interrupcin o cuando el objeto de programa finalice.

Captulo 7. Depuracin de un programa

137

Ejecucin por pasos del objeto de programa o procedimiento ILE


Despus de encontrar un punto de interrupcin, puede ejecutar un nmero especificado de instrucciones de un objeto de programa o procedimiento ILE, detener el
programa de nuevo y volver a la pantalla Visualizar fuente del mdulo. El objeto
de programa o procedimiento ILE empieza a ejecutarse en la siguiente instruccin
del objeto de mdulo donde el programa se detuvo.
|
|

Es posible ejecutar un programa OPM por pasos si ste tiene disponibles datos de
depuracin y si la sesin de depuracin acepta la depuracin de programas OPM.
Se puede ejecutar por pasos un objeto de programa o procedimiento ILE
utilizando:
F10 (Paso) o F22 (Ejecutar pasos internos) en la pantalla Visualizar fuente del
mdulo
El mandato de depuracin STEP
El mtodo ms sencillo para ejecutar por pasos un objeto de programa o procedimiento ILE es utilizar F10 (Paso) o F22 (Ejecutar pasos internos) en la pantalla
Visualizar fuente del mdulo. Cuando se pulsa F10 (Paso) o F22 (Ejecutar pasos
internos), se ejecuta la siguiente instruccin del objeto de mdulo que aparece en
la pantalla Visualizar fuente del mdulo y vuelve a detenerse el objeto de programa
o procedimiento ILE. Si hay varias instrucciones en la lnea en la que se pulsa
F10 (Paso) o F22 (Ejecutar pasos internos), todas las instrucciones de esta lnea
se ejecutan y el objeto de programa o procedimiento ILE se detiene en la siguiente
instruccin de la siguiente lnea.
Nota: No se puede especificar el nmero de instrucciones para ejecutar por
pasos cuando se utiliza F10 (Paso) o F22 (Ejecutar pasos internos). Al
pulsar F10 (Paso) o F22 (Ejecutar pasos internos) se efecta un slo paso.
Otro mtodo para ejecutar por pasos un programa o procedimiento ILE consiste en
utilizar el mandato de depuracin STEP. El mandato de depuracin STEP permite
ejecutar ms de una instruccin en un solo paso. El nmero por omisin de instrucciones que se ejecutan utilizando el mandato de depuracin STEP, es una.
Para ejecutar por pasos un objeto de programa o procedimiento ILE utilizando el
mandato de depuracin STEP, teclee:
STEP nmero-de-instrucciones
en la lnea de mandatos de depuracin. Nmero-de-instrucciones es el nmero de
instrucciones que desea ejecutar en el paso siguiente antes de que la aplicacin se
detenga de nuevo. Por ejemplo, si teclea
STEP 5
en la lnea de mandatos, se ejecutan las cinco instrucciones siguientes del objeto
de programa o procedimiento ILE, el objeto de programa o procedimiento ILE se
detiene de nuevo y aparece la pantalla Visualizar fuente del mdulo.
Cuando se encuentra una instruccin CALL a otro objeto de programa o procedimiento ILE en una sesin de depuracin, es posible:
Ejecutar pasos externos del objeto de programa o procedimiento ILE llamado o
Ejecutar pasos internos del objeto de programa o procedimiento ILE llamado.
Si selecciona ejecutar pasos externos del objeto de programa o procedimiento
ILE llamado, la instruccin CALL y el objeto de programa llamado se ejecutan

138

ILE COBOL/400 Gua del Programador

como un nico paso. El objeto de programa o procedimiento ILE llamado se


ejecuta hasta el final antes de que el objeto de programa o procedimiento ILE de
llamada se detenga en el siguiente paso. La ejecucin por pasos externos es la
modalidad de paso por omisin.
Si selecciona ejecutar pasos internos en el objeto de programa o procedimiento
ILE llamado, cada una de las instrucciones del objeto de programa o procedimiento
ILE llamado se ejecuta como un nico paso. Si el siguiente paso en el que el
objeto de programa o procedimiento ILE en ejecucin debe detenerse se encuentra
dentro del objeto de programa o procedimiento ILE llamado, el objeto de programa
o procedimiento ILE llamado se detiene en este punto y el objeto de programa o
procedimiento ILE llamado aparece en la pantalla Visualizar fuente del mdulo.

Ejecucin por pasos externos de objetos de programa o


procedimientos ILE
Es posible ejecutar objetos de programa o procedimiento ILE por pasos internos
utilizando:
F10 (Paso) en la pantalla Visualizar fuente del mdulo
El mandato de depuracin STEP OVER
Puede utilizar F10 (Paso) en la pantalla Visualizar fuente del mdulo para ejecutar
un objeto de programa o procedimiento ILE llamado en una sesin de depuracin
por pasos internos. Si la siguiente instruccin que va a ejecutarse es una instruccin CALL a otro objeto de programa o procedimiento ILE, al pulsar F10 (Paso) se
ejecutar el objeto de programa o procedimiento ILE llamado hasta el final antes
de que el objeto de programa o procedimiento ILE se detenga de nuevo.
De modo alternativo, puede utilizar el mandato de depuracin STEP OVER para
ejecutar un objeto de programa o procedimiento ILE llamado en una sesin de
depuracin por pasos externos. Para utilizar el mandato de depuracin STEP
OVER, teclee:
STEP nmero-de-instrucciones OVER
en la lnea de mandatos de depuracin. Nmero-de-instrucciones es el nmero de
instrucciones que desea ejecutar en el paso siguiente antes de que la aplicacin se
detenga de nuevo. Si una de las instrucciones que se ejecuta contiene una instruccin CALL para otro objeto de programa o procedimiento ILE, el depurador fuente
ILE ejecutar el objeto de programa o procedimiento ILE llamado por pasos
externos.

Ejecucin por pasos internos de objetos de programa o


procedimientos ILE
Es posible ejecutar un objeto de programa o procedimientos ILE por pasos
externos utilizando:
F22 (Ejecutar pasos internos) en la pantalla Visualizar fuente del mdulo
El mandato de depuracin STEP INTO
Puede utilizar F22 (Ejecutar pasos internos) en la pantalla Visualizar fuente del
mdulo para ejecutar un objeto de programa o procedimiento ILE llamado en una
sesin de depuracin por pasos internos. Si la siguiente instruccin que va a ejecutarse es una instruccin CALL para otro objeto de programa o procedimiento
ILE, al pulsar F22 (Ejecutar pasos internos) se ejecutar la primera instruccin ejecutable del objeto de programa o procedimiento ILE llamado. El objeto de proCaptulo 7. Depuracin de un programa

139

grama o procedimiento ILE llamado aparecer en la pantalla Visualizar fuente del


mdulo.
|
|
|
|
|
|
|

Nota: Un objeto de programa o procedimiento ILE llamado debe tener datos de


depuracin asociados para que pueda aparecer en la pantalla Visualizar
fuente del mdulo. Un programa OPM llamado aparecer en la pantalla
Visualizar mdulo del fuente si el depurador fuente ILE est configurado
para que acepte programas OPM y el programa OPM presenta datos de
depuracin. (Un programa OPM presentar datos de depuracin si se ha
compilado con OPTION(*SRCDBG) u OPTION(*LSTDBG)).
De modo alternativo, puede utilizar el mandato de depuracin STEP INTO para
ejecutar un objeto de programa o procedimiento ILE llamado en una sesin de
depuracin por pasos externos. Para utilizar el mandato de depuracin STEP
INTO, teclee:
STEP nmero-de-instrucciones INTO
en la lnea de mandatos de depuracin. Nmero-de-instrucciones es el nmero de
instrucciones del objeto de programa o procedimiento ILE que desea ejecutar en el
paso siguiente antes de que el objeto de programa o procedimiento ILE se detenga
de nuevo. Si una de las instrucciones que se ejecuta contiene una instruccin
CALL para otro objeto de programa o procedimiento ILE, el depurador ejecutar el
objeto de programa o procedimiento ILE llamado por pasos internos. Cada una de
las instrucciones del objeto de programa o procedimiento ILE llamado se contar
en los pasos. Si los pasos finalizan en el objeto de programa o procedimiento ILE
llamado, el objeto de programa o procedimiento ILE llamado aparecer en la pantalla Visualizar fuente del mdulo. Por ejemplo, si teclea
STEP 5 INTO
en la lnea de mandatos de depuracin, se ejecutan las cinco instrucciones
siguientes del objeto de programa o procedimiento ILE. Si la tercera instruccin es
una instruccin CALL para otro objeto de programa o procedimiento ILE, se ejecutan dos instrucciones del objeto de programa o procedimiento ILE de llamada y
las tres primeras instrucciones del objeto de programa o procedimiento ILE
llamado.

Visualizacin de variables, expresiones, registros, elementos de grupo


y matrices
Puede visualizar los valores de variables, expresiones, elementos de grupo registros y matrices utilizando:
F11 (Visualizar variable) en la pantalla Visualizar fuente del mdulo
El mandato de depuracin EVAL
El mbito de las variables que se utilizan en el mandato EVAL se define utilizando
el mandato QUAL.
Nota: El depurador fuente ILE no da soporte a los registros especiales ILE
COBOL/400.As, los valores que contienen los registros especiales ILE
COBOL/400 no pueden visualizarse en una sesin de depuracin. El depurador fuente ILE no puede evaluar el resultado de un identificador de
funcin COBOL.

|
|
|

140

ILE COBOL/400 Gua del Programador

Visualizacin de variables y expresiones


El mtodo ms simple para visualizar el valor de una variable es utilizar F11
(Visualizar variable) en la pantalla Visualizar fuente del mdulo. Para visualizar
una variable utilizando F11 (Visualizar variable), site el cursor en la variable que
desea visualizar y pulse F11 (Visualizar variable).El valor actual de la variable
aparece en la lnea de mensajes situada en la parte inferior de la pantalla
Visualizar fuente del mdulo.Por ejemplo, si desea ver el valor de la variable
COUNTER en la lnea 221 del objeto de mdulo que aparece en la Figura 43,
site el cursor sobre la variable y pulse F11 (Visualizar variable). El valor actual de
la variable COUNTER aparece en la lnea de mensajes.

Visualizar fuente del mdulo


Programa:
213
214
215
216
217
218
219
22
221
222
223
224
225
226
227

TEST

Biblioteca:

TESTLIB

Mdulo:

SAMPMDF

PROCEDURE-SECTION SECTION.
FILL-TERMINAL-LIST.
READ TERMINAL-FILE RECORD INTO LIST-OF-TERMINALS(COUNTER)
AT END
SET END-OF-TERMINAL-LIST TO TRUE
SUBTRACT 1 FROM COUNTER
MOVE COUNTER TO NO-OF-TERMINALS.
ADD 1 TO COUNTER.

ACQUIRE-AND-INVITE-TERMINALS.
ACQUIRE LIST-OF-TERMINALS(COUNTER) FOR MULTIPLE FILE.
WRITE MULTIPLE-REC
FORMAT IS "SIGNON"
TERMINAL IS LIST-OF-TERMINALS(COUNTER).
Ms....
Depuracin... ________________________________________________________________
_______________________________________________________________________________
F3=Fin programa F6=Aadir/Borrar punto int. F1= Paso F11= Visualizar variable
F12=Reanudar
F13=Trabajar con punt. int. mdulo
F24=Ms teclas
COUNTER = 89.

Figura 43. Visualizacin de una variable utilizando F11 (Visualizar variable)

Cuando se evalan registros, elementos de grupo o matrices, el mensaje que se


devuelve al pulsar F11 (Visualizar variable) puede ocupar varias lneas. Los mensajes que ocupan varias lneas aparecen en la pantalla Evaluar expresin que
muestra el texto completo del mensaje. Cuando haya terminado de visualizar el
mensaje de la pantalla Evaluar expresin, pulse Intro para volver a la pantalla
Visualizar fuente del mdulo.
Tambin puede utilizar el mandato de depuracin EVAL para determinar el valor de
una variable.Primero, utilice el mandato de depuracin QUAL para identificar el
nmero de lnea de la variable que desea mostrar. Desde esta lnea se aplican las
normas para determinar el mbito de una variable.
Nota: La posicin de QUAL por omisin es la lnea actual.
Para visualizar el valor de una variable por omisin utilizando el mandato de depuracin EVAL, teclee:
EVAL nombre-variable
en la lnea de mandatos de depuracin.Nombre-variable es el nombre de la
variable que desea visualizar. El valor de la variable aparece en la lnea de men-

Captulo 7. Depuracin de un programa

141

sajes si el mandato de depuracin EVAL se entra desde la pantalla Visualizar


fuente del mdulo y el valor puede mostrarse en una nica lnea. De lo contrario, el
valor de la variable aparece en la pantalla Evaluar expresin.
Por ejemplo, para visualizar el valor de la variable COUNTER en la lnea 221 del
objeto de mdulo que aparece en la Figura 43 en la pgina 141, teclee:
EVAL COUNTER
para visualizar la variable COUNTER. La lnea de mensajes de la pantalla
Visualizar fuente del mdulo muestra COUNTER = 89 como en la Figura 44.

Visualizar fuente del mdulo


Programa:
213
214
215
216
217
218
219
22
221
222
223
224
225
226
227

TEST

Biblioteca:

TESTLIB

Mdulo:

SAMPMDF

PROCEDURE-SECTION SECTION.
FILL-TERMINAL-LIST.
READ TERMINAL-FILE RECORD INTO LIST-OF-TERMINALS(COUNTER)
AT END
SET END-OF-TERMINAL-LIST TO TRUE
SUBTRACT 1 FROM COUNTER
MOVE COUNTER TO NO-OF-TERMINALS.
ADD 1 TO COUNTER.

ACQUIRE-AND-INVITE-TERMINALS.
ACQUIRE LIST-OF-TERMINALS(COUNTER) FOR MULTIPLE FILE.
WRITE MULTIPLE-REC
FORMAT IS "SIGNON"
TERMINAL IS LIST-OF-TERMINALS(COUNTER).
Ms....
Depuracin... ________________________________________________________________
_______________________________________________________________________________
F3=Fin programa F6=Aadir/Borrar punto int. F1= Paso F11= Visualizar variable
F12=Reanudar
F13=Trabajar con punt. int. mdulo
F24=Ms teclas
COUNTER = 89.

Figura 44. Visualizacin de una variable utilizando el mandato de depuracin EVAL

Visualizacin de variables como valores hexadecimales


Se puede utilizar el mandato de depuracin EVAL para visualizar el valor de una
variable en formato hexadecimal.Para visualizar una variable en formato
hexadecimal, teclee:
EVAL nombre-variable: x 32
en la lnea de mandatos de depuracin.Nombre-variable es el nombre de la
variable que desea visualizar en formato hexadecimal.'x' especifica que la variable
va a visualizarse en formato hexadecimal y '32' indica que se va a visualizar un
vuelco de 32 bytes despus del principio de la variable. El valor hexadecimal de la
variable aparece en la pantalla Evaluar expresin como se indica en la Figura 45
en la pgina 143. Si no se especifica la longitud a continuacin de 'x', el tamao
de la variable se utiliza como longitud. Siempre se visualiza un mnimo de 16
bytes. Si la longitud de la variable es inferior a 16 bytes, el espacio restante se
rellena con ceros hasta que se alcanza el lmite de 16 bytes.

142

ILE COBOL/400 Gua del Programador

Evaluar expresin
Expresiones de depuracin anteriores
> BREAK 221
> EVAL COUNTER
COUNTER = 89.
> EVAL B : X 32

F8F9
1

- 89..............
- ................

Final
Depuracin.
_________________________________________________________________
_______________________________________________________________________________
F3=Salir F9=Recuperar F12=Cancelar F19=Izq.
F2=Derecha F21=Mandato entrada

Figura 45. Visualizacin del valor hexadecimal de una variable utilizando el mandato de
depuracin EVAL

Visualizacin de una subserie de una variable de serie de


caracteres
El depurador fuente ILE no da soporte a la sintaxis de modificacin de referencias
ILE COBOL/400. En su lugar, puede utilizar el operador %SUBSTR con el mandato
EVAL para visualizar una subserie de una variable de serie de caracteres. El operador %SUBSTR obtiene la subserie de una variable de serie de caracteres a partir
de una posicin del elemento inicial para determinado nmero de elementos.
Nota: El depurador fuente ILE no da soporte a la sintaxis de modificacin de referencias de COBOL para el manejo de subseries. Es necesario utilizar el
operador %SUBSTR del depurador fuente ILE para manejar subseries.
La sintaxis del operador %SUBSTR es la siguiente:
%SUBSTR(identificador elemento-inicial nmero-de-elementos)
Donde, identificador debe ser una variable de serie de caracteres y elemento-inicial
y nmero-de-elementos deben ser literales enteros positivos distintos de cero.
Identificador puede ser una variable indexada, subindexada o calificada. Elementoinicial + nmero-de-elementos - 1 no puede ser superior al nmero total de elementos de identificador.
Por ejemplo, puede obtener los 10 primeros elementos de una serie de caracteres
de 20 elementos utilizando %SUBSTR(char20 1 10). Puede obtener los ltimos 5
elementos de una serie de caracteres de 8 elementos utilizando %SUBSTR(char8
4 5). En el caso de un elemento DBCS o DBCS editado, elemento hace referencia
a un carcter DBCS (es decir, un carcter de dos bytes).
Se puede utilizar un operador %SUBSTR para asignar una subserie de una
variable de serie de caracteres a otra variable o subserie de una variable. Los
Captulo 7. Depuracin de un programa

143

datos se copian de la variable fuente a la variable destino de izquierda a


derecha.Cuando la variable fuente o la variable destino o ambas son subseries, el
operando es la parte de subserie de la variable de serie de caracteres, no la
variable de serie de caracteres entera. Cuando los tamaos de las variables
fuente y destino son diferentes, se aplican las normas de relleno y truncamiento
siguientes:
Si la longitud de la variable fuente es mayor que la variable de destino, la serie
de caracteres se trunca en la longitud de la variable destino.
Si la longitud de la variable fuente es menor que longitud de la variable de
destino, la serie de caracteres se justifica por la izquierda en la variable de
destino y las posiciones restantes se rellenan con blancos.
Si la longitud de la variable fuente es igual a la longitud de la variable destino,
los dos valores sern copias exactas despus de la asignacin.
Nota: Es posible utilizar una subserie de la misma variable de serie de caracteres
en las variables fuente y destino; sin embargo, si alguna parte de la serie
destino se solapa a la serie fuente, se producir un error.
La Figura 46 muestra ejemplos de cmo puede utilizarse el operador %SUBSTR.

Evaluar expresin

Expresiones de depuracin anteriores


> EVAL CHAR1
CHAR1 = '1CHARLONG'
> EVAL CHARA
CHARA = 'A'
> EVAL CHARA = %SUBSTR(CHAR1 3 5)
CHARA = 'C'
> EVAL %SUBSTR(CHAR1 1 2) = 'A'
CHAR1 = 'A CHARLONG'
> EVAL %SUBSTR(CHAR1 1 2) = 'XYZ'
CHAR1 = 'XYCHARLONG'
> EVAL %SUBSTR(CHAR1 7 4) = 'ABCD'
CHAR1 = 'XYCHARABCD'
> EVAL %SUBSTR(CHAR1 1 2) = %SUBSTR(CHAR1 7 4)
CHAR1 = 'ABCHARABCD'
Final
Depuracin.
_________________________________________________________________
_______________________________________________________________________________
F3=Salir F9=Recuperar F12=Cancelar F19=Izq.
F2=Derecha F21=Mandato entrada

Figura 46. Visualizacin de una subserie de una variable de serie de caracteres utilizando
el operador %SUBSTR

Visualizacin de registros, elementos de grupo y matrices


Puede utilizar el mandato de depuracin EVAL para visualizar estructuras, registros
y matrices. A menos que el registro, elemento de grupo o matriz se encuentre en
la lnea actual, primero debe calificar el registro, elemento de grupo o matriz que
desea visualizar identificando el nmero de lnea donde se encuentra utilizando el
mandato de depuracin QUAL. Consulte el apartado Visualizacin de variables y
expresiones en la pgina 141 para obtener una descripcin de cmo utilizar el

144

ILE COBOL/400 Gua del Programador

mandato de depuracin QUAL. Para visualizar un registro, elemento de grupo o


matriz, teclee:
EVAL nombre-datos
en la lnea de mandatos de depuracin.Nombre-datos es el nombre del registro,
elemento de grupo o matriz que desea visualizar.El valor del registro, elemento de
grupo o matriz aparecer en la pantalla Evaluar expresin.
El ejemplo siguiente muestra cmo visualizar el contenido de un elemento de
grupo ILE COBOL/400.
1

ACCOUNT.
2 NUMBER
2 FULL-NAME.
3 LAST-NAME
3 FIRST-NAME

PIC 9(5).
PIC X(2).
PIC X(1).

Para visualizar el contenido del elemento de grupo ACCOUNT, teclee:


EVAL ACCOUNT
en la lnea de mandatos de depuracin. El contenido actual del elemento de grupo
ACCOUNT aparecer en la pantalla Evaluar expresin como se muestra en la
Figura 47.
Para visualizar el contenido de un nico componente del elemento de grupo
ACCOUNT, como, por ejemplo, el elemento FIRST-NAME OF FULL-NAME OF
ACCOUNT, teclee:
EVAL FIRST-NAME OF FULL-NAME OF ACCOUNT
en la lnea de mandatos de depuracin. El contenido actual del elemento
FIRST-NAME OF FULL-NAME OF ACCOUNT aparecer en la pantalla Evaluar
expresin como se muestra en la Figura 47. Pulse Intro para volver a la pantalla
Visualizar fuente del mdulo. Tambin puede visualizar elementos utilizando
nombres calificados parcialmente siempre que el nombre est suficientemente calificado para resolver posibles ambigedades de nombre.

Evaluar expresin
Expresiones de depuracin anteriores
> EVAL ACCOUNT
NUMBER OF ACCOUNT = 12345
LAST-NAME OF FULL-NAME OF ACCOUNT = 'SMITH
FIRST-NAME OF FULL-NAME OF ACCOUNT = 'JOHN
> EVAL FIRST-NAME OF FULL-NAME OF ACCOUNT
FIRST-NAME OF FULL-NAME OF ACCOUNT = 'JOHN

'
'
'

Figura 47. Visualizacin de un elemento de grupo utilizando el mandato de depuracin


EVAL

El ejemplo siguiente muestra cmo visualizar el contenido de una matriz ILE


COBOL/400.
5

PIC X(5) OCCURS 5 TIMES.

Para visualizar el contenido de la matriz A, teclee:


EVAL A
Captulo 7. Depuracin de un programa

145

en la lnea de mandatos de depuracin. El contenido actual de la matriz A aparecer en la pantalla Evaluar expresin como se muestra en la Figura 48 en la
pgina 146.
Para visualizar el contenido de un rango de elementos de la matriz A, teclee:
EVAL A(2..4)
en la lnea de mandatos de depuracin. El contenido actual de los elementos A(2),
A(3) y A(4) de la matriz A aparecer en la pantalla Evaluar expresin como se
muestra en la Figura 48.
Para visualizar el contenido de un nico elemento de la matriz A como, por
ejemplo, el elemento A(4), teclee:
EVAL A(4)
en la lnea de mandatos de depuracin. El contenido actual del elemento A(4)
aparecer en la pantalla Evaluar expresin como se muestra en la Figura 48.
Pulse F3 (Salir) para volver a la pantalla Visualizar fuente del mdulo.
Nota: El valor de subndice especificado en el mandato de depuracin EVAL slo
puede ser un valor numrico.Por ejemplo, A(4) se acepta pero A(I+2) o
A(2*3) no se aceptan.

Evaluar expresin

Expresiones de depuracin anteriores


> EVAL
A(1)
A(2)
A(3)
A(4)
A(5)
> EVAL
A(2)
A(3)
A(4)
> EVAL
A(4)

A
= 'ONE '
= 'TWO '
= 'THREE'
= 'FOUR '
= 'FIVE '
A(2..4)
= 'TWO '
= 'THREE'
= 'FOUR '
A(4)
= 'FOUR '

Figura 48. Visualizacin de una matriz utilizando el mandato de depuracin EVAL

Modificacin del valor de las variables


Puede modificar el valor de las variables utilizando el mandato EVAL con un operador de asignacin. A menos que la variable est en la lnea actual, primero debe
calificar la variable que desea modificar identificando el nmero de lnea donde se
encuentra utilizando el mandato de depuracin QUAL. Consulte el apartado
Visualizacin de variables y expresiones en la pgina 141 para obtener una descripcin de cmo utilizar el mandato de depuracin QUAL. Para cambiar el valor
de la variable, teclee:
EVAL nombre-variable = valor

146

ILE COBOL/400 Gua del Programador

en la lnea de mandatos de depuracin.Nombre-variable es el nombre de la


variable que desea modificar y valor es un identificador, literal o valor constante
que desea asignar a la variable nombre-variable. Por ejemplo,
EVAL COUNTER=3
modifica el valor de COUNTER a 3 y muestra
COUNTER=3 = 3
en la lnea de mensajes de la pantalla Visualizar fuente del mdulo.

Puede utilizar el mandato de depuracin EVAL para asignar datos numricos, alfabticos, alfanumricos, DBCS, booleanos y de coma flotante a las variables
siempre que stos coincidan con la definicin de la variable.
Nota: Si el valor que se asigna a la variable utilizando el mandato de depuracin
EVAL no coincide con la definicin de la variable, se emitir un mensaje de
aviso y el valor de la variable no se modificar.
Si el valor que se asigna a la variable es una serie de caracteres, se
aplican las normas siguientes:
La longitud de la serie de caracteres que se asigna a la variable debe
ser igual a la longitud de la variable.
Si la longitud de la serie de caracteres que se asigna a la variable es
menor que la longitud de la variable, la serie de caracteres se justifica
por la izquierda y las posiciones restantes se rellenan con blancos.
Si la longitud de la serie de caracteres que se asigna a la variable es
mayor que la longitud de la variable, la serie de caracteres se trunca
por la longitud de la variable.
A continuacin se presentan algunos ejemplos que muestran cmo se pueden
asignar distintos tipos de datos a variables utilizando el mandato de depuracin
EVAL.
EVAL COUNTER=3

(COUNTER es una variable numrica)

EVAL COUNTER=LIMIT

(LIMIT es otra variable numrica)

EVAL END-OF-FILE='1'

(END-OF-FILE es una variable booleana)

EVAL BOUNDARY=x'C9'

(BOUNDARY es una variable alfanumrica)

EVAL COMPUTER-NAME='AS4'

(COMPUTER-NAME es una variable alfanumrica)

EVAL INITIALS=%SUBSTR(NAME 17 3)

(INITIALS y NAME son variables alfanumricas)

EVAL DBCS-NAME= G'OEKIK2K3OF'

(K1K2K3 son caracteres DBCS)

|
|
|

EVAL LONG-FLOAT(3) = -3.E-3


(LONG-FLOAT es una matriz de 3 elementos de datos de coma flotante
de precisin doble - COMP-2)

|
|
|

EVAL SHORT-FLOAT = 1
(SHORT-FLOAT es un elemento de datos de coma flotante de precisin
simple - COMP-1)

Captulo 7. Depuracin de un programa

147

Nota: No se puede asignar una constante figurativa a una variable utilizando el


mandato de depuracin EVAL. El mandato de depuracin EVAL no da
soporte a las constantes figurativas.

Equivalencia entre un nombre y una variable, expresin o mandato


Se puede utilizar el mandato de depuracin EQUATE para equiparar un nombre
con una variable, expresin o mandato de depuracin para su uso abreviado. Se
puede utilizar un nombre solo o incluido en otra expresin. Si lo utiliza incluido en
otra expresin, el valor del nombre se determina antes de evaluar la expresin.
Estos nombres permanecen activos hasta que la sesin de depuracin finaliza o el
nombre se elimina.
Para equiparar un nombre con una variable, expresin o mandato de depuracin,
teclee:
EQUATE nombre-abreviado definicin
en la lnea de mandatos de depuracin.Nombre-abreviado es el nombre que desea
equiparar con una variable, expresin o mandato de depuracin y definicin es la
variable, expresin o mandato de depuracin que est equiparando al nombre.
Por ejemplo, para definir un nombre abreviado llamado DC que visualiza el contenido de la variable COUNTER, teclee:
EQUATE DC EVAL COUNTER
en la lnea de mandatos de depuracin.Ahora, siempre que se teclee DC en la
lnea de mandatos de depuracin, se llevar a cabo el mandato EVAL COUNTER.
El nmero mximo de caracteres que pueden teclearse en un mandato EQUATE
es 144. Si no se proporciona ninguna definicin y un mandato EQUATE anterior
defina el nombre, se eliminar la definicin anterior. Si el nombre no se defini
anteriormente, aparece un mensaje de error.
Para ver los nombres que se han definido con el mandato de depuracin EQUATE
para una sesin de depuracin, teclee:
DISPLAY EQUATE
en la lnea de mandatos de depuracin. Aparecer una lista de los nombres
activos en la pantalla Evaluar expresin.

Soporte de idioma para el depurador fuente ILE


Cuando se trabaja con Soporte de idioma para el depurador fuente ILE, se aplican
las condiciones siguientes:
Cuando se visualiza una vista en la pantalla Visualizar fuente del mdulo, el
depurador fuente ILE convierte todos los datos al CCSID del trabajo de depuracin.
Cuando se asignan literales a variables, el depurador fuente ILE no realiza la
conversin del CCSID en literales entrecomillados (por ejemplo, 'abc').
Adems, los literales entrecomillados son sensibles a las maysculas y minsculas.

148

ILE COBOL/400 Gua del Programador

Cuando se trabaja con la vista fuente, si el CCSID del archivo fuente del que se
obtiene la vista fuente es diferente del CCSID del objeto de mdulo, es posible que
el depurador fuente ILE no reconozca un identificador ILE COBOL/400 que contenga caracteres variantes.
Si se da alguna de estas condiciones:
El CCSID del trabajo de depuracin es 290, 930 5026 (Katakana japons)
La pgina de cdigos de la descripcin de dispositivos que se utiliza para la
depuracin es 290, 930 5026 (Katakana japons)
los mandatos de depuracin, las funciones y los literales hexadecimales deberan
entrarse en letras maysculas. Por ejemplo,
BREAK 16 WHEN var=X'A1B2'
EVAL var:X
Sin embargo, cuando se depuran objetos de mdulo ILE COBOL/400, ILE
RPG/400 o ILE CL, el depurador fuente convierte los nombres de identificador de
los mandatos de depuracin a maysculas y, por lo tanto, pueden visualizarse de
forma diferente.

Captulo 7. Depuracin de un programa

149

150

ILE COBOL/400 Gua del Programador

ILE COBOL/400 Consideraciones sobre la programacin

Copyright IBM Corp. 1994, 1996

151

152

ILE COBOL/400 Gua del Programador

Captulo 8. Trabajo con elementos de datos

|
|
|

Este captulo explica cmo se puede trabajar con datos numricos ILE COBOL/400
y cmo se pueden representar los datos numricos y las operaciones aritmticas
de la forma ms eficaz. Los temas son los siguientes:

Visualizacin general de los nmeros en ILE COBOL/400 (clusula PICTURE)

Representacin computacional de datos (clusula USAGE) en la pgina 155

Conversiones de formato de datos en la pgina 158

Representacin y proceso del signo en la pgina 159

|
|

Comprobacin de datos incompatibles (prueba de clase numrica) en la


pgina 160

Realizacin de operaciones aritmticas en la pgina 161

Aritmtica de coma fija frente a aritmtica de coma flotante en la pgina 169

Cul es el problema con el ao 2000? en la pgina 171

|
|
|
|
|
|
|
|
|
|

Visualizacin general de los nmeros en ILE COBOL/400 (clusula


PICTURE)
En general, puede visualizar los datos numricos de ILE COBOL/400 de forma
similar a los datos de una serie de caracteres: como series de posiciones de
dgitos decimales. Sin embargo, los elementos numricos cuentan con propiedades
especiales como por ejemplo un signo aritmtico.

Definicin de elementos numricos


Para definir elementos numricos, debe utilizar el carcter 9 en la descripcin de
datos, que representa los dgitos decimales del nmero, en vez de utilizar una x
como para los elementos alfanumricos:

|
|

5
5

|
|
|

Puede codificar un mximo de 18 dgitos en la clusula PICTURE, adems de


otros caracteres que tienen una importancia especial. La s del siguiente ejemplo
otorga un signo al valor.

|
|
|
|
|
|
|
|

El campo puede contener un valor positivo o negativo. La V indica la posicin de


una coma decimal implcita. La S y la V no se cuentan en el tamao del elemento y tampoco requieren posiciones de almacenamiento adicionales, a no ser
que el elemento se codifique como USAGE DISPLAY y contenga la clusula SIGN
IS SEPARATE. Una excepcin la constituyen los datos de coma flotante internos
(COMP-1 y COMP-2), para los que no existe ninguna clusula PICTURE. Por
ejemplo, un elemento de datos de coma flotante interno se define de la siguiente
forma:

|
|

Para obtener informacin sobre cmo controlar la manera en que el compilador


maneja los elementos de datos de coma flotante, consulte la descripcin de

COUNT-X
CUSTOMER-NAME

PRICE

PIC 9(4)
PIC X(2)

PIC S99V99.

GROMMET-SIZE-DEVIATION

Copyright IBM Corp. 1994, 1996

VALUE 25.
VALUE "Gonzlez".

USAGE COMP-1

VALUE 2.35E-5

153

|
|
|
|
|

*FLOAT y *NOFLOAT en la pgina 38 y en el apartado Utilizacin de la instruccin PROCESS para especificar opciones de compilador en la pgina 47.

Posicin de signo separada (para mejorar la portabilidad)


Si piensa transferir el programa o datos a una mquina distinta, es posible que
desee codificar el signo como un dgito separado en el almacenamiento:

|
|
|

Esto le asegura que la convencin que utiliza la mquina para almacenar el signo
no separado no provocar resultados extraos al utilizar una mquina con una convencin distinta.

|
|
|
|
|

PRICE

PIC S99V9

SIGN IS LEADING, SEPARATE.

Posiciones adicionales para smbolos visualizables (edicin numrica)


Tambin puede definir elementos numricos utilizando ciertos smbolos de edicin
(como por ejemplo comas decimales, puntos y el signo de dlar) para facilitar la
lectura y la comprensin de los datos cuando stos se visualicen o impriman en un
informe. Por ejemplo:

|
|
|
|
|
|
|

5 PRICE
PIC
9(5)V99.
5 EDITED-PRICE
PIC $ZZ.ZZ9V99.
.
.
.
MOVE PRICE to EDITED-PRICE
DISPLAY EDITED-PRICE

|
|

Si el contenido de PRICE es 0150099 (que representa el valor 1.500,99), se


visualizara $ 1.5,99 despus de ejecutar el cdigo.

|
|
|
|
|

Cmo utilizar elementos de edicin numrica como nmeros

|
|
|

Los elementos de edicin numrica puede convertirse en elementos numricos y


de edicin numrica. En el siguiente ejemplo, se des-edita el elemento de edicin
numrica y se traslada su valor al elemento de datos numrico.

|
|

MOVE EDITED-PRICE to PRICE.


DISPLAY PRICE.

|
|
|

Si estas dos instrucciones siguieran de forma inmediata a las sentencias que aparecan en el ejemplo anterior, PRICE se visualizara como 0150099, representando
el valor 1.500,99.

|
|

Para obtener informacin ms completa sobre las descripciones de datos para


datos numricos, consulte el manual ILE COBOL/400 Reference.

Los elementos de edicin numrica estn clasificados como elementos de datos


alfanumricos, no como nmeros. Por consiguiente, no pueden funcionar como
operandos en expresiones aritmticas ni en las instrucciones ADD, SUBTRACT,
MULTIPLY, DIVIDE y COMPUTE.

154

ILE COBOL/400 Gua del Programador

|
|
|
|
|

Representacin computacional de datos (clusula USAGE)


Es posible controlar la forma en que el sistema almacena los elementos de datos
numricos internamente codificando la clusula USAGE en las entradas de descripcin de datos. Los datos numricos que utilice en el programa tendrn unos de
los formatos disponibles con ILE COBOL/400:

Decimal externo (USAGE DISPLAY)

Decimal interno (USAGE PACKED-DECIMAL o COMP-3)

Binario (USAGE BINARY o COMP-4)

Coma flotante externo (USAGE DISPLAY)

Coma flotante interno (USAGE COMP-1, USAGE COMP-2)

|
|

COMP-4 es sinnimo de BINARY; COMP y COMP-3 son sinnimos de


PACKED-DECIMAL.

|
|
|
|

Con independencia de la clusula USAGE que utilice para controlar la representacin interna del valor que el sistema genera, puede utilizar las convenciones y el
valor decimal aplicables a la clusula PICTURE en la clusula VALUE, con excepcin de los datos de coma flotante.

|
|
|
|
|

Elementos decimales externos (USAGE DISPLAY)


Al codificar USAGE DISPLAY u omitir la clusula USAGE, cada posicin (o byte)
de almacenamiento contiene un dgito decimal. Esto corresponde al formato utilizado para imprimir o visualizar la salida e indica que los elementos se almacenan
de forma visualizable.

|
|
|
|
|
|

Para qu sirven los elementos USAGE DISPLAY

|
|
|
|
|

Cundo debera utilizarlos para operaciones aritmticas

|
|
|
|
|

El sistema tiene que convertir de forma automtica los nmeros visualizables a la


representacin interna del valor numrico antes de que stos puedan utilizarse en
operaciones aritmticas. Por este motivo, a menudo resulta ms eficaz definir los
elementos de datos como elementos computacionales desde el principio y no como
elementos DISPLAY. Por ejemplo:

5 COUNT-X

Los elementos decimales externos estn pensado principalmente para la recepcin


y envo de nmeros entre programas y archivos, terminales e impresoras. Sin
embargo, tambin es posible utilizar elementos de decimales externos como
operandos y receptores durante el proceso aritmtico del programa y a menudo es
conveniente programar de esta forma.

Si el programa realiza operaciones aritmticas intensas con frecuencia y la eficacia


constituye una prioridad, es posible que desee utilizar uno de los tipos de datos
numricos computacionales de ILE COBOL/400 para los elementos de datos que
utilice en aritmtica.

PIC S9V9(5)

USAGE COMP

VALUE 3.14159.

Captulo 8. Trabajo con elementos de datos

155

|
|
|
|
|
|
|
|

Elementos decimales internos (USAGE PACKED-DECIMAL o COMP-3)


El formato decimal empaquetado ocupa 1 byte de almacenamiento cada dos posiciones decimales de la descripcin PICTURE, con excepcin del byte situado ms
a la derecha, que slo contiene 1 dgito y el signo. Para utilizar este formato de
forma ms eficaz, debe codificar un nmero impar de dgitos en la descripcin
PICTURE, de forma que se utilice completamente el byte situado ms a la
izquierda. En operaciones aritmticas, el formato decimal empaquetado se trata
como un nmero de coma fija.

Razones para la utilizacin de decimales empaquetados

|
|

Formato decimal empaquetado:

|
|

Requiere un almacenamiento inferior por dgito que el necesario con el formato


DISPLAY.

Es ms adecuado para la alineacin decimal que el formato binario.

|
|

Las conversiones a y desde el formato DISPLAY son ms sencillas que con el


formato binario.

Es apropiado para contener operandos o resultados aritmticos.

|
|
|
|
|

Elementos binarios (USAGE BINARY o COMP-4)


El formato binario ocupa 2, 4 u 8 bytes de almacenamiento y en aritmtica se trata
como un nmero de coma fija en el que el bit ms a la izquierda es el signo operativo. Para datos binarios con inversin de byte, el bit del signo es el bit situado
ms a la izquierda del byte situado ms a la derecha.

|
|
|
|

Cunto almacenamiento ocupa BINARY

|
|

Los elementos binarios son adecuados para subndices y para las posiciones de
inicio y de longitud de modificaciones de referencia.

|
|
|
|

Sin embargo, el formato BINARY no es adecuado para la alineacin decimal, por lo


que ILE COBOL/400 convierte los nmero BINARY de expresiones aritmticas a
formato PACKED DECIMAL. Por consiguiente, es preferible utilizar el formato
PACKED DECIMAL para las expresiones aritmticas.

|
|
|
|

Tambin es preferible la utilizacin del formato PACKED DECIMAL frenta a


BINARY al convertir nmeros a formato de visualizacin. La conversin de un
nmero de formato BINARY a formato DISPLAY es ms difcil que su conversin
de formato PACKED DECIMAL a formato DISPLAY.

|
|
|
|
|

Truncamiento de datos binarios (Opcin del compilador


*STDTRUNC)

Un descripcin PICTURE con un nmero que no sobrepase los 4 dgitos decimales


ocupa 2 bytes; si tiene entre 5 y 9 dgitos decimales ocupa 4 bytes y entre 10 y 18
dgitos decimales ocupa 8 bytes.

Utilice las opciones del compilador *STDTRUNC y *NOSTDTRUNC (descritas en la


pgina 35) para indicar la forma en que deben truncarse los datos de tipo BINARY
y COMP-4.

156

ILE COBOL/400 Gua del Programador

|
|
|
|
|
|

Elementos de coma flotante interno (USAGE COMP-1 y COMP-2)


COMP-1 hace referencia al formato breve de coma flotante (de precisin simple) y
COMP-2 hace referencia al formato largo de coma flotante (de precisin doble),
que ocupan, respectivamente, 4 y 8 bytes de almacenamiento. El bit situado ms a
la izquierda contiene el signo; los siete bits que aparecen a continuacin contienen
el exponente y los 3 7 bytes restantes contienen la mantisa.

|
|

En OS/400, los elementos de datos COMP-1 y COMP-2 se representan en formato


IEEE.

|
|
|

No se permite una clusula PICTURE en la descripcin de datos de elementos de


datos de coma flotante aunque s que puede proporcionar un valor inicial utilizando
un literal de coma flotante en la clusula VALUE:

5 COMPUTE-RESULT

|
|
|

Las caractersticas de las conversiones entre formato de coma flotante y otros


formatos numricos se discuten en el apartado Conversiones de formato de datos
en la pgina 158.

|
|

El formato de coma flotante est indicado para operandos y resultados aritmticos


y para conseguir un alto nivel de precisin en operaciones aritmticas.

|
|

Para obtener informacin ms completa sobre las descripciones de datos para


datos numricos, consulte el manual ILE COBOL/400 Reference.

|
|
|
|
|

USAGE COMP-1

VALUE 6.23E-24.

Elementos de coma flotante externos (USAGE DISPLAY)


Los nmeros visualizables codificados en formato de coma flotante se denominan
elementos de coma flotante externos. Igual que ocurre con los elementos decimales externos, puede definir elementos de coma flotante externos de forma explcita con USAGE DISPLAY o de forma implcita omitiendo la clusula USAGE.

|
|
|

En el siguiente ejemplo, COMPUTE-RESULT est definido de forma explcita como un


elemento de coma flotante externo. Cada byte de almacenamiento contiene un
carcter (excepto V).

5 COMPUTE-RESULT

|
|
|
|
|
|

La clusula VALUE no se permite en la descripcin de datos para elementos de


coma flotante externos. Adems, el signo menos () no significa que la mantisa y
el exponente siempre sern nmeros negativos, sino que, cuando se visualice el
signo, ste aparecer como un blanco para los valores positivos y como un menos
para los negativos. Si se ha utilizado un signo ms (+), los valores positivos se
visualizarn con un signo ms y los negativos con un signo menos.

|
|
|
|
|

Igual que ocurre con nmeros decimales externos, los nmeros de coma flotante
externos deben convertirse (de forma automtica, mediante el compilador) a una
representacin interna del valor numrico antes de que se pueda operar con los
mismos. Los nmeros de coma flotante externos siempre se convierten a formato
largo de coma decimal interno.

PIC -9V(9)E-99.

Captulo 8. Trabajo con elementos de datos

157

Conversiones de formato de datos

|
|

Cuando el cdigo del programa implica la interaccin de elementos con formatos


de datos distintos, el compilador convierte estos elementos:

De forma temporal, para comparaciones y operaciones aritmticas

|
|

De forma permanente, para la asignacin al receptor en una instruccin MOVE


o COMPUTE.

|
|
|
|
|
|
|
|
|

Significado de una conversin

|
|
|
|
|

Una conversin requiere su tiempo

|
|
|
|

Conversiones y precisin

Una conversin es en realidad el traslado de un valor de un elemento de datos a


otro. El compilador realiza las conversiones necesarias durante la ejecucin de las
operaciones aritmticas y comparaciones siguiendo las mismas reglas que se utilizan para instrucciones MOVE y COMPUTE. Las reglas para realizar traslados se
definen en ILE COBOL/400 Reference. Cuando es posible, el compilador realiza un
traslado que le permita conservar el valor numrico en lugar de realizar un traslado
directo dgito a dgito. (Para obtener ms informacin acerca del truncamiento y la
prdida de dgitos significativos, consulte el apartado Conversiones y precisin.)

Una conversin suele necesitar almacenamiento y tiempo de proceso adicional, ya


que es preciso el traslado de los datos a un rea de trabajo interna y la conversin
de stos antes de realizar la operacin. Es posible que el resultado deba volverse
a trasladar al rea de trabajo para realizar una nueva conversin.

Las conversiones entre formatos de datos de coma fija (decimales externos, decimales empaquetados y binarios) se completan sin prdida de precisin siempre
que los campos de destino puedan contener todos los dgitos del operando fuente.

|
|
|
|
|
|
|
|
|

Conversiones en las que es posible la prdida de datos

|
|
|

Al realizar una conversin de formato de coma fija a formato de coma flotante


externo, los nmeros de coma fija en base 10 se convierten al sistema numrico
que se utiliza internamente, base 16.

|
|

Aunque el compilador convierte el formato breve en largo para las comparaciones,


se utilizan ceros para rellenar el nmero breve.

|
|
|

Cuando se traslada un elemento de datos USAGE COMP-1 a un elemento de


datos de coma fija que tiene 6 o ms dgitos, el elemento de datos de coma fija
slo recibir 6 dgitos significativos y el resto de dgitos ser cero.

Es posible una prdida de precisin en las conversiones entre formatos de datos


de coma fija y formatos de datos de coma flotante (coma flotante breve, coma flotante largo y coma flotante interno). Estas conversiones se producen durante las
evaluaciones aritmticas que tienen operandos de coma fija y de coma flotante.
(Como tanto los elementos de coma fija como los elementos de coma flotante
externos tienen caractersticas decimales, la referencia a elementos de coma fija
en los siguientes ejemplos tambin incluyen elementos de coma flotante externos a
menos que se especifique lo contrario).

158

ILE COBOL/400 Gua del Programador

|
|
|

Conversiones que mantienen la precisin: Si se traslada un elemento de datos de


coma fija que tiene 6 dgitos o menos a un elemento de datos USAGE COMP-1 y
se devuelve al elemento de datos de coma fija, se recupera el valor original.

|
|
|

Si se traslada un elemento de datos USAGE COMP-1 a un elemento de datos de


coma fija que tiene 6 o ms dgitos y se devuelve al elemento de datos USAGE
COMP-1, se recupera el valor original.

|
|
|

Si se traslada un elemento de datos de coma fija que tiene 15 dgitos o menos a


un elemento de datos USAGE COMP-2 y ste se devuelve al elemento de datos
de coma fija, se recupera el valor original.

|
|
|

Si se traslada un elemento de datos USAGE COMP-2 a un elemento de datos de


coma fija (no de coma flotante externo) que tiene 18 dgitos y se devuelve al elemento de datos USAGE COMP-2, se recupera el valor original.

|
|
|
|
|

Conversiones que producen redondeo: Si se traslada un elemento de datos


USAGE COMP-1, un elemento de datos USAGE COMP-2, un elemento de datos
de coma flotante externo o un literal de coma flotante a un elemento de datos de
coma fija, se produce el redondeo de la posicin de orden inferior del elemento de
datos destino.

|
|
|

Si se traslada un elemento de datos USAGE COMP-2 a un elemento de datos


USAGE COMP-1, se produce el redondeo de la posicin de orden inferior del elemento de datos destino.

|
|
|
|
|

Si se traslada un elemento de datos de coma fija a un elemento de datos de coma


flotante externo en el que el PICTURE del elemento de datos de coma fija contiene
ms posiciones de dgito que el PICTURE del elemento de datos de coma flotante,
se produce el redondeo de la posicin de orden inferior del elemento de datos
destino.

Representacin y proceso del signo

|
|

La representacin del signo afecta al proceso y a la interaccin de los datos numricos.

|
|
|

Dado X'sd', donde s es la representacin del signo y d representa el dgito, las


representaciones de signo vlidas para decimales externos (USAGE DISPLAY que
no tengan la clusula SIGN IS SEPARATE) son las siguientes:

Positivas: A, C, E y F.

Negativas: B y D.

|
|

Los signos que se generan de forma interna son F para un valor positivo o sin
signo y D para uno negativo.

|
|
|

Dado X'ds', donde d representa el dgito y s es la representacin del signo, las


representaciones de signo vlidas para datos decimales internos (USAGE
PACKED-DECIMAL) ILE COBOL/400 son las siguientes:

Positivas: A, C, E y F.

Negativas: B y D.
Captulo 8. Trabajo con elementos de datos

159

|
|
|
|
|
|
|

Los signos que se generan de forma interna son F para un valor positivo o sin
signo y D para uno negativo.

Con la opcin *CHGPOSSN del compilador


La opcin *CHGPOSSGN del compilador ILE COBOL/400 afecta al proceso del
signo para datos decimales internos y decimales externos. *CHGPOSSGN no tiene
ningn efecto en datos binario ni en datos de coma flotante. Para obtener ms
informacin, lea la discusin sobre *CHGPOSSN en la pgina 38.

|
|

Los signos positivos generados por el compilador, que normalmente son F, se convierten en C en MOVE y en instrucciones aritmticas, as como la clusula VALUE.

|
|
|

La opcin *CHGPOSSGN del compilador es menos eficaz que la opcin por


omisin, *NOCHGPOSSGN, y debera utilizarse exclusivamente al compartir datos
con MVS, VM y otros sistemas que tengan signos preferentes distintos.

Comprobacin de datos incompatibles (prueba de clase numrica)

|
|
|
|
|
|

El compilador asume que los valores que el usuario proporciona para un elemento
de datos son vlidos para la clusula PICTURE y USAGE del elemento y asigna el
valor proporcionado sin comprobar su validez. Cuando se proporciona a un elemento un valor incompatible con su descripcin de datos, las referencias a este
elemento en la PROCEDURE DIVISION no estarn definidas y ser imposible
prever el resultado.

|
|
|
|
|
|
|

Con frecuencia, los valores se pasan al programa y se asignan a elementos que


tienen descripciones de datos incompatibles para estos valores. Por ejemplo, es
posible que los datos no numricos se muevan o pasen a un campo del programa
que est definido como un nmero sin signo. En cualquier caso, los datos que
contienen estos campos no son vlidos. Asegrese de que el contenido del elemento de datos sea el adecuado para las clusulas PICTURE y USAGE antes de
utilizar el elemento de datos en otros pasos del proceso.

|
|
|

Cmo realizar una prueba de clase numrica


Es posible utilizar una prueba de clase numrica para realizar la validacin de los
datos. Por ejemplo:

|
|
|
|
|
|
|
|
|
|

LINKAGE SECTION.
1
COUNT-X
PIC 999.
.
.
.
PROCEDURE DIVISION USING COUNT-X.
IF COUNT-X IS NUMERIC THEN DISPLAY "LOS DATOS SON VLIDOS".
.
.
.

|
|
|
|
|
|

La prueba de clase numrica verifica el contenido de un elemento de datos en


relacin a un conjunto de valores vlidos para PICTURE y USAGE del elemento de
datos concreto. Por ejemplo, en un elemento decimal empaquetado se comprobaran los valores hexadecimales del X'0' al X'9' de las posiciones de los dgitos
y se verificara la existencia de un valor de signo vlido en la posicin de signo
(tanto si la posicin del signo est separada como si no).

160

ILE COBOL/400 Gua del Programador

Realizacin de operaciones aritmticas

|
|

Al ejecutar ILE COBOL/400 con ILE obtendr diversas funciones para realizar operaciones aritmticas:

|
|

Instrucciones ADD, SUBTRACT, MULTIPLY, DIVIDE y COMPUTE (tratadas en


el apartado COMPUTE y otras instrucciones aritmticas).

|
|

Expresiones aritmticas (tratadas en el apartado Expresiones aritmticas en


la pgina 162).

|
|

Funciones intrnsecas (tratadas en el apartado Funciones numricas


intrnsecas en la pgina 162).

Servicios que pueden llamarse desde ILE (API)

|
|
|

ILE proporciona varios grupos de API de enlace, disponibles para todos los
compiladores ILE. Las API matemticas incluyen CEE4SIFAC para calcular
factores y CEESDCOS para calcular cosenos.

|
|

Para obtener ms informacin acerca de las API de enlace que es posible utilizar, consulte el manual AS/400 System API Reference.

|
|
|
|
|
|
|
|

Para obtener informacin ms detallada sobre la sintaxis y la utilizacin de


contructores de lenguaje ILE COBOL/400, consulte el manual ILE COBOL/400
Reference.

COMPUTE y otras instrucciones aritmticas


La prctica general consiste en utilizar la instruccin COMPUTE para la mayor
parte de evaluaciones aritmticas en lugar de usar las instrucciones ADD,
SUBTRACT, MULTIPLY y DIVIDE. Ello se debe a que a menudo es posible codificar una instruccin COMPUTE en lugar de varias instrucciones individuales.

|
|

La instruccin COMPUTE asigna el resultado de una expresin aritmtica a un elemento de datos:

COMPUTE Z = A + B / C \\ D - E

o a varios elementos de datos:

COMPUTE X Y Z = A + B / C \\ D - E

|
|
|

Cundo utilizar otras instrucciones aritmticas

ADD 1 TO INCREMENTO.

en vez de:

COMPUTE INCREMENTO = INCREMENTO + 1.

O bien,

SUBTRACT DBITO FROM SALDO.

en vez de:

COMPUTE SALDO = SALDO - DBITO.

O bien,

Es posible que algunas operaciones aritmticas sean ms intuitivas si utiliza otras


instrucciones aritmticas. Por ejemplo:

Captulo 8. Trabajo con elementos de datos

161

ADD 1 TO INCREMENTO-1, INCREMENTO-2, INCREMENTO-3.

en vez de:

|
|
|

COMPUTE INCREMENTO-1 = INCREMENTO-1 + 1


COMPUTE INCREMENTO-2 = INCREMENTO-2 + 1
COMPUTE INCREMENTO-3 = INCREMENTO-3 + 1

|
|

Tambin es posible que prefiera utilizar la instruccin DIVIDE (con la expresin


REMAINDER) para realizar divisiones en las que desee procesar un resto.

|
|
|
|
|
|
|

Expresiones aritmticas
En los ejemplo de COMPUTE que se han mostrado, todo lo que aparecera a la
derecha del signo igual representa una expresin aritmtica. Las expresiones aritmticas pueden estar formadas por un solo literal numrico, un solo elemento de
datos numrico o una sola referencia de funcin intrnseca. Tambin pueden estar
formadas por varios de los anteriores conectados mediante operadores aritmticos.
Estos operadores se evalan en orden jerrquico.

Tabla 7. Evaluacin de operadores

|
|

Operador

Significado

Orden de evaluacin

Unario + o

Signo algebraico

Primero

**

Potenciacin

Segundo

/o*

Divisin o multiplicacin

Tercero

Binario + o

Adicin o sustraccin

ltimo

|
|
|
|
|

Los operadores del mismo nivel se evalan de izquierda a derecha; sin embargo,
puede utilizar parntesis con estos operadores para modificar el orden de evaluacin. Las expresiones entre parntesis se evalan antes que todos los operadores individuales. Los parntesis, tanto si son necesarios como si no, facilitan la
lectura del programa.

|
|
|
|

Adems de utilizar expresiones aritmticas en las instrucciones COMPUTE,


tambin puede utilizarlas en otros lugares en los que se permitan elementos de
datos numricos. Por ejemplo, puede utilizar expresiones aritmticas a modo de
comparandos en condiciones de relacin:

IF (A + B) > (C - D + 5) THEN...

|
|
|

Funciones numricas intrnsecas


Las funciones intrnsecas pueden devolver un valor alfanumrico, DBCS o numrico.

Las funciones numricas intrnsecas:

Devuelven un valor numrico con signo.

Se consideran elementos de datos numricos temporales.

|
|

Slo pueden utilizarse en aquellos lugares en los que la sintaxis del lenguaje
permite expresiones.

|
|

Pueden ahorrarle tiempo, ya que no necesita proporcionar la operacin aritmtica para los diferentes tipos de clculo comunes que realizan estas funciones.

162

ILE COBOL/400 Gua del Programador

|
|
|

Para obtener ms informacin acerca de la aplicacin prctica de las funciones


intrnsecas, consulte el apartado Ejemplos de funciones intrnsecas en la
pgina 164.

|
|

Tipos de funciones numricas

|
|

Enteras

|
|

Coma flotante
Aquellas que devuelven un valor de coma flotante largo.

|
|

Las funciones numricas disponibles en ILE COBOL/400 en cada una de estas


categoras se enumeran en la Tabla 8.

Tabla 8. Tipos de datos que manejan las funciones numricas

Enteros

De coma flotante

DATE-OF-INTEGER

ACOS

DATE-TO-YYYYMMDD

ASIN

DAY-OF-INTEGER

ATAN

DAY-TO-YYYYDDD

COS

INTEGER-OF-DATE

LOG

INTEGER-OF-DAY

LOG10

LENGTH

MEAN

ORD

MEDIAN

|*

YEAR-TO-YYYY

NUMVAL

Las funciones numricas se clasifican en las siguientes categoras:


Aquellas que devuelven un entero.

NUMVAL-C

SIN

SQRT

TAN

|
|
|
|

Anidamiento de funciones y expresiones aritmticas

|
|
|

Como las funciones numricas y las expresiones aritmticas tienen una categora
sintctica similar, tambin es posible anidar una expresin aritmtica como argumento de una funcin numrica:

COMPUTE X = FUNCTION MEAN (A, B, C / D).

|
|

En este ejemplo, slo existen tres argumentos de funcin: A, B y la expresin aritmtica (C / D).

Es posible anidar las funciones numricas; es decir, se puede hacer referencia a


una funcin como argumento de otra. Una funcin anidada se evala con independencia de la funcin exterior.

Captulo 8. Trabajo con elementos de datos

163

|
|
|

Subndice ALL y registros especiales

|
|

Puede hacer referencia a todos los elementos de una matriz como argumentos de
una funcin utilizando el subndice ALL. Esta funcin se utiliza con tablas.

|
|

Los registros especiales de tipo entero se permiten como argumentos siempre que
es posible utilizar argumentos de enteros.

|
|
|

Ejemplos de funciones intrnsecas

Tabla 9. Tipos de operaciones aritmticas que manejan las funciones numricas

|
|

Manejo de
nmeros

Fecha/hora

Matemticas

Estadstica

|
|
|
|
|
|
|
|
|

LENGTH
NUMVAL
NUMVAL-C

CURRENT-DATE
DATE-OF-INTEGER
DAY-TO-YYYYDDD
DATE-TO-YYYYMMDD
DAY-OF-INTEGER
INTEGER-OF-DATE
INTEGER-OF-DAY
WHEN-COMPILED
YEAR-TO-YYYY

ACOS
ASIN
ATAN
COS
LOG
LOG10
SIN
SQRT
TAN

MEAN

|
|

Los siguientes ejemplos y las explicaciones que los acompaan muestran funciones intrnsecas de cada una de las categoras enumeradas en la tabla anterior.

|
|
|
|
|
|

Manejo general de nmeros: Suponga que desea hallar la media aritmtica de


tres precios (representados como elementos alfanumricos con signos de dlar),
colocar este valor en un campo numricos de un registro de salida y determinar la
longitud del registro de salida. Para conseguirlo, podra utilizar NUMVAL-C (una
funcin que devuelve el valor numrico de una serie alfanumrica) y la funcin
MEAN:

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

1
1
1
1
1

Otras dos funciones tiles de las funciones intrnsecas son el subndice ALL y los
registros especiales.

Puede utilizar funciones intrnsecas para realizar distintos tipos de operaciones aritmticas, tal como se indica en la Tabla 9.

X
PIC 9(2).
PRICE1
PIC X(8)
VALUE "$8".
PRICE2
PIC X(8)
VALUE "$4".
PRICE3
PIC X(8)
VALUE "$6".
OUTPUT-RECORD.
5 PRODUCT-NAME
PIC X(2).
5 PRODUCT-NUMBER PIC 9(9).
5 PRODUCT-PRICE PIC 9(6).
.
.
.
PROCEDURE DIVISION.
COMPUTE PRODUCT-PRICE =
FUNCTION MEAN (FUNCTION NUMVAL-C(PRICE1)
FUNCTION NUMVAL-C(PRICE2)
FUNCTION NUMVAL-C(PRICE3)).
COMPUTE X = FUNCTION LENGTH(OUTPUT-RECORD).

164

ILE COBOL/400 Gua del Programador

|
|

Adicionalmente, para asegurarse de que el contenido de PRODUCT-NAME aparezca en maysculas, podra utilizar la instruccin siguiente:

MOVE FUNCTION UPPER-CASE(PRODUCT-NAME) TO PRODUCT-NAME.

|
|
|
|
|
|

Fecha y hora: El ejemplo siguiente muestra cmo calcular una fecha a 90 das a
partir de la actual. Los ochos primeros caracteres que devuelve la funcin
CURRENT-DATE representan la fecha en formato de 4 dgitos para el ao, 2
dgitos para el mes y 2 dgitos para el da (YYYYMMDD). En el ejemplo, la fecha
se convierte a un valor entero. Entonces se aade 90 a este valor y el entero
vuelve a convertirse de nuevo a formato YYYYMMDD.

|
|
|
|
|
|
|
|
|
|

1 YYYYMMDD
PIC 9(8).
1 INTEGER-FORM
PIC S9(9).
.
.
.
MOVE FUNCTION CURRENT-DATE(1:8) TO YYYYMMDD.
COMPUTE INTEGER-FORM = FUNCTION INTEGER-OF-DATE(YYYYMMDD).
ADD 9 TO INTEGER-FORM.
COMPUTE YYYYMMDD = FUNCTION DATE-OF-INTEGER(INTEGER-FORM).
DISPLAY 'Fecha de vencimiento: ' YYYYMMDD.

|
|
|

Matemticas: La siguiente instruccin ILE COBOL/400 demuestra cmo anidar


funciones intrnsecas, cmo convertir argumentos en expresiones aritmticas y
cmo realizar de forma sencilla clculos matemticos que antes eran complejos:

COMPUTE Z = FUNCTION LOG(FUNCTION SQRT (2 \ X + 1))

|
|
|

Estadstica: Las funciones intrnsecas tambin facilitan el clculo de informacin


estadstica en datos. Supongamos que est analizando los impuestos de diferentes
ciudades y desea calcular media aritmtica.

|
|
|
|
|
|
|
|
|

O1
O1
O1
O1
O1

|
|
|

TAX-S
PIC 99V999 VALUE .45.
TAX-T
PIC 99V999 VALUE .2.
TAX-W
PIC 99V999 VALUE .35.
TAX-B
PIC 99V999 VALUE .3.
MEAN-TAX
PIC 99V999.
.
.
.
COMPUTE MEAN-TAX = FUNCTION MEAN(TAX-S TAX-W TAX-B)

Conversin de elementos de datos (funciones intrnsecas)


Las funciones intrnsecas permiten convertir elementos de datos de serie de caracteres a los siguientes tipos:

Maysculas o minsculas

Orden inverso

Nmeros

|
|

Adems de utilizar las funciones intrnsecas para convertir caracteres, tambin


puede utilizar la instruccin INSPECT.

Captulo 8. Trabajo con elementos de datos

165

|
|
|

Conversin a maysculas o minsculas (UPPER-CASE,


LOWER-CASE)

|
|
|
|
|
|
|
|
|
|

1 ITEM-1
PIC X(3)
VALUE "Hola a todos!".
1 ITEM-2
PIC X(3).
.
.
.
DISPLAY ITEM-1.
DISPLAY FUNCTION UPPER-CASE(ITEM-1).
DISPLAY FUNCTION LOWER-CASE(ITEM-1).
MOVE FUNCTION UPPER-CASE(ITEM-1) TO ITEM-2.
DISPLAY ITEM-2.

visualizara los siguientes mensajes en el terminal:

|
|
|
|

Hola
HOLA
hola
HOLA

|
|
|

Las instrucciones DISPLAY no modifican el contenido de ITEM-1 y slo afectan la


forma en que se visualizan las letras. Sin embargo, la instruccin MOVE hace que
las letras en maysculas se trasladen al contenido de ITEM-2.

|
|

Conversin a orden inverso (REVERSE)

El siguiente cdigo:

a
A
a
A

Todos!
TODOS!
todos!
TODOS!

El cdigo siguiente:

MOVE FUNCTION REVERSE(ORIG-CUST-NAME) TO ORIG-CUST-NAME.

|
|
|

invertira el orden de los caracteres de ORIG-CUST-NAME. Por ejemplo, si el


valor inicial fuese GONZALEZ el valor despus de realizar la instruccin sera
ZELAZNOG.

|
|
|
|
|

Conversin a nmeros (NUMVAL, NUMVAL-C)

|
|
|
|
|
|
|

1 R
PIC X(2)
VALUE "- 1234.5678".
1 S
PIC X(2)
VALUE "-$12.345,67CR".
1 TOTAL
USAGE IS COMP-2.
.
.
.
COMPUTE TOTAL = FUNCTION NUMVAL(R) + FUNCTION NUMVAL-C(S).

|
|
|
|
|
|

La diferencia entre NUMVAL y NUMVAL-C es que NUMVAL-C se utiliza cuando el


argumento incluye un smbolo de moneda o un punto, como se muestra en el
ejemplo. Tambin puede colocar un signo algebraico al principio o al final, y ste
se procesar. Los argumentos no deben sobrepasar los 18 dgitos (sin contar los
smbolos de edicin). En el manual ILE COBOL/400 Reference hallar las reglas
sintcticas aplicables.

|
|
|

Nota: NUMVAL y NUMVAL-C devuelven un valor de coma flotante largo (de precisin doble). Por consiguiente, cualquier referencia a una de estas funciones representa una referencia a un elemento de datos numrico.

Las funciones NUMVAL y NUMVAL-C convierten series de caracteres a nmeros.


Utilice estas funciones para convertir a formato numrico elementos de datos
alfanumricos que contienen nmeros de representacin de caracteres de formato
libre y procesarlos de forma numrica. Por ejemplo:

166

ILE COBOL/400 Gua del Programador

|
|
|
|
|
|
|
|
|

Por qu utilizar NUMVAL y NUMVAL-C?: Si utiliza NUMVAL o NUMVAL-C, no


es necesario que declare datos numricos en un formato fijo estticamente, ni que
declare los datos de entrada de una forma concreta. Por ejemplo, para este
cdigo:
1 X
PIC S999V99
.
.
.
ACCEPT X FROM CONSOLE.

LEADING SIGN IS SEPARATE.

|
|

El usuario de la aplicacin debe entrar los nmero de la misma forma en que se


hayan definido en la clusula PICTURE. Por ejemplo:

|
|

+1,23
-3,

Sin embargo, si utilizara la funcin NUMVAL, podra codificar lo siguiente:

|
|
|
|
|
|
|

1 A
PIC X(1).
1 B
PIC S999V99.
.
.
.
ACCEPT A FROM CONSOLE.
COMPUTE B = FUNCTION NUMVAL(A).

y la entrada podra ser:

|
|

1,23
-3

|
|

Evaluacin de elementos de datos (funciones intrnsecas)


Es posible utilizar distintas funciones intrnsecas al evaluar elementos de datos:

|
|

CHAR y ORD para evaluar enteros y caracteres numricos simples con respecto al orden de clasificacin que el programa utiliza.

LENGTH para hallar la longitud de los elementos de datos.

WHEN-COMPILED para hallar la fecha y hora en que se compil el programa.

|
|
|
|
|
|

Evaluacin de caracteres simples segn el orden de clasificacin (CHAR,


ORD): Si desea conocer la posicin ordinal de cierto carcter en el orden de clasificacin, haga referencia a la funcin ORD utilizando el carcter en cuestin
como argumento y ORD devolver un entero que representar esta posicin. Una
forma conveniente de realizar esta operacin es utilizar la subserie de un elemento
de datos como el argumento de ORD:

IF FUNCTION ORD (CUSTOMER-RECORD(1:1)) IS > 194 THEN ...

|
|
|

Por otra parte, si conoce la posicin del orden de clasificacin que desea pero no
sabe a qu carcter corresponde, haga referencia a la funcin CHAR utilizando la
posicin ordinal entera como argumento y CHAR devolver el carcter deseado:

INITIALIZE CUSTOMER-NAME REPLACING ALPHABETIC BY FUNCTION CHAR(65).

Captulo 8. Trabajo con elementos de datos

167

Obtencin de la longitud de elementos de datos (LENGTH)

|
|
|
|
|

La funcin LENGTH es til en muchos contextos de programacin para determinar


la longitud de elementos de serie. La siguiente instruccin ILE COBOL/400 muestra
cmo mover un elemento de datos, como por ejemplo el nombre de un cliente, al
campo del registro especfico para nombres de clientes:

MOVE CUSTOMER-NAME TO CUSTOMER-RECORD(1:FUNCTION LENGTH(CUSTOMER-NAME)).

|
|

Nota: La funcin LENGTH tambin puede utilizarse sobre un elemento de datos


numrico o una entrada de tabla.

|
|
|

Registro especial LENGTH OF: Adems de la funcin LENGTH, otra tcnica


para hallar la longitud de un elemento de datos es la utilizacin del registro especial LENGTH OF.

|
|
|
|
|

Existe una diferencia fundamental entre el registro especial LENGTH OF y la


funcin intrnseca LENGTH. FUNCTION LENGTH devuelve la longitud de un elemento en posiciones de caracteres, mientras que LENGTH OF devuelve la longitud
de un elemento en bytes. En la mayor parte de los casos, esto tiene poca importancia excepto cuando se trata de elementos de la clase DBCS. Por ejemplo:

|
|

77 CUSTOMER-NAME PIC X(3).


77 CUSTOMER-LOCATION-ASIA PIC G(5).

|
|
|
|

Tanto la codificacin de FUNCTION LENGTH(CUSTOMER-NAME) como la de LENGTH OF


CUSTOMER-NAME devolver 30; sin embargo, la codificacin de FUNCTION
LENGTH(CUSTOMER-LOCATION-ASIA) devolver 50, mientras que LENGTH OF
CUSTOMER-LOCATION-ASIA devolver 100.

|
|
|
|
|
|
|

Mientras que la funcin LENGTH slo puede utilizarse en los casos en que se permiten expresiones aritmticas, el registro especial LENGTH OF puede utilizarse en
una mayor variedad de contextos. Por ejemplo, el registro especial LENGTH OF
puede utilizarse como argumento de una funcin intrnseca que permita argumentos enteros. (No es posible utilizar una funcin intrnseca como operando del
registro especial LENGTH OF). El registro especial LENGTH OF tambin puede
utilizarse como parmetro en una instruccin CALL.

|
|
|
|
|

Obtencin de la fecha de compilacin (WHEN-COMPILED)


Si desea conocer la fecha y hora en que se compil el programa, tal como la proporcione el sistema en el que se compil el programa, utilice la funcin
WHEN-COMPILED. Se devolver un resultado de 21 posiciones de caracteres de
las que las 16 primeras tendrn el siguiente formato:

YYYYMMDDhhmmsshh

|
|

que indica los cuatro dgitos del ao, el mes, el da y la hora (en horas, minutos,
segundos y dcimas de segundo) relativos a la compilacin.

|
|
|

Registro especial WHEN-COMPILED: El registro especial WHEN-COMPILED


constituye otra tcnica que puede utilizarse para hallar la fecha y hora de la compilacin. Presenta el siguiente formato:

MM/DD/YYhh.mm.ss

|
|
|

El registro especial WHEN-COMPILED slo proporciona soporte a un ao de dos


dgitos y precisa la hora slo hasta los segundos. El registro especial slo puede
utilizarse como el campo de envo de una instruccin MOVE.

168

ILE COBOL/400 Gua del Programador

|
|
|
|
|
|
|
|
|
|
|
|

Aritmtica de coma fija frente a aritmtica de coma flotante


Es posible que algunas de las instrucciones del programa impliquen operaciones
aritmticas. Por ejemplo, cada una de las instrucciones de COBOL que aparecen a
continuacin requiere algn tipo de evaluacin aritmtica:
Aritmtica general.
COMPUTE REPORT-MATRIX-COL = (EMP-COUNT \\ .5) + 1
ADD REPORT-MATRIX-MIN TO REPORT-MATRIX-MAX GIVING
REPORT-MATRIX-TOT.
Expresiones y funciones.
COMPUTE REPORT-MATRIX-COL = FUNCTION SQRT(EMP-COUNT) + 1
COMPUTE CURRENT-DAY = FUNCTION DAY-OF-INTEGER(NUMBER-OF-DAYS + 1)
Comparaciones aritmticas.

|
|

IF REPORT-MATRIX-COL < FUNCTION SQRT(EMP-COUNT) + 1


IF CURRENT-DAY not = FUNCTION DAY-OF-INTEGER(NUMBER-OF-DAYS + 1)

|
|
|
|
|

Para cada una de las evaluaciones aritmticas del programa -tanto si se trata
de una instruccin, una funcin intrnseca, una expresin o bien una combinacin de las anteriores anidadas entre s- la forma en que se codifique la operacin aritmtica determinar si se realizar una evaluacin de coma flotante o
de coma fija.

|
|
|
|

La siguiente discusin explica cundo una operacin o una expresin aritmtica se


evala en forma de coma fija o en forma de coma flotante. Para obtener informacin detallada sobre la precisin de las evaluaciones aritmticas, consulte el
apartado Conversiones y precisin en la pgina 158.

|
|
|
|

Evaluaciones de coma flotante


En general, si la evaluacin aritmtica tiene alguna de las caractersticas que se
enumeran a continuacin, el compilador la evaluar en aritmtica de coma flotante:
Un operando o un campo de resultado es de coma flotante.

|
|
|

Un elemento de datos es de coma flotante si est codificado como literal de


coma flotante o est definido como USAGE COMP-1, USAGE COMP-2 o coma
flotante externo (USAGE DISPLAY con PICTURE de coma flotante).

|
|

Un operando que sea una expresin aritmtica anidada o una referencia a una
funcin intrnseca numrica ser de coma flotante si:

Un argumento de una expresin aritmtica resulta en coma flotante.

La funcin es una funcin de coma flotante.

|
|
|
|

Se trata del argumento de una funcin de coma flotante.


Las funciones como COS y SIN son funciones de coma flotante que precisan
un argumento. Como estas funciones son de coma flotante, el argumento se
calcular como de coma flotante.

Captulo 8. Trabajo con elementos de datos

169

|
|
|
|
|
|
|

Evaluaciones de coma fija

|
|
|
|
|
|
|
|
|
|
|

Comparaciones aritmticas (condiciones de relacin)

En general, si la evaluacin aritmtica no contiene ninguna de las caractersticas


que se han enumerado para comas flotantes, el compilador la evaluar en aritmtica de coma fija. Es decir, el compilador manejar las evaluaciones aritmticas
como de coma fija slo si todos los operandos se proporcionan como de coma fija
y el resultado se define como de coma fija. Las expresiones aritmticas anidadas
y las referencias a funciones deben representar valores de coma fija.

Si la operacin aritmtica es una comparacin (contiene un operador relacional),


las expresiones numricas que se comparan -tanto si se trata de elementos de
datos, de expresiones aritmticas, de referencias a funciones o de una combinacin de las mismas- son realmente operandos (comparandos) en el contexto de
toda la evaluacin. Este tambin es el caso con comparaciones abreviadas;
aunque un comparando no aparezca de forma explcita, ambos son operandos de
la comparacin. Si utiliza expresiones que contengan comparaciones en ILE
COBOL/400, la expresin se evala como de coma flotante si por lo menos uno de
los comparandos es de coma flotante o se resuelve como tal; en caso contrario, la
expresin se calcula como de coma fija.

Por ejemplo, considere la siguiente instruccin:

IF (A + B) = C or D = (E + F)

|
|
|
|
|

En el ejemplo anterior hay dos comparaciones y por lo tanto cuatro comparandos.


Si alguno de los cuatro comparandos es un valor de coma flotante o se resuelve
como tal, todas las operaciones aritmticas de la instruccin IF se realizarn en
forma de coma flotante; en caso contrario, todas las operaciones aritmticas se
llevarn a cabo en forma de coma fija.

En el caso de la instruccin EVALUATE:

|
|
|
|
|
|
|

EVALUATE (A + D)
WHEN (B + E) THRU C
WHEN (F / G) THRU (H \ I)
.
.
.
END-EVALUATE.

|
|
|

Una instruccin EVALUATE puede volverse a escribir como una instruccin IF o


una serie de instrucciones IF equivalentes. En este ejemplo, las instrucciones IF
equivalentes son las siguientes:

|
|

if ( (A + D) >= (B + E) ) AND
( (A + D) <= C)

|
|

if ( (A + D) >= (F / G) ) AND
( (A + D) <= (H \ I) )

|
|
|
|

Por lo tanto, siguiendo estas reglas que acabamos de ver para la instruccin IF
debemos mirar todos los comparandos de cada una de las instrucciones IF para
determinar si todas las operaciones aritmticas de la instruccin IF sern de coma
fija o de coma variable.

170

ILE COBOL/400 Gua del Programador

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Ejemplos de evaluaciones de coma fija y de coma flotante


Para los ejemplos que se muestran en el apartado Aritmtica de coma fija frente a
aritmtica de coma flotante en la pgina 169, si define los elementos de datos de
la siguiente forma:
1

.
.
.
1
1
1
1
1
1

EMPLOYEE-TABLE.
5 EMP-COUNT
PIC 9(4).
5 EMPLOYEE-RECORD OCCURS 1 TO 1 TIMES
DEPENDING ON EMP-COUNT.
1 HOURS
PIC +9(5)E+99.

REPORT-MATRIX-COL
REPORT-MATRIX-MIN
REPORT-MATRIX-MAX
REPORT-MATRIX-TOT
CURRENT-DAY
NUMBER-OF-DAYS

PIC
PIC
PIC
PIC
PIC
PIC

9(3).
9(3).
9(3).
9(3).
9(7).
9(3).

Estas evaluaciones se realizaran en aritmtica de coma flotante:


COMPUTE REPORT-MATRIX-COL = FUNCTION SQRT(EMP-COUNT) + 1
IF REPORT-MATRIX-TOT < FUNCTION SQRT(EMP-COUNT) + 1
Estas evaluaciones se realizaran en aritmtica de coma fija:
ADD REPORT-MATRIX-MIN TO REPORT-MATRIX-MAX GIVING REPORT-MATRIX-TOT.
IF CURRENT-DAY NOT = FUNCTION DAY-OF-INTEGER((NUMBER-OF-DAYS) + 1)

Proceso de elementos de tablas


Es posible procesar elementos de tabla alfanumricos o numricos utilizando funciones intrnsecas siempre que la descripcin de datos del elemento de tabla sea
compatible con los requisitos de argumentacin de la funcin. En la publicacin ILE
COBOL/400 Reference se describen los formatos de datos necesarios para los
argumentos de las distintas funciones intrnsecas.
Utilice un subndice o un ndice para hacer referencia a un elemento de datos individual como argumento de la funcin. Suponiendo que TABLE-ONE sea una matriz
3X3 de elementos numricos, puede hallar la raz cuadrada del elemento central
con una instruccin como la siguiente:
COMPUTE X = FUNCTION SQRT(TABLE-ONE(2,2)).

Cul es el problema con el ao 2000?

*
|
|
|

El problema con el ao 2000 estriba en la utilizacin de dos dgitos para representar el ao. Si los campos de fecha del programa slo tienen los 2 ltimos
dgitos del ao, al llegar al 1/1/2000 el ao acutal se representar como 00. Ello
significa que el ao actual ser inferior al ao anterior, ya que 00 es menor que 99.

|
|
|
|
|

En el release de ILE COBOL/400, se ha aadido el soporte al siglo para el siglo


21. Esto significa que si recupera un ao cuyos 2 ltimos dgitos estn comprendido en el rango 40 99, los dgitos 19 se aadirn como prefijo y as obtendr
un ao de cuatro dgitos dentro del rango 1940 1999. Por el contrario, si recupera una ao cuyos 2 ltimos dgitos se encuentran en el rango 00 39, los

Captulo 8. Trabajo con elementos de datos

171

|
|
|
|
|

dgitos 20 se aadirn como prefijo y recuperar un ao de cuatro dgitos dentro


del rango 2000 2039.

Solucin a largo plazo


Para que los programas puedan llegar hasta el ao 9999, deber realizar las
siguientes operaciones:

1. Volver a escribir las aplicaciones utilizando uno de los mtodos siguientes:

|
|

Utilizar las expresiones YYYYMMDD y YYYYDDD nuevas de la instruccin


ACCEPT para conseguir un ao de 4 dgitos o

|
*
|

Utilizar las funciones intrnsecas para obtener una fecha con un ao de 4


dgitos (como por ejemplo CURRENT-DATE, DATE-OF-INTEGER y
DAY-OF-INTEGER) o

|
|

Utilizar los servicios invocables del Entorno de Lenguajes Integrados para


obtener fechas con un ao de 4 dgitos.

2. Volver a crear las bases de datos con aos de 4 dgitos.

|
|
|
|
|
|
|
|
|

Sin embargo, existe una solucin a corto plazo que es ms fcil.

Solucin a corto plazo


Si no puede modificar todas las aplicaciones y datos antes del ao 2000, utilice las
funciones intrnsecas de la ventana de siglo, que permiten la interpretacin de los
aos de 2 dgitos en una ventana de 100 aos (ya que cada nmero de 2 dgitos
slo puede producirse una vez cada perodo de 100 aos). Seleccione el perodo,
proporcione a la funcin intrnseca un ao de 2 dgitos o una fecha o da con un
ao de dos dgitos y la funcin intrnseca devolver el valor adecuado con un ao
de 4 dgitos en esta ventana de 100 aos.

|
|
|
|
|
|
|
|
|
|

El compilador ILE COBOL/400 proporciona tres funciones intrnsecas en la ventana


de siglo: YEAR-TO-YYYY, DAY-TO-YYYYDDD y DATE-TO-YYYYMMDD. La
funcin intrnseca YEAR-TO-YYYY toma un ao de 2 dgitos y devuelve un ao de
4 dgitos en una ventana de 100 aos especificada. Las otras dos funciones intrnsecas toman una fecha que contiene un ao de 2 dgitos y devuelven una fecha
con un ao de 4 dgitos en una ventana de 100 aos especificada. Para la funcin
intrnseca DAY-TO-YYYYDDD, la fecha que se toma es un nmero de 5 dgitos
con un formato como el de la instruccin ACCEPT FROM DAY. De forma similar,
la funcin intrnseca DATE-TO-YYYYMMDD toma un nmero de 6 dgitos con un
formato como el de la instruccin ACCEPT FROM DATE.

|
|

Para obtener ms informacin acerca de las funciones intrnsecas de la ventana de


siglo, consulte el manual ILE COBOL/400 Reference, SC09-2073.

|
|
|
|

Ventajas de la solucin a corto plazo

|
|
|
|
|

Sin embargo, puede utilizar las funciones intrnsecas de la ventana de siglo para
convertir las bases de datos o los archivos que tengan fechas con un ao de 2
dgitos a fechas con un ao de 4 dgitos. Para ello debe leer las fechas de los
aos de 2 dgitos, interpretarlas para obtener aos de 4 dgitos y a continuaicn
volver a grabar los datos en una copia del original que se haya ampliado para que

La ventaja de la solucin a corto plazo es que slo necesita modificar unos


cuantos programas y no necesita cambiar las bases de datos. Este mtodo es ms
barato, ms rpido y ms fcil que la solucin a largo plazo.

172

ILE COBOL/400 Gua del Programador

|
|

pueda contener datos con aos de 4 dgitos. Todos los datos nuevos entraran
entonces en el archivo o base de datos nuevos.

|
|
|
|

Inconvenientes de la solucin a corto plazo

|
|
|
|

No puede utilizar la ventana de siglo eternamente, ya que un ao de 2 dgitos slo


puede ser nico en un perodo de 100 aos. Con el tiempo, necesitar ms de 100
aos para la ventana de datos. De hecho, muchas empresas ya necesitan ahora
ms de 100 aos.

|
|
|
|
|

Una forma para que la ventana de siglo proporcione ms tiempo consiste en que el
usuario sepa distinguir en cualquier seccin del cdigo ILE COBOL/400 si una
fecha es antigua (la fecha es del pasado) o si todava no se ha alcanzado (la fecha
es del futuro). Puede utilizar este conocimiento para determinar cmo establecer
la ventana de siglo.

|
|
|
|
|
|
|

Sin embargo, hay limitaciones. Por ejemplo, la ventana de siglo no puede resolver
el problema de intentar averiguar cunto tiempo ha estado un cliente en el
empresa si el tiempo supera los 100 aos y slo tiene aos de 2 dgitos en las
fechas. Otro ejemplo lo encontramos en la ordenacin. Todos los registros que
desee ordenar por fecha debern tener fechas con aos de 4 dgitos. Para solucionar estos y otros problemas, deber utilizar instrucciones ACCEPT, funciones
intrnsecas o servicios de datos ILE, que devuelven un aos de 4 dgitos.

Slo podr utilizar este mtodo durante unos cuantos aos, segn de que aplicacin se trate. Al final deber cambiar todos los programas y bases de datos que
contengan fechas.

Captulo 8. Trabajo con elementos de datos

173

174

ILE COBOL/400 Gua del Programador

Captulo 9. Llamada y compartimiento de datos entre


programas ILE COBOL/400
A veces, una aplicacin es lo suficientemente sencilla como para codificarla como
un programa autosuficiente nico. Sin embargo, en muchos casos, una solucin
de aplicacin constar de varios programas compilados por separado que se utilizan conjuntamente.
El sistema AS/400 proporciona comunicacin entre programas ILE COBOL/400, y
entre programas ILE COBOL/400 y programas que no son de ILE COBOL/400.
Este captulo describe:
varios mtodos utilizados para llamar a otro programa ILE COBOL/400
cmo se devuelve de nuevo el control al programa de llamada una vez el programa llamado ha finalizado la ejecucin
cmo pasar datos entre el programa de llamada y el programa llamado.
cmo cancelar un programa ILE COBOL/400.

Conceptos de ejecucin
Se crea un objeto de programa desde uno o ms objetos de mdulo. Cada objeto
de programa tiene asignado un slo objeto de mdulo como punto de entrada principal cuando se activa el objeto de programa. Cuando el compilador ILE
COBOL/400 crea un objeto de mdulo, se genera un PEP, el cual llama al programa ILE COBOL/400 ms externo que se encuentre en la unidad de compilacin. Al enlazar mltiples objetos de mdulo juntos para crear un objeto de
programa, debe especificar qu objeto de mdulo contiene el PEP del objeto de
programa que se est creando. Esto se lleva a cabo identificando el objeto de
mdulo en el parmetro ENTMOD del mandato CRTPGM. El PEP de este objeto
de mdulo se convierte en el PEP para el objeto de programa.
Cuando un objeto de programa se activa utilizando una llamada dinmica de programa, se otorga el control al PEP. Entonces el PEP llama al UEP, que es el programa ILE COBOL/400 ms externo del objeto de mdulo que se ha de ejecutar
primero. Consulte la publicacin ILE Conceptos para obtener informacin sobre los
PEP y los UEP.

Activacin y grupos de activacin


El proceso de preparar un objeto de programa o un programa de servicio para ejecutarlo se denomina activacin. El sistema realiza la activacin cuando se llama
a un objeto de programa. Como los programas de servicio no se llaman en su
totalidad, estos se activan durante la llamada a un objeto de programa que, directa
o indirectamente, necesite sus servicios. Los procedimientos ILE dentro de programas de servicio se llaman utilizando llamadas estticas de procedimientos; no
pueden llamarse mediante llamadas dinmicas de programas.
La activacin realiza las funciones siguientes:
Asigna de forma exclusiva los datos estticos que el objeto de programa o el
programa de servicio necesitan
Copyright IBM Corp. 1994, 1996

175

Cambia los enlaces simblicos a programas de servicio utilizados, a enlaces a


direcciones fsicas.
Cuando la activacin asigna el almacenamiento necesario para las variables estticas utilizadas por un objeto de programa, el espacio se asigna desde un grupo
de activacin. Cada grupo de activacin tiene un nombre. El nombre del grupo
de activacin lo proporciona el usuario (o el sistema cuando se especifica *NEW).
En el momento de la creacin del objeto de programa o del programa de servicio
mediante CRTPGM o CRTSRVPGM, puede especificar el grupo de activacin en
que se activar el objeto de programa o el programa de servicio. Consulte el
manual ILE Conceptos para obtener informacin ms detallada sobre la activacin
y los grupos de activacin.

Unidad de ejecucin COBOL


Una unidad de ejecucin COBOL es un conjunto de uno o ms programas que
funcionan como una unidad en la ejecucin para proporcionar la solucin de un
problema.Una unidad de ejecucin COBOL es una entidad independiente que
puede ejecutarse sin comunicarse ni coordinarse con ninguna otra unidad de ejecucin, a menos que pueda procesar archivos de datos y mensajes o establecer y
comprobar conmutadores utilizados por otras unidades de ejecucin. Una unidad
de ejecucin tambin puede contener objetos de programa y programas de servicios creados desde objetos de mdulo que se hayan creado a partir de la compilacin de programas escritos en lenguajes distintos a ILE COBOL/400.
En ILE, una unidad de ejecucin COBOL est compuesta por objetos de programa
y programas de servicio que se ejecutan todos en un nico grupo de activacin
ILE. Para mantener la compatibilidad de la semntica de la unidad de ejecucin
OPM COBOL/400, la aplicacin ILE COBOL/400 debe cumplir las condiciones
siguientes:
Cada unidad de compilacin ILE COBOL/400 debe compilarse y luego enlazarse a un nico objeto de programa.
Todos los participantes de la unidad de ejecucin (ILE COBOL/400 u otros
programas/procedimientos ILE) deben ejecutarse en un nico grupo de activacin ILE.
Nota: Debera utilizar un grupo de activacin ILE con nombre en el cual poder
ejecutar la aplicacin para mantener adecuadamente la semntica de la
unidad de ejecucin COBOL. Utilizando un grupo de activacin ILE
con nombre para todos los objetos de programa participantes, no tiene
que especificar un objeto de programa ILE COBOL/400 concreto para
que sea el programa principal antes de ejecutar la aplicacin. Por otro
lado, si se sabe que un objeto de programa ILE COBOL/400 concreto
es el programa principal antes de ejecutar la aplicacin, puede especificar el atributo *NEW para la opcin ACTGRP al crear un objeto *PGM,
utilizando el programa ILE COBOL/400 como el UEP. Todos los dems
objetos de programa participantes deben especificar el atributo
*CALLER para la opcin ACTGRP.
La llamada ms antigua del grupo de activacin ILE (correspondiente a la
unidad de ejecucin) debe ser la de ILE COBOL/400. Este es el programa
principal de la unidad de ejecucin.

176

ILE COBOL/400 Gua del Programador

Si no se cumplen estas condiciones, puede haber un lmite de control que enlace


el mbito de STOP RUN, de manera que no se renueve el estado de la aplicacin
entera.
Nota: La condicin anterior indica que un programa ILE COBOL/400 que se
ejecute en *DFTACTGRP, se ejecuta generalmente en una unidad de ejecucin no compatible con una unidad de ejecucin OPM COBOL/400.

Lmites de control
Todos los lenguajes ILE, incluyendo ILE COBOL/400, utilizan un mecanismo
comn denominado pila de llamadas para transferir control a y desde procedimientos ILE u objetos de programas OPM llamados. La pila de llamadas consta
de una lista de entradas del tipo ltima en entrar primera en salir con una entrada
por cada procedimiento ILE u objeto de programa llamado. Cada entrada de la
pila de llamadas tiene informacin sobre las variables automticas para el procedimiento ILE y otros recursos del mbito de la entrada de la pila de llamadas,
como por ejemplo manejadores de condiciones y de cancelacin.
En ILE COBOL/400, cada programa ILE COBOL/400 o programa anidado llamado
tiene una entrada en la pila de llamadas. Cada procedimiento declarativo llamado
tambin tiene su propia entrada en la pila de llamadas.
Una llamada aade una nueva entrada a la pila para el procedimiento ILE o para el
objeto de programa OPM llamado y transfiere el control al objeto llamado. Una
devolucin de control elimina la entrada de la pila de llamadas y transfiere el
control de nuevo al procedimiento ILE o al objeto de programa llamado en la
entrada de la pila de llamadas anterior.
En ILE, puede crear una aplicacin que ejecute objetos de programa en grupos de
activacin mltiples. Puede llamar a un objeto de programa ILE COBOL/400 que
se est ejecutando en un grupo de activacin distinto al del programa de llamada.
En este caso, la entrada de la pila de llamadas para el objeto de programa
llamado se conoce como un lmite de control. Un lmite de control se define
como cualquier entrada de la pila de llamadas ILE para la cual la entrada de la pila
de llamadas inmediatamente anterior es para un procedimiento u objeto de programa ILE de un grupo de activacin distinto. Una entrada de la pila de llamadas
ILE la entrada de la pila de llamadas inmediatamente anterior sea para un objeto
de programa OPM, tambin constituye un lmite de control.
Si el objeto de programa llamado es el primer objeto de programa a activar en un
grupo de activacin concreto, entonces la entrada de la pila de llamadas se conoce
como lmite de control fijo. Si el objeto de programa llamado, que es un lmite de
control, no es el primer objeto de programa que se va a activar en un grupo de
activacin, entonces su entrada de la pila de llamadas se conoce como un lmite
de control variable. El programa principal de una unidad de ejecucin con la que
es compatible y la unidad de ejecucin OPM COBOL/400 se encuentran en el
lmite de control fijo del grupo de activacin.
Cuando una instruccin STOP RUN (o una instruccin GOBACK de un programa
principal ILE COBOL/400) se encuentra en un programa ILE COBOL/400 llamado,
el control se transfiere al llamador del lmite de control. En una unidad de ejecucin compatible con una unidad de ejecucin OPM COBOL/400, STOP RUN finalizar la unidad de ejecucin. Se realiza una operacin COMMIT implcita en los
archivos bajo el control de compromiso si ste est en el mbito del grupo de acti-

Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

177

vacin y la activacin finaliza normalmente sin errores cerrando los archivos. Se


realiza una operacin ROLLBACK si el grupo de activacin finaliza anormalmente o
si existen errores al cerrar los archivos.No ocurre nada si el control de compromiso
est en el mbito del trabajo.
El lmite de control tambin se encuentra cuando un error no manejado se convierte en una comprobacin de funcin. Si sigue sin manejarse la comprobacin de
funcin, sta se pasa a la condicin de error ILE genrica, CEE9901, en el lmite
de control y se enva al llamador del lmite de control.

Programas principales y subprogramas


El primer programa del grupo de activacin a activar inicia la unidad de ejecucin
COBOL y es el programa principal. El programa principal se encuentra en el
lmite de control fijo del grupo de activacin. Ninguna opcin o instruccin fuente
especfica identifica a un programa ILE COBOL/400 como programa principal o
subprograma.
Un subprograma es un programa de la unidad de ejecucin situado debajo del
programa principal en la pila de llamadas. Para obtener ms informacin sobre las
pilas de programas y otros trminos relacionados con la comunicacin entre programas, vea el manual CL Programacin.

Inicializacin del almacenamiento


La primera vez que se llama a un programa ILE COBOL/400 de una unidad de
ejecucin, se inicializa su almacenamiento. El almacenamiento se inicializa de
nuevo bajo las circunstancias siguientes:
El prrafo PROGRAM-ID del programa ILE COBOL/400 posee la clusula
INITIAL. El almacenamiento se reinicializa cada vez que se llama al programa.
Se finaliza la unidad de ejecucin y luego se reinicializa.
El programa se cancela (utilizando la instruccin CANCEL de ILE COBOL/400)
y luego se llama de nuevo.
El final de las direcciones de bifurcacin de nombre de seccin y nombre de
prrafo se reinicializa siempre (como consecuencia de instrucciones
PERFORM anteriores).

Transferencia de control a otro programa


En la PROCEDURE DIVISION, un programa puede llamar a otro programa (generalmente denominado subprograma en trminos COBOL), y este programa llamado
puede a su vez llamar a otro programa. El programa que llama a otro programa se
denomina el programa de llamada y el programa al que llama se denomina el programa llamado.
El programa ILE COBOL/400 llamado empieza a ejecutarse al principio de la parte
no declarativa de la PROCEDURE DIVISION. Si un programa ILE COBOL/400
llamado no tiene una Procedure Division o no tiene una parte no declarativa en la
PROCEDURE DIVISION, simplemente volver al programa de llamada ILE
COBOL/400.
Una vez finalizado el proceso del programa llamado, el programa puede transferir
de nuevo el control al programa de llamada o finalizar la unidad de ejecucin. La

178

ILE COBOL/400 Gua del Programador

unidad de ejecucin finaliza despus de emitir STOP RUN siempre que el lmite de
control ms cercano sea un lmite de control fijo. Si el lmite de control ms
cercano es un lmite de control variable, entonces el control vuelve al llamador del
lmite de control, pero la unidad de ejecucin permanece activa.
Un programa llamado no debe llamar directa ni indirectamente a su llamador (como
por ejemplo, el programa X llama al programa Y; el programa Y llama al programa
Z y el programa Z entonces llama al programa X). Esto se denomina una llamada
recursiva. ILE COBOL/400 no permite la recursin en programas principales ni
subprogramas.Si se intenta una repeticin, se generar un mensaje de error de
ejecucin.

Llamada a un programa ILE COBOL/400


Para llamar a otro programa ILE COBOL/400, puede utilizar uno de los mtodos
siguientes:
Llamadas a programas anidados
Llamadas estticas de procedimientos
Llamadas dinmicas de programas
Las llamadas a programas anidados le permiten crear aplicaciones utilizando tcnicas de programacin estructuradas. Tambin pueden utilizarse en lugar de procedimientos PERFORM para evitar la modificacin accidental de elementos de
datos.Las llamadas a programas anidados pueden realizarse utilizando la instruccin de CALL literal o la instruccin de CALL identificador. Para obtener ms informacin sobre programas anidados, vea el apartado Llamada a programas
anidados en la pgina 182.
Una llamada esttica de procedimientos transfiere el control a un programa ILE
COBOL/400 llamado que est enlazado por copia o por referencia al mismo objeto
de programa que el programa ILE COBOL/400 de llamada. Las llamadas estticas
de procedimientos pueden realizarse utilizando la instruccin CALL literal o la instruccin CALL puntero de procedimiento. Una llamada esttica de procedimientos
puede utilizarse para llamar a cualquiera de los procedimientos siguientes:
Un procedimiento ILE dentro del mismo objeto de mdulo
Un programa ILE COBOL/400 anidado (utilizando CALL literal)
Un procedimiento ILE en un objeto de mdulo separado que est enlazado al
programa de llamada ILE COBOL/400
Un procedimiento ILE en un programa de servicio separado.
Una llamada dinmica de programa transfiere el control a un programa ILE
COBOL/400 llamado que est enlazado a un objeto de programa separado del programa de llamada ILE COBOL/400. El programa ILE COBOL/400 llamado debe
ser el UEP del objeto de programa. Slo el programa ILE COBOL/400, que es el
UEP del objeto de programa, puede llamarse desde otro programa ILE COBOL/400
que se encuentre en un objeto de programa distinto.Los programas ILE
COBOL/400 distintos al designado como UEP, son slo visibles dentro del objeto
de programa. Con una llamada dinmica de programa, el objeto de programa
llamado se activa la primera vez que se llama dentro del grupo de activacin. Las
llamadas dinmicas de programa pueden realizarse utilizando las instrucciones
CALL literal, CALL identificador o CALL elemento-de-datos-de-puntero-deprocedimiento. Utilice la instruccin SET elemento-de-datos-de-puntero-deprocedimiento TO ENTRY nombre-de-objeto-de-programa para establecer el
Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

179

elemento-de-datos-de-puntero-de-procedimiento antes de utilizar la instruccin


CALL elemento-de-datos-de puntero-de-procedimiento.
Para obtener informacin adicional sobre llamadas estticas de procedimiento y las
llamadas dinmicas de programa, consulte el apartado Utilizacin de llamadas
estticas de procedimiento y llamadas dinmicas de programa en la pgina 186.

Identificacin del tipo de enlace de programas y procedimientos


llamados
Al llamar a otro programa ILE COBOL/400 que no est en el mismo objeto de
mdulo que el programa de llamada, si la llamada se realiza mediante una instruccin CALL literal, debe especificar si el programa llamado es un objeto de programa ILE o un procedimiento ILE.
Identifique si est llamando a un objeto de programa o a un procedimiento especificando el tipo de enlace de la llamada.
|
|
|
|
|

El tipo de LINKAGE de la llamada puede especificarse de forma explcita u obligada, especificando una expresin que est asociada con un enlace concreto. Por
ejemplo, la expresin IN LIBRARY obliga a que una llamada sea un LINKAGE programa. En los casos en los que ninguna expresin obligue al enlace, hay tres
formas de especificar un enlace de forma explcita. Se listan en orden de
prioridad:
1. La clusula LINKAGE de las instrucciones CALL, CANCEL o SET...ENTRY
Para llamar o cancelar un objeto de programa, especifique LINKAGE TYPE
IS PROGRAM en la instruccin CALL, CANCEL o SET...ENTRY.
PROCEDURE DIVISION.
..
.
CALL LINKAGE TYPE IS PROGRAM literal-1
..
.
CALL LINKAGE PROGRAM literal-2 IN LIBRARY literal-3
..
.
CANCEL LINKAGE PROGRAM literal-2 IN LIBRARY literal-3
..
.
CANCEL LINKAGE TYPE IS PROGRAM literal-1

|
|

Para llamar o cancelar un procedimiento, especifique LINKAGE TYPE IS


PROCEDURE en la instruccin CALL, CANCEL o SET...ENTRY. La
expresin IN LIBRARY no puede especificarse para una instruccin CALL,
CANCEL o SET que incluya una expresin LINKAGE TYPE IS
PROCEDURE. La expresin IN LIBRARY se utiliza para especificar un
nombre de biblioteca de OS/400 para una objeto de programa (*PGM).

|
|
|
|
|

PROCEDURE DIVISION.
..
.
CALL LINKAGE TYPE IS PROCEDURE literal-1
..
.
CANCEL LINKAGE TYPE IS PROCEDURE literal-1
2. La expresin LINKAGE TYPE del prrafo SPECIAL-NAMES
Para llamar o cancelar un objeto de programa, especifique LINKAGE TYPE
IS PROGRAM FOR literal-1 en el prrafo SPECIAL-NAMES donde literal-1
es el nombre del objeto de programa al que se est llamando. No tiene

180

ILE COBOL/400 Gua del Programador

que especificar la palabra clave LINKAGE TYPE con la instruccin CALL,


CANCEL o SET...ENTRY cuando el enlace se haya definido en el prrafo
SPECIAL-NAMES.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
..
.
SPECIAL-NAMES.
LINKAGE TYPE IS PROGRAM FOR literal-1.
..
.
PROCEDURE DIVISION.
..
.
CALL literal-1.
..
.
CANCEL literal-1.
Para llamar o cancelar un procedimiento, especifique LINKAGE TYPE IS
PROCEDURE FOR literal-1 en el prrafo SPECIAL-NAMES, donde literal-1
es el nombre del procedimiento al que est llamando. No tiene que especificar la expresin LINKAGE TYPE con la instruccin CALL, CANCEL o
SET...ENTRY cuando el enlace se ha definido en el prrafo
SPECIAL-NAMES.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
..
.
SPECIAL-NAMES.
LINKAGE TYPE IS PROCEDURE FOR literal-1.
..
.
PROCEDURE DIVISION.
..
.
CALL literal-1.
..
.
CANCEL literal-1.
3. El parmetro LINKLIT de los mandatos CRTCBLMOD y CRTBNDCBL o la
opcin de instruccin PROCESS asociada.
El parmetro LINKLIT de los mandatos CRTCBLMOD y CRTBNDCBL le
permite especificar, en el momento de la compilacin, el tipo de enlace
para todas las instrucciones externas CALL literal-1, CANCEL literal-1 o
SET elemento-de-datos-de-puntero-de-procedimiento TO ENTRY literal-1
del programa ILE COBOL/400. No tiene que especificar la clusula
LINKAGE TYPE en el prrafo SPECIAL-NAMES ni la expresin LINKAGE
TYPE con la instruccin CALL, CANCEL o SET...ENTRY cuando el enlace
haya sido definido mediante el parmetro LINKLIT de CRTCBLMOD o
CRTBNDCBL.
Para crear un mdulo que llame a objetos de programa, teclee:
CRTCBLMOD MODULE(MYLIB/XMPLE1)
SRCFILE(MYLIB/QCBLLESRC) SRCMBR(XMPLE1)
LINKLIT(\PGM)
Para crear un mdulo que llame a procedimientos, teclee:
CRTCBLMOD MODULE(MYLIB/XMPLE1)
SRCFILE(MYLIB/QCBLLESRC) SRCMBR(XMPLE1)
LINKLIT(\PRC)

Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

181

Codifique las instrucciones CALL y CANCEL de la siguiente forma al utilizar el parmetro LINKLIT de CRTCBLMOD para especificar el tipo de
enlace:
PROCEDURE DIVISION.
..
.
CALL literal-1.
..
.
CANCEL literal-1.

Llamada a programas anidados


Los programas anidados le proporcionan un mtodo para crear funciones
modulares para la aplicacin y para mantener tcnicas de programacin estructuradas. Los programas anidados le permiten definir mltiples funciones separadas,
cada una con su propio mbito de control, dentro de una nica unidad de compilacin. Pueden utilizarse como procedimientos PERFORM con la capacidad adicional de proteger elementos de datos locales.
Cuando se compilan, los programas anidados residen en el mismo mdulo que su
programa de llamada.Por consiguiente, los programas anidados siempre se ejecutan en el mismo grupo de activacin que sus programas de llamada.

Estructura de los programas anidados


Un programa ILE COBOL/400 puede contener otros programas ILE COBOL/400.
Los programas contenidos pueden a su vez contener otros programas.Un programa contenido puede, directa o indirectamente, estar contenido dentro de otro
programa.
La Figura 49 en la pgina 183 describe la estructura de un programa anidado con
programas contenidos directa e indirectamente.

182

ILE COBOL/400 Gua del Programador


X1 est directamente conte
nido en X y contiene,
5
directamente, X11 y X12.







X11 est directamente

contenido en
5
X1 e indirectamente

contenido en X.





X12 est directamente

contenido en X1 5
e indirectamente

contenido en X.





X2 est directamente
5
contenido en X.




X es el programa ms externo y
contiene directamente X1 y X2
e indirectamente, contiene
X11 y X12.

ID DIVISION.
PROGRAM-ID. X.
PROCEDURE DIVISION.
PAR1.
DISPLAY "Estoy en X"
CALL "X1"
CALL "X2"
STOP RUN.
ID DIVISION.
PROGRAM-ID. X1.
PROCEDURE DIVISION.
PAR2.
DISPLAY "Estoy en X1"
CALL "X11"
CALL "X12"
EXIT PROGRAM.
ID DIVISION.
PROGRAM-ID. X11.
PROCEDURE DIVISION.
PAR3.
DISPLAY "Estoy en X11"
EXIT PROGRAM.
END PROGRAM X11.
ID DIVISION.
PROGRAM-ID. X12.
PROCEDURE DIVISION.
PAR4.
DISPLAY "Estoy en X12"
EXIT PROGRAM.
END PROGRAM X12.
END PROGRAM X1.
ID DIVISION.
PROGRAM-ID. X2.
PROCEDURE DIVISION.
PAR5.
DISPLAY "Estoy en X2"
EXIT PROGRAM.
END PROGRAM X2.
END PROGRAM X.

Figura 49. Estructura de programas anidados con programas contenidos directa e indirectamente

Convenciones para utilizar la estructura de programas anidados


Existen varias convenciones aplicables al utilizar estructuras de programas
anidados.
1. En cada programa se requiere la IDENTIFICATION DIVISION. Todas las otras
divisiones son opcionales.
2. El nombre de programa del prrafo PROGRAM-ID debe ser exclusivo.
3. Los nombres de los programas anidados pueden ser cualquier palabra COBOL
vlida o un literal no numrico.
4. Los programas anidados no pueden tener una CONFIGURATION SECTION.
El programa ms externo debe especificar cualquier opcin en la Configuration
Section que se necesite.
5. Cada programa anidado se incluye en el programa que lo contiene inmediatamente antes de su cabecera END PROGRAM (vea la Figura 49).
6. Cada programa ILE COBOL/400 debe terminar con una cabecera END
PROGRAM.
Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

183

7. Los programas anidados slo pueden llamarse o cancelarse desde un programa ILE COBOL/400 en el mismo objeto de mdulo.
8. Las llamadas a programas anidados slo pueden realizarse utilizando una instruccin CALL literal o CALL identificador. Las llamadas a programas anidados
no pueden realizarse utilizando CALL puntero-de-procedimiento. Las llamadas
a programas anidados siguen las mismas normas que las llamadas estticas a
procedimiento.

Jerarqua de llamadas a programas anidados


A un programa anidado slo lo puede llamar el programa que lo contiene directamente, a menos que el programa anidado est identificado como COMMON en el
prrafo PROGRAM-ID. En ese caso, al programa COMMON tambin puede llamarle cualquier programa contenido (directa o indirectamente) dentro del mismo
programa que el que contiene directamente al programa COMMON. No se permiten las llamadas recursivas.
La Figura 50 muestra el perfil de una estructura anidada con algunos programas
contenidos identificados como COMMON.

PROGRAM-ID. A.

PROGRAM-ID. A1.

PROGRAM-ID. A11.
PROGRAM-ID. A111.

END PROGRAM A111.


END PROGRAM A11.

PROGRAM-ID. A12 IS COMMON.

END PROGRAM A12.


END PROGRAM A1.

PROGRAM-ID. A2 IS COMMON.

END PROGRAM A2.


PROGRAM-ID. A3 IS COMMON.

END PROGRAM A3.


END PROGRAM A.

Figura 50. Estructura de programas anidados con programas contenidos directa e indirectamente

La tabla siguiente describe la jerarqua de llamadas para la estructura mostrada


en la Figura 50. Observe que A12, A2 y A3 se identifican como COMMON y las
diferencias resultantes en las llamadas asociadas con los mismos.

184

ILE COBOL/400 Gua del Programador

Tabla 10. Jerarqua de llamadas para estructuras anidadas con programas COMMON
Este programa

Puede llamar a estos


programas

Y puede ser llamado por estos programas

A1, A2, A3

Ninguno

A1

A11, A12, A2, A3

A11

A111, A12, A2, A3

A1

A111

A12, A2, A3

A11

A12

A2, A3

A1, A11, A111

A2

A3

A, A1, A11, A111, A12, A3

A3

A2

A, A1, A11, A111, A12, A2

Observe que:
A2 no puede llamar a A1 porque A1 no es COMMON y no est directamente
contenido en A2.
A111 no puede llamar a A11 porque eso sera una llamada recursiva.
A1 puede llamar a A2 porque A2 es COMMON.
A1 puede llamar a A3 porque A3 es COMMON.

mbito de nombres dentro de una estructura anidada


Existen dos clases de nombres dentro de las estructuras anidadas locales y
globales. La clase determinar si se conoce un nombre ms all del mbito del
programa que lo declara.

Nombres locales: Los nombres son locales a menos que se indique que estn
definidos como GLOBAL (con excepcin del nombre del programa). Estos
nombres locales no son visibles ni accesibles para ningn programa fuera del programa en que se declaran; esto incluye los programas contenidos y los que los
contienen.
Nombres globales: Un nombre especificado como global (utilizando la clusula
GLOBAL) es visible y accesible para el programa en que se declara y para todos
los programas contenidos, directa e indirectamente, dentro del programa.Esto
permite a los programas contenidos compartir datos y archivos comunes con el
programa que los contiene, simplemente haciendo referencia al nombre del elemento.
Cualquier elemento que sea subordinado al elemento global (incluyendo los
nombres e ndices de condicin) es global automticamente.
Puede declararse el mismo nombre con la clusula GLOBAL mltiples veces,
siempre que cada declaracin ocurra en un programa distinto. Recuerde que
enmascarar u ocultar un nombre dentro de una estructura anidada es posible, utilizando el mismo nombre en programas distintos de la misma estructura que los
contienen.

Bsqueda de declaraciones de nombres: Cuando en un programa se hace


referencia a un nombre, se realiza una bsqueda para localizar la declaracin para
dicho nombre.La bsqueda empieza dentro del programa que contiene la referencia y contina hacia fuera a programas continentes hasta que se encuentra
una coincidencia.La bsqueda sigue este proceso:

Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

185

1. Primero se buscan las declaraciones dentro del programa.


2. Si no se encuentra ninguna coincidencia, entonces se buscarn slo las declaraciones globales en sucesivos programas externos continentes.
3. La bsqueda finaliza cuando se encuentra el primer nombre coincidente; de lo
contrario, si no se encuentra ninguna coincidencia, aparecer un error.

Utilizacin de llamadas estticas de procedimiento y llamadas


dinmicas de programa
La informacin siguiente slo es aplicable a subprogramas compilados por separado, no a programas anidados. Para obtener ms informacin sobre las llamadas
dentro de una estructura de programas anidados, consulte el apartado Llamada a
programas anidados en la pgina 182.
El proceso de enlace difiere segn si el programa ILE COBOL/400 utiliza llamadas
estticas de procedimiento o llamadas dinmicas de programa. Cuando se utiliza
una llamada esttica de procedimiento para llamar a un subprograma ILE
COBOL/400, primero debe compilarse en un objeto de mdulo y luego enlazarse,
por copia o por referencia, al mismo objeto de programa que el programa de
llamada ILE COBOL/400. Cuando se utiliza una llamada dinmica de programa
para llamar a un subprograma ILE COBOL/400, ste debe compilarse y enlazarse
como un objeto de programa separado. Para obtener ms informacin sobre el
proceso de enlace, vea el manual ILE Conceptos.
Las llamadas estticas de procedimiento ofrecen ventajas en rendimiento sobre las
llamadas dinmicas de programa.
Cuando se llama a un subprograma ILE COBOL/400 utilizando una llamada esttica de procedimiento, ste ya est activado, ya que est enlazado en el mismo
objeto de programa que el programa de llamada y se ejecuta inmediatamente al
recibir el control desde el programa de llamada ILE COBOL/400.
Cuando se llama a un subprograma ILE COBOL/400 utilizando una llamada dinmica de programa, se necesitan muchas ms tareas antes de que se ejecute el
programa llamado ILE COBOL/400. Estas tareas incluyen lo siguiente:
Si el grupo de activacin en el cual se debe activar el programa llamado ILE
COBOL/400 no existe, primero debe crearse antes de que el programa pueda
activarse.
Si el programa llamado ILE COBOL/400 no se ha activado previamente,
primero debe activarse antes de poderse ejecutar.Activar el programa llamado
ILE COBOL/400 tambin implica activar todos los programas de servicio enlazados (directa o indirectamente) a l. La activacin implica realizar las funciones siguientes:
Asignar de forma exclusiva los datos estticos que el objeto de programa o
el programa de servicio necesitan
cambiar los enlaces simblicos a programas de servicio utilizados a
enlaces a direcciones fsicas.
As, una llamada dinmica de programa es ms lenta que una esttica de procedimientos debido al coste de activacin de la primera vez que se realiza en un
grupo de activacin.

186

ILE COBOL/400 Gua del Programador

Las llamadas dinmicas de programa y las llamadas estticas de procedimiento


tambin difieren en el nmero de operandos que pueden pasarse del programa de
llamada ILE COBOL/400 al programa llamado ILE COBOL/400. Puede pasar
hasta 255 operandos utilizando una llamada dinmica de programa. Con una
llamada esttica de procedimiento puede pasar hasta 400 operandos.
Los argumentos diseados como OMITTED o que tienen descriptores operativos
asociados slo pueden pasarse utilizando una llamada esttica de procedimiento.
Estos argumentos no pueden pasarse utilizando llamadas dinmicas de programa.

Realizacin de llamadas estticas de procedimiento utilizando


CALL literal
Puede realizar una llamada esttica de procedimiento utilizando la instruccin de
CALL literal (donde literal es el nombre de un subprograma). Existen tres formas
de especificar que la llamada ser una llamada esttica de procedimiento. Se listan
en orden de prioridad:
|
|

Nota: La expresin IN LIBRARY es incompatible con una llamada esttica de procedimiento.


1. Utilice la expresin LINKAGE de la instruccin CALL.
Especifique LINKAGE TYPE IS PROCEDURE en la instruccin CALL para
asegurarse de que el programa llamado se llamar utilizando una llamada
esttica de procedimiento.
PROCEDURE DIVISION.
..
.
CALL LINKAGE TYPE IS PROCEDURE literal-1
2. Utilice la clusula LINKAGE TYPE del prrafo SPECIAL-NAMES.
Especifique LINKAGE TYPE IS PROCEDURE FOR literal-1 en el prrafo
SPECIAL-NAMES, donde literal-1 es el nombre del programa ILE
COBOL/400 al que est llamando. No tiene que especificar la expresin
LINKAGE TYPE con la instruccin CALL cuando el enlace se haya especificado en el prrafo SPECIAL-NAMES.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
..
.
SPECIAL-NAMES.
LINKAGE TYPE IS PROCEDURE FOR literal-1.
..
.
PROCEDURE DIVISION.
..
.
CALL literal-1.
3. Utilice el parmetro LINKLIT de los mandatos CRTCBLMOD CRTBNDCBL o la
opcin de la instruccin PROCESS asociada.
Especifique *PRC con el parmetro LINKLIT de los mandatos
CRTCBLMOD y CRTBNDCBL, en el momento de la compilacin, para
indicar que se realizarn llamadas estticas de procedimiento para todas
las instrucciones CALL literal-1 externas del programa ILE COBOL/400.
No tiene que especificar la clusula LINKAGE TYPE en el prrafo
SPECIAL-NAMES ni la expresin LINKAGE TYPE con la instruccin CALL
o CANCEL cuando el enlace haya sido definido por el parmetro LINKLIT
de CRTCBLMOD.
Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

187

CRTCBLMOD MODULE(MYLIB/XMPLE1)
SRCFILE(MYLIB/QCBLLESRC) SRCMBR(XMPLE1)
LINKLIT(\PRC)
Codifique las instrucciones CALL de la forma siguiente si ha utilizado el
parmetro LINKLIT de CRTCBLMOD para especificar el tipo de enlace:
PROCEDURE DIVISION.
..
.
CALL literal-1.

Realizacin de llamadas dinmicas de programa utilizando CALL


literal
Puede realizar una llamada dinmica de programa utilizando la instruccin CALL
literal (donde literal es el nombre de un subprograma) o la instruccin CALL identificador. Consulte el apartado Utilizacin de CALL identificador en la pgina 189
para obtener ms informacin sobre CALL identificador. Utilizando CALL literal
existen tres formas de especificar que la llamada ser una llamada dinmica de
programa. Se listan en orden de prioridad:
1. Utilice la expresin LINKAGE de la instruccin CALL.
Especifique LINKAGE TYPE IS PROGRAM en la instruccin CALL para
asegurarse de que el programa llamado se llamar utilizando una llamada
dinmica de programa.
PROCEDURE DIVISION.
..
.
CALL LINKAGE TYPE IS PROGRAM literal-1
2. Utilice la clusula LINKAGE TYPE del prrafo SPECIAL-NAMES.
Especifique LINKAGE TYPE IS PROGRAM FOR literal-1 en el prrafo
SPECIAL-NAMES, donde literal-1 es el nombre del programa ILE
COBOL/400 al que est llamando. No tiene que especificar la expresin
LINKAGE TYPE con la instruccin CALL cuando el enlace se haya especificado en el prrafo SPECIAL-NAMES.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
..
.
SPECIAL-NAMES.
LINKAGE TYPE IS PROGRAM FOR literal-1.
..
.
PROCEDURE DIVISION.
..
.
CALL literal-1.
3. Utilice el parmetro LINKLIT de los mandatos CRTCBLMOD CRTBNDCBL o la
opcin de la instruccin PROCESS asociada.
Especifique *PGM con el parmetro LINKLIT de los mandatos
CRTCBLMOD y CRTBNDCBL, en el momento de la compilacin, para
indicar que se realizarn llamadas dinmicas de programa para todas las
instrucciones CALL literal-1 externas del programa ILE COBOL/400. No
tiene que especificar la clusula LINKAGE TYPE en el prrafo
SPECIAL-NAMES ni la expresin LINKAGE TYPE con la instruccin CALL
o CANCEL cuando el enlace haya sido definido por el parmetro LINKLIT
de CRTCBLMOD.

188

ILE COBOL/400 Gua del Programador

CRTCBLMOD MODULE(MYLIB/XMPLE1)
SRCFILE(MYLIB/QCBLLESRC) SRCMBR(XMPLE1)
LINKLIT(\PGM)
Codifique las instrucciones CALL de la forma siguiente si ha utilizado el
parmetro LINKLIT de CRTCBLMOD para especificar el tipo de enlace:
PROCEDURE DIVISION.
..
.
CALL literal-1.
Una llamada dinmica de programa activa el subprograma en la ejecucin. Utilice
una instruccin de llamada dinmica cuando:
Desee simplificar las tareas de mantenimiento y aprovechar la reutilizacin de
cdigo.
Cuando se cambia un subprograma, deben volverse a enlazar todos los
objetos de mdulo, excepto los programas de servicio que lo llamen de forma
esttica y estn enlazados por copia. Si estn enlazados por referencia,
tampoco tienen que volver a enlazarse siempre que no se cambie la interfaz
entre el subprograma y los objetos de mdulo. Si el subprograma cambiado
se llama dinmicamente, slo deber volver a enlazarse dicho subprograma.
As, las llamadas dinmicas hacen ms fcil el mantener una copia de un subprograma con un nmero mnimo de enlaces.
Los subprogramas llamados con CALL literal se utilizan con poca frecuencia o
son muy grandes.
Si los subprogramas se llaman slo en unas pocas condiciones, las llamadas
dinmicas pueden activar los subprogramas slo cuando sea necesario.
Si los subprogramas son muy grandes o hay muchos subprogramas, la utilizacin de llamadas estticas puede requerir un mayor tamao del conjunto de
trabajo en el almacenamiento principal.

Utilizacin de CALL identificador


Puede utilizar CALL identificador (donde identificador no es un puntero de procedimiento) para llamar a un programa ILE COBOL/400 anidado o a un objeto de
programa. El contenido del identificador determina, en el momento de la ejecucin,
si se llama a un programa anidado o a un objeto de programa. Si el contenido del
identificador coincide con el nombre de un programa anidado visible, la llamada se
dirige al programa anidado. De lo contrario, se realiza una llamada dinmica de
programa a un objeto de programa que tenga el nombre especificado en el contenido del identificador.
|
|

Si se especifica la expresin IN LIBRARY en una instruccin CALL identificador la


llamada se pasa obligatoriamente a un objeto de programa.

|
|

La primera vez que utilice el identificador en una instruccin CALL, se establecer


un puntero abierto que asociar un identificador CALL (y cualquier elemento asociado IN LIBRARY) con un objeto.
Si lleva a cabo una llamada por identificador a un objeto de programa que posteriormente suprime o renombra, debe utilizar la instruccin CANCEL para anular el
puntero abierto asociado con el identificador. Esto asegura que la prxima vez que
utilice el identificador para llamar al objeto de programa, el puntero abierto asociado se establecer de nuevo.
Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

189

El ejemplo siguiente muestra cmo aplicar la instruccin CANCEL a un


identificador:
MOVE "ABCD" TO IDENT-1.
CALL IDENT-1.
CANCEL IDENT-1.
Si aplica la instruccin CANCEL directamente al literal "ABCD", no anular el
puntero abierto asociado con IDENT-1. En su lugar, puede continuar llamando al
programa ABCD simplemente utilizando IDENT-1 en la instruccin CALL.
|
|
|
|
|

El valor del puntero abierto tambin se modifica si se cambia el valor del identificador CALL y se realiza una llamada utilizando este nuevo valor. El valor del
puntero abierto tambin se ve afectado por los elementos asociados IN LIBRARY.
Si se especifica una biblioteca distinta para una instruccin CALL to IDENT-1 distinta a la llamada anterior a IDENT-1, se restablece el puntero abierto.

Utilizacin de CALL puntero de procedimiento


Puede realizar una llamada esttica de procedimiento o una llamada dinmica de
programa utilizando la instruccin CALL puntero de procedimiento.
Antes de utilizar la instruccin CALL puntero de procedimiento, debe establecer el
elemento de datos puntero de procedimiento en un valor de direccin. El elemento
de datos puntero de procedimiento puede establecerse al programa COBOL ms
externo (un procedimiento ILE), un procedimiento ILE en otra unidad de compilacin o un objeto de programa. Utilice el formato 6 de la instruccin SET para
establecer el valor del elemento de datos puntero de procedimiento.
Especifique LINKAGE TYPE IS PROCEDURE en la instruccin SET para establecer el elemento de datos puntero de procedimiento a procedimiento ILE.
Especifique LINKAGE TYPE IS PROGRAM en la instruccin SET para establecer
el elemento de datos puntero de procedimiento a objeto de programa.
Tambin puede utilizar la clusula LINKAGE TYPE del prrafo SPECIAL-NAMES o
el parmetro LINKLIT de los mandatos CRTCBLMOD y CRTBNDCBL para determinar el tipo de objeto al que se establece el elemento de datos puntero de procedimiento. Consulte el apartado Identificacin del tipo de enlace de programas y
procedimientos llamados en la pgina 180 para obtener ms informacin sobre el
establecimiento del tipo de enlace utilizando la clasula LINKAGE TYPE del
prrafo SPECIAL-NAMES o el parmetro LINKLIT de los mandatos CRTCBLMOD
y CRTBNDCBL.
Codifique las instrucciones SET y CALL de la forma siguiente al utilizar CALL
puntero de procedimiento para realizar una llamada esttica de procedimiento:
PROCEDURE DIVISION.
..
.
SET puntero-procedimiento
TO ENTRY LINKAGE TYPE IS PROCEDURE literal-1.
..
.
CALL puntero-procedimiento.
Codifique las instrucciones SET y CALL de la forma siguiente al utilizar CALL
puntero de procedimiento para realizar una llamada dinmica de programa:

190

ILE COBOL/400 Gua del Programador

PROCEDURE DIVISION.
..
.
SET puntero-procedimiento
TO ENTRY LINKAGE TYPE IS PROGRAM literal-1.
..
.
CALL puntero-procedimiento.

Devolucin del control desde un programa ILE COBOL/400


Puede emitir una instruccin STOP RUN, EXIT PROGRAM o GOBACK para
devolver el control desde un programa ILE COBOL/400 llamado.
Debe saber si un programa ILE COBOL/400 es un programa principal o un subprograma para determinar cmo se devuelve el control desde un programa llamado
cuando ocurre un error o finaliza un programa. Vea Programas principales y
subprogramas en la pgina 178 para obtener una descripcin de los programas
principales y los subprogramas.

Devolucin del control desde un programa principal


|
|
|
|
|

|
|
|

Para devolver el control desde un programa principal, utilice STOP RUN, GOBACK
o EXIT PROGRAM junto con la expresin CONTINUE. Las instrucciones STOP
RUN y GOBACK finalizan la unidad de ejecucin y se devuelve el control al llamador del programa principal. No puede utilizarse EXIT PROGRAM sin la expresin CONTINUE para devolver el control desde un programa principal. Cuando se
encuentra EXIT PROGRAM sin la expresin CONTINUE en un programa principal,
no se realiza ninguna operacin y el proceso contina en la siguiente instruccin
del programa principal.

Devolucin del control desde un grupo de activacin *NEW


Si realiza STOP RUN, GOBACK o EXIT PROGRAM con la expresin CONTINUE
desde un programa principal ILE COBOL/400 llamado de un grupo de activacin
*NEW, el grupo de activacin finaliza cuando se devuelve el control al programa de
llamada. El grupo de activacin cerrar todos los archivos y devolver todos los
recursos al sistema.
Como resultado de la finalizacin del grupo de activacin, el programa ILE
COBOL/400 llamado se colocar en su estado inicial.

|
|
|
|
|
|
|

Devolucin del control desde un grupo de activacin con


nombre

|
|
|
|

Si ejecuta las instrucciones STOP RUN o GOBACK desde un programa principal


ILE COBOL/400 llamado en un grupo de activacin con nombre, el grupo de activacin finaliza cuando se devuelve el control al programa de llamada. El grupo de
activacin cerrar todos los archivos y devolver todos los recursos al sistema.

Si realiza EXIT PROGRAM con la expresin CONTINUE desde un programa principal ILE COBOL/400 llamado en un grupo de activacin con nombre, el grupo de
activacin permanece activo y se devuelve el control al programa de llamada.
Todos los archivos y recursos utilizados en el grupo de activacin se dejan en el
estado en que estuvieran cuando se utilizaron por ltima vez.

Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

191

Devolucin desde el grupo de activacin por omisin


(*DFTACTGRP)
Si ejecuta las instrucciones STOP RUN o GOBACK desde un programa principal
ILE COBOL/400 llamado en el grupo de activacin por omisin (*DFTACTGRP) el
grupo de activacin contina activo y se devuelve el control al programa de
llamada. Todos los archivos y recursos utilizados en el grupo de activacin se
dejan en su ltimo estado utilizado.

Devolucin del control desde un subprograma


Para devolver el control desde un subprograma, ste puede finalizar con una instruccin EXIT PROGRAM, GOBACK o STOP RUN. Si el subprograma finaliza con
una instruccin EXIT PROGRAM o GOBACK, el control se devuelve a su llamador
inmediato sin finalizar la unidad de ejecucin. Se genera una instruccin EXIT
PROGRAM implcita si no hay ninguna instruccin ejecutable ms en un programa
llamado. Si el subprograma finaliza con una instruccin STOP RUN, se finalizan
todos los programas de la unidad de ejecucin hasta el lmite de control ms
cercano y el control se devuelve al programa anterior al lmite de control.
Normalmente, un subprograma se deja en su ltimo estado utilizado cuando finaliza con EXIT PROGRAM o GOBACK. La prxima vez que se llame en la unidad
de ejecucin, los valores internos sern los mismos que se han dejado, aunque
todas las instrucciones PERFORM se considerarn finalizadas y se restaurarn a
sus valores iniciales. Por otro lado, se inicializar un programa principal cada vez
que se llame. Existen dos excepciones:
Un subprograma que se llame dinmicamente y luego se cancele estar en el
estado inicial la prxima vez que se llame.
Un programa que tenga la clusula INITIAL especificada en el prrafo
PROGRAM-ID estar en estado inicial cada vez que se llame.

Mantenimiento de la semntica de STOP RUN definida por la unidad


de ejecucin OPM COBOL/400
Para que la instruccin STOP RUN se comporte de forma compatible con una
unidad de ejecucin OPM COBOL/400, debe crearse la aplicacin ILE COBOL/400
utilizando condiciones especficas. Consulte el apartado Unidad de ejecucin
COBOL en la pgina 176 para obtener una descripcin de estas condiciones.

192

ILE COBOL/400 Gua del Programador

Ejemplos de devolucin de control desde un programa ILE COBOL/400


Los ejemplos siguientes muestran el comportamiento de EXIT PROGRAM, STOP
RUN y GOBACK en varias combinaciones de grupos de activacin con Nombre,
*NEW y *DFTACTGP.
CALL A

AG1 - Grupo
activacin nombre

ILE COBOL/4

Programa A

6
6

ILE COBOL/4
ILE COBOL/4

Programa B
Programa C

6
6

ILE COBOL/4
ILE COBOL/4

Programa D
Programa E

Figura 51. Ejemplo de comportamiento de EXIT PROGRAM, STOP RUN y GOBACK en un


nico grupo de activacin con nombre
Instruccin

Programa A

Programa B

Programa C

Programa D

Programa E

EXIT PROGRAM

STOP RUN

GOBACK

Si se codifica EXIT PROGRAM sin la expresin CONTINUE, no se procesa


ninguna operacin ya que la instruccin se encuentra en un programa principal. El proceso contina con la siguiente instruccin del programa. EXIT
PROGRAM con la expresin CONTINUE devuelve el control al llamador del
Programa A y deja activo el grupo de activacin. Todos los archivos y
recursos utilizados en el grupo de activacin se dejan en el estado en que se
utilizaron por ltima vez.

El grupo de activacin permanece activo y se devuelve el control al Programa


C. Todos los archivos y recursos utilizados en el grupo de activacin se dejan
en el estado en que se utilizaron por ltima vez.

El grupo de activacin finaliza y el control se devuelve al llamador del programa principal. El grupo de activacin cerrar todos los archivos del mbito
del grupo de activacin. Se comprometer implcitamente cualquier operacin
pendiente de compromiso del mbito del grupo de activacin. Todos los
recursos asignados al grupo de activacin se devolvern al sistema. Como
resultado de la finalizacin del grupo de activacin, todos los programas
activos del grupo se restablecern a su estado inicial.

|
|
|
|
|
|

Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

193

El grupo de activacin permanece activo y se devuelve el control al Programa


A.Todos los archivos y recursos utilizados en el grupo de activacin se dejan
en el estado en que se utilizaron por ltima vez.
CALL A

AG1 - Grupo
AG2 - Grupo
activacin nombre
activacin nombre

ILE COBOL/4 LC5ILE COBOL/4

Programa A

Programa C

6
6




ILE COBOL/4
ILE COBOL/4
ILE COBOL/4
Programa B
Programa D
Programa E


NOTA:

LC indica un lmite de control.

Figura 52. Ejemplo de comportamiento de EXIT PROGRAM, STOP RUN y GOBACK en


dos grupos de activacin con nombre
Instruccin

|
|
|
|
|
|
|
|

194

Programa A

Programa B

Programa C

Programa D

Programa E

EXIT PROGRAM

STOP RUN

GOBACK

Si se ha utilizado una instruccin EXIT PROGRAM sin la expresin CONTINUE, no se procesa ninguna operacin ya que la instruccin se encuentra
en un programa principal. El proceso contina con la siguiente instruccin del
programa. Si se ha utilizado una instruccin EXIT PROGRAM con la expresin
CONTINUE, el grupo de activacin permanece activo y se devuelve el control
al programa o mandato de llamada. Todos los archivos y recursos utilizados
en el grupo de activacin se dejan en el estado en que se utilizaron por ltima
vez.

El grupo de activacin permanece activo y se devuelve el control al Programa


C. Todos los archivos y recursos utilizados en el grupo de activacin se dejan
en su ltimo estado utilizado.

El grupo de activacin se finaliza y el control se devuelve al llamador del programa principal. El grupo de activacin cerrar todos los archivos del mbito
del grupo de activacin. Se comprometer implcitamente cualquier operacin
pendiente de compromiso del mbito del grupo de activacin. Todos los
recursos asignados al grupo de activacin se devolvern al sistema. Como
resultado de la finalizacin del grupo de activacin, todos los programas
activos del grupo se colocarn en su estado inicial.

El grupo de activacin se finaliza y el control se devuelve al Programa A. El


grupo de activacin cerrar todos los archivos del mbito del grupo de activacin. Se comprometer implcitamente cualquier operacin pendiente de

ILE COBOL/400 Gua del Programador

compromiso del mbito del grupo de activacin. Todos los recursos asignados
al grupo de activacin se devolvern al sistema. Como resultado de la finalizacin del grupo de activacin, todos los programas activos del grupo se colocarn en su estado inicial.
5

El grupo de activacin permanece activo y se devuelve el control al Programa


A.Todos los archivos y recursos utilizados en el grupo de activacin se dejan
en su ltimo estado utilizado.
CALL A

Grupo de
AG1 - Grupo
AG2 - Grupo
activacin \NEW
activacin nombre
activacin nombre




ILE COBOL/4 %LCILE COBOL/4 LC5ILE COBOL/4
Programa B
Programa A
Programa C


ILE COBOL/4 %LC

Programa D

ILE COBOL/4

Programa E

NOTA:

LC indica un lmite de control.

Figura 53. Ejemplo de comportamiento de EXIT PROGRAM, STOP RUN y GOBACK en


mltiples grupos de activacin *NEW y con nombre
Instruccin

|
|
|
|
|
|
|
|

Programa A

Programa B

Programa C

Programa D

Programa E

EXIT PROGRAM

STOP RUN

GOBACK

Si se ha utilizado una instruccin EXIT PROGRAM sin la expresin CONTINUE, no se procesa ninguna operacin ya que la instruccin se encuentra
en un programa principal. El proceso contina con la siguiente instruccin del
programa. Si se ha utilizado una instruccin EXIT PROGRAM con la expresin
CONTINUE, el grupo de activacin permanece activo y se devuelve el control
al programa o mandato de llamada. Todos los archivos y recursos utilizados
en el grupo de activacin se dejan en el estado en que se utilizaron por ltima
vez.

El grupo de activacin permanece activo y se devuelve el control al Programa


C. Todos los archivos y recursos utilizados en el grupo de activacin se dejan
en su ltimo estado utilizado.

El grupo de activacin se finaliza y el control se devuelve al llamador del programa principal. El grupo de activacin cerrar todos los archivos del mbito
del grupo de activacin. Se comprometer implcitamente cualquier operacin
pendiente de compromiso del mbito del grupo de activacin. Todos los
recursos asignados al grupo de activacin se devolvern al sistema. Como

Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

195

resultado de la finalizacin del grupo de activacin, todos los programas


activos del grupo se colocarn en su estado inicial.

|
|
|
|

El grupo de activacin se finaliza y el control se devuelve al Programa A. El


grupo de activacin cerrar todos los archivos del mbito del grupo de activacin. Se comprometer implcitamente cualquier operacin pendiente de
compromiso del mbito del grupo de activacin. Todos los recursos asignados
al grupo de activacin se devolvern al sistema. Como resultado de la finalizacin del grupo de activacin, todos los programas que estuvieran activos en
el grupo de activacin se devolvern a su estado inicial.

Si se ha utilizado una instruccin EXIT PROGRAM sin la expresin CONTINUE, no se procesa ninguna operacin ya que la instruccin se encuentra
en un programa principal. El proceso contina con la siguiente instruccin del
programa.

|
|
|
|
|
|
|

Si se ha utilizado una instruccin EXIT PROGRAM con la expresin CONTINUE, se devuelve el control al programa o mandato de llamada. En un
grupo de activacin *NEW, cuando un programa principal devuelve el control
al llamador, se finaliza el grupo de activacin. El grupo de activacin cerrar
todos los archivos del mbito del grupo de activacin. Las operaciones pendientes de compromiso del mbito del grupo de activacin se comprometern
de forma implcita.

|
|
|
|

Todos los recursos asignados al grupo de activacin se devolvern al sistema.


Como resultado de la finalizacin del grupo de activacin, todos los programas
que estuvieran activos en el grupo de activacin se devolvern a su estado
inicial.
CALL A

Grupo de
AG1 - Grupo
Grupo de
activacin \NEW
activacin nombre
activacin nombre




ILE COBOL/4 %LCILE COBOL/4 5OPM COBOL/4
Programa B
Programa A
Programa C


ILE COBOL/4 %LC

Programa D

OPM COBOL/4

Programa E

NOTA:

LC indica un lmite de control.

Figura 54. Ejemplo de comportamiento de EXIT PROGRAM, STOP RUN y GOBACK en


grupos de activacin *NEW, con nombre y *DFTACTGP
Instruccin

196

Programa A

Programa B

Programa C

Programa D

Programa E

EXIT PROGRAM

STOP RUN

GOBACK

ILE COBOL/400 Gua del Programador

|
|
|
|
|
|
|
|

|
|
|
|

Si se ha utilizado una instruccin EXIT PROGRAM sin la expresin CONTINUE, no se procesa ninguna operacin ya que la instruccin se encuentra
en un programa principal. El proceso contina con la siguiente instruccin del
programa. Si se ha utilizado una instruccin EXIT PROGRAM con la expresin
CONTINUE, el grupo de activacin permanece activo y se devuelve el control
al programa o mandato de llamada. Todos los archivos y recursos utilizados
en el grupo de activacin se dejan en el estado en que se utilizaron por ltima
vez.

El grupo de activacin permanece activo y se devuelve el control al Programa


C. Todos los archivos y recursos utilizados en el grupo de activacin se dejan
en su ltimo estado utilizado.

El grupo de activacin se finaliza y el control se devuelve al llamador del programa principal. El grupo de activacin cerrar todos los archivos del mbito
del grupo de activacin. Se comprometer implcitamente cualquier operacin
pendiente de compromiso del mbito del grupo de activacin. Todos los
recursos asignados al grupo de activacin se devolvern al sistema. Como
resultado de la finalizacin del grupo de activacin, todos los programas
activos del grupo se colocarn en su estado inicial.

El grupo de activacin se finaliza y el control se devuelve al Programa A. El


grupo de activacin cerrar todos los archivos del mbito del grupo de activacin. Se comprometer implcitamente cualquier operacin pendiente de
compromiso del mbito del grupo de activacin. Todos los recursos asignados
al grupo de activacin se devolvern al sistema. Como resultado de la finalizacin del grupo de activacin, todos los programas activos del grupo se colocarn en su estado inicial.

El grupo de activacin permanece activo y se devuelve el control al Programa


A. Se cierran todos los archivos abiertos por el Programa C o el Programa E.
Se comprometer implcitamente cualquier operacin pendiente de compromiso para archivos abiertos por el Programa C o el Programa E. El almacenamiento se libera para el Programa C y para el Programa E.

Si se ha utilizado una instruccin EXIT PROGRAM sin la expresin CONTINUE, no se procesa ninguna operacin ya que la instruccin se encuentra
en un programa principal. El proceso contina con la siguiente instruccin del
programa.

|
|
|
|
|
|
|

Si se ha utilizado una instruccin EXIT PROGRAM con la expresin CONTINUE, se devuelve el control al programa o mandato de llamada. En un
grupo de activacin *NEW, cuando un programa principal devuelve el control
al llamador, se finaliza el grupo de activacin. El grupo de activacin cerrar
todos los archivos del mbito del grupo de activacin. Las operaciones pendientes de compromiso del mbito del grupo de activacin se comprometern
de forma implcita.

|
|
|

Todos los recursos asignados al grupo de activacin se devolvern al sistema.


Como resultado de la finalizacin del grupo de activacin, todos los programas
activos del grupo se colocarn en su estado inicial.

|
|
|

No se procesa ninguna operacin ya que la instruccin se encuentra en un


programa principal. El proceso contina con la siguiente instruccin del programa.

Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

197

Transferencia de informacin sobre cdigos de devolucin de control


(registro especial RETURN-CODE)
Puede utilizar el registro especial RETURN-CODE para transferir y recibir cdigos
de retorno entre programas ILE COBOL/400. Puede establecer el registro especial
RETURN-CODE antes de volver de un programa ILE COBOL/400 llamado.
Cuando se utiliza en programas anidados, el registro especial RETURN-CODE se
define implcitamente como GLOBAL en el programa ILE COBOL/400 ms externo.
Cualquier cambio realizado al registro especial RETURN-CODE es global para
todos los programas ILE COBOL/400 incluidos en el objeto de mdulo.
Cuando un programa ILE COBOL/400 vuelve a su llamador, el contenido de su
registro especial RETURN-CODE se transfiere al registro especial RETURN-CODE
del programa de llamada.
Cuando se devuelve el control al sistema operativo desde un programa principal
ILE COBOL/400, el contenido del registro especial RETURN-CODE se devuelve
como un cdigo de retorno de usuario.

Transferencia y compartimiento de datos entre programas


Existen muchas formas de transferir o compartir datos entre programas ILE
COBOL/400:
Los datos pueden declararse como GLOBAL para que puedan utilizarlos los
programas anidados.
Los datos pueden devolverse al programa de llamada utilizando la expresin
RETURNING de la instruccin CALL.
Cuando se ejecuta la instruccin CALL, los datos pueden transferirse a un programa llamado BY REFERENCE, BY VALUE o BY CONTENT (POR REFERENCIA, POR VALOR o POR CONTENIDO).
Los datos declarados como EXTERNAL pueden compartirlos programas compilados por separado. Los datos EXTERNAL tambin pueden compartirse entre
programas anidados ILE COBOL/400 incluidos en un objeto de mdulo.
Los archivos declarados como EXTERNAL pueden compartirlos programas
compilados por separado. Los archivos EXTERNAL tambin pueden compartirse entre programas anidados ILE COBOL/400 incluidos en un objeto de
mdulo.
Los punteros pueden utilizarse cuando se desee transferir y recibir direcciones
de elementos de datos ubicados dinmicamente.
Los datos pueden transferirse utilizando reas de datos

Comparacin de datos locales y globales


El concepto de datos locales y globales es aplicable slo a los programas
anidados.
Los datos locales son slo accesibles desde dentro del programa en el cual se
declaran los datos locales.Los datos locales no son visibles ni accesibles para
ningn programa fuera del programa donde se han declarado; esto incluye tanto
programas contenidos como los programas que los contienen.

198

ILE COBOL/400 Gua del Programador

Todos los datos se consideran datos locales a menos que se declaren explcitamente como datos globales.
Los datos globales son accesibles desde dentro del programa en el que se han
declarado los datos globales o desde dentro de cualquier otro programa anidado
contenido, directa o indirectamente, en el programa donde se han declarado los
datos globales.
Los nombres de datos, los nombres de archivos y los nombres de registros pueden
declararse como globales.
Para declarar un nombre de datos como global, especifique la palabra GLOBAL en
la entrada de la descripcin de datos donde se declara el nombre de datos o en
otra entrada a la cual est subordinada dicha entrada de descripcin de datos.
Para declarar un nombre de archivo como global, especifique la palabra GLOBAL
en la entrada de descripcin de archivos para ese nombre de archivo.
Para declarar un nombre de registro como global, especifique la palabra GLOBAL
en la entrada de descripcin de registro donde se declara el nombre de registro o,
en el caso de entradas de descripcin de registros en la FILE SECTION, especifique la palabra GLOBAL en la entrada de descripcin de archivos para el nombre
de archivo asociado con la entrada de descripcin de registros.
Para obtener una descripcin ms detallada de la clusula GLOBAL, consulte la
ILE COBOL/400 Reference.

Transferencia de datos utilizando CALL...BY REFERENCE, BY VALUE


o BY CONTENT
BY REFERENCE significa que cualquier cambio que el subprograma realice en las
variables que recibe ser visible para el programa de llamada.
BY CONTENT significa que el programa de llamada slo est transfiriendo el contenido del literal o del identificador. Con una instruccin CALL...BY CONTENT, el
programa llamado no puede cambiar el valor del literal o del identificador del programa de llamada, ni siquiera modificando los parmetros recibidos.
BY VALUE significa que el programa de llamada est transfiriendo el valor del
literal o del identificador, no una referencia al elemento de envo. El programa
llamado puede cambiar el parmetro en el programa llamado. Sin embargo, como
el subprograma slo tiene acceso a una copia temporal del elemento de envo,
dichos cambios no afectan al argumento del programa de llamada.
Transferir elementos de datos BY REFERENCE, BY VALUE o BY CONTENT
depende de lo que desee que el programa haga con los datos:
Si desea que la definicin del argumento de la instruccin CALL en el programa de llamada y la definicin del parmetro en el programa llamado compartan la misma memoria, especifique:
CALL...BY REFERENCE identificador
Cualquier cambio realizado por el subprograma al parmetro afectar al argumento del programa de llamada.

Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

199

Si desea transferir la direccin de una rea de registro a un programa llamado,


especifique:
CALL...BY REFERENCE ADDRESS OF nombre-de-registro
El subprograma recibe el registro especial ADDRESS OF para el nombre de
registro que especifique.
Debe definir el nombre de registro como un elemento de nivel-01 o nivel-77 de
la LINKAGE SECTION del programa llamado y de llamada. Se proporciona un
registro especial ADDRESS OF separado para cada registro de la Linkage
Section.
Si desea transferir la direccin de cualquier elemento de datos en la DATA
DIVISION a un programa llamado, especifique:
CALL...BY CONTENT ADDRESS OF nombre-de-elemento-de-datos
Si no desea que la definicin del argumento de la instruccin CALL en el programa de llamada y la definicin del parmetro en el subprograma llamado
compartan la misma memoria, especifique:
CALL...BY CONTENT identificador
Si desea transferir datos a programas ILE que requieren parmetros BY
VALUE utilice:
CALL...BY VALUE elemento
Si desea transferir un entero numrico de distintas longitudes especifique:
CALL...BY VALUE entero-1 SIZE entero-2
El entero numrico se transfiere como un valor binario de longitud entero-2.La
expresin SIZE es opcional. Si no se especifica, entero-1 se transfiere como
un nmero binario de 4 bytes.
Si desea llamar a una funcin ILE C, C++ o RPG con un valor de retorno de
funcin, utilice:
CALL...RETURNING identificador
Si desea transferir un valor literal a un programa llamado, especifique:
CALL...BY CONTENT literal
El programa llamado no puede cambiar el valor del literal.
Si desea transferir la longitud de un elemento de datos especifique:
CALL...BY CONTENT LENGTH OF identificador
El programa de llamada transfiere la longitud de identificador desde su registro
especial LENGTH OF.
Si desea transferir un elemento de datos y su longitud a un subprograma,
especifique una combinacin de BY REFERENCE y BY CONTENT. Por
ejemplo:
CALL 'ERRPROC' USING BY REFERENCE A
BY CONTENT LENGTH OF A.
Si no desea que el programa llamado reciba un argumento correspondiente o
si desea que el programa llamado utilice el valor por omisin para el argumento, especifique la palabra OMITTED en lugar del elemento de datos en la
instruccin CALL... BY REFERENCE o CALL... BY CONTENT. Por ejemplo:

200

ILE COBOL/400 Gua del Programador

CALL...BY REFERENCE OMITTED


CALL...BY CONTENT OMITTED
En el programa llamado, puede utilizar la API CEETSTA para determinar si un
parmetro especificado es de tipo OMITTED o no.
Si desea transferir elementos de datos con descriptores operativos, especifique la clusula LINKAGE TYPE IS PRC...USING ALL DESCRIBED en el
prrafo SPECIAL-NAMES. Luego utilice la instruccin CALL...BY
REFERENCE, CALL...BY CONTENT o CALL...BY VALUE para transferir los
datos. Los descriptores operativos proporcionan informacin descriptiva al procedimiento ILE llamado en los casos en que el procedimiento ILE llamado no
puede anticipar con precisin la forma de los elementos de datos que se transfieren. Utilice los descriptores operativos cuando los espere un procedimiento
ILE llamado, escrito en un lenguaje ILE distinto, y una API de enlace ILE.
Consulte el manual ILE Conceptos para obtener ms informacin sobre los
descriptores operativos. Por ejemplo:
SPECIAL-NAMES.

LINKAGE TYPE PRC FOR 'ERRPROC'


USING ALL DESCRIBED.

..
.
CALL 'ERRPROC' USING BY REFERENCE identificador.
o
SPECIAL-NAMES.

LINKAGE TYPE PRC FOR 'ERRPROC'


USING ALL DESCRIBED.

..
.
CALL 'ERRPROC' USING BY CONTENT identificador.
Los elementos de datos de un programa de llamada pueden describirse en la
Linkage Section de todos los programas que los llamen directa o indirectamente.
En este caso, el almacenamiento para estos elementos se asigna en el programa
ms externo de llamada.

Descripcin de argumentos en el programa de llamada


Los datos que se transfieren desde un programa de llamada se denominan argumentos. En el programa de llamada, los argumentos se describen en la Data
Division de la misma forma que otros elementos de datos de la Data Division. A
menos que estn en la Linkage Section, el almacenamiento para estos elementos
se asigna en el programa de llamada. Si se hace referencia a unos datos en un
archivo, ste debe estar abierto cuando se haga referencia a los datos. Codifique
la clusula USING de la instruccin CALL para transferir los argumentos.

Descripcin de parmetros en el programa llamado


Los datos recibidos en un programa llamado se denominan parmetros. En el
programa llamado, los parmetros se describen en la Linkage Section. Codifique
la clusula USING despus de la cabecera PROCEDURE-DIVISION para recibir
los parmetros.

Escritura de la Linkage Section en el programa llamado: Debe conocer qu se


est transfiriendo desde el programa de llamada y configurar la Linkage Section en
el programa llamado para que lo acepte. Para el programa llamado, no tiene
importancia qu clusula de la instruccin CALL utilice para transferir los datos (BY
Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

201

REFERENCE, BY VALUE o BY CONTENT). En todos los casos, el programa


llamado debe describir los datos que recibe. Lo hace en la Linkage Section.
El nmero de nombres-de-datos de la lista de identificadores de un programa
llamado no debe ser superior al nmero de nombres-de-datos de la lista de identificadores del programa de llamada. Existe una correspondencia situacional de uno
a uno; es decir, el primer identificador del programa de llamada se transfiere al
primer identificador del programa llamado, y as sucesivamente. El compilador ILE
COBOL/400 no exige la coherencia en cuanto al nmero de argumentos y al
nmero de parmetros, como tampoco lo hace en cuanto al tipo y tamao entre un
argumento y su parmetro correspondiente.
Las incoherencias en cuanto a nmero de argumentos y nmero de parmetros
pueden provocar excepciones en la ejecucin. Para una llamada dinmica de programa, cuando el nmero de argumentos es superior al nmero de parmetros, se
genera una excepcin de ejecucin en el programa de llamada al intentar ejecutar
la instruccin CALL. Esta excepcin puede capturarse si la expresin ON
EXCEPTION est especificada en la instruccin CALL. Cuando el nmero de
argumentos es inferior al nmero de parmetros, no se genera una excepcin de
ejecucin en el programa de llamada al ejecutar la instruccin CALL. En su lugar,
se genera una excepcin de puntero en el programa llamado cuando ste intenta
acceder a un parmetro no proporcionado.
Si un argumento se transfiri BY VALUE, la cabecera PROCEDURE DIVISION del
subprograma debe indicarlo:
PROCEDURE DIVISION USING BY VALUE DATA-ITEM.
Si un argumento se transfiri BY REFERENCE o BY CONTENT, la cabecera
PROCEDURE DIVISION no tiene que indicar cmo se transfiri el argumento. La
cabecera puede ser:
PROCEDURE DIVISION USING DATA-ITEM
o:
PROCEDURE DIVISION USING BY REFERENCE DATA-ITEM

Agrupacin de datos para su transferencia


Considere agrupar todos los elementos de datos que desea transferir entre programas y en colocarlos bajo un elemento nivel-01. Si lo hace, puede transferir un
nico registro nivel-01 entre los programas. Como ejemplo de este mtodo, vea la
Figura 55 en la pgina 203.
Para disminuir an ms la posibilidad de registros no coincidentes, coloque el
registro de nivel-01 en un miembro de copia y cpielo en ambos programas. (Es
decir, cpielo en la Working-Storage Section del programa de llamada y en la
Linkage Section del programa llamado).

202

ILE COBOL/400 Gua del Programador

Descripcin de programa de llamada

Descripcin de programa llamado

WORKING-STORAGE SECTION.
LINKAGE SECTION.

1 LISTA-ARG.

1 LISTA-PARM.

5 PARTCODE PIC A.
5 1 PART-ID PIC X(5).
5 PARTNO
PIC X(4).

1 SALES
PIC 9(5).
5 U-SALES
PIC 9(5).

PROCEDURE DIVISION.

PROCEDURE DIVISION
6
.

USING LISTAPARM.
.

CALL CALLEDPROG
6

USING LISTA-ARG
En el programa llamado, el cdigo

de pieza y el nmero de pieza


se combinan en un elemento datos
En el programa de llamada, se hace
(PARTID). En el programa llamado
referencia al cdigo de pieza
una referencia a PARTID es la
(PARTCODE) y al nmero de pieza
nica referencia valida para ellos
(PARTNO) por separado.
Figura 55. Elementos de datos comunes durante el enlace de subprogramas

Compartimento de datos EXTERNAL


Los programas ILE COBOL/400 compilados por separado (incluso los programas
dentro de una secuencia de programas fuente ILE COBOL/400) pueden compartir
elementos de datos utilizando la clusula EXTERNAL. Estos datos EXTERNAL se
manejan como exportacin dbil. Consulte la publicacin ILE Conceptos para
obtener ms informacin sobre exportaciones fuertes y dbiles.
Especifique la clusula EXTERNAL en la descripcin de datos de nivel 01 de la
Working-Storage Section del programa ILE COBOL/400 y se aplicarn las normas
siguientes:
1. Los elementos subordinados a un elemento de grupo EXTERNAL son tambin
EXTERNAL.
2. El nombre utilizado para el elemento de datos no puede utilizarse en otro elemento EXTERNAL dentro del mismo programa.
3. La clusula VALUE no puede especificarse para ningn elemento de grupo ni
elemento subordinado de tipo EXTERNAL.
4. Los datos EXTERNAL no pueden inicializarse y su valor inicial durante la ejecucin es cero hexadecimal.
Cualquier programa ILE COBOL/400 dentro de una unidad de ejecucin, que tenga
la misma descripcin de datos para el elemento que el programa que contiene el
elemento, puede acceder y procesar el elemento de datos.Por ejemplo, si el programa A tuviera la descripcin de datos siguiente:

Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

203

1 EXT-ITEM1

PIC 99 EXTERNAL.

El programa B podra acceder al elemento de datos si tuviera la descripcin de


datos idntica en su Working-Storage Section.
El tamao debe ser el mismo para el mismo elemento de datos EXTERNAL con
nombre en todos los objetos de mdulo que lo declaren.Si en programas ILE
COBOL/400 mltiples de una unidad de compilacin se declaran elementos de
datos EXTERNAL de tamaos distintos, se utilizar el tamao superior para representar el elemento de datos.
Adems, cuando elementos de datos EXTERNAL de tamao distinto del mismo
nombre se representan en objetos de programa o en programas de servicio mltiples que se activan en el mismo grupo de activacin, y el ltimo objeto de programa o programa de servicio activado tiene un tamao superior para el mismo
elemento de datos EXTERNAL con nombre, la activacin del objeto de programa o
del programa de servicio activado en ltimo lugar fallar.
El compilador ILE COBOL/400 no impone la coherencia de tipos entre los elementos de datos del mismo nombre declarados en programas ILE COBOL/400
mltiples. El usuario debe asegurarse de que la utilizacin de estos elementos de
datos sea coherente.
Recuerde, cualquier programa que tenga acceso a un elemento de datos
EXTERNAL puede cambiar su valor.No utilice esta clusula para elementos de
datos que deba proteger.

Compartimento de archivos EXTERNAL


Utilizar la clusula EXTERNAL para archivos permite a los programas compilados
por separado dentro de la unidad de ejecucin acceder a los archivos comunes.
Estos archivos EXTERNAL se manejan como exportaciones dbiles. Consulte
publicacin ILE Conceptos para obtener ms informacin sobre exportaciones
fuertes y dbiles.
Cuando un archivo EXTERNAL se define en programas ILE COBOL/400 mltiples,
una vez lo abre uno de estos programas ILE COBOL/400, el archivo es accesible a
todos los programas. De forma similar, si uno de los programas cierra el archivo
EXTERNAL, los dems programas ya no podrn acceder al mismo.
Para programas ILE COBOL/400 mltiples en objetos de mdulo mltiples, se
realiza una comprobacin de coherencia de ejecucin la primera vez que se llama
al programa ILE COBOL/400 que declara un archivo EXTERNAL dado, para ver si
la definicin en ese objeto de mdulo es coherente con las definiciones de programas ILE COBOL/400 ya llamados en otros objetos de mdulos. Si se
encuentra alguna incoherencia, se emite el mensaje de excepcin de ejecucin.
El ejemplo de la Figura 56 en la pgina 206 muestra algunas de las ventajas de
utilizar archivos EXTERNAL:
El programa principal puede hacer referencia al rea de registro del archivo,
aunque el programa principal no contenga ninguna instruccin de entradasalida.
Cada subprograma puede controlar una nica funcin de entrada-salida, como
por ejemplo OPEN o READ.

204

ILE COBOL/400 Gua del Programador

Cada programa tiene acceso al archivo.


La tabla siguiente proporciona el nombre del programa (o del subprograma) para el
ejemplo de la Figura 56 en la pgina 206 y describe su funcin.
Tabla 11. Nombres de programas para un ejemplo de entrada-salida que utilice archivos
EXTERNAL
Nombre

Funcin

EF1MAIN

Este es el programa principal. Llama a todos los subprogramas y luego


verifica el contenido de una rea de registro.

EF1OPENO

Este programa abre el archivo externo para salida y comprueba el Cdigo


de estado del archivo.

EF1WRITE

Este programa graba un registro en el archivo externo y comprueba el


Cdigo de estado del archivo.

EF1OPENI

Este programa abre el archivo externo para entrada y comprueba el


Cdigo de estado del archivo.

EF1READ

Este programa lee el registro del archivo externo y comprueba el Cdigo


de estado del archivo.

EF1CLOSE

Este programa cierra el archivo externo y comprueba el Cdigo de estado


del archivo.

El programa de ejemplo tambin utiliza la clusula EXTERNAL para un elemento


de datos de la Working-Storage Section. Este elemento se utiliza para comprobar
los Cdigos de estado de los archivos.

Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

205

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/EXTLFL

AS4SYS

96/7/4 1/49:12

F u e n t e
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN

1
2

3
4
5
6
7
8
9
1
11
12
13
14
15
16
17

18
19
2
21
22
23
24
25
26
27
28
29
3

1 IDENTIFICATION DIVISION.
2 PROGRAM-ID. EF1MAIN.
3\
4\ Este es el programa principal que controla
5\ el proceso del archivo externo.
6\
7
8 ENVIRONMENT DIVISION.
9 INPUT-OUTPUT SECTION.
1 FILE-CONTROL.
11
SELECT EF1
12
ASSIGN TO DISK-EFILE1
13
FILE STATUS IS EFS1
14
ORGANIZATION IS SEQUENTIAL.
15
16 DATA DIVISION.
17 FILE SECTION.
18 FD EF1 IS EXTERNAL
19
RECORD CONTAINS 8 CHARACTERS.
2 1 EF-RECORD-1.
21
5 EF-ITEM-1
PIC X(8).
22
23 WORKING-STORAGE SECTION.
24 1 EFS1
PIC 99 EXTERNAL.
25
26 PROCEDURE DIVISION.
27 EF1MAIN-PROGRAM SECTION.
28 MAINLINE.
29
CALL "EF1OPENO"
3
CALL "EF1WRITE"
31
CALL "EF1CLOSE"
32
CALL "EF1OPENI"
33
CALL "EF1READ"
34
IF EF-RECORD-1 = "Primer registro" THEN
35
DISPLAY "Primer registro correcto"
36
ELSE
37
DISPLAY "Primer registro incorrecto"
38
DISPLAY "Esperaba: Primer registro"
39
DISPLAY "Encontr:
" EF-RECORD-1
4
END-IF
41
CALL "EF1CLOSE"
42
GOBACK.
43 END PROGRAM EF1MAIN.
44
46
\ \ \ \ \

F I N

D E

F U E N T E

\ \ \ \ \

Figura 56 (Parte 1 de 6). Entrada-salida utilizando archivos EXTERNAL

206

ILE COBOL/400 Gua del Programador

S NOMCOPIA

FEC CAMB

Pgina

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/EXTLFL

AS4SYS

96/7/4 1:49:12

Pgina

F u e n t e
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN

1
2

3
4
5
6
7
8
9
1
11
12
13
14
15
16
17

18
19
2
21
22
23

S NOMCOPIA

FEC CAMB

47 IDENTIFICATION DIVISION.
48 PROGRAM-ID. EF1OPENO.
49\
5\ Este programa abre el archivo externo para salida.
51\
52
53 ENVIRONMENT DIVISION.
54 INPUT-OUTPUT SECTION.
55 FILE-CONTROL.
56
SELECT EF1
57
ASSIGN TO DISK-EFILE1
58
FILE STATUS IS EFS1
59
ORGANIZATION IS SEQUENTIAL.
6
61 DATA DIVISION.
62 FILE SECTION.
63 FD EF1 IS EXTERNAL
64
RECORD CONTAINS 8 CHARACTERS.
65 1 EF-RECORD-1.
66
5 EF-ITEM-1
PIC X(8).
67
68 WORKING-STORAGE SECTION.
69 1 EFS1
PIC 99 EXTERNAL.
7
71 PROCEDURE DIVISION.
72 EF1OPENO-PROGRAM SECTION.
73 MAINLINE.
74
OPEN OUTPUT EF1
75
IF EFS1 NOT = THEN
76
DISPLAY "Estado archivo " EFS1 " en OPEN OUTPUT"
77
STOP RUN
78
END-IF
79
GOBACK.
8 END PROGRAM EF1OPENO.
81
83
\ \ \ \ \

F I N

D E

F U E N T E

\ \ \ \ \

Figura 56 (Parte 2 de 6). Entrada-salida utilizando archivos EXTERNAL

Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

207

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/EXTLFL

AS4SYS

96/7/4 1:49:12

F u e n t e
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN

1
2

3
4
5
6
7
8
9
1
11
12
13
14
15
16
17

18
19
2
21
22
23
24

84 IDENTIFICATION DIVISION.
85 PROGRAM-ID. EF1WRITE.
86\
87\ Este programa graba un registro en el archivo externo.
88\
89
9 ENVIRONMENT DIVISION.
91 INPUT-OUTPUT SECTION.
92 FILE-CONTROL.
93
SELECT EF1
94
ASSIGN TO DISK-EFILE1
95
FILE STATUS IS EFS1
96
ORGANIZATION IS SEQUENTIAL.
97
98 DATA DIVISION.
99 FILE SECTION.
1 FD EF1 IS EXTERNAL
11
RECORD CONTAINS 8 CHARACTERS.
12 1 EF-RECORD-1.
13
5 EF-ITEM-1
PIC X(8).
14
15 WORKING-STORAGE SECTION.
16 1 EFS1
PIC 99 EXTERNAL.
17
18 PROCEDURE DIVISION.
19 EF1WRITE-PROGRAM SECTION.
11 MAINLINE.
111
MOVE "Primer registro" TO EF-RECORD-1
112
WRITE EF-RECORD-1
113
IF EFS1 NOT = THEN
114
DISPLAY "Estado archivo " EFS1 " en WRITE"
115
STOP RUN
116
END-IF
117
GOBACK.
118 END PROGRAM EF1WRITE.
119
121
\ \ \ \ \

F I N

D E

F U E N T E

\ \ \ \ \

Figura 56 (Parte 3 de 6). Entrada-salida utilizando archivos EXTERNAL

208

ILE COBOL/400 Gua del Programador

S NOMCOPIA

FEC CAMB

Pgina

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/EXTLFL

AS4SYS

96/7/4 1:49:12

Pgina

11

F u e n t e
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN

1
2

3
4
5
6
7
8
9
1
11
12
13
14
15
16
17

18
19
2
21
22
23

S NOMCOPIA

FEC CAMB

122 IDENTIFICATION DIVISION.


123 PROGRAM-ID. EF1OPENI.
124\
125\ Este programa abre el archivo externo para entrada.
126\
127
128 ENVIRONMENT DIVISION.
129 INPUT-OUTPUT SECTION.
13 FILE-CONTROL.
131
SELECT EF1
132
ASSIGN TO DISK-EFILE1
133
FILE STATUS IS EFS1
134
ORGANIZATION IS SEQUENTIAL.
135
136 DATA DIVISION.
137 FILE SECTION.
138 FD EF1 IS EXTERNAL
139
RECORD CONTAINS 8 CHARACTERS.
14 1 EF-RECORD-1.
141
5 EF-ITEM-1
PIC X(8).
142
143 WORKING-STORAGE SECTION.
144 1 EFS1
PIC 99 EXTERNAL.
145
146 PROCEDURE DIVISION.
147 EF1OPENI-PROGRAM SECTION.
148 MAINLINE.
149
OPEN INPUT EF1
15
IF EFS1 NOT = THEN
151
DISPLAY "Estado archivo " EFS1 " en OPEN INPUT"
152
STOP RUN
153
END-IF
154
GOBACK.
155 END PROGRAM EF1OPENI.
156
158
\ \ \ \ \

F I N

D E

F U E N T E

\ \ \ \ \

Figura 56 (Parte 4 de 6). Entrada-salida utilizando archivos EXTERNAL

Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

209

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/EXTLFL

AS4SYS

96/7/4 1:49:12

F u e n t e
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN

1
2

3
4
5
6
7
8
9
1
11
12
13
14
15
16
17

18
19
2
21
22
23

159 IDENTIFICATION DIVISION.


16 PROGRAM-ID. EF1READ.
161\
162\ Este programa lee un registro del archivo externo.
163\
164
165 ENVIRONMENT DIVISION.
166 INPUT-OUTPUT SECTION.
167 FILE-CONTROL.
168
SELECT EF1
169
ASSIGN TO DISK-EFILE1
17
FILE STATUS IS EFS1
171
ORGANIZATION IS SEQUENTIAL.
172
173 DATA DIVISION.
174 FILE SECTION.
175 FD EF1 IS EXTERNAL
176
RECORD CONTAINS 8 CHARACTERS.
177 1 EF-RECORD-1.
178
5 EF-ITEM-1
PIC X(8).
179
18 WORKING-STORAGE SECTION.
181 1 EFS1
PIC 99 EXTERNAL.
182
183 PROCEDURE DIVISION.
184 EF1READ-PROGRAM SECTION.
185 MAINLINE.
186
READ EF1
187
IF EFS1 NOT = THEN
188
DISPLAY "Estado archivo " EFS1 " en READ"
189
STOP RUN
19
END-IF
191
GOBACK.
192 END PROGRAM EF1READ.
193
195
\ \ \ \ \

F I N

D E

F U E N T E

\ \ \ \ \

Figura 56 (Parte 5 de 6). Entrada-salida utilizando archivos EXTERNAL

210

ILE COBOL/400 Gua del Programador

S NOMCOPIA

FEC CAMB

Pgina

14

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/EXTLFL

AS4SYS

96/7/4 1:49:12

Pgina

17

F u e n t e
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN

1
2

3
4
5
6
7
8
9
1
11
12
13
14
15
16
17

18
19
2
21
22
23

S NOMCOPIA

FEC CAMB

196 IDENTIFICATION DIVISION.


197 PROGRAM-ID. EF1CLOSE.
198\
199\ Este programa cierra el archivo externo.
2\
21
22 ENVIRONMENT DIVISION.
23 INPUT-OUTPUT SECTION.
24 FILE-CONTROL.
25
SELECT EF1
26
ASSIGN TO DISK-EFILE1
27
FILE STATUS IS EFS1
28
ORGANIZATION IS SEQUENTIAL.
29
21 DATA DIVISION.
211 FILE SECTION.
212 FD EF1 IS EXTERNAL
213
RECORD CONTAINS 8 CHARACTERS.
214 1 EF-RECORD-1.
215
5 EF-ITEM-1
PIC X(8).
216
217 WORKING-STORAGE SECTION.
218 1 EFS1
PIC 99 EXTERNAL.
219
22 PROCEDURE DIVISION.
221 EF1CLOSE-PROGRAM SECTION.
222 MAINLINE.
223
CLOSE EF1
224
IF EFS1 NOT = THEN
225
DISPLAY "Estado archivo " EFS1 " en CLOSE"
226
STOP RUN
227
END-IF
228
GOBACK.
229 END PROGRAM EF1CLOSE.
23
\ \ \ \ \

F I N

D E

F U E N T E

\ \ \ \ \

Figura 56 (Parte 6 de 6). Entrada-salida utilizando archivos EXTERNAL

Transferencia de datos utilizando punteros


Puede utilizar un puntero en un programa ILE COBOL/400 cuando desee transferir
y recibir direcciones de un elemento de datos ubicado dinmicamente.
Para obtener una descripcin completa de cmo se utilizan los punteros en un programa ILE COBOL/400, consulte Captulo 11, Utilizacin de punteros en un programa ILE COBOL/400 en la pgina 235.

Transferencia de datos utilizando reas de datos


Un rea de datos es un objeto OS/400 utilizado para comunicar datos, como
valores variables, entre programas de un trabajo y entre trabajos. Un rea de
datos puede crearse y declararse en un programa antes de que se utilice en ese
programa o trabajo. Para obtener informacin sobre cmo crear y declarar un rea
de datos, vea el manual CL Programacin.

Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

211

Utilizacin del rea de datos local


El rea de datos local puede utilizarse para transferir cualquier informacin que
desee entre programas de un trabajo. Esta informacin puede estar formada por
datos sin formato, como mensajes informales, o por un conjunto de campos completamente estructurados o con formato.
|
|
|
|

Los elementos de datos de coma flotante internos y externos pueden transferirse


utilizando el rea de datos local. Los nmeros de coma flotante internos que se
graban en el rea de datos local utilizando la instruccin DISPLAY se convierten a
nmeros de coma flotante externos.
El sistema crea automticamente una rea de datos local para cada trabajo. El
rea de datos local se define fuera del programa ILE COBOL/400 como un rea de
1024 bytes.
Cuando se somete un trabajo, el rea de datos local del trabajo de sumisin se
copia en el rea de datos local del trabajo sometido. Si no hay ningn trabajo de
sumisin, el rea de datos local se inicializa en espacios en blanco.
Un programa ILE COBOL/400 puede acceder al rea de datos local para su trabajo
con las instrucciones ACCEPT y DISPLAY, utilizando un nombre nemotcnico asociado con el nombre de entorno en LOCAL-DATA.
Slo hay una rea de datos local asociada con cada trabajo. Incluso si un slo
trabajo adquiere varias estaciones de trabajo, slo existe una rea de datos local
para ese trabajo. No existe un rea de datos local para cada estacin de trabajo.

|
|
|
|
|

Utilizacin de las reas de datos que cree

|
|
|
|
|
|

Si utiliza los formatos de rea de datos (frente a los formatos de rea de datos
local) de las instrucciones ACCEPT y DISPLAY, podr acceder a estas reas de
datos. La expresin FOR le permite especificar el nombre del rea de datos.
Opcionalmente, tambin puede especificar una expresin IN LIBRARY para indicar
la biblioteca OS/400 en la que existe el rea de datos. Si no se especifica la expresin IN LIBRARY, la biblioteca toma por omisin el valor *LIBL.

|
|
|
|
|
|
|
|
|
|
|

Cuando utiliza la instruccin DISPLAY para grabar datos en un rea de datos que
haya creado, el sistema la bloquea con un bloqueo LEAR (Bloqueo exclusivo permitir lectura) antes de grabar en el rea de datos. Si existe algn otro bloqueo en
el rea de datos, no se aplica el bloqueo LEAR y no se graba en el rea de datos.
Si especifica la expresin WITH LOCK, podr mantener el rea de datos bloqueada una vez se complete la operacin DISPLAY. Si utiliza la instruccin
ACCEPT para recuperar datos de un rea de datos que haya creado, el sistema
aplica un bloqueo LSRD (Bloqueo compartido para lectura) para evitar que se
modifique el rea de datos mientras se lee. Cuando se completa la lectura, se
elimina el bloqueo LSRD y, si se ha especificado una expresin WITH LOCK, se
mantiene un bloqueo LEAR sobre el rea de datos.

Puede transferir datos entre programas utilizando las reas de datos que cree.
Esta informacin puede estar formada por datos sin formato, como mensajes informales o por un conjunto de campos completamente estructurados o con formato.
Debe especificar la biblioteca y el nombre del rea de datos cuando los cree.

212

ILE COBOL/400 Gua del Programador

|
|
|

Con las instrucciones ACCEPT y DISPLAY, si no se ha especificado una expresin


WITH LOCK, se eliminarn todos los bloqueos LEAR realizados con anterioridad a
la instruccin.

|
|
|
|

En ILE COBOL/400 slo se colocar un bloqueo LEAR en el rea de datos mientras est activa la unidad de ejecucin de COBOL (grupo de activacin). Si hay
reas de datos bloqueadas cuando finaliza un grupo de activacin, se eliminarn
los bloqueos.

Una condicin ON EXCEPTION puede deberse a diferentes causas:

El rea de datos especificada para la palabra FOR:

No se encuentra

El usuario no tiene autorizacin sobre el rea de datos

|
|

El rea de datos est bloqueada por un grupo de activacin anterior o por


otro trabajo

|
|

La posicin AT:
Era inferior a 1 o superior a la longitud del rea de datos

|
|
|
|

Los elementos de datos de coma flotante internos y externos pueden transferirse


utilizando un rea de datos. Los nmeros de coma flotante internos que se graban
en el rea de datos utilizando la instruccin DISPLAY se convierten a nmeros de
coma flotante externos.

*
*
*
*
*

ILE COBOL/400 da soporte a reas de datos decimales (*DEC), de caracteres


(*CHAR), lgicas (*LGL) y DDM (*DDM). Con independencia del tipo de rea de
datos, la informacin que se mueve a un rea de datos y desde la misma se justifica por la izquierda. Cuando se hace referencia a un rea de datos decimal o a
un rea de datos lgica, si se especifica la posicin AT sta debe ser 1.

*
*
*
*

Los datos se mueven a o desde un rea de datos decimal en formato empaquetado. Un rea de datos decimal se crea con un nmero de dgitos totales y de
dgitos decimales determinado. Este mismo nmero de dgitos debe declararse en
un programa ILE COBOL/400 que acceda al rea de datos decimal. Por ejemplo:

*
*
*
*
*
*
*
*

Mandato CL para crear el rea de datos:


CRTDTAARA DTAARA(QGPL/DECDATA) TYPE(\DEC) LEN(5 2)
Programa ILE COBOL/400 parcial para acceder al rea de datos:
WORKING-STORAGE SECTION.
1 data-value.
5 returned-packed1 pic s9(3)v9(2) packed-decimal.
PROCEDURE DIVISION.
move 345.67 to returned-packed1.

*
*

DISPLAY data-value UPON data-area


FOR "DECDATA" LIBRARY "QGPL".

*
*

ACCEPT
data-value FROM data-area
FOR "DECDATA" LIBRARY "QGPL".

Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

213

Utilizacin del rea de datos de parmetros de inicializacin de


programa (PIP)
El rea de datos PIP la utiliza un trabajo de prearranque. Generalmente, un
trabajo de prearranque es un trabajo de un sistema remoto bajo ICF que se
arranca y est preparado para ejecutarse hasta que se le llama.
Si utiliza un trabajo de prearranque, no tiene que esperar a que el programa que
llama pase por el proceso de iniciacin de trabajo. La iniciacin de trabajo se
realiza antes de que un programa pueda realmente arrancar. Como la iniciacin
del trabajo ya se ha realizado, un trabajo de prearranque permite al programa
arrancar ms rpidamente una vez recibida la peticin de arranque del programa.
Un programa ILE COBOL/400 puede acceder al rea de datos PIP para su trabajo
con la instruccin ACCEPT, utilizando un nombre nemotcnico asociado con el
nombre de funcin en PIP-DATA.
El rea de datos PIP es un elemento alfanumrico de 2.000 bytes y contiene parmetros recibidos desde un programa de llamada. Proporciona los parmetros de
inicializacin del programa que, en trabajos de no prearranque, se proporcionan a
travs de parmetros COBOL estndar.
Utilice una instruccin ACCEPT de Formato 5 para acceder al rea de datos PIP,
similar a la forma de utilizar una instruccin ACCEPT de Formato 4 para leer el
rea de datos local. Tenga en cuenta que no puede actualizar el rea de datos
PIP utilizando ILE COBOL/400. Vea la ILE COBOL/400 Reference para obtener
informacin sobre sintaxis detallada.
Para obtener ms informacin relacionada con los trabajos de prearranque y el
rea de datos PIP, consulte el manual Gestin de Trabajos y el CL Programacin.

Efecto de EXIT PROGRAM, STOP RUN, GOBACK y CANCEL en


archivos internos
Las instrucciones siguientes afectan el estado de un archivo de forma distinta:
Una instruccin EXIT PROGRAM no cambia el estado de ninguno de los
archivos de una unidad de ejecucin a menos que:
El programa ILE COBOL/400 que emite EXIT PROGRAM tenga el atributo
INITIAL. Si lo tiene, se cerrarn todos los archivos internos definidos en
ese programa.
|
|
|
|
|

Haya emitido una instruccin EXIT PROGRAM con la expresin CONTINUE en el programa principal de un grupo de activacin *NEW. En este
caso, se devuelve el control del programa principal al de llamada y ello
provoca a su vez la finalizacin del grupo de activacin *NEW y el cierre
de todos los archivos del mbito del grupo de activacin.
Una instruccin STOP RUN, realizada en un lmite de control fijo, cierra todos
los archivos de una unidad de ejecucin COBOL.
Una instruccin GOBACK emitida desde un programa principal cierra todos los
archivos de una unidad de ejecucin. Una instruccin GOBACK emitida desde
un programa principal acta de la misma forma que la instruccin STOP RUN.
Una instruccin GOBACK emitida desde un subprograma no cambia el estado
de ninguno de los archivos de una unidad de ejecucin, a menos que el pro-

214

ILE COBOL/400 Gua del Programador

grama ILE COBOL/400 que emite la instruccin GOBACK tenga el atributo


INITIAL. Si lo tiene, ste cerrar todos los archivos internos definidos en ese
programa. Una instruccin GOBACK emitida desde un subprograma acta de
la misma forma que la instruccin EXIT PROGRAM.
Una instruccin CANCEL restablece el almacenamiento que contiene informacin sobre el archivo interno. Si el programa tiene archivos internos que
estn abiertos cuando se procesa la instruccin CANCEL, estos archivos
internos se cerrarn cuando se cancele el programa. El programa ya no
puede utilizar los archivos a menos que los vuelva a abrir. Si el programa
cancelado se llama de nuevo, el programa considerar que el archivo est
cerrados. Si el programa abre el archivo, se establecer un nuevo enlace con
el archivo.

Cancelacin de un programa ILE COBOL/400


|
|
|

Cuando un subprograma finaliza con EXIT PROGRAM o GOBACK, se queda en el


estado en el que se utiliz por ltima vez, a menos que tenga el atributo INITIAL.
Un subprograma que utilice la instruccin EXIT PROGRAM con la expresin AND
CONTINUE RUN UNIT tambin se deja en el estado en que se utiliz por ltima
vez. La prxima vez que se llame en la unidad de ejecucin, sus valores internos
estarn igual que se dejaron, excepto para las instrucciones PERFORM, que se
restablecen.
Para restablecer los valores internos de un subprograma a su estado inicial antes
de volver a llamarlo, debe cancelar el subprograma. La cancelacin del subprograma asegura que la prxima vez que se llame, ste estar en su estado inicial.

Cancelacin desde otro programa ILE COBOL/400


En ILE COBOL/400, utilice la instruccin CANCEL para cancelar un subprograma.
El subprograma debe estar en el mismo grupo de activacin que el programa que
lo est cancelando para que funcione la instruccin CANCEL.
Despus de ejecutar una instruccin CANCEL para un subprograma llamado, ese
subprograma ya no tiene ninguna conexin lgica con el programa. El contenido
de los elementos de datos en registros de datos EXTERNAL y archivos
EXTERNAL descritos por el subprograma no cambia cuando se cancela un subprograma. Si posteriormente se ejecuta una instruccin CALL en la unidad de ejecucin que hace referencia al mismo subprograma, al entrar al subprograma ste se
mostrar en su estado inicial.
Los subprogramas llamados pueden contener instrucciones CANCEL; sin embargo,
un subprograma llamado no debe contener una instruccin CANCEL que cancele,
directa o indirectamente, su programa de llamada o cualquier otro programa superior en la jerarqua de llamadas. Si un subprograma llamado intenta cancelar el
programa de llamada, no se tendr en cuenta la instruccin CANCEL del subprograma.
Un programa nombrado en una instruccin CANCEL no debe hacer referencia a
ningn programa que se haya llamado y que an no haya devuelto el control al
programa de llamada. Un programa puede cancelar los programas a los que se
haya llamado pero que ya hayan devuelto el control siempre que estn en el
mismo grupo de activacin. Por ejemplo:

Captulo 9. Llamada y compartimiento de datos entre programas ILE COBOL/400

215

A llama a B y B llama a C

Cuando A recibe el control,


puede cancelar C.

A llama a B y A llama a C

Cuando C recibe el control,


puede cancelar B.

Nota: Al cancelar un objeto de programa que contiene programas ILE


COBOL/400 mltiples, slo se cancela el programa ILE COBOL/400 asociado con el PEP del objeto de programa.
Consulte la ILE COBOL/400 Reference para obtener una descripcin completa de
la instruccin CANCEL.

Cancelacin desde otro lenguaje


Puede cancelar un programa ILE COBOL/400 principal desde ILE RPG/400, ILE
C/400 y ILE CL, llamando a su procedimiento de cancelacin mediante una
llamada esttica de procedimientos. El nombre del procedimiento de cancelacin
se forma tomando el nombre del programa ILE COBOL/400 ms externo y
aadindole el sufijo _reset.
No puede cancelar un programa ILE COBOL/400 desde un programa OPM
COBOL/400 ni desde un programa OPM RPG/400.
No utilice el mandato de CL Reclamar recursos (RCLSRC) para cancelar un programa ILE COBOL/400. Si se emite RCLRSC dentro de un grupo de activacin
ILE, provocar una excepcin. Para obtener ms informacin sobre el mandato
RCLRSC, consulte el manual CL Reference.

216

ILE COBOL/400 Gua del Programador

Captulo 10. Llamada de datos y compartimento de datos


con otros lenguajes
ILE COBOL/400 puede llamar a otros lenguajes ILE, OPM y EPM o ser llamado
por ellos.
En este captulo se describe:
cmo llamar y cmo pasar datos a otro lenguaje desde ILE COBOL/400
cmo se devuelve el control a ILE COBOL/400 desde otro lenguaje
cmo emitir un mandato CL desde un programa ILE COBOL/400
cmo incluir sentencias SQL (Lenguaje de Consulta Estructurada) en el programa ILE COBOL/400
En general:
Si el programa ILE COBOL/400 llama a otro lenguaje, utilice una instruccin
CALL con la expresin USING que seale a los elementos que constituirn la
lista de parmetros. El control se devuelve al programa en la siguiente instruccin despus de la instruccin CALL (a menos que el programa al que se
llama o cualquier programa al que ste llame termine la unidad de ejecucin).
Si el programa ILE COBOL/400 es llamado con parmetros por otro lenguaje,
necesitar una expresin USING en la PROCEDURE DIVISION y un apartado
Linkage Section en el que se describan los parmetros que se han de recibir.
El programa ILE COBOL/400 puede devolver el control al programa que le
llama con una instruccin GOBACK o una instruccin EXIT PROGRAM. El
programa ILE COBOL/400 puede terminar la unidad de ejecucin con una instruccin STOP RUN o GOBACK siempre y cuando el lmite de control ms
prximo sea fijo; la unidad de ejecucin no terminar si dicho lmite es variable.
Para obtener una descripcin completa de la manera de llamar a un programa
ILE COBOL/400 desde otro lenguaje, consulte la gua de programacin de
dicho lenguaje.
Una cuestin que debe considerar a la hora de pasar o recibir datos con programas no ILE COBOL/400 es la coincidencia de las listas de parmetros. Si el
programa ILE COBOL/400 llama a un programa no ILE COBOL/400, ha de tener
claro que es lo que espera como entrada y configurar los datos en consecuencia.
Si el programa es llamado, debe saber qu es lo que se pasar y configurar el
apartado Linkage Section para aceptarlo.
Otra cuestin a tener en cuenta es el tratamiento del registro especial
RETURN-CODE . Dicho registro no puede establecerlo un programa no ILE
COBOL/400. Cuando el registro especial RETURN-CODE contiene un valor incorrecto despus de haberse devuelto el control desde un programa al que se ha
llamado, establezca el registro especial RETURN-CODE con un valor que tenga
significado antes de que el programa ILE COBOL/400 devuelva el control al programa de llamada. Si no lo hace as, se pasar un cdigo de retorno incorrecto al
programa que realiza la llamada.

Copyright IBM Corp. 1994, 1996

217

Llamada a programas y procedimientos ILE C/400 y VisualAge C++


para OS/400
Nota: Todas las referencias realizadas a ILE C/400 es este apartado son pertinentes tambin para VisualAge C++ para OS/400.
Un programa ILE COBOL/400 puede llamar a programas y procedimientos ILE
C/400* utilizando llamadas dinmicas a programas o llamadas estticas a procedimientos.
Cuando se utiliza una llamada dinmica a programas para llamar a un programa
ILE C/400, el programa ILE C/400 debe compilarse y enlazarse como un objeto de
programa separado. Cuando se utiliza una llamada esttica a procedimientos para
llamar a un procedimiento ILE C/400, el procedimiento ILE C/400 debe compilarse
primero en un objeto de mdulo y enlazarse despus al programa ILE COBOL/400
de llamada. En ILE C/400, un procedimiento ILE corresponde a una funcin ILE
C/400. Consulte la publicacin ILE C/400 Programmers Guide para obtener una
descripcin de la compilacin y vinculacin de programas y procedimientos ILE
C/400.
Para llamar a un programa o procedimiento ILE C/400 desde un programa ILE
COBOL/400, utilice la instruccin CALL literal (donde literal es el nombre del programa o procedimiento ILE C/400). Para llamar al programa o procedimiento ILE
C/400, escriba la instruccin CALL literal de la misma manera que lo hara si
llamase a otro subprograma ILE COBOL/400. Consulte el apartado Utilizacin de
llamadas estticas de procedimiento y llamadas dinmicas de programa en la
pgina 186 para obtener informacin detallada sobre la manera de escribir la instruccin CALL en el programa ILE COBOL/400 para llamar a un programa ILE
C/400 con llamadas dinmicas a programas o llamadas estticas a procedimientos.
Tambin puede llamar a un programa ILE C/400 desde un programa ILE
COBOL/400 utilizando la instruccin CALL identificador. Consulte el apartado Utilizacin de CALL identificador en la pgina 189 para obtener ms informacin
sobre CALL identificador.
Como alternativa, puede utilizar CALL puntero de procedimiento para llamada a un
programa o procedimiento ILE C/400 desde un programa ILE COBOL/400. Consulte el apartado Utilizacin de CALL puntero de procedimiento en la pgina 190
para obtener ms informacin sobre CALL puntero de procedimiento. Un puntero
de procedimiento en ILE COBOL/400 es similar a un puntero de funcin en ILE
C/400. Puede pasar un puntero de procedimiento como argumento en la instruccin CALL desde ILE COBOL/400 a una funcin ILE C/400 y hacer que la funcin
ILE C/400 defina su parmetro como un puntero de funcin.
Slo puede llamar a una funcin ILE C/400 que devuelva un valor si se ha especificado la expresin RETURNING de la instruccin ILE COBOL/400 CALL.
Dos o ms programas ILE C/400 del mismo grupo de activacin pueden interactuar
con los recursos de ejecucin de los dems. Consulte la publicacin ILE C/400
Programmers Guide para obtener una descripcin de cmo se consigue esto. As
pues, debe asegurarse de que los programas ILE C/400 a los que llama desde el
programa ILE COBOL/400 estn diseados para trabajar conjuntamente en el
mismo grupo de activacin. Dos programas ILE C/400 del mismo grupo de activacin pueden compartir cosas tales como errno, vectores de seal y agru-

218

ILE COBOL/400 Gua del Programador

paciones de almacenamiento. Si el programa ILE COBOL/400 necesita llamar a


ms de un programa ILE C/400 que no estn diseados para compartir la misma
ejecucin, especifique un nombre diferente para el grupo de activacin en el se
ejecutar el programa ILE C/400.
ILE C/400 permite la recursividad, pero ILE COBOL/400 no. Si una funcin ILE
C/400 llama a un programa ILE COBOL/400 de forma recursiva, desde el programa ILE COBOL/400 se generar un mensaje de error en ejecucin.
Para llamar a una funcin ILE C/400 desde un programa ILE COBOL/400, es
posible que el nombre de la funcin ILE C/400 a la que se llama deba ser sensible
a las maysculas y minsculas, tener una longitud superior a 10 caracteres (hasta
256) y contener ciertos caracteres especiales. En tal caso, utilice una llamada esttica a procedimientos y compile el programa ILE COBOL/400 con el valor
*NOMONOPRC del parmetro OPTION de los mandatos CRTCBLMOD o
CRTBNDCBL.
Cuando se llama a un procedimiento VisualAge C++ for OS/400 desde ILE
COBOL/400, las palabras clave extern "COBOL" o extern "C" deben colocarse en
el prototipo de funcin ILE C++ para impedir la mutilacin del nombre de funcin
ILE C++. Utilice extern "C" si ILE COBOL/400 pasa argumentos BY VALUE a ILE
C++.

Transferencia de datos a un programa o procedimiento ILE C/400


Puede pasar datos a un programa o procedimiento ILE C/400 al que se haya
llamado utilizando CALL...BY REFERENCE, CALL...BY VALUE o CALL...BY
CONTENT. Consulte el apartado Transferencia de datos utilizando CALL...BY
REFERENCE, BY VALUE o BY CONTENT en la pgina 199 para obtener una
descripcin de la utilizacin de CALL...BY REFERENCE, CALL...BY VALUE o
CALL...BY CONTENT.
Cuando se pasan datos al programa ILE C/400 con CALL...BY REFERENCE, en la
lista de argumentos aceptada por el programa ILE C/400 se coloca un puntero que
seala al dato.
Cuando se pasan datos al programa ILE C/400 con CALL...BY CONTENT, el valor
del elemento de datos se copia en una ubicacin temporal y, a continuacin, en la
lista de argumentos aceptada por el programa ILE C/400 se coloca un puntero que
contiene la direccin de la ubicacin temporal de la copia.
Para CALL...BY VALUE, el valor del dato se coloca en la lista de argumentos
aceptada por el programa ILE C/400. CALL...BY VALUE puede utilizarse para
llamar a procedimientos ILE C/400, pero no para llamar a objetos de programa ILE
C/400.
En el programa ILE COBOL/400, describa los argumentos que desea pasar al programa o procedimiento ILE C/400 en el apartado Data Division de la misma forma
en que se describen otros datos en Data Division. Consulte el apartado Transferencia y compartimiento de datos entre programas en la pgina 198 para obtener
una descripcin de la manera de describir los argumentos que desee pasar.
Cuando el objeto de programa ILE C/400 llamado empiece a ejecutarse, se llamar
de forma automtica a la funcin main. Cada objeto de programa ILE C/400 debe
tener una funcin denominada main. Al pasar parmetros al objeto de programa
Captulo 10. Llamada de datos y compartimento de datos con otros lenguajes

219

ILE C/400, debe declarar dos parmetros con la funcin main. Aunque puede darse
cualquier nombre a dichos parmetros, normalmente se hace referencia a ellos
como argc y argv. El primer parmetro, argc (recuento de argumentos), tiene el
tipo int e indica cuntos argumentos se han facilitado en la instruccin CALL que
ha llamado al objeto de programa ILE C/400. El segundo parmetro, argv (vector
de argumentos), tiene la matriz tipo de puntero que seala a los objetos de matriz
char.
El valor de argc indica el nmero de punteros de la matriz argv. Si hay disponible
un nombre de programa, el primer elemento de argv seala a la matriz de caracteres que contiene el nombre de invocacin del programa ILE C/400 que se est
ejecutando.Los elementos restantes de argv contienen punteros que sealan a los
parmetros que se estn pasando al programa ILE C/400 al que se llama. El
ltimo elemento, argv[argc], siempre contiene NULL.
Consulte la publicacin ILE C/400 Programmers Guide para obtener ms informacin sobre la descripcin de parmetros en el programa o procedimiento ILE
C/400 al que se llama.

Compatibilidad de tipos de datos entre ILE C/400 e ILE


COBOL/400
ILE C/400 e ILE COBOL/400 tienen tipos de datos diferentes.Cuando desee pasar
datos entre programas escritos en ILE C/400 e ILE COBOL/400, debe tener presentes dichas diferencias. Algunos tipos de datos de ILE C/400 e ILE COBOL/400
carecen de equivalente directo en el otro lenguaje.
La Tabla 12 muestra la compatibilidad de tipos de datos entre ILE COBOL/400 e
ILE C/400.
Tabla 12 (Pgina 1 de 2). Compatibilidad de tipos de datos ILE COBOL/400 con ILE C/400
ILE COBOL/400

Declaracin en prototipo
de ILE C/400

PIC X(n).

char[n]
o
char *

Campo de tipo carcter en el


que n=1 a 3 000 000.

PIC X(6).

char[6]

Campo de fecha.

PIC X(5).

char[5]

Campo de da.

PIC X.

char

Campo de da de la semana.

PIC X(8).

char[8]

Campo de hora.

PIC X(n).

char[n]

26

Campo de indicacin de la
hora.

PIC G(n)

char[2n]

2n

Campo grfico.

PIC 1 INDIC ..

char

Indicador.

PIC S9(n) DISPLAY

char[n]

Decimal con zona.

PIC S9(n-p)V9(p) COMP-3

decimal(n,p)

n/2+1

Decimal empaquetado.

PIC S9(n-p)V9(p)
PACKED-DECIMAL.

decimal(n,p)

n/2+1

Decimal empaquetado.

PIC S9(4) COMP-4.

short int

220

ILE COBOL/400 Gua del Programador

Longitud

Descripcin

Entero con signo de 2 bytes


con un rango de -9999 a
+9999.

Tabla 12 (Pgina 2 de 2). Compatibilidad de tipos de datos ILE COBOL/400 con ILE C/400
ILE COBOL/400

Declaracin en prototipo
de ILE C/400

Longitud

PIC S9(4) BINARY.

short int

Entero con signo de 2 bytes


con un rango de -9999 a
+9999.

PIC S9(9) COMP-4.

int

Entero con signo de 4 bytes


con un rango de -999999999
a +999999999.

PIC S9(9) BINARY.

int

Entero con signo de 4 bytes


con un rango de -999999999
a +999999999.

PIC S9(9) COMP-4.

long int

Entero con signo de 4 bytes


con un rango de -999999999
a +999999999.

PIC S9(9) BINARY.

long int

Entero con signo de 4 bytes


con un rango de -999999999
a +999999999.

PIC S9(18) COMP-4.

No est soportado.

Entero de 8 bytes.

PIC S9(18) BINARY.

No est soportado.

Entero de 8 bytes.

05 VL-FIELD.
10 i PIC S9(4) COMP-4.
10 data PIC X(n).

_Packed struct {short i;


char[n]}

05 n PIC 9(9) COMP-4.


05 x redefines n PIC X(4).

struct {unsigned int : n}x;

Los campos de bit pueden


manipularse con literales
hexadecimales.

01 record
05 field1...
05 field2...

struct

Estructura. Utilice el calificador _Packed en la estructura. Las estructuras deben


pasarse como puntero a la
estructura si desea cambiar
el contenido de la estructura.

USAGE IS POINTER

16

Puntero.

PROCEDURE-POINTER

pointer to function

16

Puntero de 16 bytes que


seala a un procedimiento.

USAGE IS INDEX

int

Entero de 4 bytes.

REDEFINES

union.element

Elemento de una unin.

OCCURS

data_type[n]

USAGE IS COMP-1

float

Coma flotante de 4 bytes.

USAGE IS COMP-2

double

Coma flotante de 8 bytes.

No est soportado.

long double

Doble largo de 8 bytes.

No est soportado.

enum

n+2

n*(longitud
del tipo de
datos)

1, 2, 4

Descripcin

Campo de longitud variable


en el que i es la longitud prevista y n la longitud mxima.

Matriz.

Enumeracin.

Nota: Para todos los elementos de datos COMP-4 y BINARY, las limitaciones de rango indicadas son pertinentes slo cuando se especifica el valor *STDTRUNC para el parmetro OPTION de los mandatos
CRTCBLMOD o CRTBNDCBL. Si se utiliza *NOSTDTRUNC, no es necesario observar las restricciones de rango.

Captulo 10. Llamada de datos y compartimento de datos con otros lenguajes

221

Compartir datos externos con un programa o procedimiento ILE C/400


Los datos externos pueden compartirse entre un programa ILE COBOL/400 y otro
ILE C/400. Para que un dato pueda compartirse, debe estar definido con el mismo
nombre y descripcin en el programa ILE COBOL/400 y el ILE C/400. Si los datos
externos que se han de compartir entre el programa ILE C/400 y el ILE
COBOL/400 estn definidos con un tamao diferente en los programas, el tamao
de los datos externos se ajustar por fuerza al definido con la palabra clave extern
en el programa ILE C/400.
El programa ILE COBOL/400 y el ILE C/400 deben estar vinculados estticamente
entre s para que los datos externos puedan compartirse.
En el programa ILE COBOL/400, el dato debe estar descrito con la clusula
EXTERNAL en el apartado Working Storage Section. Consulte el apartado
Compartimento de datos EXTERNAL en la pgina 203 o el apartado referente a
la clusula EXTERNAL de ILE C/400 para obtener una descripcin ms amplia de
la forma en que se utilizan los datos externos en un programa ILE COBOL/400.
En el programa ILE C/400, el dato debe declararse utilizando la palabra clave
extern. Consulte la publicacin ILE C/400 Programmers Guide para obtener una
descripcin detallada de la palabra clave extern.

Devolucin del control desde un programa o procedimiento ILE C/400


La palabra clave return en ILE C/400 hace que se devuelva el control al programa
que llama. Si la palabra clave ILE C/400 return devuelve otra cosa que no sea
una anulacin (VOID), la instruccin ILE COBOL/400 CALL debe tener una expresin de retorno. Adems, el tipo de datos y la longitud del elemento devuelto desde
ILE C/400 debe coincidir con el tipo de datos y la longitud del identificador de la
sentencia RETURNING de la instruccin de llamada COBOL.
Cuando se emite return desde un programa ILE C/400, es posible que provoque
la finalizacin del grupo de activacin ILE en el que se est ejecutando el programa ILE C/400 al que se ha llamado. Si se ha definido el programa ILE C/400
para que se ejecute en un grupo de activacin *NEW, al emitir return cerca de un
lmite de control fijo finalizar el grupo de activacin en el que se estaba ejecutando el programa ILE C/400. Si se ha definido el programa ILE C/400 para que
se ejecute en un grupo de activacin *CALLER o en un grupo de activacin con
nombre, al emitir return el grupo de activacin en el que se estaba ejecutando el
programa ILE C/400 permanece activo. Una llamada posterior al programa ILE
C/400 en este grupo de activacin hallar al programa ILE C/400 en el estado en
que se haya utilizado por ltima vez.
La funcin exit(n) puede hacer que se devuelva el control al lmite de control ms
cercano. Una condicin de excepcin puede provocar la llamada a un manejador
de excepciones o la devolucin del control al lmite de control ms prximo.
Cuando el programa ILE C/400 se ejecuta en un grupo de activacin con un
nombre distinto del que tiene el grupo de activacin del programa ILE COBOL/400
que llama, exit(n) o una excepcin sin manejar hacen que ocurra lo siguiente.
Cuando exit(n) o la excepcin sin manejar se producen cerca de un lmite de
control fijo, finaliza el grupo de activacin en el que se ejecuta el programa ILE
C/400. Si se producen cerca de un lmite de control variable, el grupo de activacin
permanece activo. Si una excepcin sin manejar finaliza el grupo de activacin en

222

ILE COBOL/400 Gua del Programador

el que se est ejecutando el programa ILE C/400, se activa el mensaje de escape


CEE9901 en el grupo de activacin del programa ILE COBOL/400 que llama.
Cuando el programa ILE C/400 y el programa ILE COBOL/400 que llama se ejecutan en el mismo grupo de activacin, exit(n) o una excepcin sin manejar
hacen que ocurra lo siguiente. Si exit(n) o la excepcin sin manejar se producen
cerca de un lmite de control fijo, finaliza el grupo de activacin, incluido el programa ILE COBOL/400. Si una excepcin sin manejar finaliza el grupo de activacin en el que se est ejecutando el programa ILE C/400 y el programa ILE
COBOL/400, el programa anterior al lmite de control fijo recibe el mensaje de
escape CEE9901. Si exit(n) o la excepcin sin manejar se producen cerca de un
lmite de control variable, finalizan todos los programas y procedimientos, incluido
el programa ILE COBOL/400, existentes entre el programa ILE C/400 desde el que
se haya realizado exit(n) y el programa del lmite de control variable.
Se devuelve el control al programa ILE COBOL/400 en la instruccin siguiente
despus de la instruccin CALL si el programa al que se ha llamado finaliza sin
ninguna excepcin.Si dicho programa finaliza con una excepcin, puede que se
llame a un procedimiento de manejo de excepciones identificado en el programa
ILE COBOL/400. Consulte el Captulo 12, Manejo de errores y excepciones ILE
COBOL/400 en la pgina 261 para obtener una descripcin completa de la transferencia del control a un procedimiento de manejo de excepciones.
El programa al que se llama tambin puede enviar un mensaje de escape despus
del programa ILE COBOL/400 que llama saltndoselo. En tal caso, se cancela la
invocacin del programa ILE COBOL/400. El resultado de cancelar la invocacin
es similar a si volviera del programa ILE COBOL/400.

Llamada a programas y procedimientos ILE RPG/400


Un programa ILE COBOL/400 puede llamar a programas y procedimientos ILE
RPG/400* utilizando llamadas dinmicas a programa o llamadas estticas a procedimientos.
Cuando se utiliza una llamada dinmica a programa para llamar a un programa ILE
RPG/400, el programa ILE RPG/400 debe compilarse y vincularse como un objeto
de programa separado.Cuando se utiliza una llamada esttica a procedimiento
para llamar a un procedimiento ILE RPG/400, el procedimiento ILE RPG/400 debe
compilarse primero en un objeto de mdulo y vincularse despus al programa ILE
COBOL/400 que llama. Consulte la publicacin ILE RPG/400 Gua del programador para obtener una descripcin de la compilacin y vinculacin de los programas y procedimientos ILE RPG/400.
Para llamar a un programa o procedimiento ILE RPG/400 desde un programa ILE
COBOL/400, utilice la instruccin CALL literal (donde literal es el nombre del programa o procedimiento ILE RPG/400). Para llamar al programa o procedimiento
ILE RPG/400, escriba la instruccin CALL literal de la misma manera que lo hara
si llamase a otro subprograma ILE COBOL/400. Consulte el apartado Utilizacin
de llamadas estticas de procedimiento y llamadas dinmicas de programa en la
pgina 186 para obtener informacin detallada sobre la manera de escribir la instruccin CALL en el programa ILE COBOL/400 para llamar a un programa ILE
RPG/400 con llamadas dinmicas a programas o llamadas estticas a procedimientos.

Captulo 10. Llamada de datos y compartimento de datos con otros lenguajes

223

Tambin puede llamar a un programa ILE RPG/400 desde un programa ILE


COBOL/400 utilizando la instruccin CALL identificador. Consulte el apartado Utilizacin de CALL identificador en la pgina 189 para obtener ms informacin
sobre CALL identificador.

Transferencia de datos a un programa o procedimiento ILE RPG/400


Puede pasar datos a un programa o procedimiento ILE RPG/400 al que se haya
llamado utilizando CALL...BY REFERENCE, CALL...BY VALUE o CALL...BY
CONTENT. Consulte el apartado Transferencia de datos utilizando CALL...BY
REFERENCE, BY VALUE o BY CONTENT en la pgina 199 para obtener una
descripcin de la utilizacin de CALL...BY REFERENCE, CALL...BY VALUE o
CALL...BY CONTENT.
Cuando se pasan datos al programa ILE RPG/400 con CALL...BY REFERENCE,
en la lista de argumentos aceptada por el programa ILE RPG/400 se coloca un
puntero que seala al elemento de datos.
Cuando se pasan datos al programa ILE RPG/400 con CALL...BY CONTENT, el
valor del dato se copia en una ubicacin temporal y, a continuacin, en la lista de
argumentos aceptada por el programa ILE RPG/400 se coloca un puntero que contiene la direccin de la ubicacin temporal de la copia. En CALL...BY VALUE, el
valor del elemento se coloca en la lista de argumentos aceptada por el programa
ILE RPG/400. CALL...BY VALUE puede utilizarse para llamar a procedimientos
ILE RPG/400, pero no para llamar a objetos de programa ILE RPG/400.
En el programa ILE COBOL/400, describa los argumentos que desea pasar al programa o procedimiento ILE RPG/400 en el apartado Data Division de la misma
forma en que se describen otros datos en Data Division. Consulte el apartado
Transferencia y compartimiento de datos entre programas en la pgina 198 para
obtener una descripcin de la manera de describir los argumentos que desee
pasar.
En el programa ILE RPG/400 al que se llama, describa los parmetros que desea
recibir del programa ILE COBOL/400 utilizando la operacin PARM. Cada parmetro
a recibir se define en una operacin PARM por separado. Especifique el nombre del
parmetro en el campo Result. Las entradas Factor 1 y Factor 2 son opcionales e
indican variables o literales. El valor del campo Factor 1 se transfiere de la entrada
de campo Result cuando se produce la llamada. El valor del campo Factor 2 se
coloca en la entrada de campo Result al volver.
Otro mtodo de definir parmetros en un programa ILE RPG/400 es especificarlos
en un prototipo. Cada parmetro est definido en una especificacin de definicin
por separado. Para los parmetros pasados utilizando BY REFERENCE, no es
necesaria ninguna palabra clave especial. Para los parmetros pasados utilizando
BY VALUE se utiliza la palabra clave VALUE. Consulte la publicacin ILE RPG/400
Gua del programador para obtener ms informacin sobre la forma de describir los
argumentos en un programa ILE RPG/400.

Compatibilidad de los tipos de datos entre ILE RPG/400 e ILE


COBOL/400
ILE RPG/400 e ILE COBOL/400 tienen tipos de datos diferentes.Cuando desee
pasar datos entre programas escritos en ILE RPG/400 e ILE COBOL/400, debe
tener presentes dichas diferencias. Algunos tipos de datos de ILE RPG/400 e ILE
COBOL/400 carecen de equivalente directo en el otro lenguaje.

224

ILE COBOL/400 Gua del Programador

La Tabla 13 en la pgina 225 muestra la compatibilidad de los tipos de datos de


ILE COBOL/400 con ILE RPG/400.
Tabla 13 (Pgina 1 de 3). Compatibilidad de tipos de datos ILE COBOL/400 con ILE RPG/400
ILE COBOL/400

Especificaciones I, D o C
ILE RPG/400

PIC X(n).

Blanco o A en la columna de
tipo de datos, n en la
columna de longitud y blanco
en la columna de posicin
decimal

Campo de tipo carcter en el


que n=1 a 32 766 .

PIC 1 INDIC ..

*INxxxx

Indicador.

PIC S9(n) DISPLAY

S en la columna de tipo de
datos
o
blanco en la columna de tipo
de datos, n en la columna de
longitud y 0 en la columna de
posicin decimal

Decimal con zona.

|
|
|
|

PIC S9(n-p)V9(p) COMP-3

P en la columna de tipo de
datos, n en la columna de
longitud y p en la columna de
posicin decimal

n/2 + 1

Decimal empaquetado.

|
|
|
|

PIC S9(n-p)V9(p)
PACKED-DECIMAL.

P en la columna de tipo de
datos, n en la columna de
longitud y p en la columna de
posicin decimal

n/2 + 1

Decimal empaquetado.

PIC S9(4) COMP-4.

B en la columna de tipo de
datos, 4 en la columna de
longitud y 0 en la columna de
posicin decimal

Entero con signo de 2 bytes


con un rango de -9999 a
+9999.

PIC S9(4) BINARY.

B en la columna de tipo de
datos, 4 en la columna de
longitud y 0 en la columna de
posicin decimal

Entero con signo de 2 bytes


con un rango de -9999 a
+9999.

|
|
|
|

PIC S9(4) BINARY. Opcin


*NOSTDTRUNC

I en la columna de tipo de
datos, 5 en la columna de
longitud y 0 en la columna de
posicin decimal

Entero con signo de 2 bytes


con un rango de -32768 a
32767

|
|
|
|

No est soportado

U en la columna de tipo de
datos, 5 en la columna de
longitud y 0 en la columna de
posicin decimal

Entero con signo de 2 bytes


con un rango de 0 a 65535

PIC S9(9) COMP-4.

B en la columna de tipo de
datos, 9 en la columna de
longitud y 0 en la columna de
posicin decimal

Entero con signo de 4 bytes


con un rango de -999999999
a +999999999.

PIC S9(9) BINARY.

B en la columna de tipo de
datos, 9 en la columna de
longitud y 0 en la columna de
posicin decimal

Entero con signo de 4 bytes


con un rango de -999999999
a +999999999.

|
|

|
|

|
|

|
|

Longitud

Descripcin

Captulo 10. Llamada de datos y compartimento de datos con otros lenguajes

225

Tabla 13 (Pgina 2 de 3). Compatibilidad de tipos de datos ILE COBOL/400 con ILE RPG/400
ILE COBOL/400

Especificaciones I, D o C
ILE RPG/400

|
|
|
|

PIC S9(9) BINARY. Opcin


*NOSTDTRUNC

I en la columna de tipo de
datos, 10 en la columna de
longitud y 0 en la columna de
posicin decimal

Entero con signo de 4 bytes


con un rango de
-2147483648 a 2147483647

|
|
|
|

No est soportado

U en la columna de tipo de
datos, 10 en la columna de
longitud y 0 en la columna de
posicin decimal

Entero sin signo de 4 bytes


con un rango de 0 a
4294967295

PIC S9(18) COMP-4.

No est soportado

Entero de 8 bytes.

PIC S9(18) BINARY.

No est soportado

Entero de 8 bytes.

|
|
|

USAGE IS COMP-1

F en la columna de tipo de
datos, 4 en la columna de
longitud

Campo de coma flotante


interno de 4 bytes.

|
|
|

USAGE IS COMP-2

F en la columna de tipo de
datos, 8 en la columna de
longitud.

Campo de coma flotante


interno de 8 bytes.

05 VL-FIELD.
10 i PIC S9(4) COMP-4.
10 data PIC X(n).

No est soportado

n+2

05 n PIC 9(9) COMP-4.


05 x redefines n PIC X(4).

No est soportado

Los campos de bit pueden


manipularse con literales
hexadecimales.

01 record
05 field1...
05 field2...

estructura de datos

Estructura. Las estructuras


deben pasarse como puntero
a la estructura si desea
cambiar el contenido de la
estructura.

USAGE IS POINTER

* en la columna de tipo de
datos

16

Puntero.

PROCEDURE-POINTER

* en la columna de tipo de
datos y la palabra clave
PROCPTR

16

Puntero de 16 bytes que


seala a un procedimiento.

USAGE IS INDEX

I en la columna de tipo de
datos, la longitud es 10, 0 en
la columna de posicin
decimal

Entero de 4 bytes.

REDEFINES

subcampo de estructura de
datos

Elemento de una unin.

OCCURS

Palabra clave OCCURS


o
palabra clave DIM

PIC X(n)

D en la columna de tipo de
datos

Tipo de datos de fecha.

PIC X(n)

T en la columna de tipo de
datos

Tipo de datos de hora.

PIC X(n)

Z en la columna de tipo de
datos

Tipo de datos de indicacin


de la hora.

226

ILE COBOL/400 Gua del Programador

Longitud

n*(longitud
del tipo de
datos)

Descripcin

Campo de longitud variable


en el que i es la longitud prevista y n la longitud mxima.

Matriz.

Tabla 13 (Pgina 3 de 3). Compatibilidad de tipos de datos ILE COBOL/400 con ILE RPG/400
ILE COBOL/400

Especificaciones I, D o C
ILE RPG/400

Longitud

PIC G(n)

G en la columna de tipo de
datos

n*2

Descripcin
Tipo de datos grficos (datos
de doble byte).

Devolucin del control desde un programa o procedimiento ILE


RPG/400
Al volver de un procedimiento ILE RPG/400 principal, el cdigo de operacin
RETURN hace que el control vuelva al programa que llama. Si antes de ejecutar
el cdigo de operacin RETURN, se utiliza el cdigo de operacin SETON para
establecer el indicador LR, el programa ILE RPG/400 al que se llama se restablece
a su estado inicial al volver al programa que llama. De lo contrario, el programa
ILE RPG/400 al que se llama queda en el estado utilizado por ltima vez.
Al volver de un subprocedimiento ILE RPG/400, el cdigo de operacin RETURN
hace que se devuelva el control al programa que llama. Si el procedimiento
devuelve un valor, el valor devuelto se especifica en el factor 2 ampliado de la
operacin RETURN. Si el subprocedimiento devuelve un valor, la instruccin CALL
de COBOL debe tener una expresin RETURNING.
Nota: El indicador LR carece de significado al volver de un subprocedimiento
Se devuelve el control al programa ILE COBOL/400 en la instruccin siguiente
despus de la instruccin CALL si el programa al que se ha llamado finaliza sin
ninguna excepcin.Si dicho programa finaliza con una excepcin, se devuelve el
control al procedimiento de manejo de excepciones identificado en el programa ILE
COBOL/400. Consulte el Captulo 12, Manejo de errores y excepciones ILE
COBOL/400 en la pgina 261 para obtener una descripcin completa de la transferencia del control a un procedimiento de manejo de excepciones.
El programa al que se llama tambin puede enviar un mensaje de escape despus
del programa ILE COBOL/400 que llama saltndoselo. En tal caso, se cancela la
invocacin del programa ILE COBOL/400. El resultado de cancelar la invocacin
es similar a si volviera del programa ILE COBOL/400.

Llamada a programas y procedimientos ILE CL


Un programa ILE COBOL/400 puede llamar a programas y procedimientos ILE CL*
utilizando llamadas dinmicas a programa o llamadas estticas a procedimientos.
Cuando se utiliza una llamada dinmica a programa para llamar a un programa ILE
CL, el programa ILE CL debe compilarse y enlazarse como un objeto de programa
por separado.Cuando se utiliza una llamada esttica a procedimiento para llamar a
un procedimiento ILE CL, el procedimiento ILE CL debe compilarse primero en un
objeto de mdulo y enlazarse despus al programa ILE COBOL/400 que llama.
Consulte la publicacin CL Programacin para obtener una descripcin de la compilacin y vinculacin de los programas y procedimientos ILE CL.
Para llamar a un programa o procedimiento ILE CL desde un programa ILE
COBOL/400, utilice la instruccin CALL literal (donde literal es el nombre del pro-

Captulo 10. Llamada de datos y compartimento de datos con otros lenguajes

227

grama o procedimiento ILE CL). Para llamar al programa o procedimiento ILE CL,
escriba la instruccin CALL literal de la misma manera que lo hara si llamase a
otro subprograma ILE COBOL/400. Consulte el apartado Utilizacin de llamadas
estticas de procedimiento y llamadas dinmicas de programa en la pgina 186
para obtener informacin detallada sobre la manera de escribir la instruccin CALL
en el programa ILE COBOL/400 para llamar a un programa ILE CL con llamadas
dinmicas a programa o llamadas estticas a procedimiento.
Tambin puede llamar a un programa ILE CL desde un programa ILE COBOL/400
utilizando la instruccin identificador. Consulte el apartado Utilizacin de CALL
identificador en la pgina 189 para obtener ms informacin sobre CALL identificador.

Transferencia de datos a un programa o procedimiento ILE CL


Puede pasar datos a un programa o procedimiento ILE CL al que se haya llamado
utilizando CALL...BY REFERENCE o CALL...BY VALUE o CALL...BY CONTENT.
Consulte el apartado Transferencia de datos utilizando CALL...BY REFERENCE,
BY VALUE o BY CONTENT en la pgina 199 para obtener una descripcin de la
utilizacin de CALL...BY REFERENCE o CALL...BY VALUE o CALL...BY
CONTENT.
Cuando se pasan datos al programa ILE CL con CALL...BY REFERENCE, en la
lista de argumentos aceptada por el programa ILE CL se coloca un puntero que
seala al dato.Cuando se pasan datos al programa ILE CL con CALL...BY
CONTENT, el valor del dato se copia en una ubicacin temporal y, a continuacin,
en la lista de argumentos aceptada por el programa ILE CL se coloca un puntero
que contiene la direccin de la ubicacin temporal de la copia.
En el programa ILE COBOL/400, describa los argumentos que desea pasar al programa o procedimiento ILE CL en el apartado Data Division de la misma forma en
que se describen otros datos en Data Division. Consulte el apartado Transferencia y compartimiento de datos entre programas en la pgina 198 para obtener
una descripcin de la manera de describir los argumentos que desee pasar.
En el programa ILE CL al que se llama, describa los parmetros que desea recibir
del programa ILE COBOL/400 en el parmetro PARM de la instruccin PGM. El
orden en que figuran en el parmetro PARM los parmetros a recibir debe ser el
mismo que el orden en el que figuran en la instruccin CALL del programa ILE
COBOL/400. Adems de a la posicin de los parmetros, debe prestar especial
atencin a la longitud y tipo de los mismos.
Los parmetros que figuran en el programa ILE CL al que se llama deben declararse como de la misma longitud y tipo que tienen en el programa ILE COBOL/400
que llama.
Para describir en el programa ILE CL al que se llama los parmetros a recibir,
utilice instrucciones DCL.
El orden de las instrucciones DCL no es importante.
Slo el orden en el que se especifican los parmetros en la instruccin PGM
determina qu variables se reciben.
El ejemplo siguiente muestra cmo se describen los parmetros en el programa
ILE CL al que se llama.

228

ILE COBOL/400 Gua del Programador

PGM PARM(&P1 &P2)


DCL VAR(&P1) TYPE(\CHAR) LEN(32)
DCL VAR(&P2) TYPE(\DEC) LEN(15 5)
.
.
.
RETURN
ENDPGM
Consulte la publicacin CL Programacin para obtener una descripcin de la
manera de describir parmetros en un programa ILE CL.

Compatibilidad de los tipos de datos entre ILE CL e ILE


COBOL/400
ILE CL e ILE COBOL/400 tienen tipos de datos diferentes.Cuando desee pasar
datos entre programas escritos en ILE CL e ILE COBOL/400, debe tener presentes
dichas diferencias. Algunos tipos de datos de ILE CL e ILE COBOL/400 carecen
de equivalente directo en el otro lenguaje.
La Tabla 14 muestra la compatibilidad de los tipos de datos de ILE COBOL/400
con ILE CL.
Tabla 14. Compatibilidad de tipos de datos ILE COBOL/400 con ILE CL
ILE COBOL/400

ILE CL

Longitud

Descripcin

PIC X(n).

TYPE(*CHAR) LEN(n)

Campo de tipo carcter en el


que n=1 a 32 766.

01 flag PIC 1.
88 flag-on VALUE B'1'.
88 flag-off VALUE B'0'.

TYPE(*LGL)

Contiene '1' '0'.

PIC S9(n-p)V9(p) COMP-3.

TYPE(*DEC) LEN(n p)

n/2+1

Decimal empaquetado.
Valor mximo de n=15.
Valor mximo de p=9.

PIC S9(n-p)V9(p)
PACKED-DECIMAL.

TYPE(*DEC) LEN(n p)

n/2+1

Decimal empaquetado.
Valor mximo de n=15.
Valor mximo de p=9.

|
|

USAGE IS COMP-1

No est soportado.

Coma flotante interno de 4


bytes.

|
|

USAGE IS COMP-2

No est soportado.

Coma flotante interno de 8


bytes.

Devolucin del control desde un programa o procedimiento ILE CL


El mandato RETURN en ILE CL hace que se devuelva e control al programa que
llama.
Se devuelve el control al programa ILE COBOL/400 en la instruccin siguiente
despus de la instruccin CALL si el programa al que se ha llamado finaliza sin
ninguna excepcin.Si dicho programa finaliza con una excepcin, se devuelve el
control al procedimiento de manejo de excepciones identificado en el programa ILE
COBOL/400. Consulte el Captulo 12, Manejo de errores y excepciones ILE
COBOL/400 en la pgina 261 para obtener una descripcin completa de la transferencia del control a un procedimiento de manejo de excepciones.

Captulo 10. Llamada de datos y compartimento de datos con otros lenguajes

229

El programa al que se llama tambin puede enviar un mensaje de escape despus


del programa ILE COBOL/400 que llama saltndoselo. En tal caso, se cancela la
invocacin del programa ILE COBOL/400. El resultado de cancelar la invocacin
es similar a si volviera del programa ILE COBOL/400.

Llamada a lenguajes OPM


Los programas escritos en lenguajes OPM, como por ejemplo OPM COBOL/400 o
OPM RPG/400, slo pueden llamarse desde ILE COBOL/400 con llamadas dinmicas a programa. Los programas OPM no pueden enlazarse de forma esttica a
los programas ILE COBOL/400. Si intenta llamar a un programa OPM con una
llamada esttica a procedimientos, recibir un mensaje de error. En el momento
de la vinculacin, recibir un mensaje de aviso del enlazador por una referencia no
resuelta a la llamada esttica a procedimientos. Si no hace caso del mensaje de
aviso y crea el objeto de programa ILE, obtendr una excepcin cuando intente
realizar la llamada esttica a procedimientos en la ejecucin.
Para llamar a un programa OPM desde un programa ILE COBOL/400, utilice la
instruccin CALL literal (donde literal es el nombre del programa OPM). Para
llamar al programa OPM, escriba la instruccin CALL literal de la misma manera
que lo hara si llamase a otro subprograma ILE COBOL/400 con una llamada dinmica a programa. Consulte el apartado Realizacin de llamadas dinmicas de
programa utilizando CALL literal en la pgina 188 para obtener informacin detallada sobre la manera de escribir la instruccin CALL en el programa ILE
COBOL/400 para llamar a un programa OPM con llamadas dinmicas a programas.
Tambin puede llamar a un programa OPM desde un programa ILE COBOL/400
utilizando la instruccin CALL identificador. Consulte el apartado Utilizacin de
CALL identificador en la pgina 189 para obtener ms informacin sobre CALL
identificador.
Los programas escritos en lenguajes OPM slo se pueden ejecutar en el Grupo de
activacin por omisin (*DFTACTGRP).
Puede llamar a un programa ILE COBOL/400 desde un programa OPM con la
misma semntica que utilizara para llamar a otro programa OPM.
Los datos externos no pueden compartirse entre programas OPM y programas ILE
COBOL/400.

Llamada a programas OPM COBOL/400


Los programas OPM COBOL/400 slo pueden ejecutarse en el Grupo de activacin por omisin (*DFTACTGRP). Los programas ILE COBOL/400 pueden ejecutarse en el Grupo de activacin por omisin (*DFTACTGRP), en grupos de
activacin ILE *NEW y en grupos de activacin ILE con nombre.
Nota: CRTPGM no permite que se especifique *DFTACTGRP de forma explcita
en el parmetro ACTGRP, pero s permite que se especifique *CALLER en
el parmetro ACTGRP. La especificacin de *CALLER en el parmetro
ACTGRP permite la ejecucin en el Grupo de activacin por omisin de un
programa ILE COBOL/400 llamado desde un programa OPM COBOL/400
(o desde cualquier programa OPM). Esta es la nica forma en que puede
ejecutarse un programa ILE COBOL/400 en el grupo de activacin por

230

ILE COBOL/400 Gua del Programador

omisin. Un programa ILE COBOL/400 no puede ser el lmite de control


fijo del grupo de activacin por omisin.
Cuando se ejecuta una aplicacin mixta con programas en OPM COBOL/400 y ILE
COBOL/400, debe respetarse el siguiente marco para poder reproducir con la
mayor fidelidad posible una unidad de ejecucin OPM COBOL/400:
Todos los programas participantes deben ejecutarse en el grupo de activacin
por omisin (*DFTACTGRP).
El primer programa COBOL a activar en el grupo de activacin debe ser un
programa OPM COBOL/400.
Para finalizar la unidad de ejecucin, un programa OPM COBOL/400 debe
emitir STOP RUN o un programa principal OPM COBOL/400 debe emitir
GOBACK.
Si se produjera una excepcin que provocase un STOP RUN implcito, debe
manejarse de tal manera que el STOP RUN implcito lo desencadene un OPM
COBOL/400.
En el caso de un aplicacin mixta con programas en OPM COBOL/400 e ILE
COBOL/400 en ejecucin en el grupo de activacin por omisin, cada programa
ILE COBOL/400 est considerado como programa no COBOL por parte de los programas OPM COBOL/400 y cada programa OPM COBOL/400 est considerado
como programa no COBOL por parte de los programas ILE COBOL/400. Adems,
cada programa ILE COBOL/400 llamado por un programa OPM COBOL/400
genera un lmite de control variable por el que se vincula el mbito del STOP RUN
emitido por ILE COBOL/400. Cuando STOP RUN lo emite el programa ILE
COBOL/400, se devuelve el control al programa OPM COBOL/400 sin renovar el
estado del programa ILE COBOL/400 y la unidad de ejecucin OPM COBOL/400
no finaliza. Cuando STOP RUN se emite desde un programa OPM COBOL/400,
se devuelve el control al emisor de la llamada del programa OPM COBOL/400 principal actual y finaliza la unidad de ejecucin OPM COBOL/400.
En el caso de una aplicacin mixta con programas en OPM COBOL/400 y ILE
COBOL/400 en la que un programa ILE COBOL/400 se ejecuta en un grupo de
activacin ILE *NEW o con nombre y el programa OPM COBOL/400 se ejecute en
el grupo de activacin por omisin, el efecto del STOP RUN emitido por el programa ILE COBOL/400 depende de si el lmite de control ms cercano es fijo o
variable.Si es fijo, se devuelve el control al emisor de la llamada del lmite de
control fijo y su grupo de activacin *NEW o ILE con nombre finaliza. Si se trata
de un lmite de control variable, se devuelve el control al emisor de la llamada del
lmite de control variable, pero el grupo de activacin ILE *NEW o con nombre del
programa ILE COBOL/400 permanece activo.
Nota: Este marco no se ajusta a una unidad de ejecucin OPM COBOL/400.

Llamada a lenguajes EPM


Los programas escritos en lenguajes EPM, como por ejemplo EPM C/400, Pascal y
FORTRAN, pueden ser llamados desde un programa ILE COBOL/400 mediante
una llamada CALL a QPXXCALL.
En el ejemplo siguiente, un programa ILE COBOL/400 utiliza QPXXCALL para llamar
a un procedimiento Pascal.

Captulo 10. Llamada de datos y compartimento de datos con otros lenguajes

231

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/COBTOPAS

AS4SYS

96/7/4 1:36:45

Pgina

F u e n t e
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN

1
2
3
4
5
6
7
8
9
1
11
12
13
14
15
16
17
18
19
2

21
22
23

1
2
3
4
5
6
7
8
9
1
11
12
13
14
15
16
17
18
19
2
21
22
23
24
25
26
27

IDENTIFICATION DIVISION.
PROGRAM-ID. COBTOPAS.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-AS4.
OBJECT-COMPUTER. IBM-AS4.
DATA DIVISION.
WORKING-STORAGE SECTION.
1 PARAMETER-LIST.
5 ENTRY-NAME
PIC X(1)
5 ENTRY-ID
PIC X(1)
5 PROG-NAME
PIC X(2)
5 A-REAL
PIC S9(9) COMP-4
5 CLEAN
PIC S9(9) COMP-4
5 INPT
PIC S99
PROCEDURE DIVISION.
MAINLINE.
DISPLAY "ENTRE EL NMERO DE REA:".
ACCEPT INPT.
MOVE INPT TO A-REAL.
CALL "QPXXCALL" USING ENTRY-NAME
ENTRY-ID
PROG-NAME
A-REAL.
DISPLAY A-REAL.
CALL "QPXXDLTE" USING CLEAN.
STOP RUN.
\ \ \ \ \

F I N

D E

VALUE
VALUE
VALUE
VALUE
VALUE
VALUE

S NOMCOPIA

FEC CAMB

F U E N T E

"SQUARE".
"\MAIN".
"MATH".
.
.
.

\ \ \ \ \

Figura 57. Llamada a un procedimiento Pascal desde un programa ILE COBOL/400.

segment MATH;
procedure SQUARE ( var X : integer ) ; external ;
procedure SQUARE;
begin
X := X \ X
end; .

Figura 58. Punto de entrada Pascal al que ha de llamarse desde un programa ILE
COBOL/400.

Pascal permite que un programa ILE COBOL/400 llame a un procedimiento Pascal


como subprograma. Para hacerlo, especifique el procedimiento Pascal con la directriz EXTERNAL (consulte la Figura 58). En el ejemplo anterior, la primera invocacin
del procedimiento con \MAIN para el parmetro ENTRY-ID de QPXXCALL establecer
un Entorno principal Pascal. Puede utilizar QPXXDLTE para borrar los entornos principal y reentrante Pascal.Pasar cero a QPXXDLTE en el parmetro CLEAN hace que
se borre el entorno principal Pascal actual.
Puede llamar a un programa ILE COBOL/400 desde un programa EPM con la
misma semtica que utilizara para llamar a otro programa EPM.
Los datos externos no pueden compartirse entre programas EPM y programas ILE
COBOL/400.

232

ILE COBOL/400 Gua del Programador

Emitir un mandato CL desde un programa ILE COBOL/400


Puede emitir un mandato CL desde un programa ILE COBOL/400 por medio de
una llamada dinmica a programa a QCMDEXC.
En el ejemplo siguiente, la llamada CALL a QCMDEXC (en el nmero de secuencia
000160) da como resultado el proceso del mandato CL Aadir Entrada de Lista de
Bibliotecas (ADDLIBLE) en el nmero de secuencia 000110. La realizacin satisfactoria del mandato CL da como resultado la adicin de la biblioteca,
COBOLTEST, a la lista de bibliotecas.

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/CMDXMPLE

AS4SYS

96/7/4 9:54:12

Pgina

F u e n t e
INST PL NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN

1
2
3
4
5
6
7
8
9
1
11
12
13
14

1
2
3
4
5
6
7
8
9
1
11
12
13
14
15
16
17

S NOMCOPIA

FEC CAMB

IDENTIFICATION DIVISION.
PROGRAM-ID. CMDXMPLE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-AS4.
OBJECT-COMPUTER. IBM-AS4.
DATA DIVISION.
WORKING-STORAGE SECTION.
1 PROGRAM-VARIABLES.
5 CL-CMD
PIC X(33)
VALUE "ADDLIBLE COBOLTEST".
5 PACK-VAL
PIC 9(1)V9(5) COMP-3
VALUE 18.
PROCEDURE DIVISION.
MAINLINE.
CALL "QCMDEXC" USING CL-CMD PACK-VAL.
STOP RUN.
\ \ \ \ \

F I N

D E

F U E N T E

\ \ \ \ \

Figura 59. Emisin de un mandato CL desde un programa ILE COBOL/400.

Para obtener ms informacin sobre QCMDEXC, consulte la publicacin CL Programacin.

Inclusin de sentencias SQL (Lenguaje de Consulta Estructurada) en


el programa ILE COBOL/400
La sintaxis de las sentencias SQL incluidas en un programa fuente ILE
COBOL/400 es:
Incluir sentencias SQL
55EXEC SQLsentencia-sqlEND-EXEC.5%

Si el tipo de miembro del programa fuente es SQLCBLLE, cuando el corrector sintctico de COBOL encuentre una sentencia SQL, sta se pasar al corrector sintctico de SQL. Si se detecta un error, se devuelve un mensaje.
Si se encuentra una instruccin SQL y el tipo de miembro no es SQLCBLLE, se
devuelve un mensaje que indica que una instruccin ILE COBOL/400 tiene un
error.

Captulo 10. Llamada de datos y compartimento de datos con otros lenguajes

233

Si hay errores en la sentencia SQL incluida adems de errores en las instrucciones


ILE COBOL/400 precedentes, el mensaje de error de SQL se visualizar despus
de que se hayan corregido los errores COBOL precedentes.
Para obtener ms informacin sobre sentencias SQL, consulte la publicacin
DB2/400 Manual de Consulta SQL.
Puede crear programas SQL para su utilizacin con programas ILE COBOL/400.
Un cursor SQL utilizado en el programa ILE COBOL/400 puede tener por mbito el
objeto de mdulo o el grupo de activacin. Para especificar el mbito del cursor
SQL, utilice el parmetro CLOSQLCSR de los mandatos Crear programa SQL
(CRTSQLxxx). Para obtener ms informacin sobre los cursores SQL, consulte la
publicacin DB/2 for OS/400 SQL Programming.

Llamada a un API ILE para recuperar el siglo actual


El ejemplo siguiente Figura 60 muestra cmo recuperar un ao de cuatro dgitos
utilizando la API enlazable ILE, Obtener hora local actual (CEELOCT). Esta API
recupera la hora local actual con tres formatos.El tercer formato es el gregoriano,
cuyos primeros cuatro caracteres son el ao.

IDENTIFICATION DIVISION.
PROGRAM-ID. DATE1.
\ Programa de ejemplo para obtener el ao de 4 dgitos en ILE COBOL/4
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-AS4.
OBJECT-COMPUTER. IBM-AS4.
DATA DIVISION.
WORKING-STORAGE SECTION.
1 date-vars.
5 lilian
pic 9(4) usage binary.
5 lilian-time-stamp pic x(8).
5 gregorian-date.
1 greg-year
pic x(4).
1 greg-month
pic x(2).
1 greg-day
pic x(2).
1 greg-time
pic x(9).
1 filler
pic x(6).
PROCEDURE DIVISION.
TEST-PARA.
call procedure "CEELOCT" using
lilian lilian-time-stamp
gregorian-date.
display "la fecha es " gregorian-date.
display "ao " greg-year.
display "mes " greg-month.
STOP RUN.

Figura 60. Ejemplo de recuperacin del siglo actual.

234

ILE COBOL/400 Gua del Programador

Captulo 11. Utilizacin de punteros en un programa ILE


COBOL/400
Puede utilizar un puntero (un elemento de datos en el cual pueden almacenarse
valores de direcciones) dentro de un programa ILE COBOL/400 cuando desee
transferir y recibir direcciones de elementos de datos, procedimientos ILE u objetos
programa.
Este captulo describe:
cmo definir y redefinir punteros
cmo inicializar punteros
cmo leer y grabar punteros
cmo manipular datos utilizando punteros.

Definicin de punteros
Puede definir los punteros de dos formas:
Un puntero para un elemento de datos. Este puntero se define con la clusula
USAGE POINTER. El elemento de datos resultante se denomina un elemento
de datos de puntero.
Un puntero para un programa ILE COBOL/400, un procedimiento ILE o un
objeto de programa.Este puntero se define con la clusula USAGE
PROCEDURE-POINTER. El elemento de datos resultante se denomina un
elemento de datos de puntero de procedimientos.
En el sistema AS/400, los punteros tienen 16 bytes de longitud.
Los elementos de datos de puntero ILE COBOL/400 son punteros de espacio del
AS/400, ya que sealan objetos de espacio del sistema. Una parte del puntero
describe sus atributos, como a qu objeto de espacio del AS/400 est sealando.
Otra parte del puntero contiene el desplazamiento del objeto de espacio en el
sistema AS/400.
Los elementos de datos del puntero de procedimientos ILE COBOL/400 son
punteros abiertos del AS/400. Los punteros abiertos tienen la posibilidad de utilizarse como otros tipos de punteros del AS/400. En concreto, cuando un elemento
de datos de puntero de procedimientos ILE COBOL/400 se coloca en un objeto de
programa, el puntero abierto contendr un puntero del sistema AS/400. Cuando un
elemento de datos de puntero de procedimientos ILE COBOL/400 se coloca en un
procedimiento ILE, el puntero abierto contendr un puntero de procedimientos del
AS/400.
Un puntero elemental de un elemento de 16 bytes puede compararse por igualdad
o utilizarse para establecer el valor de otros elementos de puntero.
Un elemento de datos de puntero slo puede utilizarse en:
|

Una instruccin SET (slo formatos 5 y 7)


Una condicin relacional

Copyright IBM Corp. 1994, 1996

235

La expresin USING de una instruccin CALL o en la cabecera Procedure


Division.
El operando para los registros especiales LENGTH OF y ADDRESS OF.
Un elemento de datos de puntero de procedimientos slo puede utilizarse en:
Una instruccin SET (slo Formato 6)
Una condicin relacional
La expresin USING de una instruccin CALL o en la cabecera Procedure
Division.
El operando para los registros especiales LENGTH OF y ADDRESS OF.
La instruccin CALL como destino
Si los punteros se utilizan en una condicin relacional, los nicos operadores
vlidos son igual a y no igual a.
Como los elementos de datos de puntero no son simplemente nmeros binarios
del sistema AS/400, no funciona la manipulacin de punteros como enteros.
Los elementos de datos de puntero se definen explcitamente con la clusula
USAGE IS POINTER y estn implcitos al utilizar un registro especial ADDRESS
OF o la ADDRESS OF de un elemento.
Si un elemento de grupo se describe con la clusula USAGE IS POINTER, los
elementos iniciales dentro del elemento de grupo son elementos de datos de
puntero. El grupo en s no es un elemento de datos de puntero y no puede utilizarse en la sintaxis donde se permite un elemento de datos de puntero. Si un
elemento de grupo se describe con la clusula USAGE PROCEDURE-POINTER,
se aplican las mismas normas. La clusula USAGE de un elemento elemental no
puede contradecir la clusula USAGE de un grupo al que pertenece el elemento.
Los punteros pueden ser parte de un grupo al que se hace referencia en una instruccin MOVE o en una instruccin de entrada/salida; sin embargo, si un puntero
forma parte de un grupo, no existe ninguna conversin de valores de puntero a
otra forma de representacin interna al ejecutar la instruccin.

Alineacin de puntero
Los punteros pueden definirse en cualquier nivel (excepto el 88) de las secciones
File, Working-Storage o Linkage Section.
Cuando se hace referencia a un puntero en un sistema AS/400, debe ser en un
lmite de almacenamiento de 16 bytes. La alineacin de puntero hace referencia
al proceso de colocar elementos de puntero del compilador ILE COBOL/400 en
desplazamientos mltiples de 16 bytes desde el principio del registro. Si un elemento de puntero no se encuentra en un lmite de 16 bytes, se enva una excepcin de alineacin de puntero al programa ILE COBOL/400. En general, las
excepciones de alineacin de puntero se producen en la Linkage Section, donde
es responsabilidad del usuario alinear dichos elementos.
En las File Section y Working-Storage Section, el compilador asegura que esta
excepcin no se produzca al aadir elementos FILLER implcitos. Cada fez que el
compilador aade un elemento FILLER implcito, se emite un aviso. En la Linkage
Section, el compilador no aade ningn elemento FILLER implcito; sin embargo,

236

ILE COBOL/400 Gua del Programador

los avisos se emiten indicando cuantos bytes hubiera aadido FILLER si el elemento de grupo hubiera aparecido en las File Section o Working-Storage Section.
Puede definir un elemento de datos como un puntero especificando la clusula
USAGE IS POINTER o USAGE IS PROCEDURE-POINTER, tal como se muestra
en el ejemplo siguiente:
ID DIVISION.
PROGRAM-ID. PROGA.
WORKING-STORAGE SECTION.
77 APTR USAGE POINTER.
77 APROC-PTR USAGE PROCEDURE-POINTER.
1 AB.
5 BPTR USAGE POINTER.
5 BVAR PIC S9(3) PACKED-DECIMAL.

LINKAGE SECTION.
AVAR.
5 CVAR PIC X(3).

PROCEDURE DIVISION.
SET APTR TO ADDRESS OF AVAR.
SET APROC-PTR TO ENTRY "PROGA".
En el ejemplo anterior, AVAR es un elemento de datos de nivel 01, as que
ADDRESS OF AVAR es el registro especial ADDRESS OF. Debido a que el
registro especial es una rea de almacenamiento real, la instruccin SET traslada
el contenido de ADDRESS OF AVAR al elemento de datos de puntero APTR.
En el ejemplo anterior, si la instruccin SET utilizara ADDRESS OF CVAR, no existira ningn registro especial. En su lugar, el elemento de datos de puntero APTR
se asigna a la direccin calculada de CVAR.
En el ejemplo anterior, la segunda instruccin SET posiciona al elemento de datos
de puntero de procedimientos APROC-PTR en el primer programa ILE COBOL/400
"PROGA".

Escritura de la File Section y de la Working Storage Section para la


alineacin del puntero
En la File Section y en la Working-Storage Section, todos los elementos del nivel
01 y los del nivel 77 (y algunos del nivel 66) se sitan en lmites de 16 bytes.
Dentro de una estructura de grupo, los punteros tambin deben situarse en un
lmite de 16 bytes. Para asegurarlo, el compilador ILE COBOL/400 aade elementos FILLER justo delante de los punteros. Para evitar estos elementos
FILLER, coloque los punteros al principio de un elemento de grupo.
Si el puntero forma parte de una tabla, el primer elemento de la tabla se coloca en
un lmite de 16 bytes. Para asegurarse de que todas las apariciones siguientes del
puntero se encuentran en un lmite de 16 bytes, se aade en caso necesario un
elemento FILLER al final de la tabla.
A continuacin encontrar un ejemplo de alineacin de puntero:

Captulo 11. Utilizacin de punteros en un programa ILE COBOL/400

237

WORKING-STORAGE SECTION.
77 APTR USAGE POINTER.
1 AB.
5 ALPHA-NUM PIC X(1).
5 BPTR USAGE PROCEDURE-POINTER.
1 EF.
5 ARRAY-1 OCCURS 3 TIMES.
1 ALPHA-NUM-TWO PIC X(14).
1 CPTR USAGE POINTER.
1 ALPHA-NUM-THREE PIC X(5).
En el ejemplo anterior, APTR es un elemento de datos de puntero. Por consiguiente, el elemento de nivel 77 se coloca en un lmite de 16 bytes. El elemento
de grupo AB es un elemento de nivel 01 y se coloca automticamente en un lmite
de 16 bytes. Dentro del elemento de grupo AB, BPTR no est en un lmite de 16
bytes. Para alinearlo correctamente, el compilador inserta un elemento FILLER de
6 bytes despus de ALPHA-NUM. Finalmente, CPTR necesita un FILLER de 2
bytes para alinear su primera aparicin. Debido a que ALPHA-NUM-THREE slo
tiene 5 bytes de longitud, debe aadirse otro FILLER de 11 bytes al final de
ARRAY-1 para alinear todas las apariciones siguientes de CPTR.
Cuando un puntero se define en la Seccin de archivos y un fichero no tiene activado el bloqueo, cada elemento de nivel 01 se colocar en un lmite de 16 bytes.
Si un archivo tiene el bloqueo activado, slo se garantiza que el primer registro de
un bloque est en un lmite de 16 bytes. Es por eso que los punteros no deben
definirse para archivos con bloqueo activado. Para obtener ms informacin sobre
el bloqueo, consulte Desbloqueo de registros de entrada y bloqueo de registros de
salida en la pgina 308.

Redefinicin de punteros
Un elemento de datos de puntero o un elemento de datos de puntero de procedimientos pueden ser el sujeto o el objeto de una clusula REDEFINES.
Cuando un puntero es el sujeto de una clusula REDEFINES, el elemento de
datos de objeto debe estar en un lmite de 16 bytes. Por ejemplo:
WORKING-STORAGE SECTION.
1 AB.
5 ALPHA-NUM PIC X(16).
5 APTR REDEFINES ALPHA-NUM USAGE POINTER.
5 BPTR USAGE POINTER.
5 CPTR REDEFINES BPTR USAGE POINTER.
En el ejemplo anterior, tanto APTR como CPTR son elementos de datos de
puntero que definen elementos alineados de 16 bytes. En el ejemplo siguiente, el
elemento redefinido dara como resultado un error de compilador grave:
WORKING-STORAGE SECTION.
1 EF.
5 ALPHA-NUM PIC X(5).
5 HI.
1 ALPHA-NUM-TWO PIC X(11).
1 APTR USAGE POINTER.
5 BPTR REDEFINES HI USAGE POINTER.

238

ILE COBOL/400 Gua del Programador

En el ejemplo anterior, APTR est alineado en un lmite de 16 bytes. Es decir, el


compilador ILE COBOL/400 no tuvo que aadir elementos FILLER para alinear
APTR. El elemento de grupo HI no se encuentra en un lmite de 16 bytes y
entonces tampoco lo est el elemento de datos de puntero BPTR. Como el compilador ILE COBOL/400 no puede aadir elementos FILLER para situar BPTR en un
lmite de 16 bytes, se producir un error grave. En el ejemplo siguiente, similar al
anterior, el compilador ILE COBOL/400 puede situar al elemento de datos de
puntero en un lmite de 16 bytes:
WORKING-STORAGE SECTION.
1 EF.
5 ALPHA-NUM PIC X(5).
5 HI.
1 ALPHA-NUM-TWO PIC X(11).
1 APTR USAGE POINTER.
1 ALPHA-NUM-THREE PIC X(5).
5 KL REDEFINES HI.
1 BPTR USAGE POINTER.
En el ejemplo anterior, el elemento de grupo KL no se encuentra en un lmite de
16 bytes; sin embargo, el compilador aade un FILLER de 11 bytes delante del
elemento de datos de puntero BPTR para asegurarse de que se encontrar en un
lmite de 16 bytes.

Inicializacin de punteros utilizando la constante figurativa NULL


La constante figurativa NULL representa un valor utilizado para indicar que los elementos de datos definidos con USAGE IS POINTER, USAGE IS
PROCEDURE-POINTER, ADDRESS OF o el registro especial ADDRESS OF no
contienen una direccin vlida. Por ejemplo:
WORKING-STORAGE SECTION.
77 APTR USAGE POINTER VALUE NULL.
PROCEDURE DIVISION.
IF APTR = NULL THEN
DISPLAY 'APTR IS NULL'
END-IF.
En el ejemplo anterior, el puntero APTR est establecido en NULL en la WorkingStorage Section. La comparacin en la Procedure Division ser verdadera y se
ejecutar la instruccin de visualizacin.
En el sistema AS/400, el valor inicial de un elemento de datos de puntero o de un
elemento de datos de puntero de procedimientos, con o sin una clusula VALUE
de NULL, es igual a NULL.

Lectura y grabacin de punteros


Los punteros pueden definirse en la File Section y pueden establecerse y utilizarse
como cualquier otro elemento de datos del puntero de la Working-Storage. Sin
embargo, existen algunas restricciones:
Si un archivo tiene el bloqueo activado, slo se garantiza que el primer registro
de un bloque est en un lmite de 16 bytes. Es por eso que los punteros no
deben definirse para archivos con bloqueo activado.

Captulo 11. Utilizacin de punteros en un programa ILE COBOL/400

239

Un registro que contenga punteros puede grabarse en un archivo, sin


embargo, en lecturas posteriores de ese registro, los elementos de datos de
puntero y los elementos de datos de puntero de procedimientos son igual a
NULL.

Utilizacin del registro especial LENGTH OF con punteros


El registro especial LENGTH OF contiene el nmero de bytes utilizado por un identificador. Da como resultado un valor de 16 para un elemento de datos de puntero
o un elemento de datos de puntero de procedimientos.
Puede utilizar LENGTH OF en la Procedure Division, en cualquier lugar donde se
utilice un elemento de datos numrico que tenga la misma definicin que la definicin implcita del registro especial LENGTH OF; sin embargo, LENGTH OF no
puede utilizarse como un subndice ni como un elemento de datos de recepcin.
LENGTH OF tiene la definicin implcita:
USAGE IS BINARY, PICTURE 9(9)
El ejemplo siguiente muestra cmo puede utilizar LENGTH OF con punteros:
WORKING-STORAGE SECTION.
77 APTR USAGE POINTER.
1 AB.
5 BPTR USAGE PROCEDURE-POINTER.
5 BVAR PIC S9(3) PACKED-DECIMAL.
5 CVAR PIC S9(3) PACKED-DECIMAL.
PROCEDURE DIVISION.
MOVE LENGTH OF AB TO BVAR.
MOVE LENGTH OF BPTR TO CVAR.
En el ejemplo anterior, la longitud del elemento de grupo AB se traslada a la
variable BVAR. BVAR tiene un valor de 20 debido a que BPTR tiene 16 bytes de
longitud y ambas variables, BVAR y CVAR tienen 2 bytes de longitud. CVAR
recibe un valor de 16.
Tambin puede utilizar el registro especial LENGTH OF para configurar estructuras
de datos dentro de espacios de usuarios o para aumentar las direcciones recibidas
desde otro programa. Para ver un ejemplo de un programa que utilice el registro
especial LENGTH OF para definir estructuras de datos dentro de espacios de
usuarios, consulte la Figura 62 en la pgina 245.

Establecimiento de la direccin de elementos de la Linkage Section


Generalmente, cuando un programa ILE COBOL/400 llama a otro programa, los
operandos se transfieren desde el programa de llamada ILE COBOL/400 al programa llamado ILE COBOL/400 de la siguiente forma:
el programa de llamada utiliza la instruccin CALL USING para transferir los
operandos al programa llamado y,
el programa llamado especifica la expresin USING en la cabecera Procedure
Division.
Para cada operando listado en la instruccin CALL USING del programa de
llamada ILE, debe haber el operando correspondiente especificado por la expresin
USING de la Procedure Division del programa llamado.

240

ILE COBOL/400 Gua del Programador

Al utilizar el registro especial ADDRESS OF, ya no necesita asegurar una correlacin de uno a uno entre las expresiones USING de ambos programas. Para
aquellos elementos de datos de la Linkage Section que no estn especificados en
la expresin USING de la cabecera Procedure Division, puede utilizar una instruccin SET para especificar la direccin inicial de la estructura de datos. Una vez la
instruccin SET se ejecuta puede hacerse referencia libremente al elemento de
datos, ya que la direccin del elemento de datos ya est establecida. Para obtener
un ejemplo de una instruccin SET utilizada de esta forma, consulte la Figura 63
en la pgina 246. En la Figura 63 en la pgina 246, 15 y 16 muestran cmo
se utiliza la instruccin SET para establecer la direccin inicial de las estructuras
de datos ls-header-record y ls-user-space al principio del espacio de usuario.

Utilizacin de ADDRESS OF y del registro especial ADDRESS OF


Al especificar ADDRESS OF en un programa ILE COBOL/400, el compilador determina si debe utilizarse la direccin calculada de un elemento de datos, denominada ADDRESS OF, o el registro especial ADDRESS OF. El registro especial
ADDRESS OF es la direccin inicial de la estructura de datos desde la cual se
determinan todas las direcciones calculadas. Debido a que el registro especial
ADDRESS OF es la direccin inicial de una estructura, debe ser un elemento de
datos de nivel 01 77. Si modifica por referencia este elemento de datos, ya no
ser la direccin inicial de la estructura de datos. Es una direccin calculada o
ADDRESS OF. Si toma la ADDRESS OF de un elemento inicial y la ADDRESS
OF del elemento de nivel 01 se ha establecido en NULL, aparecer una excepcin
de puntero (MCH3601).
No puede utilizar la ADDRESS OF calculada donde un elemento pueda cambiarse.
Slo puede cambiarse el registro especial ADDRESS OF. Por ejemplo, en la
Figura 63 en la pgina 246, la instruccin SET del nmero 17 utiliza el registro
especial ADDRESS OF porque es un elemento de nivel 01. En el nmero 18 ,
ADDRESS OF se utiliza porque, aunque es un elemento de nivel 01, se modifica
por referencia.

Utilizacin de punteros en una instruccin MOVE


Los punteros elementales no pueden trasladarse utilizando la instruccin MOVE;
debe utilizarse una instruccin SET. Sin embargo, los punteros se trasladan implcitamente cuando forman parte de un elemento de grupo.
Al compilar una instruccin MOVE, el compilador ILE COBOL/400 genera un
cdigo para mantener (un puntero MOVE) o no mantener (un puntero no MOVE)
punteros dentro de un elemento de grupo.
Un puntero MOVE se realiza cuando se cumplen todas la condiciones siguientes:
1. El origen o el receptor de una instruccin MOVE contienen un puntero
2. Ambos elementos tienen como mnimo 16 bytes de longitud
3. Los elementos de datos estn alineados correctamente
4. Los elementos de datos son elementos alfanumricos o de grupo.
De las condiciones listadas anteriormente, determinar si dos elementos de datos
estn alineados correctamente puede ser la ms difcil.

Captulo 11. Utilizacin de punteros en un programa ILE COBOL/400

241

Nota: Un puntero MOVE es ms lento que utilizar la instruccin SET para trasladar un puntero.
Si los elementos trasladados son elementos de nivel 01 o forman parte de un elemento de nivel 01, deben estar en el mismo desplazamiento relativo a un lmite de
16 bytes para que se produzca un puntero MOVE. (Se emite un aviso si esto no
es verdadero.) Los ejemplos siguientes muestran tres estructuras de datos y los
resultados al emitir una instruccin MOVE:

WORKING-STORAGE SECTION.
1 A.
5 B
PIC X(1).
5 C.
1 D
PIC X(6).
1 E
POINTER.
1

A2.
5 B2
PIC X(6).
5 C2.
1 D2
PIC X(1).
1 E2
POINTER.

A3.
5 B3
PIC X(22).
5 C3.
1 D3
PIC X(1).
1 E3
POINTER.

PROCEDURE DIVISION.
MOVE A a A2. 1
MOVE A a A3. 1
MOVE C a C2. 2
MOVE C2 a C3. 3

Figura 61. Utilizacin de punteros en una instruccin MOVE

El resultado es un puntero MOVE porque el desplazamiento de cada


elemento de grupo a trasladar es cero. Se mantiene la integridad del
puntero.

El resultado es un puntero no MOVE porque los desplazamientos no


coinciden. El desplazamiento del elemento de grupo C es 10 y el del
elemento de grupo C2 es 6. No se mantiene la integridad del puntero.

El resultado es un puntero MOVE porque el desplazamiento del elemento de grupo C2 es 6 y el de C3 relativo a un lmite de 16 bytes es
tambin 6. (Cuando el desplazamiento es superior a 16, el desplazamiento relativo a un lmite de 16 bytes se calcula dividiendo el desplazamiento por 16. El resto es el desplazamiento relativo. En este caso,
el desplazamiento era 22, lo que, al dividir por 16, deja un resto o un
desplazamiento de 6). Se mantiene la integridad del puntero.
Si un elemento de grupo contiene un puntero y el compilador ILE
COBOL/400 no puede determinar el desplazamiento relativo a un lmite
de 16 bytes, el compilador ILE COBOL/400 emite un mensaje de aviso
y se intenta el traslado del puntero. Sin embargo, la integridad del

242

ILE COBOL/400 Gua del Programador

puntero puede que no se mantenga. El compilador ILE COBOL/400 no


puede determinar el desplazamiento si el elemento se define en la
Linkage Section o si el elemento se modifica por referencia con una
posicin inicial desconocida. Debe asegurarse de que se mantiene la
alineacin del puntero o puede producirse un error de comprobacin de
mquina.
El compilador ILE COBOL/400 coloca todos los elementos de nivel 01 y de nivel 77
en un lmite de 16 bytes tanto si contienen punteros como si no.

Utilizacin de punteros en una instruccin CALL


Cuando se transfiere un elemento de datos de puntero o elemento de datos de
puntero de procedimientos en una instruccin CALL, el elemento se trata como
todos los dems elementos USING. En otras palabras, cuando un elemento de
datos de puntero se transfiere BY REFERENCE (o BY CONTENT), se transfiere al
programa llamado un puntero del elemento de datos de puntero (o una copia del
elemento de datos de puntero). Cuando un elemento de datos de puntero se
transfiere BY VALUE, el contenido del elemento de datos de puntero se coloca en
la pila de llamadas. Los elementos de datos del puntero de procedimientos se
transfieren de forma similar.
Deben proporcionarse consideraciones especiales cuando una instruccin CALL
con la expresin BY CONTENT se utiliza para transferir punteros y elementos de
grupo que contengan punteros. Es similar al caso de una sentencia MOVE. Para
una instruccin CALL...BY CONTENT, se realiza un MOVE implcito de un elemento para crearlo en una rea temporal. Para asegurar la alineacin del puntero
en este puntero MOVE, el compilador ILE COBOL/400 o la ejecucin deben determinar el desplazamiento del elemento BY CONTENT relativo al lmite de 16 bytes.
Para obtener el mejor rendimiento, el elemento BY CONTENT debe codificarse de
forma que el compilador ILE COBOL/400 pueda determinar este desplazamiento.
La ejecucin ILE COBOL/400 tiene que determinar el desplazamiento de un elemento relativo a un lmite de 16 bytes cuando el elemento BY CONTENT:
Se modifica por referencia con una posicin inicial desconocida o
Se define en la Linkage Section.
Cuando un operando se modifica por referencia, el desplazamiento es la posicin
inicial de modificacin de referencia menos uno, ms el desplazamiento del operando dentro de la estructura de datos. Cuando un operando se encuentra en la
Linkage Section, su desplazamiento puede determinarse desde el programa de
llamada.
Para evitar problemas de alineacin de puntero, transfiera los elementos utilizando
BY REFERENCE.

|
|
|
|
|

Ajuste del valor de los punteros


El ejemplo siguiente muestra cmo se puede ajustar el valor de un puntero aumentndolo (UP BY) o disminuyndolo (DOWN BY) un valor entero. Este mtodo de
modificar el valor de un puntero puede ser til al acceder a elementos de una tabla
a los que haga referencia un elemento de datos de puntero.

Captulo 11. Utilizacin de punteros en un programa ILE COBOL/400

243

|
|
|
|
|
|
|
|
|
|

LINKAGE SECTION.
USER-INFO.
5 USER-NAME PIC X(1).
5 USER-ID
PIC 9(7).
WORKING-STORAGE SECTION.
1 A.
5 ARRAY-USER-INFO occurs
3 to 2 times.
1 USER-NAME PIC X(1).
1 USER-ID
PIC 9(7).
1

PROCEDURE DIVISION.

|
|

SET ADDRESS OF USER-INFO TO


ADDRESS OF ARRAY-USER-INFO(2).

SET ADDRESS OF USER-INFO UP BY LENGTH OF USER-INFO.

MOVE "NEW NAME" TO USER-NAME OF USER-INFO.

Notas:

|
|

1. La primera instruccin SET proporciona al elemento de datos USER-INFO la


misma direccin que el elemento 200 de la matriz ARRAY-USER-INFO.

|
|
|

2. La segunda instruccin SET proporciona al elemento de datos USER-INFO la


misma direccin que el elemento 201 de la matriz ARRAY-USER-INFO (en
otras palabras, un elemento ms que la primera instruccin SET).

3. Esta instruccin es la misma que:

MOVE "NEW NAME" to USER-NAME OF ARRAY-USER-INFO (21).


Para obtener una definicin completa de la instruccin SET, consulte el manual ILE
COBOL/400 Reference.

|
|

244

ILE COBOL/400 Gua del Programador

Acceso a espacios de usuario utilizando punteros y API


El ejemplo siguiente muestra cmo utilizar punteros para acceder a los espacios de
usuario y encadenar registros juntos.
POINTA es un programa que lee los nombres y las direcciones de clientes en un
espacio de usuario y luego visualiza la informacin en una lista. El programa
asume que la informacin de cliente existe en un archivo denominado POINTACU.
El campo de direccin de cliente es un campo de longitud variable para permitir las
direcciones largas.
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
A\ ESTE ES EL ARCHIVO DE INFORMACIN DE CLIENTE - POINTACUST
A
A
A
R FSCUST
TEXT('REGISTRO MAESTRO DE CLIENTE')
A
FS_CUST_NO
8S
TEXT('NMERO DE CLIENTE')
A
ALIAS(NMERO_CLIENTE_FS)
A
FS_CUST_NM
2
TEXT('NOMBRE CLIENTE')
A
ALIAS(NOMBRE_CLIENTE_FS)
A
FS_CUST_AD
1
TEXT('DIRECCIN CLIENTE')
A
ALIAS(DIRECCIN-CLIENTE_FS)
A
VARLEN

Figura 62. Ejemplo de la utilizacin de punteros para acceder a espacios de usuario -- DDS

Captulo 11. Utilizacin de punteros en un programa ILE COBOL/400

245

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4


TESTLIB/POINTA
TORAS15
96/7/26 15:31:31
F u e n t e
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN S NOMCOPIA
FEC CAMB
1 PROCESS varchar 1
1
2 ID DIVISION.
3\ Este programa lee un archivo de registros de longitud
4\ variable en un espacio del usuario. Entonces muestra
5\ los registros en la pantalla.
2
6 PROGRAM-ID. pointa.
3
7 ENVIRONMENT DIVISION.
4
8 CONFIGURATION SECTION.
5
9 SPECIAL-NAMES. CONSOLE IS CRT,
7
1
CRT STATUS IS ws-crt-status. 2
8
11 INPUT-OUTPUT SECTION.
9
12 FILE-CONTROL.
1
13
SELECT cust-file ASSIGN TO DATABASE-pointacu
12
14
ORGANIZATION IS SEQUENTIAL
13
15
FILE STATUS IS ws-file-status.
14
16 DATA DIVISION.
15
17 FILE SECTION.
16
18 FD cust-file.
17
19 1 fs-cust-record.
2\ copia los nombres de campo convirtiendo el subrayado a
21\ guiones y utilizando nombres de alias
22 COPY DDR-ALL-FORMATS-I OF pointacu.
18
+1
5 POINTACU-RECORD PIC X(13).
<-ALL-FMTS
+2\
FORMATO E-S:FSCUST
DE ARCHIVO POINTACU
DE BIBLIOTECA TESTLIB
<-ALL-FMTS
+3\
REGISTRO MAESTRO CLIENTE
<-ALL-FMTS
+4
5 FSCUST
REDEFINES POINTACU-RECORD.
<-ALL-FMTS
+5
6 FS-CUST-NUMBER
PICS9(8).
<-ALL-FMTS
+6\
NMERO DE CLIENTE
<-ALL-FMTS
+7
6 FS-CUST-NAME
<-ALL-FMTS
+8\
NOMBRE DE CLIENTE
<-ALL-FMTS
+9
6 FS-CUST-ADDRESS. 3
<-ALL-FMTS
+1\
(Campo de longitud variable)
<-ALL-FMTS
+11
49 FS-CUST-ADDRESS-LENGTH
<-ALL-FMTS
+12
PIC S9(4) COMP-4.
<-ALL-FMTS
+13
49 FS-CUST-ADDRESS-DATA
<-ALL-FMTS
+14
PIC X(1).
<-ALL-FMTS
+15\
DIRECCIN DE CLIENTE
<-ALL-FMTS
18
23 WORKING-STORAGE SECTION.
19
24 1 ws-file-status.
2
25
5 ws-file-status-1 PIC X.
21
26
88 ws-file-stat-good
VALUE "".
22
27
88 ws-file-stat-at-end VALUE "1".
23
28
5 ws-file-status-2 PIC X.
24
29 1 ws-crt-status. 4
25
3
5 ws-status-1
PIC 9(2).
26
31
88 ws-status-1-ok
VALUE .
27
32
88 ws-status-1-func-key VALUE 1.
28
33
88 ws-status-1-error
VALUE 9.
29
34
5 ws-status-2
PIC 9(2).
3
35
88 ws-func-3
VALUE 3.
31
36
88 ws-func-7
VALUE 7.
32
37
88 ws-func-8
VALUE 8.
33
38
5 ws-status-3
PIC 9(2).
34
39 1 ws-params. 5
35
4
5 ws-space-ptr
POINTER. 6
36
41
5 ws-space.
37
42
1 ws-space-name
PIC X(1) VALUE "MYSPACE".
38
43
1 ws-space-lib
PIC X(1) VALUE "QTEMP".
39
44
5 ws-attr
PIC X(1) VALUE "PF".
4
45
5 ws-init-size
PIC S9(5) VALUE 32 BINARY.
41
46
5 ws-init-char
PIC X
VALUE SPACE.
42
47
5 ws-auth
PIC X(1) VALUE "\ALL".
43
48
5 ws-text
PIC X(5) VALUE
49
"Registros de informacin del cliente".
44
5
5 ws-replace
PIC X(1) VALUE "\YES".
45
51
5 ws-err-data. 7
46
52
1 ws-input-l
PIC S9(6) BINARY VALUE 16.
47
53
1 ws-output-l
PIC S9(6) BINARY.
48
54
1 ws-exception-id
PIC X(7).
49
55
1 ws-reserved
PIC X(1).

| Figura 63 (Parte 1 de 7). Ejemplo de la utilizacin de punteros para acceder a espacios de usuario

246

ILE COBOL/400 Gua del Programador

Pgina

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

5716CB1 V3R7M 96118 LN


IBM ILE COBOL/4
TESTLIB/POINTA
TORAS15
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN
56
5
57 77 ws-accept-data
PIC X
VALUE SPACE.
51
58
88 ws-acc-blank
VALUE SPACE.
52
59
88 ws-acc-create-space
VALUE "Y", "y".
53
6
88 ws-acc-use-prv-space
VALUE "N", "n".
54
61
88 ws-acc-delete-space
VALUE "Y", "y".
55
62
88 ws-acc-save-space
VALUE "N", "n".
63
56
64 77 ws-prog-indicator
PIC X
VALUE "G".
57
65
88 ws-prog-continue
VALUE "G".
58
66
88 ws-prog-end
VALUE "C".
59
67
88 ws-prog-loop
VALUE "L".
68
6
69 77 ws-line
PIC 99.
7\ lnea de mensaje de error
61
71 77 ws-error-msg
PIC X(5) VALUE SPACES.
72\ indicador de informacin de ms direcciones
62
73 77 ws-plus
PIC X.
74\ longitud de la informacin de direccin a visualizar
63
75 77 ws-temp-size
PIC 9(2).
76
64
77 77 ws-current-rec
PIC S9(4) VALUE 1.
65
78 77 ws-old-rec
PIC S9(4) VALUE 1.
66
79 77 ws-old-space-ptr
POINTER.
8\ nmero mximo de lneas a visualizar
67
81 77 ws-displayed-lines
PIC S99 VALUE 2.
82\ lnea en la que se empiezan a visualizar los registros
68
83 77 ws-start-line
PIC S99 VALUE 5.
84\ variables para crear nuevo registro en espacio
69
85 77 ws-addr-inc
PIC S9(4) PACKED-DECIMAL.
7
86 77 ws-temp
PIC S9(4) PACKED-DECIMAL.
71
87 77 ws-temp-2
PIC S9(4) PACKED-DECIMAL.
88\ puntero de registro anterior
72
89 77 ws-cust-prev-ptr
POINTER VALUE NULL.
73
9 LINKAGE SECTION.
74
91 1 ls-header-record. 8
75
92
5 ls-hdr-cust-ptr
USAGE POINTER.
93\ nmero de registros ledos del archivo
76
94
5 ls-record-counter
PIC S9(3) BINARY.
77
95
5 FILLER
PIC X(14). 9
78
96 1 ls-user-space. 1
79
97
5 ls-customer-rec.
98\ puntero a registro del cliente anterior
8
99
1 ls-cust-prev-ptr
USAGE POINTER.
81
1
1 ls-cust-rec-length
PIC S9(4) BINARY.
82
11
1 ls-cust-name
PIC X(2).
83
12
1 ls-cust-number
PIC S9(8).
13\ longitud total del registro incluyendo bytes de relleno
14\ para asegurarse lmite de 16 bytes en prximo registro
84
15
1 ls-cust-address-length PIC S9(4) BINARY.
85
16
5 ls-cust-address-data
PIC X(116).
17
18\ El tamao de ls-user-space sobrepasa en 16 lo
19\ necesario. Ello permite el establecimiento de la direccin
11\ de inicio del siguiente registro sin superar el tamao
111\ declarado. El tamao es 16 bytes mayor para permitir la
112\ alineacin de punteros.

96/7/26 15:31:31
S NOMCOPIA
FEC CAMB

Pgina

| Figura 63 (Parte 2 de 7). Ejemplo de la utilizacin de punteros para acceder a espacios de usuario

Captulo 11. Utilizacin de punteros en un programa ILE COBOL/400

247

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

5716CB1 V3R7M 96118 LN


IBM ILE COBOL/4
TESTLIB/POINTA
TORAS15
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN
86
113 PROCEDURE DIVISION.
114\ no es necesario para la entrada "USING" en PROC... DIV.
87
115 DECLARATIVES.
116 cust-file-para SECTION.
117
USE AFTER ERROR PROCEDURE ON cust-file.
118 cust-file-para-2.
88
119
MOVE "Error XX en puntero archivo" TO ws-error-msg.
89
12
MOVE ws-file-status TO ws-error-msg(7:2).
121 END DECLARATIVES.
122
123 main-program section.
124 mainline.
125\ lee pantalla inicial hasta entrada correcta de datos
9
126
SET ws-prog-loop TO TRUE.
91
127
PERFORM initial-display THRU read-initial-display
128
UNTIL NOT ws-prog-loop.
129\ si desea continuar con el programa y desea crear rea
13\
de informacin del cliente, rellene el espacio con
131\
registros del archivo cliente
92
132
IF ws-prog-continue AND
133
ws-acc-create-space THEN
93
134
PERFORM read-customer-file
94
135
MOVE 1 TO ws-current-rec
136\ establece ptr al registro de cabecera
95
137
SET ADDRESS OF ls-header-record TO ws-space-ptr
138\ establece en espacio el primer registro del cliente
96
139
SET ADDRESS OF ls-user-space TO ls-hdr-cust-ptr
14
END-IF.
97
141
IF ws-prog-continue THEN
98
142
PERFORM main-loop UNTIL ws-prog-end
143
END-IF.
144 end-program.
99
145
PERFORM clean-up.
1
146
STOP RUN.
147
148 initial-display. 11
11
149
DISPLAY "Crear rea de informacin del cliente" AT 118 WITH
15
BLANK SCREEN REVERSE-VIDEO
151
"Crear rea de informacin del cliente (Y/N)=>
<="
152
AT 115
153
"F3=Salir" AT 222.
12
154
IF ws-error-msg NOT = SPACES THEN
13
155
DISPLAY ws-error-msg at 232 with beep highlight
14
156
MOVE SPACES TO ws-error-msg
157
END-IF.
158
159 read-initial-display. 12
15
16
ACCEPT ws-accept-data AT 156 WITH REVERSE-VIDEO
161
ON EXCEPTION
16
162
IF ws-status-1-func-key THEN
17
163
IF ws-func-3 THEN
18
164
SET ws-prog-end TO TRUE
165
ELSE
19
166
MOVE "Tecla de funcin no vlida" TO ws-error-msg
167
END-IF
168
ELSE
11
169
MOVE "Error desconocido" TO ws-error-msg

96/7/26 15:31:31
S NOMCOPIA
FEC CAMB

| Figura 63 (Parte 3 de 7). Ejemplo de la utilizacin de punteros para acceder a espacios de usuario

248

ILE COBOL/400 Gua del Programador

Pgina

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

5716CB1 V3R7M 96118 LN


IBM ILE COBOL/4
TESTLIB/POINTA
TORAS15
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN
17
END-IF
171
NOT ON EXCEPTION
111
172
IF ws-acc-create-space THEN
112
173
PERFORM create-space THRU set-space-ptrs
113
174
SET ws-prog-continue TO TRUE
175
ELSE
114
176
IF ws-acc-use-prv-space THEN
115
177
PERFORM get-space
116
178
IF ws-space-ptr = NULL
117
179
MOVE "No existe rea informacin cliente" TO ws-error-msg
18
ELSE
118
181
PERFORM set-space-ptrs
119
182
SET ws-prog-continue TO TRUE
183
END-IF
184
ELSE
12
185
MOVE "Entrado carcter no vlido" TO ws-error-msg
186
END-IF
187
END-IF
188
END-ACCEPT.
189
19 create-space.
121
191
CALL "QUSCRTUS" USING ws-space, ws-attr, ws-init-size, 13
192
ws-init-char, ws-auth, ws-text,
193
ws-replace, ws-err-data.
194
195\ comprobacin de errores en creacin de espacio podra aadirse aqu
196
197 get-space.
122
198
CALL "QUSPTRUS" USING ws-space, ws-space-ptr, ws-err-data. 14
199
2 set-space-ptrs.
21\ establece el registro de cabecera al principio del espacio
123
22
SET ADDRESS OF ls-header-record 15
23
ADDRESS OF ls-user-space 16
24
TO ws-space-ptr.
25\ establece el registro del primer cliente despus del de cabecera
124
26
SET ADDRESS OF ls-user-space TO 17
27
ADDRESS OF ls-user-space(LENGTH OF ls-header-record 18
28
+ 1:1).
29\ guarda ptr en primer registro en registro de cabecera
125
21
SET ls-hdr-cust-ptr TO ADDRESS OF ls-user-space.
211
212 delete-space.
126
213
CALL "QUSDLTUS" USING ws-space, ws-err-data. 19
214
215 read-customer-file.
216\ lee todos los registro del archivo de cliente y mueve a espacio
127
217
OPEN INPUT cust-file.
128
218
IF ws-file-stat-good THEN
129
219
READ cust-file AT END CONTINUE
22
END-READ
131
221
PERFORM VARYING ls-record-counter FROM 1 BY 1
222
UNTIL not ws-file-stat-good
132
223
SET ls-cust-prev-ptr TO ws-cust-prev-ptr
224\ Mueve la informacin del archivo al espacio
133
225
MOVE fs-cust-name
TO ls-cust-name
134
226
MOVE fs-cust-number
TO ls-cust-number

96/7/26 15:31:31
S NOMCOPIA
FEC CAMB

Pgina

| Figura 63 (Parte 4 de 7). Ejemplo de la utilizacin de punteros para acceder a espacios de usuario

Captulo 11. Utilizacin de punteros en un programa ILE COBOL/400

249

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

5716CB1 V3R7M 96118 LN


IBM ILE COBOL/4
TESTLIB/POINTA
TORAS15
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN
135
227
MOVE fs-cust-address-length TO ls-cust-address-length
136
228
MOVE fs-cust-address-data(1:fs-cust-address-length)
229
TO ls-cust-address-data(1:ls-cust-address-length)
23\ Guarda ptr en registro actual
137
231
SET ws-cust-prev-ptr TO ADDRESS OF ls-user-space
232\ Asegrese de que registro siguiente cumple lmite 16 bytes
138
233
ADD LENGTH OF ls-customer-rec 2
234
ls-cust-address-length TO 1 GIVING ws-addr-inc
139
235
DIVIDE ws-addr-inc BY 16 GIVING ws-temp
236
REMAINDER ws-temp-2
14
237
SUBTRACT ws-temp-2 FROM 16 GIVING ws-temp
238\ Guarda longitud total de registro en espacio de usuario
141
239
ADD ws-addr-inc TO ws-temp GIVING ls-cust-rec-length
142
24
SET ADDRESS OF ls-user-space
241
TO ADDRESS OF ls-user-space(ls-cust-rec-length + 1:1)
242\ Obtiene el registro siguiente del archivo
143
243
READ cust-file AT END CONTINUE
244
END-READ
245
END-PERFORM
246\ Al final del bucle tiene un registro ms que los reales
247\
145
248
SUBTRACT 1 FROM ls-record-counter
249
END-IF.
146
25
CLOSE cust-file.
251
252 main-loop. 21
253\ escribe los registro en pantalla hasta que se entre F3
147
254
DISPLAY "Informacin del cliente" AT 124 WITH
255
BLANK SCREEN REVERSE-VIDEO
256
"Clien
Nombre del cliente
Cliente"
257
AT 35
258
" Direccin"
259
"Nmero"
AT 45
26
"F3=Salir" AT 222.
261\ si haba un error pendiente lo visualiza en pantalla
148
262
IF ws-error-msg NOT = SPACES THEN
149
263
DISPLAY ws-error-msg at 232 with beep highlight
15
264
MOVE SPACES TO ws-error-msg
265
END-IF.
266\ si puede retroceder en la lista aparece F7 en la pantalla
151
267
IF ws-current-rec > 1 THEN 22
152
268
DISPLAY "F7=Retroceso" AT 224
269
END-IF.
27\ guarda el registro actual
153
271
MOVE ws-current-rec TO ws-old-rec.
154
272
SET ws-old-space-ptr TO ADDRESS OF ls-user-space. 23
273\ mueve cada registro a la pantalla
155
274
PERFORM VARYING ws-line FROM ws-start-line BY 1
275
UNTIL ws-line > ws-displayed-lines or
276
ws-current-rec > ls-record-counter
277\ si la direccin es mayor que anchura de pantalla muestra "+"
156
278
IF ls-cust-address-length > 4 THEN
157
279
MOVE "+" TO ws-plus
158
28
MOVE 4 TO ws-temp-size
281
ELSE
159
282
MOVE ls-cust-address-length TO ws-temp-size
16
283
MOVE SPACE TO ws-plus

96/7/26 15:31:31
S NOMCOPIA
FEC CAMB

| Figura 63 (Parte 5 de 7). Ejemplo de la utilizacin de punteros para acceder a espacios de usuario

250

ILE COBOL/400 Gua del Programador

Pgina

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

5716CB1 V3R7M 96118 LN


IBM ILE COBOL/4
TESTLIB/POINTA
TORAS15
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN
284
END-IF
161
285
DISPLAY ls-cust-number at line ws-line column 5
286
ls-cust-name ls-cust-address-data with
287
size ws-temp-size ws-plus at line
288
ws-line column 78
289\ coloca registro siguiente en el espacio
162
29
ADD 1 TO ws-current-rec
163
291
SET ADDRESS OF ls-user-space
292
TO ADDRESS OF ls-user-space
293
(ls-cust-rec-length + 1:1)
294
END-PERFORM.
295\ si puede avanzar coloca F8 en la pantalla
164
296
IF ws-current-rec < ls-record-counter THEN 22
165
297
DISPLAY "F8=Avance" AT 225
298
END-IF.
299\ comprueba si debe continuar, salir u obtener registro
3\
siguiente o registro anterior
166
31
SET ws-acc-blank to TRUE.
167
32
ACCEPT ws-accept-data WITH SECURE 24
33
ON EXCEPTION
168
34
IF ws-status-1-func-key THEN
169
35
IF ws-func-3 THEN
17
36
SET ws-prog-end TO TRUE
37
ELSE
171
38
IF ws-func-7 THEN
172
39
PERFORM back-screen
31
ELSE
173
311
IF ws-func-8 THEN
174
312
PERFORM forward-screen
313
ELSE
175
314
MOVE "Tecla de funcin no vlida" TO ws-error-msg
176
315
MOVE ws-old-rec TO ws-current-rec
177
316
SET ADDRESS OF ls-user-space TO ws-old-space-ptr
317
END-IF
318
END-IF
319
ELSE
178
32
MOVE "Error desconocido" TO ws-error-msg
179
321
MOVE ws-old-rec TO ws-current-rec
18
322
SET ADDRESS OF ls-user-space TO ws-old-space-ptr
323
END-IF
324
NOT ON EXCEPTION
181
325
MOVE ws-old-rec TO ws-current-rec
182
326
SET ADDRESS OF ls-user-space TO ws-old-space-ptr
327
END-ACCEPT.
328
329 clean-up.
33\ realiza un borrado del programa
331\ contina leyendo pantalla final hasta entrada correcta de datos
183
332
SET ws-prog-loop to TRUE.
184
333
SET ws-acc-blank to TRUE.
185
334
PERFORM final-display THRU read-final-display 25
335
UNTIL NOT ws-prog-loop.
336
337 final-display.
186
338
DISPLAY "Suprimir rea de informacin cliente" AT 118 WITH 26
339
BLANK SCREEN REVERSE-VIDEO
34
"Suprimir rea informacin cliente (Y/N)=>
<="

96/7/26 15:31:31
S NOMCOPIA
FEC CAMB

Pgina

| Figura 63 (Parte 6 de 7). Ejemplo de la utilizacin de punteros para acceder a espacios de usuario

Captulo 11. Utilizacin de punteros en un programa ILE COBOL/400

251

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

5716CB1 V3R7M 96118 LN


IBM ILE COBOL/4
TESTLIB/POINTA
TORAS15
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN
341
AT 115
342
"F3=Salir" AT 222.
187
343
IF ws-error-msg NOT = SPACES THEN
188
344
DISPLAY ws-error-msg at 232 with beep highlight
189
345
MOVE SPACES TO ws-error-msg
346
END-IF.
347
348 read-final-display.
19
349
ACCEPT ws-accept-data AT 156 WITH REVERSE-VIDEO
35
ON EXCEPTION
191
351
IF ws-status-1-func-key THEN
192
352
IF ws-func-3 THEN
193
353
SET ws-prog-end TO TRUE
354
ELSE
194
355
MOVE "Tecla de funcin no vlida" TO ws-error-msg
356
END-IF
357
ELSE
195
358
MOVE "Error desconocido" TO ws-error-msg
359
END-IF
36
NOT ON EXCEPTION
196
361
IF ws-acc-delete-space THEN
197
362
PERFORM delete-space
198
363
SET ws-prog-continue TO TRUE
364
ELSE
199
365
IF ws-acc-save-space THEN
2
366
SET ws-prog-continue TO TRUE
367
ELSE
21
368
MOVE "Entrado carcter no vlido" TO ws-error-msg
369
END-IF
37
END-IF
371
END-ACCEPT.
372
373 back-screen. 27
22
374
IF ws-old-rec <= 1 THEN
23
375
MOVE "Principio de registro del cliente" TO ws-error-msg
24
376
MOVE ws-old-rec TO ws-current-rec 28
25
377
SET ADDRESS OF ls-user-space TO ws-old-space-ptr
378
ELSE
26
379
MOVE ws-old-rec TO ws-current-rec 28
27
38
SET ADDRESS OF ls-user-space TO ws-old-space-ptr
28
381
PERFORM VARYING ws-line FROM ws-start-line BY 1
382
UNTIL ws-line > ws-displayed-lines or
383
ws-current-rec <= 1
384\ Retrocede un registro, de uno en uno
29
385
SET ws-cust-prev-ptr TO ls-cust-prev-ptr 29
21
386
SET ADDRESS OF ls-user-space TO ws-cust-prev-ptr
211
387
SUBTRACT 1 FROM ws-current-rec
388
END-PERFORM
389
END-IF.
39
391 forward-screen. 3
392\ si el registro actual es mayor o igual al mximo de registros
393\
de error de impresin, se ha alcanzado el mximo de registros
212
394
IF ws-current-rec >= ls-record-counter
213
395
MOVE "No hay ms registros del cliente" TO ws-error-msg
214
396
MOVE ws-old-rec TO ws-current-rec
215
397
SET ADDRESS OF ls-user-space TO ws-old-space-ptr

96/7/26 15:31:31
S NOMCOPIA
FEC CAMB

Pgina

|
|
|
|
|
|
|

5716CB1 V3R7M 96118 LN


IBM ILE COBOL/4
TESTLIB/POINTA
TORAS15
INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN
398
ELSE
216
399
MOVE ws-current-rec TO ws-old-rec
217
4
SET ws-old-space-ptr TO ADDRESS OF ls-user-space
41
END-IF.
\ \ \ \ \
F I N
D E
F U E N T E
\ \ \ \ \

96/7/26 15:31:31
S NOMCOPIA
FEC CAMB

Pgina

Figura 63 (Parte 7 de 7). Ejemplo de la utilizacin de punteros para acceder a espacios de usuario

252

CRT STATUS IS especifica un nombre de datos en el que se incluye un


valor de estado despus del final de una instruccin ACCEPT extendida. En este ejemplo, el valor de tecla STATUS se utiliza para determinar qu tecla de funcin se ha pulsado.

ILE COBOL/400 Gua del Programador

fs-cust-address es un campo de longitud variable. Para ver aqu


nombres con sentido en lugar de FILLER, especifique *VARCHAR para
el parmetro CVTOPT del mandato CRTCBLMOD o CRTBNDCBL o
VARCHAR en la instruccin PROCESS, tal como se muestra en 1 .
Para obtener ms informacin sobre los campos de longitud variable,
consulte Declaracin de elementos de datos utilizando tipos de datos
SAA en la pgina 332.

CRT STATUS tal como se menciona en 2 se define aqu.

La estructura ws-params contiene los parmetros utilizados al llamar a


las API para acceder a los espacios de usuario.

ws-space-ptr define un elemento de datos de puntero establecido por la


API QUSPTRUS. Esto seala el principio del espacio de usuario y se
utiliza para establecer las direcciones de elementos en la Linkage
Section.

ws-err-data es la estructura para el parmetro de error de las API de


espacio de usuario. Observe que ws-input-l es cero, lo que significa
que cualquier excepcin se seala al programa y no se transfiere en el
parmetro de cdigo de error. Para obtener ms informacin sobre los
parmetros de cdigo de error, consulte System API Reference.

La primera estructura de datos (ls-header-record) a definir en el espacio


de usuario.

FILLER se utiliza para mantener la alineacin de puntero porque hace


que Is-header-record sea un mltiplo de 16 bytes de longitud.

La segunda estructura de datos (ls-user-space) a definir en el espacio


de usuario.

11
12

13

initial-display muestra la pantalla Create Customer Information Area.


read-initial-display lee la primera pantalla y determina si el usuario elige
continuar o finalizar el programa. Si el usuario contina el programa
pulsando Intro, ste comprobar ws-accept-data para ver si se ha de
crear el rea de informacin del cliente.
QUSCRTUS es una API utilizada para crear espacios de usuario.

14

QUSPTRUS es una API utilizada para devolver un puntero al principio


de un espacio de usuario.

15

Correlaciona la primera estructura de datos (ls-header-record) por


encima del principio del espacio de usuario.

16

Correlaciona la segunda estructura de datos (ls-user-space) por encima


del principio del espacio de usuario.

17

Utiliza el registro especial ADDRESS OF

18

Utiliza ADDRESS OF, no el registro especial ADDRESS OF, ya que se


modifica por referencia.

19

QUSDLTUS es una API utilizada para eliminar un espacio de usuario.

Las cuatro sentencias aritmticas siguientes calculan la longitud total de


cada registro y se aseguran de que cada registro sea un mltiplo de 16
bytes de longitud.

21

main-loop presenta la pantalla Customer Information.

Captulo 11. Utilizacin de punteros en un programa ILE COBOL/400

253

22
23

Esta instrucciones determinan si el programa debe visualizar las teclas


de funcin F7 y F8.
Salva un puntero en el primer registro de cliente de la pantalla.

24

Esta instruccin ACCEPT espera la entrada desde la pantalla Customer


Information. Basndose en la tecla de funcin pulsada, llama al prrafo
apropiado para visualizar el siguiente conjunto de registros (forwardscreen) o el conjunto de registros anterior, (back-screen) o establece un
indicador para finalizar la rutina si se pulsa F3.

25

La rutina de borrado visualiza la pantalla Delete Customer Information


Area hasta que se pulsa la tecla apropiada.

26
27

Esta instruccin presenta la pantalla Delete Customer Information Area.


Cada registro contiene un puntero del registro de clientes anterior. El
registro especial ADDRESS OF seala el registro de clientes actual.
Cambiando el registro especial ADDRESS OF, se cambia el registro de
clientes actual.

back-screen desplaza el puntero de registro actual hacia el registro


anterior de uno en uno 29 , trasladando el puntero del registro de
clientes anterior al puntero del registro de clientes actual (ADDRESS
OF). Antes de trasladarse hacia el registro anterior de uno en uno, el
programa establece el registro de clientes actual al primer registro
actualmente visualizado 28 .
3

forward-screen establece ws-old-space-ptr (que seala el primer registro


de la pantalla) para sealar el registro actual (que se encuentra
despus del ltimo registro visualizado).
Un espacio de usuario siempre empieza en un lmite de 16 bytes, as
que el mtodo mostrado aqu asegura que todos los registros estn alineados. ls-cust-rec-length tambin se utiliza para encadenar los registros juntos.

Al ejecutar POINTA, ver las pantallas siguientes:

CMDSTR

Start Commands

Create Customer Information Area

Select one of the following:


Commands
2. Start
3. Start
4. Start
5. Start
6. Start
8.
9.
1.
11.
12.
13.
14.

Start
Start
Start
Start
Start
Start
Start

Advanced Print Function


BASIC Session
BASIC Procedure
BEST/1 Planner
BGU

STRAPF
STRBAS
STRBASPRC
STRBEST
STRBGU

COBOL Debug
Cleanup
Communications Trace
Commitment Control
Copy Screen
CSP/AE Utilities
Debug

STRCBLDBG
STRCLNUP
STRCMNTRC
STRCMTCTL
STRCPYSCN
STRCSP
STRDBG
More...

Create customer information area (Y/N)=> y <=

Selection or command
===> call pointa
F3=Exit
F4=Prompt
F9=Retrieve
F12=Cancel
F16=Major menu
Output file POINTSCREE created in library HORNER.

254

F3=Exit
+

ILE COBOL/400 Gua del Programador

Customer Information
Cust
Number
1
2
3
4
5
6
7
8
9
1
11
12
13
14
15
16

Customer Name

Customer

Bakery Unlimited
Window World
Jons Clothes
Pizza World
Marv's Auto Body
Jack's Snacks
Video World
Pat's Daycare
Mary's Pies
Carol's Fashions
Grey Optical
Fred's Forage
Dave's Trucking
Doug's Music
Anytime Copiers
Rosa's Ribs

3 Bake Way, North York


15 Eglinton Ave E., North York, Ontario
11 Park St, North Bay, Ontario, Canada
254 Main Street, Toronto, Ontario
9 George St, Peterborough, Ontario, Cana
23 North St, Timmins, Ontario, Canada
14 Robson St, Vancouver, B.C, Canada
8 Kingston Rd, Pickering, Ontario, Canad
3 Front St, Toronto, Ontario, Canada
19 Spark St, Ottawa, Ontario, Canada
5 Lundy's Lane, Niagara Falls, Ont. Cana
33 Dufferin St, Toronto, Ontario, Canada
15 Water St, Guelph, Ontario, Canada
11 Queen St. Toronto, Ontario, Canada
3 Warden Ave, Scarborough, Ontario, Ca
44 Avenue Rd, Toronto, Ontario, Canada

F3=Exit

Delete customer information area (Y/N)=> y <=


+
+
+
+
+
F3=Exit

F8=Forward

Customer Information
Cust
Number
17
18
19
2
21
22

Delete Customer Information Area

+
+

Address

Customer Name

Customer

Picture It
Paula's Flowers
Mom's Diapers
Chez Francois
Vetements de Louise
Good Eats

33 Kingston Rd, Ajax, Ontario, Canada


144 Pape Ave, Toronto, Ontario, Canada
11 Ford St, Toronto, Ontario, Canada
122 Rue Ste Anne, Montreal, PQ, Canada
892 Rue Sherbrooke, Montreal E, PQ, Cana
355 Lake St, Port Hope, Ontario, Canada

Address

CMDSTR

Start Commands

Select one of the following:


Commands
2. Start
3. Start
4. Start
5. Start
6. Start

8.
9.
1.
11.
12.
13.
14.

Start
Start
Start
Start
Start
Start
Start

Advanced Print Function


BASIC Session
BASIC Procedure
BEST/1 Planner
BGU

STRAPF
STRBAS
STRBASPRC
STRBEST
STRBGU

COBOL Debug
Cleanup
Communications Trace
Commitment Control
Copy Screen
CSP/AE Utilities
Debug

STRCBLDBG
STRCLNUP
STRCMNTRC
STRCMTCTL
STRCPYSCN
STRCSP
STRDBG
More...

Selection or command
===> endcpyscn
F3=Exit

F7=Back
F3=Exit

F3=Exit

F9=Retrieve

F12=Cancel

F16=Major menu

Customer Information
Cust
Number
1
2
3
4
5
6
7
8
9
1
11
12
13
14
15
16

F4=Prompt

Customer Name

Customer

Address

Bakery Unlimited
Window World
Jons Clothes
Pizza World
Marv's Auto Body
Jack's Snacks
Video World
Pat's Daycare
Mary's Pies
Carol's Fashions
Grey Optical
Fred's Forage
Dave's Trucking
Doug's Music
Anytime Copiers
Rosa's Ribs

3 Bake Way, North York


15 Eglinton Ave E., North York, Ontario
11 Park St, North Bay, Ontario, Canada
254 Main Street, Toronto, Ontario
9 George St, Peterborough, Ontario, Cana
23 North St, Timmins, Ontario, Canada
14 Robson St, Vancouver, B.C, Canada
8 Kingston Rd, Pickering, Ontario, Canad
3 Front St, Toronto, Ontario, Canada
19 Spark St, Ottawa, Ontario, Canada
5 Lundy's Lane, Niagara Falls, Ont. Cana
33 Dufferin St, Toronto, Ontario, Canada
15 Water St, Guelph, Ontario, Canada
11 Queen St. Toronto, Ontario, Canada
3 Warden Ave, Scarborough, Ontario, Ca
44 Avenue Rd, Toronto, Ontario, Canada

+
+
+
+
+
+
+

F8=Forward

Proceso de una lista encadenada utilizando punteros


Una aplicacin tpica de la utilizacin de elementos de datos de puntero es en el
proceso de una lista encadenada (una serie de registros donde cada uno seala al
siguiente).
Para este ejemplo, imagine una lista de datos encadenada que se componga de
registros de salarios individuales. La Figura 64 en la pgina 256 muestra una
forma de visualizar como estn enlazados estos registros en el almacenamiento:

Captulo 11. Utilizacin de punteros en un programa ILE COBOL/400

255

REGISTRO SALAR. 6

PTRNEXTREC direc. de reg

NULLdirecc.
siguiente

no vlida

NAME

. . .

SALARY

Figura 64. Representacin de una lista encadenada que finaliza con NULL

El primer elemento de cada registro (excepto el ltimo) seala al registro siguiente.


El primer elemento del ltimo registro, para indicar que es el ltimo registro, contiene un valor nulo en lugar de una direccin.
La lgica de alto nivel de una aplicacin que procese estos registros tiene un
aspecto similar a este:
OBTAIN ADDRESS OF FIRST RECORD IN CHAINED LIST FROM ROUTINE
CHECK FOR END OF THE CHAINED LIST
DO UNTIL END OF THE CHAINED LIST
PROCESS RECORD
GO ON TO THE NEXT RECORD
END
La Figura 65 en la pgina 257 contiene un perfil del programa de proceso,
CHAINLST, utilizado en este ejemplo de proceso de una lista encadenada.

256

ILE COBOL/400 Gua del Programador

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/CHAINLST

AS4SYS

96/7/4 11:34:45

Pgina

F u e n t e
INST PL NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN

1
2
3
4
5
6
7
8
9
1
11
12
13
14
15

16
17
18
19
2
21

22
23

S NOMCOPIA

1 IDENTIFICATION DIVISION.
2 PROGRAM-ID. CHAINLST.
3 ENVIRONMENT DIVISION.
4 DATA DIVISION.
5\
6 WORKING-STORAGE SECTION.
7 77 PTR-FIRST
POINTER VALUE IS NULL.
8 77 DEPT-TOTAL
PIC 9(4) VALUE IS .
9\
1 LINKAGE SECTION.
11 1 SALARY-REC.
12
5 PTR-NEXT-REC
POINTER.
13
5 NAME
PIC X(2).
14
5 DEPT
PIC 9(4).
15
5 SALARY
PIC 9(6).
16 1 DEPT-X
PIC 9(4).
17\
18 PROCEDURE DIVISION USING DEPT-X.
19 CHAINLST-PROGRAM SECTION.
2 MAINLINE.
21\
22\ PARA TODO EL PERSONAL DEL DEPARTAMENTO RECIBIDO COMO DEPT-X,
23\ PASAR POR TODOS LOS REGISTROS DE LA LISTA ENCADENADA EN BASE
24\ A LA DIRECCIN OBTENIDA DE "CHAINANC" Y ACUMULAR LOS
25\ SALARIOS.
26\ EN CADA REGISTRO, PTR-NEXT-REC ES UN PUNTERO AL
27\ REGISTRO SIGUIENTE DE LA LISTA. EN EL LTIMO REGISTRO,
28\ PTR-NEXT-REC ES NULO. VISUALIZAR EL TOTAL.
29\
3
CALL "CHAINANC" USING PTR-FIRST
31
SET ADDRESS OF SALARY-REC TO PTR-FIRST
32\
33
PERFORM WITH TEST BEFORE UNTIL ADDRESS OF SALARY-REC = NULL
34
IF DEPT = DEPT-X THEN
35
ADD SALARY TO DEPT-TOTAL
36
END-IF
37
SET ADDRESS OF SALARY-REC TO PTR-NEXT-REC
38
END-PERFORM
39\
4
DISPLAY DEPT-TOTAL
41
GOBACK.
\ \ \ \ \

F I N

D E

F U E N T E

FEC CAMB

96/11/8
96/11/8

96/11/8
96/11/8
96/11/8
96/11/8
96/11/8

96/11/8
96/11/8

96/11/8

96/11/8

\ \ \ \ \

Figura 65. Programa ILE COBOL/400 para procesar una lista encadenada

Transferencia de punteros entre programas y procedimientos


Para obtener la direccin de la primera rea de registro SALARY-REC, el programa CHAINLST llama al programa CHAINANC:
CALL "CHAINANC" USING PTR-FIRST
PTR-FIRST se define en la WORKING-STORAGE en el programa de llamada
(CHAINLST) como un elemento de datos de puntero:
WORKING-STORAGE SECTION.
77 PTR-FIRST
POINTER

VALUE IS NULL.

Cuando vuelve de la llamada a CHAINANC, PTR-FIRST contiene la direccin del


primer registro de la lista encadenada.
PTR-FIRST se define inicialmente con un valor nulo como comprobacin lgica. Si
se produce un error con la llamada y PTR-FIRST nunca recibe el valor de la direcCaptulo 11. Utilizacin de punteros en un programa ILE COBOL/400

257

cin del primer registro de la cadena, un valor nulo permanecer en PTR-FIRST y,


segn la lgica del programa, el registro no se procesar.
NULL es una constante figurativa utilizada para asignar el valor de una direccin
no vlida a elementos de puntero. Puede utilizarse en la clusula VALUE IS
NULL, en la instruccin SET y como un operando en una condicin de relacin con
un puntero.
La Linkage Section del programa de llamada contiene la descripcin de los registros de la lista encadenada. Tambin contiene la descripcin del cdigo de departamento transferido a travs de la expresin USING de la instruccin CALL.
LINKAGE SECTION.
1 SALARY-REC.
5 PTR-NEXT-REC
5 NAME
5 DEPT
5 SALARY
1 DEPT-X

POINTER.
PIC X(2).
PIC 9(4).
PIC 9(6).
PIC 9(4).

Para basar la descripcin de registro SALARY-REC en la direccin contenida en


PTR-FIRST, utilice una instruccin SET:
CALL "CHAINANC" USING PTR-FIRST
SET ADDRESS OF SALARY-REC TO PTR-FIRST

Comprobacin del final de la lista encadenada


La lista encadenada de este ejemplo est configurada de manera que el ltimo
registro contenga una direccin no vlida. Para hacerlo, al elemento de datos de
puntero del ltimo registro se le asigna el valor NULL.
A un elemento de datos de puntero se le puede asignar el valor NULL de tres
formas:
Un elemento de datos de puntero puede definirse con una clusula VALUE IS
NULL en su definicin de datos.
NULL puede ser el campo de envo en una instruccin SET.
El valor inicial de un elemento de datos de puntero, con o sin una clusula
VALUE de NULL, es igual a NULL.
En el caso de una lista encadenada en la que el puntero del ltimo registro contenga un valor nulo, el cdigo para comprobar el final de la lista sera:
IF PTR-NEXT-REC = NULL
..
.
(lgica para final de cadena)
Si no ha llegado al final de la lista, procese el registro y vaya al siguiente registro.

258

ILE COBOL/400 Gua del Programador

En el programa CHAINLST, esta prueba para el final de la lista encadenada se


consigue con una estructura hacer mientras:
PERFORM WITH TEST BEFORE UNTIL ADDRESS OF SALARY-REC = NULL
IF DEPT = DEPT-X
THEN ADD SALARY TO DEPT-TOTAL
ELSE CONTINUE
END-IF
SET ADDRESS OF SALARY-REC TO PTR-NEXT-REC
END-PERFORM

Proceso del registro siguiente


Para trasladarse al registro siguiente, establezca la direccin del registro en la
Linkage Section para que sea igual a la direccin del registro siguiente. Esto se
consigue mediante el elemento de datos de puntero que se encuentra en el primer
campo en SALARY-REC:
SET ADDRESS OF SALARY-REC TO PTR-NEXT-REC
Luego repita la rutina de proceso de registros, que procesar el registro siguiente
de la lista encadenada.

Aumento de las direcciones recibidas desde otro programa


Los datos transferidos desde un programa de llamada pueden contener informacin de cabecera que desee ignorar (por ejemplo, en datos recibidos desde una
aplicacin CICS no migrada al nivel de mandatos).
Debido a que los elementos de datos de puntero no son numricos, no puede realizar operaciones aritmtica sobre ellos. Sin embargo, puede utilizar el verbo SET
para aumentar la direccin transferida con el fin de ignorar la informacin de cabecera.
Puede configurar la Linkage Section de la siguiente forma:
LINKAGE SECTION.
1 RECORD-A.
5 HEADER
5 REAL-SALARY-REC
..
.
1 SALARY-REC.
5 PTR-NEXT-REC
5 NAME
5 DEPT
5 SALARY

PIC X(16).
PIC X(3).

POINTER.
PIC X(2).
PIC 9(4).
PIC 9(6).

Dentro de la Procedure division, base la direccin de SALARY-REC en la direccin


de REAL-SALARY-REC:
SET ADDRESS OF SALARY-REC TO ADDRESS OF REAL-SALARY-REC
SALARY-REC se basa ahora en la direccin de RECORD-A + 16.

Captulo 11. Utilizacin de punteros en un programa ILE COBOL/400

259

Transferencia de las direcciones de punto de entrada con punteros de


procedimientos
Puede utilizar elementos de datos de puntero de procedimientos, definidos con la
clusula USAGE IS PROCEDURE-POINTER, para transferir la direccin de
entrada de un programa en un formato requerido por ciertos servicios invocables
ILE.
Por ejemplo, para que una rutina de manejo de errores escritos por usuario tome el
control cuando se produce una condicin de excepcin durante la ejecucin de un
programa, primero debe transferir la direccin de entrada de un procedimiento ILE,
como por ejemplo un programa ILE COBOL/400 principal, a CEEHDLR, un servicio
invocable ILE de gestin de condiciones para registrarlo.
Los elementos de datos de puntero de procedimientos pueden establecerse para
contener la direccin de entrada para los tipos de programas siguientes:
Un primer programa ILE COBOL/400
Un procedimiento ILE escrito en otro lenguaje ILE.
Un objeto de programa ILE o un objeto de programa OPM.
Nota: Un elemento de datos de puntero de procedimientos no puede establecerse
en la direccin de un programa ILE COBOL/400 anidado.
Un elemento de datos de puntero de procedimientos slo puede establecerse utilizando el Formato 6 de la instruccin SET.
Para obtener una definicin completa de la clusula USAGE IS
PROCEDURE-POINTER y de la instruccin SET, consulte ILE COBOL/400
Reference.

260

ILE COBOL/400 Gua del Programador

Captulo 12. Manejo de errores y excepciones ILE


COBOL/400
ILE COBOL/400 contiene elementos especiales para ayudarle a anticiparse y
corregir condiciones de error que pueden producirse cuando se ejecuta un programa. Incluso si el cdigo no tiene defectos, los errores pueden producirse en los
recursos del sistema que el programa utiliza.
Puede anticiparse a posibles condiciones de error colocando cdigo en el programa para que los maneje.Si el programa no tiene cdigo de manejo de errores,
podra comportarse de forma imprevisible, los archivos se daaran y podra producir resultados incorrectos.Sin el cdigo de manejo de errores, puede que incluso
ni se d cuenta de que existe un problema.
La accin tomada por el cdigo de manejo de errores puede variar desde intentar
hacer frente a la situacin y continuar, a emitir un mensaje o detener el
programa.Como mnimo, codificar un mensaje de error para identificar la condicin
de un error es una buena idea.
Al ejecutar un programa ILE COBOL/400, pueden producirse varios tipos de error.
La instruccin ILE COBOL/400 activa en el momento de un error determinado
provoca que ciertas clusulas o expresiones ILE COBOL/400 se ejecuten.
Este captulo trata cmo:

utilizar las API de enlace de manejo de errores


iniciar vuelcos intencionados
manejar errores en operaciones de serie
manejar errores en operaciones aritmticas
manejar errores en operaciones de entrada-salida
manejar errores en operaciones de ordenar/fusionar
manejar excepciones en la instruccin CALL
crear rutinas de manejo de errores escritas por usuarios.

Manejo de condiciones ILE


En el sistema AS/400, existen varias formas en que los programas pueden comunicar el estado a otro programa.Uno de los principales mtodos es enviar un
mensaje OS/400.
Existen varios tipos de mensajes OS/400. Estos incluyen de consulta, de informacin, de conclusin, de escape y de notificacin. Por ejemplo, el mensaje final
enviado por el compilador ILE COBOL/400 cuando una compilacin es satisfactoria
es LNC0901,
Se ha creado el programa nombre-de-programa en la biblioteca
nombre-de-biblioteca en fecha a las
hora.
El mensaje LNC0901 es un mensaje de conclusin. Si una compilacin falla, recibir el mensaje LNC9001,
Ha fallado la compilacin. No se ha creado nombre-de-programa.
El mensaje LNC9001 es un mensaje de escape.
Copyright IBM Corp. 1994, 1996

261

Una condicin ILE y un mensaje OS/400 son bastante similares. Cualquier


mensaje de escape, estado, notificacin o comprobacin de funcin es una condicin y cada condicin ILE tiene un mensaje OS/400 asociado.
Como los mensajes OS/400, que pueden manejarse declarando y habilitando un
supervisor de mensajes, una condicin ILE puede manejarse registrando un manejador de condiciones ILE. Un manejador de condiciones ILE le permite registrar
un procedimiento de manejo de excepciones en tiempo de ejecucin al que se da
el control cuando se produce una excepcin. Para registrar un manejador de
excepciones, utilice la API de enlace Registrar un manejador de condiciones
escritas por usuario (CEEHDLR).
Cuando se llama a un objeto de programa o a un procedimiento ILE, se crea una
nueva entrada de pila de llamadas.Hay una cola de mensajes de llamada asociada
a cada entrada en la pila de llamadas.Esta cola de mensajes de llamada es una
cola de mensajes de programas, si se llama a un objeto de programa o, una cola
de mensajes de procedimientos, si se llama a un procedimiento ILE. En ILE, se
puede enviar un mensaje a un objeto de programa o a un procedimiento ILE,
enviando un mensaje a su entrada de pila de llamadas.De forma similar, puede
sealar una condicin de un objeto de programa o procedimiento ILE, sealando
una condicin en su entrada de pila de llamadas.Puede sealar una condicin a un
objeto de programa utilizando las API de enlace ILE. Consulte la seccin sobre las
API de enlace ILE en ILE Conceptos para obtener una lista de las API de enlace
de gestin de condiciones.
Cada entrada de la pila de llamadas tiene varios manejadores de condiciones ILE
registrados.Cuando hay mltiples manejadores de condiciones ILE registrados para
la misma entrada de la pila de llamadas, el sistema llama a estos manejadores en
orden ltimo en entrar, primero en salir (LIFO).Estos manejadores de condiciones
ILE tambin pueden registrarse con distintos niveles de prioridad.Slo unas
cuantas de estas prioridades estn disponibles para ILE
COBOL/400.Aproximadamente, existen diez prioridades distintas entre el rango 85
a 225. Los manejadores de condiciones ILE se llaman en orden de prioridad
ascendente.
En ILE, si una condicin de excepcin no se maneja en una entrada de la pila de
llamada concreta, el mensaje de excepcin no manejado se filtra en la cola de
mensajes de entrada de la pila de llamadas anterior. Cuando esto sucede, el
proceso de excepcin contina en la entrada de la pila de llamadas anterior.El filtrado de una condicin de excepcin no manejada contina hasta que se llega al
lmite de control o hasta que se maneja el mensaje de excepcin.Un mensaje de
excepcin no manejado se convierte en una comprobacin de funcin cuando se
filtra en el lmite de control.
El mensaje de excepcin de comprobacin de funcin puede entonces ser manejado por la entrada de pila de llamadas que emiti la condicin de excepcin original o se filtra hacia el lmite de control.Si se maneja la comprobacin de funcin,
el proceso normal contina y el proceso de excepcin finaliza. Si la comprobacin
de funcin se filtra hacia el lmite de control, ILE considera que la aplicacin ha
finalizado con un error no esperado. El mensaje de excepcin de anomala genrica, CEE9901, es enviado por ILE al llamador del lmite de control.
Cuando se produce una condicin de excepcin en un objeto de programa o en un
procedimiento ILE, primero la maneja el manejador de condicin ILE registrado

262

ILE COBOL/400 Gua del Programador

para la entrada de la pila de llamadas del objeto de programa o del procedimiento


ILE. Si no existe ningn manejador de condicin ILE registrado para la entrada de
la pila de llamadas, entonces la condicin de excepcin la manejan los manejadores de errores especficos de HLL. Los manejadores de errores especficos de
HLL son funciones del lenguaje definidas para manejar errores. El manejo de
errores especficos de HLL en ILE COBOL/400 incluye la instruccin declarativa
USE para manejar errores de E/S y las imperativas en las expresiones condicionales en el mbito de instrucciones, como por ejemplo ON SIZE ERROR e
INVALID KEY. Si la condicin de excepcin no la maneja el manejador de errores
especficos de HLL, entonces la condicin no manejada se filtra hacia la cola de
mensajes de entrada de la pila de llamadas anterior, tal como se describe anteriormente.
Para obtener ms informacin sobre el manejo de condiciones ILE, consulte los
apartados sobre manejo de errores y gestin de excepciones y condiciones en el
manual ILE Conceptos.

Finalizacin de un programa ILE COBOL/400


Un programa ILE COBOL/400 puede finalizarse realizando las acciones siguientes:
Una instruccin ILE COBOL/400 (EXIT PROGRAM, STOP RUN o GOBACK)
Una respuesta a un mensaje de consulta
Una instruccin STOP RUN o EXIT PROGRAM implcita
Otro equivalente del lenguaje ILE de la instruccin STOP RUN de ILE
COBOL/400. Por ejemplo la funcin exit() de ILE C/400.
Otro equivalente del lenguaje ILE de la instruccin anormal STOP RUN de ILE
COBOL/400. Por ejemplo, la funcin abort() ILE C/400.
Un mensaje de escape enviado despus del programa de llamada ILE
COBOL/400 por el procedimiento ILE o el objeto de programa llamado
La finalizacin, por parte del procedimiento ILE o del objeto de programa
llamado, del grupo de activacin en el cual se ejecuta el programa de llamada
ILE COBOL/400.
Existe una instruccin STOP RUN implcita cuando un programa principal ILE
COBOL/400 no tiene ninguna instruccin ejecutable a continuacin (EXIT
PROGRAM implcito para un subprograma ILE COBOL/400), es decir, cuando el
proceso se desactiva mediante la ltima instruccin de un programa.
Los mensajes de consulta pueden emitirse en respuesta a una instruccin ILE
COBOL/400 (es decir, un literal STOP), pero generalmente se emiten cuando se
produce un error grave en un programa o cuando una operacin ILE COBOL/400
no finaliza satisfactoriamente. (LNR7205, LNR7207 y LNR7208 son ejemplos de
ello). Los mensajes de consulta le permiten determinar qu accin tomar cuando
se produce un error de excepcin.
Existen cuatro respuestas comunes a un mensaje de consulta COBOL: C, D, F, y
G (cancelar, cancelar y volcar, cancelar y volcar totalmente, continuar). Las tres
primeras provocan (como sus pasos finales) una instruccin STOP RUN implcita
anormal.

Captulo 12. Manejo de errores y excepciones ILE COBOL/400

263

Una instruccin STOP RUN implcita o explcita o una instruccin GOBACK en el


programa principal ILE COBOL/400, provocan la sealizacin de la condicin de
finalizacin inminente en el lmite de control ms cercano. La condicin de finalizacin inminente puede manejarse de dos formas:
a travs de un manejador de errores registrado antes de que alcance el lmite
de control o
Nota: Para registrar un manejador de excepciones, utilice la API de enlace
Registrar un manejador de condiciones escritas por usuario
(CEEHDLR). Consulte la publicacin ILE Conceptos para obtener ms
informacin sobre los manejadores de excepcin.
si ha alcanzado el lmite de control, entonces todos los programas situados
detrs del lmite de control finalizarn y el control volver al programa situado
antes del lmite de control.
Si este lmite de control es un lmite de control fijo, entonces el grupo de activacin
(unidad de ejecucin) finalizar.
Si la instruccin STOP RUN es anormal y alcanza un lmite de control fijo, el programa situado antes del lmite de control recibir el mensaje de escape CEE9901.

Utilizacin de Interfaces de programacin de aplicaciones (API) de


enlace de manejo de errores
Existen dos niveles en los cuales los errores pueden manejarse en ILE
COBOL/400. Primero, los manejadores de condiciones registrados en cada nivel
de prioridad tienen la ocasin de manejar la condicin. Si la condicin permanece
sin manejar cuando se alcanza el lmite de control, se enva una condicin de comprobacin de funcin.Cada procedimiento ILE COBOL/400 tiene un manejador de
condicin ILE, registrado con el nivel de prioridad 205, para manejar una comprobacin de funcin. Este manejador de condiciones de comprobacin de funcin
emitir un mensaje de consulta COBOL, a no ser que la manejen las API de
enlace siguientes:
Recuperar manejador de errores COBOL (QlnRtvCobolErrorHandler)
La API Recuperar manejador de errores COBOL (QlnRtvCobolErrorHandler) le
permite recuperar el nombre del procedimiento de manejo de errores ILE
COBOL/400 actual para el grupo de activacin desde el que se llama a la API.
Establecer manejador de errores COBOL (QlnSetCobolErrorHandler)
La API Establecer manejador de errores COBOL (QlnSetCobolErrorHandler) le
permite especificar la identidad de un procedimiento de manejo de errores ILE
COBOL/400 para el grupo de activacin desde el cual se llama a la API.
Estas API slo afectan al manejo de excepciones dentro de programas ILE
COBOL/400. Para obtener informacin detallada sobre todas estas API, consulte
el apartado sobre API de COBOL en el manual System API Reference.

|
|

Nota: El valor *NOMONOPRC debe especificarse en el parmetro OPTION de los


mandatos CRTCBLMOD o CRTBNDCBL para utilizar estas API.

264

ILE COBOL/400 Gua del Programador

Inicializacin de vuelcos intencionados


Puede utilizar la API de enlace Vuelco de COBOL (QlnDumpCobol) para provocar
intencionadamente un vuelco con formato de un programa ILE COBOL/400. La
API QlnDumpCobol acepta seis parmetros, que definen:

el
el
el
el
el
el

nombre del objeto de programa


nombre de la biblioteca
nombre del objeto de mdulo
tipo de objeto de programa
tipo de vuelco
cdigo de error

A continuacin encontrar algunos ejemplos de como llamar a la API


QlnDumpCobol API y las operaciones resultantes:
WORKING-STORAGE SECTION.
1 ERROR-PARMS.
5 BYTES-PROVIDED
5 BYTES-AVAILABLE
5 EXCEPTION-ID
5 RESERVED-X
5 EXCEPTION-DATA
1 PROGRAM-NAME
1 LIBRARY-NAME
1 MODULE-NAME
1 PROGRAM-TYPE
1 DUMP-TYPE

PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC

PROCEDURE DIVISION.
MOVE LENGTH OF ERROR-PARMS
MOVE "MYPROGRAM"
MOVE "TESTLIB"
MOVE "MYMOD1"
MOVE "\PGM"
MOVE "D"
CALL "QlnDumpCobol" USING

S9(6) BINARY VALUE ZERO.


S9(6) BINARY VALUE ZERO.
X(7.
X.
X(64).
X(1).
X(1).
X(1).
X(1).
X.

TO BYTES-PROVIDED.
TO PROGRAM-NAME.
TO LIBRARY-NAME.
TO MODULE-NAME.
TO PROGRAM-TYPE.
TO DUMP-TYPE.
PROGRAM-NAME, LIBRARY-NAME,
MODULE-NAME, PROGRAM-TYPE,
DUMP-TYPE, ERROR-CODE.

Esto proporcionara un vuelco con formato de identificadores COBOL (opcin D)


para el objeto de mdulo MYMOD1 en el objeto de programa MYPROGRAM de la
biblioteca TESTLIB.

Captulo 12. Manejo de errores y excepciones ILE COBOL/400

265

WORKING-STORAGE SECTION.
1 ERROR-PARMS.
5 BYTES-PROVIDED
5 BYTES-AVAILABLE
5 EXCEPTION-ID
5 RESERVED-X
5 EXCEPTION-DATA
1 PROGRAM-NAME
1 LIBRARY-NAME
1 MODULE-NAME
1 PROGRAM-TYPE
1 DUMP-TYPE

PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC

PROCEDURE DIVISION.
MOVE LENGTH OF ERROR-PARMS
MOVE "\SRVPGM"
MOVE "F"
CALL "QlnDumpCobol" USING

S9(6) BINARY VALUE ZERO.


S9(6) BINARY VALUE ZERO.
X(7.
X.
X(64).
X(1).
X(1).
X(1).
X(1).
X.

TO BYTES-PROVIDED.
TO PROGRAM-TYPE.
TO DUMP-TYPE.
OMITTED, OMITTED,
OMITTED, PROGRAM-TYPE,
DUMP-TYPE, ERROR-CODE.

Esto provocara un vuelco con formato de identificadores COBOL y de informacin


relacionada con archivos (opcin F) para el programa de servicio que llam a la
API QlnDumpCobol.
Si alguno de los parmetros de entrada a la API QlnDumpCobol contiene datos no
vlidos, el vuelco no se realiza y se genera un mensaje de error, o se devuelven
los datos de excepcin. Se genera un mensaje de error si el campo
BYTES-PROVIDED contiene el valor cero.Si el campo BYTES-PROVIDED contiene un valor distinto de cero, entonces se devuelven los datos de excepcin del
parmetro ERROR-CODE y no se genera ningn mensaje de error.
|
|

Para obtener informacin detallada sobre la API QInDumpCobol, consulte el apartado sobre API de COBOL en el manual System API Reference.

Manejo de errores en operaciones de serie


Al concatener series o descomponer una serie en subserie puede producirse un
error. Las instrucciones STRING y UNSTRING proporcionan una expresin ON
OVERFLOW para manejar las condiciones tpicas de errores de desbordamiento
de serie. Para la instruccin STRING, la expresin ON OVERFLOW se ejecutar
cuando el valor del puntero implcito o explcito sea:
inferior a 1
superior a la longitud del campo de recepcin.
Para la instruccin UNSTRING, se ejecutar la expresin ON OVERFLOW cuando:
el valor implcito o explcito del puntero sea inferior a 1
el valor implcito o explcito del puntero sea mayor que la longitud del campo
de envo
se haya actuado en todos los campos de recepcin y el campo de envo an
contenga caracteres sin examinar.
Cualquier otra condicin no manejada por la expresin ON OVERFLOW provocar
generalmente mensajes MCH. Dichos mensajes los maneja normalmente el manejador de condiciones de comprobacin de funcin. Para evitar que se llame al

266

ILE COBOL/400 Gua del Programador

manejador de condiciones de comprobacin de funcin, puede registrar su propio


manejador de condiciones utilizando la API CEEHDLR para captar los mensajes
MCH.
Utilice la expresin ON OVERFLOW de la instruccin STRING o UNSTRING para
identificar los pasos de manejo de errores que desee realizar cuando se produzca
una condicin de desbordamiento. Si no tiene una clusula ON OVERFLOW en la
instruccin STRING o UNSTRING, el control se transferir a la siguiente instruccin secuencial y no se le notificar la operacin incompleta.
Consulte las instrucciones STRING y UNSTRING en la publicacin ILE
COBOL/400 Reference para obtener ms informacin sobre la expresin ON
OVERFLOW.

Manejo de errores en operaciones aritmticas


Las operaciones aritmticas pueden provocar ciertos errores tpicos. Estos errores
tpicos generalmente dan como resultado mensajes MCH.

La expresin ON SIZE ERROR


La expresin ON SIZE ERROR de las instrucciones ADD, SUBTRACT, MULTIPLY,
DIVIDE y COMPUTE:
|
|
|
|
|
|

permitir emitir mensajes de desbordamiento binarios y decimales. El mensaje


de desbordamiento binario y decimal es MCH1210. El mensaje de divisin
decimal por cero es MCH1211.
registrar un manejador de condiciones para captar los mensajes de desbordamiento binarios, decimales y de coma flotante, as como otros mensajes
MCH aritmticos. Los mensajes de desbordamiento de coma flotante son el
MCH1206 (desbordamiento) y el MCH1207 (subdesbordamiento).

|
|
|
|
|
|
|
|

A diferencia de lo que ocurre con los mensajes de desbordamiento binarios y


decimales, no se habilita el desbordamiento de coma flotante con la expresin
ON SIZE ERROR. El desbordamiento de coma flotante se habilita o inhabilita a
nivel de trabajo. Por omisin, siempre se emiten mensajes de desbordamiento
de coma flotante. Por este motivo, ILE COBOL/400 har caso omiso de estos
mensajes a menos que se haya codificado la expresin ON SIZE ERROR.
Para habilitar o inhabilitar el desbordamiento de coma flotante, consulte el
apartado Manejo de errores en clculos de coma flotante en la pgina 268.
ILE COBOL/400 registra el manejador de condiciones mencionado anteriormente
con el nivel de prioridad 85.Un manejador de condiciones de usuario, registrado
con el nivel de prioridad 165, slo recibir el control si el manejador de condiciones
mencionado anteriormente no maneja la excepcin.

Si no se codifica la expresin ON SIZE ERROR, no se emitirn los mensajes de


desbordamiento binarios y decimales y se har caso omiso de los mensajes de
desbordamiento de coma flotante. El manejador de condiciones de comprobacin
de funcin manejar todos los dems mensajes MCH aritmticos de forma normal,
a menos que se haya registrado un manejador de condiciones de usuario utilizando la API CEEHDLR.
En las situaciones siguientes se produce una condicin de error de tamao:

Captulo 12. Manejo de errores y excepciones ILE COBOL/400

267

El resultado de la operacin aritmtica es superior al campo de punto fijo que


tiene que contenerlo.
Divisin por cero
Cero elevado a la potencia de cero
Cero elevado a un nmero negativo
Un nmero negativo elevado a una potencia fraccionada.
Desbordamiento y subdesbordamiento de coma flotante

Durante operaciones aritmticas, los errores ms comunes que se producen son


errores de tamao (MCH1210) y errores de datos decimales (MCH1202). ILE
COBOL/400 no es capaz de detectar la mayora de estos errores, sino que stos
son detectados por el sistema operativa y dan lugar a mensajes del sistema.
Entonces ILE COBOL/400 supervisa estos mensajes, estableciendo bits internos
que determinan si se debe ejecutar una instruccin imperativa SIZE ERROR o
emitir un mensaje de ejecucin (LNR7200) para finalizar el programa.
Para impedir el envo del mensaje LNR7200, puede registrarse un manejador de
condiciones de usuario utilizando la API CEEHDLR para manejar los mensajes
MCH, o puede codificarse un manejador de errores ILE COBOL/400 utilizando las
API de enlace COBOL para manejar los mensajes de consulta LNR72xx.
ILE COBOL/400 detecta errores que son el resultado de una divisin por cero
durante una operacin aritmtica. Si ILE COBOL/400 los detecta, estos errores
hacen que se ejecute la instruccin SIZE ERROR imperativa.
|
|

El mensaje del sistema MCH1210 suele producirse cuando se mueve un campo


binario o decimal a otro y el receptor es demasiado pequeo. ILE COBOL/400
supervisa este error, que tambin da como resultado la ejecucin de la instruccin
imperativa SIZE ERROR.
LNR7200 es un mensaje de ejecucin que generalmente se emite cuando se
produce un error grave no controlado en el programa ILE COBOL/400.
El mensaje de sistema MCH1202 es un ejemplo tpico de un error grave no controlado. Este tipo de error da como resultado el mensaje de ejecucin ILE
COBOL/400 LNR7200 (o LNR7204 si el error se produce en un programa llamado
por un programa ILE COBOL/400). Los mensajes de sistema MCH3601 y
MCH0601 son otros ejemplos de errores graves no supervisados.

|
|
|
|
|
|
|
|
|

Manejo de errores en clculos de coma flotante


OS/400 proporciona un conjunto de instrucciones MI con Atributos computacionales
(CA) para recuperar informacin acerca de operaciones de coma flotante y para
modificar el comportamiento de las operaciones de coma flotante. Por ejemplo, la
instruccin MI SETCA (Establecer atributos computacionales) puede evitar que se
produzcan ciertas excepciones de coma flotante adems de indicar si se realiza o
no se realiza el redondeo. Por omisin, el resultado de una operacin de coma
flotante se redondea siempre y se sealan todas las excepciones, salvo el Operando no vlido.

Las excepciones que la coma flotante puede evitar son las siguientes:

1. Desbordamiento

2. Subdesbordamiento

268

ILE COBOL/400 Gua del Programador

3. Divisin por cero

4. Resultado inexacto

5. Operando no vlido

|
|

Para el manejo de la expresin ON SIZE ERROR, ILE COBOL/400 requiere que se


sealen las 3 primeras excepciones.

|
|
|
|

ILE COBOL tambin requiere que se lleve a cabo el redondeo a la posicin


decimal ms cercana, lo que significa que se ha utilizado las instrucciones MI CA
para impedir el redondeo, se eliminarn los dgitos adicionales con lo que el resultado sera inexacto.

Manejo de errores en operaciones de entrada-salida


El manejo de errores le ayuda durante el proceso de instrucciones de entradasalida captando errores severos que, de lo contrario, pasaran inadvertidos.Para las
operaciones de entrada-salida, existen varias expresiones y clusulas de manejo
de errores importantes. Estas son las siguientes:

la
la
la
el
la

expresin AT END
expresin INVALID KEY
expresin NO DATA
procedimiento declarativo USE AFTER EXCEPTION/ERROR
clusula FILE STATUS.

Durante las operaciones de entrada-salida, el sistema detecta errores y enva mensajes; estos mensajes los supervisa ILE COBOL/400. Adems, ILE COBOL/400
detectar algunos de los errores durante una operacin de entrada-salida sin el
soporte del sistema. Con independencia de la forma en que se detecte un error
durante una operacin de entrada-salida, el resultado siempre ser un estado de
archivo interno distinto de cero, un mensaje de ejecucin o ambas cosas. Una
caracterstica importante del manejo de errores es la emisin de un mensaje de
ejecucin cuando se produce un error durante el proceso de una instruccin de
entrada-salida, si no existe la expresin AT END/INVALID KEY en la instruccin de
entrada-salida, el procedimiento USE AFTER EXCEPTION/ERROR o la clusula
FILE STATUS en la instruccin SELECT para el archivo.
Un punto a recordar sobre los errores de entrada-salida es que el usuario elige si
el programa debe seguir ejecutndose o no despus de que se produzca un error
de entrada-salida grave.ILE COBOL/400 no realiza una accin correctora.Si elige
que el programa contine (incorporando cdigo de manejo de errores en su
diseo), tambin deber codificar el procedimiento apropiado de recuperacin de
errores.
Junto a las expresiones y clusulas de manejo de errores relacionadas especficamente con las instrucciones de entrada-salida, los manejadores de condiciones
ILE definidos por usuario y las API de manejo de errores ILE COBOL/400 tambin
pueden utilizarse para manejar errores de E/S.
Para cada instruccin de E/S, ILE COBOL/400 registra un manejador de condiciones para obtener las distintas condiciones relacionadas de E/S.Estos manejadores de condiciones se registran con el nivel de prioridad 185, lo que permite a
los manejadores de condiciones definidos por el usuario recibir primero el control.

Captulo 12. Manejo de errores y excepciones ILE COBOL/400

269

Tal como se ha mencionado anteriormente, se emite un mensaje de ejecucin ILE


COBOL/400 cuando se produce un error y no existe ninguna expresin AT END,
INVALID KEY, ningn procedimiento USE ni ninguna clusula FILE STATUS para
un archivo. El mensaje, LNR7057, es un mensaje de escape. Este mensaje puede
manejarlo un manejador de condiciones definido por el usuario.Si ningn manejador de condiciones puede manejar este mensaje, se volver a enviar el mensaje
LNR7057 como una comprobacin de funcin.
ILE COBOL/400 tiene un manejador de condiciones de comprobacin de funcin
que al final emitir un mensaje de consulta LNR7207 a menos que se haya definido una API de manejo de errores ILE COBOL/400.

Proceso de verbos de entrada-salida


El diagrama siguiente muestra cuando se ejecuta el procedimiento USE y las instrucciones imperativas (NOT) AT END, (NOT) INVALID KEY y NO DATA.
El estado de archivo mostrado aqu hace referencia al estado de archivo interno.
Se establece el
estado del archivo

Cul es el
carcter ms a la
izquierda del estado
del archivo?

Es
el caracter ms
a la izquierda del estado
del archivo igual
a 2?

2 o mayor

Hay una
expresin
AT END?

Hay un
procedimiento
USE?

Ejecutar
instruccin
imperativa
AT END

No

Hay un
procedimiento
USE?

No

Hay una
expresin
INVALID KEY?

Ejecutar
procedimiento
USE

No

Ejecutar
instruccin
imperativa
INVALID KEY

No

Ejecutar
procedimiento
USE

No

Continuar
programa COBOL

Nota:

Figura 66 (Parte 1 de 2). Proceso de verbos de E/S

270

ILE COBOL/400 Gua del Programador

= Ir a

en pg. siguiente

Se cumple
la condicin
NO DATA?

Hay una
expresin
NO DATA?

Ejecutar instruccin
imperativa
NO DATA

No

Es el carcter
ms a la izquierda
del estado del archivo
igual a 0?

Hay una
expresin
NOT INVALID KEY?

Ejecutar instruccin
imperativa
NOT INVALID KEY

No

Es el carcter
ms a la izquierda
del estado del archivo
igual a 0?

No

Hay una
expresin
NOT AT END?

Ejecutar instruccin
imperativa
NOT AT END

No

Continuar
programa COBOL

Figura 66 (Parte 2 de 2). Proceso de verbos de E/S

Nota: Siga las partes del diagrama que sean aplicables a sus instrucciones.

Deteccin de condiciones de fin de archivo (expresin AT END)


Una condicin de fin de archivo puede representar un error o no. En muchos
diseos, la lectura secuencial hasta el final del archivo se realiza intencionadamente y se espera la condicin AT END.
En muchos casos, sin embargo, la condicin de fin de archivo reflejar un
error.Codifique la expresin AT END de la instruccin READ para manejar cada
caso, segn el diseo del programa.
Si codifica una expresin AT END, se ejecuta la instruccin imperativa identificada
por la expresin cuando se produzca una condicin de fin de archivo. Si no codifica la expresin AT END, se ejecutar la declarativa USE AFTER
EXCEPTION/ERROR asociada.
Cualquier expresin NOT AT END que codifique se ejecutar slo si la instruccin
READ ha finalizado satisfactoriamente.Si la operacin READ falla por culpa de
cualquier condicin distinta de la de fin de archivo, no se ejecutar la expresin AT
END ni NOT AT END.En su lugar, el control pasa al final de la instruccin READ
despus de ejecutar el procedimiento declarativo USE AFTER
EXCEPTION/ERROR asociado.
Captulo 12. Manejo de errores y excepciones ILE COBOL/400

271

Si no ha codificado una expresin AT END ni un procedimiento declarativo USE


AFTER EXCEPTION/ERROR pero ha codificado la clusula STATUS KEY para el
archivo, el control pasa a la siguiente instruccin secuencial despus de la instruccin de entrada-salida que detect la condicin de fin de archivo.En este punto, la
codificacin debera observar la clave de estado y realizar la accin apropiada para
manejar el error.

Deteccin de condiciones de clave no vlida (expresin INVALID KEY)


La instruccin imperativa identificada por la expresin INVALID KEY tomar el
control en el caso de que se produzca un error de entrada-salida debido a una
clave de ndice errnea o a una clave relativa. Puede incluir expresiones INVALID
KEY en las instrucciones READ, START, WRITE, REWRITE y DELETE de
archivos indexados o relativos.
Las expresiones INVALID KEY se diferencian de las declarativas USE AFTER
EXCEPTION/ERROR en las siguientes premisas:
Las expresiones INVALID KEY funcionan slo para tipos de errores limitados,
mientras que las declarativas USE AFTER EXCEPTION/ERROR abarcan la
mayora de formas de errores.
Las expresiones INVALID KEY se codifican directamente en el verbo de
entrada-salida, mientras que las declarativas USE AFTER
EXCEPTION/ERROR se codifican por separado.
Las expresiones INVALID KEY son especficas para una sla operacin de
entrada, mientras que las declarativas USE AFTER EXCEPTION/ERROR son
ms generales.
Si especifica la expresin INVALID KEY en una instruccin de entrada-salida que
causa una condicin de clave no vlida, el control se transfiere a la instruccin
imperativa identificada por la expresin INVALID KEY. En este caso, cualquier
declarativa USE AFTER EXCEPTION/ERROR codificada no se ejecutar.
Cualquier expresin NOT INVALID KEY que especifique se ejecuta slo si la instruccin finaliza satisfactoriamente.Si la operacin falla por culpa de cualquier condicin distinta a la clave no vlida, no se ejecutar la expresin INVALID KEY ni la
expresin NOT INVALID KEY. En su lugar, el control pasa al final de la instruccin
de entrada-salida despus de ejecutar cualquier declarativa USE AFTER
EXCEPTION/ERROR asociada.
Utilice la clusula FILE STATUS junto con la expresin INVALID KEY para evaluar
la clave de estado y determine la condicin de clave no vlida especfica.
Por ejemplo, supongamos que tiene un archivo que contiene registros maestros de
clientes y necesita actualizar algunos de estos registros con informacin de un
archivo de actualizacin de transaccin.Leer cada registro de transaccin buscar
el correspondiente registro en el archivo maestro y realizar las actualizaciones
necesarias.Los registros de ambos archivos contienen cada uno un campo para
nmero de cliente y cada registro del archivo maestro tiene un nmero de cliente
exclusivo.
La entrada FILE-CONTROL para el archivo maestro de registros a modificar
incluye instrucciones que definen la organizacin indexada, el acceso aleatorio,
MASTER-COMMUTER-NUMBER como la clave de registro y

272

ILE COBOL/400 Gua del Programador

COMMUTER-FILE-STATUS como la clave de estado de archivos.El ejemplo


siguiente muestra cmo puede utilizar la clusula FILE STATUS junto con la expresin INVALID KEY para determinar de forma ms especfica la causa de una
anomala de instruccin de entrada-salida.
.
. (leer el registro de actualizacin de transaccin)
.
MOVE "TRUE" TO TRANSACTION-MATCH
MOVE UPDATE-COMMUTER-NUMBER TO MASTER-COMMUTER-NUMBER
READ MASTER-COMMUTER-FILE INTO WS-CUSTOMER-RECORD
INVALID KEY
DISPLAY "REGISTRO MAESTRO DE CLIENTE NO ENCONTRADO"
DISPLAY "CDIGO FILE STATUS:" COMMUTER-FILE-STATUS
MOVE "FALSE" TO TRANSACTION-MATCH
END-READ

Utilizacin de procedimientos declarativos EXCEPTION/ERROR


(Instruccin USE)
Puede codificar uno o ms procedimientos declarativos USE AFTER
EXCEPTION/ERROR en el programa ILE COBOL/400 al que se dar el control si
se produce un error de entrada-salida.Puede tener:
procedimientos individuales para cada modalidad de apertura de archivo (tanto
INPUT, OUTPUT, I-O o EXTEND)
procedimientos individuales para cada archivo particular.
procedimientos individuales para grupos de archivos.
Coloque cada procedimiento en la Declaratives Section de la Procedure Divisin
del programa.Consulte la ILE COBOL/400 Reference para obtener detalles sobre
cmo grabar un procedimiento declarativo.
En el procedimiento, puede escoger si desea intentar una accin correctora,
reintentar la operacin, continuar o finalizar el programa.Puede utilizar el procedimiento declarativo USE AFTER EXCEPTION/ERROR en combinacin con las
claves de estado si desea un anlisis ms profundo del error.
Para archivos GLOBAL, cada programa ILE COBOL/400 puede tener su propio
procedimiento declarativo USE AFTER EXCEPTION/ERROR.
El procedimiento declarativo USE AFTER EXCEPTION/ERROR puede declararse a
s mismo GLOBAL.Se siguen unas normas especiales de prioridad cuando se
pueden ejecutar procedimientos declarativos mltiples en un error de E/S.Al aplicar
estas normas, slo se seleccionar el primer procedimiento declarativo calificado
para la ejecucin.El procedimiento declarativo seleccionado debe satisfacer las
normas para la ejecucin de dicho procedimiento declarativo.El orden de prioridad
para seleccionar un procedimiento declarativo es:
1. Un procedimiento declarativo especfico de archivo (uno de la forma USE
AFTER ERROR ON file-name-1) dentro del programa que contiene la instruccin que caus la condicin calificada
2. Un procedimiento declarativo especfico de modalidad (uno de la forma USE
AFTER ERROR ON INPUT) dentro del programa que contiene la instruccin
que caus la condicin calificada

Captulo 12. Manejo de errores y excepciones ILE COBOL/400

273

3. Un procedimiento declarativo especfico de archivo que especifica la expresin


GLOBAL y se encuentra dentro del programa que contiene directamente el
ltimo programa examinado para la condicin calificada
4. Un proceso declarativo especfico de modalidad que incluye la expresin
GLOBAL y se encuentra dentro del programa que contiene directamente el
ltimo programa en el que se examin la condicin calificada.
5. Las normas 3 y 4 se aplican, de forma recursiva, a travs de los padres en la
jerarqua de programas.
Escriba un procedimiento declarativo USE AFTER EXCEPTION/ERROR si desea
devolver el control al programa despus de que se produzca un error.Si no escribe
dicho procedimiento, el trabajo puede cancelarse o finalizar anormalmente despus
de que se produzca un error.
Cada procedimiento declarativo USE AFTER EXCEPTION/ERROR se ejecuta
como una invocacin diferente de las llamadas de otros procedimientos declarativos y de la parte no declarativa del mismo programa ILE COBOL/400. As, si
llama a la API CEEHDLR para registrar un manejador de condiciones ILE desde un
procedimiento declarativo, ese manejador de condiciones ILE slo se llama en
excepciones que se producen en el procedimiento declarativo USE AFTER
EXCEPTION/ERROR y no en excepciones de cualquier otra parte del programa
ILE COBOL/400.

Determinacin del tipo de error mediante la clave de estado de archivo


La clave de estado de archivos se actualiza despus de cada operacin de
entrada-salida en un archivo, colocando valores en los dos dgitos de la clave de
estado de archivo. En general, un cero en el primer dgito indica una operacin
satisfactoria y un cero en ambos dgitos significa "nada anmalo sobre lo que
informar".
Debe proporcionar una entrada FILE-CONTROL para especificar la organizacin y
el mtodo de acceso para cada archivo utilizado por el programa ILE COBOL/400.
Tambin puede codificar una clusula
FILE STATUS en esta entrada.
La clusula FILE STATUS designa uno o dos elementos de datos (codificados en
la seccin WORKING-STORAGE) para guardar una copia del resultado de una
operacin de E/S. La copia del primero de estos elementos se denomina estado
de archivo externo. Si utiliza un archivo TRANSACTION, tiene un registro ms del
resultado denominado cdigo de retorno externo, que consta de los cdigos de
retorno principal y secundario externos.
ILE COBOL/400 mantiene la informacin correspondiente a estos dos elementos
de datos en el Descriptor de campos de archivos (FFD) ILE COBOL/400. Las
copias ILE COBOL/400 de estos dos elementos de datos se denominan estado de
archivo interno y cdigo de retorno interno. En este captulo, el estado de archivo
y el cdigo de retorno (principal/secundario) hacen referencia a las copias de ILE
COBOL/400, a menos que se especifique lo contrario.
Durante el proceso de una instruccin de E/S, el estado de archivo puede actualizarse de una de las tres formas descritas ms abajo. El contenido del estado de
archivo determina qu procedimientos de manejo de errores ejecutar.

274

ILE COBOL/400 Gua del Programador

Los procedimientos de manejo de errores toman el control despus de una operacin de entrada o salida no satisfactoria, indicado por un estado de archivo distinto de cero. Antes de ejecutar cualquiera de estos procedimientos, el estado de
archivos se copia en el estado de archivo externo.
El estado de archivo se establece de una de estas tres formas:
Mtodo A (todos los archivos):
ILE COBOL/400 comprueba el contenido de las variables de los bloques de
control de archivos Si el contenido no es lo que se espera, se establece un
estado de archivo distinto de cero. La mayora de estados de archivos establecidos de esta forma son el resultado de comprobar el Descriptor de campos
de archivo (FFD) ILE COBOL/400 y el Bloque de control de archivos de
usuario (UFCB) del sistema.
Mtodo B (archivos de transacciones):
ILE COBOL/400 comprueba los cdigos de retorno principal y secundario del
sistema. Si el cdigo de retorno principal no es cero, el cdigo de retorno
(formado por cdigos de retorno principal y secundario) se traslada al estado
de archivo. Si el cdigo de retorno principal es cero, el estado de archivo se
habr establecido mediante el Mtodo A o C.
Para operaciones READ, WRITE y REWRITE de subarchivos, slo son aplicables los Mtodos A y C.
Para obtener una lista de cdigos de retorno y sus estados de archivo correspondientes, consulte el apartado File Structure Support Summary and Status
Key Values en la publicacin ILE COBOL/400 Reference.
Mtodo C (todos los archivos):
El sistema enva un mensaje cuando ILE COBOL/400 llama a la gestin de
datos para realizar una operacin de E/S. Entonces ILE COBOL/400 supervisa
estos mensajes y establece un estado de archivo segn corresponda. Cada
operacin de E/S ILE COBOL/400 la maneja una rutina dentro de un programa
de servicio, que se proporciona con el compilador ILE COBOL/400. Esta rutina
llama a la gestin de datos para realizar la operacin de E/S. En la mayora
de casos, se habilita un nico supervisor de mensajes alrededor de esta
llamada a la rutina del programa de servicio.
El supervisor de mensajes para cada operacin de E/S maneja excepciones de
E/S tpicas que dan como resultado mensajes CPF que empiezan con CPF4
o CPF5. El supervisor de mensajes establece el estado de archivo
basndose en el mensaje CPF que recibe. Para obtener una lista de mensajes que maneje el supervisor de mensajes, vea File Structure Support
Summary and Status Key Values en la ILE COBOL/400 Reference.
A travs de la utilizacin de supervisores de mensajes de esta forma, el estado
de archivo se establece de forma coherente para cada tipo de operacin de
E/S, independientemente de qu otros tipos de operaciones de E/S tenga en
su programa. Consulte Manejo de mensajes mediante manejadores de
condiciones en la pgina 278 para obtener ms informacin sobre supervisores de mensajes.

Captulo 12. Manejo de errores y excepciones ILE COBOL/400

275

Cmo se establece el estado del archivo

Cmo se establece el estado del archivo


001
Iniciar la operacin de E/S.
Restablecer el estado de archivo interno.
Mtodo A: Comprobar el contenido de las variables de los bloques
de control de archivos.
(Comprobar, por ejemplo, que el archivo se ha abierto
correctamente.)
Estn las variables de los bloques de control de archivos establecidas como
se esperaba?
S No
002
Establecer el estado de archivo interno para indicar que se ha producido un
error.
Continuar con el Paso 006
003
Llamar a la gestin de datos para realizar la operacin de E/S.
Devuelve la gestin de datos una excepcin?
S No
004
Mtodo A: Comprobar el contenido de las variables de los bloques
de control de archivos.
Estn las variables de los bloques de control de archivos establecidas
como se esperaba?
S No
005
Establecer el estado de archivo interno para indicar que se ha producido
un error.
Continuar con el Paso 006
006
Trasladar el estado de archivo interno al estado de archivo externo (especificado en la clusula de estado de archivo).
Basndose en el estado de archivo interno, ejecutar el cdigo de manejo de
errores.
007
(Paso 007 contina)

276

ILE COBOL/400 Gua del Programador

007 (continuacin)
Es el archivo un archivo de transaccin?
S No
008
Mtodo C: Establecer el estado de archivo interno segn el
mensaje CPF enviado por la gestin de datos.
Continuar con el Paso 004 en la pgina 276
009
Estn los cdigos de retorno principal y secundario disponibles en el
sistema?
S No
010
Mtodo C: Establecer el estado de archivo interno segn el
mensaje CPF enviado por la gestin de datos.
Continuar con el Paso 004 en la pgina 276
011
Mtodo B: Establecer el estado de archivo interno basndose en los cdigos de
retorno principal y secundario disponibles en el sistema.
Continuar con el Paso 004 en la pgina 276

Interpretacin de cdigos de retorno principal y secundario


Al especificar un archivo TRANSACTION en el programa, la clusula FILE
STATUS de la instruccin SELECT puede contener dos nombres de datos: el
estado de archivo externo y el cdigo de retorno externo (principal y secundario).
Tal como se describe en el apartado Determinacin del tipo de error mediante la
clave de estado de archivo en la pgina 274, un estado de archivo puede establecerse de tres formas; sin embargo, los cdigos de retorno los establece el sistema
despus de cualquier transaccin de E/S que llame a la gestin de datos. Como
consecuencia, la mayora de condiciones de error que tienen como resultado un
mensaje del sistema, tambin tienen cdigo de retorno asociado.
Los cdigos de retorno son similares a valores de estado de archivos. Es decir,
los mensajes CPF enviados por el sistema son agrupados por el manejador de
excepciones de ejecucin ILE COBOL/400 y cada grupo de mensajes CPF se
utiliza para establecer uno o ms estados de archivo. De forma similar, cada
cdigo de retorno principal es tambin generado por un grupo de mensajes CPF.
(El cdigo de retorno secundario no es necesariamente el mismo). La principal
diferencia entre los estados de archivos y los cdigos de retorno es que la agrupacin de los mensajes CPF es distinta.
Aunque ILE COBOL/400 slo establece cdigos de retorno para archivos
TRANSACTION, otros tipos de archivos (como los archivos de impresora) tambin
establecen cdigos de retorno. Puede acceder a los cdigos de retorno para estos
archivos mediante un ACCEPT desde la operacin I-O-FEEDBACK.

Captulo 12. Manejo de errores y excepciones ILE COBOL/400

277

Manejo de mensajes mediante manejadores de condiciones


Un manejador de condiciones proporciona una forma para que un objeto de programa o procedimiento ILE maneje mensajes enviados por el sistema o por otro
objeto de programa o procedimiento ILE. Un manejador de condiciones puede
manejar uno o ms mensajes.
En algunos aspectos, un manejador de condiciones se parece a un procedimiento
USE. De forma similar a la manera en que un proceso USE especifica las
acciones que deben realizarse como respuesta a un error de E/S, un manejador de
condiciones especifica una accin que debe realizarse cuando se produce un error
durante el proceso de una instruccin de interfaz de mquina (MI). Un mensaje
del sistema seala un error de instruccin MI y cada instruccin ILE COBOL/400
est compuesta por una o ms instrucciones MI.
Existen dos tipos de manejadores de condiciones:
Un tipo de manejadores de condiciones es el que est activo para el todo el
programa. Estos manejadores de condiciones estn diseados para manejar
condiciones de error genricas.
El otro tipo de manejadores de condiciones est activo instruccin a
instruccin.Una utilizacin tpica de estos manejadores de condiciones es la
supervisin de operaciones de E/S. Estos manejadores de condiciones establecen los estados de archivo e indican condiciones SIZE ERROR,
END-OF-PAGE y OVERFLOW.

Manejo de errores en operaciones de Ordenar/Fusionar


Utilice el registro especial SORT-RETURN para detectar errores en las operaciones SORT o MERGE. El registro especial SORT-RETURN contiene cdigo
de retorno que indica el xito o el fallo de una operacin SORT o MERGE.El
registro especial SORT-RETURN contiene cdigo de retorno de 0 si la operacin
ha sido satisfactoria o de 16 si no lo ha sido.
Puede establecer el registro especial SORT-RETURN a 16 en un procedimiento
declarativo de error o de entrada/salida para finalizar una operacin SORT/MERGE
antes de que se hayan procesado todos los registros. La operacin finaliza antes
de que se devuelva o libere un registro.
El registro especial SORT-RETURN tiene la definicin implcita:
1

SORT-RETURN

GLOBAL

PIC S9(4) USAGE BINARY VALUE ZERO.

Cuando se utiliza en programas anidados, el registro especial SORT-RETURN se


define implcitamente como GLOBAL en el primer programa ILE COBOL/400.
Consulte las instrucciones SORT y MERGE en la publicacin ILE COBOL/400
Reference para obtener ms informacin sobre el registro especial
SORT-RETURN.

278

ILE COBOL/400 Gua del Programador

Manejo de excepciones en la instruccin CALL


En una instruccin CALL se produce una condicin de excepcin cuando se
produce una anomala en la operacin CALL. Por ejemplo, puede que el sistema
no tenga almacenamiento o no pueda ubicar el programa llamado. En este caso,
si no tiene una clusula ON EXCEPTION o ON OVERFLOW en la instruccin
CALL, la aplicacin puede finalizar de forma anmala.Utilice la clusula ON
EXCEPTION o ON OVERFLOW para detectar la condicin de excepcin, evitar la
finalizacin anmala y realizar su propia rutina de manejo de errores.Por ejemplo:
|

|
|

CALL "REPORTA"
IN LIBRARY "MYLIB"
ON EXCEPTION
DISPLAY "Programa REPORTA no disponible."
END-CALL
Si el programa REPORTA no est disponible o no se encuentra en la biblioteca
MYLIB, el control continuar con la clusula ON EXCEPTION.
Las expresiones ON EXCEPTION y ON OVERFLOW slo manejan las excepciones resultantes de la anomala de la operacin CALL.
Las condiciones ON EXCEPTION sealadas por la operacin CALL se manejan
mediante un manejador de condiciones registrado con la prioridad 130. Con este
nivel de prioridad, slo se manejan las condiciones sealadas en la entrada de la
pila de llamadas especfica donde se encuentra la instruccin CALL. Con este
nivel de prioridad los manejadores de condiciones escritas por usuarios puede que
no tengan la oportunidad de ver determinadas condiciones.
Si no tiene las expresiones ON EXCEPTION ni ON OVERFLOW en las instrucciones CALL de la aplicacin y se produce una anomala en la instruccin CALL, la
excepcin la manejar el manejador de condiciones ILE. Consulte el apartado
Manejo de condiciones ILE en la pgina 261 para obtener una visin general del
manejo de condiciones ILE.

Rutinas de manejo de errores escritas por el usuario


Puede manejar la mayora de condiciones de error que se produzcan cuando un
programa se est ejecutando utilizando la expresin ON EXCEPTION, la expresin
ON SIZE ERROR y otra semntica del lenguaje ILE COBOL/400. Pero en el caso
de una condicin de error extraordinaria como una comprobacin de mquina, ILE
COBOL/400 emitir un mensaje de consulta para permitirle determinar qu accin
debe seguir despus de que se haya producido un error grave. Sin embargo, ILE
COBOL/400 con ILE proporcionan un mecanismo, a travs de los manejadores de
condiciones ILE escritos por usuario, donde pueden manejarse condiciones de
error extraordinarias antes de emitir un mensaje de consulta. El manejo de condiciones ILE le proporciona la oportunidad de escribir sus propias rutinas de
manejo de errores para manejar condiciones de errores que permitan al programa
continuar ejecutndose.
Los manejadores de condiciones escritos por usuario tienen el nivel de prioridad
165. Este nivel de prioridad otorga a los manejadores de condiciones escritos por
el usuario la oportunidad de ver las condiciones sealadas antes de que lo hagan
los manejadores de condiciones de entrada-salida o de depurador ILE.

Captulo 12. Manejo de errores y excepciones ILE COBOL/400

279

Para que ILE transfiera el control a su propia rutina de manejo de errores escrita
por usuario, primero debe identificar y registrar su punto de entrada a ILE. Para
registrar un manejador de excepciones, transfiera un puntero de procedimiento a la
API de enlace Registrar un manejador de condiciones escritas por usuario
(CEEHDLR). Si desea utilizar un programa ILE COBOL/400 como un manejador
de excepciones, slo podr registrar el programa ILE COBOL/400 ms externo.
Como ILE COBOL/400 no permite la recursin, si registra un programa ILE
COBOL/400 como un manejador de excepcin, debe asegurarse de que slo
puede llamarse una vez en un grupo de activacin.
Consulte la publicacin ILE Conceptos para obtener ms informacin sobre los
manejadores de excepcin. Los elementos de datos de puntero de procedimiento
le permiten pasar la direccin de entrada de los puntos de entrada de procedimiento a los servicios ILE. Para obtener ms informacin sobre los elementos de
datos de puntero de procedimiento, vea el apartado Transferencia de las direcciones de punto de entrada con punteros de procedimientos en la pgina 260.
Puede registrarse cualquier nmero de manejadores de condiciones escritos por el
usuario. Si se registran ms de un manejador de condiciones escrito por usuario,
a los manejadores se les da otorga el control en el orden ltimo en entrar primero
en salir (LIFO).
Los manejadores de condiciones escritos por usuario tambin se pueden borrar del
registro utilizando la API Eliminar de registro manejador de condiciones escritas por
usuario (CEEHDLU).

Excepciones comunes y algunas de sus causas


Error de datos decimal MCH1202:
Se ha utilizado un elemento numrico inicial como fuente cuando no se ha
almacenado ningn dato vlido previamente en l. El elemento debera tener
una clusula VALUE o debera utilizarse una instruccin MOVE para inicializar
su valor.
Se ha intentado situar un dato no numrico en un elemento numrico.
Al principio del programa, se han escrito datos incorrectos en un subarchivo.
Los datos del subarchivo no se validarn hasta que se graben en la pantalla,
por eso, un error 1202 puede producirse en la instruccin WRITE de un
registro de control de subarchivo pero los datos incorrectos se han puesto
realmente en el subarchivo antes.
Excepciones de puntero MCH0601:
Parte de un elemento de la Linkage Section se ha extendido ms all del
espacio asignado.
Por ejemplo, si establece la direccin de un elemento de la Linkage section, y
uno o ms de sus elementos de datos iniciales se extienden ms all del
espacio con una instruccin MOVE del elemento de datos inicial, se emitir
MCH0601.
Para obtener ms informacin sobre la utilizacin de punteros, consulte Captulo 11, Utilizacin de punteros en un programa ILE COBOL/400 en la
pgina 235.

280

ILE COBOL/400 Gua del Programador

Alineacin de punteros MCH0602:


La alineacin del puntero en la Working Storage Section del programa de
llamada no coincide con la alineacin de la Linkage Section del programa
llamado. La alineacin debe estar en un lmite de 16 bytes.
Para obtener ms informacin sobre la utilizacin de punteros, consulte Captulo 11, Utilizacin de punteros en un programa ILE COBOL/400 en la
pgina 235.
Error de comprobacin de rango MCH0603:
El valor de subndice es inferior al lmite inferior de la matriz o mayor que el
lmite superior de la matriz, o el operando compuesto ha definido una serie de
caracteres fuera de los lmites de la serie de caracteres base.
Error de puntero MCH3601:
Se ha realizado una referencia a un registro o a un campo de un registro y el
archivo asociado se ha cerrado o no se ha abierto nunca.
Por ejemplo, la instruccin OPEN para el archivo no fue satisfactoria y se ha
intentado el proceso con cualquier otra instruccin de E/S para ese archivo. El
estado del archivo debe comprobarse antes de intentar ninguna otra E/S.
Fin de consultas CPF2415:
Se ha intentado aceptar la entrada de la corriente de entrada de trabajos mientras el sistema se est ejecutando en modalidad por lotes y no hay ninguna
entrada disponible.

Recuperacin despus de una anomala


Puede llevarse a cabo alguna recuperacin despus de una anomala. Las dos
reas donde puede producirse dicha recuperacin son:
recuperacin de archivos con control de compromiso
recuperacin de archivos TRANSACTION.

Recuperacin de archivos con control de compromiso


Cuando se rearranca el sistema despus de una anomala, los archivos bajo
control de compromiso se restauran automticamente a sus estados en el ltimo
lmite de compromiso. Para obtener informacin adicional sobre el control de compromiso, vea Utilizacin del control de compromiso en la pgina 310.
El control de compromiso puede encontrarse en el mbito de dos niveles, el nivel
de grupo de activacin y el nivel de trabajo. Consulte la seccin Commitment
Control Scoping en ILE Conceptos para obtener ms informacin.
Si un trabajo o grupo de activacin finaliza de forma anmala (debido a un error
del usuario o del sistema), los archivos bajo el control de compromiso se restauran
como parte de la terminacin de trabajo o del grupo de activacin al estado en que
se encontraban los archivos durante el ltimo lmite de compromiso. El lmite de
control de compromiso se determina mediante el mbito de control de compromiso
elegido para el programa.

Captulo 12. Manejo de errores y excepciones ILE COBOL/400

281

Como los archivos bajo el control de compromiso se retrotraen despus de una


anomala del sistema o del proceso, esta caracterstica puede utilizarse para
ayudar a rearrancar. Puede crear un registro separado para almacenar datos que
sern tiles en el caso de que sea necesario rearrancar un trabajo. Estos datos de
rearranque pueden incluir elementos, como por ejemplo totales, contadores,
valores de clave de archivo, valores de clave relativa y otra informacin relevante
del proceso de una aplicacin.
Si guarda los datos de rearranque mencionados anteriormente en un archivo bajo
control de compromiso, los datos de rearranque tambin se almacenarn permanentemente en la base de datos cuando se emita una instruccin COMMIT.
Cuando se produce un ROLLBACK despus de una anomala del trabajo o del
proceso, se puede recuperar un registro procesado satisfactoriamente antes de la
anomala. Tenga en cuenta que el mtodo anterior es slo una tcnica de programacin sugerida y no siempre ser el adecuado, depende de la aplicacin.

Recuperacin de archivos TRANSACTION


En algunos casos, se pueden recuperar errores de E/S en archivos
TRANSACTION sin la intervencin del operador o la desactivacin/activacin de
estaciones de trabajo o dispositivos de comunicaciones.
Para errores de E/S potencialmente recuperables en archivos TRANSACTION, el
sistema inicia la accin adems de los pasos que deben realizarse en el programa
de aplicacin para intentar la recuperacin de errores. Para obtener ms informacin sobre la accin realizada por el sistema, vea la Gestin de Comunicaciones.
Examinando el estado del archivo despus de una operacin de E/S, el programa
de aplicacin puede determinar si es posible una recuperacin de un error de E/S
en el archivo TRANSACTION. Si la clave de estado de archivo tiene un valor de
9N, el programa debe ser capaz de recuperarse de un error de E/S. Un procedimiento de recuperacin debe codificarse como parte del programa de aplicacin
y vara dependiendo si un slo dispositivo se ha adquirido mediante el archivo
TRANSACTION o si se han conectado dispositivos mltiples.
Para un archivo con un dispositivo adquirido:
1. Cierre el archivo TRANSACTION con el error de E/S.
2. Vuelva a abrir el archivo.
3. Procese los pasos necesarios para recuperar la operacin de E/S anmala.
Esto puede implicar un nmero de pasos, segn el tipo de dispositivo de programa utilizado. (Por ejemplo, si la ltima operacin de E/S fue READ, deber
repetir una o ms instrucciones WRITE, las cuales se procesaron antes de la
instruccin READ). Para obtener ms informacin sobre los procedimientos de
recuperacin, vea el manual ICF Programming.
Para un archivo de pantalla con dispositivos mltiples adquiridos:
1. DEJAR el dispositivo de programa que caus el error de E/S en el archivo
TRANSACTION.
2. ADQUIERA el mismo dispositivo de programa.
3. Vea el paso 3 superior.

282

ILE COBOL/400 Gua del Programador

Para un archivo ICF con dispositivos mltiples adquiridos:


1. ADQUIERA el mismo dispositivo de programa.
2. Vea el paso 3 superior.
Para un archivo de pantalla con dispositivos mltiples adquiridos:
Los intentos de recuperacin del programa de aplicacin deben normalmente intentarse una sola vez.
Si el intento de recuperacin falla:
Si el archivo slo tiene conectado un dispositivo de programa, termine el programa procesando las instrucciones STOP RUN, EXIT PROGRAM o GOBACK
e intente localizar el origen del error.
Si el archivo tiene mltiples dispositivos de programa adquiridos, puede realizar
una de las opciones siguientes:
Continuar procesando sin el dispositivo de programa que caus el error de
E/S en el archivo TRANSACTION y volver a adquirir el dispositivo posteriormente.
Finalizar el programa.
Para obtener una descripcin de los cdigos de retorno principales y secundarios
que puedan ayudar en el diagnstico de errores de E/S en el archivo
TRANSACTION, vea el manual ICF Programming o el manual Gestin de datos.
La Figura 68 en la pgina 284 proporciona un ejemplo de un procedimiento de
recuperacin de errores.
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
A\ ARCHIVO DE PANTALLA PARA EJEMPLO DE RECUPERACIN DE ERRORES
A\
A
INDARA
A
R FORMAT1
CF1(1 'FIN DEL PROGRAMA')
A\
A
12 28'ENTRAR ENTRADA '
A
INPUTFLD
5
I 12 42
A
2 26'F1 - TERMINAR'

Figura 67. Ejemplo del procedimiento de recuperacin de errores -- DDS

Captulo 12. Manejo de errores y excepciones ILE COBOL/400

283

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/RECOVERY

AS4SYS

96/7/4 9:39:9

F u e n t e
INST PL NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN

1
2
3
4
5
6
7
8
9
1
11
12
13
14
15
16
17
18
19
2
21

22
23

24
25
26
27
28
29
3
31
32
33
34
35
36
37
38
39
4
41
42
43

1 IDENTIFICATION DIVISION.
2 PROGRAM-ID. RECOVERY.
3 ENVIRONMENT DIVISION.
4 CONFIGURATION SECTION.
5 SOURCE-COMPUTER. IBM-AS4.
6 OBJECT-COMPUTER. IBM-AS4.
7 INPUT-OUTPUT SECTION.
8 FILE-CONTROL.
9
SELECT RECOVFILE
1
ASSIGN TO WORKSTATION-RECVFILE-SI
11
ORGANIZATION IS TRANSACTION
12
ACCESS MODE IS SEQUENTIAL
13
FILE STATUS IS STATUS-FLD, STATUS-FLD-2
14
CONTROL-AREA IS CONTROL-FLD.
15
SELECT PRINTER-FILE
16
ASSIGN TO PRINTER-QPRINT.
17
18 DATA DIVISION.
19 FILE SECTION.
2 FD RECOVFILE.
21 1 RECOV-REC.
22
COPY DDS-ALL-FORMATS OF RECVFILE.
+1
5 RECVFILE-RECORD PIC X(5).
+2\ FORMATO ENTRADA:FORMAT1
DE ARCHIVO RECVFILE
DE BIBLIOTECA TESTLIB
+3\
+4
5 FORMAT1-I
REDEFINES RECVFILE-RECORD.
+5
6 INPUTFLD
PIC X(5).
+6\ FORMATO SALIDA:FORMAT1
DE ARCHIVO RECVFILE
DE BIBLIOTECA TESTLIB
+7\
+8\
5 FORMAT1-O
REDEFINE RECVFILE-RECORD.
23
24 FD PRINTER-FILE.
25 1 PRINTER-REC.
26
5 PRINTER-RECORD
PIC X(132).
27
28 WORKING-STORAGE SECTION.
29
3 1 I-O-VERB
PIC X(1).
31 1 STATUS-FLD
PIC X(2).
32
88 NO-ERROR
VALUE "".
33
88 ACQUIRE-FAILED
VALUE "9H".
34
88 TEMPORARY-ERROR
VALUE "9N".
35 1 STATUS-FLD-2
PIC X(4).
36 1 CONTROL-FLD.
37
5 FUNCTION-KEY
PIC X(2).
38
5 PGM-DEVICE-NAME
PIC X(1).
39
5 RECORD-FORMAT
PIC X(1).
4 1 END-INDICATOR
PIC 1
INDICATOR 1
41
VALUE B"".
42
88 END-NOT-REQUESTED
VALUE B"".
43
88 END-REQUESTED
VALUE B"1".
44 1 USE-PROC-FLAG
PIC 1
45
VALUE B"1".
46
88 USE-PROC-NOT-EXECUTED
VALUE B"".
47
88 USE-PROC-EXECUTED
VALUE B"1".

Figura 68 (Parte 1 de 4). Ejemplo del procedimiento de recuperacin de errores

284

ILE COBOL/400 Gua del Programador

S NOMCOPIA

<-ALL-FMTS
<-ALL-FMTS
<-ALL-FMTS
<-ALL-FMTS
<-ALL-FMTS
<-ALL-FMTS
<-ALL-FMTS
<-ALL-FMTS

FEC CAMB

Pgina

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/RECOVERY

AS4SYS

INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN

44
45
46
47
48
49
5
51
52
53
54
55
56
57
58

59
6

61
62
63

64
65
66

67
68
69

7
71
72

73
74
75

48
49
5
51
52
53
54
55
56
57
58
59
6
61
62
63
64
65
66
67
68
69
7
71
72
73
74
75
76
77
78
79
8
81
82
83
84
85
86
87
88
89
9
91
92
93
94
95
96
97
98
99
1
11
12
13
14

RECOVERY-FLAG

88 NO-RECOVERY-DONE
88 RECOVERY-DONE
1 HEADER-LINE.
5 FILLER
5
1

FILLER

DETAIL-LINE.
5 FILLER
5

DESCRIPTION

DETAIL-VALUE

MESSAGE-LINE.
5 FILLER
5

DESCRIPTION

96/7/4 9:39:9
S NOMCOPIA

Pgina

FEC CAMB

PIC 1
VALUE B"".
VALUE B"".
VALUE B"1".
PIC X(6)
VALUE SPACES.
PIC X(72)
VALUE "ERROR REPORT".
PIC X(15)
VALUE SPACES.
PIC X(25)
VALUE SPACES.
PIC X(92)
VALUE SPACES.
PIC X(15)
VALUE SPACES.
PIC X(117)
VALUE SPACES.

PROCEDURE DIVISION.
DECLARATIVES.
HANDLE-ERRORS SECTION.
USE AFTER STANDARD ERROR PROCEDURE ON RECOVFILE. 1
DISPLAY-ERROR.
SET USE-PROC-EXECUTED TO TRUE.
WRITE PRINTER-REC FROM HEADER-LINE
AFTER ADVANCING PAGE
END-WRITE
MOVE "ERROR OCCURED IN" TO DESCRIPTION OF DETAIL-LINE.
MOVE I-O-VERB TO DETAIL-VALUE OF DETAIL-LINE.
WRITE PRINTER-REC FROM DETAIL-LINE
AFTER ADVANCING 5 LINES
END-WRITE
MOVE "FILE STATUS =" TO DESCRIPTION OF DETAIL-LINE.
MOVE STATUS-FLD TO DETAIL-VALUE OF DETAIL-LINE. 2
WRITE PRINTER-REC FROM DETAIL-LINE
AFTER ADVANCING 2 LINES
END-WRITE
MOVE "EXTENDED FILE STATUS =" TO DESCRIPTION OF DETAIL-LINE.
MOVE STATUS-FLD-2 TO DETAIL-VALUE OF DETAIL-LINE.
WRITE PRINTER-REC FROM DETAIL-LINE
AFTER ADVANCING 2 LINES
END-WRITE
MOVE "CONTROL-AREA =" TO DESCRIPTION OF DETAIL-LINE.
MOVE CONTROL-FLD TO DETAIL-VALUE OF DETAIL-LINE.
WRITE PRINTER-REC FROM DETAIL-LINE
AFTER ADVANCING 2 LINES
END-WRITE.
CHECK-ERROR.
IF TEMPORARY-ERROR AND NO-RECOVERY-DONE THEN
MOVE "\\\ERROR RECOVERY BEING ATTEMPTED\\\" 3
TO DESCRIPTION OF MESSAGE-LINE
WRITE PRINTER-REC FROM MESSAGE-LINE
AFTER ADVANCING 3 LINES
END-WRITE

96/7/4

Figura 68 (Parte 2 de 4). Ejemplo del procedimiento de recuperacin de errores

Captulo 12. Manejo de errores y excepciones ILE COBOL/400

285

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/RECOVERY

AS4SYS

INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN

76
77
78
79
8
81

82
83

84
85
86

87
88

89
9
91
92
93

94
95
96
97

98
99
1
11

12
13

15
16
17
18
19
11
111
112
113
114
115
116
117
118
119
12
121
122
123
124
125
126
127
128
129
13
131
132
133
134
135
136
137
138
139
14
141
142
143
144
145
146
147
148
149
15
151
152
153
154
155
156
157
158
159
16
161

SET RECOVERY-DONE TO TRUE


DROP PGM-DEVICE-NAME FROM RECOVFILE
ACQUIRE PGM-DEVICE-NAME FOR RECOVFILE

S NOMCOPIA

FEC CAMB

ELSE
IF RECOVERY-DONE THEN 5
MOVE "\\\ERROR AROSE FROM RETRY AFTER RECOVERY\\\"
TO DESCRIPTION OF MESSAGE-LINE
WRITE PRINTER-REC FROM MESSAGE-LINE
AFTER ADVANCING 3 LINES
END-WRITE
MOVE "\\\PROGRAM ENDED\\\"
TO DESCRIPTION OF MESSAGE-LINE
WRITE PRINTER-REC FROM MESSAGE-LINE
AFTER ADVANCING 2 LINES
END-WRITE
CLOSE RECOVFILE
PRINTER-FILE
STOP RUN
ELSE
SET NO-RECOVERY-DONE TO TRUE
END-IF
END-IF
MOVE "\\\EXECUTION CONTINUES\\\"
TO DESCRIPTION OF MESSAGE-LINE.
WRITE PRINTER-REC FROM MESSAGE-LINE
AFTER ADVANCING 2 LINES
END-WRITE.
END DECLARATIVES.
MAIN-PROGRAM SECTION.
MAINLINE.
MOVE "OPEN" TO I-O-VERB.
OPEN I-O
RECOVFILE
OUTPUT PRINTER-FILE.
PERFORM I-O-PARAGRAPH UNTIL END-REQUESTED.
CLOSE RECOVFILE
PRINTER-FILE.
STOP RUN.

I-O-PARAGRAPH.
PERFORM UNTIL USE-PROC-NOT-EXECUTED OR NO-RECOVERY-DONE
MOVE "WRITE" TO I-O-VERB
SET USE-PROC-NOT-EXECUTED TO TRUE
WRITE RECOV-REC FORMAT IS "FORMAT1"
INDICATOR IS END-INDICATOR
END-WRITE
END-PERFORM
MOVE "READ" TO I-O-VERB.
SET USE-PROC-NOT-EXECUTED TO TRUE.
SET NO-RECOVERY-DONE TO TRUE.
READ RECOVFILE FORMAT IS "FORMAT1"
INDICATOR IS END-INDICATOR 8
END-READ
IF NO-ERROR THEN
PERFORM SOME-PROCESSING
END-IF.

ILE COBOL/400 Gua del Programador

96/7/4

Figura 68 (Parte 3 de 4). Ejemplo del procedimiento de recuperacin de errores

286

96/7/4 9:39:9

96/7/4

Pgina

5716CB1 V3R7M

96118 LN

IBM ILE COBOL/4

TESTLIB/RECOVERY

AS4SYS

INST NA NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN

96/7/4 9:39:9
S NOMCOPIA

Pgina

FEC CAMB

162 SOME-PROCESSING.
163\
(Inserte el proceso de alguna base de datos por ejemplo).
\ \ \ \ \

F I N

D E

F U E N T E

\ \ \ \ \

Figura 68 (Parte 4 de 4). Ejemplo del procedimiento de recuperacin de errores

Define el proceso que se lleva a cabo cuando se produce un error de E/S


en RECOVFILE.

Imprime informacin para ayudar a diagnosticar el problema.

Si el estado del archivo es igual a 9N (error temporal) y no se ha intentado


ninguna recuperacin de error previa para esta operacin de E/S, ahora se
intentar la recuperacin de error.

La recuperacin consiste en dejar y luego volver a adquirir el dispositivo de


programa en el cual se ha producido el error de E/S.

Para evitar la repeticin en bucle del programa, si la recuperacin se ha


intentado antes, no se intentar ahora.

La lnea principal del programa consiste en grabar en y leer de un dispositivo hasta que el usuario seale una finalizacin del programa pulsando F1.

Si la operacin WRITE ha fallado pero se ha realizado la recuperacin,


WRITE se intenta de nuevo.

Si la operacin READ ha fallado, el proceso continuar grabando en el dispositivo de nuevo y luego, intentando la operacin READ otra vez.

Captulo 12. Manejo de errores y excepciones ILE COBOL/400

287

288

ILE COBOL/400 Gua del Programador

Consideraciones sobre entrada y salida en ILE COBOL/400

Copyright IBM Corp. 1994, 1996

289

290

ILE COBOL/400 Gua del Programador

Captulo 13. Definicin de archivos


Este captulo describe cmo:
definir archivos descritos por programa
definir archivos descritos externamente
describir archivos utilizando las Especificaciones de descripcin de datos
(DDS)
utilizar archivos descritos externamente en un programa ILE COBOL/400.

Tipos de descripciones de archivos


El elemento clave para todas las operaciones de E/S del sistema AS/400 es el
archivo. El sistema operativo mantiene una descripcin de cada archivo utilizado
por un programa. La descripcin del archivo del sistema operativo incluye informacin sobre el tipo de archivo, como por ejemplo la base de datos o un dispositivo, la longitud de los registros del archivo y una descripcin de cada campo y sus
atributos. El archivo se describe al nivel del campo del sistema operativo a travs
de IDDU, de los mandatos SQL/400 o de DDS. Si crea un archivo (por ejemplo,
utilizando el mandato CRTPF) sin especificar DDS para l, el archivo an tiene una
descripcin de campo. El campo nico tiene el mismo nombre que el archivo y
tiene la longitud de registro especificada en el mandato de creacin.
Puede definir un archivo de dos formas:
Un archivo descrito por programa lo describe el programador en el nivel de
campo de la DATA DIVISION dentro del programa ILE COBOL/400.
Para un archivo descrito externamente, el compilador ILE COBOL/400 utiliza
la descripcin del archivo del sistema para generar las instrucciones fuente ILE
COBOL/400 de la DATA DIVISION, que describen el archivo en el nivel de
campo dentro del programa ILE COBOL/400. El archivo debe crearse antes
de compilar el programa.
Tanto los archivos descritos externamente como los descritos por programa deben
definirse en el programa ILE COBOL/400 dentro de la INPUT-OUTPUT SECTION y
la FILE SECTION. Las descripciones registradas de la FILE SECTION para
archivos descritos externamente se definen con la instruccin COPY de Formato 2.
Slo se extraen las descripciones de nivel de campo. Cuando se especifica
EXTERNALLY-DESCRIBED-KEY como RECORD KEY, tambin se extraen los
campos que componen RECORD KEY desde DDS. Para obtener ms informacin
sobre la instruccin COPY de Formato 2, vea la ILE COBOL/400 Reference.
El proceso de archivos real dentro de la Procedure Division es la misma si el
archivo se describe externamente o lo describe el programa.

Copyright IBM Corp. 1994, 1996

291

Definicin de archivos descritos por el programa


Los registros y los campos para un archivo descrito por programa se describen
codificando las descripciones de registro directamente en la FILE SECTION del
programa ILE COBOL/400, en lugar de utilizar la instruccin COPY de Formato 2.
El archivo debe existir en el sistema antes de que pueda ejecutarse el programa.
La nica excepcin es cuando se utiliza la creacin dinmica de archivos, especificando OPTION(*CRTF) en el mandato CRTCBLMOD/CRTBNDCBL. Para ms
informacin, consulte la descripcin del parmetro OPTION en Parmetros del
mandato CRTCBLMOD en la pgina 33.
Para crear un archivo, utilice uno de los mandatos de Crear archivo, que puede
encontrar en la publicacin CL Reference. Las DDS puede utilizarse con los mandatos Crear archivo. Para un archivo indexado ILE COBOL/400, debe crearse una
va de acceso por clave. Especifique una clave en las DDS al crear el archivo. La
clave del registro del programa ILE COBOL/400 debe coincidir con la clave definida
al crear el archivo. Si estos valores clave no coinciden, an puede realizarse la
operacin sobre el archivo pero se le pasa al sistema una clave de archivo incorrecta. Si la clave de registro incorrecta contiene por casualidad un valor de clave
aparentemente correcta, la operacin de entrada/salida se realizar satisfactoriamente, pero sobre datos incorrectos. Por ello, la integridad de los datos puede
comprometerse. Para evitar que ocurra este problema, debera utilizar archivos
descritos externamente siempre que sea posible.

Definicin de archivos descritos externamente


La descripcin externa para un archivo incluye:
Las especificaciones de formato de registro que contienen una descripcin de
los campos en un registro
Especificaciones de va de acceso que describen cmo se recuperarn los
registros.
Estas especificaciones provienen de la descripcin de archivos externa y del
mandato OS/400 que utilice para crear el archivo.
Los archivos descritos externamente ofrecen las siguientes ventajas sobre los
archivos descritos por programa:
Menos codificacin en programas ILE COBOL/400. Si el mismo archivo lo utilizan varios programas, los campos pueden definirse una vez para el sistema
operativo y luego los utilizarn todos los programas. Esto elimina la necesidad
de codificar una descripcin de registro separada para cada programa que
utilice el archivo.

Reduce la posibilidad de un error de programacin. Puede actualizar programas a menudo cambiando el formato del registro del archivo y luego recompilando los programas que utilizan el archivo sin cambiar ninguna codificacin
del programa.

Comprobacin de nivel de la descripcin de archivos. Se realiza una comprobacin de nivel de la descripcin del archivo en el programa ILE COBOL/400 y
del archivo real del sistema cuando ste se abre (a menos que se especifique
LVLCHK(*NO) en el mandato de crear archivo o de alteracin temporal). Si la

292

ILE COBOL/400 Gua del Programador

descripcin del archivo en el programa no coincide con el archivo real, la operacin de apertura fallar con un estado de archivo de 39.
Para archivos indexados, si se especifica EXTERNALLY-DESCRIBED-KEY en
la clusula RECORD KEY, puede asegurar que la clave de archivo ocupa la
misma posicin en el archivo real que el la descripcin del archivo del programa ILE COBOL/400. Adems, puede utilizar claves no continuas, lo que no
es posible con archivos descritos por programa.
Documentacin mejorada. Los programas que utilizan los mismos archivos utilizan nombres de formatos de registro y de campos coherentes.
Cualquier edicin a procesar en archivos de salida descritos externamente
pueden especificarse en DDS.
Antes de que pueda utilizar un archivo descrito externamente en su programa,
debe crear DDS para describir el archivo y crear el archivo real.

Descripcin de archivos utilizando especificaciones de descripcin de


datos (DDS)
Puede utilizar Especificaciones de descripcin de datos (DDS) para describir
archivos a nivel de campo en el sistema operativo. En DDS, cada formato de
registro de un archivo descrito externamente se identifica mediante un nombre de
formato de registro exclusivo.

Las especificaciones de formato de registro describen los campos de un registro y


su ubicacin. Los campos se sitan en el registro en el orden especificado en las
DDS. La descripcin de campos incluye generalmente el nombre del campo, el
tipo de campo (carcter, binario, decimal externo, decimal interno, coma flotante
interno) y la longitud de campo (incluyendo el nmero de posiciones decimales de
un campo numrico). En lugar de especificarse en el formato de registro para un
archivo fsico o lgico, los atributos de campo pueden definirse en un archivo de
referencia de campos. (Vea la Figura 69 en la pgina 294.)
Las claves para un formato de registro se especifican en las DDS. Al utilizar una
instruccin COPY de Formato 2, se genera una tabla de comentarios en el listado
de programas fuente mostrando como se definen las claves para el formato en las
DDS.
Adems, pueden utilizarse palabras clave de DDS para:
Especificar cdigos de edicin para un campo (EDTCDE)
Especificar palabras de edicin para un campo (EDTWRD)
Especificar que los valores de clave duplicados no se permiten para el archivo
(UNIQUE)
Especificar una descripcin de texto para un formato de registro o un un
campo (TEXT).
Vea la publicacin DDS Reference para obtener una lista completa de las palabras
clave de DDS vlidas para un archivo de base de datos.

Captulo 13. Definicin de archivos

293

....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
A\\FLDREF
DSTREF
DISTRIBUTION APPLICATION FIELDS REFERENCE
A
R DSTREF
TEXT('REF. CAMPO DISTRIBUCIN')
A\ COMMON FIELDS USED AS REFERENCE
1 A
BASDAT
6
EDTCDE(Y)
A
TEXT('CAMPO FECHA BASE')
A\ FIELDS USED BY CUSTOMER MASTER FILE
2 A
CUST
5
CHECK(MF)
A
COLHDG('NMERO' 'CLIENTE')
A
NAME
2
COLHDG('NOMBRE DEL CLIENTE')
3 A
ADDR
R
REFFLD(NAME)
A
COLHDG('DIRECCIN DEL CLIENTE')
A
CITY
R
REFFLD(NAME)
A
COLHDG('CIUDAD DEL CLIENTE')
2 A
STATE
2
CHECK(MF)
A
COLHDG('PROVINCIA')
A
SRHCOD
6
CHECK(MF)
A
COLHDG('CDIGO' 'BSQUEDA')
A
TEXT('CDIGO BSQUEDA NMERO CLIENTE')
2 A
ZIP
5
CHECK(MF)
A
COLHDG('CDIGO' 'POSTAL')
4 A
CUSTYP
1
RANGE(1 5)
A
COLHDG('TIPO' 'CLIENTE')
A
TEXT('TIPO DE CLIENTE 1=GOV 2=SCH 3=B+
A
US 4=PT 5=OTH')
5 A
ARBAL
8 2
COLHDG('SALDO' 'REG.CTAS.')
A
EDTCDE(J)
6 A
ORDBAL
R
REFFLD(ARBAL)
A
COLHDG('TOTAL CC' 'EN ARCHIVO PEDIDOS')
A
LSTAMT
R
REFFLD(ARBAL)
A
COLHDG('LTIMA' 'CANT.' 'PAGADA')
7 A
TEXT('LTIMA CANT. PAGADA EN CC')
A
LSTDAT
R
REFFLD(ARBAL)
A
COLHDG('LTIMA' 'FECHA' 'PAGADA ')
A
TEXT('LTIMA FECHA PAGADA EN CC')
A
CRDLMT
8 2
COLHDG('LMITE' 'CRDITO' 'CLIENTE')
A
EDTCDE(J)
A
SLSYR
1 2
COLHDG('VENTAS' 'CLIENTE' 'AO ACTUAL')
A
EDTCDE(J)
A
SLSLYR
1 2
COLHDG('VENTAS' 'CLIENTE' 'AO ANTERIOR')
A
EDTCDE(J)

Figura 69. Ejemplo de un archivo de referencia de campos

Este ejemplo de un archivo de referencia de campos (Figura 69) muestra las definiciones de los campos utilizados por el archivo CUSMSTL (lgico maestro de
clientes), que se muestra en la Figura 70 en la pgina 295. El archivo de referencia de campos contiene normalmente las definiciones de campos que utilizan
otros archivos. El texto siguiente describe algunas de las entradas para este
archivo de referencia de campos.

294

El cdico de edicin Y edita el campo BASDAT, tal como lo indica la palabra


clave EDTCDE (Y). Si este campo se utiliza en un archivo de salida descrito externamente para un programa ILE COBOL/400, el campo generado
por COBOL es compatible con el tipo de datos especificado en las DDS. El
campo se edita cuando se escribe el registro. Si el campo se utiliza en un
archivo de salida descrito por programa, la compatibilidad con los campos
DDS del archivo es responsabilidad del usuario. Si DDS no se utiliza para
crear el archivo, la edicin apropiada del campo en el programa ILE
COBOL/400 tambin es responsabilidad del usuario.

La entrada CHECK(MF) especifica que el campo es un campo de relleno


obligatorio cuando se entra desde una estacin de trabajo de pantalla. De
relleno obligatorio significa que todos los caracteres para el campo deben
introducirse desde la estacin de trabajo de la pantalla.

Los campos ADDR y CITY comparten los mismos atributos especificados


para el campo NAME, tal como lo indica la palabra clave REFFLD.

ILE COBOL/400 Gua del Programador

|
|

La palabra clave RANGE, especificada para el campo CUSTYP, asegura


que los nicos valores vlidos que pueden introducirse en este campo
desde una estacin de trabajo de pantalla son del 1 al 5.

La palabra clave COLHDG proporciona una cabecera de columna para el


campo si la utilizan las Herramientas para el desarrollo de aplicaciones/400.

El cdigo de edicin J edita el campo ARBAL, tal como lo indica la palabra


clave EDTCDE(J).

Para algunos campos se proporciona una descripcin de texto (palabra


clave TEXT). La palabra clave TEXT se utiliza por motivos de documentacin y aparece en varios listados.

Utilizacin de archivos descritos externamente en un programa


ILE COBOL/400
Puede incorporar la descripcin de archivos en el programa codificando una instruccin COPY de Formato 2. Entonces la informacin de la descripcin externa la
recupera el compilador ILE COBOL/400 y se genera una estructura de datos ILE
COBOL/400.
Las pginas siguientes proporcionan ejemplos de la utilizacin de DDS y del
cdigo ILE COBOL/400 que resultara de la utilizacin de una instruccin COPY de
Formato 2. (Vea la ILE COBOL/400 Reference para obtener una descripcin detallada de la instruccin COPY de Formato 2.)
La Figura 70 muestra las DDS para un archivo lgico y la Figura 71 en la
pgina 296 muestra el cdigo ILE COBOL/400 generado.
La Figura 72 en la pgina 297 describe el mismo archivo pero incluye la
palabra clave ALIAS y la Figura 73 en la pgina 297 muestra el cdigo ILE
COBOL/400 generado.
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
1 A\\ LOGICAL CUSMSTL
CUSTOMER MASTER FILE
A
2 UNIQUE
A
3 R CUSREC
PFILE(CUSMSTP)
A
TEXT('CUSTOMER MASTER RECORD')
A
CUST
A
NAME
A
ADDR
A
CITY
A
STATE
A
ZIP
A
SRHCOD
A
CUSTYP
A
ARBAL
A
ORDBAL
A
LSTAMT
A
LSTDAT
A
CRDLMT
A
SLSYR
5
A
SLSLYR
A
4 K CUST

Figura 70. Ejemplo de Especificaciones de descripcin de datos para un archivo lgico

Se define un archivo lgico para procesar el archivo fsico maestro de


clientes (CUSMSTP) y se denomina CUSMSTL.

La palabra clave UNIQUE indica que no estn permitidos los valores de


clave duplicados.

Se define un formato de registro (CUSREC) para el archivo CUSMSTL, el


cual debe basarse en el archivo fsico CUSMSTP.
Captulo 13. Definicin de archivos

295

El campo CUST se identifica como el campo de clave para este archivo.

Si no se especifican los atributos de campo (como por ejemplo, longitud, tipo


de datos y posiciones decimales) en las DDS para un archivo lgico, los
atributos se obtienen del campo correspondiente en el archivo fsico. Cualquier atributo de campo especificado en las DDS para el archivo lgico
altera temporalmente los atributos para el campo correspondiente del
archivo fsico. La definicin de los campos del archivo fsico puede hacer
referencia a un archivo de referencia de campos. Un archivo de referencia
de campos es un archivo de descripcin de datos formado por nombres de
campos y sus funciones, como por ejemplo el tamao y el tipo. Cuando se
utiliza un archivo de referencia de campos, los mismos campos utilizados en
formatos de registro mltiples deben definirse slo una vez en el archivo de
referencia de campos. Para obtener ms informacin sobre un archivo de
referencia de campos, vea el manual DB2/400 Programacin de la base de
datos.

La Figura 69 en la pgina 294 muestra un ejemplo de un archivo de referencia de


campos que define los atributos de los campos utilizados en el archivo de base de
datos. Vea el manual DB2/400 Programacin de la base de datos para obtener
ms informacin relacionada con los archivos de referencia de campos.

F u e n t e
INST PL NUMSEC -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTIFN

18

19
2
21
22
23
24
25
26
27
28
29
3
31
32
33
34

2 1
21
+1\
+2\
+3\
+4
+5
+6\
+7
+8\
+9
+1\
+11
+12\
+13
+14\
+15
+16\
+17
+18\
+19
+2\
+21
+22\
+23
+24\
+25
+26\
+27
+28\
+29
+3\
+31
+32\
+33
+34\

CUSTOMER-INVOICE-RECORD.
COPY DDS-CUSREC OF CUSMSTL.
FORMATO E-S:CUSREC
DE ARCHIVO CUSMSTL
DE BIBLIOTECA TESTLIB
REGISTRO MAESTRO DEL CLIENTE
CLAVE SUMINISTRADA POR USUARIO MEDIANTE CLUSULA RECORD KEY
5 CUSREC.
6 CUST
PIC X(5).
NMERO DE CLIENTE
6 NAME
PIC X(25).
NOMBRE DE CLIENTE
6 ADDR
PIC X(2).
DIRECCIN DE CLIENTE
6 CITY
PIC X(2).
CIUDAD DEL CLIENTE
6 STATE
PIC X(2).
PROVINCIA
6 ZIP
PIC S9(5)
COMP-3.
CDIGO POSTAL
6 SRHCOD
PIC X(6).
CDIGO BSQUEDA NMERO CLIENTE
6 CUSTYP
PIC S9(1)
COMP-3.
TIPO DE CLIENTE 1=GOV 2=SCH 3=BUS 4=PVT 5=OT
6 ARBAL
PIC S9(6)V9(2) COMP-3.
SALDO REGISTRO CUENTAS
6 ORDBAL
PIC S9(6)V9(2) COMP-3.
TOTAL CC EN ARCHIVO PEDIDOS
6 LSTAMT
PIC S9(6)V9(2) COMP-3.
LTIMA CANT. PAGADA EN CC
6 LSTDAT
PIC S9(6)
COMP-3.
LTIMA FECHA PAGADA EN CC
6 CRDLMT
PIC S9(6)V9(2) COMP-3.
LMITE CRDITO CLIENTE
6 SLSYR
PIC S9(8)V9(2) COMP-3.
VENTAS CLIENTE AO ACTUAL
6 SLSLYR
PIC S9(8)V9(2) COMP-3.
VENTAS CLIENTE AO ANTERIOR

Figura 71. Ejemplo de los resultados de la instruccin COPY de formato 2 (DDS)

296

ILE COBOL/400 Gua del Programador

S NOMCOPIA

CUSREC
CUSREC
CUSREC
CUSREC
CUSREC
CUSREC
CUSREC
CUSREC
CUSREC
CUSREC
CUSREC
CUSREC
CU