562
Rational Developer for System z, Versión 9.0.1 PL/I for Windows Guía de programación Versión 9.0.1 SC18-9977-06

Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

  • Upload
    lamanh

  • View
    227

  • Download
    6

Embed Size (px)

Citation preview

Page 1: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Rational Developer for System z, Versión 9.0.1PL/I for Windows

Guía de programaciónVersión 9.0.1

SC18-9977-06

���

Page 2: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257
Page 3: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Rational Developer for System z, Versión 9.0.1PL/I for Windows

Guía de programaciónVersión 9.0.1

SC18-9977-06

���

Page 4: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Nota!Antes de utilizar esta información y el producto al que da soporte, lea la información general que se encuentra en “Avisos”en la página 499.

Undécima edición (diciembre de 2013)

Esta edición es aplicable a Rational Developer para System z, PL/I para Windows, Versión 9.0.1, y a cualquierrelease posterior hasta que se indique lo contrario en nuevas ediciones o boletines técnicos. Asegúrese de utilizar laedición correcta para el nivel del producto.

Puede solicitar publicaciones en línea en http://www.ibm.com/e-business/linkweb/publications/servlet/pbi.wss, opuede hacerlo por teléfono o a través del fax. IBM Software Manufacturing Solutions acepta solicitudes depublicaciones de 8:30 a.m. a 7:00 p.m. (EST). El número de teléfono es (800)879-2755. El número de fax es(800)445-9269.

Cuando se envía información a IBM, se otorga a IBM un derecho no exclusivo de utilizar o distribuir la informaciónde la forma que IBM considere oportuna sin incurrir por ello en ninguna obligación con el remitente de lainformación.

© Copyright IBM Corporation 1998, 2013.

Page 5: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Contenido

Tablas . . . . . . . . . . . . . . . xi

Figuras . . . . . . . . . . . . . . xiii

Rational Developer for System z,Versión 9.0.1 PL/I para WindowsGuía de programación . . . . . . . . xvUndécima edición (diciembre de 2013) . . . . . xv

Acerca de esta guía . . . . . . . . xviiNovedades . . . . . . . . . . . . . . xviiLectura de los diagramas de sintaxis . . . . . xviiCómo enviar comentarios . . . . . . . . . xx

Parte 1. Introducir PL/I en suestación de trabajo . . . . . . . . . 1

Capítulo 1. Portar aplicaciones entreplataformas . . . . . . . . . . . . . 3Conseguir aplicaciones del sistema principal paracompilar en la estación de trabajo . . . . . . . 3

Elegir las opciones de tiempo de compilacióncorrectas . . . . . . . . . . . . . . . 4Lenguaje restringido . . . . . . . . . . . 4Utilizar función de macros para mover programas 7

Conseguir aplicaciones del sistema principal paraejecutar en la estación de trabajo. . . . . . . . 7

Diferencias de enlace . . . . . . . . . . 7representaciones de datos que causan diferenciasde tiempo de ejecución . . . . . . . . . . 8Diferencias de entorno que afectan a laportabilidad . . . . . . . . . . . . . 10Elementos de lenguaje que provocan diferenciasen tiempo de ejecución . . . . . . . . . 11

Parte 2. Compilar y enlazar suprograma . . . . . . . . . . . . . 15

Capítulo 2. Compilación del programa 17Un ejercicio de práctica breve . . . . . . . . 17

El programa HELLO (Hola) . . . . . . . . 17Utilizar opciones de tiempo de compilación . . 18Utilizar los programas de ejemplo incluidos conel producto . . . . . . . . . . . . . 18

Pasos previos para compilar programas fuente . . 18Estructura de archivo de programa . . . . . 18Formato de archivo de programa . . . . . . 20

Definir variables de entorno en tiempo decompilación . . . . . . . . . . . . . . 21

IBM.OPTIONS . . . . . . . . . . . . 22IBM.PPINCLUDE . . . . . . . . . . . 22IBM.PPMACRO . . . . . . . . . . . . 22

IBM.PPSQL . . . . . . . . . . . . . 23IBM.PPCICS . . . . . . . . . . . . . 23IBM.SOURCE. . . . . . . . . . . . . 23IBM.SYSLIB . . . . . . . . . . . . . 23IBM.PRINT . . . . . . . . . . . . . 23IBM.OBJECT . . . . . . . . . . . . . 24IBM.DECK . . . . . . . . . . . . . 24INCLUDE . . . . . . . . . . . . . . 24TMP. . . . . . . . . . . . . . . . 24

Utilizar el mandato PLI para invocar al compilador 24Dónde especificar opciones de tiempo decompilación . . . . . . . . . . . . . . 25

IBM.OPTIONS y IBM.PPxxx variable de entornos 25Mandato PLI . . . . . . . . . . . . . 25sentencia %PROCESS . . . . . . . . . . 25

Capítulo 3. Opciones de tiempo decompilación . . . . . . . . . . . . 27Descripciones de la opción en tiempo decompilación . . . . . . . . . . . . . . 27Reglas para utilizar opciones de tiempo decompilación . . . . . . . . . . . . . . 30ADDEXT . . . . . . . . . . . . . . . 32AGGREGATE . . . . . . . . . . . . . 33ATTRIBUTES . . . . . . . . . . . . . . 34BIFPREC . . . . . . . . . . . . . . . 35BLANK. . . . . . . . . . . . . . . . 36CASERULES . . . . . . . . . . . . . . 37CHECK . . . . . . . . . . . . . . . 38CMPAT. . . . . . . . . . . . . . . . 39CODEPAGE . . . . . . . . . . . . . . 40COMPILE . . . . . . . . . . . . . . . 41COPYRIGHT . . . . . . . . . . . . . . 42CURRENCY . . . . . . . . . . . . . . 43DBCS . . . . . . . . . . . . . . . . 44DEFAULT . . . . . . . . . . . . . . . 45DEPRECATE . . . . . . . . . . . . . . 54DEPRECATENEXT . . . . . . . . . . . . 56DLLINIT . . . . . . . . . . . . . . . 57ENCODING . . . . . . . . . . . . . . 58EXIT. . . . . . . . . . . . . . . . . 59EXTRN . . . . . . . . . . . . . . . . 60FLAG . . . . . . . . . . . . . . . . 61FLOATINMATH. . . . . . . . . . . . . 62GONUMBER . . . . . . . . . . . . . . 63GRAPHIC . . . . . . . . . . . . . . . 64IGNORE . . . . . . . . . . . . . . . 65IMPRECISE . . . . . . . . . . . . . . 66INCAFTER . . . . . . . . . . . . . . 67INCLUDE . . . . . . . . . . . . . . . 68INITAUTO . . . . . . . . . . . . . . 69INITBASED . . . . . . . . . . . . . . 70INITCTL . . . . . . . . . . . . . . . 71INITSTATIC . . . . . . . . . . . . . . 72INSOURCE . . . . . . . . . . . . . . 73

© Copyright IBM Corp. 1998, 2013 iii

Page 6: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

LANGLVL. . . . . . . . . . . . . . . 74LIBS . . . . . . . . . . . . . . . . . 75LIMITS . . . . . . . . . . . . . . . . 76LINECOUNT . . . . . . . . . . . . . . 77LINEDIR . . . . . . . . . . . . . . . 78LIST . . . . . . . . . . . . . . . . . 79LISTVIEW . . . . . . . . . . . . . . . 80MACRO . . . . . . . . . . . . . . . 82MARGINI . . . . . . . . . . . . . . . 83MARGINS. . . . . . . . . . . . . . . 84MAXGEN . . . . . . . . . . . . . . . 85MAXMSG . . . . . . . . . . . . . . . 86MAXNEST . . . . . . . . . . . . . . 87MAXSTMT . . . . . . . . . . . . . . 88MAXTEMP . . . . . . . . . . . . . . 89MDECK . . . . . . . . . . . . . . . 90MSG. . . . . . . . . . . . . . . . . 91MSGSUMMARY. . . . . . . . . . . . . 92NAMES . . . . . . . . . . . . . . . 93NATLANG . . . . . . . . . . . . . . 94ANID . . . . . . . . . . . . . . . . 95NOT. . . . . . . . . . . . . . . . . 96NUMBER . . . . . . . . . . . . . . . 97OBJECT . . . . . . . . . . . . . . . 98OFFSET . . . . . . . . . . . . . . . 99ONSNAP. . . . . . . . . . . . . . . 100OPTIMIZE . . . . . . . . . . . . . . 101OPTIONS . . . . . . . . . . . . . . 102OR . . . . . . . . . . . . . . . . . 103PP . . . . . . . . . . . . . . . . . 104PPCICS . . . . . . . . . . . . . . . 105PPINCLUDE . . . . . . . . . . . . . 106PPLIST . . . . . . . . . . . . . . . 107PPMACRO . . . . . . . . . . . . . . 108PPSQL . . . . . . . . . . . . . . . 109PPTRACE . . . . . . . . . . . . . . 110PRECTYPE . . . . . . . . . . . . . . 111PREFIX . . . . . . . . . . . . . . . 112PROBE . . . . . . . . . . . . . . . 113PROCEED . . . . . . . . . . . . . . 114PROCESS. . . . . . . . . . . . . . . 115QUOTE . . . . . . . . . . . . . . . 116REDUCE . . . . . . . . . . . . . . . 117RESEXP . . . . . . . . . . . . . . . 118RESPECT . . . . . . . . . . . . . . . 119RULES . . . . . . . . . . . . . . . 120SEMÁNTICA . . . . . . . . . . . . . 128SNAP . . . . . . . . . . . . . . . . 129SOSI . . . . . . . . . . . . . . . . 130SOURCE . . . . . . . . . . . . . . . 131STATIC . . . . . . . . . . . . . . . 132STMT . . . . . . . . . . . . . . . . 133STORAGE . . . . . . . . . . . . . . 134SYNTAX . . . . . . . . . . . . . . . 135SYSPARM . . . . . . . . . . . . . . 136SYSTEM . . . . . . . . . . . . . . . 137TERMINAL . . . . . . . . . . . . . . 138TEST . . . . . . . . . . . . . . . . 139USAGE . . . . . . . . . . . . . . . 140WIDECHAR. . . . . . . . . . . . . . 141WINDOW . . . . . . . . . . . . . . 142

XINFO . . . . . . . . . . . . . . . 143XML . . . . . . . . . . . . . . . . 146XREF . . . . . . . . . . . . . . . . 147

Capítulo 4. Preprocesadores PL/I . . . 149Preprocesador de inclusión . . . . . . . . . 149

Ejemplos . . . . . . . . . . . . . . 149Variable de entorno de opciones delpreprocesador de inclusión . . . . . . . . 150

Preprocesador de macros . . . . . . . . . 150Opciones del preprocesador Macro . . . . . 150Variables de entorno de las opciones de lafunción de macros . . . . . . . . . . . 152

Preprocesador SQL . . . . . . . . . . . 152Consideraciones de programación y compilación 152Opciones del preprocesador SQL . . . . . . 154Variable de entorno de opciones delpreprocesador SQL . . . . . . . . . . 161Variables de entorno BIND del preprocesadorSQL . . . . . . . . . . . . . . . 161Codificar sentencias SQL en aplicaciones PL/I 161Soporte de objetos grandes (LOB) . . . . . 170Programas de ejemplo de funciones definidaspor el usuario . . . . . . . . . . . . 171Manejar códigos de retorno de error SQL . . . 172Consideraciones de migración y compatibilidadSQL . . . . . . . . . . . . . . . 173

Soporte CICS . . . . . . . . . . . . . 173Consideraciones de programación y compilación 173Opciones del preprocesador CICS . . . . . 175Variables de entorno de las opciones delpreprocesador CICS . . . . . . . . . . 175Codificar sentencias CICS en aplicaciones PL/I 176Escribir transacciones CICS en PL/I . . . . . 176Terminaciones anómalas CICS utilizadas paraprogramas PL/I . . . . . . . . . . . 177Salida de usuario de tiempo de ejecución CICS 177

Capítulo 5. Salida de compilación . . 179Utilizar el listado del compilador . . . . . . . 179Archivos de salida del compilador . . . . . . 187

Capítulo 6. Enlace de programas . . . 189Iniciar el enlazador . . . . . . . . . . . 189

Enlace estático . . . . . . . . . . . . 189Enlace desde la línea de mandatos . . . . . 189Enlace desde un archivo make. . . . . . . 190

Entrada y salida . . . . . . . . . . . . 191Reglas de búsqueda . . . . . . . . . . 192Especificar los directorios . . . . . . . . 192Valores predeterminados de nombre de archivo 192

Especificación de archivos de objetos . . . . . 193Utilización de archivos de respuestas . . . . . 193Especificar un tipo de salida ejecutable . . . . . 194

Crear un archivo .EXE . . . . . . . . . 194Crear una biblioteca de enlace dinámico . . . 194

Empaquetar ejecutables . . . . . . . . . . 195Generar un archivo de correlación . . . . . . 195Códigos de retorno del enlazador . . . . . . 195

iv PL/I for WindowsGuía de programación

Page 7: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 7. Definir opciones delenlazador . . . . . . . . . . . . . 197establecer opciones en la línea de mandatos . . . 197

Definir opciones en la variable de entornoILINK . . . . . . . . . . . . . . . 197Uso del enlazador . . . . . . . . . . . 198Especificar argumentos numéricos . . . . . 198

Resumen de las opciones del enlazador deWindows . . . . . . . . . . . . . . . 198Opciones del enlazador de Windows . . . . . 199

/? . . . . . . . . . . . . . . . . 200/ALIGNADDR . . . . . . . . . . . . 200/ALIGNFILE . . . . . . . . . . . . 200/BASE . . . . . . . . . . . . . . 200/CODE . . . . . . . . . . . . . . 201/DATA . . . . . . . . . . . . . . 201/DBGPACK, /NODBGPACK . . . . . . . 201/DEBUG, /NODEBUG . . . . . . . . . 202/DEFAULTLIBRARYSEARCH . . . . . . . 202/DLL . . . . . . . . . . . . . . . 202/ENTRY . . . . . . . . . . . . . . 203/EXECUTABLE . . . . . . . . . . . 203/EXTDICTIONARY, /NOEXTDICTIONARY 203/FIXED, /NOFIXED . . . . . . . . . . 203/FORCE . . . . . . . . . . . . . . 204/HEAP . . . . . . . . . . . . . . 204/HELP . . . . . . . . . . . . . . 204/INCLUDE . . . . . . . . . . . . . 204/INFORMATION, /NOINFORMATION . . . 204/LINENUMBERS, /NOLINENUMBERS . . . 204/LOGO, /NOLOGO . . . . . . . . . . 205/MAP, /NOMAP . . . . . . . . . . . 205/OUT . . . . . . . . . . . . . . . 205/PMTYPE . . . . . . . . . . . . . 206/SECTION . . . . . . . . . . . . . 206/SEGMENTS . . . . . . . . . . . . 207/STACK . . . . . . . . . . . . . . 207/STUB . . . . . . . . . . . . . . 207/SUBSYSTEM . . . . . . . . . . . . 207/VERBOSE . . . . . . . . . . . . . 208/VERSION . . . . . . . . . . . . . 208

Parte 3. Ejecutar y depurar suprograma . . . . . . . . . . . . 209

Capítulo 8. Usar opciones de tiempode ejecución . . . . . . . . . . . . 211Definir variables de entorno de ejecución . . . . 211

PATH . . . . . . . . . . . . . . . 211DPATH . . . . . . . . . . . . . . 211

Especificar opciones de tiempo de ejecución . . . 211Dónde especificar opciones de tiempo deejecución . . . . . . . . . . . . . . 211Especificar varias subopciones u opciones detiempo de ejecución . . . . . . . . . . 212

Opciones de tiempo de ejecución . . . . . . . 213NATLANG . . . . . . . . . . . . . 213

Incluir DLL en tiempo de ejecución . . . . . . 213

Capítulo 9. Prueba y depuración deprogramas . . . . . . . . . . . . 215Comprobación de programas . . . . . . . . 215Consejos generales sobre depuración . . . . . 216técnicas de depuración PL/I . . . . . . . . 217

Uso de opciones de tiempo de compilación parala depuración . . . . . . . . . . . . 217Usar ocupaciones para la depuración . . . . 218Usar volcados para la depuración . . . . . 219Utilizar el manejo de condiciones y errores parala depuración . . . . . . . . . . . . 223Conceptos del descriptor de errores . . . . . 224

Errores de programación habituales . . . . . . 226Errores lógicos en sus programas fuente . . . 227Uso no válido de PL/I . . . . . . . . . 227Llamar a variables de entrada no inicializadas 227Bucles y otros errores imprevistos . . . . . 227Datos de entrada/salida inesperados . . . . 228Terminación inesperada del programa . . . . 228Otros resultados inesperados . . . . . . . 229Error de subrutina de compilador o biblioteca 230Anomalía de sistema . . . . . . . . . . 230Bajo rendimiento . . . . . . . . . . . 230

Parte 4. Entrada y salida . . . . . 231

Capítulo 10. Utilizar conjuntos dedatos y archivos . . . . . . . . . . 233Tipos de conjuntos de datos . . . . . . . . 233

Conjuntos de datos nativos . . . . . . . . 234Conjuntos de datos adicionales . . . . . . 235

Establecer características del conjunto de datos . . 236Registros . . . . . . . . . . . . . . 237Formatos de registro . . . . . . . . . . 237Organización del conjunto de datos . . . . . 237Especificar característicaa utilizando el atributoPL/I ENVIRONMENT . . . . . . . . . 238Especificar características utilizando lasvariables de entorno DD:ddname. . . . . . 244

Asociar un archivo PL/I a un conjunto de datos 254Utilización de variables de entorno . . . . . 254Utilizar la opción TITLE de la sentencia OPEN 255Intentar utilizar archivos no asociados aconjuntos de datos . . . . . . . . . . 255Cómo encuentra PL/I conjuntos de datos . . . 255

Abrir y cerrar archivos PL/I . . . . . . . . 256Cómo abrir un archivo . . . . . . . . . 256Cerrar un archivo . . . . . . . . . . . 256

Asociar varios conjuntos de datos a un archivo . . 256Combinaciones de sentencias de E/S, atributos yopciones . . . . . . . . . . . . . . . 257Entrada y salida de la sentencia DISPLAY . . . . 259Archivos estándar PL/I (SYSPRINT y SYSIN) . . 260Redirigir dispositivos de error, entrada y salidaestándar . . . . . . . . . . . . . . . 260

Capítulo 11. Definir y utilizarconjuntos de datos consecutivos. . . 261Archivos destinados a impresora . . . . . . . 261

Contenido v

Page 8: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Uso de la transmisión de datos orientada a lacorriente . . . . . . . . . . . . . . . 262

Definir archivos utilizando la secuencia E/S . . 263Opciones ENVIRONMENT para transmisionesde datos orientadas a secuencia . . . . . . 263Crear un conjunto de datos con stream de E/S 263Acceder a conjuntos de datos con secuencia deE/S. . . . . . . . . . . . . . . . 265Utilización de archivos PRINT. . . . . . . 267Uso de los archivos SYSIN y SYSPRINT . . . 271

Controlar la entrada del terminal . . . . . . . 271Utilizar archivos en modo conversacional . . . 272Formato de datos . . . . . . . . . . . 272Archivos de registro y de secuencia . . . . . 273Letras mayúsculas y minúsculas . . . . . . 273Fin de archivo . . . . . . . . . . . . 273

Controlar la salida al terminal . . . . . . . . 274Formato de archivos PRINT . . . . . . . 274Archivos de registro y de secuencia . . . . . 274Ejemplo de un programa interactivo. . . . . 274

Usar E/S orientado a registros. . . . . . . . 275Definir archivos usando el registro deentrada/salida . . . . . . . . . . . . 277Opciones ENVIRONMENT para la transmisiónde datos orientada a registro . . . . . . . 277Crear un conjunto de datos con un registro deentrada/salida . . . . . . . . . . . . 277Acceder y actualizar un conjunto de datos conE/S de registro . . . . . . . . . . . . 277

Capítulo 12. Definir y utilizarconjuntos de datos regionales . . . . 283Definir archivos para un conjunto de datosregional . . . . . . . . . . . . . . . 285

Especificar opciones ENVIRONMENT . . . . 285Información fundamental para crear y acceder aconjuntos de datos regionales . . . . . . . 285Utilizar claves con conjuntos de datos regionales 286

Utilizar conjuntos de datos REGIONAL(1). . . . 286Registros ficticios . . . . . . . . . . . 286Crear un conjunto de datos REGIONAL(1) . . 286Ejemplo . . . . . . . . . . . . . . 287Acceder y actualizar un conjunto de datosREGIONAL(1) . . . . . . . . . . . . 288Acceso secuencial . . . . . . . . . . . 288Acceso directo . . . . . . . . . . . . 289Ejemplo . . . . . . . . . . . . . . 289

Capítulo 13. Definir y utilizar losconjuntos de datos VSAM de laestación de trabajo . . . . . . . . . 293Mover datos entre la estación de trabajo y elsistema principal . . . . . . . . . . . . 293Organización VSAM en la Estación de trabajo . . 293

Crear y acceder a conjuntos de datos VSAM dela Creating and accessing estación de trabajo . . 294determinar qué tipo de conjunto de datosVSAM de la estación de trabajo necesita . . . 294Acceder a registros en conjuntos de datosVSAM de la estación de trabajo . . . . . . 294

Utilizar claves para los conjuntos de datosVSAM de estación de trabajo . . . . . . . 296

Elegir un tipo de conjunto de datos . . . . . . 297Definir archivos para los conjuntos de datos VSAMde la estación de trabajo . . . . . . . . . . 298

Especificar opciones del atributo PL/IENVIRONMENT . . . . . . . . . . . 299Adaptar programas existentes para estación detrabajo VSAM . . . . . . . . . . . . 299

Utilizar conjuntos de datos secuenciales VSAM dela estación de trabajo . . . . . . . . . . . 301

Utilizar un archivo secuencial para acceder a unconjunto de datos secuencial VSAM de laestación de trabajo. . . . . . . . . . . 302Definir y cargar un conjunto de datos secuencialVSAM de la estación de trabajo . . . . . . 303

Conjuntos de datos con clave VSAM de la Estaciónde trabajo . . . . . . . . . . . . . . 305

Cargar un conjunto de datos con clave VSAMde la estación de trabajo . . . . . . . . . 307Utilizar un archivo SEQUENTIAL para accedera un conjunto de datos con clave VSAMdeestación de trabajo . . . . . . . . . . 309Utilizar un archivo DIRECT para acceder a unconjunto de datos con clave VSAM de laestación de trabajo. . . . . . . . . . . 309

a conjuntos de datos directos VSAM de la Estaciónde trabajo . . . . . . . . . . . . . . 312

Cargar un conjunto de datos directos VSAM dela estación de trabajo . . . . . . . . . . 314Utilizar un archivo SEQUENTIAL para accedera un conjunto de datos directo VSAMdeestación de trabajo . . . . . . . . . . 317Utilizar un archivo DIRECT para acceder a unconjunto de datos directo VSAM deestación detrabajo. . . . . . . . . . . . . . . 317

Parte 5. Utilizar PL/I con bases dedatos . . . . . . . . . . . . . . 321

Capítulo 14. Open DatabaseConnectivity . . . . . . . . . . . . 323Introducción a ODBC. . . . . . . . . . . 323

Segundo plano . . . . . . . . . . . . 323Gestor de controladores ODBC . . . . . . 323Elegir SQL incorporado u ODBC . . . . . . 324

Utilizar controladores ODBC . . . . . . . . 324Ayuda en línea . . . . . . . . . . . . 324Información específica de entorno . . . . . 324Conexión con un origen de datos. . . . . . 325Mensajes de error . . . . . . . . . . . 326

API de ODBC de PL/I . . . . . . . . . . 326Convención de interfaz CALL . . . . . . . 327Utilizar los archivos de inclusiónproporcionados. . . . . . . . . . . . 327Correlación de tipos C de ODBC . . . . . . 329Definir información de licencia para el gestor decontroladores/controlador ODBC. . . . . . 329

Programa de ejemplo utilizando los archivos deinclusión proporcionados . . . . . . . . . 330

vi PL/I for WindowsGuía de programación

Page 9: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 15. Utilizar el generador dedeclaraciones (Dclgen) Java . . . . . 331Terminología de java Dclgen . . . . . . . . 331Soporte java Dclgen de PL/I . . . . . . . . 332Crear una declaración de tabla y una estructura delenguaje principal . . . . . . . . . . . . 333

Selección de una base de datos . . . . . . 333Seleccionar una tabla y generar una declaraciónPL/I . . . . . . . . . . . . . . . 333Modificar y guardar la declaración de PL/Igenerada . . . . . . . . . . . . . . 334Salir del generador de declaraciones Java . . . 335Incluir declaraciones de datos en su programa 335

Parte 6. Temas avanzados. . . . . 337

Capítulo 16. Uso del programa deutilidad de mantenimiento delprograma, NMAKE . . . . . . . . . 339Por qué utilizar NMAKE . . . . . . . . . 339Ejecutar NMAKE . . . . . . . . . . . . 339

Utilizar la línea de mandatos . . . . . . . 339Utilizar archivos de mandato NMAKE . . . . 340

Opciones NMAKE. . . . . . . . . . . . 341Producir un archivo de error (/X) . . . . . 341Construir todos los destinos (/A). . . . . . 341Suprimir mensajes (/C) . . . . . . . . . 342Mostrar fechas de modificación (/D) . . . . 342Sustituir variables de entorno (/E) . . . . . 342Especificar archivo de descripción (/F) . . . . 342Mostrar ayuda (/HELP or /?) . . . . . . . 342Ignorar códigos de salida (/I) . . . . . . . 342Mostrar mandatos (/N) . . . . . . . . . 343Suprimir el banner de inicio de sesión(/NOLOGO) . . . . . . . . . . . . 343Imprimir definiciones de destino y macros (/P) 343Código de salida de retorno (/Q). . . . . . 343Ignorar el archivo TOOLS.INI (/R) . . . . . 343Suprimir la visualización del mandato (/) . . . 343Cambiar fechas de modificación de destino (/T) 343

Archivos de descripción . . . . . . . . . . 344Bloques de descripción . . . . . . . . . 344Características especiales . . . . . . . . 344Destinos en varios bloques de descripción . . . 345

Utilizar macros . . . . . . . . . . . . . 346Ejemplo de macro . . . . . . . . . . . 346Características especiales . . . . . . . . 346Macros en un archivo de descripción . . . . 347Macros en la línea de mandatos . . . . . . 347Macros heredadas . . . . . . . . . . . 347Macros definidas . . . . . . . . . . . 348Sustituciones de macros . . . . . . . . . 348

Macros especiales . . . . . . . . . . . . 349Ejemplos de macros especiales. . . . . . . 349Componentes de la especificación de archivo 350Caracteres que modifican macros especiales . . 350Ejemplo de macros especiales modificadas. . . 351Reglas de precedencia de la macro . . . . . 351

Reglas de inferencia . . . . . . . . . . . 351

Características especiales . . . . . . . . 352Ejemplo de reglas de inferencia . . . . . . 353Especificaciones de vía de acceso de regla deinferencia. . . . . . . . . . . . . . 353Reglas de inferencia predefinidas . . . . . . 353

Directivas . . . . . . . . . . . . . . 354Ejemplo de directivas. . . . . . . . . . 356Pseudodestinos . . . . . . . . . . . . 356Pseudodestinos predefinidos . . . . . . . 356

Archivos en línea . . . . . . . . . . . . 358Ejemplo de archivos en línea . . . . . . . 358Caracteres de escape . . . . . . . . . . 358

Caracteres que modifican mandatos . . . . . . 359Desconectar la comprobación de errores (-) . . 359Ejemplos del modificador de mandatos Guión 360Suprimir la visualización del mandato (@). . . 360Ejemplo del modificador de mandatos símboloarroba (@) . . . . . . . . . . . . . 360Ejecutar un mandato para dependientes (!) . . 360Signo de exclamación (!) ejemplos demodificador de mandato . . . . . . . . 360Sintaxis EXTMAKE . . . . . . . . . . 361

Reglas de inferencia y macros en TOOLS.INI . . . 361Ejemplo de TOOLS.INI . . . . . . . . . 362

Capítulo 17. Mejora del rendimiento 363Seleccionar opciones de tiempo de compilaciónpara conseguir un rendimiento óptimo . . . . . 363

OPTIMIZE . . . . . . . . . . . . . 363IMPRECISE . . . . . . . . . . . . . 363GONUMBER . . . . . . . . . . . . 364SNAP . . . . . . . . . . . . . . . 364RULES . . . . . . . . . . . . . . 364PREFIX . . . . . . . . . . . . . . 365DEFAULT . . . . . . . . . . . . . 366Resumen de opciones de tiempo de compilaciónque mejoran el rendimiento . . . . . . . 369

Codificación para lograr un mejor rendimiento . . 369Entradas y salidas dirigidas a datos . . . . . 369Parámetros solo de entrada. . . . . . . . 370Asignaciones de series . . . . . . . . . 370Variables de control de bucle . . . . . . . 371PAQUETES y PROCEDIMIENTOS anidados . . 371Funciones REDUCIBLE . . . . . . . . . 372DEFINED y UNION . . . . . . . . . . 373Constantes con nombre y variables estáticas . . 373Evitar llamadas a rutinas de biblioteca . . . . 374

Capítulo 18. Utilizar salidas de usuario 377Utilizar la salida de usuario del compilador . . . 377

Procedimientos llevados a cabo por la salida deusuario del compilador . . . . . . . . . 377Activar la salida de usuario del compilador . . 378La salida de usuario suministrada por IBM,IBMUEXIT . . . . . . . . . . . . . 378Personalizar la salida de usuario del compilador 379

Utilizar la salida de usuario e tiempo de ejecuciónCICS . . . . . . . . . . . . . . . . 383

Antes de la invocación del programa . . . . 384Después de la terminación del programa . . . 384

Contenido vii

Page 10: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Modificar CEEFXITA . . . . . . . . . . 384Utilizar tablas de conversión de datos . . . . . 385

Capítulo 19. Compilar bibliotecas deenlace dinámico . . . . . . . . . . 387Crear archivos de origen DLL . . . . . . . . 387Compilar el código fuente de la biblioteca deenlace dinámico . . . . . . . . . . . . 387Pasos previos para enlazar su DLL . . . . . . 388

Especificar nombres exportados en Windows 388Enlazar su DLL. . . . . . . . . . . . . 388

Uso de la DLL . . . . . . . . . . . . 388Programa de ejemplo para compilar una DLL . . 389Utilizar FETCH y RELEASE en el programaprincipal . . . . . . . . . . . . . . . 390Exportar datos de una biblioteca de enlacedinámico . . . . . . . . . . . . . . . 390

Capítulo 20. Utilizar el gestor debiblioteca de IBM en Windows . . . . 391Ejecutar ILIB . . . . . . . . . . . . . 391

Utilizar la línea de mandatos . . . . . . . 392Utilizar la variable de entorno ILIB . . . . . 392Utilizar un archivo de respuestas de ILIB . . . 393Ejemplos que especifican parámetros ILIB . . . 394

Controlar la entrada de ILIB . . . . . . . . 394Controlar la salida de ILIB . . . . . . . . . 394

Controlar salidas ILIB . . . . . . . . . 395Objetos ILIB . . . . . . . . . . . . . . 396

Resumen de objetos ILIB . . . . . . . . 396Añadir/Reempl. . . . . . . . . . . . 397/EXTRACT . . . . . . . . . . . . . 398/REMOVE . . . . . . . . . . . . . 398

Opciones ILIB . . . . . . . . . . . . . 398Resumen de opciones ILIB . . . . . . . . 399/? . . . . . . . . . . . . . . . . 400/BACKUP . . . . . . . . . . . . . 400/DEF . . . . . . . . . . . . . . . 400/FREEFORMAT . . . . . . . . . . . 400/GENDEF . . . . . . . . . . . . . 400/GI. . . . . . . . . . . . . . . . 401/HELP . . . . . . . . . . . . . . 401/LIST . . . . . . . . . . . . . . . 401/NOEXT . . . . . . . . . . . . . . 401/OUT . . . . . . . . . . . . . . . 402/QUIET . . . . . . . . . . . . . . 402/WARN . . . . . . . . . . . . . . 402

Capítulo 21. Convenios de llamada 403Consideraciones de enlace . . . . . . . . . 403Enlace OPTLINK . . . . . . . . . . . . 404

Características de OPTLINK . . . . . . . 404Consejos para utilizar OPTLINK . . . . . . 405

Implicaciones del registro general . . . . . . 405Parámetros . . . . . . . . . . . . . 405Ejemplos de pasos de parámetros . . . . . 406

Enlace SYSTEM. . . . . . . . . . . . . 411Características de SYSTEM . . . . . . . . 411Ejemplo de uso del enlace SYSTEM . . . . . 412

Enlace STDCALL (solo en Windows) . . . . . 413

Características de STDCALL . . . . . . . 414Ejemplos de uso de la convención STDCALL 414

Utilizar WinMain (solo en Windows) . . . . . 416Enlace CDECL . . . . . . . . . . . . . 416

Características de CDECL . . . . . . . . 416Ejemplos de uso de la convención CDECL. . . 417

Capítulo 22. Utilizar PL/I enaplicaciones de lenguaje mixto. . . . 419Coincidencia de datos y enlaces . . . . . . . 419

Qué datos se pasan . . . . . . . . . . 419Cómo se pasan los datos . . . . . . . . 421Dónde se pasan los datos . . . . . . . . 423

Mantenimiento del entorno. . . . . . . . . 423Invocar rutinas no PL/I desde PL/I MAIN . . . 424Invocar rutinas PL/I desde un sistema principal noPL/I . . . . . . . . . . . . . . . . 424

Utilizar ON ANYCONDITION . . . . . . 425

Capítulo 23. Trabajar con Java . . . . 427Qué es la interfaz nativa Java (JNI)? . . . . . . 427Programa de ejemplo JNI #1 - "Hello World" . . . 428

Paso 1: escribir el programa Java . . . . . . 428Paso 2: compilar el programa Java . . . . . 429Paso 3: escribir el programa PL/I. . . . . . 429Paso 4: compilar y enlazar el programa PL/I 431Paso 5: ejecutar el programa de ejemplo . . . 431

Programa de ejemplo JNI #2 - Pasar una cadena 431Paso 1: escribir el programa Java . . . . . . 431Paso 2: compilar el programa Java . . . . . 432Paso 3: escribir el programa PL/I. . . . . . 433Paso 4: compilar y enlazar el programa PL/I 434Paso 5: ejecutar el programa de ejemplo . . . 435

Programa de ejemplo JNI #3 - Pasar un entero . . 435Paso 1: escribir el programa Java . . . . . . 435Paso 2: compilar el programa Java . . . . . 437Paso 3: escribir el programa PL/I. . . . . . 437Paso 4: compilar y enlazar el programa PL/I 438Paso 5: ejecutar el programa de ejemplo . . . 439

Determinar tipos de datos Java y PL/I equivalentes 439

Capítulo 24. Usar rutinas declasificación . . . . . . . . . . . . 441Comparar programas de ordenación de S/390 yestación de trabajo. . . . . . . . . . . . 441Pasos previos para usar la ordenación . . . . . 442

Elegir el tipo de ordenación . . . . . . . 443Especificar el campo de clasificación. . . . . 445Especificar los registros que se van a clasificar 446

Llamar al programa de clasificación . . . . . . 447Ejemplos PLISRT . . . . . . . . . . . 447

Determinar si la ordenación se ha realizadocorrectamente . . . . . . . . . . . . . 448Obtención de información de diagnóstico . . . . 448

La variable de entorno IBM_SORT_RC . . . . 448La variable de entorno IBM_SORT_DIR . . . 449La variable de entorno IBM_SORT_MSGFILE 449

Ordenar datos de entrada y de salida . . . . . 449Ordenar rutinas de manejo de datos. . . . . . 450

viii PL/I for WindowsGuía de programación

Page 11: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

E15 — rutina entrada-manejo (salida de SORTE15) . . . . . . . . . . . . . . . 450E35 — rutina de salida-manejo (salida SORTE35) . . . . . . . . . . . . . . . 452Llamar a PLISRTA. . . . . . . . . . . 454Llamar a PLISRTB . . . . . . . . . . . 455Llamar a PLISRTC. . . . . . . . . . . 456Invocar a PLISRTD, ejemplo 1 . . . . . . . 457Invocar a PLISRTD, ejemplo 2 . . . . . . . 459

Capítulo 25. Utilizar en analizador SAX 461Visión general . . . . . . . . . . . . . 461La subrutina incorporada PLISAXA . . . . . . 462La subrutina incorporada PLISAXB . . . . . . 462La estructura de eventos SAX . . . . . . . . 462

start_of_document. . . . . . . . . . . 463version_information . . . . . . . . . . 463encoding_declaration . . . . . . . . . . 463standalone_declaration . . . . . . . . . 463document_type_declaration. . . . . . . . 463end_of_document . . . . . . . . . . . 464start_of_element . . . . . . . . . . . 464attribute_name . . . . . . . . . . . . 464attribute_characters . . . . . . . . . . 464attribute_predefined_reference. . . . . . . 464attribute_character_reference . . . . . . . 464end_of_element. . . . . . . . . . . . 464start_of_CDATA_section . . . . . . . . . 464end_of_CDATA_section . . . . . . . . . 465content_characters . . . . . . . . . . . 465content_predefined_reference . . . . . . . 465content_character_reference. . . . . . . . 465processing_instruction . . . . . . . . . 465comment . . . . . . . . . . . . . . 466unknown_attribute_reference . . . . . . . 466unknown_content_reference . . . . . . . 466start_of_prefix_mapping . . . . . . . . . 466end_of_prefix_mapping . . . . . . . . . 466excepción. . . . . . . . . . . . . . 466Parámetros de las funciones de evento . . . . 466

Conjuntos de caracteres codificados paradocumentos XML . . . . . . . . . . . . 467

Páginas de códigos EBCDIC soportadas . . . 467Páginas de códigos ASCII soportadas . . . . 468

Especificar la página de códigos . . . . . . 468Excepciones . . . . . . . . . . . . . . 469Ejemplo . . . . . . . . . . . . . . . 470Códigos de excepción continuables . . . . . . 481Códigos de excepción de terminación . . . . . 485

Capítulo 26. Utilizar PL/I MLE en susaplicaciones . . . . . . . . . . . . 489Aplicar atributos y opciones . . . . . . . . 489

Atributo DATE . . . . . . . . . . . . 489opción de tiempo de compilación RESPECT . . 490opción de tiempo de compilación WINDOW 490opción de tiempo de compilación RULES . . . 490

Comprender los modelos de datos . . . . . . 491Patrones y sistema de ventanas . . . . . . 491

Usar funciones incorporadas con MLE . . . . . 492DAYS . . . . . . . . . . . . . . . 492DAYSTODATE . . . . . . . . . . . . 493

Realizar comparaciones y cálculos de datos . . . 493Cálculos de fecha explícita . . . . . . . . 493Cálculos de fecha implícita . . . . . . . . 494Comparaciones de fechas implícitas . . . . . 494Asignaciones DATE implícitas . . . . . . . 495

Parte 7. Apéndices . . . . . . . . 497

Avisos . . . . . . . . . . . . . . 499Información sobre interfaces de programación . . 500

Macros para uso del cliente. . . . . . . . 500Marcas registradas. . . . . . . . . . . . 500

Bibliografía . . . . . . . . . . . . 503Publicaciones PL/I . . . . . . . . . . . 503

PL/I para AIX . . . . . . . . . . . . 503Publicaciones de Enterprise PL/I . . . . . . 503

Publicaciones relacionadas . . . . . . . . . 503DB2 UDB para OS/390 y z/OS . . . . . . 503TXSeries para multiplataformas . . . . . . 503

Glosario . . . . . . . . . . . . . 505

Índice. . . . . . . . . . . . . . . 525

Contenido ix

Page 12: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

x PL/I for WindowsGuía de programación

Page 13: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tablas

1. IEEE normalizado y hexadecimal . . . . . 102. Opciones de tiempo de compilación,

abreviaturas y valores predeterminadosproporcionados por IBM . . . . . . . . 27

3. Tipos de datos SQL generados a partir dedeclaraciones PL/I . . . . . . . . . . 167

4. Los tipos de datos de SQL asignados adeclaraciones PL/I . . . . . . . . . . 167

5. Cabeceras y descripciones de la tabla delongitud de agregados . . . . . . . . 185

6. Posibles salidas de disco de compilación 1877. Valores predeterminados del nombre de

archivo del enlazador . . . . . . . . . 1938. Resumen de las opciones del enlazador de

Windows . . . . . . . . . . . . . 1989. sentencias, atributos y opciones para

conjuntos de datos nativos . . . . . . . 25710. Sentencias, atributos y opciones de conjuntos

de datos VSAM de estación de trabajo . . . 25811. Caracteres de control de impresión ANSI 26212. Equivalentes de IBM Proprinter para los

caracteres de control ANSI . . . . . . . 26213. Sentencias y opciones permitidas para crear y

acceder a conjuntos de datos consecutivos . . 27614. Sentencias y opciones permitidas para crear y

acceder a conjuntos de datos regionales . . . 28315. Tipos y ventajas de conjuntos de datos VSAM

de la Types and advantages of estación detrabajo . . . . . . . . . . . . . . 295

16. Procesamiento permitido en vías de acceso deíndice alternativo . . . . . . . . . . 298

17. Sentencias y opciones permitidas para cargary acceder a conjuntos de datos secuencialesVSAM de la estación de trabajo . . . . . 301

18. Sentencias y opciones permitidas para cargary acceder a los conjuntos de datos con claveVSAM de la estación de trabajo . . . . . 305

19. Sentencias y opciones permitidas para cargary acceder a los conjuntos de datos directosVSAM de la estación de trabajo . . . . . 312

20. Archivos de inclusión proporcionados paraODBC . . . . . . . . . . . . . . 327

21. Nombres ODBC truncados o abreviados paraPL/I . . . . . . . . . . . . . . 327

22. Correlación de ODBC tipo C a declaracionesde datos PL/I . . . . . . . . . . . 329

23. Declaraciones generadas por java Dclgen 33224. Reglas de inferencia predefinidas por

NMAKE . . . . . . . . . . . . . 35325. Condiciones en las que las conversiones se

manejan en línea . . . . . . . . . . 37526. Condiciones bajo las cuales las funciones

incorporadas de serie se manejan en línea . . 37627. Objetos ILIB en Windows . . . . . . . 39628. Opciones ILIB en Windows . . . . . . . 39929. Tipos de datos equivalentes entre C y PL/I 42030. Tipos primitivos Java y sus equivalentes

nativos PL/I . . . . . . . . . . . . 43931. estación de trabajo PLISRTx. . . . . . . 44132. Códigos de retorno de PLISRTx . . . . . 44833. Excepciones continuables . . . . . . . 48134. Excepciones de terminación . . . . . . . 48535. Modelos de fecha soportados por PL/I MLE 491

© Copyright IBM Corp. 1998, 2013 xi

Page 14: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

xii PL/I for WindowsGuía de programación

Page 15: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Figuras

1. La declaración PL/I de SQLCA . . . . . 1622. La declaración PL/I de un área de descriptor

SQL. . . . . . . . . . . . . . . 1623. listado del compilador del programa CHIMES 1804. Ejemplo de archivo make . . . . . . . 1915. Código PL/I que produce un volcado

formateado . . . . . . . . . . . . 2216. Ejemplo de salida de PLIDUMP . . . . . 2227. procedimientos descendientes estáticamente y

dinámicamente . . . . . . . . . . . 2248. Crear un conjunto de datos con una

transmisión de datos orientada a stream . . 2659. Acceso a un conjunto de datos con

transmisión de datos orientada a secuencia . 26710. Crear un archivo de impresión mediante una

transmisión de datos continuos . . . . . 26911. Declaración de PLITABS . . . . . . . . 27012. Estructura PL/I PLITABS para modificar los

valores de tabulación preestablecidos . . . 27113. Un programa interactivo de muestra 27514. Fusionar ordenar-crear y acceder a un

conjunto de datos consecutivo . . . . . . 27915. Imprimir la transmisión de datos orientada a

registro . . . . . . . . . . . . . 28116. Crear un conjunto de datos REGIONAL(1) 28717. Actualizar un conjunto de datos

REGIONAL(1) . . . . . . . . . . . 29018. Conjuntos de datos VSAM y atributos de

archivo permitidos . . . . . . . . . . 29819. Creación de un conjunto de datos con clave

VSAM de la estación de trabajo . . . . . 30120. Definir y cargar un conjunto de datos

secuencial VSAM de la estación de trabajo . . 30421. Definir y cargar un conjunto de datos con

clave VSAM de laestación de trabajo . . . . 30822. Actualizar un conjunto de datos con clave

VSAM de la estación de trabajo . . . . . 31023. Cargar un conjunto de datos directos VSAM

de la estación de trabajo . . . . . . . . 31624. Actualizar un conjunto de datos directos

VSAM de la estación de trabajo por clave . . 31825. Selección de una base de datos. . . . . . 33326. Visualización de las tablas creadas por el

calificador . . . . . . . . . . . . 334

27. Declaraciones PL/I generadas . . . . . . 33528. Procedimientos de salida de usuario del

compilador PL/I . . . . . . . . . . 37829. Ejemplo de un archivo IBMUEXIT.INF 37930. Programa de muestra Java #2 - Pasar una

cadena . . . . . . . . . . . . . . 43231. Programa de muestra PL/I #2 - Pasar una

cadena . . . . . . . . . . . . . . 43432. Programa de muestra Java #3 - Pasar un

entero . . . . . . . . . . . . . . 43633. Programa de muestra PL/I #3 - Pasar un

entero . . . . . . . . . . . . . . 43834. Flujo de control del programa de ordenación 44435. Código esquemático de un procedimiento de

entrada . . . . . . . . . . . . . 45136. Cuando E15 es externa a la llamada de

procedimiento PLISRTx . . . . . . . . 45237. Código esquemático de un procedimiento de

manejo de salidas . . . . . . . . . . 45338. PLISRTA—Ordenación desde un conjunto de

datos de entrada a un conjunto de datos desalida . . . . . . . . . . . . . . 454

39. PLISRTB—Ordenación desde una rutina demanejo de entradas a un conjunto de datosde salida . . . . . . . . . . . . . 455

40. PLISRTC—ordenación de conjunto de datosde entrada a rutina de manejo de salida . . 456

41. PLISRTD—ordenación de rutina de manejode entrada a rutina de manejo de salida . . 457

42. PLISRTD—ordenación de rutina de manejode entrada a rutina de manejo de salida . . 459

43. Documento XML de ejemplo . . . . . . 46344. ejemplo de codificación PLISAXA -

declaraciones de tipo . . . . . . . . . 47045. ejemplo de codificación PLISAXA - estructura

de eventos . . . . . . . . . . . . 47146. ejemplo de codificación PLISAXA - rutina

principal . . . . . . . . . . . . . 47247. ejemplo de codificación PLISAXA - rutinas de

eventos . . . . . . . . . . . . . 47348. ejemplo de codificación PLISAXA - salida de

programa . . . . . . . . . . . . . 481

© Copyright IBM Corp. 1998, 2013 xiii

Page 16: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

xiv PL/I for WindowsGuía de programación

Page 17: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Guía de programaciónRational Developer for System z,Versión 9.0.1 PL/I para Windows

Versión 9.0.1

SC18-9977-06

Nota

Antes de utilizar esta información y el producto al que da soporte, lea la información general que se encuentra en“Avisos” en la página 499.

Undécima edición (diciembre de 2013)Esta edición es aplicable a Rational Developer para System z, PL/I para Windows,Versión 9.0.1, y a cualquier release posterior hasta que se indique lo contrario ennuevas ediciones o boletines técnicos. Asegúrese de utilizar la edición correcta parael nivel del producto.

Puede solicitar publicaciones en línea en http://www.ibm.com/e-business/linkweb/publications/servlet/pbi.wss, o puede hacerlo por teléfono o a través delfax. IBM Software Manufacturing Solutions acepta solicitudes de publicaciones de8:30 a.m. a 7:00 p.m. (EST). El número de teléfono es (800)879-2755. El número defax es (800)445-9269.

Cuando se envía información a IBM, se otorga a IBM un derecho no exclusivo deutilizar o distribuir la información de la forma que IBM considere oportuna sinincurrir por ello en ninguna obligación con el remitente de la información.

Copyright International Business Machines Corporation 1998, 2013. Reservadostodos los derechos.

US Government Users Restricted Rights -- Use, duplication or disclosure restrictedby GSA ADP Schedule Contract with IBM Corp.

© Copyright IBM Corp. 1998, 2013 xv

Page 18: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

xvi PL/I for WindowsGuía de programación

Page 19: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Acerca de esta guía

Esta guía de programación se ha diseñado para ayudarle a utilizar loscompiladoresPL/I for Windows para codificar y compilar programas PL/I.

Si suele utilizar Mainframe PL/I y quiere pasar sus programas a la plataformaWindows, Capítulo 1, “Portar aplicaciones entre plataformas”, en la página 3 leresultará especialmente útil. esta guía incluye también información que le ayudaráa comprender funciones básicas de Windows, además de ofrecer instrucciones paracompilar, enlazar y ejecutar un programa PL/I.

NovedadesAlgunas de las adiciones más recientes a los compiladores de la estación de trabajoPL/I son:v El preprocesador SQL emite ahora más mensajes cuando los programas incluyen

sintaxis erróneas.Estos mensajes hacen que sea más fácil identificar la sentenciade origen errónea.

v La nueva opción NOINCLUDE puede utilizarse para prohibir el uso de lassentencias %INCLUDE y %XINCLUDE fuera del preprocesadorMACRO.

v Los archivos incluidos se colocan entre corchetes en el listado fuente cuando elpase final de compilador procesa la sentencia %INCLUDE.

v La subopción NULLSTRPTR de la opción DEFAULT tiene la subopción nuevaSTRICT que señala las asignaciones y comparaciones de '' a POINTERS como noválidas.

v Cuando se especifica la opción STMT, los listados fuente y de mensajes incluyenlos números de sentencia lógica y los números de archivo de origen.

Lectura de los diagramas de sintaxisLos diagramas de sintaxis utilizados en este manual están sujetos a las siguientesnormas:

Símbolos de flechaLea los diagramas de sintaxis de izquierda a derecha, de arriba a abajo,siguiendo la trayectoria de la línea.

��─── Indica el principio de una sentencia.

───� Indica que la sintaxis de la sentencia continúa en la línea siguiente.

�─── Indica que una sentencia continua de la línea anterior.

───�� Indica el final de una sentencia.

Los diagramas de unidades sintácticas distintas a las sentencias completascomienzan con el símbolo �─── y terminan con el símbolo ───�.

Los diagramas de unidades sintácticas distintas a las sentencias completascomienzan con el símbolo �─── y terminan con el símbolo───�.

Convenciones

© Copyright IBM Corp. 1998, 2013 xvii

Page 20: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v Las palabras claves, los sinónimos permitidos y los parámetrosreservados aparecen en mayúsculas. Estos elementos tienen queintroducirse exactamente como se muestran.

v Las variables aparecen en minúsculas y cursivas (por ejemplo,nombre-columna). Representan subopciones o parámetros definidos por elusuario.

v Cuando se especifican mandatos, separe los parámetros y las palabrasclave mediante como mínimo un espacio en blanco si no hay ningunapuntuación entre ellos.

v Escriba los signos de puntuación (barras inclinadas, comas, puntos,paréntesis, comillas, signos de igual) y los números exactamente igual acomo se proporcionan.

v Las notas a pie de página se muestran mediante un número entreparéntesis, por ejemplo, (1).

v El símbolo ? indica una posición en blanco.

Elementos necesariosLos elementos necesarios aparecen en la línea horizontal (la trayectoriaprincipal).

�� REQUIRED_ITEM ��

Elementos opcionalesLos elementos opcionales aparecen por debajo de la línea principal.

�� REQUIRED_ITEMelemento_opcional

��

Si aparece un elemento opcional por encima de la línea principal, eseelemento no tiene ningún efecto en la ejecución de la sentencia y sólo seutiliza para legibilidad.

�� REQUIRED_ITEMelemento_opcional

��

Varios elementos necesarios u opcionalesSi puede elegir entre dos o más elementos, aparecen verticalmente en unapila. Si debe seleccionar uno de los elementos, un elemento de la pilaaparece en la vía principal.

Cómo leer diagramas de sintaxis

xviii PL/I for WindowsGuía de programación

Page 21: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

�� REQUIRED_ITEM opción_necesaria1opción_necesaria2

��

Si la elección de uno de los elementos es opcional, toda la pila aparecerápor debajo de la línea principal.

�� REQUIRED_ITEMopción_opcional1opción_opcional2

��

Elementos repetiblesUna flecha hacia la izquierda en la línea principal indica que un elementose puede repetir.

�� REQUIRED_ITEM � elemento_repetible ��

Si la flecha de repetición contiene una coma, los elementos repetidos sedeben separar mediante una coma.

�� REQUIRED_ITEM �

,

elemento_repetible ��

Una flecha de repetición por encima de una pila indica que puedeespecificar más de una de las opciones de la pila.

Palabras clave predeterminadasLas palabras claves predeterminadas aparecen sobre la línea principal y lasopciones restantes de muestran por debajo de la línea principal.

�� REQUIRED_ITEMopción_predeterminada

opción_opcionalopción_opcional

��

FragmentosA veces un diagrama se debe dividir en fragmentos. Los fragmentos serepresentan mediante un nombre de fragmento o letra, con un resultadoasí: | A |. El fragmento sigue el final del diagrama principal. El ejemplosiguiente muestra el uso de un fragmento.

Cómo leer diagramas de sintaxis

Acerca de esta guía xix

Page 22: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

�� SENTENCIA elemento 1 elemento 2 A ��

A:

elemento 3elemento 4

PALABRA CLAVEelemento 5

elemento 6

Cómo enviar comentariosSus comentarios son importantes y nos ayudan a ofrecer información precisa y dealta calidad. Si tiene algún comentario que hacer sobre este documento o cualquierotra documentación de PL/I, póngase en contacto con nosotros. Puede hacerlo dedos formas:v Utilice el formulario Comentarios del lector que encontrará en

www.ibm.com/software/awdtools/rcf/

Asegúrese de incluir el nombre del documento, el número de publicación deldocumento, la versión de PL/I y, si corresponde, la ubicación específica (porejemplo, número de página) del texto sobre el que realiza el comentario.

v Rellene el formulario Comentarios del lector que se encuentra en el reverso deeste documento y envíenoslo por correo o entrégueselo a un representante deIBM. Si se ha eliminado el formulario, puede enviar sus comentarios a lasiguiente dirección:

International Business Machines Corporation Comentarios del lectorH150/090555 Bailey AvenueSan Jose, CA 95141-1003USA

v Envíe sus comentarios por fax a este número: (800)426-7773.

Cuando se envía información a IBM, se otorga a IBM un derecho no exclusivo deutilizar o distribuir la información de la forma que IBM considere oportuna sinincurrir por ello en ninguna obligación con el remitente de la información.

Cómo leer diagramas de sintaxis

xx PL/I for WindowsGuía de programación

Page 23: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Parte 1. Introducir PL/I en su estación de trabajo

© Copyright IBM Corp. 1998, 2013 1

Page 24: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

2 PL/I for WindowsGuía de programación

Page 25: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 1. Portar aplicaciones entre plataformas

El entorno del sistema principal de IBM tiene una arquitectura de sistemaoperativo y hardware diferente a la del sistema AIX o si sistema personal (PC). Lossistemas operativos distintos al sistema principal suelen denominarse plataformasde la estación de trabajo. En este libro, utilizamos el término estación de trabajo parareferirnos a los sistemas operativos AIX y Windows.

Pueden surgir algunos problemas mientras mueve programas PL/I entre losentornos del sistema principal y de la estación de trabajo. Los problemas puedenderivarse de diferencias fundamentales entre plataformas o diferencias entre PL/Ifor Windows y Enterprise PL/I para el compilador z/OS. Este capítulo describealgunas de estas diferencias entre plataformas de desarrollo, y proporcionainstrucciones que minimizan los problemas en las siguientes áreas:v Compilar aplicaciones del sistema principal sin errores en laestación de trabajo.v Ejecutar las aplicaciones del sistema principal en laestación de trabajo (y

conseguir los mismos resultados).v escribir, compilar y probar aplicaciones en laestación de trabajo que se ejecutarán

más tarde en modo de producción en el sistema principal.

Conseguir aplicaciones del sistema principal para compilar en laestación de trabajo

Cuando mueve programas a su estación de trabajo desde el sistema principal, unode los primeros objetivos es conseguir que las aplicaciones que ya está utilizandose compilen en el nuevo entorno sin errores.

Los juegos de caracteres utilizados en el sistema principal y en la estación detrabajo son distintos y puede provocar problemas de compilación:

Caracteres de control incluidosSi un archivo de origen contiene caracteres con valores hexadecimalesinferiores a '20'x, el compilador de la estación de trabajo podría malinterpretarel tamaño de una línea del archivo o incluso el tamaño del propio archivo.Debería utilizar constantes de carácter hexadecimal para codificar estos valores.

Si está descargando un archivo de origen del host que tiene variablesinicializadas con valores introducidos mediante un editor hexadecimal, algunosde esos valores pueden tener un valor hexadecimal inferior a '20'x aunquetengan valores superiores en el host.

Caracteres nacionales y otros símbolosAl transferir programas entre plataformas pueden producirse errores si utilizacaracteres nacionales u otros símbolos (en un contexto PL/I) en determinadaspáginas de códigos. Esto ocurre con los signos lógicos “not” (¬) y “or” (|), elsímbolo de moneda y el uso de los siguientes extensores alfabéticos enidentificadores PL/I:

$#@

Para evitar problemas potenciales relacionados con “not”, “or” y el símbolo demoneda, utilice las opciones de tiempo de compilación NOT (consulte “NOT”en la página 96), OR (consulte “OR” en la página 103) y CURRENCY (consulte

© Copyright IBM Corp. 1998, 2013 3

Page 26: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

“CURRENCY” en la página 43) en la sentencia *PROCESS. Evite problemaspotenciales relacionados con otros caracteres utilizando la opción de tiempo decompilación NAMES (consulte “NAMES” en la página 93) para definircaracteres y símbolos externos.

Elegir las opciones de tiempo de compilación correctasAl seleccionar determinadas opciones de tiempo de compilación, puede hacer quesu código fuente puede utilizarse en más plataformas y compiladores.

Si quiere mejorar la compatibilidad con pre-Enterprise PL/I, especifique lassiguientes opciones:v DEFAULT( DESCLOCATOR EVENDEC NULL370 RETURNS(BYADDR) )v LIMITS( EXTNAME(7) NAME(31) )

Tenga en cuenta que la opción DEFAULT(RETURNS(BYADDR)) hará que lainvocación de una función no PL/I en la estación de trabajo falle a no ser que seespecifique el atributo BYVALUE en la descripción RETURNS.

Estas opciones (y el resto de las opciones del compilador) se muestranalfabéticamente en Capítulo 3, “Opciones de tiempo de compilación”, en la página27 y se explican en profundidad.

Lenguaje restringidoExcepto cuando se indique, el compilador señalará el uso de cualquier lenguajerestringido.

RECORD de E/SRECORD de E/S es compatible, pero con las siguientes restricciones:v La cláusula EVENT se sentencias READ/WRITE no es compatible.v la sentencia UNLOCK no es compatible.v Las siguientes opciones del atributo ENVIRONMENT no son compatibles, pero

su uso solo se señala con LANGLVL(NOEXT):– ADDBUFF– ASCII– BUFFERS– BUFND– BUFNI– BUFOFF– INDEXAREA– LEAVE– NCP– NOWRITE– REGIONAL(2)– REGIONAL(3)– REREAD– SIS– SKIP– TOTAL– TP– TRKOFL

STREAM de E/SSTREAM de E/S es compatible, pero se aplican las siguientes restricciones asentencias PUT/GET DATA:

Conseguir aplicaciones del sistema principal para compilar en la estación de trabajo

4 PL/I for WindowsGuía de programación

Page 27: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v DEFINED no es compatible si la variable DEFINED es BIT o GRAPHIC o tieneun atributo POSITION.

v DEFINED no es compatible si su variable de base es una porción de matriz ouna matriz con un número de dimensiones distinto a la variable definida.

Expresiones de estructuraLas expresiones de estructura no se admiten como argumentos a no ser que seanciertas las siguientes condiciones:v Hay una descripción de parámetro.v La descripción de parámetros especifica todas las extensiones de constantes.

Expresiones de matrizNo se permite una expresión de matriz como argumento para una función deusuario, a no ser que se trate de una matriz de escalares de tamaño conocido. Porlo tanto, cualquier matriz de escalares de tipo aritmético puede pasarse a unafunción de usuario, pero puede haber problemas con las matrices de cadenas delongitud variable.

El siguiente ejemplo muestra una expresión de matriz numérica soportada en unallamada:

dcl x entry, (y(10),z(10)) fixed bin(31);

call x(y + z);

La siguiente llama sin prototipo se señalaría porque requiere una expresión decadena de tamaño desconocido:

dcl a1 entry;dcl (b(10),c(10)) char(20) var;

call a1(b || c);

Sin emabrgo, la siguiente llamada sin prototipo no se señalaría:dcl a2 entry(char(30) var);dcl (b(10),c(10)) char(20) var;

call a2(b || c);

Sentencia DEFAULTLas especificaciones factorizadas predeterminadas no están soportadas.

Por ejemplo, una sentencia como la que se indica a continuación no está soportada:default ( range(a:h), range(p:z) ) fixed bin;

Pero puede cambiar la sentencia anterior y convertirla en la siguiente sentenciaequivalente y soportada:

default range(a:h) fixed bin, range(p:z) fixed bin;

El uso de un "(" después de la palabra clave DEFAULT se reserva para el mismopropósito que con el estándar ANSI: después de la palabra clave DEFAULT, elestándar permite un predicado lógico entre paréntesis en atributos.

Extensiones de variables automáticasUna extensión de variable automática no puede definirse mediante una funciónanidada al procedimiento en el que se declara la variable automática ni medianteuna variable de entrada, a no ser que la variable de entrada se declare antes que lavariable automática.

Conseguir aplicaciones del sistema principal para compilar en la estación de trabajo

Capítulo 1. Portar aplicaciones entre plataformas 5

Page 28: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Funciones incorporadasLas funciones incorporadas son compatibles con las siguientesexcepciones/restricciones:v La función incorporada PLITEST no está soportada.v Las seudovariables no están soportadas en:

– La opción STRING de las sentencias PUTv Las seudovariables permitidas en bucles DO están restringidas a:

– IMAG– REAL– SUBSTR– UNSPEC

v La función incorporada POLY tiene las siguientes restricciones:– El primer argumento tiene que ser REAL FLOAT.– El segundo argumento tiene que ser escalar.

v La seudovariable COMPLEX no está soportada.v Las subrutinas IMS incorporadas PLICANC, PLICKPT y PLIREST no están

soportadas.

Definición iSUBEl soporte para definiciones iSUB está limitado a matrices de escalares.

DBCSDBCS solo puede utilizarse en:v Constantes G y Mv Identificadoresv Comentarios

Los literales G pueden comenzar y acabar con una cita DBCS seguida de una GDBCS o una G SBCS.

Preprocesador de macrosLos sufijos que siguen constantes de cadena no se sustituyen mediante elpreprocesador de macros, independientemente de que sean o no sufijos legalesPL/I, a no ser que inserte un delimitador entre las comillas finales de la cadena yla primera letra del sufijo.

El compilador OS PL/I V2R1 introdujo este cambio. Observe este ejemplo:%DCL (GX, XX) CHAR;%GX=’||FX’;%XX=’||ZZ’;DATA = ’STRING’GX;DATA = ’STRING’XX;DATA = ’STRING’ GX;DATA = ’STRING’ XX;

Con OS PL/I V1, se produce el origen:DATA = ’STRING’||FX;DATA = ’STRING’||ZZ;DATA = ’STRING’ ||FX;DATA = ’STRING’ ||ZZ;

Sin embargo, con PL/I for MVS & VM y Enterprise PL/I for z/OS, se produce elorigen:

Conseguir aplicaciones del sistema principal para compilar en la estación de trabajo

6 PL/I for WindowsGuía de programación

Page 29: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

DATA = ’STRING’GX;DATA = ’STRING’XX;DATA = ’STRING’ ||FX;DATA = ’STRING’ ||ZZ;

Utilizar función de macros para mover programasEn muchos casos, los problemas potenciales de portabilidad pueden evitarseutilizando función de macros porque tiene la capacidad de aislar el códigoespecífico de la plataforma. Por ejemplo, puede incluir código específico en unacompilación para una determinada plataforma y excluir el código específico deotra plataforma.

La función incorporada COMPILETIME de la función de macros de PL/I forWindows devuelve la fecha utilizando el formato 'DD.MMM.AA', mientras que lafunción incorporada COMPILETIME de la función de macros de PL/I for z/OSutiliza el formato 'DD MMM AA'.

Esto le permite escribir código que puede incluir código condicional dependientedel sistema que se compila correctamente en PL/I for Windows y en todas lasversiones del compilador PL/I del sistema principal, por ejemplo:

%dcl compiletime builtin;

%if substr(compiletime,3,1) = ’.’ %then%do;

/* Windows PL/I code */%end;

%else%do;

/* z/OS PL/I code */%end;

Para obtener información sobre función de macros, consulteReferencia de lenguajePL/I.

Conseguir aplicaciones del sistema principal para ejecutar en laestación de trabajo

Una vez haya descargado su programa fuente del sistema principal y lo hayacompilado sin errores utilizando el compilador de laestación de trabajo, elsiguiente paso es ejecutar el programa. Si quiere conseguir los mismos resultadosen la estación de trabajo que en el sistema principal, tiene que conocer loselementos y el comportamiento del lenguaje PL/I que varía en función de laarquitectura de software o hardware subyacente.

Diferencias de enlaceCada archivo .EXE que crea tiene que contener exactamente una rutina principal,es decir, uno procedimiento que contiene OPTIONS(MAIN). Si no existe una rutinaprincipal, el enlazador le informará de que el programa no tiene una dirección deinicio. Si existe más de una rutina principal, el enlazador le informará de que hayreferencias duplicadas para el nombre principal.

Cada .DLL que genere tiene que tener al menos un módulo compilado con laopción de tiempo de compilación DLLINIT (consulte“DLLINIT” en la página 57).

Conseguir aplicaciones del sistema principal para compilar en la estación de trabajo

Capítulo 1. Portar aplicaciones entre plataformas 7

Page 30: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

representaciones de datos que causan diferencias de tiempode ejecución

La mayorías de programas funcionan igual independientemente de larepresentación de datos, pero para asegurarse de que esto es así en sus programas,tiene que comprender las diferencias que se describen en las siguientes secciones.

Los compiladores estación de trabajo soportan opciones que ordenan al sistemaoperativo que trate los datos y las operaciones de coma flotante de la misma formaque el sistema principal. Hay subopciones de la opción de tiempo de compilaciónDEFAULT que debería especificar para todas las aplicaciones del sistema principalque puedan necesitar ser modificadas cuando se traslada código al estación detrabajo:v DEFAULT(EBCDIC) en lugar de ASCIIv DEFAULT(HEXADEC) en lugar de IEEEv DEFAULT(E(HEXADEC)) en lugar de DFT(E(IEEE))v DEFAULT (NONNATIVE) en lugar de NATIVEv DEFAULT (NONNATIVEADDR) en lugar de NATIVEADDR

Para obtener más información sobre estas opciones de tiempo de compilación,consulte “DEFAULT” en la página 45.

ASCII frente a EBCDICLos sistemas operativos de Estación de trabajo utilizan el conjunto decaracteres ASCII mientras que el sistema principal utiliza el conjunto decaracteres EBCDIC. Esto significa que la mayoría de caracteres tienen valoreshexadecimales diferentes. Por ejemplo, el valor hexadecimal de un carácter enblanco es '20'x en el juego de caracteres ASCII y '40'x en el juego de caracteresEBCDIC.

Esto significa que el código que depende de los valores hexadecimales EBCDICde datos de caracteres puede fallar si se ejecuta utilizando ASCII. Por ejemplo,el código que prueba si un carácter es o no un espacio en blancocomparándolo con '40'x fallará cuando se ejecute utilizando ASCII. Del mismomodo, el código que cambia las letras por mayúsculas utilizando 'OR' y '80'b4falla cuando se ejecuta utilizando ASCII. (Sin embargo, el código que utiliza lafunción incorporada TRANSLATE para cambiar a letras mayúsculas, no falla).

En el juego de caracteres ASCII, los dígitos tienen los valores hexadecimalescomprendidos entre '30'x y '39'x. La letra minúscula ASCII 'a' tiene el valorhexadecimal '61'x, y la letra mayúscula 'A' tiene el valor hexadecimal '41'x. Enel conjunto de caracteres EBCDIC, los dígitos tienen valores hexadecimalescomprendidos entre 'F0'x y 'F9'x. En EBCDIC, la letra minúscula 'a' tiene elvalor hexadecimal '81'x, y la letra mayúscula 'A' tiene el valor hexadecimal'C1'x. Estas diferencias tienen consecuencias muy interesantes:

Mientras 'a' < 'A' se cumple en EBCDIC, no ocurre lo mismo en ASCII.Mientras 'A' < '1' se cumple en EBCDIC, no se cumple en ASCII.Mientras x >= '0' casi siempre significa que x es un dígito en EBCDIC, estono es así en ASCII.

A causa de las diferencias descritas, el resultado de ordenar cadenas decaracteres es distinto en EBCDIC y ASCII. En muchos programas, esto no tieneefecto, pero debería conocer los errores lógicos potenciales si su programadepende de la secuencia exacta en la que se clasifican determinadas cadenas decaracteres.

Para obtener información sobre la conversión de ASCII a EBDIC, consulte“Utilizar tablas de conversión de datos” en la página 385.

Conseguir aplicaciones del sistema principal para ejecutar en la estación de trabajo

8 PL/I for WindowsGuía de programación

Page 31: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

NATIVE o NONNATIVE

El sistema personal (PC) retiene los enteros en un formato de bytes invertidosen comparación con el formato en que se mantienen en AIX o en el sistemaprincipal. Esto significa, por ejemplo, que una variable FIXED BIN(15) con elvalor, que es igual a 256+2, se guarda en el almacenamiento de Windows como'0201'x y en AIX o en el sistema principal como '0102'x. Una variable FIXEDBIN(31) con el misma valor se mantendría como '02010000'x en Windows ycomo '00000102'x en AIX o el sistema principal.

La representación en AIX y en el sistema principal se conoce como Big Endian (BigEnd In).

La representación en Windows, sin embargo, se conoce como Little Endian(Little End In).

Esta diferencia en las representaciones internas afecta a:v Variables FIXED BIN que requieren 2 o más bytesv Variables OFFSETv El prefijo de longitud de cadenas VARYINGv Datos de área y ordinales

En la mayoría de programas esta diferencia no provoca ningún problema. Sinembargo, si su programa depende del valor hexadecimal de un entero, tieneque conocer los errores lógicos potenciales. Puede existir una dependencia talsi utiliza la función incorporada UNSPEC con un argumento FIXED BINARY, osi una variable BIT se basa en la dirección de una variable FIXED BINARY.

Si su programa manipula punteros como si fueran enteros, la diferencia en larepresentación de datos puede ocasionar problemas. Si especificaDEFAULT(NONNATIVE), probablemente tenga que especificar tambiénDEFAULT(NONNATIVEADDR).

Puede especificar el atributo NONNATIVE en declaraciones seleccionadas. Porejemplo, la asignación de la siguiente sentencia convierte todos los valoresFIXED BIN de la estructura de no nativos a nativos:

dcl1 a1 native,

2 b fixed bin(31),2 c fixed dec(8,4),2 d fixed bin(31),2 e bit(32),2 f fixed bin(31);

dcl1 a2 nonnative,

2 b fixed bin(31),2 c fixed dec(8,4),2 d fixed bin(31),2 e bit(32),2 f fixed bin(31);

a1 = a2;

IEEE frente a HEXADECLos sistemas operativos de Estación de trabajo representan datos de comaflotante utilizando el formato IEEE mientras que el sistema principal utilizatradicionalmente el formato hexadecimal.

Tabla 1 en la página 10 resume la diferencia entre IEEE de coma flotantenormalizado y hexadecimal:

Conseguir aplicaciones del sistema principal para ejecutar en la estación de trabajo

Capítulo 1. Portar aplicaciones entre plataformas 9

Page 32: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 1. IEEE normalizado y hexadecimal

Especificación IEEE (AIX) IEEE (PC) Hexadecimal

Rango de valores aproximado De ±10E-308 a±10E+308

De ±3.30E-4932 a±1.21E+4932

De ±10E-78 a±10E+75

Precisión máxima para FLOATDECIMAL

32 18 33

Precisión máxima para FLOATBINARY

106 64 109

Número máximo de dígitos enel exponente FLOAT DECIMAL

4 4 2

Número máximo de dígitos enel exponente FLOAT BINARY

5 5 3

El flotante hexadecimal tiene los mismos valores de exponente mínimo ymáximo para la coma flotante extendida, larga y corta, pero el flotante IEEEtiene valores de exponente mínimo y máximo diferentes para coma flotanteextendida, larga y corta. Esto significa que mientras 1E74, que en PL/I deberíatener los atrbutos FLOAT DEC(1), es un flotante corto hexadecimal válido, noes un flotante corto IEEE válido.

En la mayoría de programas estas diferencias no debería causar problemas, aligual que tampoco deberían ocasionar problemas las diferentesrepresentaciones de variables FIXED BIN. Sin embargo, tenga cuidad alcodificar si su programa depende del valor hexadecimal de un valor flotante.

Además, mientras los cálculos FIXED BIN producen el mismo resultadoindependientemente de las representaciones internas descritas anteriormente,los cálculos de coma flotante no producen necesariamente el mismo resultado.Cuando el compilador convierte un literal de coma flotante en surepresentación binaria interna, la representación podría no ser la misma que lade otras plataformas distintas. Los resultados del cálculo de coma flotante enplataformas distintas pordría ser también ligeramente diferente. Esto esparticularmente cierto en el caso de coma flotante ampliada y corta.

Las diferencias suelen ser muy pequeñas y pueden provocar errores deredondeo. Los programas que dependen de valores de coma flotante exactospueden obtener resultados incorrectos. Por ejemplo, si un archivo contiene unvalor binario de coma flotante, podría buscar ese valor en el archivo y noencontrar una coincidencia exacta.

EBCDIC DBCS y ASCII DBCSLas series EBCDIC DBCS se encierran entre códigos de desplazamiento,mientras que las series ASCII DBCS no. Los valores hexadecimales utilizadospara representar los mismos caracteres también son diferentes.

De nuevo, en la mayoría de programas esto no debería causar ningunadiferencia. Si su programa depende del valor hexadecimal de una serie gráficao de una serie de caracteres que incluye caracteres en mayúsculas y minúsculasy datos gráficos, tenga cuidado con la codificación.

Diferencias de entorno que afectan a la portabilidadHay algunas diferencias, además de la representación de datos, entre la estación detrabajo y las plataformas del sistema principal que también afectan a laportabilidad de sus programas. En esta sección se describen algunas de estasdiferencias.

Conseguir aplicaciones del sistema principal para ejecutar en la estación de trabajo

10 PL/I for WindowsGuía de programación

Page 33: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Nombres de archivoLas convenciones de nombre de archivo en el PC son muy distintas de las delsistema principal. El siguiente nombre de archivo, por ejemplo, es válido en elPC pero no en el sistema principal:

d:\programs\data\myfile.dat

Esto puede afectar a la portabilidad si utiliza nombres de archivo en su origenPL/I como parte de la opción TITLE de las sentencias OPEN y FETCH.

Atributos de archivoPL/I permite que se especifiquen muchos atributos de archivo como parte delatributo ENVIRONMENT de una declaración de archivo. Muchos de estosatributos no tienen significado en la estación de trabajo, en cuyo caso elcompilador los ignora. Si su programa depende de que se respeten estosatributos, es probable que no se transfiera correctamente.

Códigos de controlestación de trabajo interpreta algunos caracteres que no tienen un significadoconcreto en el sistema principal como caracteres de control y esto puede llevara un procesamiento incorrecto de archivos de datos que tienen el TYPE LF,LFEOF, CRLF o CRLFEOF. Dichos archivos no deberían contener ninguno delos caracteres siguientes:

'0A'x (“LF - salto de línea”)'0D'x (“CR - retorno de carro”)'1A'x (“EOF - fin del archivo”)

Por ejemplo, si el archivo del código siguiente tiene TYPE(CRLF), la sentenciaWRITE lanza la condición ERROR con el código 1041 porque 2573 tiene elvalor decimal '0D0A'x. Esto no ocurriría si el archivo tuviese un TYPE FIXED,VARLS o VARMS.

dcl1 a native,

2 b char(10),2 c fixed bin(15),2 d char(10);

dcl f file output;

a.b = ’alpha’;a.c = 2573;a.d = ’omega’;

write file(f) from(a);

Códigos de control dependientes de dispositivoEl uso de códigos de control dependientes de dispositivo (específicos deplataforma) en sus programas o archivos puede provocar problemas al intentartransferirlos a otras plataformas que quizás no soporten estos códigos decontrol.

Al igual que con el resto de código específico de plataforma, es mejor aislar elcódigo todo lo posible para que se puede sustituir fácilmente cuando mueva laaplicación a otra plataforma.

Elementos de lenguaje que provocan diferencias en tiempo deejecución

El compilador PL/I implementa algunos elementos de lenguaje de forma distintaen Windows y z/OS. Estas diferencias en la implementación podrían provocar

Conseguir aplicaciones del sistema principal para ejecutar en la estación de trabajo

Capítulo 1. Portar aplicaciones entre plataformas 11

Page 34: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

diferencias en la forma en que se ejecuta el programa. Cada uno de los elementossiguientes se describe en términos de su comportamiento en Windows.

FIXED BIN(p) correlaciona a 1 byte si p <= 7Si tiene alguna variable declarada como FIXED BIN con una precisión de 7 omenos, ocupa 1 byte de almacenamiento en PL/I for Windows en lugar de 2como en PL/I para z/OS. Si la variable forma parte de una estructura, estocambia la correlación de la estructura y podría afectar al modo en que seejecuta su programa. Por ejemplo, si la estructura se leyese desde un archivocreado en el sistema principal, se leerían menos bytes.

Para evitar esta diferencia, puede cambiar la precisión de la variable por unvalor entre 8 y 15 (ambos inclusive).

El atributo INITIAL para AREA se ignoraPara evitarPL/I for Windows ignore el atributo INITIAL de AREA, conviertalas cláusulas INITIAL en sentencias de asignación.

Por ejemplo, en el siguiente fragmento de código, los elementos de la matrizno se inicializan en a1, a2, a3 y a4.

dcl (a1,a2,a3,a4) area;dcl a(4) area init( a1, a2, a3, a4 );

Sin embargo, puede reescribir el código de la siguiente manera para que lamatriz se inicialice del modo deseado.

dcl (a1,a2,a3,a4) area;dcl a(4) area;

a(1) = a1;a(2) = a2;a(3) = a3;a(4) = a4;

Emisión de mensajes ERRORCuando se lanza una condición ERROR, no en envía ningún mensaje ERRORen PL/I for Windows si se cumplen las siguientes condiciones:v Se ha establecido una unidad ON ERROR ERROR.v La unidad ON ERROR se recupera a partir de la condición utilizando GOTO

para sacar el control del bloque.

Los mensajes de error se dirigen a STDERR en lugar de al conjunto de datosSYSPRINT. De forma predeterminada, es el terminal. Si SYSPRINT se dirige alterminal, cualquier salida que haya en el almacenamiento intermedioSYSPRINT (que aún no se haya grabado en SYSPRINT) se graba antes de quese grabe cualquier mensaje de error.

ADD, DIVIDE y MULTIPLY no devuelven FIXED BIN escaladoCon la opción de tiempo de compilación RULES(IBM), que es lapredeterminada, las variables pueden declararse como FIXED BIN con unfactor de escala no cero. Las operaciones de comparación, infijo y prefijo serealizan en FIXED BIN escalado al igual que con el sistema principal. Sinembargo, cuando las funciones incorporadas ADD, DIVIDE o MULTIPLYtienen argumentos con factores no cero o especifican un resultado con unfactor de escala no cero, los compiladores PL/I for Windows evalúan lafunción incorporada como FIXED DEC en lugar de FIXED BIN como elcompilador del sistema principal.

Por ejemplo, los compiladores de PL/I for Windows evaluarían la funciónincorporada DIVIDE de la siguiente sentencia de asignación como unaexpresión FIXED DEC:

Conseguir aplicaciones del sistema principal para ejecutar en la estación de trabajo

12 PL/I for WindowsGuía de programación

Page 35: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

dcl (i,j) fixed bin(15);dcl x fixed bin(15,2);

.

.

.x = divide(i,j,15,2)

Habilitación de OVERFLOW y ZERODIVIDEPara OVERFLOW y ZERODIVIDE, la condición de ERROR se lanza bajo lassiguientes condiciones:v Se lanza OVERFLOW o ZERODIVIDE y se introduce la unidad ON

correspondiente.v El control no deja la unidad ON en una sentencia GOTO.

Conseguir aplicaciones del sistema principal para ejecutar en la estación de trabajo

Capítulo 1. Portar aplicaciones entre plataformas 13

Page 36: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Conseguir aplicaciones del sistema principal para ejecutar en la estación de trabajo

14 PL/I for WindowsGuía de programación

Page 37: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Parte 2. Compilar y enlazar su programa

© Copyright IBM Corp. 1998, 2013 15

Page 38: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

16 PL/I for WindowsGuía de programación

Page 39: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 2. Compilación del programa

La primera parte de este capítulo describe cómo compilar, enlazar y ejecutar unprograma PL/I simple. El resto del capítulo se dedica a dar una descripción másdetallada sobre la configuración del entorno de compilación.

Un ejercicio de práctica breveIntente compilar, enlazar y ejecutar un programa simple para hacerse una idea decómo usar PL(I en el entorno Windows.

El programa HELLO (Hola)Aquí tiene los pasos para crear el programa que muestra la serie de caracteres“Hello!” en la pantalla de su ordenador.

1. Crear el programa fuenteCree un archivo, HELLO.PLI, con las siguientes sentencias PL/I.

Hello: proc options(main);display(’Hello!’);

end Hello;

Deje el primer espacio de cada línea en blanco: de forma predeterminada, elcompilador reconoce solo los caracteres de las columnas 2-72. (Consulte“MARGINS” en la página 84, para obtener información adicional).

Guarde el archivo en el disco.

2. Compilar el programaEn una ventana o sesión de pantalla completa, vaya al directorio que contieneel archivo HELLO.PLI y escriba el siguiente mandato:

pli hello

El compilador muestra información sobre la compilación en su pantalla y creael archivo de objeto (HELLO.OBJ) en el directorio actual.

3. Enlazar el programaSin cambiar los directorios, escriba el siguiente mandato:

ilink hello.obj

Así se combina el archivo HELLO.OBJ con los archivos de biblioteca necesarios(tal y como se especifica en la opción de tiempo de compilación LIBS),produciendo el archivo HELLO.EXE (el programa ejecutable) en el mismodirectorio.

Como no se han especificado parámetros con el mandato de enlace, se utilizanlos predeterminados. (Las opciones disponibles con el mandato de enlace sedescriben en Capítulo 6, “Enlace de programas”, en la página 189).

4. Ejecutar el programaSin cambiar los directorios, escriba el siguiente mandato:

hello

Así se invoca el programa HELLO.EXE, que muestra Hello! en su pantalla.

© Copyright IBM Corp. 1998, 2013 17

Page 40: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Para hacer las cosas más sencillas, los programadores suelen colocar los mandatospara compilar, enlazar y ejecutar en un mismo archivo de mandatos (CMD).

Utilizar opciones de tiempo de compilaciónMientras se prepara para compilar programas, considere el uso de un subconjuntode las opciones de tiempo de ejecución disponibles. Para ver una descripcióncompleta de las opciones de tiempo de ejecución, incluyendo las formas abreviadasopcionales, consulte Capítulo 3, “Opciones de tiempo de compilación”, en lapágina 27.

El siguiente ejemplo ilustra cómo especificar opciones como parte del mandato decompilación:

pli filename (source attributes(full)

sourceEsta opción hace que su código fuente y los mensajes del compilador seguarden en un archivo de listado de compilador (por ejemplo, HELLO.LST).

attributes(full)Esta opción crea un listado de todos los atributos en vigor para cadaidentificador definido por el programador que se va a incluir en el lista do delcompilador.

Utilizar los programas de ejemplo incluidos con el productoEl producto incluye varios programas de ejemplo, algunos de los cuales aparecenen diferentes partes de esta guía.

Para Windows, los programas de ejemplo se instalan en el directorio ..\SAMPLES.Se incluye un archivo léame smwread.me para los programas de ejemplo.

Pasos previos para compilar programas fuenteAntes de compilar su programa fuente, tiene que saber qué estructura y formatoespera el compilador de sus archivos de programa fuente.

Estructura de archivo de programaUna aplicación PL/I puede constar de varias unidades de compilación. Tiene quecompilar cada unidad de compilación de forma independiente y, a continuación,construir la aplicación completa enlazando los archivos de objeto resultantes.

Una unidad de compilación consta de un archivo de origen principal y cualquiernúmero de archivos de inclusión. No compile los archivos de inclusión de formaindependiente ya que en realidad pasan a formar parte del programa principaldurante la compilación. El compilador no permite que se utilice DBCS en losnombres de los archivos de inclusión o del archivo de origen

Si su programa necesita sentencias %PROCESS o *PROCESS, estas tienen que serlas primeras líneas del archivo de origen. La primera línea después de ellas que noesté completamente formada por espacios en blancos o comentarios tiene que seruna sentencia PACKAGE o PROCEDURE. La última línea de su archivo de origenque no esté completamente formada por espacios en blanco o comentarios tieneque ser una sentencia END que coincida con la sentencia PACKAGE oPROCEDURE.

Un ejercicio de práctica breve

18 PL/I for WindowsGuía de programación

Page 41: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Los siguientes ejemplos muestran la forma correcta de dar formato a los archivosde origen.

Utilizar una sentencia PROCEDURE con PROCESS:%PROCESS ;%PROCESS ;%PROCESS ;

/* optional comments */

procedure_Name: proc( ... ) options( ... );...

end procedure_Name;

Utilizar una sentencia PACKAGE con PROCESS::*PROCESS ;*PROCESS ;*PROCESS ;

/* optional comments */

package_Name: package exports( ... ) options( ... );...

end package_Name;

El archivo de origen de una compilación puede incluir varios programas separadospor sentencias *PROCESS. Se ignora todo excepto el primer conjunto de sentencias*PROCESS, y el compilador asume una sentencia PACKAGE EXPORTS(*) antes delprimer procedimiento.

procesamiento INCLUDEPuede incluir archivo PL/I adicionales en puntos especificados de una unidad decompilación utilizando sentencias %INCLUDE. Para ver la sintaxis de la sentencia%INCLUDE, consulte Referencia de lenguaje PL/I.

Si especifica el archivo que se va a incluir utilizando una cadena, el compiladorbusca el archivo exactamente con el mismo nombre que se especificó en esacadena. Sin embargo, si especifica un archivo de inclusión utilizando uno de losmétodos PL/I más tradiciones, ya sea utilizando un nombre de miembro y ddname osolo un nombre de miembro, el compilador añade una extensión de archivo al nombrede miembro.

Puede especifica qué extensiones de archivo se añaden al nombre de miembroutilizando la opción de compilador INCLUDEY. Por ejemplo, si especifica la opciónINCLUDE como INCLUDE(EXT(CPY)), cuando el compilador vea una de lassiguientes sentencias, intentará incluir el archivo member.cpy.

%include member;%include ddname(miembro);

El compilador busca este archivo en el orden siguiente:1. Los directorios especificados en la variable de entorno IBM.DDNAME, si la

sentencia %include especifica ddname

2. Los directorios especificados en la variable de entorno IBM.SYSLIB3. Los directorios especificados en la variable de entorno INCLUDE4. El directorio actual.

Pasos previos para compilar programas fuente

Capítulo 2. Compilación del programa 19

Page 42: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Si especifica más de una extensión en la opción del compilador INCLUDE, elcompilador busca todos los directorios por encima utilizando la primera extensión;después realiza otro pase por los mismos directorios utilizando la segundaextensión, y así sucesivamente.

directiva %LINELa directiva %LINE especifica que la siguiente línea debería tratarse en losmensajes e información generada para depuración como si procediera del archivo ylínea especificados.

Los caracteres '%LINE' tienen que estar en las columnas de la 1 a la 5 de la líneade entrada para que se reconozca la directiva (y, a la inversa, cualquier línea queempiece con estos cinco caracteres se trata como una directiva %LINE). El valorline-number tiene que ser un entero de siete dígitos o menos y file-specificationno debe ir entre comillas. Los caracteres que se especifiquen después del punto ycoma se ignoran.

Puede obtener un ejemplo del aspecto que pueden tener estas líneas compilandoun programa con las opciones PPTRACE MACRO y MDECK.

MárgenesDe forma predeterminada, el compilador ignora cualquier dato de la primeracolumna de su programa fuente y establece el margen derecho a 72 espacios delizquierdo.

Puede cambiar el valor de margen predeterminado (consulte “MARGINS” en lapágina 84). Si conserva los valores predeterminados, el código fuente comienza enla columna 2.

Nota: La sentencia %PROCESS (o *PROCESS) es una excepción a la regla demárgenes y tiene que comenzar en la primera columna. Para obtener másinformación sobre la sentencia %PROCESS, consulte “sentencia %PROCESS”en la página 25.

Formato de archivo de programaEl compilador, que se ejecuta en los sistemas operativos Windows, espera que elcontenido de su archivo de origen esté formado por un formato ASCII y CR-LF detipo 1. Si ha creado su archivo en una estación de trabajo, el formato debería sercorrecto; sin embargo, si transfiere un archivo desde el entorno de otra máquina,asegúrese de que la transferencia de archivo lleva a cavo las conversionesnecesarias (a ASCII y CR-LF).

El compilador puede interpretar caracteres que están en el rango de '00'X a '1F'Xcomo códigos de control. Si utiliza caracteres dentro de este rango en su programa,los resultados son imprevisibles.

Continuación de líneaDurante la compilación, todas las líneas de origen inferiores al valor especificadopara el margen derecho en la opción MARGINS se rellenan por la derecha concaracteres en blanco para hacer que la línea alcance la longitud especificada por elvalor de margen derecho. Por ejemplo, si utiliza el valor predeterminado por IBM

1. Un archivo de tipo CR-LF se compone de líneas de longitudes variables, cada una de ellas delimitada por los caracteres CR-LF.CR y LF son caracteres ASCII especiales que significan “Retorno de carro” y “Salto de línea” (valores hexadecimales 0D y 0A)respectivamente. El compilador interpreta CR-LF, LF-CR, CR o LF como un delimitador de registro. El valor hexadecimal 1Asignifica el final del archivo.

Pasos previos para compilar programas fuente

20 PL/I for WindowsGuía de programación

Page 43: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

para MARGINS (2,72), todas las líneas con menos de 72 caracteres se rellenan porla derecha hasta que la línea alcance los 72 caracteres de longitud.

Si los nombres de identificador largos se extienden más allá del margen derecho,debe poner el nombre completo en la siguiente línea en lugar de intentar dividirloen dos líneas.

Si una línea de su programa llega exactamente al margen derecho, el últimocarácter de esa línea se concatena con el primer carácter dentro de los márgenes dela siguiente línea, sin caracteres en blanco entre ambos.

Si tiene una cadena que supera el valor del margen derecho, puede llevar el textode la cadena a la siguiente línea (o líneas). Se recomienda dividir las cadenas largasen varias cadenas cortas (cada una de ellas en una línea) que se concatenan.shorterstrings (each of which fits on a line). Por ejemplo, en lugar de usar este código.do;if x > 200 thendisplay (’This is a long string and requires more than one line totype it into my program’);

elsedisplay (’This is a short string’);

end;

Debería utilizar la siguiente secuencia de sentencias:do;if x > 200 thendisplay (’This is a long string and requires more than ’{’one line to type it into my program’);

elsedisplay (’This is a short string’);

end;

Definir variables de entorno en tiempo de compilaciónLa forma de definir variables de entorno en tiempo de compilación depende delsistema operativo que se utilice.

En Windows, las variables de entorno se definen en la ventana Sistema (paraacceder a ella, pulse dos veces en Principal y, a continuación, en Panel de control).En la ventana Sistema, pulse Definir para añadir un elemento nuevo a la lista deVariables de entorno del usuario. Las opciones definidas en la ventana Sistema deWindows entran en vigor al arrancar el equipo, a no ser que las sustituyautilizando un archivo .CMD o especificando opciones en la línea de mandatos.

Para obtener más información sobre las variables de entorno y su uso, consulte ladocumentación de su sistema.

El compilador proporciona varios variable de entorno. Le permiten personalizar losvalores predeterminados de:v La ubicación de entrada y salida del compiladorv Las opciones en tiempo de compilación.

La ubicación predeterminada de la entrada y salida del compilador es el directorioactual; el valor predeterminado suministrado por IBM para cada opción en tiempode compilación se especifica en Capítulo 3, “Opciones de tiempo de compilación”,en la página 27.

Pasos previos para compilar programas fuente

Capítulo 2. Compilación del programa 21

Page 44: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Algunos variable de entorno del compilador especifican un vía de acceso aldirectorio, que no debe incluir un nombre de archivo ni una extensión. Si la vía deacceso es para la entrada del compilador, cada vía de acceso individual (excepto laúltima) tiene que estar delimitada por un unto y coma. Si la vía de acceso es parala salida del compilador, solo se permite una vía de acceso a un directorioespecífico.

IBM.OPTIONSLa variable de entorno IBM.OPTIONS especifica los valores de la opción delcompilador. Por ejemplo:

set ibm.options=xref attributes

La sintaxis de la cadena de caracteres que asigna a la variable de entornoIBM.OPTIONS es la misma que la requerida por las opciones de tiempo decompilación especificadas en el mandato PLI (consulte “Utilizar el mandato PLIpara invocar al compilador” en la página 24).

Los valores predeterminados y los cambios que aplique utilizando esta variable deentorno se convierten en los nuevos valores predeterminados. Las opciones queespecifique en el mandato PLI o en su programa fuente anulan los valorespredeterminados.

IBM.PPINCLUDELa variable de entorno IBM.PPINCLUDE especifica los valores de la opción delpreprocesador de inclusión. Por ejemplo:

set ibm.ppinclude=id(++include)

La sintaxis de la cadena de caracteres que asigna a la variable de entornoIBM.PPINCLUDE es la misma que la requerida por las opciones de tiempo decompilación especificadas en el mandato PLI (consulte “Utilizar el mandato PLIpara invocar al compilador” en la página 24).

Los valores predeterminados y los cambios que aplique utilizando esta variable deentorno se convierten en los nuevos valores predeterminados. Las opciones queespecifique en la opción PP(INCLUDE) en la variable de entorno IBM.OPTIONS oel mandato PLI o en su programa fuente anulan los valores predeterminados.

IBM.PPMACROLa variable de entorno IBM.PPMACRO especifica los valores de la opción de lafunción de macros. Por ejemplo:

set ibm.ppmacro=xref print

La sintaxis de la cadena de caracteres que asigna a la variable de entornoIBM.PPMACRO es la misma que la requerida por las opciones de tiempo decompilación especificadas en el mandato PLI (consulte “Utilizar el mandato PLIpara invocar al compilador” en la página 24).

Los valores predeterminados y los cambios que aplique utilizando esta variable deentorno se convierten en los nuevos valores predeterminados. Las opciones queespecifique en la opción PP(MACRO) en la variable de entorno IBM.OPTIONS o elmandato PLI o en su programa fuente anulan los valores predeterminados.

Definir variables de entorno en tiempo de compilación

22 PL/I for WindowsGuía de programación

Page 45: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

IBM.PPSQLLa variable de entorno IBM.PPSQL especifica los valores de la opción delpreprocesador SQL. Por ejemplo:

set ibm.ppsql=dbname(employee)

La sintaxis de la cadena de caracteres que asigna a la variable de entornoIBM.PPSQL es la misma que la requerida por las opciones de tiempo decompilación especificadas en el mandato PLI (consulte “Utilizar el mandato PLIpara invocar al compilador” en la página 24).

Los valores predeterminados y los cambios que aplique utilizando esta variable deentorno se convierten en los nuevos valores predeterminados. Las opciones queespecifique en la opción PP(SQL) en la variable de entorno IBM.OPTIONS o elmandato PLI o en su programa fuente anulan los valores predeterminados.

IBM.PPCICSLa variable de entorno IBM.PPCICS especifica los valores de la opción delpreprocesador CICS. Por ejemplo:

set ibm.ppcics=source edf

La sintaxis de la cadena de caracteres que asigna a la variable de entornoIBM.PPCICS es la misma que la requerida por las opciones de tiempo decompilación especificadas en el mandato PLI (consulte “Utilizar el mandato PLIpara invocar al compilador” en la página 24).

Los valores predeterminados y los cambios que aplique utilizando esta variable deentorno se convierten en los nuevos valores predeterminados. Las opciones queespecifique en la opción PP(CICS) en la variable de entorno IBM.OPTIONS o elmandato PLI o en su programa fuente anulan los valores predeterminados.

IBM.SOURCELa variable de entorno IBM.SOURCE especifica las rutas a los archivos de suprograma fuente. Por ejemplo:

set ibm.source=c:\pli\project\updates;\pli\system

IBM.SYSLIBLa variable de entorno IBM.SYSLIB especifica la ruta de búsqueda del directorio deentrada primaria para los archivos de inclusión identificados mediante sentencias%INCLUDE en su programa fuente. Por ejemplo:

set ibm.syslib=c:\pli\project\updates;\pli\system

Estos directorios se buscan antes de cada uno de los directorios especificados en lavariable de entorno INCLUDE.

IBM.PRINTLa variable de entorno IBM.PRINT especifica la ruta en la que se graban losarchivos de listado. Por ejemplo:

set ibm.print=c:\pli\project\updates

Los archivos de listado tienen el mismo nombre que su archivo de programafuente, con una extensión ASM para el listado del ensamblador y LST para otrainformación de listados.

Definir variables de entorno en tiempo de compilación

Capítulo 2. Compilación del programa 23

Page 46: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

De forma predeterminada, los mensajes de diagnóstico y el código de retorno semuestran en la pantalla.

IBM.OBJECTLa variable de entorno IBM.OBJECT especifica el directorio de salida para archivosde objeto y de definición que tienen el mismo nombre que su archivo de programade origen, con una extensión OBJ o DEF. Por ejemplo:

set ibm.object=c:\pli\project\updates

Un archivo de objeto contiene la conversión del código de máquina de sussentencias de origen PL/I. Para hacerlo ejecutable, tiene que enlazarlo con otrosarchivos OBJ que componen su programa y con los archivos de bibliotecacorrespondientes. Para ver un resumen de cómo enlazar su programa, consulteCapítulo 6, “Enlace de programas”, en la página 189.

IBM.DECKLa variable de entornoIBM.DECK especifica el directorio de salida para el archivode origen modificado producido por el recurso de macros. EL archivo solo seproduce cuando la opción de tiempo de compilación MDECK está en vigor. Porejemplo:

set ibm.deck=c:\pli\project\updates

El archivo de salida tiene el mismo nombre que su archivo de programa fuenteprimario, con la extensión DEK. Puede utilizarlo como entrada para unacompilación posterior.

INCLUDELa variable de entorno INCLUDE especifica la ruta de búsqueda del directorio deentrada secundaria para los archivos de inclusión identificados mediante sentencias%INCLUDE en su programa fuente. Por ejemplo:

set include=c:\pli\program

Estos directorios se buscan después de cada uno de los especificados enIBM.SYSLIB variable de entorno.

TMPLa variable de entorno TMP especifica el directorio de entrada y de salida paracualquier archivo de trabajo temporal que necesite el compilador. Por ejemplo:

set tmp=c:\pli\project\updates

No especifique un directorio que reside en una red de área local (LAN). Si trabajacon programas grandes, asegúrese de que define esta variable en una ubicacióncon suficiente espacio libre.

Utilizar el mandato PLI para invocar al compiladorUtilizar el mandato PLI para invocar al compiladorPuede introducirlo en la líneade mandatos o en un archivo CMD.

pli_program_file_specificationLa especificación de archivo Windows para su archivo de programa fuenteprimario. Si omite la extensión de su especificación de archivo, el compiladoasume una extensión de PLI. Si omite la vía de acceso completa, se asumedirectorio actual, a no ser que especifique otra cosa utilizando IBM.SOURCE.

Definir variables de entorno en tiempo de compilación

24 PL/I for WindowsGuía de programación

Page 47: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

compiler_optionUna o varias opciones de tiempo de compilación, descritas en Capítulo 3,“Opciones de tiempo de compilación”, en la página 27.

A continuación encontrará un ejemplo del mandato PLI:pli hello (source

Puede utilizar un archivo de respuesta para colocar opciones comunes en unarchivo y utilizar ese archivo para compilar varios programas. Por ejemplo, si elarchivo pli.opt incluyera un lista de opciones, podría compilar el programa demuestra towers de la siguiente manera:

pli towers.pli ( @pli.opt

Cuando utilice archivos de respuesta, recuerde estas directrices:v El nombre del archivo de origen y las opciones pueden ir antes del nombre del

archivo de respuestas, pero no puede haber nada detrás de él.v Un archivo de respuesta puede apuntar a otro archivo de respuesta.

Dónde especificar opciones de tiempo de compilaciónPuede especificar opciones de tiempo de compilación en los tres lugares descritosen las siguientes secciones. Cada lugar sucesivo sustituye las opcionesespecificadas en el anterior, partiendo de los valores predeterminados como base.

Nota: Después de que PL/I determine los valores de la opciones de tiempo decompilación que van a utilizarse en la compilación, otras sentencia origenindividuales de su programa pueden modificar el efecto de varias opcionesde tiempo de compilación. Por ejemplo, For example, OPTION(BYVALUE)toma precedencia en el programa sobre la opción de tiempo de compilaciónDEFAULT(BYVALUE).

IBM.OPTIONS y IBM.PPxxx variable de entornosLa primera forma de especificar opciones es definir la variable de entornoIBM.OPTIONS paras las opciones de tiempo de compilación y variables de entornoIBM.PPxxx para las opciones del preprocesador. Consulte “Definir variables deentorno en tiempo de compilación” en la página 21. Al controlar las opciones detiempo de compilación con estas variables de entorno se sustituyen las opcionesnormales predeterminadas.

Mandato PLILa segunda forma de especificar opciones de tiempo de compilación quesustituyan a los valores predeterminados y a IBM.OPTIONS e IBM.PPxxx esutilizar el mandato PLI al invocar al compilador (consulte “Utilizar el mandato PLIpara invocar al compilador” en la página 24). Las opciones solo se aplican a lacompilación actial

sentencia %PROCESSLa tercera y última forma de especificar opciones de tiempo de compilación (quesustituyan los valores predeterminados, IBM.OPTIONS e IBM.PPxxx y el mandatoPLI) es utilizar la sentencia %PROCESS (o *PROCESS) en su programa fuentePL/I. Las opciones solo se aplican a la compilación actial

El siguiente ejemplo ilustra el uso de la sentencia %PROCESS:

Utilizar el mandato PLI para invocar al compilador

Capítulo 2. Compilación del programa 25

Page 48: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

%process source margins(1,80);Hello: proc options(main);

display(’Hello!’);end Hello;

Puede especificar una o varias sentencias %PROCESS, pero tienen que preceder atodas las sentencias origen PL/I, incluyendo las líneas en blanco.

Tiene que codificar el signo de porcentaje (o el asterisco) de la sentencia PROCESSen la primera columna de su archivo de origen. La palabra clave PROCESS puedeir en la siguiente columna o después de cualquier número de espacios en blanco.La lista de opciones de compilación de la sentencia %PROCESS no debe superar elmargen derecho predeterminado. Puede continuar la sentencia %PROCESS hasta lasiguiente línea, pero asegúrese de que al hacerlo no divide una palabra clave o unvalor. Se recomienda codificar varias sentencias %PROCESS, una por línea, enlugar de derivar la sentencia.

Una vez interpretadas todas las sentencias %PROCESS, el resto del programa se leeutilizando los valores de margen determinados tras considerar el mandato PLI ylas sentencias %PROCESS. Esto significa que la sentencia %PROCESS de muestramostrada anteriormente se procesaría correctamente asumiendo que el valorpredeterminado, MARGINS(2,72), estaba en vigor en tiempo de compilación.

Dónde especificar opciones de tiempo de compilación

26 PL/I for WindowsGuía de programación

Page 49: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 3. Opciones de tiempo de compilación

Este capítulo contiene descripciones de opciones de tiempo de compilacióndetalladas, incluyendo abreviaturas, valores predeterminados y ejemplos de código.

Descripciones de la opción en tiempo de compilaciónHay tres tipos de opciones del compilador; sin embargo, la mayoría de opcionesdel compilador tienen una forma positiva y negativa. La forma negativa es lapositiva con un 'NO' añadido al principio (como en TEST y NOTEST). Algunasopciones solo tienen la forma positiva (como SYSTEM). Los tres tipos de opcionesdel compilador son:1. Pares simples de palabras clave: una forma positiva que solicita un recurso, y

una forma negativa alternativa que inhibe ese recurso (por ejemplo, NEST yNONEST).

2. Palabras clave que le permiten proporcionar una lista de valores que califica laopción (por ejemplo, FLAG(W)).

3. Una combinación de las opciones 1 y 2 citadas anteriormente (por ejemplo,NOCOMPILE(E)).

Tabla 2 enumera todas las opciones del compilador con sus abreviaturas (si lashay) y los valores predeterminados proporcionados por IBM. Si una opción tienesubopciones que pueden abreviarse, las abreviaturas de describen en la descripcióncompleta de la opción.

Para ser breves, algunas opciones se describen brevemente en la tabla (porejemplo, solo es obligatoria la subopción de LANGLVL, y si especifica unasubopción de TEST, no tiene que especificar la otra). La sintaxis completa y precisase describe en las páginas siguientes.

los párrafos que siguen a la Tabla 2 describen las opciones en orden alfabético.Para las opciones que especifican que el compilador va a mostrar información, solose incluye una breve descripción; la lista generada se describe en “Utilizar ellistado del compilador” en la página 179.

Tabla 2. Opciones de tiempo de compilación, abreviaturas y valores predeterminados proporcionados por IBM

Opción de tiempo de compilación Nombre abreviado Valor predeterminadode Windows

ADDEXT | NOADDEXT - ADDEXT

AGGREGATE(DECIMAL | HEXADEC) |NOAGGREGATE

AG | NAG NOAGGREGATE

ATTRIBUTES[(FULL|SHORT)] |NOATTRIBUTES

A | NA NA [(FULL)]1

BIFPREC(15 | 31) - BIFPREC(31)

BLANK('c') - BLANK('t')2

CASERULES - CASERULES(KEYWORD(MIXED))

CHECK(STORAGE | NOSTORAGE,CONFORMANCE | NOCONFORMANCE)

- CHECK(NSTG,NOCONFORMANCE)

© Copyright IBM Corp. 1998, 2013 27

Page 50: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 2. Opciones de tiempo de compilación, abreviaturas y valores predeterminados proporcionados porIBM (continuación)

Opción de tiempo de compilación Nombre abreviado Valor predeterminadode Windows

CMPAT(LE | V1 | V2 | V3) CMP CMPAT(V2)

CODEPAGE(n) CP CODEPAGE(00819)

COMPILE | NOCOMPILE[(W | E | S)] C | NC NOCOMPILE(S)

COPYRIGHT(’string’) | NOCOPYRIGHT - NOCOPYRIGHT

CURRENCY('c') CURR CURRENCY($)

NODBCS | DBCS(JPN | CHS | CHT | KOR) - NODBCS

DEFAULT(attribute | option) DFT Consulte “DEFAULT” en la página 45

DEPRECATE(BUILTIN(built-in-name) | ENTRY(entry-name)| INCLUDE(filename) | STMT(variable-name)| VARIABLE(variable-name))

- DEPRECATE(BUILTIN()ENTRY() INCLUDE()

STMT() VARIABLE())

DEPRECATENEXT(BUILTIN(built-in-name) | ENTRY(entry-name)| INCLUDE(filename) | STMT(variable-name)| VARIABLE(variable-name))

- DEPRECATENEXT(BUILTIN() ENTRY()INCLUDE() STMT()VARIABLE())

DLLINIT | NODLLINIT - NODLLINIT

ENCODING(ASCII | UTF8) - ENCODING(ASCII)

EXIT | NOEXIT - NOEXIT

EXTRN(FULL | SHORT) - EXTRN(FULL)

FLAG[(I | W | E | S)] F FLAG(W)

FLOATINMATH(ASIS | LONG | EXTENDED) - FLOATINMATH(ASIS)

GONUMBER | NOGONUMBER GN | NGN NOGONUMBER

GRAPHIC | NOGRAPHIC GR | NGR NOGRAPHIC

IGNORE(ASSERT, DISPLAY , PUT) | NOIGNORE - NOIGNORE

IMPRECISE | NOIMPRECISE - IMPRECISE

INCAFTER(PROCESS(filename)) - INCAFTER((PROCESS(""))

INCDIR('directory name') - INCDIR()

INCLUDE | NOINCLUDE - INCLUDE

INITAUTO | NOINITAUTO - NOINITAUTO

INITBASED | NOINITBASED - NOINITBASED

INITCTL | NOINITCTL - NOINITCTL

INITSTATIC | NOINITSTATIC - NOINITSTATIC

INSOURCE[(FULL|SHORT)] | NOINSOURCE IS | NIS NOINSOURCE

LANGLVL(NOEXT | OS) - LANGLVL(OS)

LIBS - Consulte “LIBS” en la página 75

LIMITS(opciones) - Consulte “LIMITS” en la página 76

LINECOUNT(n) LC LINECOUNT(60)

LINEDIR | NOLINEDIR - NOLINEDIR

LIST | NOLIST - NOLIST

LISTVIEW( SOURCE | AFTERMACRO| AFTERCICS | AFTERSQL | AFTERALL )

- LISTVIEW(SOURCE)

Opciones de tiempo de compilación

28 PL/I for WindowsGuía de programación

Page 51: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 2. Opciones de tiempo de compilación, abreviaturas y valores predeterminados proporcionados porIBM (continuación)

Opción de tiempo de compilación Nombre abreviado Valor predeterminadode Windows

MACRO | NOMACRO M | NM NOMACRO

MARGINI('c') | NOMARGINI MI | NMI NOMARGINI

MARGINS(m,n[,c])| NOMARGINS MAR(m,n) MARGINSF-format: (2,72)V-format: (10,100)

MAXGEN(n) - MAXGEN(100000)

MAXMSG(I | W | E | S,n) - MAXMSG(W,250)

MAXNEST(BLOCK(x) DO(y) IF(z)) - MAXNEST(BLOCK(17)DO(17) IF(17))

MAXSTMT(n) - MAXSTMT(4096)

MAXTEMP(n) - MAXTEMP(50000)

MDECK | NOMDECK MD | NMD NOMDECK

MSG(390 | *) - MSG(*)

MSGSUMMARY[(XREF | NOXREF)]| NOMSGSUMMARY

- NOMSGSUMMARY

NAMES('minúsculas'[,mayúsculas]) - NAMES('#@$','#@$')

NATLANG(ENU | CHS | CHT | DEU | ESP |FRA | JPN | PTB)

- NATLANG(ENU)

NEST | NONEST - NONEST

NOT - NOT('¬')

NUMBER | NONUMBER NUM | NNUM NUMBER

OBJECT | NOOBJECT OBJ | NOBJ OBJECT

OFFSET | NOOFFSET OF | NOF NOOFFSET

ONSNAP(STRINGRANGE, STRINGSIZE)| NOONSNAP

- NOONSNAP

OPTIMIZE(0 | 2) | NOOPTIMIZE OPT | NOPT OPT(0)

OPTIONS[(ALL|DOC)] | NOOPTIONS OP | NOP NOOPTIONS

OR('c') - OR(' | ')

PP(pp-name) | NOPP - NOPP

PPCICS(’string’) | NOPPCICS - NOPPCICS

PPINCLUDE(’string’) | NOPPINCLUDE - NOPPINCLUDE

PPLIST(KEEP | ERASE) - PPLIST(KEEP)

PPMACRO(’string’) | NOPPMACRO - NOPPMACRO

PPSQL(’string’) | NOPPSQL - NOPPSQL

PPTRACE | NOPPTRACE - NOPPTRACE

PRECTYPE (ANS | DECDIGIT | DECRESULT) - PRECTYPE(ANS)

PREFIX(condición) - Consulte “PREFIX” en la página 112

PROBE | NOPROBE - PROBE

PROCEED | NOPROCEED[(W | E | S)] PRO | NPRO NOPROCEED(S)

PROCESS[(KEEP | DELETE)] | NOPROCESS - PROCESS(DELETE)

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 29

Page 52: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 2. Opciones de tiempo de compilación, abreviaturas y valores predeterminados proporcionados porIBM (continuación)

Opción de tiempo de compilación Nombre abreviado Valor predeterminadode Windows

QUOTE('"') - QUOTE('"')

REDUCE | NOREDUCE - REDUCE

RESEXP | NORESEXP - RESEXP

RESPECT([DATE]) - RESPECT()

RULES(opciones) - Consulte “RULES” en la página 120

SEMANTIC | NOSEMANTIC[(W | E | S)] SEM | NSEM NOSEMANTIC(S)

SNAP | NOSNAP - NOSNAP

SOSI | NOSOSI - NOSOSI

SOURCE | NOSOURCE S | NS NOSOURCE

STATIC(FULL | SHORT) - STATIC(SHORT)

STMT | NOSTMT - NOSTMT

STORAGE | NOSTORAGE STG | NSTG NOSTORAGE

SYNTAX | NOSYNTAX[(W | E | S)] SYN | NSYN NOSYNTAX(S)

SYSPARM('string') - SYSPARM('')

SYSTEM(WINDOWS | CICS | IMS| PENTIUM | S486)

- SYSTEM(WINDOWS)

TERMINAL | NOTERMINAL TERM | NTERM TERMINAL

TEST | NOTEST - NOTEST

USAGE(opciones) - Consulte “USAGE” en la página 140

WIDECHAR(BIGENDIAN | LITTLEENDIAN) WCHAR WIDECHAR(BIGENDIAN)

WINDOW(w) - WINDOW(1950)

XINFO(opciones) - XINFO(NODEF,NOMSG,NOSYMNOSYN,NOXMI,NOXML)

XML(CASE(UPPER | ASIS)) - XML(CASE(UPPER))

XREF[(FULL | SHORT)] | NOXREF X | NX NX [(FULL)]1

Notas:1. FULL es la subopción predeterminada si la subopción se omite con ATTRIBUTES o XREF.2. El valor predeterminado del carácter BLANK es el carácter de tabulación con valor '05'x.

Reglas para utilizar opciones de tiempo de compilación1. Si especifica subopciones u opciones de tiempo de compilación que son

mutuamente excluyentes, entra en vigor la que especificó en último lugar.2. Si las series necesaria cumples con las normas de identificador de PL/I, no

tiene que utilizar comillas. El compilador convierte las series a mayúsculas.Las siguientes opciones deberían tener las especificaciones de serie delimitadasentre comillas, porque la serie especifica caracteres especiales u opciones entiempo de ejecución:v CURRENCYv DEFAULT(INITFILL)v MARGINIv NAMES

Opciones de tiempo de compilación

30 PL/I for WindowsGuía de programación

Page 53: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v NOTv OR

3. Si una opción tiene una serie especificada entre comillas, la serie en sí no puedeincluir comillas.

4. Si una opción tiene una serie especificada entre comillas, la serie puedeespecificarse como una serie hexadecimal, por ejemplo NOT('aa'x).

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 31

Page 54: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ADDEXTEsta opción especifica si el compilador añade extensiones de archivo (.pli, .cpy) alarchivo origen y nombres de archivo de inclusión que no tienen extensión.

��ADDEXTNOADDEXT ��

NOADDEXTEl compilador no añade extensiones de archivo. Tiene que especificarNOADDEXT cuando realiza una compilación de extracción en la estación detrabajo desde el entorno de compilación/edición remoto porque no se produceninguna correlación.

ADDEXTEl compilador añade extensiones de archivo. Si especifica ADDEXT, elcompilador interpreta el mandato “pli hello” como “pli hello.pli”.

ADDEXT y NOADDEXT solo tienen valor si se añaden extensiones de archivos anombres de archivos cuando el compilador está buscando un archivo. Los archivosde salida del compilador tienen extensiones de archivos independientemente delvalor que se asigne a esta opción.

Opciones de tiempo de compilación

32 PL/I for WindowsGuía de programación

Page 55: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

AGGREGATELa opción AGGREGATE crea una Tabla de longitud de agregados que ofrece laslongitudes de las matrices y las principales estructuras del programa fuente en ellistado del compilador.

��NOAGGREGATEAGGREGATE

DECIMAL( HEXADEC )

��

ABREVIATURAS: NAG, AG

Las subopciones de la opción AGGREGATE determinan cómo se muestran losdesplazamientos de subelementos en la Tabla de longitud de agregados:

DECIMALTodos los desplazamientos del listado de agregados se muestran en formatodecimal.

HEXADECTodos los desplazamientos del listado de agregados se muestran en formatohexadecimal.

La tabla de longitud de agregados incluye estructuras pero no matrices que tienenextensiones no constantes. Sin embargo, los tamaños y desplazamientos deelementos en estructuras con extensiones no constantes pueden ser incorrectos oespecificarse como *.

Puede consultar un listado de muestra en “Utilizar el listado del compilador” en lapágina 179.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 33

Page 56: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ATTRIBUTESEsta opción especifica que una tabla de identificadores de programa fuente y susatributos se incluye en el listado del compilador.

��NOATTRIBUTESATTRIBUTES

FULL( SHORT )

��

ABREVIATURAS: NA, A

FULLEnumera todos los identificadores y atributos. Para ver un ejemplo de la tablaque se crea cuando selecciona ATTRIBUTES(FULL), consulte “Utilizar el listadodel compilador” en la página 179.

SHORTOmite los identificadores sin referencias.

Opciones de tiempo de compilación

34 PL/I for WindowsGuía de programación

Page 57: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

BIFPRECLa opción BIFPREC controla la precisión del resultado FIXED BIN devuelto porvarias funciones incorporadas.

��31

BIFPREC ( 15 ) ��

Para conseguir una mejor compatibilidad con compiladores PL/I para z/OS , debeutilizarse BIFPREC(15).

BIFPREC afecta a las siguientes funciones incorporadas:v COUNTv INDEXv LENGTHv LINENOv ONCOUNTv NUMPAGv SEARCHv SEARCHRv SIGNv VERIFYv VERIFYR

El efecto de la opción del compilador BIFPREC es más visible cuando el resultadode una de las funciones incorporadas anteriormente citadas se pasa a una funciónexterna que se ha declarado sin una lista de parámetros. Considere, por ejemplo, elsiguiente fragmento de código:

dcl parm char(40) var;dcl funky ext entry( pointer, fixed bin(15) );dcl beans ext entry;call beans( addr(parm), verify(parm),’ ’) );

Si la función beans declara sus parámetros como POINTER y FIXED BIN(15), y secompilase el código anterior con la opción BIFPREC(31) y se ejecutase en unsistema big-endian como z/OS, el compilador pasaría un entero de 4 bytes comosegundo argumento y el segundo parámetro parecería ser cero.

Tenga en cuenta que la función funky funcionaría en todos los sistemas concualquier opción.

La opción BIFPREC no afecta a las funciones incorporadas DIM, HBOUND yLBOUND. La opción CMPAT determina la precisión del resultado FIXED BINdevuelto por estas tres funciones: en CMPAT(V1), estas funciones devuelven unresultado FIXED BIN(15), mientras que en CMPAT(V2) y CMPAT(LE), devuelvenun resultado FIXED BIN(31). En CMPAT(V3), devuelven un resultado FIXEDBIN(63).

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 35

Page 58: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

BLANKLa opción BLANK especifica hasta diez símbolos alternativos para el carácter enblanco.

�� BLANK �( ' char ' ) ��

Nota: No codifique espacios en blanco entre comillas.

El punto de código suministrado de forma predeterminada por IBM del símboloBLANK es '09'X.

charUn carácter SBCS único.

No puede especificar ninguno de los caracteres alfabéticos, números ni caracteresespeciales definidos en Referencia de lenguaje PL/I.

Si especifica la opción BLANK, el símbolo en blanco estándar sigue reconociéndosecomo un carácter en blanco.

PREDETERMINADO: BLANK('09'x)

Opciones de tiempo de compilación

36 PL/I for WindowsGuía de programación

Page 59: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

CASERULESLa opción CASERULES controla el cumplimiento de las reglas de mayúsculas yminúsculas en las palabras clave.

��MIXED

CASERULES ( KEYWORD ( UPPER ) )LOWERSTART

��

LOWEROrdena al compilador que señale cualquier palabra clave que no esté enminúsculas.

MIXEDOrdena al compilador que acepte todas las palabras claves como estén cifradas.MIXED el la opción predeterminadoa.

STARTOrdena al compilador que señale las palabras claves cuya primera letra no estéen mayúscula o cuyas letras restantes no estén en minúsculas.

UPPEROrdena al compilador que señale cualquier palabra clave que no esté enmayúsculas.

Notas:

1. La opción CASERULES no se aplica a elementos de los atributosOPTIONS y ENVIRONMENT.

2. La opción CASERULES no se aplica a ninguno de los preprocesadores.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 37

Page 60: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

CHECKLa opción CHECK especifica si el compilador debe generar código especial paradetectar varios errores de programación.

�� �

,NOCONFORMANCE

CHECK ( CONFORMANCE )NOSTORAGESTORAGE

��

ABREVIATURAS: STG, NSTG

Al especificar CHECK(CONFORMANCE) el compilador genera, bajo las siguientescircunstancias, código que comprueba en tiempo de ejecución si los atributos de losargumentos pasados a un procedimiento coinciden con los de los parámetrosdeclarados.v Si un parámetro es una cadena (o una matriz de cadenas) declarada con una

longitud constante, la condición STRINGSIZE se producirá si la longitud delargumento pasado no coincide.

v Si un parámetro es una cadena (o una matriz de cadenas), se producirá laexcepción STRINGSIZE si el argumento no tiene el mismo tipo de longitud(VARYING, NONVARYING o VARYINGZ)

v Si un parámetro es una matriz ( de escalares o estructuras), se producirá lacondición SUBSCRIPTRANGE si alguno de los vínculos constantes no coincidecon los del argumento pasado. También se producirá una condiciónSUBSCRIPTRANGE si todas las extensiones son constantes y el tamaño y elespaciado de los elementos de matriz del argumento no coinciden con los delparámetro. No se comprueban las matrices de dentro de una estructura.

v Si un parámetro es una estructura o unión con extensiones constantes, se lanzarála condición SUBSCRIPTRANGE si el desplazamiento del último elemento nocoincide con el del argumento que se pasó.

v Si el procedimiento tiene el atributo RETURNS BYADDR y ese atributoespecifica un tipo de cadena, la condición STRINGSIZE se lanza si la cadenapasada para el valor RETURNS no coincide en longitud.

Este código adicional no se genera si la opción NODESCRIPTOR se aplica alprocedimiento o su el bloque contiene sentencias ENTRY o si la opciónCMPAT(LE) está en vigor.

Cuando especifica CHECK(STORAGE), el compilador llama a rutinas de bibliotecaligeramente diferentes para las sentencias ALLOCATE y FREE (excepto cuandoestas sentencias se producen dentro de un AREA). Las siguientes funcionesincorporadas, descritas en Referencia de lenguaje PL/I, solo pueden utilizarsecuando se ha especificadoCHECK(STORAGE):v ALLOCSIZEv CHECKSTGv UNALLOCATED

Opciones de tiempo de compilación

38 PL/I for WindowsGuía de programación

Page 61: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

CMPATLa opción CMPAT especifica el formato utilizado para los descriptores generadospor el compilador.

��LE

CMPAT ( V3 )V2V1

��

ABREVIATURAS: CMP

LE Con CMPAT(LE), el compilador genera descriptores en el formato definido porel producto.

V1 Con CMPAT(V1), el compilador genera los mismos descriptores que generaríael compilador OS PL/I Versión 1.

V2 Con CMPAT(V2), el compilador genera los mismos descriptores que generaríael compilador OS PL/I Versión 2 cuando se especificó la opción CMPAT (V2).

V3 Con CMPAT(V3), el compilador genera los mismos descriptores que generaríael compilador Enterprise PL/I cuando se especificó la opción CMPAT (V3).

Todos los módulos de la aplicación tienen que compilarse con la misma opciónCMPAT.

La opción DFT(DESCLIST) entra en conflicto con la opciones CMPAT(V1),CMPAT(V2) o CMPAT(V3), y si se especifica con las opciones CMPAT(V1),CMPAT(V2) o CMPAT(V3), se emite un mensaje y se asume la opciónDFT(DESCLOCATOR).

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 39

Page 62: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

CODEPAGELa opción CODEPAGE especifica la página de códigos que se utiliza para:v conversiones entre CHARACTER y WIDECHARv la página de códigos predeterminada utilizada por las subrutinas incorporadas

PLISAX

�� CODEPAGE (ccsid) ��

Los CCSID soportados son:

010470114001141011420114301144

011450114601147011480114900037

002730027700278002800028400285

002970050000871008190081300920

El CCSID 00819 predeterminado es la página de códigos ASCII Latín-1.

Opciones de tiempo de compilación

40 PL/I for WindowsGuía de programación

Page 63: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

COMPILEEsta opción especifica que la ejecución de la etapa de generación de códigodepende de la gravedad de los mensajes emitidos antes de la etapa deprocesamiento.

��COMPILENOCOMPILE

S( E )

W

��

ABREVIATURAS: NC, CNOCOMPILE

La compilación se detiene incondicionalmente tras la comprobación semántica.NOCOMPILE(S)

La compilación se detiene si se detecta un error irrecuperable o grave.NOCOMPILE(E)

La compilación se detiene si se detecta un error, un error grave o un errorirrecuperable.

NOCOMPILE(W)La compilación se detiene si se detecta un aviso, un error, un error grave o unerror irrecuperable.

COMPILEEquivalente a NOCOMPILE(S).

Si la compilación se termina a causa de la opción NOCOMPILE, la creación o node listas depende de cuándo se detuvo el compilador. Por ejemplo, deberíanproducirse listas de atributos y referencias cruzadas con la opción NOCOMPILE,pero podría producirse un error durante la comprobación semántica que evita quese produzcan dichas listas.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 41

Page 64: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

COPYRIGHTLa opción COPYRIGHT coloca una cadena en el módulo de objeto, si se genera.esta cadena se carga en la memoria con todo aquel módulo de carga al que estéenlazado este objeto.

��NOCOPYRIGHTCOPYRIGHT('copyright string') ��

la cadena está limitada a 1 000 caracteres de longitud.

Para asegurarse de que la cadena se puede leer en el entorno local, utiliceúnicamente caracteres del juego de caracteres invariables.

Opciones de tiempo de compilación

42 PL/I for WindowsGuía de programación

Page 65: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

CURRENCYEsta opción le permite especificar un carácter exclusivo para el símbolo del dólar.

�� CURRENCY ( x ) ��

x Carácter que quiere que el compilador y el tiempo de ejecución reconozcan yacepten como símbolo del dólar en cadenas de imagen.

PREDETERMINADO: CURRENCY('$')

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 43

Page 66: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

DBCSLa opción DBCS determina qué bytes se aceptan para formar DBCS.

��NODBCSDBCS ��

Cuando se especifica la opción DBCS, si también se especifica la opción GRAPHIC,se aceptarán los caracteres DBCS adecuados del idioma indicado en identificadores,literales, etc.

Opciones de tiempo de compilación

44 PL/I for WindowsGuía de programación

Page 67: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

DEFAULTEsta opción especifica los valores predeterminados para atributos y opciones. Estosvalores predeterminados se aplican únicamente cuando los atributos u opciones noestán especificados o implícitos en el origen.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 45

Page 68: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

�� DEFAULT (

,IBMANSASCIIEBCDICASSIGNABLENONASSIGNABLEBYADDRBYVALUENONCONNECTEDCONNECTEDDESCRIPTORNODESCRIPTORNATIVENONNATIVENATIVEADDRNONNATIVEADDRNOINLINEINLINEREORDERORDER

OPTLINKLINKAGE ( )

SYSTEMCDECLSTDCALL

IEEEHEXADECEVENDECNOEVENDECINITFILL( 'nn'x )NOINITFILLNULLSTRADDRNONULLSTRADDR

NULLNULLSTRPTR ( STRICT )

SYSNULLNULLSYSNULL370BIN1ARGNOBIN1ARGNONRECURSIVERECURSIVENOOVERLAPOVERLAPDESCLISTDESCLOCATOR

BYVALUERETURNS ( )

BYADDRHEXADEC

SHORT ( )IEEE

ALIGNEDDUMMY ( )

UNALIGNEDLOWERINCUPPERINC

MINORDINAL ( )

MAXIEEE

E ( )HEXADEC

NORETCODERETCODEALIGNEDUNALIGNEDPSEUDODUMMYNOPSEUDODUMMY

) ��

Opciones de tiempo de compilación

46 PL/I for WindowsGuía de programación

Page 69: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ABREVIATURAS: DFT, ASGN, NONASGN, CONN, NONCONN

ALIGNED o UNALIGNEDEsta subopción le permite forzar la alineación de bytes en todas sus variables.

Si especifica ALIGNED, a todas las variables distintas de carácter, bit, gráfico eimagen, se les da el atributo ALIGNED a no ser que se haya especificadoexplícitamente el atributo UNALIGNED (posiblemente en una estructuraprincipal) o implícitamente mediante una sentencia DEFAULT.

Si especifica UNALIGNED, a todas las variables se les asignan atributosUNALIGNED a no ser que el atributo ALIGNED se especifique explícitamente(probablemente en una estructura padre) o implícitamente mediante unasentencia DEFAULT.

El valor predeterminado es ALIGNED.

ANS o IBMUtilice los valores predeterminados IBM o ANS SYSTEM. Los valorespredeterminados aritméticos para IBM y ANS son los siguientes:

Atributos PREDETERMINADO(IBM) PREDETERMINADO(ANS)

DECIMAL FIJO (5,0) (10,0)

BINARIO FIJO (15,0) (31,0)

DECIMAL FLOTANTE (6) (6)

BINARIO FLOTANTE (21) (21)

Debajo de la subopción IBM, las variables con nombres que comienzan por unaletra entre la I y la N son de forma predeterminada FIXED BINARY y cualquierotra variable es de forma predeterminada FLOAT DECIMAL. Si selecciona lasubopción ANS, el valor predeterminado para todas las variables es FIXEDBINARY.

ASCII o EBCDIC

Utilice esta opción para definir el valor predeterminado para el juego decaracteres utilizado para la representación interna de datos de programa deproblema de caracteres.

Especifique EBCDIC únicamente cuando compile programas que dependen sela secuencia de clasificación de juego de caracteres EBCDIC. Existe unadependencia así, por ejemplo, si su programa se basa en la secuencia deordenación de dígitos o en alfabetos de mayúsculas y minúsculas. Estadependencia también existe en programas que crean un carácter alfabético enmayúscula cambiando el estado del bit de orden superior.

Nota: El compilador soporta A y E como sufijos en cadenas de caracteres. Elsufijo A indica que la cadena representa datos ASCII, incluso si la opciónde compilador EBCDIC está en vigor. El sufijo E indica que la cadena esEBCDIC, incluso si selecciona DEFAULT(ASCII).’123’A is the same as ’313133’X’123’E is the same as ’F1F1F3’X

ASSIGNABLE o NONASSIGNABLEEsta opción se aplica solo a variables estáticas. El compilador señala sentenciasen las que las variables NONASSIGNABLE son los destinos de las

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 47

Page 70: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

asignaciones. Si lleva código al sistema principal, esta opción señala sentenciasque de lo contrario lanzarían una excepción de protección (si el programa esreentrante).

BIN1ARG o NOBIN1ARGEsta subopción controla el modo en que el compilador maneja los argumentosREAL FIXED BIN de 1 byte que se pasan a una función sin prototipo.

Bajo BIN1ARG, el compilador pasará un argumento FIXED BIN tal y como estáa una función sin prototipo.

Pero bajo NOBIN1ARG, el compilador asignará cualquier argumento REALFIXED BIN de 1 byte pasado a una función sin prototipo a un FIXED BIN de 2bytes temporal y pasará el argumento temporal.

Observe el siguiente ejemplo:dcl f1 ext entry;dcl f2 ext entry( fixed bin(15) );

call f1( 1b );call f2( 1b );

Si especificase DEFAULT(BIN1ARG), el compilador pasaría la dirección de unargumento FIXED BIN(1) de 1 byte a la rutina f1 y la dirección de unargumento FIXED de 2 bytes a la rutina f2. Sin embargo, si especificaseDEFAULT(NOBIN1ARG), el compilador pasaría la dirección del argumentoFIXED BIN(15) de 1 byte a ambas rutinas.

Tenga en cuenta que si la rutina f1 fuese una rutina COBOL, al pasarle unargumento entero de un 1 surgirían problemas porque COBOL no soportaenteros de 1 byte. En este caso, sería útil utilizar DEFAULT(NOBIN1ARG);pero sería mejor especificar los atributos de argumento en la declaración deentrada.

BIN1ARG es el valor predeterminado.

BYADDR o BYVALUEDefina el valor predeterminado para argumentos o parámetros que se pasanpor dirección o por valor. BYVALUE solo se aplica a determinados argumentosy parámetros. Consulte Referencia de lenguaje PL/I para obtener másinformación.

CONNECTED o NONCONNECTEDDefina los valores predeterminados que determinen si los parámetros estánconectados o no. CONNECTED permite que el parámetro se utilice comodestino u origen en entradas/salidas orientadas a registro o como base en ladefinición de preformatos de cadena.

DESCLIST o DESCLOCATORCuando especifica DEFAULT(DESCLIST), el compilador genera un código de lamisma forma que en releases del producto anteriores (todos los descriptores sepasan en una lista como un parámetro final "oculto").

Si especifica DEFAULT(DESCLOCATOR), los parámetros que necesitandescriptores se pasan utilizando un ubicador o descriptor del mismo modo queel sistema principal PL/I. esto permite que el código antiguo siga funcionandoincluso si pasa una estructura desde una rutina a una rutina que espera recibirun puntero.

DESCLIST es el valor predeterminado.

Opciones de tiempo de compilación

48 PL/I for WindowsGuía de programación

Page 71: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

DESCRIPTOR o NODESCRIPTORUtilizar DESCRIPTOR con un PROCEDURE indica que se ha pasado una listade descriptor, mientras que DESCRIPTOR con ENTRY indica que deberíapasarse una lista de descriptor. NODESCRIPTOR tiene como resultado códigomás eficiente, pero produce errores en las siguientes condiciones:v En sentencias PROCEDURE, NODESCRIPTOR no es válido si alguno de los

parámetros tiene:– Un asterisco (*) especificado para el límite de una matriz, la longitud de

una cadena o el tamaño de un área– El atributo NONCONNECTED– El atributo UNALIGNED BIT

v En declaraciones ENTRY, NODESCRIPTOR no es válido si se especifica unasterisco (*) para el límite de una matriz, la longitud de una cadena o eltamaño de un área en la lista de descripción ENTRY.

DUMMY(ALIGNED o UNALIGNED)Esta subopción reduce el número de situaciones en las que se creanargumentos ficticios.

DUMMY(ALIGNED) indica que debería crearse un parámetro ficticio incluso siun argumento se diferencia de un parámetro únicamente en su alineación.DUMMY(UNALIGNED) indica que no debería crearse ningún argumentoficticio para un escalar (excepto un bit no variante) ouna matriz de escalares sise diferencian de un parámetro solo en la alineación.

Observe el siguiente ejemplo:dcl

1 a1 unaligned,2 b1 fixed bin(31),2 b2 fixed bin(15),2 b3 fixed bin(31),2 b4 fixed bin(15);

dcl x entry( fixed bin(31) );

call x( b3 );

Si especifica DEFAULT(DUMMY(ALIGNED)), se crea un argumento ficticio,mientras que si especifica DEFAULT(DUMMY(UNALIGNED)), no se creaningún argumento ficticio.

DUMMY(ALIGNED) es el valor predeterminado.

E(IEEE o HEXADEC)La subopción E determina el número de dígitos que se utilizarán para elexponente en elementos con formato-E.

Si especifica E(IEEE), se utilizarán 4 dígitos para los exponentes de elementoscon formato-E.

Si especifica E(HEXADEC), se utilizarán 2 dígitos para los exponentes deelementos con formato-E.

Si se especifica DFT( E(HEXADEC) ), un intento para utilizar una expresiónque tiene un valor absoluto mayor que 99 hará que se lance la condición SIZE.

DFT( E(HEXADEC) ) es útil para desarrollar y probar aplicaciones de 390 en laestación de trabajo. La sentencia "put skip edit(x) ( e(15,8));" no producemensajes en 390, pero, de forma predeterminada, se señalará en Intel y AIX.Esto puede arreglarse especificando DFT(E(HEXADEC)).

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 49

Page 72: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

IEEE es el valor predeterminado.

EVENDEC o NOEVENDECEsta subopción controla la tolerancia del compilador a variables decimales fijasdeclaradas con precisión exacta.

Con NOEVENDEC, la precisión de cualquier variable fija decimal se redondeahasta el siguiente número impar más alto.

Si especifica EVENDEC y asigna 123 a una variable FIXED DEC(2), se lanza lacondición SIZE. Si especifica NOEVENDEC, no se lanza la condición SIZE (aligual que no se lanzaría si estuviese utilizando el sistema principal PL/I).

EVENDEC es el valor predeterminado.

IEEE o HEXADEC

IEEE especifica que se retienen datos de coma flotante en el almacenamientoutilizando un formato IEEE nativo. HEXADEC indica que el almacenamientode datos de coma flotante es idéntico al del entorno del sistema principal.

INITFILL o NOINITFILLEsta subopción controla la inicialización predeterminada de variablesautomáticas.

Si especificaINITFILL con un valor hexadecimal (nn), ese valor se replica yllena el almacenamiento de todas las variables automáticas. Si no introduce unvalor hexadecimal, el valor predeterminado es '00'x. NOINITFILL no inicializaestas variables. INITIFILL puede provocar que los programas se ejecutensensiblemente más despacio y no debe especificarse en programas deproducción. Sin emabrgo, durante el desarrollo de programas, es muy útil paradetectar variables automáticas no inicializadas.

NOINITIFILL es el valor predeterminado.

INLINE o NOINLINEEsta opción establece el valor predeterminado para la opción de procedimientoen línea.

La especificación de INLINE permite que el código se ejecute más rápido pero,en algunos casos, también crea un archivo ejecutable más grande. Para obtenermás información sobre cómo puede mejorar la incorporación el rendimiento dela aplicación, consulte Capítulo 17, “Mejora del rendimiento”, en la página 363.

LINKAGELa convención de enlace para la invocación de procedimiento es:

OPTLINKLa convención de enlace predeterminada para PL/I for Windows. Esteenlace proporciona el mejor rendimiento.

SYSTEMTodos los parámetros se pasan a la pila, pero la función de llamada limpiala pila.

STDCALLLa convención de enlace estándar para las API de Windows. estaconvención de enlace se utiliza en Windows y pasa todos los parámetros ala pila. La función llamada limpia la pila.

CDECLTodos los parámetros se pasan a la pila, pero la función de llamada limpiala pila.Los nombres externos tienen el prefijo _ applied.

Opciones de tiempo de compilación

50 PL/I for WindowsGuía de programación

Page 73: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

OPTIONS(COBOL) implica LINKAGE(SYSTEM) a no ser que se especifique unenlace en la sentencia PROC o DCL de entrada.

Para obetener información más detallada sobre las convenciones de enlace,consulte Capítulo 21, “Convenios de llamada”, en la página 403.

LOWERINC o UPPERINCSi especifica LOWERINC, el compilador acepta nombres de archivo enminúsculas para los archivos INCLUDE. Si especifica UPPERINC, elcompilador acepta nombres de archivo en mayúsculas para los archivosINCLUDE.

LOWERINC es el valor predeterminado.

NATIVE o NONNATIVEEsta función solo afecta a la representación interna de datos de cadenavariantes, área, desplazamiento, ordinales y binarios fijos. Cuando la subopciónNONATIVE está en vigor, el atributo NONNATIVE se aplica a todas lasvariables no declaradas con el atributo NATIVE.

Tiene que especificar NONNATIVE únicamente para compilar programas quedependan del formato no nativo para retener este tipo de variables.

Si su programa basa variables de binario fijo en variables de desplazamiento opuntero (o a la inversa, variables de desplazamiento o puntero en variables debinario fijo), especifique:v Las subopciones NATIVE y NATIVEADDRv Las subopciones NONNATIVE y NONNATIVEADDR.

Otras combinaciones producen resultados imprevisibles.

NATIVEADDR o NONNATIVEADDREsta opción afecta solo a la representación interna de punteros. Cuando lasubopción NONNATIVEADDR está en vigor, el atributo NONNATIVE seaplica a todas las variables de puntero no declaradas con el atributo NATIVE.

Si su programa basa variables de binario fijo en variables de desplazamiento opuntero (o a la inversa, variables de desplazamiento o puntero en variables debinario fijo), especifique:v Las subopciones NATIVE y NATIVEADDRv Las subopciones NONNATIVE y NONNATIVEADDR.

Otras combinaciones producen resultados imprevisibles.

NULLSTRADDR o NONULLSTRADDREsta subopción controla cómo maneja el compilador series vacías cuando sepasan como argumentos.

Con NULLSTRADDR, cuando se especifica una serie vacía como argumento enuna invocación de entrada, el compilador pasa la dirección de un fragmentoinicializado de almacenamiento automático. Esto es compatible con lo quehacían los compiladores de PL/I y PL/I para MVS.

Con NONULLSTRADDR, cuando se especifica una serie vacía comoargumento en una invocación de entrada, el compilador pasará un punteronulo como dirección del argumento. Esto es compatible con los que hacían lasversiones anteriores del compilador Enterprise PL/I.

NULLSTRADDR es el valor predeterminado.

NULLSTRPTR(NULL|SYSNULL|STRICT)Esta subopción controla cómo maneja el compilador series vacías cuando seasignan a punteros.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 51

Page 74: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Con NULLSTRPTR(SYSNULL), el resultado de asignar '' a un puntero es elmismo que asignar SYSNULL() al puntero.

Con NULLSTRPTR(NULL), el resultado de asignar '' a un puntero es el mismoque asignar NULL() al puntero.

Con NULLSTRPTR(STRICT), las asignaciones y comparaciones de '' aPOINTER se señalan como no válidas.

NULLSTRPTR(NULL) es el valor predeterminado.

NULLSYS o NULL370Esta subopción determina qué valor se devuelve mediante la funciónicorporada NULL. Si especifica NULLSYS, binvalue(null()) es igual a 0. Siquiere que binvalue(null()) sea igual a 'ff_00_00_00'xn como ocurre el el sistemaprincipal PL/I, especifique NULL370.

NULLSYS es el valor predeterminado.

ORDER o REORDERAfecta a la optimización del código objeto. La especificación de REORDERpermite una mayor optimización del código objeto, consulte Capítulo 17,“Mejora del rendimiento”, en la página 363.

ORDINAL(MAX o MIN)Si especifica ORDINAL(MAX), a todos los ordinales cuya definición no incluyaun atributo PRECISION se les da el atributo PREC(31). De lo contrario, se lesda la precisión más pequeña que cubra su rango de valores.

OVERLAP o NOOVERLAPSi especifica OVERLAP, el compilador asume que el origen y el destino de unaasignación se pueden solapar y genera, según sea necesario, código adicionalpara garantizar que el resultado de la asignación es válido. Capítulo 17,“Mejora del rendimiento”, en la página 363.

PSEUDODUMMY o NOPSEUDODUMMYLa subopción determina si se crean argumentos ficticios cuando se especificauna referencia SUBSTR como argumento para una función sin prototipo.

Si especifica PSEUDODUMMY, se crean argumentos ficticios cuando seespecifica una referencia SUBSTR como argumento de una función sinprototipo.

Si especifica NOPSEUDODUMMY, no se crean argumentos ficticios cuando seespecifica una referencia SUBSTR como argumento de una función sinprototipo.

PSEUDODUMMY es el valor predeterminado.

RECURSIVE o NONRECURSIVECuando especifica DEFAULT(RECURSIVE), el compilador aplica el atributoRECURSIVE a todos los procedimientos. Si especificaDEFAULT(NONRECURSIVE), todos los procedimientos son no recursivosexcepto los procedimientos que tengan el atributo RECURSIVE.

NONRECURSIVE es el valor predeterminado.

RETCODE o NORETCODESi especifica RETCODE, todos los procedimientos externos que no tengan elatributo RETURNS devuelven un valor entero que se obtiene al invocar lafunción incorporada PLIRETV justo antes de volver de ese procedimiento. Estoprovoca que los procedimientos se comporten como procedimientos similaresinvocados desde COBOL en el sistema principal.

Opciones de tiempo de compilación

52 PL/I for WindowsGuía de programación

Page 75: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Si especifica NORETCODE, no se genera un código especial de losprocedimientos que no tienen el atributo RETURNS.

RETURNS (BYVALUE o BYADDR)Define el valor predeterminado que establece cómo devuelven valores lasfunciones. Consulte Referencia de lenguaje PL/I para obtener más información.

RETURNS(BYVALUE) es el valor predeterminado. Tiene que especificarRETURNS(BYADDR) si su aplicación contiene sentencias ENTRY y lassentencias ENTRY o el procedimiento de sentencia que contienen tiene laopción RETURNS. Tiene que especificar también RETURNS(BYADDR) en lasdeclaraciones de entrada de dichas entradas.

SHORT(HEXADEC o IEEE)Esta subopción mejora la compatibilidad con otros compiladores unix PL/I.SHORT (HEXADEC) indica que se va a asignar FLOAT BIN (p) a un númerode coma flotante corto (4 bytes) para p <= 21. SHORT (IEEE) indica que se vaa asignar FLOAT BIN (p) a un número de coma flotante corto (4 bytes) para p<= 24.

SHORT (HEXADEC) es el valor predeterminado.

DEFAULT (IBM ASCII ASSIGNABLE BYADDR NONCONNECTED DESCRIPTORNATIVE NATIVEADDR NOINLINE REORDER LINKAGE(OPTLINK) IEEEEVENDEC BIN1ARG NOINITFILL ORDINAL(MIN) NOOVERLAPNULLSTRADDR NULLSTRPTR(NULL) NULLSYS NONRECURSIVE DESCLISTRETURNS(BYVALUE) SHORT(HEXADEC) DUMMY(ALIGNED) LOWERINCNORETCODE ALIGNED E(IEEE) PSEUDODUMMY).

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 53

Page 76: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

DEPRECATEEsta opción señala nombres de variables, incluyendo nombres de archivo ynombres de sentencia que quiere depreciar con mensajes de error.

�� �

,

DEPRECATE ( BUILTIN ( ) )nombre-incorporado

ENTRY ( )nombre-entrada

INCLUDE ( )nombre-archivo

STMT ( )nombre-sentencia

VARIABLE ( )nombre-variable

��

BUILTINSeñala cualquier declaración de built-in-name con el atributo BUILTIN.

built-in-nameNombre de la variable BUILTIN

ENTRYSeñala cualquier declaración de entry-name con el atributo ENTRY.

entry-nameNombre nivel-1

INCLUDESeñala cualquier sentencia %INCLUDE que incluya filename.

filenameNombre del archivo

STMTSeñala todas las sentencias con el nombre statement-name.

nombre-sentenciaNombre de la sentencia. Los nombres se identifican por las palabras clavesiniciales de las sentencias PL/I. La opción STMT acepta las siguientes palabrasclave:

allocate assert attach begin call close delay deletedetach display exit fetch flush free get gotoiterate leave locate on open put read release

resignal revert rewrite signal stop wait write

VARIABLESeñala cualquier declaración de nombre-variable que no tenga los atributosBUILTIN o ENTRY.

nombre-variableNombre nivel-1

Para especificar la opción DEPRECATE, tiene que especificar al menos una de estassubopciones con una posible lista de subopciones vacía. Por ejemplo, las siguientesespecificaciones no son válidas:

Opciones de tiempo de compilación

54 PL/I for WindowsGuía de programación

Page 77: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v DEPRECATEv DEPRECATE(BUILTIN)

Si es especifica una de las subopciones no se cambian los valores de ninguna de lasotras subopciones especificadas previamente.

Al especificar una subopción una segunda vez se sustituyen las especificacionesprevias.

En cualquier caso, no se comprueban las listas de subopciones.

Ejemplos:v Las siguientes especificaciones son equivalentes:

DEPRECATE(ENTRY(old)) DEPRECATE(BUILTIN(acos))DEPRECATE(ENTRY(old) BUILTIN(acos))

v En el siguiente ejemplo, x se sustituye por y:

DEPRECATE(BUILTIN(x)) DEPRECATE(BUILTIN(y))DEPRECATE(BUILTIN(y))

El valor predeterminado es DEPRECATE(BUILTIN() ENTRY() INCLUDE() STMT()VARIABLE()).

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 55

Page 78: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

DEPRECATENEXT

El propósito de especificar la opción DEPRECATENEXT y el uso de esta opción esel mismo que el de la opción DEPRECATE, con la excepción de que el compiladoremite mensajes de aviso en lugar de mensajes de error para los elementos que va adespreciar en una fase de desarrollo futura.

Predeterminado: DEPRECATENEXT(BUILTIN() ENTRY() INCLUDE() STMT()VARIABLE())

Para obtener información detallada, consulte “DEPRECATE” en la página 54.

Opciones de tiempo de compilación

56 PL/I for WindowsGuía de programación

Page 79: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

DLLINITEsta opción se utiliza para identificar si los archivos de objeto resultantes se van autilizar en archivos ejecutables (.EXE) o en archivos de la biblioteca de enlacedinámico (.DLL).

��NODLLINITDLLINIT ��

NODLLINITesta opción tiene que estar en vigor para todas las compilaciones que se utilicepara construir un archivo .EXE.

DLLINITEsta opción tiene que especificarse en al menos una de las compilacionescuando utilice los archivos de objeto producidos por las compilaciones paracrear un .DLL.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 57

Page 80: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ENCODINGLa opción ENCODING indica si el origen está codificado en ASCII o UTF8.

��ASCII

ENCODING ( UTF8 ) ��

ENCODING(ASCII) es la opción predeterminada.

No puede utilizar la opción ENCODING(UTF8) con las opciones SOSI, DBCS oGRAPHIC.

Opciones de tiempo de compilación

58 PL/I for WindowsGuía de programación

Page 81: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

EXITLa opción EXIT permite que se invoque la salida de usuario del compilador.

��NOEXITEXIT

( inparm_string )��

inparm_stringUna cadena que se pasa a la rutina de salida de usuario del compiladordurante la inicialización. Esta cadena puede tener hasta 31 caracteres de largo.

Para obtener más información, consulte Capítulo 18, “Utilizar salidas de usuario”,en la página 377.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 59

Page 82: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

EXTRNLa opción EXTRN controla cuando se emiten opciones EXTRN para constantes deentrada externas.

��SHORT

EXTRN ( FULL ) ��

FULLSe emiten EXTRN para todas las constantes de entrada externas declaradas.

SHORTSolo se emiten EXTRN para las constantes a las que se hace referencia. Este esel valor predeterminado.

Opciones de tiempo de compilación

60 PL/I for WindowsGuía de programación

Page 83: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

FLAGLa opción FLAG especifica la mínima gravedad de error que requiere que seincluye un mensaje en el listado del compilador.

�� FLAGW

( I )ES

��

ABREVIATRURAS:

F

I Enumera todos los mensajes.

W Incluye todos los mensajes menos los informativos.

E Incluye todos los mensajes menos los mensajes informativos y de aviso.

S Solo incluye los mensajes de error grave y de error irrecuperable.

Si los mensajes se encuentran por debajo de la gravedad especificada o los filtrauna rutina de salida del compilador, se excluyen de la lista.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 61

Page 84: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

FLOATINMATHLa opción FLOATINMATH especifica la precisión que debe utilizar el compiladorcuando invoca funciones incorporadas matemáticas.

��ASIS

FLOATINMATH ( LONG )EXTENDED

��

ASISLos argumentos de las funciones incorporadas matemáticas no estaránforzados a tener una precisión de coma flotante ampliada o larga.

LONGCualquier argumento de una función incorporada matemática con precisión decoma flotante corta se convertirá a la precisión de coma flotante de máximalongitud para conseguir un resultado con la misma precisión de coma flotantede máxima longitud.

EXTENDEDCualquier argumento de una función incorporada matemática con precisión decoma flotante corta o larga se convertirá a la precisión extendida de comaflotante de máxima longitud para conseguir un resultado con la mismaprecisión extendida de coma flotante de máxima longitud.

Una expresión FLOAT DEC con precisión p tiene una precisión de coma flotantecorta si p <= 6, precisión de coma flotante larga si 6 < p <= 16 y precisión de comaflotante extendida si p > 16.

Una expresión FLOAT BIN con precisión p tiene una precisión de coma flotantecorta si p <= 21, precisión de coma flotante larga si 21 <p <= 53 y precisión decoma flotante extendida si p > 53.

Opciones de tiempo de compilación

62 PL/I for WindowsGuía de programación

Page 85: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

GONUMBEREsta opción crea una tabla de números de sentencia como parte del archivo deobjeto. Esta tabla es útil para fines depurativos.

��NOGONUMBERGONUMBER ��

ABREVIATURAS: NGN, GN

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 63

Page 86: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

GRAPHICEsta opción especifica que los caracteres de doble byte del programa fuente estánpresentes.

��NOGRAPHICGRAPHIC ��

ABREVIATURAS: NGR, GR

Tiene que especificar GRAPHIC si utiliza alguno de los siguientes elementos en suprograma fuente:v Identificadores DBCSv DBCS en comentariosv Constantes de series gráficasv Constantes de series gráficas

Opciones de tiempo de compilación

64 PL/I for WindowsGuía de programación

Page 87: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

IGNORELa opción IGNORE controla si se ignoran las sentencias ASSERT, DISPLAY y PUT.Cuando se ignora una sentencia, es como si la sentencia fuese reemplazada por unpunto y coma.

�� �

NOIGNORE

,

IGNORE ( ASSERT )DISPLAYPUT

��

ASSERTEl compilador ignora todas las sentencias ASSERT, incluyendo cualquierreferencia de función contenida en estas sentencias.

DISPLAYEl compilador ignora todas las sentencias DISPLAY, incluyendo cualquierreferencia de función contenida en esas sentencias.

PUTEl compilador ignora todas las sentencias PUT FILE.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 65

Page 88: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

IMPRECISEEsta opción determina la precisión de los resultados de coma flotante y laubicación en la que se informa de las interrupciones de coma flotante.

��IMPRECISENOIMPRECISE ��

ABREVIATURAS: IMP, NIMP

IMPRECISELa precisión de los resultados de coma flotante podría no cumplir con la IEEEy la ubicación de las interrupciones de coma flotante podría no ser precisa. Lapérdida de precisión es insignificante en la mayoría de aplicaciones. Laubicación de la interrupción podría ser próxima al punto de interrupción oestar alejada de él, quizás en otro bloque.

El uso de esta opción produce código objeto más pequeño que se ejecuta másrápido. Se recomienda para los programas de producción.

NOIMPRECISELa precisión de los resultados de coma flotante cumple con la IEEE y serequiere la ubicación precisa de las interrupciones de coma flotante. Estaopción produce código que se ejecuta de forma más lenta y solo serecomienda, en todo caso, durante el desarrollo del programa.

Aunque NOIMPRECISE proporciona una mejor detección de errores de comaflotante que IMPRECISE, el sistema operativo Windows no permite ladetección inmediata de excepciones de coma flotante. Si tiene una sentencia ensu programa que es probable que lance una excepción de coma flotante, puedeevitar este problema de detección delimitando la sentencia en un bloqueBEGIN.

Opciones de tiempo de compilación

66 PL/I for WindowsGuía de programación

Page 89: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

INCAFTEREsta opción le permite especificar un archivo que se incluye después de unasentencia en particular en su programa fuente.

�� INCAFTER ( PROCESS ( filename ) ) ��

filenameNombre del archivo que se va a incluir después de la última sentenciaPROCESS.

Actualmente, PROCESS es la única subopción y requiere que se incluya el nombrede un archivo después de la última sentencia PROCESS.

Considere los siguientes ejemplos:INCAFTER(PROCESS(DFTS))

Este ejemplo es el equivalente a tener la sentencia %INCLUDE DFTS; después dela ultima sentencia PROCESS de su origen.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 67

Page 90: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

INCLUDELa opción INCLUDE controla si el pase final del compilador maneja sentencias%INCLUDE y %XINCLUDE.

��INCLUDENOINCLUDE ��

INCLUDETanto el preprocesador MACRO como el pase final del compilador manejansentencias %INCLUDE y %XINCLUDE.

NOINCLUDEÚnicamente el preprocesador MACRO maneja sentencias %INCLUDE y%XINCLUDE.

INCLUDE es el valor predeterminado.

Opciones de tiempo de compilación

68 PL/I for WindowsGuía de programación

Page 91: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

INITAUTOCon INITAUTO, el compilador añade un atributo INITIAL a una variableAUTOMATIC que no tiene un atributo INITIAL.

��NOINITAUTOINITAUTO ��

El compilador determina los valores INITIAL de acuerdo con los atributos de datosde la variable:v INIT( ( * ) 0 ) si es FIXED o FLOATv INIT( ( * ) ’’ ) si es PICTURE, CHAR, BIT, GRAPHIC o WIDECHARv INIT( ( * ) sysnull() ) si es POINTER o OFFSET

NOINITAUTO es el valor predeterminado.

INITAUTO hará que se genere más código en el prólogo de cada bloque quecontiene variables AUTOMATIC que no se han inicializado por completo (pero adiferencia de la opción DFT( INITFILL ), esas variables tendrán ahora valoresiniciales significativos) y tendrá un impacto negativo en el rendimiento.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 69

Page 92: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

INITBASEDEsta opción realiza la misma función que INITAUTO excepto por las variablesBASED.

��NOINITBASEDINITBASED ��

NOINITBASED es el valor predeterminado

INITBASED hará que se genere más código para cualquier ALLOCATE de unavariable BASED que no se ha inicializado por completo y tendrá un impactonegativo en el rendimiento.

Opciones de tiempo de compilación

70 PL/I for WindowsGuía de programación

Page 93: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

INITCTLEsta opción realiza la misma función que INITAUTO excepto por las variablesCONTROLLED.

��NOINITCTLINITCTL ��

NOINITCTL es el valor predeterminado.

INITCTL hará que se genere más código para cualquier ALLOCATE de unavariable CONTROLLED que no se ha inicializado por completo y tendrá unimpacto negativo en el rendimiento.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 71

Page 94: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

INITSTATICEsta opción realiza la misma función que INITAUTO excepto por las variablesSTATIC.

��NOINITSTATICINITSTATIC ��

NOINITSTATIC es el valor predeterminado.

La opción INITSTATIC puede provocar que algunos objetos mayores y algunascompilaciones consuman más tiempo, pero no debería tener ningún impacto en elrendimiento.

Opciones de tiempo de compilación

72 PL/I for WindowsGuía de programación

Page 95: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

INSOURCELa opción INSOURCE especifica que el compilador debería incluir un listado delprograma fuente antes de que el preprocesador de macros lo convierta.

��NOINSOURCEINSOURCE ��

ABREVIATURAS: NIS, IS

FULLEl listado INSOURCE ignorará las sentencias %NOPRINT y contendrá todo elorigen antes de que el preprocesador lo convierta.

FULL es el valor predeterminado.

SHORTEl listado INSOURCE presta atención a las sentencias %PRINT y %NOPRINT.

El listado INSOURCE no tiene efecto a no ser que esté en vigor la opción MACRO.

Si la opción INSOURCE está en vigor, y si el compilador invoca más de uno de lospreprocesadores macro, CICS o SQL, el listado contiene el origen de cadapreprocesador.

Con la opción INSOURCE, el texto se incluye en el listado, no según la lógica delprograma, sino cuando se lee cada archivo. Considere, por ejemplo, el siguienteprograma simple que tiene una sentencia %INCLUDE entre las sentencias PROC yEND.

insource: proc options(main);%include member;

end;

El listado INSOURCE incluirá todo el programa principal antes que cualquier textoincluido del archivo "member" (y contendrá todo ese archivo antes que cualquiertexto que incluya este, y así sucesivamente).

Con la opción INSOURCE(SHORT), el texto incluido por una sentencia%INCLUDE hereda el estado impresión/no impresión que estaba en vigor cuandose ejecutó la sentencia %INCLUDE, pero ese estado impresión/no impresión serestaura al final del texto incluido (sin embargo, en el listado SOURCE, el estadoimpresión/no impresión no se restaura al final del texto incluido).

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 73

Page 96: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

LANGLVLEsta opción especifica el nivel de la definición de lenguaje PL/I que quiere queacepte el compilador. El compilador señala las infracciones de la definición delenguaje especificada.

�� LANGLVL (NOEXTOS ) ��

NOEXTNo se permiten extensiones más allá del nivel de lenguaje especificado.

OS Están permitidas las opciones ENVIRONMENT exclusivas del entornoWindows.

Opciones de tiempo de compilación

74 PL/I for WindowsGuía de programación

Page 97: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

LIBSEsta opción especifica si el compilador debe generar o no información en el archivode objeto que da nombre a las bibliotecas predeterminadas que se van a buscar enel tiempo de enlace para resolver las referencias a entradas externas y datos.

��LIBS SINGLE DYNAMIC

( )MULTI STATIC

NOLIBS

��

LIBSIgual que especificar LIBS(SINGLE DYNAMIC)

LIBS(SINGLE DYNAMIC)Especifica que las bibliotecas predeterminadas que se buscan en tiempo deenlace son las bibliotecas PL/I de hebra única:v En Windows, estas son ibmws20i.lib, ibmwstbi.lib, hepws20i.lib, y

kernel32.lib.

LIBS(MULTI DYNAMIC)Especifica que las bibliotecas predeterminadas que se buscan en tiempo deenlace son las bibliotecas PL/I multihebra:v En Windows, estas son ibmwm20i.lib, ibmwmtbi.lib, hepwm20i.lib, y

kernel32.lib.

LIBS(SINGLE STATIC)Especifica que las bibliotecas predeterminadas que se buscan en tiempo deenlace son las bibliotecas PL/I no multihebra estáticas:v En Windows, estas son ibmws20.lib, ibmws35.lib ibmwstb.lib,

hepws20.lib, y kernel32.lib.

LIBS(MULTI STATIC)Especifica que las bibliotecas predeterminadas que se buscan en tiempo deenlace son las bibliotecas PL/I multihebra estáticas. Esto significa que labiblioteca se enlazará estáticamente al módulo de usuario.v En Windows, estas son ibmwm20.lib, ibmwm35.lib ibmwmtb.lib,

hepwm20.lib, y kernel32.lib.

Tiene que especificar la subopción SINGLE únicamente si su aplicación utiliza unlenguaje multihebra y especifica la subopción MULTI cuando su aplicacióncontiene lenguaje multihebra PL/I.

Puede especificar LIBS(MULTI) cuando se utiliza lenguaje multihebra, sin embargo,esto hace que la aplicación se ejecute más despacio que si utilizara LIBS(SINGLE).

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 75

Page 98: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

LIMITSEsta opción especifica varios límites de implementación.

�� �

,7

LIMITS ( EXTNAME ( n ) )31

FIXEDBIN ( 63 )31

, 6315

FIXEDDEC ( 31 )15

, 31100

NAME ( n )

��

EXTNAMEEspecifica la longitud máxima del nombre EXTERNAL. El valor máximo de nes 100; el valor mínimo es 7.

FIXEDDECEspecifica que la precisión máxima de FIXED DECIMAL sea 15 o 31.

Si se especifica FIXEDDEC(15,31), puede declarar variables FIXED DECIMALcon una precisión mayor que 15, pero a no ser que una expresión contenga unoperando mayor que 15, toda la aritmética se llevará a cabo utilizando 15 comoprecisión máxima.

FIXEDDEC(15,31) ofrecerá mucho mejor rendimiento que FIXEDDEC(31).

FIXEDDEC(15) y FIXEDDEC(15,15) son equivalentes; igualmente,FIXEDDEC(31) y FIXEDDEC(31,31) son equivalentes.

FIXEDDEC(31,15) no está permitida.

La opción predeterminada es FIXEDDEC(15,15).

FIXEDBINEspecifica que la precisión máxima para SIGNED FIXED BINARY sea 31 o 63.El valor predeterminado es 31.

Si se especifica FIXEDBIN(31,63), puede declarar enteros de 8 bytes, pero a noser que una expresión contenga un entero de 8 bytes, toda la aritmética sellevará a cabo utilizando enteros de 4 bytes.

FIXEDBIN(63,31) no está permitida.

La opción predeterminada es FIXEDBIN(31,31).

La precisión máxima para UNSIGNED FIXED BINARY es una unidad mayor,es decir, 32 y 64.

NAMEEspecifica la longitud máxima de nombres de variable en su programa. Elvalor máximo de n es 100; el valor mínimo es 7.

DEFAULT: LIMITS(EXTNAME(100) FIXEDBIN(31,31) FIXEDDEC(15,15)NAME(100))

Opciones de tiempo de compilación

76 PL/I for WindowsGuía de programación

Page 99: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

LINECOUNTEsta opción especifica el número de líneas por página del listado del compilador,incluyendo líneas de cabecera y en blanco.

�� LINECOUNT (n) ��

ABREVIATURAS: LC

El valor de n puede ir de 1 a 32.767.

VALOR PREDETERMINADO: LINECOUNT(60)

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 77

Page 100: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

LINEDIREsta opción especifica que el compilador debería aceptar directivas %LINE.

��NOLINEDIRLINEDIR ��

Si se especifica la opción LINEDIR, el compilador rechaza todas las sentencias%INCLUDE.

VALOR PREDETERMINADO: NOLINEDIR

Opciones de tiempo de compilación

78 PL/I for WindowsGuía de programación

Page 101: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

LISTEsta opción hace que se genere un listado de módulo de objeto. Este listado tieneuna forma similar a las instrucciones del lenguaje ensamblador.

��NOLISTLIST ��

El listado de objetos se produce en un archivo independiente con la extensión .asm.

Los listados del ensamblador no siempre se compilan. Puede ver un listado demuestra en “Utilizar el listado del compilador” en la página 179.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 79

Page 102: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

LISTVIEWLa opción LISTVIEW especifica si el compilador debería mostrar el código fuenteen el listado fuente o si debería mostrarlo después de ser procesado por uno ovarios preprocesadores.

��SOURCE

LISTVIEW ( AFTERALL )AFTERCICSAFTERMACROAFTERSQL

��

SOURCEHace que el listado fuente muestre el código fuente sin adulterar y que elDepurador IBM lo muestre como vista de origen.

AFTERALLHace que el listado fuente muestre el código fuente tal y como vino delMDECK de la última invocación, si la hay, del último preprocesador y que elDepurador IBM lo muestre como la vista de origen si la subopción SEPARATEde la opción del compilador TEST también se ha especificado.

Puede utilizarse AALL como abreviatura de AFTERALL

AFTERCICSHace que el listado fuente muestre el código fuente tal y como vino delMDECK de la última invocación, si la hay, del preprocesador CICS y que elDepurador IBM lo muestre como la vista de origen si la subopción SEPARATEde la opción del compilador TEST también se ha especificado.

Puede utilizarse ACICS como abreviatura de AFTERCICS

AFTERMACROHace que el listado fuente muestre el código fuente tal y como vino delMDECK de la última invocación, si la hay, del preprocesador MACRO y que elDepurador IBM lo muestre como la vista de origen si la subopción SEPARATEde la opción del compilador TEST también se ha especificado.

Puede utilizarse AMACRO como abreviatura de AFTERMACRO

AFTERSQLHace que el listado fuente muestre el código fuente tal y como vino delMDECK de la última invocación, si la hay, del preprocesador SQL y que elDepurador IBM lo muestre como la vista de origen si la subopción SEPARATEde la opción del compilador TEST también se ha especificado.

Puede utilizarse ASQL como abreviatura de AFTERSQL

Si se especifica la opción TEST y una subopción distinta a SOURCE paraLISTVIEW, la subopción SEPARATE tiene que especificarse también para la opciónTEST.

Como ejemplo de los distintos efectos de las subopciones AFTERMACRO,AFTERSQL y AFTERALL, imagine que la opción PP fuese PP(MACRO('INCONLY'), SQL, MACRO). Entonces:v Con LISTVIEW(AFTERMACRO), el "código fuente" del listado y de la ventana

origen del Depurador IBM si se especificase TEST(SEP) aparecería tal y comollegó del MDECK que habría producido la segunda invocación delpreprocesador MACRO.

Opciones de tiempo de compilación

80 PL/I for WindowsGuía de programación

Page 103: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v Con LISTVIEW(AFTERSQL), el "código fuente" del listado y de la ventanaorigen del Depurador IBM si se especificase TEST(SEP) aparecería tal y comollegó del MDECK que habría producido la invocación del preprocesador SQL (ypor tanto %DCL y otras sentencias de macro aún estarían visibles).

v Con LISTVIEW(AFTERALL), el "código fuente" sería el mismo que en la opciónLISTVIEW(AFTERMACRO) ya que el preprocesador MACRO es el último de laopción PP.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 81

Page 104: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

MACROLa opción MACRO hace que las funciones de macro se invoquen antes de lacompilación. Si se especifica MACRO y PP(MACRO), la función de macro seinvoca dos veces. Cuando se utiliza la opción MACRO, se insertaMACRO('macro-options') en la opción PP.

��NOMACROMACRO ��

ABREVIATURAS: NM, M

Por ejemplo, si se especifican las siguientes opciones de tiempo de compilación:MDECK NOINSOURCE MACRO PP(MACRO SQL)

La opción PP se modifica y se convierte en:PP (MACRO MACRO SQL)

Consulte también “PP” en la página 104.

Opciones de tiempo de compilación

82 PL/I for WindowsGuía de programación

Page 105: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

MARGINIEsta opción especifica el indicador de margen utilizado en el listado fuenteproducido.

�� MARGINI ( 'char' ) ��

ABREVIATURAS: MI('char')

El carácter, char, se inserta en las posiciones inmediatamente a la izquierda y a laderecha de ambos márgenes, facilitando la detección de cualquier código fuenteque quede fuera de los márgenes.

PREDETERMINADO: MARGINI(' ')

Al utilizar el valor predeterminado se especifica que los márgenes de origenizquierdo y derecho se muestran en el listado mediante columnas en blanco.

Para ver un listado de muestra, consulte “Utilizar el listado del compilador” en lapágina 179.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 83

Page 106: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

MARGINSEsta opción define los márgenes dentro de los cuales el compilador interpreta elcódigo fuente del archivo de programa. Los datos que están fuera de estosmárgenes no se interpretan como código fuente, aunque se incluyen en el listadofuente si lo solicita.

��2 72

MARGINS ( m , n ), c

��

ABREVIATURAS: MAR

m El número de columna del carácter situado en el extremo izquierdo (primerbyte de datos) procesado por el compilador. No puede ser mayor que 100.

n El número de columna del carácter situado en el extremo derecho (último bytede datos) procesado por el compilador. Tiene que ser mayor que m y menorque 200.

Los registros de longitud variable se rellenan con espacios en blanco paraconseguir la longitud de registro máxima.

c El número de columna del carácter de control de impresora ANSI. No puedeser mayor que 200 y tiene que estar fuera de los valores especificados para m yn. El val or 0 para c indica que no hay presente ningún carácter de controlANSI. Solo se pueden utilizar los siguientes caracteres de control:

(en blanco)Salta una línea antes de imprimir

0 Salta dos líneas antes de imprimir

– Salta tres líneas antes de imprimir

+ No salta ninguna línea antes de imprimir

1 Iniciar página nueva

Cualquier otro carácter es erróneo y se sustituirá por un espacio en blanco.

No utilice un valor c mayor que la longitud máxima de un registro de origen,porque esto provoca que el formato del listado sea imprevisible. Para evitareste problema, ponga los caracteres de control de carro a la izquierda de losmárgenes de origen para los registros de longitud variable.

Especificar MARGINS(,,c) es una alternativa a utilizar las sentencias %PAGE y%SKIP (descritas en PL/I Language Reference).

PREDETERMINADO: MARGINS (2 72)

Opciones de tiempo de compilación

84 PL/I for WindowsGuía de programación

Page 107: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

MAXGEN

�� MAXGEN (size) ��

La opción MAXGEN especifica el número máximo de sentencias de lenguajeintermedias que deberían generarse para cualquier sentencia de usuario y hace queel compilador señale todas las sentencias en las que se supere el máximo.

El número de sentencias de lenguaje intermedias generadas para cualquiersentencia de usuario puede variar dependiendo del release del compilador, delnivel de mantenimiento del compilador y de las opciones en vigor del compilador.Esta opción se ha diseñado para ayudar a encontrar sentencias para las que segeneren cantidades excesivas de código, lo que puede indicar que se hayancodificado mal.

Sin embargo, hay que señalar que el uso de un preprocesador puede provocar queel número de sentencias de lenguaje intermedias para algunas sentencias sea muyelevado. En una situación así, es mejor definir el umbral MAXGEN en un valormayor o utilizar la opción LISTVIEW(AFTERALL).

El valor predeterminado es MAXGEN(100000).

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 85

Page 108: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

MAXMSGLa opción MAXMSG especifica el número máximo de mensajes con una gravedaddetermina (o superior) que puede producir la compilación.

�� MAXMSG

,W

( I )ES250n

��

I Cuentan todos los mensajes.

W Cuentan todos los mensajes menos los informativos.

E Cuentan todos los mensajes menos los mensajes informativos y de aviso.

S Solo cuenta los mensajes de error grave y de error irrecuperable.

n Termina la compilación si el número de mensajes supera este valor. Si losmensajes se encuentran por debajo de la gravedad especificada o los filtra unarutina de salida del compilador, no se tienen en cuenta. El valor de n puede irde 0 a 32767. Si especifica o, la compilación termina cuando se detecte elprimer error de la gravedad especificada.

PREDETERMINADO: MAXMSG( W 250 )

Opciones de tiempo de compilación

86 PL/I for WindowsGuía de programación

Page 109: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

MAXNESTLa opción MAXNEST especifica el anidamiento máximo de varias clases desentencias que debería permitirse antes de que el compilador señale el programacomo completo.

�� �

,17

MAXNEST ( BLOCK ( x ) )17

DO ( x )17

IF ( z )

��

BLOCKEspecifica el anidamiento máximo de sentencias BEGIN y PROCEDURE.

DO Especifica el anidamiento máximo de sentencias DO.

IF Especifica el anidamiento máximo de sentencias IF.

El valor de cualquier límite de anidamiento tiene que estar comprendido entre 1 y50 (ambos inclusive).

El valor predeterminado es MAXNEST( BLOCK(17) DO(17) IF(17) ).

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 87

Page 110: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

MAXSTMTCon la opción MAXSTMT, si también está en vigor la opción MSG(390), elcompilador señalará cualquier bloque que tenga más sentencias de lasespecificadas. En Windows, sin embargo, no se desconecta la optimización de unbloque así.

�� MAXSTMT (size) ��

PREDETERMINADO: MAXSTMT( 4096 )

Opciones de tiempo de compilación

88 PL/I for WindowsGuía de programación

Page 111: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

MAXTEMPLa opción MAXTEMP determina cuándo señala el compilador la sentencias queutilizan una cantidad excesiva de almacenamiento para archivos temporalesgenerados por el compilador.

�� MAXTEMP ( max ) ��

maxEl número límite de bytes que pueden utilizarse para archivos temporalesgenerados por el compilador. El compilador señala cualquier sentencia queutilice más bytes de los especificados por max . El valor predeterminado demax es 50000.

Debería examinar las sentencias señaladas con esta opción (si utiliza un códigodiferente, es posible que pueda reducir la cantidad de almacenamiento en pila quenecesita su código)

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 89

Page 112: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

MDECKEsta opción especifica que el archivo de salida de la función de macro se escribecon la extensión de archivo .DEK y el archivo se coloca en el directorio actual.

��NOMDECKMDECK ��

ABREVIATURAS: NMD, MD

MDECK se ignora si NOMACRO está en vigor. Consulte “MACRO” en la página82 para ver un ejemplo.

Opciones de tiempo de compilación

90 PL/I for WindowsGuía de programación

Page 113: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

MSGEsta opción controla cuándo emite mensajes el compilador para conversiones quese van a realizar mediante una llamada de biblioteca.

�� MSG (*390 ) ��

* Hace que el compilador envíe mensajes de aviso para las conversiones que sevan a realizar mediante una llamada de biblioteca únicamente si se realizasenmediante una llamada de biblioteca en la plataforma en la que compila elcódigo.

390Hace que el compilador envíe mensajes de aviso para las conversiones que sevan a realizar mediante una llamada de biblioteca únicamente si se realizasenmediante una llamada de biblioteca en 390.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 91

Page 114: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

MSGSUMMARYLa opción MSGSUMMARY determina si el compilador añade un resumen de todoslos mensajes que se emiten durante la compilación al listado.

��

NOMSGSUMMARYNOXREF

MSGSUMMARY ( )XREF

��

MSGSUMMARY(NOXREF)El compilador añade un resumen de mensajes al listado. El resumen seencuentra después de la tabla de referencia de archivo en el listado. Se ordenapor componentes del compilador y dentro de cada componente por gravedad ydespués por número de mensaje.

El resumen incluye la siguiente información:v Una instancia de cada mensaje que se produce durante la compilaciónv El número de veces que se produce cada mensaje

MSGSUMMARY(XREF)El compilador añade un resumen de mensajes al listado. El resumen es elmismo que el que se añade cuando se especifica MSGSUMMARY(XREF) conuna diferencia: después de cada mensaje el resumen enumera todos losnúmeros de sentencia o línea en los que se emitió el mensaje.

NOMSGSUMMARYNo se produce ningún resumen de mensajes.

NOMSGSUMMARY es el valor predeterminado. Cuando se especificaMSGSUMMARY, MSGSUMMARY(NOXREF) es el valor predeterminado.

Opciones de tiempo de compilación

92 PL/I for WindowsGuía de programación

Page 115: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

NAMESEsta opción especifica los caracteres extralingüísticos permitidos en losidentificadores. Los caracteres extralingüísticos son los caracteres distintos a los 26caracteres alfabéticos, los 10 dígitos y caracteres especiales definidos en Referenciade lenguaje PL/I.

�� NAMES ( �' extraling_char '

�' upp_extraling_char ',

) ��

extraling_charUn carácter extralingüístico.

upp_extraling_charEl carácter extralingüístico que quiere interpretar como la versión mayúsculadel carácter correspondiente en la primera subopción.

Si omite la segunda subopción, PL/I utiliza los caracteres especificados en laprimera subopción como valores de minúsculas y mayúsculas. Si especifica lasegunda subopción, debe especifica el mismo número de caracteres queespecifique en la primera subopción.

PREDETERMINADO: NAMES('#@$' '#@$')

Ejemplos:names(’äöüß’ ’ÄÖÜß’)

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 93

Page 116: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

NATLANGEsta opción define el idioma nacional que se va a utilizar para los mensajes ylistados del compilador.

�� NATLANG (ENUCHSCHTDEUESPFRAJPNPTB

) ��

CHSChino simplificado

CHTChino tradicional

DEUAlemán

ENUInglés EE. UU., mayúsculas y minúsculas.

ESPEspañol

FRAFrancés

JPNJaponés

PTBPortugués brasileño

PREDETERMINADO: NATLANG(ENU)

Opciones de tiempo de compilación

94 PL/I for WindowsGuía de programación

Page 117: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ANIDLa opción NEST especifica que el listado que resulta de la opción SOURCE indicael nivel de bloque y el nivel del grupo DO de cada sentencia.

��NONESTNEST ��

Para ver un ejemplo del listado fuente, consulte “Utilizar el listado delcompilador” en la página 179.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 95

Page 118: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

NOTEsta opción especifica hasta siete símbolos, cada uno de los cuales se interpretacomo el signo not lógico.

�� NOT ( �' char ' ) ��

charUn símbolo de carácter único. No debe especificar ninguno de los 26 caracteresalfabéticos, 10 dígitos ni caracteres especiales definidos en Referencia de lenguajePL/I, excepto para el signo not lógico (^).

DEFAULT: NOT ('^')

El punto de código predeterminado PL/I para el símbolo NOT tiene el valorhexadecimal 5E, que en muchos terminales aparecerá como el símbolo NOT lógico(^).

Si invoca el compilador desde la línea de mandatos y especifica un signo deintercalación (^) como parte de la opción NOTT, el signo de intercalación tiene queir precedido de otro signo de intercalación.

Ejemplos:not(’\}’)not(’^\}’)

Si invoca el compilador y especifica opciones de tiempo de compilación queutilizan barras verticales (|) o un signo de intercalación (^) en la línea demandatos, utilice comillas dobles alrededor del carácter.

Opciones de tiempo de compilación

96 PL/I for WindowsGuía de programación

Page 119: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

NUMBERLa opción de número especifica que las sentencias del programa fuente se van aidentificar mediante la línea y el número de archivo del archivo del que se derivany que este par de números se utiliza para identificar sentencias en el compiladorque recogen resultados de las opciones AGGREGATE, ATTRIBUTES, LIST,SOURCE y XREF. La tabla de referencia de archivo del final del listado muestra elnúmero asignado a cada archivo de entrada leído durante la compilación.

��NUMBERNONUMBER ��

Tenga en cuenta que si se utiliza un preprocesador, más de una línea del listadofuente puede estar identificada por la misma línea y número de archivo. Porejemplo, casi todas las sentencias EXEC CICS generan varias líneas de código en ellistado fuente, pero todas están identificadas por una línea y número de archivo.

NUMBER y STMT se excluyen mutuamente. Especificar NONUMBER implicaSTMT.

ABREVIATURAS: NUM, NNUM

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 97

Page 120: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

OBJECTEsta opción especifica si se produce código objeto.

��OBJECTNOOBJECT ��

ABREVIATURAS: OBJ, NOBJ

Este módulo se guarda en el directorio actual.

Opciones de tiempo de compilación

98 PL/I for WindowsGuía de programación

Page 121: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

OFFSETEsta opción especifica si el compilador produce un archivo de listado similar al delcompilador con la extensión .cod.

��NOOFFSETOFFSET ��

ABREVIATURAS: OF, NOF

El archivo .cod contiene el desplazamiento y el código de máquina de cadainstrucción generada. Utilice el programa de ejemplo cod2off para reducir eltamaño de este archivo a una lista del desplazamiento del comienzo de cadasentencia en cada bloque de la compilación.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 99

Page 122: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ONSNAP

�� �

NOONSNAP

,

ONSNAP ( STRINGRANGE )STRINGSIZE

��

En un PROCEDURE con el atributo the OPTIONS(MAIN), la opción ONSNAPespecifica que el compilador debería insertar una sentencia ON STRINGRANGESNAP; o ON STRINGSIZE SNAP; (o ambas) en el código de prologo de esePROCEDURE. Esto puede hacer que resulte más fácil determinar la cadena dellamada si las condiciones correspondientes surgen en otras rutinas llamadas desdeese PROCEDURE.

La opción ONSNAP no tiene efecto en un PROCEDURE sin alguno de estosatributos.

Opciones de tiempo de compilación

100 PL/I for WindowsGuía de programación

Page 123: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

OPTIMIZEEsta opción especifica el tipo de optimización necesaria.

��NOOPTIMIZEOPTIMIZE ( TIME )

02

��

ABREVIATURAS: NOPT, OPT

NOOPTIMIZE o OPTIMIZE(0)Utilice cualquiera de estas opciones para producir una optimización estándardel código objeto, permitiendo que la compilación continúe lo más rápidoposible.

OPTIMIZE(TIME) o OPTIMIZE(2)Utilice cualquiera de estas opciones para conseguir optimizaciones ampliadasdel código objeto y una ejecución más rápida del código objeto.

La optimización requiere más tiempo de compilación, pero normalmente resulta enun tiempo de ejecución menor.

La incorporación solo se produce en la optimización.

El uso de la opción PREFIX con una varias de las condiciones de extracción (SIZE,STRINGRANGE, STRINGSIZE y SUBSCRIPTRANGE) puede aumentarsignificativamente el tiempo y el espacio necesarios para la compilación.

Consulte Capítulo 17, “Mejora del rendimiento”, en la página 363 para ver unaexplicación completa sobre la optimización.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 101

Page 124: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

OPTIONSEsta opción produce una lista de todas las opciones de tiempo de compilación queestán en vigor para la compilación (consulte Capítulo 5, “Salida de compilación”,en la página 179 para ver un ejemplo).

��NOOPTIONSOPTIONS

DOC( ALL )

��

ABREVIATURAS: NOP, OP

Con OPTIONS(DOC), la lista OPTIONS incluirá solo aquellas opciones (ysubopciones) incluidas en este documento en el el momento de la release delcompilador.

Con OPTIONS(ALL), la lista OPTIONS incluirá también cualquier opción añadidapor PTF después de la release del compilador.

Opciones de tiempo de compilación

102 PL/I for WindowsGuía de programación

Page 125: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

OREsta opción especifica hasta siete símbolos, cada uno de los cuales se interpretacomo el signo OR lógico (|). Estos símbolos también se utilizan como el símbolode concatenación (cuando van en pares).

�� OR ( ' � char ' ) ��

charUn símbolo de carácter único. No debe especificar ninguno de los 26 caracteresalfabéticos, 10 dígitos ni caracteres especiales definidos en Referencia de lenguajePL/I, excepto para el signo OR lógico (|).

Si invoca al compilador y especifica una barra vertical (|) en la línea de mandatoscomo parte de la opción OR, la barra vertical tiene que ir precedida de un signo deintercalación (^).

DEFAULT: OR ('|')

El punto de código predeterminado PL/I para el símbolo OR (|) es 7Chexadecimal.

Ejemplos:or(’\}’)or(’|\}’)

Si invoca el compilador y especifica opciones de tiempo de compilación queutilizan barras verticales (|) o un signo de intercalación (^) en la línea demandatos, utilice comillas dobles alrededor del carácter.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 103

Page 126: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PPLa opción PP especifica qué preprocesadores se invocan (y en qué orden) antes dela compilación.

�� �

NOPP

,

RP ( pp-name )( pp-string )

��

pp-nameEl nombre que se da a un preprocesador en concreto. CICS, INCLUDE,MACRO y SQL son los únicos preprocesadores soportados actualmente. El usode un nombre no definido provoca un error de diagnóstico.

pp-stringUna serie, delimitada por comillas, de hasta 100 caracteres que representan lasopciones del preprocesador correspondiente. Por ejemplo,PP(MACRO('CASE(ASIS)')) invoca al preprocesador MACRO con la opciónCASE(ASIS).

PREDETERMINADO: NOPP

Las opciones del preprocesador se procesan de izquierda a derecha, y si dosopciones entran en conflicto, se utiliza la última (la que está más a la derecha). Porejemplo, si invoca al preprocesador MACRO con la serie de opciones 'CASE(ASIS)CASE(UPPER)', se utiliza la opción CASE(UPPER).

Se puede especificar el mismo preprocesador varias veces, y puede especificar unmáximo de 31 pasos de preprocesador.

La opción MACRO y la opción PP(MACRO) hacen que la función de macros seinvoque antes de la compilación. Si se especifican tanto MACRO comoPP(MACRO), la función de macros se invoca dos veces.

Si especifica la opción PP más de una vez, el compilador las concatena de formaefectiva. Por lo tanto, especificar PP(SQL) PP(CICS) es lo mismo que especificarPP(SQL CICS). Esto también significa que si especificó PP(MACROSQL('OPTIONS')) y PP(MACRO SQL('OPTIONS DATE(ISO)')), la opción PPresultante seríaPP( MACRO SQL('OPTIONS') MACRO SQL('OPTIONSDATE(ISO)')) y tanto el preprocesador MACRO como SQL se invocarían dos veces.Si hace esto en un intento por anular las opciones SQL anteriores, es mejor noespecificar las opciones del preprocesador en la opción PP, sino especificarlasmediante la opción PPSQL, es decir, especificar PP(MACRO SQL)PPSQL('OPTIONS DATE(ISO)').

Puede especificar un máximo de 31 preprocesadores.

Ejemplos:

El siguiente ejemplo invoca el recurso de macros PL/I, el preprocesador SQL y elrecurso de macros PL/I una segunda vez.

pp(macro(’x’) sql(’dbname(sample)’) macro)

Opciones de tiempo de compilación

104 PL/I for WindowsGuía de programación

Page 127: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PPCICSLa opción PPCICS especifica las opciones que se van a pasar al preprocesadorCICS si se invoca.

��NOPPCICS

PPCICS ( ‘ options string ’ ) ��

Así que, especificar PPCICS('EDF') PP(CICS) es lo mismo que especificarPP(CICS('EDF')).

Esta opción no tiene efecto a no ser que se especifique la opción PP(CICS). Sinembargo, si quiere especificar un conjunto de opciones del preprocesador CICS quedeberían utilizarse al invocar el preprocesador CICS, puede especificar esta opciónen la salida de opciones de la instalación. Siempre que especifique PP(CICS), seutilizará el conjunto de opciones especificado en la opción PPCICS.

Además, cualquier opción especificada cuando se invoca el preprocesador invalidaa las especificadas en la opción PPCICS. Por tanto, especificar PPCICS('EDF')PP(CICS('NOEDF')) es lo mismo que especificar PP(CICS('EDF NOEDF')) odirectamente PP(CICS('NOEDF')).

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 105

Page 128: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PPINCLUDELa opción PPINCLUDE especifica las opciones que se van a pasar al preprocesadorINCLUDE si se invoca.

��NOPPINCLUDE

PPINCLUDE ( ‘ options string ’ ) ��

Así que, especificar PPINCLUDE('ID(-inc)') PP(INCLUDE) es lo mismo queespecificar PP(INCLUDE('ID(-inc)')).

Esta opción no tiene efecto a no ser que se especifique la opción PP(INCLUDE).Sin embargo, si quiere especificar un conjunto de opciones del preprocesadorINCLUDE que deberían utilizarse al invocar el preprocesador INCLUDE, puedeespecificar esta opción en la salida de opciones de la instalación. Siempre queespecifique PP(INCLUDE), se utilizará el conjunto de opciones especificado en laopción PPINCLUDE.

Además, cualquier opción especificada cuando se invoca el preprocesador invalidaa las especificadas en la opción PPINCLUDE. Por tanto, especificarPPINCLUDE('ID(-inc)') PP(INCLUDE('ID(+include)')) es lo mismo que especificarPP(INCLUDE('ID(-inc) ID(+include)')) o directamentePP(INCLUDE('ID(+include)')).

Opciones de tiempo de compilación

106 PL/I for WindowsGuía de programación

Page 129: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PPLISTLa opción PPLIST controla si el compilador mantiene o borra la parte del listadogenerado por cada fase del preprocesador.

�� PPLIST (KEEPERASE ) ��

Cuando especifica PPLIST(KEEP), el compilador conserva la parte del listado quegenera cada fase del preprocesador.

Cuando especifica PPLIST(ERASE), el compilador borra la parte del listadogenerada por cualquier fase del preprocesador que no produzca mensajes.

El compilador no cuenta los mensajes eliminados por las opciones EXIT y FLAG.Por lo tanto, especificar FLAG(W) y PPLIST(ERASE) hace que el compiladorelimine todas las salidas de cualquier preprocesador que no produzca mensajes deaviso, de error o de error grave.

PPLIST(KEEP) es el valor predeterminado.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 107

Page 130: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PPMACROLa opción PPMACRO especifica las opciones que se van a pasar al preprocesadorMACRO si se invoca.

��NOPPMACRO

PPMACRO ( ‘ options string ’ ) ��

Así que, especificar PPMACRO('CASE(ASIS)') PP(MACRO) es lo mismo queespecificar PP(MACRO('CASE(ASIS)')).

Esta opción no tiene efecto a no ser que se especifique la opción PP(MACRO). Sinembargo, si quiere especificar un conjunto de opciones del preprocesador MACROque deberían utilizarse al invocar el preprocesador MACRO, puede especificar estaopción en la salida de opciones de la instalación. Siempre que especifique lasopciones MACRO o PP(MACRO), se utilizará el conjunto de opciones especificadoen la opción PPMACRO.

Además, cualquier opción especificada cuando se invoca el preprocesador invalidaa las especificadas en la opción PPMACRO. Por tanto, especificarPPMACRO('CASE(ASIS)') PP(MACRO('CASE(UPPER)')) es lo mismo queespecificar PP(MACRO('CASE(ASIS) CASE(UPPER)')) o directamentePP(MACRO('CASE(UPPER)')).

Opciones de tiempo de compilación

108 PL/I for WindowsGuía de programación

Page 131: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PPSQLLa opción PPSQL especifica las opciones que se van a pasar al preprocesador SQLsi se invoca.

��NOPPSQL

PPSQL ( ‘ options string ’ ) ��

Así que, especificar PPSQL('ONEPASS') PP(SQL) es lo mismo que especificarPP(SQL('ONEPASS')).

Esta opción no tiene efecto a no ser que se especifique la opción PP(SQL). Sinembargo, si quiere especificar un conjunto de opciones del preprocesador SQL quedeberían utilizarse al invocar el preprocesador SQL, puede especificar esta opciónen la salida de opciones de la instalación. Siempre que especifique PP(SQL), seutilizará el conjunto de opciones especificado en la opción PPSQL.

Además, cualquier opción especificada cuando se invoca el preprocesador invalidaa las especificadas en la opción PPSQL. Por tanto, especificar PPSQL('ONEPASS')PP(SQL('TWOPASS')) es lo mismo que especificar PP(SQL('ONEPASS TWOPASS'))o directamente PP(SQL('TWOPASS')).

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 109

Page 132: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PPTRACEEsta opción especifica que cuando se escribe un archivo DECK para unpreprocesador, cada línea que no esté en blanco en ese archivo va precedida deuna línea con la directiva %LINE. La directiva indica que el archivo de origenoriginal y la línea a la que debe atribuirse la línea que no está en blanco.

��NOPPTRACEPPTRACE ��

PPTRACE debería utilizarse únicamente con preprocesadores distintos a losintegrados en el compilador PL/I.

Opciones de tiempo de compilación

110 PL/I for WindowsGuía de programación

Page 133: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PRECTYPELa opción PRECTYPE determina cómo deriva el compilador los atributos de lasfunciones incorporadas MULTIPLY, DIVIDE, ADD y SUBTRACT cuando losoperandos son FIXED y al menos uno es FIXED BIN.

��ANS

PRECTYPE ( DECDIGIT )DECRESULT

��

ANSCon PRECTYPE(ANS), el valor p de BIF(x,y,p) y en BIF(x, y, p, 0) se interpretacomo si especificase un número binario de dígitos, la operación se realiza comouna operación binaria y el resultado tiene los atributos FIXED BIN(p,0).

Sin embargo, en BIF(x, y, p, q) si q no es cero, la operación se llevará a cabocomo una operación decimal y el resultado tendrá los atributos FIXEDDEC(t,u) donde t y u son equivalentes decimales de p y q, concretamente t = 1+ ceil(p / 3.32) y u = ceil(q / 3.32). En este caso, x, y, p y q se convierten adecimales ( a diferencia de la siguiente subopción que solo convierte "x" y "y" adecimal y lo hace incluso su "q" es cero). En esta situación el compiladoremitirá el mensaje informativo 1BM1053.

DECDIGITCon PRECTYPE(DECDIGIT), el valor p de BIF(x,y,p) y en BIF(x, y, p, 0) seinterpreta como si especificase un número decimal de dígitos, la operación serealiza como una operación binaria y el resultado tiene los atributos FIXEDBIN(s), siendo s el equivalente binario correspondiente a p (concretamente s =ceil(3.32*p)). Para una instancia de BIF(x, y, p, q) donde q no es cero, elresultado con PRECTYPE(DECDIGIT) es el mismo que de describe acontinuación con PRECTYPE(DECRESULT).

DECRESULTCon PRECTYPE(DECRESULT), el valor p de BIF(x,y,p) y los valores "p" y "q"de BIF(x,y,p,q) se interpretan como si especificasen un número decimal dedígitos, la operación se realiza como una operación decimal y el resultado tienelos atributos FIXED DEC(p,0) o FIXED DEC(p,q) respectivamente. El resultadoes el mismo que el que se produciría si la función incorporada DECIMAL seaplicase a "x" e "y".

PRECTYPE(ANS) es el valor predeterminado.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 111

Page 134: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PREFIXEsta opción habilita o inhabilita las condiciones PL/I especificadas en la unidad decompilación que se va a compilar sin que tenga que modificar el programa fuente.Los prefijos de condición especificados se colocan de forma lógica al inicio de laprimera sentencia PACKAGE o PROCEDURE.

�� PREFIX (

,

condition

) ��

conditionCualquier condición que pueda habilitarse/inhabilitarse en un programa PL/Ital y como se explica en Referencia de lenguaje PL/I.

El uso de la opción PREFIX con una varias de las condiciones de extracción (SIZE,STRINGRANGE, STRINGSIZE y SUBSCRIPTRANGE) puede aumentarsignificativamente el tiempo y el espacio necesarios para la compilación.

PREDETERMINADO: PREFIX(CONVERSION FIXEDOVERFLOW INVALIDOPOVERFLOW NOSIZE NOSTRINGRANGE NOSTRINGSIZENOSUBSCRIPTRANGE UNDERFLOW ZERODIVIDE)

Ejemplos:

Dado el siguiente código fuente:(stringsize):

name: proc options (reentrant reorder);end;

La opción prefix (size nounderflow) cambia de forma lógica el programa a losiguiente:

(size nounderflow):(stringsize):

name: proc options (reentrant reorder);end;

Opciones de tiempo de compilación

112 PL/I for WindowsGuía de programación

Page 135: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PROBEEsta opción controla la generación de analizadores de pila, que son instruccionesadicionales generadas por el compilador siempre que la pila se pueda ampliar enmás de 2000 bytes. Este código adicional provoca una excepción de protección sino hay suficiente almacenamiento disponible en la pila.

��PROBENOPROBE ��

PROBEEspecifica que se generan analizadores de pila.

NOPROBENo se generan analizadores de pila.

Un programa que requiere un almacenamiento automático considerable, pero estáenlazado a un tamaño de pila insuficiente, produce excepciones y podría entrar enun bucle infinito a no ser que generes analizadores de pila. La presencia deanalizadores de pila reduce el rendimiento en programas que no son multihebra yestán correctamente enlazados.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 113

Page 136: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PROCEEDEsta opción determina si el proceso (mediante un preprocesador o el compilador)continúa o no dependiendo de la gravedad de los mensajes enviados por lospreprocesadores anteriores.

��S

NOPROCEED ( E )W

PROCEED

��

ABREVIATURAS: PRO, NPRO

PROCEEDLa invocación de los preprocesadores y el compilador continúa a pesar de losmensajes enviados por preprocesadores antes de esta fase.

NOPROCEED(S)La invocación de los preprocesadores y el compilador no continúa si se detectaun error grave o irrecuperable es esta etapa de preprocesamiento.

NOPROCEED(E)La invocación de los preprocesadores y el compilador no continúa si se detectaun error, un error grave o un error irrecuperable es esta etapa depreprocesamiento.

NOPROCEED(W)La invocación de los preprocesadores y el compilador no continúa si se detectaun aviso, un error, un error grave o un error irrecuperable es esta etapa depreprocesamiento.

Opciones de tiempo de compilación

114 PL/I for WindowsGuía de programación

Page 137: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PROCESSLa opción PROCESS determina si las sentencias *PROCESS están permitidas y, si loestán, se escriben en el archivo MDECK.

��

PROCESSDELETE

( KEEP )

NOPROCESS��

Con la opción NOPROCESS, el compilador señala cualquier sentencia *PROCESScon un mensaje de nivel E.

Con la opción PROCESS(KEEP), el compilador no señalará las sentencias*PROCESS, y el compilador conservará las sentencias *PROCESS de la salidaMDECK.

Con la opción PROCESS(DELETE), el compilador no señalará las sentencias*PROCESS, pero el compilador no conservará las sentencias *PROCESS de la salidaMDECK.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 115

Page 138: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

QUOTELa opción QUOTE especifica un símbolo alternativo que puede utilizarse como elcarácter de comillas.

��"

QUOTE ( ' char ' ) ��

Nota: No codifique ninguna espacio en blanco entre las comillas.

El punto de código predeterminado suministrado por IBM para el símbolo QUOTEes '"'.

charUn único carácter SBCS.

No puede especificar ningún carácter alfabético, dígitos ni caracteres especialesdefinidos en referencia de lenguaje PL/I, excepto el símbolo QUOTE estándar (").

Tiene que especificar un carácter válido.

La opción QUOTE se ignora si también se especifica la función GRAPHIC.

Opciones de tiempo de compilación

116 PL/I for WindowsGuía de programación

Page 139: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

REDUCELa opción REDUCE especifica que el compilador tiene permiso para reducir unaasignación de serie vacía a una estructura en operaciones más sencillas, incluso sieso implica que los bytes de relleno se puedan sobreescribir.

��REDUCENOREDUCE ��

La opción NOREDUCE especifica que el compilador tiene que descomponer unaasignación de serie vacía a una estructura en una serie de asignaciones de serievacía a los miembros base de la estructura.

Cuando se especifica la opción NOREDUCE, las asignaciones BY NAME quepueden reducirse a movimientos de agregados no se reducen si los elementos quese moverían juntos tienen los atributos AREA o VARYING o VARYINGZ.

La opción REDUCE hace que se creen menos líneas de código para una asignaciónde serie vacía a una estructura, y eso suele significar que la compilación es másrápida y el código se ejecuta con mayor velocidad. Sin embargo, los bytes derelleno se han reducido a cero.

Por ejemplo, en la estructura siguiente, hay un byte de relleno entre field12 yfield13.

dcl1 sample ext,

5 field10 bin fixed(31),5 field11 bin fixed(15),5 field12 bit(8),5 field13 bin fixed(31);

Tenga en cuenta ahora la asignación sample = ’’;

Con la opción NOREDUCE se generan cuatro asignaciones y el byte de rellenopermanece invariable.

Con REDUCE, sin embargo, la asignación se reduce a una operación pero el bytede relleno desaparece.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 117

Page 140: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

RESEXPLa opción RESEXP especifica que el compilador tiene permiso para evaluar todaslas expresiones restringidas en tiempo de compilación, incluso si esto puedeprovocar que se lance una condición y la compilación termine con un mensaje denivel S.

��RESEXPNORESEXP ��

Con la opción del compilador NORESEXP, el compilador evaluará todas lasexpresiones restringidas que se produzcan en declaraciones, incluso las cláusulasde valor INITIAL.

Por ejemplo, con la opción NORESEXP, el compilador no señalaría la siguientesentencia (y se lanzaría la excepción ZERODIVIDE en tiempo de ejecución)if preconditions_not_met then

x = 1 / 0;

Opciones de tiempo de compilación

118 PL/I for WindowsGuía de programación

Page 141: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

RESPECTHace que el compilador cumpla todas las especificaciones del atributo DATE yaplique el atributo DATE al resultado de la función incorporada DATE.

�� RESPECT ( )DATE

��

Utilizar los valores predeterminados hace que el compilador ignore cualquierespecificación del atributo DATE y que el atributo DATE, por tanto, no se apliqueal resultado de la función incorporada DATE.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 119

Page 142: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

RULESEsta opción permite o rechaza determinadas capacidades de lenguaje y le permiteescoger la semántica cuando hay alternativas disponibles. Puede ayudarle adiagnosticar errores de programación comunes.

Opciones de tiempo de compilación

120 PL/I for WindowsGuía de programación

Page 143: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

�� �

,IBM

REGLAS ( ANS )BYNAMENOBYNAMECONTROLLEDNOCONTROLLEDNODECSIZEDECSIZEELSEIFNOELSEIFEVENDECNOEVENDECGOTONOGOTOGLOBALDONOGLOBALDONOLAXBIFLAXBIFNOLAXCTLLAXCTLLAXDCLNOLAXDCLNOLAXDEFLAXDEFLAXENTRYNOLAXENTRY

STRICT( LOOSE )

LAXIFNOLAXIFLAXINOUTNOLAXINOUTLAXLINKNOLAXLINKLAXMARGINSNOLAXMARGINS

STRICT( XNUMERIC )

LAXNESTEDNOLAXNESTEDLAXPUNCNOLAXPUNCLAXQUALNOLAXQUAL

LOOSE( STRICT )

LAXRETURNNOLAXRETURNLAXSCALENOLAXSCALELAXSEMINOLAXSEMILAXSTGNOLAXSTGNOLAXSTRZLAXSTRZMULTICLOSENOMULTICLOSEPADDINGNOPADDINGPROCENDONLYNOPROCENDONLYRECURSIVENORECURSIVESELFASSIGNNOSELFASSIGNSTOPNOSTOPUNREF

ALLNOUNREF ( SOURCE )

��

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 121

Page 144: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

IBM o ANSbajo la subopción IBM:v Para las operaciones que requieren datos de cadena, los datos con el atributo

BINARY se convierten a BIT.v Las conversiones en comparaciones u operaciones aritméticas se producen

tal y como se describen en pre-Enterprise PL/I Language Reference.v Las conversiones para las funciones incorporadas ADD, DIVIDE, MULTIPLY

y SUBTRACT se producen tal y como se describen en pre-Enterprise PL/ILanguage Reference excepto que las operaciones especificadas como binariasfijas escaladas se evalúan como decimales fijas escaladas.

v Los factores de escala no cero están permitidos en declaraciones FIXED BIN.v Si el resultado de alguna función incorporada de manejo de precisión (ADD,

BINARY, etc.) tiene atributos FIXED BIN, el factor de escala especificado oimplícito puede ser no cero.

v Incluso si todos los argumentos de la funciones incorporadas MAX o MINson UNSIGNED FIXED BIN, los resultados son siempre SIGNED.

v Aunque añada, multiplique o divida dos operandos UNSIGNED FIXED BIN,el resultado tendrá el atributo SIGNED.

v Incluso cuando aplica las funciones incorporadas MOD o REM a dosoperandos UNSIGNED FIXED BIN, el resultado tiene el atributo SIGNED.

Con la subopción ANS:v En las operaciones que requieren datos de cadena, los datos con el atributo

BINARY se convierten a CHARACTER.v Las conversiones en comparaciones u operaciones aritméticas se producen

tal y como se describen en Referencia de lenguaje PL/I.v Las conversiones para las funciones incorporadas ADD, DIVIDE, MULTIPLY

y SUBTRACT se producen tal y como se describen en Referencia de lenguajePL/I.

v Los factores de escala no cero no están permitidos en declaraciones FIXEDBIN.

v Si el resultado de alguna función incorporada de manejo de precisión (ADD,BINARY, etc.) tiene atributos FIXED BIN, el factor de escala especificado oimplícito tiene que ser cero.

v Si todos los argumentos de la funciones incorporadas MAX o MIN sonUNSIGNED FIXED BIN, el resultado también es UNSIGNED.

v Cuando utiliza ADD, MULTIPLY o DIVIDE en dos operandos UNSIGNEDFIXED BIN, el resultado tiene el atributo UNSIGNED.

v Cuando aplica las funciones incorporadas MOD o REM a dos operandosUNSIGNED FIXED BIN, el resultado tiene el atributo UNSIGNED.

BYNAME o NOBYNAMEEspecificar NOBYNAME hace que el compilador señale todas las asignacionesBYNAME con un mensaje de nivel E.

CONTROLLED | NOCONTROLLEDEspecificar NOCONTROLLED hace que el compilador señale cualquier uso delatributo CONTROLLED.

Especificar CONTROLLED hace que el compilador no señale el uso delatributo CONTROLLED.

DECSIZE o NODECSIZEEspecificar DECSIZE hace que el compilador señale cualquier asignación de

Opciones de tiempo de compilación

122 PL/I for WindowsGuía de programación

Page 145: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

una expresión FIXED DECIMAL a una variable FIXED DECIMAL cuando lacondición SIZE está inhabilitada si la condición SIZE puede lanzarse mediantela asignación.

Especificar RULES(DECSIZE) puede hacer que el compilador produzca un grannúmero de mensajes si SIZE está inhabilitado, y cualquier sentencia de laforma X = X + 1 se señalará si X es FIXED DECIMAL.

ELSEIF o NOELSEIFEspecificar NOELSEIF hace que el compilador señale cualquier sentencia ELSEque vaya inmediatamente seguida de un sentencia IF y sugiere que se reescribacomo sentencia SELECT.

Esta sentencia puede ser útil para imponer que se utilicen las sentenciasSELECT en lugar de una serie de sentencias IF-THEN-ELSE anidadas.

EVENDEC o NOEVENDECEspecificar NOEVENDEC hace que el compilador señale cualquier declaraciónFIXED DECIMAL que especifique una precisión exacta.

GOTO|NOGOTOEspecificar NOGOTO hace que se señalen todas lascauses GOTO excepto lasque están fuera de bloques BEGIN.

LAXBIF o NOLAXBIFEspecificar LAXBIF hace que el compilador construya una declaracióncontextual para funciones incorporadas, como NULL, incluso cuando se usa sinuna lista de parámetros vacía.

GLOBALDO|NOGLOBALDOEspecificar NOGLOBALDO hace que el compilador señale todas las variablesde control de bucle DO declaradas en un bloque padre.

LAXCTL o NOLAXCTLEspecificar LAXCTL permite que se declare una variable CONTROLLED conuna extensión constante y asignarse con una extensión diferente. NOLAXCTLexige que si una variable CONTROLLED va a asignarse con una extensiónvariable, la extensión se especifique con un asterisco o como una expresión noconstante.

El siguiente código no está permitido con NOLAXCTL:dcl a bit(8) ctl;alloc a;alloc a bit(16);

Pero este código es válido con NOLAXCTL:dcl b bit(n) ctl;dcl n fixed bin(31) init(8);alloc b;alloc b bit(16);

LAXDCL o NOLAXDCLEspecificar LAXDCL permite declaraciones implícitas. NOLAXDCL anula todaslas declaraciones implícitas y contextuales excepto BUILTIN y los archivosSYYSIN y SYSPRINT.

LAXDEF o NOLAXDEFEspecificar LAXDEF permite que se acepten las llamadas definiciones nopermitidas sin mensajes del compilador (en lugar de los mensajes de nivel Eque suele producir el compilador).

LAXENTRY o NOLAXENTRYEspecificar LAXENTRY permite declaraciones de entrada si prototipo.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 123

Page 146: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Especificar NOLAXENTRY hace que el compilador señale todas lasdeclaraciones de entrada sin prototipo; es decir, todas las declaraciones ENTRYque no especifican una lista de parámetros. Tenga en cuenta que esto puedesignificar que si una ENTRY debería no tener parámetros, tendría quedeclararse como ENTRY() en lugar de ENTRY.

STRICTEspecificar RULES(NOLAXENTRY(STRICT)) hace que el compilador señaledeclaraciones de entrada sin prototipo que tienen el atributoOPTIONS(ASM).

LOOSEEspecificar RULES(NOLAXENTRY(LOOSE)) hace que el compilador noseñale declaraciones de entrada sin prototipo que tengan el atributoOPTIONS(ASM).

RULES(LAXENTRY) es el valor predeterminado.

LAXIF o NOLAXIFEspecificar RULES(NOLAXIF) hace que el compilador señale cualquier cláusulaIF, WHILE, UNTIL y WHEN que no tenga los atributos BIT(1) NONVARYING.También hace que el compilador señale las asignaciones de la forma x=y=z.

El siguiente código se señalaría con NOLAXIF:dcl i fixed bin;dcl b bit(8);...if i then ...if b then ...

LAXINOUT | NOLAXINOUTEspecificar NOLAXINOUT hace que el compilador asuma que todos losparámetros ASSIGNABLE BYADDR son parámetros de entrada (yposiblemente salida) y que emita un aviso si cree que no se ha inicializado unparámetro tal.

LAXLINK o NOLAXLINKEspecificar NOLAXLINK hace que el compilador señale cualquier asignación ocomparación entre dos variables o constantes ENTRY si alguno de loselementos siguientes no coinciden:v las listas de descripción de parámetros

Por ejemplo, si A1 se declara como ENTRY(CHAR(8)) y A2 comoENTRY(POINTER) VARIABLE, conRULES(NOLAXLINK), el compiladorseñalaría un intento de asignar A1 a A2.

v el atributo RETURNSPor ejemplo, si A3 se declara como ENTRY RETURNS(FIXED BIN(31)) y A4como ENTRY VARIABLE sin el atributo RETURNS, conRULES(NOLAXLINK), el compilador señalaría un intento de asignar A3 aA4.

v la subopción LINKAGE y otras subopciones de OPTIONSPor ejemplo, si A5 se declara como ENTRY OPTIONS(ASM) y A6 comoENTRY VARIABLE sin el atributo OPTIONS, con RULES(NOLAXLINK), elcompilador señalaría un intento de asignar A5 a A6 porque OPTIONS(ASM)en la declaración de A5 implica que A5 tiene LINKAGE(SYSTEM) mientrasque A6 tendrá LINKAGE(OPTLINK) de forma predeterminada, ya que notiene atributo OPTIONS.

Opciones de tiempo de compilación

124 PL/I for WindowsGuía de programación

Page 147: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

LAXMARGINS o NOLAXMARGINSEspecificar NOLAXMARGINS hace que el compilador señale, dependiendo delvalor de las subopciones STRICT y XNUMERIC, las líneas que contienencaracteres que no sea espacios en blanco después del margen derecho. Estopuede ser útil para detectar código, como un comentario de cierre, que se hacolado accidentalmente en el margen derecho.

Si se utilizan las opciones NOLAXMARGINS y STMT junto con uno de lospreprocesadores, cualquier sentencia que fuese a señalarse a causa de la opciónNOLAXMARGINS se declarará como sentencia cero (ya que la numeración dela sentencia se produce después de que los preprocesadores terminen, pero ladetección de texto fuera de los márgenes se produce en cuanto se lee elorigen).

STRICTCon la subopción STRICT, el compilador señala cualquier línea quecontenga caracteres que no sean espacios en blanco después del margenderecho

XNUMERICCon la subopción STRICT, el compilador señala cualquier línea quecontenga caracteres que no sean espacios en blanco después del margenderecho excepto si el margen derecho es la columna 72 y las columnas dela 73 a la 80 contienen dígitos numéricos.

LAXNESTED | NOLAXNESTEDEspecificar RULES(NOLAXNESTED) hace que el compilador señale cualquiercódigo ejecutable en un procedimiento que siga a cualquier subprocedimiento.

Especificar RULES(LAXNESTED) hace que el compilador no señale el códigoejecutable en un procedimiento que sigue a un subprocedimiento.

LAXPUNC o NOLAXPUNCEspecificar NOLAXPUNC hace que el compilador señale con un mensaje denivel E cualquier lugar en que asuma que falta puntuación.

Por ejemplo, si tenemos la sentencia "I = (1 * (2);", el compilador asume quefalta un paréntesis derecho de cierre antes del punto y coma. ConRULES(NOLAXPUNC), esta sentencia se señalaría con un mensaje de nivel E;de lo contrario se señalaría con un mensaje de nivel W.

LAXQUAL | NOLAXQUALEspecificar NOLAXQUAL(LOOSE) hace que el compilador señale cualquierreferencia a miembros de estructura que no sean del nivel 1 y no esté calificadapor puntos. Considere el ejemplo siguiente:dcl

1 a,2 b,

3 b fixed bin,3 c fixed bin;

c = 11; /* would be flagged */b.c = 13; /* would not be flagged */a.c = 17; /* would not be flagged */

Especificar NOLAXQUAL(STRICT) hace que el compilador señale cualquierreferencia a miembros de estructura que no incluyan un nombre de nivel 1.Considere el ejemplo siguiente:dcl

1 a,2 b,

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 125

Page 148: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

3 b fixed bin,3 c fixed bin;

c = 11; /* would be flagged */b.c = 13; /* would be flagged */a.c = 17; /* would not be flagged */

LAXRETURN|NOLAXRETURNEspecificar NOLAXRETURN hace que el compilador genere código para lanzaruna condición ERROR cuando se utiliza una sentencia RETURN de una deestas formas:v Una sentencia RETURN con una expresión en un procedimiento codificado

sin la opción RETURNv Una sentencia RETURN sin una expresión en un procedimiento codificado

con la opción RETURN

RULES(LAXRETURN) es el valor predeterminado.

LAXSCALE|NOLAXSCALEEspecificar NOLAXSCALE hace que el compilador señale cualquier declaraciónFIXED BIN(p,q) o FIXED DEC(p,q) en la que q < 0 o p < q.

También hace que el compilador señale ROUND(x, p) cuando p < 0.

El mensaje se envía cuando el ROUND(x, p) que se señala es diferente delenviado al señalar la declaración FIXED BIN(p, q) o FIXED DEC(p, q). Por lotanto, puede utilizar la opción EXIT para suprimir el mensaje enviado cuandose señala ROUND(x, p) y mantener el mensaje para otras declaracionescuestionables.

LAXSEMI o NOLAXSEMIEspecificar NOLAXSEMI hace que el compilador señale cualquier punto ycoma que aparezca en los comentarios.

LAXSTG o NOLAXSTGEspecificar NOLAXSTG hace que el compilador señale declaraciones en las quela variable A se declara como BASED en ADDR(B) y STG(A) > STG(B) incluso(y esta es la parte fundamental) si B es un parámetro.

El compilador señalaría este tipo de problema si B se encontrará enalmacenamientoAUTOMATIC o STATIC, pero no es así, de formapredeterminada, lo señala cuando B es un parámetro (ya que algunos usuariosdeclaran B con atributos de marcador que no describen el argumento real).Para los clientes cuyas declaraciones de parámetro y argumento coinciden (odeberían coincidir), especificar RULES(NOLAXSTG) ayuda a detectar másproblemas de almacenamiento.

LAXSTRZ o NOLAXSTRZEspecificar LAXSTRZ hace que el compilador no señale ninguna variable tipocarácter ni bit que se haya inicializado o asignado a un valor de constantedemasiado largo si los bits de más son todos cceros (o si los caracteres de másestán en blanco).

MULTICLOSE o NOMULTICLOSENOMULTICLOSE hace que el compilador señale todas las asignaciones quefuerzan el cierre de varios grupos de sentencias con un mensaje de nivel E.

PADDING|NOPADDINGEspecificar NOPADDING hace que el compilador señale todas las estructurasque contienen relleno.

Opciones de tiempo de compilación

126 PL/I for WindowsGuía de programación

Page 149: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PROCENDONLY|NOPROCENDONLYEspecificar NOPROCENDONLY hace que se señale cualquier sentencia ENDque cierre un PROCEDURE si las sentencia END no nombra el PROCEDURE,es decir, si la palabra clave END va seguida inmediatamente de un punto ycoma.

RECURSIVE | NORECURSIVEEspecificar NORECURSIVE hace que el compilador señale cualquier uso delatributo RECURSIVE o cualquier procedimiento que se llame directamente a símismo.

Especificar RECURSIVE hace que el compilador no señale el uso del atributoRECURSIVE en ningún procedimiento que se llame directamente a sí mismo.

Nota: No utilice RULES(NORECURSIVE) y DFT(RECURSIVE) a la vez.

SELFASSIGN|NOSELFASSIGNEspecificar NOSELFASSIGN hace que el compilador señale todas las sentenciasen la que el origen y el destino son el mismo.

RULES(SELFASSIGN) es el valor predeterminado.

STOP|NOSTOPEspecificar NOSTOP hace que se señalen todas las sentencias STOP y EXIT.

UNREF o NOUNREFEspecificar NOUNREF hace que el compilador señale cualquier variableAUTOMATIC de nivel 1 que no esté referenciada y que, si es una estructura ouna unión, no contenga el subelemento referenciado.

ALLEspecificar RULES(NOUNREF(ALL)) hace que el compialdor señale todaslas variables no referenciadas. Cuando se especifica NOUNREF, ALL es elvalor predeterminado.

SOURCEEspecificar RULES(NOUNREF(SOURCE)) hace que el compilador señalevariables no referenciadas que no se han declarado en un archivoINCLUDE.

Valores predeterminados: RULES (IBM BYNAME CONTROLLED NODECSIZEEVENDEC ELSEIF GOTO GLOBALDO NOLAXBIF NOLAXCTL LAXDCLNOLAXDEF LAXENTRY LAXIF LAXINOUT LAXLINK LAXNESTED LAXPUNCLAXMARGINS LAXQUAL LAXRETURN LAXSCALE LAXSEMI LAXSTGNOLAXSTRZ MULTICLOSE PADDING PROCENDONLY RECURSIVESELFASSIGN STOP UNREF)

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 127

Page 150: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

SEMÁNTICAEsta opción especifica que la ejecución de la etapa de comprobación semántica delcompilador depende de la gravedad de los mensajes emitidos antes de la etapa deprocesamiento.

��SEMÁNTICANOSEMANTIC

( S )EW

��

ABREVIATRURAS:

SEM, NSEM

SEMÁNTICAEquivalente a NOSEMANTIC(S).

NOSEMANTICEl procesamiento se detiene tras la comprobación de sintaxis. No se realizaninguna comprobación semántica.

NOSEMANTIC (S)No se realiza ninguna comprobación semántica si se detecta un error grave oirrecuperable.

NOSEMANTIC (E)No se realiza ninguna comprobación semántica si se detecta un error, un errorgrave o un error irrecuperable.

NOSEMANTIC (W)No se realiza ninguna comprobación semántica si se detecta un mensaje deaviso, un error, un error grave o un error irrecuperable.

La comprobación semántica no se realiza si se encuentran determinadas clases deerrores graves. Si el compilador no puede validar que todas las referencias seresuelvan correctamente( por ejemplo, si una función incorporada o referencia auna entrada tienen demasiados pocos argumentos), no se comprueba la idoneidadde ningún argumento de la función incorporada o la referencia de entrada.

Opciones de tiempo de compilación

128 PL/I for WindowsGuía de programación

Page 151: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

SNAPEsta opción especifica si la salida de rastreo inverso de SNAP y PLIDUMP secompleta o no si se produce una excepción.

��NOSNAPSNAP ��

SNAPLa salida de rastreo inverso de SNAP y PLIDUMP siempre incluye todas lasrutinas PL/I de la pila de llamadas. SNAP puede aumentar el tamaño yreducir el rendimiento de sus programas de forma significativa. No serecomienda en programas de producción.

NOSNAPLa salida de rastreo inverso de SNAP y PLIDUMP podría no estar completa.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 129

Page 152: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

SOSIEsta opción especifica cómo se maneja el origen que contiene caracteres DBCS dedesplazamiento a teclado estándar y de desplazamiento a teclado ideográfico.

��NOSOSISOSI ��

NOSOSICon la opción NOSOSI, estos caracteres no se manejan de forma especial.

SOSICon la opción SOSI, el compilador aceptará y procesará correctamente elorigen que contenga caracteres DBCS de desplazamiento a teclado estándar y ateclado ideográfico.

Opciones de tiempo de compilación

130 PL/I for WindowsGuía de programación

Page 153: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

SOURCELa opción SOURCE especifica que se va a crear una lista de la entrada de origenpara el compilador.

��NOSOURCESOURCE ��

ABREVIATURAS: S, NS

SOURCEEl compilador produce una lista del origen.

NOSOURCEEl compilador no produce un listado fuente.

No se realiza un listado fuente a no ser que se realice una comprobación desintaxis.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 131

Page 154: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

STATICLa opción STATIC controla si las variables INTERNAL STATIC se retienen en elmódulo de objeto incluso sin están sin referenciar.

��SHORT

STATIC ( FULL ) ��

SHORTINTERNAL STATIC se retiene en el módulo de objeto únicamente si se utiliza.

FULLAll INTERNAL STATIC con INITIAL se retiene en el módulo de objeto.

Si las variables INTERNAL STATIC se utilizan como "señuelo", tiene queespecificar la opción STATIC(FULL) para asegurarse de que estarán en el módulode objeto generado.

Opciones de tiempo de compilación

132 PL/I for WindowsGuía de programación

Page 155: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

STMTLa opción STMT especifica que las sentencias del programa fuente se van a contar.El número de sentencia se utiliza para identificar sentencias en el listado delcompilador que resultan de las opciones AGGREGATE, ATTRIBUTES, SOURCE yXREF.

��NOSTMTSTMT ��

Especificar NOSTMT implica NUMBER.

Cuando se especifica la opción STMT, el listado fuente incluye los números desentencia lógica y los números de archivo de origen.

Tenga en cuenta que la opción GOSTMT no existe. La opción GONUMBER es laúnica opción que produce información en tiempo de ejecución e identifica dóndese ha producido un error. Cuando se utiliza la opción GONUMBER, la sentencia detérmino de los mensajes de error de tiempo de ejecución hace referencia a losnúmeros utilizados por la opción del compilador NUMBER incluso si la opciónSTMT está en vigor.

NUMBER y STMT se excluyen mutuamente.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 133

Page 156: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

STORAGELa opción STORAGE manda al compilador producir como parte del listado unresumen del almacenamiento utilizado por cada procedimiento y bloque de inicio.

��NOSTORAGESTORAGE ��

ABREVIATURAS: STG, NSTG

Opciones de tiempo de compilación

134 PL/I for WindowsGuía de programación

Page 157: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

SYNTAXEsta opción especifica que la ejecución de la etapa de comprobación de sintaxis delcompilador depende de la gravedad de los mensajes emitidos antes de la etapa deprocesamiento.

��SYNTAXNOSYNTAX

( S )EW

��

ABREVIATURAS: SYN, NSYN

SYNTAXEquivalente a NOSYNTAX(S).

NOSYNTAXNo se realiza ninguna comprobación de sintaxis.

NOSYNTAX(S)No se realiza ninguna comprobación de sintaxis si se detecta un error grave oirrecuperable.

NOSYNTAX(E)No se realiza ninguna comprobación de sintaxis si se detecta un error, un errorgrave o un error irrecuperable.

NOSYNTAX(W)No se realiza ninguna comprobación de sintaxis si se detecta un mensaje deaviso, un error, un error grave o un error irrecuperable.

Si la opción NOSYNTAX termina la compilación, no se producen el listado dereferencias cruzadas, el listado de atributos, el listado fuente ni otros listados quesiguen al programa fuente.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 135

Page 158: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

SYSPARMEsta opción le permite especificar el valor de la serie que devuelve la funciónincorporada SYSPARM de las funciones de macros.

�� SYSPARM ( 'serie' ) ��

stringEsta serie puede tener hasta 64 caracteres de largo. Sin embargo, el valorpredeterminado es una serie vacía. Si decide especificar un valor de serie,consulte la nota sobre series en el paso 2 en la página 30 debajo de “Reglaspara utilizar opciones de tiempo de compilación”.

Para obtener más información sobre las funciones de macro, consulte Referencia delenguaje PL/I.

DEFAULT: SYSPARM('')

Opciones de tiempo de compilación

136 PL/I for WindowsGuía de programación

Page 159: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

SYSTEMEsta opción especifica el sistema operativo y la plataforma de hardware en la quese ejecutará el programa PL/I. También impone los parámetros que puede recibirun procedimiento MAIN.

Además, una subopción le permite explotar la plataforma de hardware en la quese va a ejecutar el código objeto.

�� SYSTEM (WINDOWS

CICSIMS

) ��

WINDOWSEspecifica que el programa se ejecuta en WINDOWS.

CICSEspecifica que el programa se ejecuta en CICS.

IMSEspecifica que el programa se ejecuta en IMS.

S486El código de objeto está diseñado para ejecutarse en una máquina que tiene unmicroprocesador 80486 o un chip compatible. El código se ejecuta en máquinascon un chip Pentium, pero no con un chip 386.

PentiumEl código de objeto está diseñado para ejecutarse en una máquina con un chipPentium. El código no se ejecuta en máquinas que no tienen un chip Pentium.

En los procedimientos MAIN compilados con SYSTEM(CICS), se asumenOPTIONS (BYVALUE) y se diagnostica PROCEDURE OPTIONS(BYADDR), si seha especificado.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 137

Page 160: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

TERMINALEsta opción determina si se muestran o no en el terminal los mensajes informativosy de diagnóstico producidos durante la compilación.

��TERMINALNOTERMINAL ��

ABREVIATURAS: TERM, NTERM

TERMINALLos mensajes se muestran en el terminal.

NOTERMINALNo se muestran mensajes del compilador informativos ni de diagnóstico en elterminal.

Opciones de tiempo de compilación

138 PL/I for WindowsGuía de programación

Page 161: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

TESTLa opción TEST especifica el nivel de capacidad de prueba generada como partedel código objeto. Le permite controlar la ubicación de ganchos de prueba paracontrolar si se genera o no la tabla de símbolos.

��NOTESTTEST ��

La opción TEST implica GONUMBER. Como la opción TEST puede incrementar eltamaño del código objeto y puede afectar al rendimiento, es posible que quieralimitar el número y la colocación de ganchos.

NOTESTSuprime la generación de toda la información de pruebas.

TESTEspecifica que la información de pruebas debería incluirse en el código objeto.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 139

Page 162: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

USAGELa opción USAGE le permite elegir la semántica IBM o ANS para funcionesincorporadas seleccionadas.

�� USAGE ( �

,SIZE

HEX ( CURRENTSIZE )IBM

ROUND ( ANS )STRICT

SUBSTR ( LOOSE )IBM

UNSPEC ( ANS )

) ��

HEX( SIZE | CURRENTSIZE )Con la subopción HEX(SIZE), cuando se aplica HEX a una serie VARYING oVARYINGZ, devolverá una serie hexadecimal que representa la cantidadmáxima de almacenamiento utilizada por la serie.

Con la subopción HEX(CURRENTSIZE), cuando se aplica HEX a una serieVARYING o VARYINGZ, devolverá una serie hexadecimal que representa lacantidad actual de almacenamiento utilizada por la serie.

ROUND( IBM | ANS )Con la subopción ROUND(IBM), se ignora el segundo argumento de la funciónincorporada ROUND si el primer argumento tiene un atributo FLOAT.

Con la subopción ROUND(ANS), la función incorporada ROUND seimplementa tal y como se describe en PL/I Language Reference.

SUBSTR( STRICT | LOOSE )Con la subopción SUBSTR(STRICT), si x tiene el tipo CHARACTER, sedevolverá una consulta de funciones incorporadas SUBSTR(x,y,z) a la seriecuya longitud sea igual a MIN( z, MAXLENGTH(x) ).

Con la subopción SUBSTR(LOOSE), la misma consulta devolvería una seriecuya longitud es z.

La subopción SUBSTR(LOOSE) puede ser útil para quienes tengas consultasSUBSTR(x,y,z) en las que x es una variable CHAR(1) BASED.

UNSPEC( IBM | ANS )Con al subopción UNSPEC(IBM), UNSPEC no puede aplicarse a una estructuray, si se aplica a una matriz, devuelve una matriz de series de bits.

Con la subopción UNSPEC(ANS), UNSPEC puede aplicarse a estructuras y,cuando se aplica a una estructura o a una matriz, UNSPEC devuelve una únicaserie de bits.

Opciones de tiempo de compilación

140 PL/I for WindowsGuía de programación

Page 163: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

WIDECHARLa opción WIDECHAR especifica el formato en el que se almacenarán los datosWIDECHAR.

�� WIDECHAR (LITTLEENDIANBIGENDIAN ) ��

BIGENDIANIndica que los datos WIDECHAR se almacenarán en formato big endian. Porejemplo, el valor WIDECHAR para el carácter UTF-16 '1' se almacenará como'0031'x.

LITTLEENDIANIndica que los datos WIDECHAR se almacenarán en formato little endian. Porejemplo, el valor WIDECHAR para el carácter UTF-16 '1' se almacenará como'3100'x.

Las constantes WX tienen que especificarse siempre en formato big endian. Por lotanto, el valor '1' debería especificarse siempre como '0031'wx, incluso si con laopción WIDECHAR(LITTLEENDIAN), se almacena como '3100'x.

DEFAULT: WIDECHAR( LITTLEENDIAN )

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 141

Page 164: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

WINDOWLa opción WINDOW define el valor para el argumento de ventana w utilizado envarias funciones incorporadas relacionadas con fechas.

�� WINDOW ( w ) ��

El valor de w es un entero sin signo que representa el inicio de una ventana fija oun entero negativo que especifica una ventana "deslizante". Por ejemplo,Window(-20) indica una ventana que empieza 20 años antes que el año en que seejecuta el programa.

PREDETERMINADO: WINDOW(1950)

Opciones de tiempo de compilación

142 PL/I for WindowsGuía de programación

Page 165: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

XINFOLa opción XINFO especifica que el compilador debería generar más archivos coninformación adicional sobre la unidad de compilación actual.

�� �

,NODEF

XINFO ( DEF )NOMSGMSGNOSYMSYMNOSYNSYNNOXMIXMINOXMLXML

��

DEFSe crea un archivo de estante lateral de definición. Este archivo recoge, para launidad de compilación:v todos los procedimientos EXTERNAL definidosv todas las variables EXTERNAL definidasv todas las rutinas y variables EXTERNAL referenciadas estáticamentev todos los módulos captados dinámicamente

Este archivo se graba en el mismo directorio que la unidad de objeto y tiene laextensión "def".

Por ejemplo, dado el programa:defs: proc;

dcl (b,c) ext entry;dcl x ext fixed bin(31) init(1729);dcl y ext fixed bin(31) reserved;call b(y);fetch c;call c;

end;

Se produciría el siguiente archivo def:EXPORTS CODE

DEFSEXPORTS DATA

XIMPORTS

BY

FETCHC

El archivo de definición se puede utilizar para crear un gráfico dedependencias o un análisis de referencia cruzada de su aplicación.

NODEFNo se crea ningún archivo de definición de estante lateral.

MSGSe genera información de mensaje para el archivo ADATA. Consulte elapéndice para obtener más información sobre el formato y el archivo ADATA.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 143

Page 166: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

El archivo ADATA se genera en el mismo directorio que el archivo de objeto ytiene una extensión "adt".

NOMSGNo se genera información de mensaje para el archivo ADATA. Si no seespecifica ni MSG ni SYM, no se genera el archivo ADATA.

SYMSe genera información de símbolo para el archivo ADATA.

El archivo ADATA se genera en el mismo directorio que el archivo de objeto ytiene una extensión "adt".

NOSYMNo se genera información de símbolo para el archivo ADATA.

SYNSe genera información de sintaxis para el archivo ADATA. Especificar la opciónXINFO(SYN) puede aumentar considerablemente la cantidad dealmacenamiento, tanto en memoria como para el archivo producido, quenecesita el compilador.

El archivo ADATA se genera en el mismo directorio que el archivo de objeto ytiene la extensión "adt".

NOSYNNo se genera información de sintaxis para el archivo ADATA.

XMISe crea un archivo de banda XMI. Este XMI está diseñado para que lo lean einterpreten otras herramientas.

Este archivo se graba en el mismo directorio que la unidad de objeto y tiene laextensión "xmi".

NOXMINo se crea un archivo de banda XMI.

XMLSe crea un archivo de banda XML. Este archivo XML incluye:v la tabla de referencia de archivos para compilaciónv la estructura de bloques del programa compiladov los mensajes generados durante la compilación

Este archivo se graba en el mismo directorio que la unidad de objeto y tiene laextensión "xml".

El archivo DTD del XML producido es:<?xml encoding="UTF-8"?>

<!ELEMENT PACKAGE ((PROCEDURE)*,(MESSAGE)*,FILEREFERNCETABLE)><!ELEMENT PROCEDURE (BLOCKFILE,BLOCKLINE,(PROCEDURE)*,(BEGINBLOCK)*)><!ELEMENT BEGINBLOCK (BLOCKFILE,BLOCKLINE,(PROCEDURE)*,(BEGINBLOCK)*)><!ELEMENT MESSAGE (MSGNUMBER,MSGLINE?,MSGFILE?,MSGTEXT)><!ELEMENT FILE (FILENUMBER,INCLUDEDFROMFILE?,INCLUDEDONLINE?,FILENAME)><!ELEMENT FILEREFERENCETABLE (FILECOUNT,FILE+)>

<!ELEMENT BLOCKFILE (#PCDATA)><!ELEMENT BLOCKLINE (#PCDATA)><!ELEMENT MSGNUMBER (#PCDATA)><!ELEMENT MSGLINE (#PCDATA)><!ELEMENT MSGFILE (#PCDATA)><!ELEMENT MSGTEXT (#PCDATA)><!ELEMENT FILECOUNT (#PCDATA)>

Opciones de tiempo de compilación

144 PL/I for WindowsGuía de programación

Page 167: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

<!ELEMENT FILENUMBER (#PCDATA)><!ELEMENT FILENAME (#PCDATA)><!ELEMENT INCLUDEFROMFILE (#PCDATA)><!ELEMENT INCLUDEDONLINE (#PCDATA)>

NOXMLNo se crea un archivo de banda XML.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 145

Page 168: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

XMLLa opción XML le permite elegir si los nombres del XML generado por la funciónincorporada XMLCHAR se escriben en mayúsculas o minúsculas

��UPPER

XML ( CASE ( ASIS ) ) ��

CASE( UPPER | ASIS )Con la subopción CASE(UPPER), los nombres del XML generado por lafunción incorporada XMLCHAR se escriben en mayúsculas.

Con la subopción CASE(ASIS), los nombres del XML generado por la funciónincorporada XMLCHAR se escribirán con el mismo tipo de letra utilizado ensus declaraciones. Tenga en cuenta que si utiliza el preprocesador MACRO sinutilizar la opción CASE(ASIS), el origen visto por el compilador tendrá todoslos nombres en mayúsculas, lo que hace que especificar la opciónXML(CASE(ASIS)) no sirva para nada.

Opciones de tiempo de compilación

146 PL/I for WindowsGuía de programación

Page 169: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

XREFLa opción XREF proporciona una tabla de referencias cruzadas de nombresutilizados en el programa junto a los números de las sentencias en las que sedeclaran o se hacen referencia en el listado del compilador.

��NOXREFXREF

FULL( SHORT )

��

ABREVIATURAS: X, NX

NOXREFIndica que el compilador no debería producir esta información como parte dellistado.

XREFEspecifica que el compilador debería realizar una lista de referencias cruzadas.

Además de una lista de referencias cruzadas, el compilador produce una listade identificadores sin referenciar. En esta lista, las variables no aparecen si sonconstantes con nombre o variables no asignables. Si algún campo de una unióno estructura está referenciado, el nombre de la unión o estructura no aparece.Los nombres de nivel 1 aparecen solo si ninguno de los miembros estáreferenciado.

Para ver un ejemplo y la descripción del contenido de una tabla de referenciascruzadas, consulte “Utilizar el listado del compilador” en la página 179. Si seespecifican XREF y ATTRIBUTES se combinan las dos listas.

Opciones de tiempo de compilación

Capítulo 3. Opciones de tiempo de compilación 147

Page 170: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

148 PL/I for WindowsGuía de programación

Page 171: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 4. Preprocesadores PL/I

El compilador PL/I le permite seleccionar uno varios de los preprocesadoresintegrados para utilizar en su programa. Puede seleccionar los preprocesadores deinclusión, la función de macros, el preprocesador SQL o el preprocesador CICS y elorden en el que quiere que se invoquen.v El preprocesador de inclusión procesa directivas INCLUDE especiales e

incorpora archivos de origen externos.v La función de macros, basada en macros y %statements (sentencias), modifica su

programa fuente.v El preprocesador SQL modifica su programa fuente y convierte sentencias EXEC

SQL en sentencias PL/I.v El preprocesador CICS modifica su programa fuente y convierte sentencias

EXEC CICS en sentencias PL/I.

Cada preprocesador soporta un número de opciones que le permiten adaptar elprocesamiento a sus necesidades. Puede definir las opciones predeterminadas decada preprocesador utilizando los atributos correspondientes en el archivo deconfiguración.

Preprocesador de inclusiónEl preprocesador de inclusión le permite incorporar archivos de origen externos ensus programas utilizando directivas de inclusión distintas a la directiva PL/I%INCLUDE.

El siguiente diagrama de sintaxis ilustra las opciones compatibles con elpreprocesador INCLUDE:

�� PP ( INCLUDE ( ' ID(<directive>) ' ) ) ��

ID Especifica el nombre de la directiva INCLUDE. Cualquier línea que empiececon esta directiva como primer conjunto de caracteres no en blanco se tratacomo una directiva INCLUDE.

La directiva especificada tiene que ir seguida de uno o varios espacios enblanco, un nombre de miembro de inclusión y ,por último, un punto y comaopcional. La sintaxis de ddname(membername) no está soportada.

En el ejemplo siguiente, la primera directiva INCLUDE es válida y la segundano:

++include payroll++include syslib(payroll)

EjemplosEl primer ejemplo hace que todas las líneas que empiezan por -INC (yposiblemente estén precedidas por espacios en blanco) se traten como directivasINCLUDE:

pp( include( ’id(-inc)’))

© Copyright IBM Corp. 1998, 2013 149

Page 172: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Este segundo ejemplo hace que todas las líneas que empiezan por ++INCLUDE (yposiblemente estén precedidas por espacios en blanco) se traten como directivasINCLUDE:

pp( include( ’id(++include)’))

Variable de entorno de opciones del preprocesador deinclusión

Puede definir las opciones predeterminadas para el preprocesador de inclusiónutilizando la variable de entorno IBM.PPINCLUDE. Consulte “IBM.PPINCLUDE”en la página 22.

Preprocesador de macrosLas macros le permiten escribir código PL/I muy utilizado de forma que seoculten los detalles de implementación y los datos manipulados, y solo semuestrelas operaciones. A diferencia de la subrutina generalizada, las macros permitengenerar únicamente el código necesario para cada uso individual.

Los recursos de preprocesamiento de macros del compilador se describen en elmanual PL/I Language Reference.

Puede invocar el preprocesador de macros especificando la opción MACRO o laopción PP(MACRO). Puede especificarPP(MACRO) sin ninguna opción o con lasopciones de la siguiente lista.

Los valores predeterminados de todas estas opciones hacen que el preprocesadorse comporte igual que el preprocesador de macros OS PL/I V2R3.

Si se especifican opciones, la lista tiene que ir entre comillas (simples, o dobles,siempre y cuando coincidan); por ejemplo, para especificar la opciónFIXED(BINARY), tiene que especificar PP(MACRO(’FIXED(BINARY)’)).

Si quiere especificar más de una opción, tiene que separarlas con comas o con unoo varios espacios en blanco. Por ejemplo, para especificar las opciones CASE(ASIS)y RESCAN(UPPER), puede especificar PP(MACRO(’CASE(ASIS)RESCAN(UPPER)’)) o PP(MACRO("CASE(ASIS),RESCAN(UPPER)")). Puedeespecificar las opciones en el orden que desee.

Opciones del preprocesador MacroEl preprocesador macro soporta las siguientes opciones:

CASEEsta opción especifica si el preprocesador tiene que convertir el texto deentrada en mayúsculas.

��UPPER

CASE ( ASIS ) ��

ASISEl texto de entrada se deja tal cual está.

UPPEREl texto de entrada se convierte a mayúsuclas.

Preprocesador de inclusión

150 PL/I for WindowsGuía de programación

Page 173: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

FIXEDEsta opción especifica la base predeterminada para variables FIXED.

��DECIMAL

FIXED ( BINARY ) ��

DECIMALLas variables FIXED tendrán los atributos REAL FIXED DEC(5).

BINARYLas variables FIXED tendrán los atributos REAL SIGNED FIXED BIN(31).

INCONLYEsta opción especifica que el preprocesador solo debe procesar sentencias%INCLUDE y %XINCLUDE. Cuando esta opción está en vigor, no puedeutilizar INCLUDE ni XINCLUDE como macro.v nombre de procedimientov etiqueta de sentenciav nombre de variable

NOINCONLYEsta opción especifica que el preprocesador debe procesar todas las sentenciasdel preprocesador y no solo las sentencias %INCLUDE y %XINCLUDE. Estaopción y la opción INCONLY se excluyen mutuamente, y por tema decompatibilidad la opción predeterminada es NOINCONLY.

NAMEPREFIXEsta opción especifica que los nombres de variables y procedimientos depreprocesador tienen que empezar con el carácter especificado.

�� NAMEPREFIX (character) ��

El carácter debería especificarse tal cual está y no ir entre comillas.

NONAMEPREFIXEsta opción especifica que los nombres de variables y procedimientos depreprocesador no tienen que empezar con ningún carácter en particular.NONAMEPREFIX es el valor predeterminado.

RESCANEsta opción especifica cómo debe tratar el preprocesador el caso de losidentificadores cuando vuelve a examinar el texto.

��ASIS

RESCAN ( UPPER ) ��

UPPERLas revisiones no distinguen entre mayúsculas y minúsculas.

ASISLas revisiones distinguen entre mayúsculas y minúsculas.

Para ver el efecto de esta opción, observe el siguiente fragmento de código%dcl eins char ext;%dcl text char ext;

%eins = ’zwei’;

Función de macros

Capítulo 4. Preprocesadores PL/I 151

Page 174: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

%text = ’EINS’;display( text );

%text = ’eins’;display( text );

Cuando se compila con PP(MACRO('RESCAN(ASIS)')), en la segunda sentenciade visualización, el valor de text se sustituye poreins, pero no se realizan mássustituciones porque con RESCAN(ASIS), eins no coincide con la variable demacro eins ya que la anterior se deja tal y como está mientras que la última secambia a mayúsculas. Por lo tanto, se generaría el siguiente texto

DISPLAY( zwei );

DISPLAY( eins );

pero cuando se compila con PP(MACRO('RESCAN(UPPER)')), en la segundasentencia de visualización, el valor detext se sustituye por eins , pero serealizan más sustituciones porque con RESCAN(UPPER), eins coincide con lavariable de macro eins ya que las dos están en mayúsculas. Por lo tanto, segeneraría el siguiente texto

DISPLAY( zwei );

DISPLAY( zwei );

En resumen, RESCAN(UPPER) no distingue entre mayúsculas y minúsculas yRESCAN(ASIS) sí.

Puede definir las opciones predeterminadas para el preprocesador de macroutilizando el mandato set IBM.PPMACRO.

Variables de entorno de las opciones de la función de macrosPuede definir las opciones predeterminadas para la función de macros utilizandola variable de entorno IBM.PPMACRO. Consulte “IBM.PPMACRO” en la página22.

Preprocesador SQLPuede utilizar sentencias SQL EXEC estáticas y dinámicas en las aplicaciones PL/I.Antes de disfrutar del soporte de EXEC SQL, tiene que instalar la base de datosuniversal DB2 de IBM (en lo sucesivo DB2) para Windows.

Los productos PL/I de la Estación de trabajo soportan la mayoría de las funcionesde DB2 y se aumentarán las funciones en las releases sucesivas. Si especificafunciones DB2 más recientes cuando utiliza un producto DB2 de nivel inferior, segeneran mensajes de aviso y las opciones más recientes se ignoran.

Consideraciones de programación y compilaciónTiene que considerar el uso de opciones específicas cuando utilice el preprocesadorSQL de PL/I. El preprocesador SQL de PL/I para Windows no soporta variablesque tienen los atributos NONNATIVE o HEXADEC.

Cuando tenga sentencias EXEC SQL en su programa fuente PL/I, utilice la opciónPP(SQL) para procesarlas:

pp(sql(’option-string’))

Función de macros

152 PL/I for WindowsGuía de programación

Page 175: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

En el ejemplo anterior, 'option-string' es una serie de caracteres entre comillas. Porejemplo, pp(sql(’dbname(Sample)’) le dice al preprocesador que trabaje con labase de datos SAMPLE.

Si utiliza sentencias EXEC SQL en su programa, tiene que especificar la bibliotecaSQL además de otras bibliotecas de enlace en el mandato de enlace, por ejemplo:

ilink myprog.obj db2api.lib

Todas las sentencias PL/I tienen que ser sintácticamente correctas, porque elpreprocesador SQL examina el origen buscando sentencias EXEC SQL, sentenciasDECLARE y sentencias que delimiten bloques de declaraciones. Si una sentencia secodifica erróneamente, podría conducir a error al preprocesador cuando busque lasentencia END de una sentencia BEGIN, DO, PACKAGE, PROCEDURE o SELECT,y eso podría impedir al preprocesador resolver las referencias de variable deentorno correctamente.

Si el origen utiliza sentencias %INCLUDE u otras sentencias macro, invoque elpreprocesador MACRO antes del preprocesador SQL.

El preprocesador soporta DBCS del mismo modo que lo hace el compilador PL/I.Cuando la opción GRAPHIC del compilador PL/I está en vigor, algunos elementosde lenguaje origen se pueden escribir utilizando caracteres DBCS y SBCS. Enconcreto, puede utilizar caracteres DBCS en el programa fuente en los siguienteslugares:v Dentro de comentariosv Como parte de etiquetas de sentencia e identificadoresv En literales G o M

Las restricciones siguientes se aplican al uso de funciones incorporadas PL/I,opciones del compilador y sentencias cuando programa y compila sentencias SQL:v Cuando las sentencias EXEC SQL se convierten a PL/I, se pueden incluir las

siguientes funciones incorporadas en el código generado. Si utiliza alguna de lasfunciones incorporadas siguientes como nombres de los elementos de lasestructuras, tiene que declararlas explícitamente como BUILTIN:– ADDR– LENGTH– MAXLENGTH– PTRVALUE– SYSNULL

v No debe utilizar funciones de tipo PL/I, como BIND(: t, p :), en sentencias EXECSQL.

v Cuando compile con el preprocesador, no debe utilizar estas opciones delcompilador:– DFT(EBCDIC)– DFT(HEXADEC)

v No utilice sentencias DECLARE STATEMENT en consultas SQL, ya que elpreprocesador PL/I siempre ignora estas sentencias.

Usuarios SQL

Tiene que tener la base de datos universal DB2 para Windows instalada e iniciadapara poder compilar un programa con sentencias EXEC SQL. Para descubrir cómo

Preprocesador SQL

Capítulo 4. Preprocesadores PL/I 153

Page 176: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

se instala DB2, consulte la guía de instalación de la base de datos para laplataforma que esté utilizando.

Puede iniciar el gestor de bases de datos introduciendo lo siguiente en el indicadorde mandatos:

db2start

Opciones del preprocesador SQLEl siguiente diagrama de sintaxis ilustra todas las opciones soportadas por elpreprocesador SQL.

�� PP ( SQL ( ' DBNAME (dbname)BLOCK ( UNAMBIG )

ALLNO

�NOBIND

BIND( bindname )

CALL_RESOLUTION ( IMMEDIATE )DEFERRED

�COLLECTION ( nombre-esquema ) CONNECT ( 1 )

2

�DATETIME ( DEF )

USAEURISOJISLOC

DBUID(userid) DBPWD(password)

NODECK

DECK�

� �

,

DEPRECATE ( STMT ( ) )EXPLAINGRANTREVOKESET_CURRENT_SQLID

Preprocesador SQL

154 PL/I for WindowsGuía de programación

Page 177: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

�DISCONNECT ( EXPLICIT )

AUTOMATICCONDITIONAL

NOINCONLY

INCONLY INSERT ( DEF )BUF

�ISOLATION ( CS )

RRRSUR

ONEPASS

TWOPASS OWNER ( id-autorización )�

�PLAN

(planname)NOPLANNOPLANSYNTAX

QUALIFIER ( nombre-calificador )�

�SQLFLAG ( MVSDB2V23 )

MVSDB2V31MVSDB2V41

SQLRULES ( DB2 )STD

�SYNCPOINT ( ONEPHASE )

TWOPHASENONE

TBQUAL ( table-qualifier-name )�

�VALIDATE ( BIND )

RUNVERSION ( version-id )

AUTO

��

Abreviaturas: DB, BLK, CRESO, DT, ISOL, ON, TW, D, ND, INS, COL, CON,DISC, SQLR, SYNC

DBNAMEEspecifica el nombre de alias o el nombre original de una base de datos. Estaopción ordena al preprocesador que procese las sentencias SQL en la base dedatos especificada. Si omite esta opción o no especifica un nombre de base dedatos, el preprocesador utiliza la base de datos predeterminada si se habilita

Preprocesador SQL

Capítulo 4. Preprocesadores PL/I 155

Page 178: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

una conexión implícita. La variable de entorno DB2DBDFT especifica la basede datos predeterminada. Encontrará más información en la documentación deDB2.

El preprocesador tiene que tener una base de dato con la que trabajar o seproducirá un error.

BLOCKEspecifica el tipo de bloqueo de registro que se va a utilizar y cómo se van atratar los cursores ambiguos. Los valores válidos para esta opción son:UNAMBIG

Se producen bloqueos para los cursores de solo lectura, aquellos que no sehan especificado como FOR UPDATE OF, no tienen sentencias estáticasDELETE WHERE CURRENT OF y no tienen sentencias dinámicas. Loscursores ambiguos pueden actualizarse.

ALLSe producen bloqueos para los cursores de solo lectura, aquellos que no sehan especificado como FOR UPDATE OF y para los que no se hanejecutado sentencias estáticas DELETE WHERE CURRENT OF. Loscursores dinámicos y ambiguos se tratan como solo lectura.

NO No se realiza ningún bloqueo en ningún cursor del paquete. Los cursoresambiguos pueden actualizarse.

BIND o NOBINDDetermina si se crea o no un archivo de enlace bindname. El archivo de enlacetiene una extensión .BND y se guarda en el directorio actual o en el directorioespecificado mediante la variable de entorno IBM_BIND. Si no especifique unnombre de enlace, se utilizará de forma predeterminada el nombre del archivode origen de entrada.

CALL_RESOLUTIONDetermina si se va a ejecutar una sentencia CALL como invocación de la APIsqleproc() en desuso o como una sentencia SQL normal. Tenga en cuenta quese emitirá SQL0204 si el precompilador no resuelve el procedimiento en unasentencia CALL con CALL_RESOLUTION IMMEDIATE.

IMMEDIATELa sentencia CALL se ejecutará como una sentencia SQL normal. Es laopción predeterminada.

DEFERREDLa sentencia CALL se ejecutará como una invocación de la API sqleproc()en desuso.

COLLECTIONespecifica una identificador de colección de 8 caracteres para el paquete.

nombre-esquemaidentificador de ocho caracteres.

No hay valor predeterminado para la opción COLLECTION. Si seespecificaCOLLECTION, tiene que proporcionarse también unnombre-esquema.

CONNECTEspecifica el tipo de CONNECT que se hace con la base de datos.

1 Especifica que un mandato CONNECT se procesa como un CONNECTtipo 1. Éste es el valor predeterminado.

Preprocesador SQL

156 PL/I for WindowsGuía de programación

Page 179: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

2 Especifica que un mandato CONNECT se procesa como un CONNECTtipo 2.

El valor de la opción predeterminada es CONNECT(1). Las siguientes series deopciones evalúan CONNECT(1): CON, CONNECT, CON() y CONNECT().

DATETIMEDetermina el formato de fecha y hora utilizado cuando se asignan los camposde fecha y hora a representaciones de serie en variables host. Las siguientesabreviaturas de tres letras son válidas para la variable location:DEF Utilice el formato fecha/hora asociado con el código de país de la base

de datos. También es la opción predeterminada si no se especificaDATETIME.

USA Estándar IBM para el formato de EE. UU.Formato de fecha: mm/dd/aaaaFormato de hora: hh:mm xM (AM o PM)

EUR Estándar IBM para el formato europeo.Formato de fecha: dd.mm.aaaaFormato de hora: hh.mm.ss

ISO Organización internacional de estándares.Formato de fecha: aaaa-mm-ddFormato de hora: hh.mm.ss

JIS Estándares industriales japoneses.Formato de fecha: aaaa-mm-ddFormato de hora: hh:mm:ss

LOC Formato local, no tiene que ser necesariamente igual que DEF

DBUID y DBPWDLe permite especificar un ID de usuario y una contraseña para los gestores debases de datos que necesitan que se proporcionen estos valores cuando seintenta realizar una conexión remota. Por ejemplo, estos valores podrían sernecesarios durante una compilación en una base de datos que reside en unservidor de Windows.

Las opciones DBUID y DBPWD pueden ir en mayúsculas o minúsculas, perolos valores de ID de usuario (longitud máxima de 8 caracteres) y contraseña(longitud máxima de 16 caracteres) distinguen entre mayúsculas y minúsculas.

El preprocesador SQL utiliza el ID de usuario y la contraseña para conectarseal gestor de bases de datos durante el proceso de compilación. Cuando laaplicación se conecta durante la ejecución, el ID de usuario y la contraseña deesa conexión tienen que proporcionarse en la sentencia EXEC SQL CONNECTdel programa.

DECK o NODECKEsta opción especifica si el origen de salida del preprocesador SQL se graba enun archivo con extensión .DEK y el archivo se coloca en el directorio actual.

DEPRECATEEsta opción indica que el preprocesador señala las sentencias especificadascomo en desuso.

STMTEspecifica un lista de sentencias que el preprocesador debería señalar comoen desuso. La lista puede estar vacía.

EXPLAINLa sentencia SQL EXPLAIN.

Preprocesador SQL

Capítulo 4. Preprocesadores PL/I 157

Page 180: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

GRANTLa sentencia SQL GRANT.

REVOKELa sentencia SQL REVOKE.

SET_CURRENT_SQLIDLa sentencia SQL SET_CURRENT_SQLID.

La opción predeterminada es: DEPRECATE(STMT())

DISCONNECTEspecifica el tipo de DISCONNECT que se realiza en la base de datos.

EXPLICITEspecifica que solo se desconectan en la confirmación las conexiones debase de datos que se han marcado explícitamente para release mediante lasentencia RELEASE. Éste es el valor predeterminado.

AUTOMATICEspecifica que todas las conexiones de base de datos se desconectan alconfirmar.

CONDITIONALEspecifica que las conexiones de base de datos que se han señalado comoRELEASE o que no tienen cursores WITH HOLD abiertos se desconectanal confirmar.

El valor de opción predeterminada es DISCONNECT(EXPLICIT). Lassiguientes series de opciones evalúan DISCONNECT(EXPLICIT): DISC,DISCONNECT, DISC(), DISCONNECT().

INCONLY o NOINCONLYDetermina si el preprocesador SQL debería procesar únicamente o nosentencias EXEC SQL INCLUDE.

Cuando se especifica INCONLY el preprocesador SQL no genera código y seamplían todas las sentencias EXEC SQL INCLUDE. Cuando se especificaINCONLY, no se pueden especificar otras opciones.

Cuando se especifica NOINCONLY, el preprocesador SQL procesa todas lassentencias y genera código. INCONLY y NOINCONLY se excluyenmutuamente, y para temas de compatibilidad, NOINCONLY es el valorpredeterminado.

INSERTSolicita que las inserciones de datos se almacenen en el búfer para aumentar elrendimiento en el servidor DB2/6000 Parallel Edition.

DEF Utilice la ejecución INSERT con VALUES estándar. Este es el valorpredeterminado.

BUF Utilice el almacenamiento intermedio cuando ejecute INSERTs conVALUES.

Nota: Esta opción solo puede utilizarse cuando se precompila en un servidorDB2 Parallel Edition. Si se utiliza INSERT en un servidor DB2 V1.x, seignora y se envía un mensaje de aviso. Si se utiliza INSERT en unservidor DB2 V2.x, se ignora, se envía un mensaje de aviso y se añade laopción al archivo de enlace.

Preprocesador SQL

158 PL/I for WindowsGuía de programación

Page 181: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ISOLATIONDetermina hasta qué punto un programa vinculado a este paquete puedeaislarse del efecto de otros programas en ejecución.CS Especifica estabilidad de cursor como nivel de aislamiento.RR Lectura repetible. Especifica lectura repetible como nivel de

aislamiento.RS Especifica estabilidad de lectura como nivel de aislamiento. La

estabilidad de lectura asegura que la ejecución de las sentencias deSQL del paquete esté aislada de otros procesos de aplicación para filasleídas y cambiadas por la aplicación.

UR Especifica lectura no confirmada como nivel de aislamiento.

ONEPASS o TWOPASSONEPASS es el valor predeterminado e indica que las variables host tienen quedeclararse antes de su uso. El uso de TWOPASS indica que las variables hostno tienen que declararse antes de su uso.

OWNERDesigna un identificador de autorización de 30 caracteres para el propietariode paquete. El propietario ha de disponer de los privilegios necesarios paraejecutar las sentencias de SQL contenidas en el paquete. Únicamente unusuario con autoridad SYSADM o DBADM puede especificar un identificadorde autorización distinto al identificación de usuario. El valor predeterminadoes el identificador de autorización primerio del proceso precompilación/enlace. SYSIBM, SYSCAT y SYSSTAT no son valores válidos para esta opción.

PLAN, NOPLAN o NOPLANSYNTAXDetermina si se crea o no un plan de acceso planname. Si no especifica unnombre de plan, se utiliza de forma predeterminada el nombre del archivo deorigen de entrada.

Si especifica NOPLANSYNTAX, no se crea ningún plan y se realiza unacomprobación de sintaxis de la sintaxis de DB2 Version 2.1.

QUALIFIERProporciona un nombre de calificador implícito de 30 caracteres para objetosno calificados incluidos en el paquete. El valor predeterminado es elidentificador de autorización del propietario, independientemente de que esespecifique el propietario de forma explícita.

SQLFLAGIdentifica e informa acerca de desviaciones de la sintaxis de lenguaje SQLespecificado en esta opción. Si no se especifica esta opción, no se invoca lafunción del señalizador. Encontrará más información en la documentación deDB2.

MVSDB2V23Las sentencias SQL se contrastan con la sintaxis de lenguaje SQL deMVS DB2 V2.3 SQL. Éste es el valor predeterminado.

MVSDB2V31Las sentencias SQL se contrastan con la sintaxis de lenguaje SQL deMVS DB2 V3.1 SQL.

MVSDB2V41Las sentencias SQL se contrastan con la sintaxis de lenguaje SQL deMVS DB2 V4.1 SQL.

SQLRULESEspecifica si las conexiones de tipo 2 tienen que procesarse según las normasde DB2 o las normas estándar (STD) basadas en ISO/ANS SQL92.

Preprocesador SQL

Capítulo 4. Preprocesadores PL/I 159

Page 182: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

DB2Permite el uso de la sentencia SQL CONNECT para cambiar la conexiónactual a otra conexión establecida (inactiva). Éste es el valorpredeterminado.

STDPermite el uso de la sentencia SQL CONNECT únicamente para estableceruna conexión nueva. SQL SET CONNECTION tiene que utilizarse parapasar a una conexión inactiva.

El valor predeterminado de la opción es SQLRULES(DB2). La siguiente seriede opciones evalúa SQLRULES(DB2): SQLR, SQLRULES, SQLR(), SQLRULES().

SYNCPOINTEspecifica el modo en que se coordinan las confirmaciones y retroaccionesentre varias bases de datos.

ONEPHASEEspecifica que no se utiliza ningún gestor de transacciones (TM) parallevar a cabo una confirmación en dos fases. Se utiliza una confirmación deuna fase para confirmar el trabajo realizado por la base de datos en variastransacciones de base de datos. Éste es el valor predeterminado.

TWOPHASEEspecifica que se necesita el TM para coordinar las confirmaciones de dosfases entre las bases de datos que soportan este protocolo.

NONEEspecifica que no se utiliza ningún gestor de transacciones (TM) parallevar a cabo una confirmación en dos fases y no impone actualizadorúnico, varios lectores. Se envía un COMMIT a cada base de datosparticipante. La aplicación es responsable de la recuperación si falla algunade las confirmaciones.

El valor predeterminado es SYNCPOINT(ONEPHASE). Las siguientes series deopciones evalúan SYNCPOINT(ONEPHASE): SYNC, SYNCPOINT, SYNC(),SYNCPOINT().

TBQUALProporciona un nombre de calificador de tabla implícito de 8 caracteres paraobjetos sin calificar incluidos en el paquete.

VALIDATEDetermina el momento en que el gestor de bases de datos comprueba laexistencia de errores de autorización y de objeto no encontrado. Se utiliza el IDde autorización del propietario del paquete para la comprobación de validez.

BINDLa validación se realiza en el tiempo de precompilación/vinculación. Si noexisten todos los objetos o no se tiene toda la autorización, se producenmensajes de error. Si se especifica sqlerror continue, se produce un archivode paquete/enlace a pesar del mensaje de error, pero las sentenciaserróneas no son ejecutables.

RUNSe intenta la validación en el tiempo de vinculación. Si existen todos losobjetos y se posee toda la autorización, no se realiza ningunacomprobación adicional en el tiempo de ejecución. Si no existen todos losobjetos, o no se posee la autorización ALL en tiempo deenlace/precompilación, se producen mensajes de aviso y el paquete se

Preprocesador SQL

160 PL/I for WindowsGuía de programación

Page 183: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

enlace correctamente, independientemente del valor de la opción sqlerrorcontinue. Sin embargo, en el tiempo de ejecución se puede volver arealizar la comprobación de autorización y la comprobación de existencia,para las sentencias de SQL que han fallado dichas comprobaciones duranteel proceso de precompilación/enlace.

VERSIONDefine el identificador de versión para un paquete. Si no se especifica, laversión de paquete será "" (la serie vacía).

version-idEspecifica un identificador de versión que es cualquier valor alfanumérico,$, #, @, _, -, o ., de hasta 64 caracteres de longitud.

AUTOEl identificador de versión se generará a partir de la señal de consistencia.Si la señal de consistencia es una indicación de fecha y hora (lo será si nose especifica la opción LEVEL), la indicación de fecha y hora se convertiráa formato de caracteres ISO y se utilizará como identificador de versión.

Variable de entorno de opciones del preprocesador SQLPuede definir las opciones predeterminadas para el preprocesador SQL utilizandola variable de entorno IBM.PPSQL. Consulte “IBM.PPSQL” en la página 23.

Variables de entorno BIND del preprocesador SQLSi se especifica la opción BIND, el preprocesador SQL crea un archivo de enlace enel directorio actual para el programa que va a compilar. Puede modificar el destinodel archivo de salida configurando la variable de entorno IBM.BIND, por ejemplo:

set ibm.bind=C:\bindlib

El archivo de salida de enlace SQL tiene el mismo nombre que el archivo deentrada primario, a no ser que se especifique lo contrario, y una extensión BND.

Codificar sentencias SQL en aplicaciones PL/IPuede codificar sentencias SQL en sus aplicaciones PL/I utilizando el lenguajedefinido en Referencia SQL, Volumen 1 y Volumen 2. En las siguientes secciones sedescriben requisitos específicos para su código SQL.

Definir el área de comunicación SQLUn programa PL/I que contiene sentencias SQL tiene que incluir un área decomunicación SQL (SQLCA). Tal y como se muestra en Figura 1 en la página 162,parte de una SQLCA consta de una variable SQLCODE y una variable SQLSTATE.v El valor SQLCODE lo define el gestor de base de datos después de que se

ejecute cada sentencia SQL. Una aplicación puede comprobar el valor SQLCODEpara determinar si la última sentencia SQL se realizó correctamente.

v La variable SQLSTATE puede utilizarse como alternativa a la variable SQLCODEcuando se analizar el resultado de una sentencia SQL. Al igual que la variableSQLCODE, la variable SQLSTATE la define el gestor de base de datos despuésde ejecutar cada sentencia SQL.

La sentencia SQLCA debería incluirse utilizando la sentencia SQL INCLUDE:exec sql include sqlca;

La sentencia SQLCA no debe definirse en una sección de declaración SQL. Elámbito de las variables SQLCODE y SQLSTATE tiene que incluir el ámbito de

Preprocesador SQL

Capítulo 4. Preprocesadores PL/I 161

Page 184: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

todas las sentencias SQL del programa.

Definir áreas de descriptor SQLLas siguientes sentencias necesitan un SQLDA:

PREPARE statement-name INTO descriptor-name FROM host-variableEXECUTE...USING DESCRIPTOR descriptor-nameFETCH...USING DESCRIPTOR descriptor-nameOPEN...USING DESCRIPTOR descriptor-nameDESCRIBE statement-name INTO descriptor-name

A diferencia de SQLCA, puede haber más de un SQLDA en un programa, y unSQLDA puede tener cualquier nombre válido. Tiene que incluirse un área dedescriptor SQL utilizando la sentencia SQL INCLUDE:exec sql include sqlda;

No debe definirse el SQLDA en una sección de declaración SQL.

Incrustar sentencias SQLLa primera sentencia de su programa PL/I tiene que ser una sentenciaPROCEDURE o PACKAGE. Puede añadir sentencias SQL a su programa en

Dcl1 Sqlca,

2 sqlcaid char(8), /* Eyecatcher = ’SQLCA ’*/2 sqlcabc fixed binary(31), /* SQLCA size in bytes = 136 */2 sqlcode fixed binary(31), /* SQL return code */2 sqlerrm char(70) var, /* Error message tokens */2 sqlerrp char(8), /* Diagnostic information */2 sqlerrd(6) fixed binary(31), /* Diagnostic information */2 sqlwarn, /* Warning flags */

3 sqlwarn0 char(1),3 sqlwarn1 char(1),3 sqlwarn2 char(1),3 sqlwarn3 char(1),3 sqlwarn4 char(1),3 sqlwarn5 char(1),3 sqlwarn6 char(1),3 sqlwarn7 char(1),

2 sqlext,3 sqlwarn8 char(1),3 sqlwarn9 char(1),3 sqlwarna char(1),3 sqlstate char(5); /* State corresponding to SQLCODE */

Figura 1. La declaración PL/I de SQLCA

Dcl1 Sqlda based(Sqldaptr),

2 sqldaid char(8), /* Eye catcher = ’SQLDA ’ */2 sqldabc fixed binary(31), /* SQLDA size in bytes=16+44*SQLN*/2 sqln fixed binary(15), /* Number of SQLVAR elements*/2 sqld fixed binary(15), /* # of used SQLVAR elements*/2 sqlvar(Sqlsize refer(sqln)), /* Variable Description */

3 sqltype fixed binary(15), /* Variable data type */3 sqllen fixed binary(15), /* Variable data length */3 sqldata pointer, /* Pointer to variable data value*/3 sqlind pointer, /* Pointer to Null indicator*/3 sqlname char(30) var ; /* Variable Name */

dcl Sqlsize fixed binary(15); /* number of sqlvars (sqln) */dcl Sqldaptr pointer;

Figura 2. La declaración PL/I de un área de descriptor SQL

Preprocesador SQL

162 PL/I for WindowsGuía de programación

Page 185: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

cualquier parte en la que pueda aparecer una sentencia ejecutable. Cada sentenciaSQL tiene que comenzar con EXEC (o EXECUTE) SQL y terminar con un punto ycoma (;).

Por ejemplo, una sentencia UPDATE podría codificarse de la siguiente manera:exec sql update Department

export Mgrno = :Mgr_Numwhere Deptno = :Int_Dept;

Comentarios

Además de sentencias SQL, pueden incluirse comentarios PL/I en sentencias SQLincrustadas en cualquier sitio donde se permita un espacio en blanco.

Los comentarios de estilo SQL ('--') son compatibles cuando se incrustan ensentencias SQL.

Continuación de sentencias SQL

Las reglas de continuación de líneas para sentencias SQL son las mismas que paraotras sentencias PL/I.

Incluir código

Las sentencias SQL o las sentencias de declaración de variable de host PL/Ipueden incluirse colocando la siguiente sentencia SQL en el punto del códigofuente en el que se van a incrustar las sentencias:

exec sql include member;

Márgenes

Las sentencias SQL tienen que codificarse en columnas m o n estando m y nespecificadas en la opción de tiempo de compilación MARGINS(m,n).

Nombres

Cualquier nombre de variable PL/I válido se puede utilizar como variable de hosty está sujeto a las siguientes restricciones: No utilice nombres de variables de host,nombres de entradas externas o nombres de plan de acceso que empiecen por'SQL', 'DSN' o 'IBM'. Estos nombres están reservados para el gestor de base dedatos o PL/I. La longitud de un nombre de variable de host no debe superar los100 caracteres.

Etiquetas de sentencia

Con la excepción de la sentencia END DECLARE SECTION y la sentenciaINCLUDE texto-archivo-nombre, las sentencias SQL ejecutables, como sentenciasPL/I, pueden tener un prefijo de etiqueta.

Sentencia WHENEVER

El destino de una cláusula GOTO en una sentencia SQL WHENEVER tiene que seruna etiqueta del código fuente PL/I y tiene que estar dentro del ámbito decualquier sentencia SQL afectada por una sentencia WHENEVER.

Preprocesador SQL

Capítulo 4. Preprocesadores PL/I 163

Page 186: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Utilizar variables hostTodas las variables host utilizadas en sentencias SQL tienen que estar declaradasexplícitamente, y todas las variables host dentro de una sentencia SQL tienen queir precedidas de dos puntos (:).

No se deben utilizar subíndices en las referencias de variables host.

Los siguientes temas describen los detalles del uso de variables host:v “Utilizar matrices como variables host”v “Declaración de variables del lenguaje principal”

Utilizar matrices como variables host: Puede utilizar una matriz como variablehost únicamente cuando se trata de una matriz de variables de indicación para unaestructura de lenguaje principal. Esa matriz tiene que ser de una dimensión, tenerel atributo CONNECTED y tener límites constantes.

Cualquier otro uso de matrices como variables host no es válido.

Declaración de variables del lenguaje principal: Las declaraciones de variableshost se pueden realizar en el mismo lugar que las declaraciones de variable PL/Iregulares.

Únicamente se reconoce un conjunto de declaraciones PL/I válidas comodeclaraciones de variables host válidas. El preprocesador no utiliza los valorespredeterminados del atributo de datos especificados en la sentencia PL/IDEFAULT. El preprocesador ignora las sentencias DEFINE ALIAS y DEFINESTRUCT, por lo que las variables con atributos que dependen de ellas no puedeutilizarse como variables host. Si la declaración de una variable no se reconoce,cualquier sentencia que haga referencia a la variable puede tener como resultado elmensaje:’The host variable token ID is not valid’

Para utilizar una estructura declarada con LIKE o un elemento de esta estructuracomo variable host, la declaración del objeto LIKE tiene que ser visible para elpreprocesador SQL. Por ejemplo, el objeto LIKE no puede estar en un archivo%INCLUDE que no se ha incluido.

Puede utilizar expresiones restringidas en declaraciones de variable host paradefinir los límites de una matriz o la longit ud de una serie siempre y cuando laexpresión tenga una de las formas siguientes:v Un operador de prefijo aplicado a una expresión donde la expresión puede

reducirse a un enterov Un operador add o sub aplicado a dos expresiones donde las expresiones

pueden reducirse a enterosv Un operador multiply aplicado a dos expresiones donde las expresiones pueden

reducirse a enterosv Una referencia a una constante con nombre donde la referencia puede reducirse

a un enterov Una de estas funciones incorporadas: INDICATORS, HBOUND, LENGTH y

MAXLENGTHv Un número que es un entero

El preprocesador solo utiliza los nombres y los atributos de datos de las variables;los atributos de alineación, ámbito y almacenamiento se ignoran.

Preprocesador SQL

164 PL/I for WindowsGuía de programación

Page 187: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Declarar variables host escalares: Tiene que declarar una variable host escalar conuno de los siguientes atributos de datos:

CHARACTER, GRAPHIC o WIDECHARLas variables host declaradas con los atributos CHARACTER, GRAPHIC oWIDECHAR se llaman variables host de serie. Las siguientes restriccionesse aplican a la variable host de serie:v Tiene que tener el atributo NONVARYING o VARYING.v Si tiene el atributo VARYING, tiene que tener el atributo NATIVE.

FIXED BINARY, FIXED DECIMAL o FLOATLas variables host declaradas con los atributos FIXED y BINARY, FIXED yDECIMAL, o FLOAT se denominan variables host numéricas. Lassiguientes restricciones se aplican a la variable host numérica:v Tiene que tener el atributo REAL.v Si tiene los atributos FIXED y BINARY, tiene que tener los atributos

SIGNED y NATIVE, un factor de escala cero y una precisión mayor que7.

v Si tiene los atributos FIXED y DECIMAL, tiene que tener un factor deescala no negativo menor que la precisión.

v Si tiene los atributos FLOAT y DECIMAL, tiene que tener una precisiónmenor que 17.

v Si tiene los atributos FLOAT y BINARY, tiene que tener una precisiónmenor que 54.

SQL TYPELas variables host declaradas con el atributo SQL TYPE se denominanvariables host SQL TYPE. La especificación de atributo tiene que ajustarsea uno de los siguientes diagramas:

BINARY

�� SQL TYPE IS BINARY ( longitud ) ��

VARBINARY

�� SQL TYPE IS VARBINARY ( longitud ) ��

Localizador de conjunto de resultados

�� SQL TYPE IS RESULT_SET_LOCATOR ��

ROWID

�� SQL TYPE IS ROWID ��

Localizador de tablas

�� SQL TYPE IS TABLE LIKE nombre-tabla AS LOCATOR ��

Referencia de archivo LOB

Preprocesador SQL

Capítulo 4. Preprocesadores PL/I 165

Page 188: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

�� SQL TYPE IS BLOB_FILECLOB_FILEDBCLOB_FILE

��

localizador de LOB

�� SQL TYPE IS BLOB_LOCATORCLOB_LOCATORDBCLOB_LOCATOR

��

Variable LOB

�� SQL TYPE IS BLOB ( longitud )CLOB KDBCLOB M

G

��

BLOBTambién puede utilizar BINARY LARGE OBJECT comoalternativa a BLOB.

CLOBTambién puede utilizar CHARACTER LARGE OBJECT oCHAR LARGE OBJECT como alternativa a CLOB.

Variable XML LOB

�� SQL TYPE IS XML AS BLOB ( longitud )CLOB KDBCLOB M

G

��

BLOBTambién puede utilizar BINARY LARGE OBJECT comoalternativa a BLOB.

CLOBTambién puede utilizar CHARACTER LARGE OBJECT oCHAR LARGE OBJECT como alternativa a CLOB.

Referencia de archivo XML

�� SQL TYPE IS XML AS BLOB_FILECLOB_FILEDBCLOB_FILE

��

Las siguientes declaraciones de constante se generan mediante elpreprocesador SQL. Puede utilizarlas para definir la variable de opción dearchivo cuando utilice las variables host de referencia de archivo:DCL SQL_FILE_READ FIXED BIN(31) VALUE(2);DCL SQL_FILE_CREATE FIXED BIN(31) VALUE(8);DCL SQL_FILE_OVERWRITE FIXED BIN(31) VALUE(16);DCL SQL_FILE_APPEND FIXED BIN(31) VALUE(32);

Preprocesador SQL

166 PL/I for WindowsGuía de programación

Page 189: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Determinar tipos de datos SQL y PL/I equivalentesLa SQLTYPE y SQLLEN base de variables de host se determina según la siguientetabla. Si una variable de host aparece con una variable de indicación, la SQLTYPEes la SQLTYPE base más uno.

Tabla 3. Tipos de datos SQL generados a partir de declaraciones PL/I

Tipo de datos de PL/I SQLTYPE devariable host

SQLLEN devariable host

Tipo de datos de SQL

BIN FIXED(n), n < 16 500 2 SMALLINT

BIN FIXED(n), n puede ir de16 a 31

496 4 INTEGER

DEC FIXED(p,s) 484 p (byte 1) s(byte 2)

DECIMAL(p,s)

BIN FLOAT(p), 22 ≤ p ≤ 53 480 8 FLOAT

DEC FLOAT(m), 7 ≤ m ≤ 16 480 8 FLOAT

CHAR(n), 1 ≤ n ≤ 254 452 n CHAR(n)

CHAR(n) VARYING, 1 ≤ n ≤4000

448 n VARCHAR(n)

CHAR(n) VARYING, n >4000

456 n LONG VARCHAR

GRAPHIC(n), 1 ≤ n ≤ 127 468 n GRAPHIC(n)

GRAPHIC(n) VARYING, 1 ≤n ≤ 2000

464 n VARGRAPHIC(n)

GRAPHIC(n) VARYING, n >2000

472 n LONG VARGRAPHIC

Dado que SQL no tiene tipos de datos de coma flotante de precisión ampliada oúnica, si se utiliza una variable de host de coma flotante de precisión o ampliada oúnica para insertar datos, se convierte a una temporal de compa flotante deprecisión doble y el valor de la temporal se inserta en la base de datos. Si se utilizala variable de host de coma flotante de precisión o ampliada o única pararecuperar datos, se utiliza una temporal de coma flotante de precisión doble pararecuperar datos de la base de datos y el resultado de la variable temporal se asignaa la variable de host.

La siguiente tabla se puede utilizar para determinar el tipo de datos PL/I queequivale a un tipo de datos SQL determinado.

Tabla 4. Los tipos de datos de SQL asignados a declaraciones PL/I

Tipo de datos de SQL Equivalente PL/I Notas

SMALLINT BIN FIXED(15)

INTEGER BIN FIXED(31)

DECIMAL(p,s) DEC FIXED(p) o DECFIXED(p,s)

p = precisión y s = escala; 1 ≤ p ≤ 31 y 0 ≤ s≤ p

FLOAT BIN FLOAT(p) o DECFLOAT(m)

22 ≤ p ≤ 53 7 ≤ m ≤ 16

CHAR(n) CHAR(n) 1 ≤ n ≤ 254

VARCHAR(n) CHAR(n) VAR 1 ≤ n ≤ 4000

LONG VARCHAR CHAR(n) VAR n > 4000

Preprocesador SQL

Capítulo 4. Preprocesadores PL/I 167

Page 190: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 4. Los tipos de datos de SQL asignados a declaraciones PL/I (continuación)

Tipo de datos de SQL Equivalente PL/I Notas

GRAPHIC(n) GRAPHIC(n) n es un entero positivo entre 1 y 127 quehace referencia al número de caracteres dedoble byte, no al número de bytes

VARGRAPHIC(n) GRAPHIC(n) VAR n es un entero positivo que hace referenciaal número de caracteres de doble byte, no alnúmero de bytes; 1 ≤ n ≤ 2000

LONG VARGRAPHIC GRAPHIC(n) VAR n > 2000

DATE CHAR(n) n tiene que ser al menos 10

TIME CHAR(n) n tiene que ser al menos 8

TIMESTAMP CHAR(n) n tiene que ser al menos 26

determinar la compatibilidad de tipos de datos SQL y PL/ILas variables de host de PL/I en sentencias SQL tienen que ser de un tipocompatible con las columnas que las utilizan:v Los tipos de datos numéricos son compatibles unos con otros. Una columna

SMALLINT, INTEGER, DECIMAL o FLOAT es compatible con una variable dehost PL/I de BIN FIXED(15), BIN FIXED(31), DECIMAL(p,s), BIN FLOAT(n)donde n es un valor entre 22 y 53, o DEC FLOAT(m) donde m es un valor entre7 y 16.

v Los tipos de caracteres son compatibles entre sí. Una columna CHAR oVARCHAR es compatible con una variable host de carácter de PL/I de longitudfija o variable.Los tipos de datos gráficos son compatibles entre sí. Una columna GRAPHIC oVARGRAPHIC es compatible con una variable host de carácter gráfico de PL/Ide longitud fija o variable.

v Los tipos de datos de fecha y hora son compatibles con variables host decarácter. Una columna DATE, TIME o TIMESTAMP es compatible con unavariable host de carácter de PL/I de longitud fija o variable.Cuando es necesario, el gestor de base de datos convierte automáticamente unaserie de caracteres de longitud fija en una serie de longitud variable o una seriede longitud variable en una serie de caracteres de longitud fija.

Utilizar estructuras de lenguaje principalUna estructura de lenguaje principal PL/I puede ser un nombre de estructura conmiembros que no son estructuras ni uniones. Por ejemplo:

dcl 1 A,2 B,

3 C1 char(...),3 C2 char(...);

En este ejemplo, B es el nombre de una estructura de lenguaje principal que constade los escalares C1 y C2.

Las estructuras de lenguaje principal están limitadas a dos niveles. Una estructurade lenguaje principal puede entender como una colección con nombre de variableshost.

Cada elemento de hoja de una estructura de lenguaje principal tiene que tener unode los siguientes atributos de datos de host válidos, tal y como se explica en“Declaración de variables del lenguaje principal” en la página 164:

Preprocesador SQL

168 PL/I for WindowsGuía de programación

Page 191: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v CHARACTER, GRAPHIC o WIDECHARv FIXED BIN, FIXED DEC o FLOATv SQL TYPE

Utilizar variables de indicaciónUna variable de indicación es un entero de 2 bytes (BIN FIXED(15)). En larecuperación, se utiliza una variable de indicación para si se ha asignado un valornulo a su variable host asociada. En la asignación a una columna, se utiliza unavariable de indicación negativa para indicar que debería asignarse un valor nulo.

Las variables de indicador se declaran del mismo modo que las variables host y lasdeclaraciones de las dos pueden mezclarse de la forma que resulte adecuada parael programador.

El preprocesador SQL no requiere que las matrices de indicador tengan un límiteinferior de uno.

Una variable de indicación tiene que tener el atributo REAL NATIVE SIGNEDFIXED BIN(15).

Dada la sentencia:exec sql fetch Cls_Cursor into :Cls_Cd,

:Day :Day_Ind,:Bgn :Bgn_Ind,:End :End_Ind;

La variables pueden declararse de la siguiente manera:exec sql begin declare section;dcl Cls_Cd char(7);dcl Day bin fixed(15);dcl Bgn char(8);dcl End char(8);dcl (Day_Ind, Bgn_Ind, End_Ind) bin fixed(15);exec sql end declare section;

Ejemplo de estructura de lenguaje principalEl siguiente ejemplo muestra la declaración de estructura de lenguaje principal yuna matriz indicadora seguida de una sentencia SQL que puede utilizarse pararecuperar datos en la estructura de lenguaje principal.

dcl 1 games,5 sunday,

10 opponents char(30),10 gtime char(10),10 tv char(6),10 comments char(120) var;

dcl indicator(4) fixed bin (15);

exec sqlfetch cursor_ainto :games.sunday:indicator;

Utilizar sentencias y opciones de tiempo de compilaciónEste tema describe la forma en que el preprocesador maneja sentencias y opcionesde tiempo de compilación con sentencias SQL.

Sentencia CONNECT TO: Puede utilizar una variable host para representar elnombre de base de datos al que quiere conectar su aplicación, por ejemplo:

exec sql connect to :dbase;

Preprocesador SQL

Capítulo 4. Preprocesadores PL/I 169

Page 192: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Si se especifica una variable host:v Tiene que ser un carácter o una variable de carácter.v Tiene que ir precedida de dos puntos y no debe ir seguida de una variable de

indicación.v El nombre de servidor incluido en la variable host tiene que estar justificado a la

izquierda.v Si la longitud del nombre de servidor es inferior a la longitud de la variable host

de carácter de longitud fija, tiene que rellenarse por la derecha con espacios enblanco.

dcl dbase char (10);dbase = ’SAMPLE’; /* blanks are padded automatically */exec sql connect to :dbase;

v Si se utiliza una variable host de carácter variable, es posible que el compiladorenvíe el siguiente aviso. Puede ignorar este mensaje.IBM1214I W xxx.x A dummy argument is created for argument

number 6 in entry reference SQLESTRD_API

sentencia DECLARE TABLE:

El preprocesador ignora todas las sentencias DECLARE TABLE.

sentencia DECLARE STATEMENT:

El preprocesador ignora todas las sentencias DECLARE STATEMENT.

Soporte de objetos grandes (LOB)El preprocesador reconoce los objetos binarios grandes (BLOB), los objetos decarácter grandes (CLOB) y los objetos de carácter de doble byte grandes(DBCLOB), además de los conceptor LOB LOCATORS y LOB FILES. Consulte losmanuales DB2 para obtener más información sobre este tema.

Los LOBS, CLOBS y BLOBS pueden tener 2.147.483.640 bytes de longitud (2Gigabytes - 8 bytes para sobrecarga PL/I). Los CLOBS de doble byte puede tener1.073.741.820 caracteres de longitud (1 Gigabyte - 4 caracteres para sobrecargaPL/I).

Nota: En CMPAT(V1), el tamaño de un BLOB, CLOB o DBCLOB no debe superarlos 32767 KB.

Programas de ejemplo para soporte a LOBSe proporcionan tres programas de ejemplo que muestran cómo pueden utilizarsetipos LOB en programas PL/I:

SQLLOB1.PLIMuestra cómo captar un objeto binario grande (BLOB) desde la base de datos aun archivo.

SQLLOB2A.PLIMuestra cómo utilizar variables LOCATOR para modificar un objeto grande(LOB) sin ningún movimiento de bytes hasta la asignación final de la expresión LOB.

SQLLOB2B.PLICapta el CLOB creado en SQLLOB2A.PLI en un archivo para visualizarlo.

Preprocesador SQL

170 PL/I for WindowsGuía de programación

Page 193: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Programas de ejemplo de funciones definidas por el usuarioTiene que instalar los siguientes elementos para acceder a los programas deejemplo de función definida por el usuario (UDF):v DB2 V2.1 o posteriorv Base de datos de ejemplo

Se han incluido varios programas PL/I para mostrar cómo se codifican y seutilizan las funciones definidas por el usuario. Aquí incluimos una descripción debreve de cómo utilizarlas.

El archivo UDFDLL.PLI incluye cinco funciones definidas por el usuario de ejemplo.Aunque son muy sencillas, muestran los conceptos básicos de las funcionesdefinidas por el usuario.

MyAddAñade dos enteros y devuelve el resultado en un tercer entero.

MyDivDivide dos enteros y devuelve el resultado en un tercer entero.

MyUpperSustituye todas las apariciones en minúsculas de a,e,i,o,u a mayúsculas.

MyCountImplementación simple de la función de contador utilizando anotación.

ClobUpperCambia todas las apariciones en minúscula de a,e,i,o,u de un CLOB amayúsculas y después las graba en un archivo.

Utilice el archivo de mandato bldudfdll para compilar y enlazarla en la bibliotecaudfdll.

Una vez compilada y enlazada la biblioteca udfdll, cópiela en el directorio defunción definida por el usuario de su instancia de base de datos.

Antes de que las funciones pueden utilizarse tienen que estar definidas en DB2.Esto se hace utilizando el mandato CREATE FUNCTION. El programa de ejemplo,addudf.pli, se ha proporcionado para realizar llamadas CREATE FUNCTION paracada función definida por el usuario (UDF). Las llamadas CREATE FUNCTIONtendrían un aspecto similar a este:

CREATE FUNCTION MyAdd ( INT, INT ) RETURNS INT NO SQLLANGUAGE C FENCED VARIANT NO EXTERNAL ACTION PARAMETERSTYLE DB2SQL EXTERNAL NAME ’udfdll!MyAdd’

CREATE FUNCTION MyDiv ( INT, INT ) RETURNS INT NO SQLLANGUAGE C FENCED VARIANT NO EXTERNAL ACTION PARAMETERSTYLE DB2SQL EXTERNAL NAME ’udfdll!MyDiv’

CREATE FUNCTION MyUpper ( VARCHAR(61) ) RETURNS VARCHAR(61) NO SQLLANGUAGE C FENCED VARIANT NO EXTERNAL ACTION PARAMETERSTYLE DB2SQL EXTERNAL NAME ’udfdll!MyUpper’

CREATE FUNCTION MyCount ( ) RETURNS INT NO SQLLANGUAGE C FENCED VARIANT NO EXTERNAL ACTION PARAMETERSTYLE DB2SQL EXTERNAL NAME ’udfdll!MyCount’SCRATCHPAD

CREATE FUNCTION ClobUpper ( CLOB(5K) ) RETURNS CLOB(5K) NO SQLLANGUAGE C FENCED VARIANT NO EXTERNAL ACTION PARAMETERSTYLE DB2SQL EXTERNAL NAME ’udfdll!ClobUpper’

Preprocesador SQL

Capítulo 4. Preprocesadores PL/I 171

Page 194: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Estos son solo mandatos CREATE FUNCTION de ejemplo. Consulte sus manualesde DB2 para obtener más información.

Utilice el archivo de mandato bldaddudf para compilar y enlazar el programaaddudf.pli. Una vez compilado y enlazado, ejecútelo para definir las funcionesdefinidas por el usuario en su base de datos.

Se proporcionan varios programas PL/I de muestra que llaman a las funcionesdefinidas por el usuario que ha creado y añadido a la base de datos:

UDFMYADD.PLICapta el ID y Dept de la tabla STAFF y los añade invocando a la funcióndefinida por el usuario MyAdd. Utilice el archivo de mandato bldmyadd paracompilarla y enlazarla.

UDFMYDIV.PLICapta el ID y Dept de la tabla STAFF y los divide invocando la funcióndefinida por el usuario MyDiv. Utilice el archivo de mandato bldmydiv paracompilarla y enlazarla.

UDFMYUP.PLICapta el Nombre de la tabla STAFF e invoca MyUpper para cambiar lasvocales a mayúsculas. Utilice el archivo de mandato bldmyup paracompilarla y enlazarla.

UDFMYCNT.PLICapta el ID de la tabla STAFF, produce el recuento de la llamada y divideel ID entre el recuento. Utilice el archivo de mandato bldmycnt paracompilarla y enlazarla.

UDFCLOB.PLICapta el currículum vitae del empleado '000150' y llama a ClobUpper paracambiar las vocales a mayúsculas. Utilice el archivo de mandato bldclobupara compilarla y enlazarla. Después de ejecutar este programa, busque losresultados en el archivo udfclob.txt.

Una vez compilados los programas de muestra, enlazados y definidas las UDF enDB2, los programas PL/I pueden ejecutarse desde la línea de mandatos.

Estas UDF también pueden invocarse desde la línea de mandatos de DB2 al igualque cualquier otra función incorporada de DB2. Para obtener más informaciónsobre cómo personalizar sus UDF para obtener el máximo rendimiento, consultelos manuales de DB2.

Manejar códigos de retorno de error SQLPL/I proporciona un programa de ejemplo DSNTIAR.PLI que puede utilizar paraconvertir un SQLCODE en mensajes multilínea con fines de visualización. Esteprograma PL/I ofrece la misma función que el programa DSNTIAR del sistemaprincipal DB2*.

Tiene que compilar DSNTIAR con las mismas opciones de tiempo de compilaciónDEFAULT y SYSTEM que se utilizan para compilar los programas que usanDSNTIAR.

Tiene que compilar DSNTIAR con las siguientes opciones del compilador:v DEFAULT(ASCII NATIVE LINKAGE(OPTLINK))v SYSTEM(WINDOWS)

Preprocesador SQL

172 PL/I for WindowsGuía de programación

Page 195: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

El interlocutor tiene que declarar la entrada y ajustarse a la interfaz tal y como sedescribe en las publicaciones de DB2 del sistema principal. A modo informativo, ladeclaración tiene la forma siguiente:

dcl dsntiar entry options(asm inter retcode);

Siempre se pasan tres argumentos:

arg 1Este argumento de entrada tiene que ser el SQLCA (área de comunicaciónSQL).

arg 2Este argumento de entrada/salida es una estructura con la forma:

dcl 1 Message,2 Buffer_length fixed bin(15) init(n), /* input */2 User_buffer char(n); /* output */

Tiene que rellenar el valor adecuado para n.

arg 3Este argumento de entrada es un valor FIXED BIN(31) que especifica unalongitud de registro lógica.

Consideraciones de migración y compatibilidad SQLLos compiladores de la estación de trabajo toleran la siguiente sentencia:’ EXEC SQL CONNECT :userid IDENTIFIED BY :passwd’

La sentencia anterior se convierte mediante el preprocesador SQL de PL/I y seenvía a los servicios de precompilador de base de datos como:’ EXEC SQL CONNECT’

Permite a los usuarios de VM SQL/DS compilar sus programas sin hacer cambiossignificativos.

Soporte CICSSi no especifica la opción PP(CICS), se analizan las sentencias EXEC CICS y sevalidan las referencias de variables que contengan. Si son correctas, no se envíanmensajes, siempre y cuando la opción NOCOMPILE esté en vigor. No se puedegenerar código real sin invocar al preprocesador CICS.

Puede utilizar sentencias EXEC CICS en aplicaciones PL/I que se ejecuten comotransacciones en CICS.

Puede desarrolla estas aplicaciones en CICS en Windows para ejecutarlasposteriormente en la plataforma de desarrollo particular de CICS o en sistemasCICS/ESA, CICS/MVS o CICS/VSE en S/390.

Asegúrese de que la instalación CICS añade todos los valores \OPT\... a susvariables de entorno de sistema para conseguir soporte de Windows. No esnecesario que el sistema CICS esté operativo cuando compila los programas.

Consideraciones de programación y compilaciónCuando desarrolla programas para ejecutarlos en CICS,v tiene que utilizar la opción de tiempo de compilación SYSTEM(CICS).v La opción MACRO tiene que seguir a la opción CICS de PP.

Preprocesador SQL

Capítulo 4. Preprocesadores PL/I 173

Page 196: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Si sus programas CICS incluyen archivos o utilizan macros que contienensentencias EXEC CICS, tiene que utilizar la opción de tiempo de compilaciónMACRO o la opción MACRO de PP antes de la opción CICS de la opción PP tal ycomo se muestra en el siguiente ejemplo:

pp (macro(...) cics(...) macro(...) )

Asegúrese de que se especifica INC como extensión en la opción de tiempo decompilación INCLUDE(EXT), consulte “INCLUDE” en la página 68.

La variable de entorno IBM.SYSLIB o INCLUDE tiene que especificar el directoriode archivos de inclusión, por ejemplo:

set include=d:\cicsnnn\plihdr;

Las declaraciones PL/I generadas por CICSMAP, el programa de utilidad desoporte de correlación básico (BMS), se colocan en el primer directorio especificadopor la variable de entorno. Para obtener más información, consulte “Definirvariables de entorno en tiempo de compilación” en la página 21.

La salida producida de una de las formas siguientes se escribe en la cola de datostransitoria (TDQ) CPLI:v Sentencias PUT a SYSPRINTv Mensajes escritos en el archivo MSGv Sentencias DISPLAY

La salida producida por PLIDUMP se escribe siempre en la cola de datostransitoria CPLD.

La API de la estación de trabajo CICS es compatible con programas PL/I. Tambiénse proporciona soporte para que los programas PL/I utilicen:v La interfaz de presentación externa (EPI)v La interfaz de llamada externa (ECI)v La iniciación de transacción externa (ETI)

Otras consideraciones de PL/I aplicables a S/390 CICS se aplican también a CICSen laestación de trabajo. El programa se comporta como si la opción STAEestuviera siempre en vigor. La opción NOSTAE no es compatible.

Si está desarrollando aplicaciones para ejecutar en subsistemas S/390 CICS, puedecomprobar si se producen violaciones de reentrada en los programas PL/I con laopción de tiempo de compilación DEFAULT(NONASSIGNABLE).

Por motivos de compatibilidad con CICS/ESA, CICS/MVS y CICS/VSE, asegúresede que los mandatos EXEC CICS están en mayúsculas.

Puede utilizar las opciones FETCH y RELEASE de PL/I en CICS.

Un programa CICS no puede tener más de un procedimiento conOPTIONS(MAIN).

El mandato EXEC CICS ADDRESS y otros mandatos similares que devuelven unpuntero al bloque de control CICS (como TWA COMMAREA y ACEE) podríandevolver un puntero SYSNULL() si el bloque de control no existe. (Por ejemplo,'00000000'x not 'FF000000'x) Sus programas tienen que utilizar la funciónincorporada SYSNULL para probar esos punteros.

Soporte CICS

174 PL/I for WindowsGuía de programación

Page 197: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Cada unidad de compilación PL/I procesada por el preprocesador CICS genera losiguiente:

dcl IBMMCICS_ID char(n) static init(’cics-id-and-version’);

Se indican el nombre, la versión y el nivel de release del sistema CICS para el quese ha compilado el programa.

El preprocesador CICS requiere que la opción del compilador DEFAULT(ASCIINATIVE IEEE) esté en vigor.

Tiene que tener instalado CICS para poder compilar un programa con sentenciasEXEC CICS. Para averiguar cómo instalar CICS en su estación de trabajo, consultelas instrucciones de instalación del producto.

Opciones del preprocesador CICSEl siguiente diagrama de sintaxis muestra las opciones compatibles conpreprocesador CICS.

�� PP ( CICS ( 'NOSOURCE

SOURCE

NOPRINT

PRINT

NODECK

DECK

EDF

NOEDF�

�DEBUG

NODEBUG' ) ) ��

ABREVIATURAS: S, NS, D, ND

SOURCE o NOSOURCEEspecifica si se imprime o no la entrada de origen en el preprocesador CICS.

PRINT o NOPRINTEspecifica si el código generado por el preprocesador CICS se imprime o no enlos listados fuente generados por preprocesadores posteriores o por elcompilador.

DECK o NODECKEspecifica si el origen de salida del preprocesador CICS se graba en un archivocon extensión .DEK. El archivo se encuentra en el directorio actual.

EDF o NOEDFEspecifica si el recurso de diagnóstico de ejecución (EDF) de CICS estáhabilitado para el programa PL/I. No hay ninguna ventaja de rendimiento porespecificar NOEDF, pero la opción puede resultar útil para evitar queaparezcan mandatos CICS en visualizaciones de EDF en programas bienprobados.

DEBUG o NODEBUGEspecifica si el preprocesador CICS va a pasar número de línea de programafuente a CICS para que los utilice el recurso de diagnóstico de ejecución (EDF)de CICS.

Variables de entorno de las opciones del preprocesador CICSPuede definir las opciones predeterminadas para el preprocesador CICS utilizandola variable de entorno IBM.PPCICS. Consulte “IBM.PPCICS” en la página 23.

Soporte CICS

Capítulo 4. Preprocesadores PL/I 175

Page 198: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Codificar sentencias CICS en aplicaciones PL/IPuede codificar sentencias CICS en sus aplicaciones PL/I utilizando el lenguajedefinido en TXseries for Multiplatforms, CICS Application Programming Guide enTXSeries for Multiplatforms Information Center en publib.boulder.ibm.com/infocenter/txformp/v7r1/.

En las siguientes secciones se describen requisitos específicos para su código CICS.

Incrustar sentencias CICSLa primera sentencia de su programa PL/I tiene que ser una sentenciaPROCEDURE. Puede añadir sentencias CICS a su programa en cualquier parte enla que pueda aparecer una sentencia ejecutable. Cada sentencia CICS tiene quecomenzar con EXEC (o EXECUTE) CICS y terminar con un punto y coma (;).

Por ejemplo, una sentencia GETMAIN podría codificarse de la siguiente manera:exec cics getmain set(blk_ptr) length(stg(blk));

Comentarios

Además de sentencias CICS, pueden incluirse comentarios PL/I en sentencias CICSincrustadas en cualquier sitio donde se permita un espacio en blanco.

Continuación de sentencias CICS

Las reglas de continuación de líneas para sentencias CICS son las mismas que paraotras sentencias PL/I.

Código de inclusión

Si el código incluido contiene sentencias EXEC CICS o si su programa utilizamacros PL/I que generan sentencias EXEC CICS, tiene que utilizar una se lassiguientes opciones:v La opción de tiempo de compilación MACROv La opción MACRO de la opción PP (antes de la opción CICS de la opción PP)

Márgenes

Las sentencias CICS tienen que codificarse dentro de las columnas especificadas enla opción de tiempo de compilación MARGINS.

Etiquetas de sentencia

Las sentencias EXEC CICS, al igual que las sentencias PL/I, puede tener un prefijode etiqueta.

Escribir transacciones CICS en PL/IEn esta sección se describen las reglas y directrices que se aplican al soporte PL/Ide CICS en la estación de trabajo.

Puede utilizar PL/I con recursos CICS para escribir programas de aplicación(transacciones) para subsistemas CICS. Si lo hace, CICS proporciona recursos alprograma PL/I que normalmente proporcionaría directamente el sistemaoperativo.Estos recursos incluyen la mayoría de recursos de gestión de datos ytodos los recursos de gestión de tareas y trabajos.

Soporte CICS

176 PL/I for WindowsGuía de programación

Page 199: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tiene que seguir estas normas para garantizar la compatibilidad con el soporteS/390 PL/I CICS.v No utilice soporte de nivel de macro, solo se proporciona soporte de nivel de

mandato.v No utilice salidas ni entradas PL/I, excepto:

Salida en stream para SYSPRINTPLIDUMP

Como están pensadas para fines depurativos, no debería incluirlas en laproducción de programas por motivos de rendimiento.

v No utilice las siguientes estancias:DELAYWAIT

v No utilice las subrutinas incorporadas PLISRTx.v No haga llamadas a IMS utilizando PLITDLI, ASMTDLI o EXEC DLI.v No se comunique con FORTRAN, COBOL o C, utilizando recursos interlengua

de PL/I. Sin embargo, los programas CICS escritos en lenguajes diferentespueden comunicarse entre sí utilizando mandatos EXEC CICS LINK o XCTL.Las subrutinas escritas en un lenguaje distinto a PL/I pueden llamarseutilizando recursos interlengua de PL/I siempr ey cuando esas rutinas nocontengan código EXEC CICS. Si quiere comunicarse con un programa que no esde PL/I y contiene código EXEC CICS, tiene que utilizar EXEC CICS LINK oEXEC CICS XCTL.

Terminaciones anómalas CICS utilizadas para programas PL/IAPLS

Este final de tarea anómalo se emite en la terminación, si la terminación estáprovocada por la condición ERROR, y la condición ERROR no está provocadapor un final de tarea anómalo (distinto a ASRA).

Este es el código de terminación anómala emitido por PL/I cuando:1. Una transacción termina en error debido a una interrupción del software

PL/I (CONVERSION, por ejemplo), y no hay ninguna unidad ON ERROR2. El programa toma un retorno normal de la unidad ON ERROR.

Como el programa falló, el error tiene que reflejarse en CICS en su estación detrabajo como un final de tarea anómalo para que la restitución de transaccionesdinámicas (DTB) y demás acciones puedan llevarse a cabo si es necesario.

APLTSe ha detectado un error en la salida de usuario.

Salida de usuario de tiempo de ejecución CICSSe recomienda revisar y modificar (si es necesario) la salida de usuario CICSproporcionada por IBM, CEEFXITA. Consulte “Utilizar la salida de usuario etiempo de ejecución CICS” en la página 383.

Soporte CICS

Capítulo 4. Preprocesadores PL/I 177

Page 200: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

178 PL/I for WindowsGuía de programación

Page 201: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 5. Salida de compilación

Los resultados de la compilación dependen de los errores que haya en suprograma de origen y de las opciones de tiempo de compilación que especifique.Los resultados pueden incluir mensajes de diagnóstico, un código de retorno yotras salidas guardadas en disco (por ejemplo, un modelo de objeto y un listado).La siguiente sección describe un listado del compilador de muestra. “Archivos desalida del compilador” en la página 187 describe otras clases de archivos de salidaque puede solicitar al compilador.

Utilizar el listado del compiladorDurante la compilación, el compilador genera listados que contienen informaciónsobre el programa fuente, la compilación y el módulo de objeto. la opciónTERMINAL envía diagnósticos a su terminal. La variable de entorno IBM.PRINTespecifica el directorio de salida para archivos de listado imprimible (consulte“IBM.PRINT” en la página 23 para obtener más información sobre la variable deentorno IBM.PRINT). La siguiente descripción del listado hace referencia a suaspecto en una página impresa.

El listado del programa CHIMES resalta algunas de las partes más útiles dellistado del compilador. Figura 3 en la página 180 es similar al listado delcompilador para ese programa.

© Copyright IBM Corp. 1998, 2013 179

Page 202: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

5724-B67 IBM(R) PL/I for Windows 8.5 (Built:20120821) 2012.08.21 13:09:51 Page 1

Options Specified �1�

Environment:

Command: op

Line.File Process Statements

1.0 *PROCESS MACRO S A(F) X AG;2.0 *PROCESS NOT(’^’) OR(’|’);

Options Used �2�

ADDEXT+ AGGREGATE(DECIMAL)+ ATTRIBUTES(FULL)

BIFPREC(31)BLANK(’09’x)CASERULES( KEYWORD( MIXED ) )CHECK( NOCONFORMANCE NOSTORAGE )CMPAT(LE)CODEPAGE(00819)

NOCOMPILE(S)NOCOPYRIGHTCURRENCY(’$’)

NODBCSDEFAULT(IBM ASSIGNABLE NOINITFILL NONCONNECTED LOWERINC

DESCRIPTOR DESCLIST DUMMY(ALIGNED) ORDINAL(MIN)BYADDR RETURNS(BYVALUE) LINKAGE(OPTLINK) NORETCODENOINLINE REORDER NOOVERLAP NONRECURSIVE ALIGNED NULLSYSBIN1ARG PSEUDODUMMY NULLSTRADDR NULLSTRPTR(NULL) EVENDECSHORT(HEXADEC) ASCII IEEE NATIVE NATIVEADDR E(IEEE))

DEPRECATE(BUILTIN()ENTRY()INCLUDE()VARIABLE()STMT()

)DEPRECATENEXT(

BUILTIN()ENTRY()INCLUDE()VARIABLE()STMT()

)NODLLINITNOEXITEXTRN(SHORT)FLAG(W)FLOATINMATH(ASIS)

NOGONUMBERNOGRAPHICNOIGNOREIMPRECISEINCAFTER(PROCESS(""))

listado del compilador del programa CHIMES

Figura 3. listado del compilador del programa CHIMES

Utilizar el listado del compilador

180 PL/I for WindowsGuía de programación

Page 203: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

5724-B67 IBM(R) PL/I for Windows 2012.08.21 13:09:51 Page 2

NOINCDIRINCLUDE(EXT(’inc’ ’cpy’ ’mac’))

NOINITAUTONOINITBASEDNOINITCTLNOINITSTATICNOINSOURCELANGLVL(NOEXT)LIBS( SINGLE DYNAMIC )LIMITS( EXTNAME(100) FIXEDBIN(31,31) FIXEDDEC(15,15) NAME(100) )LINECOUNT(60)

NOLINEDIRNOLISTLISTVIEW(SOURCE)

+ MACROMARGINI(’ ’)MARGINS(2,72)MAXGEN(100000)MAXMSG(W 250)MAXNEST( BLOCK(17) DO(17) IF(17) )MAXSTMT(4096)MAXTEMP(50000)

NOMDECKMSG(*)

NOMSGSUMMARYNAMES(’@#$’ ’@#$’)NATLANG(ENU)

NONESTNOT(’^’)NUMBEROBJECT

NOOFFSETNOONSNAPOPTIMIZE(0)

+ OPTIONS(DOC)OR(’|’)

+ PP( MACRO )NOPPCICSNOPPINCLUDEPPLIST(KEEP)

NOPPMACRONOPPSQLNOPPTRACEPRECTYPE(ANS)PREFIX(CONVERSION FIXEDOVERFLOW INVALIDOP OVERFLOW

NOSIZE NOSTRINGRANGE NOSTRINGSIZE NOSUBSCRIPTRANGEUNDERFLOW ZERODIVIDE)

PROBENOPROCEED(S)PROCESS(DELETE)QUOTE(’"’)REDUCERESEXPRESPECT()RULES(IBM BYNAME CONTROLLED NODECSIZE ELSEIF EVENDEC GOTO GLOBALDO

NOLAXBIF NOLAXCTL LAXDCL NOLAXDEF LAXENTRY LAXIF LAXINOUT LAXLINKLAXMARGINS LAXNESTED LAXPUNC LAXQUAL LAXRETURN LAXSCALE LAXSEMI LAXSTGNOLAXSTRZ MULTICLOSE PADDING PROCENDONLY RECURSIVE SELFASSIGN UNREF)

5724-B67 IBM(R) PL/I for Windows 2012.08.21 13:09:51 Page 3

NOSEMANTIC(S)NOSNAPNOSOSI + SOURCESTATIC(SHORT)

NOSTMTNOSTORAGE NOSYNTAX(S)SYSPARM(’’)SYSTEM(WINDOWS)TERMINAL

NOTESTUSAGE( HEX(SIZE) ROUND(IBM) SUBSTR(STRICT) UNSPEC(IBM) )WIDECHAR(LITTLEENDIAN)WINDOW(1950)XINFO(NODEF NOXMI NOXML)XML( CASE(UPPER) )

+ XREF(FULL)

listado del compilador del programa CHIMES

Utilizar el listado del compilador

Capítulo 5. Salida de compilación 181

Page 204: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

5724-B67 IBM(R) PL/I for Windows 2012.08.21 13:09:51 Page 4

Compiler Source

Line.File

3.0 4.0 /********************************************************************/5.0 /* */6.0 /* NAME - CHIMES.PLI */7.0 /* */8.0 /* DESCRIPTION */9.0 /* Plays a tune using system API services */

10.0 /* */11.0 /* 5639-A83, 5639-A24 (C) Copyright IBM Corp. 1992,1996. */12.0 /* All Rights Reserved. */13.0 /* US Government Users Restricted Rights-- Use, duplication or */14.0 /* disclosure restricted by GSA ADP Schedule Contract with */15.0 /* IBM Corp. */16.0 /* */17.0 /* DISCLAIMER OF WARRANTIES */18.0 /* The following ’enclosed’ code is sample code created by IBM */19.0 /* Corporation. This sample code is not part of any standard */20.0 /* IBM product and is provided to you solely for the purpose of */21.0 /* assisting you in the development of your applications. La */22.0 /* code is provided "AS IS", without warranty of any kind. */23.0 /* IBM shall not be liable for any damages arising out of your */24.0 /* use of the sample code, even if IBM has been advised of the */25.0 /* possibility of such damages. */26.0 /* */27.0 /********************************************************************/28,0 29.0 CHIMES: PROC OPTIONS(MAIN); /* Play a tune using DOSBEEP tones */30.031.0 DCL ( REST VALUE( 0 ), /* Declare Named Constants */32.0 G4 VALUE( 392 ), /* for note and rest tone */33.0 C5 VALUE( 523 ), /* values and timings. */34.0 D5 VALUE( 587 ),35.0 E5 VALUE( 657 ),36.0 WHOLE VALUE( 800 ) ) FIXED BIN(31);37.038.0 DCL NOTES(19,2) STATIC NONASGN FIXED BIN(31)39.0 INIT( E5, (WHOLE/2), /* Declare tone and timing */40.0 C5, (WHOLE/2), /* for each note of tune. */41.0 D5, (WHOLE/2),42.0 G4, (WHOLE), /* Initial values may be */43.0 REST, (WHOLE/2), /* restricted expressions */44.0 G4, (WHOLE/2), /* using Named Constants */45.0 D5, (WHOLE/2), /* previously defined in */46.0 E5, (WHOLE/2), /* this program. */47.0 C5, (WHOLE),48.0 REST, (WHOLE/2),49.0 E5, (WHOLE/2),50.0 C5, (WHOLE/2),51.0 D5, (WHOLE/2),52.0 G4, (WHOLE),53.0 REST, (WHOLE/2),54.0 G4, (WHOLE/2),55.0 D5, (WHOLE/2),56.0 E5, (WHOLE/2),

listado del compilador del programa CHIMES

Utilizar el listado del compilador

182 PL/I for WindowsGuía de programación

Page 205: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

5724-B67 IBM(R) PL/I for Windows 2012.08.21 13:09:51 Page 5

Line.File

Line.File

57.0 C5, (WHOLE) );58.059.0 DCL I FIXED BIN(31);60,061.0 /* Declare external APIs called by chimes. */62.064.0 DCL BEEP ENTRY( FIXED BIN(31), FIXED BIN(31) ) /* tone, time */65.0 EXT( ’Beep’ ) /* External name of function */66.0 OPTIONS( BYVALUE /* Pass parameters by value */67.0 LINKAGE(STDCALL));68,0 69.070.0 DCL SLEEP ENTRY( FIXED BIN(31) ) /* Time duration only */71.0 EXT( ’Sleep’ )72.0 OPTIONS( BYVALUE73.0 LINKAGE(STDCALL) );88.089.0 /* Play all of the notes and rests of the tune using a do loop. */90,0 91.0 DO I = LBOUND(NOTES,1) TO HBOUND(NOTES,1);92.0 IF NOTES(I,1) ^= 0 /* Note the use of ?for logical NOT */93.0 THEN CALL BEEP( NOTES(I,1), NOTES(I,2) );94.0 ELSE CALL SLEEP( NOTES(I,2) );95.0 END;96.097.0 END;

5724-B67 IBM(R) PL/I for Windows 2012.08.21 13:09:51 Page 6

Attribute/Xref Table �4�

64.0 BEEP CONSTANT EXTERNAL(’Beep’)ENTRY( BYVALUE INONLY FIXED BIN(31,0),

BYVALUE INONLY FIXED BIN(31,0) )OPTIONS( LINKAGE ( STDCALL ) )Refs: 93.0

33.0 C5 CONSTANT FIXED BIN(31,0)Refs: 38.0 38.0 38.0 38.0

29.0 CHIMES CONSTANT EXTERNALENTRY()OPTIONS( LINKAGE ( OPTLINK ) )

34.0 D5 CONSTANT FIXED BIN(31,0)Refs: 38.0 38.0 38.0 38.0

35.0 E5 CONSTANT FIXED BIN(31,0)Refs: 38.0 38.0 38.0 38.0

32.0 G4 CONSTANT FIXED BIN(31,0)Refs: 38.0 38.0 38.0 38.0

+++++++ HBOUND BUILTINRefs: 91.0

59.0 I AUTOMATIC FIXED BIN(31,0)Refs: 92.0 93.0 93.0 94.0Sets: 91.0

+++++++ LBOUND BUILTINRefs: 91.0

38.0 NOTES STATIC NONASSIGNABLE DIM(1:19,1:2) FIXED BIN(31,0) INITIALRefs: 91.0 91.0 92.0 93.0 93.0 94.0

31.0 REST CONSTANT FIXED BIN(31,0)Refs: 38.0 38.0 38.0

70.0 SLEEP CONSTANT EXTERNAL(’Sleep’)ENTRY( BYVALUE INONLY FIXED BIN(31,0) )OPTIONS( LINKAGE ( STDCALL ) )Refs: 94.0

36.0 WHOLE CONSTANT FIXED BIN(31,0)Refs: 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0 38.0

38.0 38.0 38.0 38.0

listado del compilador del programa CHIMES

Utilizar el listado del compilador

Capítulo 5. Salida de compilación 183

Page 206: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

5724-B67 IBM(R) PL/I for Windows 2012.08.21 13:09:51 Page 7

Aggregate Length Table �5�

Line.File Dims Offset Total Size Base Size Identifier

38.0 2 0 152 4 NOTES

5724-B67 IBM(R) PL/I for Windows 2012.08.21 13:09:51 Page 8

No Compiler Messages

File Reference Table �6�

File Included From Name

0 C:\pliz\newfe\chimes.pli�3�

Component Return Code Messages (Total/Suppressed) Time �7�

MACRO 0 0 / 0 0 secsCompiler 0 0 / 0 1 secs

End of compilation of CHIMES

listado del compilador del programa CHIMES

�1� Opciones especificadasEsta sección del listado del compilador muestra las opciones en tiempo decompilación que ha especificado. Las opciones que se muestran debajo deInstall: se han especificado en la variable de entorno IBM.OPTIONS. Lasopciones que aparecen debajo deCommand: indican que estas opciones seespecificaron en la línea de mandatos al invocar el compilador (no hayopciones de mandato en este ejemplo). Las opciones especificadas con lasentencia *PROCESS o %PROCESS se muestran debajo de las opciones demandato.

�2� Opciones utilizadasEl listado del compilador incluye una lista de todas las opciones en tiempo decompilación utilizadas, incluyendo las opciones predeterminadas. Si unaopción está marcada con un signo más (+), se ha modificado el valorpredeterminado. Si alguna opción en tiempo de compilación contradice a otra,el compilador utiliza la que tenga la prioridad más alta. La siguiente listamuestra las opciones que utiliza el compilador, comenzando por la prioridadmás alta:v Opciones especificadas con la sentencia *PROCESS o %PROCESS.v Opciones especificadas cuando invoca el compilador con el mandato PLI.v Opciones de instalación instaladas durante la instalación o mediante

IBM.OPTIONS variable de entorno (consulte “IBM.OPTIONS” en la página22 para obtener más información sobre IBM.OPTIONS variable de entorno).

�3� Utilizar la opción NUMBERLos números de sentencia que se indican se generan mediante la opciónNUMBER. EN este caso, la sentencia comienza en la línea 14 del archivo 1. Latabla de referencia de archivos del final de la lista también muestra que elarchivo 1 hace referencia a D:\ibmpli\samples\chimes.pli.

Al generar estos números de sentencia durante la compilación, puede localizarlíneas que requieren edición (indicadas en los mensajes, por ejemplo) sin tenerque hacer referencia al listado.

Utilizar el listado del compilador

184 PL/I for WindowsGuía de programación

Page 207: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

�4� Tabla de referencias cruzadas y atributosSi especifica la opción ATTRIBUTES, el compilador proporciona una tabla deatributos que contiene una lista de los identificadores del programa fuentejunto a sus atributos declarados y predeterminados en la lista del compilador.El atributo FULL enumera todos los identificadores y atributos. Si especifica lasubopción SHORT para ATTRIBUTES, los atributos sin referencias no serecogen en la lista.

Si especifica la opción XREF, el compilador imprime una tabla de referenciascruzadas que contiene una lista de los identificadores del programa fuentejunto al número Line.File (el número de sentencia dentro del archivo y elnúmero de archivo, respectivamente) en el que aparecen en el listado delcompilador.

Aparece un identificador en la parte Sets: de una tabla de referencias cruzadassi:v Es el destino de una sentencia de asignación.v Se utiliza como variable de control de bucles en bucles DO.v Se utiliza en la opción SET de una sentencia ALLOCATE o LOCATE.v Se utiliza en la opción REPLY de una sentencia DISPLAY.

Si hay identificadores sin referencias, se muestran en una tabla independiente(en este ejemplo no se muestran).

Si especifica ATTRIBUTES y XREF (como en este ejemplo), se combinan las dostablas.

Las variables declaradas de forma explícita se enumeran con el número de lasentencia DECLARE en la que aparecen. Las variables declaradas de formaimplícita se indican con asteriscos y las variables declaradas contextualmente(HBOUND y LBOUND en este ejemplo) se indican con un signo más (+). (Lasvariables sin declarar también se enumeran en un mensaje de diagnóstico).

Los atributos INTERNAL y REAL no se incluyen nunca; pueden asumirse a noser que se enumeren los atributos en conflicto correspondientes, EXTERNAL yCOMPLEX.

En el caso de un identificador de archivo, siempre aparece el atributo FILE, yel atributo EXTERNAL aparece si aplica; de lo contrario, solo se enumeran losatributos declarados de forma explícita.

En el caso de una matriz, el atributo de dimensión se imprime primero. Si elvínculo de una matriz es una expresión restringida, el valor de dicha expresiónse muestra para el vínculo; de lo contrario aparece un asterisco.

Si la longitud de una cadena de bits o una cadena de caracteres es unaexpresión restringida, se muestra el valor; de lo contrario se muestra unasterisco.

�5� Tabla de longitud de agregadosSi especifica la opción AGGREGATE, el compilador proporciona una tabla delongitud de agregados en el listado del compilador. La tabla muestra el modoen que se correlaciona cada agregado del programa. Tabla 5 muestra lascabeceras para las columnas de la tabla de longitud de agregados y ladescripción de cada una de ellas.

Tabla 5. Cabeceras y descripciones de la tabla de longitud de agregados

Cabecera Descripción

Línea.Archivo El número de sentencia y el número de fila en el que se declara elagregado

Utilizar el listado del compilador

Capítulo 5. Salida de compilación 185

Page 208: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 5. Cabeceras y descripciones de la tabla de longitud de agregados (continuación)

Cabecera Descripción

Desplazamiento El desplazamiento de bytes de cada elemento desde el comienzo delagregado

Tamaño total El tamaño total en bytes del agregado

Tamaño base El tamaño en bytes del tipo de datos

Identificador El nombre del agregado y del elemento dentro del agregado

�6� Tabla de referencia de archivoLa columna Incluir desde de la tabla de referencia de archivo indica donde seincluyó el archivo correspondiente de la columna Nombre. la primera entradade esta columna está en blanco porque el primer archivo que se recoge es elarchivo de origen. Las entradas de la columna Incluido desde muestran elnúmero de línea de la sentencia include seguido de un punto y el número dearchivo del archivo de origen que contiene la sentencia include.

�7� Componente, código de retorno, mensaje de diagnóstico, tiempoLa última parte del listado del compilador consta de las siguientes cabeceras:

ComponenteLe muestra qué componente o procesador proporciona la información. Elrecurso de macro, si se invoca, o el propio compilador puedenproporcionarle mensajes informativos.

Código de retornoMuestra el código de retorno más alto generado por el componente,emitido tras completar la compilación. Los códigos de retorno posibles son:

0 (Informativo)No se han detectado mensajes de aviso (como en este ejemplo). Elprograma compilado debería ejecutarse correctamente. El compiladorpodría informarle de una posible ineficiencia en el código o de algunaotra condición de interés.

4 (Aviso)Indica que el compilador ha detectado errores de poca importancia,pero los ha corregido. El programa compilado debería ejecutarsecorrectamente, pero podría producir resultados diferentes a losesperados o ser ligeramente ineficiente.

8 (Error)Indica que el compilador ha detectado errores significativos, pero pudocorregirlos. El programa compilado debería ejecutarse correctamente,pero podría producir resultados diferentes a los esperados.

12 (Error grave)Indica que el compilador ha detectado errores que no pudo solucionar.Si el programa se compiló y se creó un módulo de objeto, no deberíautilizarse.

16 (Error irrecuperable)Indica una terminación forzosa a causa de un error de compilación. Nose ha podido crear correctamente un módulo de objeto.

Nota: Cuando se codifican archivos CMD para PL/I, puede utilizar elutilizar el código de retorno para decidir si se se realizan o noprocedimientos después de la compilación.

Utilizar el listado del compilador

186 PL/I for WindowsGuía de programación

Page 209: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

MensajesIndica:v El número mensajes emitidos, si los hayv El número de mensajes suprimidos, si los hay, por tener un nivel de

gravedad igual o inferior al definido por la opción de tiempo decompilación FLAG.

los mensajes del compilador, el recurso de macro, el preprocesador SQL yel entorno de ejecución se recogen y explican en Mensajes y Códigos.

Solo se envían los mensajes con una gravedad por encima de laespecificada en la opción FLAG. Los mensajes, sentencias y el código deretorno aparecen en la pantalla a no ser que especifique la opción detiempo de ejecución NOTERMINAL.

TiempoMuestra el tiempo total que tardó el componente en procesar el programa.

Archivos de salida del compiladorSi compila un programa utilizando opciones predeterminadas, se crea un módulode objeto en el directorio actual. Al alterar las opciones de compilación, puedesolicitar que se cree otra salida además del módulo de objeto. Tabla 6 enumeraotras salidas de compilación posibles que también se encuentran el directorioactual de forma predeterminada.

Todos los archivos de salida del compilador utilizan el mismo nombre de archivoque el archivo del programa principal. Las extensiones de archivo se especifican enla siguiente tabla.

Tabla 6. Posibles salidas de disco de compilación

Salida Extensiónde archivo

Cómo se solicita (opciónde tiempo de ejecución)

Cómo se reubica(variable de entorno)

Texto de origenpreprocesado

DEK opción DECK delpreprocesador adecuado

IBM.DECK

Módulo de objeto OBJ OBJECT IBM.OBJECT

Listado de objetos ASM LIST IBM.PRINT

Plantilla de archivo .DEF DEF XINFO(DEF) IBM.OBJECT

Listado de mensajes XML XINFO(XML) IBM.OBJECT

Nota: Siempre se recibe un archivo .LST con la lista de programas.

Utilizar el listado del compilador

Capítulo 5. Salida de compilación 187

Page 210: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Archivos de salida del compilador

188 PL/I for WindowsGuía de programación

Page 211: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 6. Enlace de programas

Las siguientes secciones describen cómo enlazar archivos de objeto producidos porel compilador en un archivo de programa ejecutable (.EXE) o una biblioteca deenlace dinámico (.DLL).

Cada .EXE que cree tiene que contener exactamente una rutina principal, es decir,exactamente un procedimiento que contenga OPTIONS(MAIN). Si no existe unarutina principal, el enlazador le informará de que el programa no tiene unadirección de inicio. Si existe más de una rutina principal, el enlazador le informaráde que hay referencias duplicadas para el nombre principal.

Cada .DLL que genere tiene que tener al menos un módulo compilado con laopción de tiempo de compilación DLLINIT (consulte“DLLINIT” en la página 57).

Iniciar el enlazadorUna vez que el compilador ha creado módulos de objeto fuera de los archivos deorigen, utilice el enlazador para enlazarlos a las bibliotecas de tiempo de ejecuciónPL/I y crear un archivo EXE o DLL.

Enlace estáticoPara enlazar estáticamente la biblioteca a su .EXE, especifique la opción en tiempode compilación LIBS(SINGLE STATIC) o LIBS(MULTI STATIC) (consulte “LIBS” enla página 75). También tiene que enlazar con la opción del enlazador /NOE.

Enlace desde la línea de mandatosEspecifique el mandato ILINK seguido de una secuencia de opciones, nombres dearchivo o directorios separados por caracteres de espacio o tabulación.

opcionesUna o varias opciones ILINK. Las opciones ILINK comienzan con un carácter/ o -.

nombre de archivoLos nombres de uno o varios de los siguientes tipos de archivos:v Archivos de objeto, que tienen una extensión de nombre de archivo .OBJv Archivos de biblioteca, que tienen una extensión de nombre de archivo .LIBv Archivos de definición, que tienen una extensión de nombre de archivo .DEFv Archivos de exportación, que tienen una extensión de nombre de archivo

.EXPv Archivos de recurso, que tienen una extensión .RES

Tiene que especificar al menos un archivo de objeto para utilizar ILINKcorrectamente.

directoriosUna o varias ubicaciones de directorio que terminan con un carácter / o \.

archivo de respuestasEl nombre de un archivo de respuestas. El nombre de archivo tiene que irinmediatamente después del carácter @.

Consideraciones de enlace

© Copyright IBM Corp. 1998, 2013 189

Page 212: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Puede especificar el nombre del archivo de salida con la opción /OUT. Puedeespecificar el nombre de un archivo de correlación con la opción /MAP.

Además de las bibliotecas que especifique, de forma predeterminada, el enlazadorbusca las bibliotecas de tiempo de ejecución PL/I definidas en los archivos deobjeto en tiempo de compilación (consulte “LIBS” en la página 75).

Los directorios que especifique pasan a formar parte de la ruta de búsqueda delenlazador, antes que cualquier directorio definido en la variable de entorno LIB.Consulte “Reglas de búsqueda” en la página 192 y “Especificar los directorios” enla página 192 para obtener más información.

Puede utilizar caracteres comodines para especificar varios archivos de objeto. Porejemplo, utilice *.OBJ para especificar todos los archivos de objeto de un directorio.

Las extensiones de nombre de archivo no se asumen

El enlazador no asume extensiones para los archivos. Si especifica un nombre dearchivo sin extensión, el enlazador busca el archivo que tiene ese nombre yninguna extensión. Si el enlazador no encuentra un archivo, detiene el enlace.

Ejemplos

El siguiente mandato enlaza los archivos de objeto FUN.OBJ, TEXT.OBJ,TABLE.OBJ y CARE.OBJ. El enlazador busca referencias externas sin resolver en elarchivo de biblioteca XLIB.LIB y en las bibliotecas predeterminadas. Como no seha proporcionado un nombre para el archivo ejecutable, se denomina FUN.EXE,utilizando el nombre de archivo del primer objeto de archivo y la extensiónpredeterminada .EXE. El enlazador también produce un archivo de correlación,FUNLIST.MAP.ilink /MAP:funlist fun.obj text.obj table.obj care.obj xlib.lib

El siguiente mandato enlaza los archivos MAIN.OBJ, GETDATA.OBJ yPRINTIT.OBJ con un archivo ejecutable denominadoMAIN.EXE, y produce unarchivo de correlación llamado MAIN.MAP.ilink /MAP main.obj getdata.obj printit.obj

En Windows, el mismo mandato cambia ligeramente añadiendo un archivo deexportación, que especifica las funciones que se exportan desde GETDATA.DLL.ilink getdata.obj printit.obj /OUT:getdata.dll /DLL getdata.exp

Enlace desde un archivo makeUtilice un archivo make para organizar la secuencia de acciones (como compilar yenlazar) necesarias para crear su proyecto. A continuación, puede invocar todas lasacciones en un solo paso. El programa de utilidad NMAKE le permite ahorrartiempo al realizar las acciones únicamente en los archivos que se han modificado yen los archivos que incorporan archivos modificados o que dependen de ellos.

La siguiente imagen contiene un ejemplo de archivo make básico.

Iniciar el enlazador

190 PL/I for WindowsGuía de programación

Page 213: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Entrada y salidaEl enlazador está diseñado para enlazar archivos de objeto con otros archivos debiblioteca que especifique para producir un archivo de programa ejecutable (.EXE)o una biblioteca de enlace dinámico (.DLL).

El enlazador puede producir un archivo de correlación, que proporcionainformación sobre el contenido de la salida ejecutable.Entrada

Salidaopciones

archivo ejecutable (.EXE o .DLL)archivos de objeto (*.OBJ)

archivo de correlación (.MAP)archivos de biblioteca (*.LIB)

código de retorno

#--------------------------------------------------------## fun.mak - sample makefile## Usage: nmake fun.mak## The following commands are done only when needed:## - Compiles fun, text, table, care,# xlib1, and xlib2# - Adds xlib1 and xlib2 to library xlib# - Links fun, text, table, care, and xlib# to build fun.exe## Each block is as follows:# <target>: <list of dependencies for target># <action(s) required to build target>##--------------------------------------------------------

OBJS = fun.obj text.obj table.obj care.objLIBS = xlib.lib

fun.exe: $(OBJS) $(LIBS)ilink /MAP:funlist $(OBJS) $(LIBS)

xlib.lib: xlib1.obj xlib2.objilib /OUT:xlib.lib xlib1.obj xlib2.obj

fun.obj: fun.plipli fun.pli

text.obj: text.plipli text.pli

table.obj: table.plipli table.pli

care.obj: care.plipli care.pli

xlib1.obj: xlib1.plipli xlib1.pli

xlib2.obj: xlib2.plipli xlib2.pli

Figura 4. Ejemplo de archivo make

Entrada y salida del enlazador

Capítulo 6. Enlace de programas 191

Page 214: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

archivo de definición de módulo (.DEF)(Windows)archivos de exportación (*.EXP)(Windows)archivos de recurso (*.RES)

Reglas de búsquedaCuando busca un archivo de objeto (.OBJ), biblioteca (.LIB) o definición de módulo(.DEF), el enlazador busca en las siguientes ubicaciones en este orden:1. El directorio que especificó para el archivo o el directorio actual si no ha

proporcionado una ruta. Las bibliotecas predeterminadas no incluyenespecificaciones de ruta.

Nota: Si especifica una ruta con el archivo, el enlazador solo busca en esa ruta.2. Cualquier directorio introducido en la línea de mandatos (tienen que terminar

con un carácter de barra inclinada (/) o barra inclinada invertida (\)). Consultela sección en “Especificar los directorios” para obtener más información.

3. Cualquier directorio recogido en la variable de entorno LIB.

Si el enlazador no encuentra un archivo, genera un mensaje de error y detiene laoperación de enlace.

Ejemplo

Un archivo de respuesta podría incluir la siguiente información:FUN.OBJ TEXT.OBJ TABLE.OBJ CARE.OBJNEWLIBV3.LIBC:\TESTLIB\

El enlazador enlaza cuatro archivos de objeto para crear un archivo ejecutabledenominado FUN.EXE. >El enlazador busca NEWLIBV3.LIB antes de buscar lasbibliotecas predeterminadas para resolver las referencias.

Para localizar NEWLIBV3.LIB ey las bibliotecas predeterminadas, el enlazadorbusca en las siguientes ubicaciones y en este orden:1. El directorio actual (porque NEWLIBV3.LIB se introdujo sin una ruta)2. El directorio C:\TESTLIB\3. Los directorios que aparecen en la variable de entorno LIB

Especificar los directoriosPara que el enlazador busque directorios adicionales para archivos de entrada,especifique una unidad o directorio en la línea de mandatos. Especifique la unidado directorio con una barra inclinada (/) o una barra inclinada invertida (\) al finalpara que el enlazador los reconozca como ruta.

El enlazador busca las rutas que especifica antes de buscar las rutas de la variablede entorno LIB. Consulte la sección en “Reglas de búsqueda” para obtener másinformación.

Valores predeterminados de nombre de archivoSi no especifica un nombre de archivo, el enlazador asume los siguientes valorespredeterminados:

Entrada y salida del enlazador

192 PL/I for WindowsGuía de programación

Page 215: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 7. Valores predeterminados del nombre de archivo del enlazador

Archivo Nombre de archivo predeterminado

Archivos de objeto Ninguno. Tiene que introducir al menos un nombre de archivo deobjeto.

Archivo de salida El nombre base del primer archivo de objeto.

Archivo de correlación El nombre base del archivo de salida.

Archivos de biblioteca Las bibliotecas predeterminadas definidas en los archivos de objeto.Utilice la opción de tiempo de compilación para definir lasbibliotecas predeterminadas. Cualquier biblioteca adicional queespecifique se buscará antes de las bibliotecas predeterminadas.

Archivo de definiciónde módulos

Ninguno. El enlazador asume que acepta los valorespredeterminados para todas las sentencias del módulo.

Especificación de archivos de objetosCuando invoca al enlazador desde la línea de mandatos, el enlazador asume quecualquier entrada que no pueda reconocer como archivo, opción o directorio es unarchivo de objeto. Utilice un espacio o carácter de tabulación para separar archivos.Consulte “Enlace desde la línea de mandatos” en la página 189 para obtener másinformación sobre cómo interpreta el enlazador las entradas.

Puede utilizar caracteres comodín para especificar múltiples archivos de objeto. Porejemplo, utilice *.OBJ para especificar todos los archivos de objeto de un directorio.

Utilización de archivos de respuestasEn lugar de especificar la entrada del enlazador en la línea de mandatos, puedeponer parámetros de nombre de archivo y opciones en un archivo de respuesta.Puede combinar el archivo de respuesta con opciones y parámetros de la línea demandatos.

Cuando invoque al enlazador, utilice la siguiente sintaxis:ilink @responsefile

El valor de responsefile es el nombre del archivo de respuestas. El símbolo @ indicaque el archivo es un archivo de respuestas. Si el archivo no se encuentra en eldirectorio de trabajo, especifique la vía de acceso para el archivo así como elnombre de archivo.

Puede comenzar utilizando un archivo de respuesta en cualquier punto de la líneade mandatos del enlazador. Aunque pueden especificarse muchos archivos derespuesta en la línea de mandatos, estos no pueden anidarse.

Pueden aparecer opciones en cualquier parte del archivo de respuestas. Si unaopción no es válida, el enlazador genera un mensaje de error y detiene el enlace.

Especifique el contenido del archivo de respuesta al igual que haría en la línea demandatos. Como la sintaxis predeterminada identifica la entrada mediante laextensión del archivo en lugar de por la posición en la línea de mandatos, da igualcuántas líneas haya o si hay líneas en blanco en el archivo.

Ejemplo

Entrada y salida del enlazador

Capítulo 6. Enlace de programas 193

Page 216: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

El archivo de respuesta denominado FUN.LNK contiene lo siguiente:/DEBUG /MAPfun.obj text.obj table.obj care.obj/exec/map:funlistgraf.lib

Cuando introduce ilink @fun.lnk, el enlazador hace lo siguiente:v Enlaza los cuatro módulos de objeto fun.obj, text.obj, table.obj y care.obj en

un archivo .EXE denominado fun.exe. Como no se ha especificado un tipo desalida, el enlazador utiliza .exe de forma predeterminada.

v Genera el archivo de correlación funlist.map (asumiendo la extensión .map).v Conserva información de depuración (debido a la opción /DEBUG).v Enlaza las rutinas necesarias del archivo de biblioteca graf.lib, y de las

bibliotecas PL/I predeterminadas especificadas en los archivos de objeto.

Especificar un tipo de salida ejecutablePuede utiliza el enlazador para producir módulos ejecutables (.EXE) y bibliotecasde enlace dinámico (.DLL). El enlazador produce archivos .EXE de formapredeterminada.

Utilice opciones para especificar qué tipo de salida quiere:v Para producir una .DLL, especifique la opción /DLL. O incluya la sentencia de

módulo LIBRARY.

Crear un archivo .EXEEl enlazador produce archivos .EXE de forma predeterminada. Utilice la opción/EXEC, para identificar explícitamente el archivo de salida como archivo .EXE.

Un archivo .EXE es un archivo que puede ejecutarse directamente. Puede ejecutarel programa escribiendo el nombre del archivo. Por contra, la biblioteca de enlacedinámico y los programas del controlador de dispositivo se ejecutan cuando sonllamados por otros procesos y no se pueden ejecutar independientemente. Parareducir el tamaño del archivo .EXE y mejorar su rendimiento, utilice las siguientesopciones:v /ALIGNFILE:n para definir la alineación del archivo para secciones del archivo

de salida. Defina v en factores más pequeños para reducir el tamaño delejecutable, y en factores más grandes para reducir el tiempo de carga delejecutable. De forma predeterminada, la alineación se define en 512.

v /BASE:n para especificar la dirección de carga del ejecutable. Por ejemplo, si secargan varias DLL en direcciones base se garantiza que las DLL no se solapen, elenlazador no tiene que volver a aplicar los registros de reubicación. n (ladirección de carga) tiene que ser un múltiplo de 0x10000 y no puede ser 0.

Si no especifica una extensión para el nombre de archivo de salida, el enlazadorañade automáticamente la extensión .EXE al nombre que proporcione. Si noespecifica un nombre de archivo de salida, el enlazador genera un archivo .EXEcon el miemo nombre de archivo que el primer archivo .OBJ que enlazó.

Crear una biblioteca de enlace dinámicoUn archivo de biblioteca de enlace dinámico (.DLL) contiene código ejecutable parafunciones comunes, al igual que un archivo de biblioteca (.LIB). Cuando enlaza conuna DLL (utilizando una biblioteca de importación), el código de la DLL no se

Utilización de archivos de respuestas

194 PL/I for WindowsGuía de programación

Page 217: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

copia en el archivo ejecutable. En lugar de eso, solo se copian las definiciones deimportación de las funciones DLL, dando como resultado un ejecutable máspequeño. En tiempo de ejecución, la biblioteca de enlace dinámico se carga en lamemoria, junto con el archivo ejecutable .EXE.

Para producir una biblioteca de enlace dinámico como salida, compile al menos unarchivo de objeto con la opción del compilador DLLINIT, t enlác ela a la opción delenlazador /DLL. Tiene que incluir un archivo de definición de exportación (.EXP)que especifique qué funciones van a incluirse en la DLL.

Puede encontrar más información en Capítulo 19, “Compilar bibliotecas de enlacedinámico”, en la página 387.

Para reducir el tamaño de la DLL y mejorar su rendimiento, utilice las siguientesopciones:v /ALIGNFILE: valor para definir el factor de alineación en el archivo de salida.

Defina el valor en factores más pequeños para reducir el tamaño de la bibliotecade enlace dinámico, y en factores más grandes para reducir el tiempo de cargade la biblioteca de enlace dinámico. De forma predeterminada, la alineación sedefine en 512.

En las bibliotecas de enlace dinámico, un valor /BASE puede ahorrar tiempo decarga cuando la dirección de carga facilitada está disponible. Si la dirección decarga no está disponible, el valor /BASE se ignora y no hay ningún beneficio detiempo de carga.

Una vez producida la DLL, puede producir un ejecutable que enlace con la DLL.

El enlazador determina qué funciones necesitan sus archivos de objeto durante elproceso de enlace. Utilice el programa de utilidad ILIB para crear una biblioteca deimportación y utilice el archivo .LIB como entrada del enlazador.

Empaquetar ejecutablesEspecifique /DBGPACK cuando esté depurando, para reducir el tamaño del archivoejecutable y mejorar el rendimiento del depurador.

Generar un archivo de correlaciónEspecifique /MAP para generar un archivo de correlación, que recoge los móduloobjeto de su archivo de salida; nombres de sección, direcciones y tamaños; einformación de símbolos. Si no especifica un nombre para el archivo decorrelación, el archivo toma el nombre del archivo de salida ejecutable, con laextensión .MAP. Para evitar que se genere el archivo de correlación, utilice laopción predeterminada, /NOMAP.

Especifique /LINENUMBERS para incluir número de línea de archivo de origen ydirecciones asociadas en el archivo de correlación.

Códigos de retorno del enlazadorEl enlazador tiene los siguientes códigos de retorno:

CódigoSignificado

Especificar un tipo de salida ejecutable

Capítulo 6. Enlace de programas 195

Page 218: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

0 El enlace se ha completado correctamente. El enlazador no ha detectadoerrores y no ha emitido avisos.

4 Se han emitido avisos. Puede haber problemas con el archivo de salida.

8 Se han detectado errores. El enlace puede haberse completado, pero elarchivo de salida no puede leerse correctamente.

12 Se han emitido avisos y se han detectado errores (consulte los códigos deretorno 4 y 8)

16 Se han detectado errores graves. El enlace término de forma anómalo y elarchivo de salida no se puede ejecutar correctamente.

20 Se han emitido avisos y se han detectado errores graves (consulte loscódigos de retorno 4 y 16)

24 Se han detectado errores y errores graves (consulte los códigos de retorno 8y 16).

28 El enlazador ha emitido avisos y ha detectado errores y errores graves(consulte los códigos de retorno 4, 8 y 16)

Si invoca al enlazador utilizando un archivo make, puede forzar NMAKE para queignore los avisos colocando -7 del ante del mandatoILINK.

Códigos de retorno del enlazador

196 PL/I for WindowsGuía de programación

Page 219: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 7. Definir opciones del enlazador

Las opciones del enlazador no distinguen entre mayúsculas y minúsculas, así quepuede especificarlas en mayúsculas, en minúsculas o en mayúsculas y minúsculas.También puede sustituir un guión (-) por la barra inclinada (/) que va antes de laopción. Por ejemplo, -DEBUG equivale a /DEBUG. Puede especificar opciones enformato breve o largo. Por ejemplo, /DE, /DEB y /DEBU equivalen a /DEBUG.Consulte“Resumen de las opciones del enlazador de Windows” en la página 198para ver la forma aceptable más breve de cada opción. En una línea de mandatopueden utilizarse mayúsculas, minúsculas, formas abreviadas y largas, guiones ybarras inclinadas, como en:

ilink /de -DBGPACK -Map /NOI prog.obj

Separe las opciones con un espacio o una carácter de tabulación. Puede especificaropciones de enlazador de las siguientes maneras:v En la línea de mandatosv En la variable de entorno ILINK

Las opciones especificadas en la línea de mandatos sustituyen a las opciones de lavariable de entorno ILINK.

Algunas opciones del enlazador toman argumentos numéricos. Puede utilizarnúmeros en formato decimal, octal o hexadecimal. Consulte el apartado“Especificar argumentos numéricos” en la página 198 para obtener másinformación.

establecer opciones en la línea de mandatosLas opciones del enlazador especificadas en la línea de mandatos sustituyen acualquier otra especificada anteriormente en la variable de entorno ILINK (tal ycomo se describe en “Definir opciones en la variable de entorno ILINK”).

Puede especificar opciones en cualquier parte de la línea de mandatos. Separe lasopciones con un espacio o un carácter de tabulación.

Por ejemplo, para enlazar un archivo de objeto a la opción /MAP, escriba:ilink /M myprog.obj

Definir opciones en la variable de entorno ILINKAlmacene las opciones utilizadas con más frecuencia en la variable de entornoILINK. Este método es útil si ve que repite las mismas opciones de línea demandatos en cada enlace. No puede especificar nombres de archivo en la variablede entorno, solo opciones del enlazador.

La variable de entorno ILINK puede definirse de la línea de mandatos, en unarchivo de mandato (.CMD) o en propiedades de sistema. Si se establece en la líneade mandatos o ejecutando un archivo de mandato, las opciones solo estarán envigor durante la sesión actual (hasta que reinicie el equipo). Si se establece enPropiedades de sistema, las opciones se definen cuando enciende el equipo, y estánen vigor cada vez que utiliza el enlazador a no ser que las altere utilizando unarchivo .CMD o especificando opciones en la línea de mandatos.

© Copyright IBM Corp. 1998, 2013 197

Page 220: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Uso del enlazadorEn el siguiente ejemplo, las opciones de la línea de mandatos sustituyen a lasopciones de la variable de entorno. Si introduce los siguientes mandatos:SET ILINK=/NOI /AL:256 /DEILINK testILINK /NODEF /NODEB prog

El primer mandato define la variable de entorno para las opciones/NOIGNORECASE, /ALIGNMENT:256 y /DEBUG

El segundo mandato enlaza el archivo test.obj, utilizando las opcionesespecificadas en la variable de entorno, para producir test.exe

El último mandato enlaza el archivo prog.obj para producir prog.exe, utilizandola opción /NODEFAULTLIBRARYSEARCH, además de las opciones/NOIGNORECASE y /ALIGNMENT:256. La opción /NODEBUG de la línea demandatos sustituye a la opción /DEBUG de la variable de entorno, y enlazadorrealice el enlace sin la opción /DEBUG.

Especificar argumentos numéricosAlgunas opciones del enlazador y sentencias de módulo toman argumentosnuméricos. Puede especificar números de cualquiera de las siguientes formas:

DecimalCualquier número que no tenga como prefijo 0 o 0x es un número decimal.Por ejemplo, 1234 es un número decimal.

Octal Cualquier número con el prefijo 0 (pero no 0x) es un número octal. Porejemplo, 01234 es un número octal.

HexadecimalCualquier número con el prefijo 0x es un número hexadecimal. Porejemplo, 0x1234 es un número hexadecimal.

Resumen de las opciones del enlazador de WindowsTabla 8. Resumen de las opciones del enlazador de Windows

Opción Descripción Predeterminado

“/?” en la página 200 Mostrar ayuda Ninguno

“/ALIGNADDR” en la página 200 Definir alineación de dirección /A:0x00010000

“/ALIGNFILE” en la página 200 Definir alineación de archivo /A:512

“/BASE” en la página 200 Definir dirección de carga preferida /BAS:0x00400000

“/CODE” en la página 201 Definir atributos de sección para ejecutable /CODE:RX

“/DATA” en la página 201 Definir atributos de sección para datos /DATA:RW

“/DBGPACK, /NODBGPACK” en lapágina 201

Empaquetar información de depuración /NODB

“/DEBUG, /NODEBUG” en la página 202 Incluir información de depuración /NODEB

“/DEFAULTLIBRARYSEARCH” en lapágina 202

Buscar bibliotecas predeterminadas /DEF

“/DLL” en la página 202 Generar biblioteca de enlace dinámico /EXEC

“/DLL” en la página 202 Especificar un punto de entrada en unarchivo ejecutable

Ninguno

La variable de entorno ILINK

198 PL/I for WindowsGuía de programación

Page 221: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 8. Resumen de las opciones del enlazador de Windows (continuación)

Opción Descripción Predeterminado

“/EXECUTABLE” en la página 203 Generar archivo .EXE /EXEC

“/EXTDICTIONARY,/NOEXTDICTIONARY” en la página 203

Utilizar el diccionario ampliado para buscarbibliotecas

/EXT

“/EXTDICTIONARY,/NOEXTDICTIONARY” en la página 203

No reubicar el archivo en la memoria /NOFI

“/FORCE” en la página 204 Crear un archivo de salida ejecutable inclusosi detectan errores

/NOFO

“/HEAP” en la página 204 Definir el tamaño del almacenamientodinámico del programa

/HEAP:0x100000,0x1000

“/HELP” en la página 204 Mostrar ayuda Ninguno

“/INCLUDE” en la página 204 Forzar una referencia a un símbolo Ninguno

“/INFORMATION, /NOINFORMATION”en la página 204

Mostrar el estado del proceso de enlace /NOIN

“/LINENUMBERS, /NOLINENUMBERS”en la página 204

Incluir número de línea en el archivo decorrelación

/NOLI

“/LOGO, /NOLOGO” en la página 205 Mostrar el logotipo, activar eco en archivo derespuestas

/LO

“/MAP, /NOMAP” en la página 205 Generar archivo de correlación /NOM

“/OUT” en la página 205 Nombrar archivo de salida Nombre del primerarchivo .obj

“/PMTYPE” en la página 206 Especificar tipo de aplicación /PMTYPE:VIO

“/SECTION” en la página 206 Definir atributos para sección Definir mediante /CODE y/DATA

“/SEGMENTS” en la página 207 Definir número máximo de segmentos /SE:256

“/STACK” en la página 207 Definir tamaño de pila de la aplicación /STACK:0x100000,0x1000

“/STUB” en la página 207 Especificar el nombre del archivo deresguardo DOS

Ninguno

“/SUBSYSTEM” en la página 207 Especificar el subsistema y la versiónnecesarios

/SUBSYSTEM:WINDOWS,4.0

“/VERBOSE” en la página 208 Mostrar el estado del proceso de enlace /NOV

“/VERSION” en la página 208 Escribir un número de versión en el archivode ejecución

/VERSION:0.0

Opciones del enlazador de WindowsEsta sección describe las opciones del enlazador en orden alfabético.

Para cada opción, la descripción incluye:v La sintaxis para especificar la opción.v El valor por omisión.v Cualquier abreviatura aceptada.v Una descripción de la opción y sus parámetros, y cualquier interacción que

pueda tener con otras opciones.

Opciones del enlazador de Windows

Capítulo 7. Definir opciones del enlazador 199

Page 222: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

/?Utilice /? para mostrar una lista de opciones válidas del enlazador. Esta opciónequivale a /HELP.

/ALIGNADDRUtilice /ALIGNADDR para definir la alineación de direcciones para segmentos.

El factor de alineación determina dónde comienzan los segmentos del archivo .EXEo .DLL. Desde el comienzo del archivo, el inicio de cada segmento está alineado enun múltiplo (en bytes) del factor de alineación. El factor de alineación tiene que seruna potencia de 2, entre 512 y 256M.

Predeterminado: /ALIGNADDR:0x00010000

Abreviatura: /ALIGN

/ALIGNFILEUtilice /ALIGNFILE para definir la alineación de archivos para segmentos.

El factor de alineación determina dónde comienzan los segmentos del archivo .EXEo .DLL. Desde el comienzo del archivo, el inicio de cada segmento está alineado enun múltiplo (en bytes) del factor de alineación. El factor de alineación tiene que seruna potencia de 2, entre 512 y 64K.

Predefinido: /ALIGNFILE:512

Abreviatura: /A

/BASEUtilice /BASE para especificar la dirección de carga preferida para el primersegmento de carga de un archivo .DLL.

Especificar @filename, key, en lugar de address, localiza un conjunto de programas(normalmente un conjunto de DLL) para que no se solapen en la memoria. filenamees el nombre de un archivo de texto que defina la correlación de memoria para unconjunto de archivos. key es una referencia a una línea en filename que comienzacon la clave especificada. Cada línea del archivo de correlación de memoria tiene lasintaxis: key address maxsize

Separe los elementos con uno o varios espacios o tabuladores. key es un nombreúnico en el archivo. address es la ubicación de la imagen de memoria en el espaciode direcciones virtuales. maxsize es la cantidad de memoria a la que tiene queajustarse la imagen. El enlazador emitirá un aviso cuando la imagen de memoriadel programa supere el tamaño especificado. Un comentario del archivo decorrelación de memoria comienza con un punto y coma (;) y se ejecuta hasta elfinal de la línea.

Predeterminado: /BASE:0x00400000

Abreviaturas: /BAS

Opciones del enlazador de Windows

200 PL/I for WindowsGuía de programación

Page 223: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

/CODEUtilice /CODE para especificar los atributos predeterminados para todas lassecciones de código. Las letras se pueden especificar en cualquier orden.

Letra Atributo

E o X EXECUTE

R READ

S SHARED

W WRITE

Predeterminado: /CODE:RX

Abreviaturas de descripción de CODE: Ninguna

/DATAUtilice /DATA para especificar los atributos predeterminados para todas lassecciones de datos. Las letras se pueden especificar en cualquier orden.

Letra Atributo

E o X EXECUTE

R READ

S SHARED

W WRITE

Predeterminado: /DATA:RW

Abreviaturas: None

/DBGPACK, /NODBGPACKUtilice /DBGPACK para eliminar la información de tipo depuración redundante. Elenlazador toma la información de tipo de depuración de todos los archivos deobjeto y componentes de biblioteca necesarios, y reduce la información a unaentrada por tipo. El resultado es un archivo de salida ejecutable más pequeño quepuede mejorar el rendimiento del depurador.

Consideraciones de rendimiento: Normalmente, el enlace con /DBGPACK ralentizael proceso de enlace porque lleva tiempoempaquetar la información. Sin embargo, si haysuficiente información de depuraciónredundante, /DBGPACK puede acelerar el enlace,porque hay menos información que escribir enel archivo,

Cuando especifica /DBGPACK, /DEBUG se activa de forma predeterminada.

Predeterminado: /NODBGPACK

Abreviaturas: /DB|/NODB

Opciones del enlazador de Windows

Capítulo 7. Definir opciones del enlazador 201

Page 224: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

/DEBUG, /NODEBUGUtilice /DEBUG para incluir información de depuración en el archivo de salida; asípodrá depurar el archivo con el depurador o analizar su rendimiento con elanalizador de rendimiento. El enlazador incluirá datos simbólicos e información denúmero de línea en el archivo de salida.

Para llevar a cabo la depuración, compile los archivos de objeto con TEST.

Para el analizador de rendimiento, compile los archivos de objeto con PROFILE yGONUMBER. El enlace con /DEBUG aumenta el tamaño del archivo de salidaejecutable.

Predeterminado: /NODEBUG

Abreviaturas: /D|/NODEB

/DEFAULTLIBRARYSEARCHUtilice /DEFAULTLIBRARYSEARCH para que el enlazador busque las bibliotecaspredeterminadas de archivos de objeto al resolver referencias.

Si especifica una biblioteca con la opción, el enlazador añade el nombre debiblioteca a la lista de bibliotecas predeterminadas. Las bibliotecas predeterminadasde un archivo de objeto se definen en tiempo de compilación y se incluyen en elarchivo de objeto. El enlazador busca las bibliotecas predeterminadas de formapredeterminada.

Utilice /NODEFAULTLIBRARYSEARCH para decirle al enlazador que ignore lasbibliotecas predeterminadas cuando resuelva referencias externas. Si especifica unabiblioteca con la opción, en enlazador ignora la biblioteca predeterminada, perobusca en el resto de bibliotecas predeterminadas (y en cualquier otra definida enlos archivos de objeto).

Si especifica /NODEFAULTLIBRARYSEARCH sin especificar una biblioteca, tiene queespecificar explícitamente todas las bibliotecas que quiere utilizar, incluyendo lasbibliotecas en tiempo de ejecución VA PL/I.

Predeterminado: /DEFAULTLIBRARYSEARCH

Abreviaturas: /DEF|/NOD

/DLLUtilice /DLL para identificar el archivo de salida como una biblioteca de enlacedinámico (archivo .DLL). Los archivos de objeto tienen que compilarse con laopción PL/I DLLINIT.

Si especifica /DLL con /EXEC, solo entran en vigor las últimas opcionesespecificadas.

Si no especifica /DLL, o alguna otra opción, en elazador produce de formapredeterminada un archivo .EXE (/EXEC).

Predeterminado: /EXECUTABLE

Abreviatura: /EXEC

Opciones del enlazador de Windows

202 PL/I for WindowsGuía de programación

Page 225: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

/ENTRYUtilice /ENTRY para especificar un punto de entrada (nombre de una rutina ofunción) en un ejecutable.

Valor predeterminado: Ninguno

Abreviatura: /EN

/EXECUTABLEUtilice /EXEC para identificar el archivo de salida como un programa ejecutable(archivo .EXE). El enlazador genera archivos .EXE de forma predeterminada.

Si especifica /EXEC con /DLL, solo entran en vigor las últimas opcionesespecificadas.

Si no especifica /EXEC ni /DLL, el enlazador produce un archivo .EXE de formapredeterminada.

Predeterminado: /EXECUTABLE

Abreviatura: /EXEC

/EXTDICTIONARY, /NOEXTDICTIONARYUtilice /EXTDICTIONARY para que el enlazador busque en los diccionarios ampliadosde las bibliotecas cuando resuelve referencias externas. El diccionario ampliado esuna lista de relaciones entre módulos en una biblioteca. Cuando el enlazador sacaun módulo de la biblioteca, comprueba el diccionario ampliado para ver i elmódulo necesita otros módulos de la biblioteca, y saca los módulos adicionalesautomáticamente.

El enlazador busca el diccionario ampliado de forma predeterminada, para acelerarel proceso de enlace.

Utilice /NOEXTDICTIONARY si está definiendo un símbolo en su código objeto quetambién está definido en una de las bibliotecas a las que se está enlazando. Si no,el enlazador envía un mensaje porque ha definido el mismo símbolo en doslugares diferentes. Cuando enlaza con /NOEXTDICTIONARY, el enlazador busca eldiccionario directamente, en lugar de buscar el diccionario ampliado. Esto hace queel enlace sea más lento, porque las referencias tienen que resolverseindividualmente.

Predeterminado: /EXTDICTIONARY

Abreviaturas: /EXT|/NOE

/FIXED, /NOFIXEDUtilice /FIXED para decirle al cargador que no reubique el archivo en la bibliotecacuando la dirección base especificada no esté disponible.

Para obtener más información sobre las direcciones base, consulte la opción delenlazador /BASE.

Predeterminado: /NOFIXED

Opciones del enlazador de Windows

Capítulo 7. Definir opciones del enlazador 203

Page 226: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Abreviaturas: /FI|/NOFI

/FORCEUtilice /FORCE para producir un archivo de salida ejecutable incluso si se hanproducido errores durante el proceso de enlace.

Predeterminado: /NOFORCE

Abreviaturas: /FO|/NOFO

/HEAPUtilice /HEAP para definir el tamaño del almacenamiento dinámico del programa enbytes. El argumento reserve define el espacio de direcciones virtuales totalreservado. commit define la cantidad de memoria física que se va asignarinicialmente. Cuando commit es inferior a reserve, las demandas de memoria sereducen, pero el tiempo de ejecución es mayor.

Predeterminado: /HEAP:0x100000,0x1000

Abreviatura: /HEA

/HELPUtilice /HELP para mostrar una lista de las opciones del enlazador válidas. Estaopción es el equivalente a /?.

Predeterminado: None

Abreviatura: /H

/INCLUDEUtilice /INCLUDE para forzar una referencia a un símbolo. El enlazador busca unmódulo de objeto que defina el símbolo.

Predeterminado: None

Abreviatura: /INC

/INFORMATION, /NOINFORMATIONConsulte la descripción de la opción del enlazador /VERBOSE.

Valor predeterminado: /NOINFORMATION

Abreviatura: /I|/NOIN

/LINENUMBERS, /NOLINENUMBERSUtilice /LINENUMBERS para incluir números de línea del archivo de origen ydirecciones asociadas en el archivo de correlación. Para que esta opción entre envigor, tiene que haber ya información de número de línea en los archivos de objetoque está enlazando.

Cuando compile, utilice la opción GONUMBER para incluir números de línea en elarchivo de objeto (o la opción TEST para incluir toda la información dedepuración).

Opciones del enlazador de Windows

204 PL/I for WindowsGuía de programación

Page 227: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Si le da al enlazador un archivo de objeto sin información de número de línea, laopción /LINENUMBERS no tiene efecto.

La opción /LINENUMBERS obliga al enlazador a crear un archivo de correlación,incluso si ha especificado /NOMAP.

De forma predeterminada, el archivo de correlación recibe el mismo nombre que elarchivo de salida, más la extensión .map. Puede sustituir el nombrepredeterminado especificando un nombre de archivo de correlación.

Predeterminado: /NOLINENUMBERS

Abreviaturas: /L|/NOLI

/LOGO, /NOLOGOUtilice /NOLOGO para suprimir la información sobre el producto que aparece cuandose inicial el enlazador.

Especifique /NOLOGO antes del archivo de respuestas en la línea de mandatos o enla variable de entorno ILINK. Si la opción aparece en el archivo de respuesta odespués de él, se ignora.

Predeterminado: /LOGO

Abreviaturas: /LO|/NOL

/MAP, /NOMAPUtilice /MAP para generar un archivo de correlación denominado name. EL archivorecoge la composición de cada segmento y los símbolos (globales) públicosdefinidos en los archivos de objeto. Los símbolos se recogen dos veces: ordenadospor nombre y por dirección.

Si no especifica un directorio, el archivo de correlación se genera en el directoriode trabajo actual. Si no especifica name, el archivo de correlación tiene el mismonombre que el archivo de salida ejecutable, con la extensión .map.

Predeterminado: /NOMAP

Abreviaturas: /M|/NOM

/OUTUtilice /OUT para especificar un nombre para el archivo de salida ejecutable.

Si no proporciona una extensión a name, el enlazador proporcionará una extensiónbasándose en el tipo de archivo que está creando:Archivo producido

Extensión predeterminadaPrograma ejecutable

.EXEBiblioteca de enlace dinámico

.DLL

Si no utiliza la opción /OUT, el enlazador utiliza el nombre de archivo del primerarchivo de objeto que ha especificado, con la extensión correspondiente.

Opciones del enlazador de Windows

Capítulo 7. Definir opciones del enlazador 205

Page 228: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Predeterminado: nombre del primer archivo .OBJ con la extensión correspondiente.

Abreviatura: /O

/PMTYPEUtilice /PMTYPE para especificar el tipo de archivo .EXE que genera el enlazador.No utilice esta opción cuando genere bibliotecas de enlace dinámico (DLL).

Tiene que especificarse uno de los siguientes tipos:

PM El ejecutable tiene que ejecutarse en una ventana

VIO El ejecutable tiene que ejecutarse en una ventana o en una pantallacompleta

NOVIOEl ejecutable no debe ejecutarse en una ventana, tiene que utilizar unapantalla completa

Predeterminado: /PMTYPE:VIO

Abreviatura: /PM

/SECTIONUtilice /SECTION para especificar los atributos de protección de memoria para lasecciónname. name distingue entre mayúsculas y minúsculas. Puede especificar lossiguientes atributos:Letra Define el atributoE or X EXECUTER READS SHAREDW WRITE

El siguiente ejemplo define los atributos READ y SHARED, pero no los atributosEXECUTE o WRITE, para la sección dseg1 de un archivo.EXE./SEC:dseg1,RS

Predeterminados

A las secciones se les asignan atributos de forma predeterminada, de la siguientemanera:

SegmentoAtributos predeterminados

Secciones de códigoEXECUTE, READ (ER)

Secciones de datos (en el archivo .EXE)READ, WRITE (RW), no compartido

Secciones de datos (en el archivo .DLL)READ, WRITE, no compartido

Sección CONST32_ROREAD, SHARED (RS)

Predeterminado: Depende del tipo de segmento

Opciones del enlazador de Windows

206 PL/I for WindowsGuía de programación

Page 229: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Abreviatura: /SEC

/SEGMENTSUtilice /SEGMENTS para definir el número de segmentos lógicos que puede tener unprograma. Puede definir number en cualquier valor entre 1 y 16375. Consulte“Especificar argumentos numéricos” en la página 198.

Para cada segmento lógico, el enlazador tiene que asignar espacio para rastrear lainformación del segmento. Si utiliza un límite de segmento relativamente bajocomo valor predeterminado (256), el enlazador puede realizar el enlace más rápidoy asignar menos espacio de almacenamiento.

Cuando define un límite de segmento superior a 256, el enlazador asigna másespacio para la información de segmento. Esto hace que el enlace sea más lento,pero le permite enlazar programas con un mayor número de segmentos.

Para los programas con menos de 256 segmentos, puede mejorar el tiempo deenlace y reducir los requisitos de almacenamiento del enlace definiendo number enel número real de segmentos del programa.

Predeterminado: /SEGMENTS:256

Abreviatura: /SE

/STACKUtilice /STACK para definir el tamaño de pila (en bytes) de su programa. EL tamañotiene que ser un número par entre 0 y 0xFfffFffe. Si especifica un número imparse redondea al alza hasta el siguiente número par.

reserve indica el espacio de direcciones virtuales total reservado. commit define lacantidad de memoria física que se va asignar inicialmente. Cuando commit esinferior a reserve, las demandas de memoria se reducen, pero el tiempo deejecución puede ser mayor.

Predeterminado: /STACK:0x100000,0x1000

Abreviatura: /ST

/STUBUtilice /STUB para especificar el nombre del ejecutable del Sistema operativo dedisco (DOS) al inicio del archivo de salida creado.

Predeterminado: Ninguno

Abreviatura: /STU

/SUBSYSTEMUtilice /SUBSYSTEM para especificar el subsistema y la versión que hacen falta paraejecutar el programa. Los argumentosmajor y minor son opcionales y especifican laversión requerida mínima del subsistema. Los argumentos major y minor sonenteros dentro del rango de 0 a 65535.

Opciones del enlazador de Windows

Capítulo 7. Definir opciones del enlazador 207

Page 230: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Subsistema Major.Minor Descripción

WINDOWS 3.10 Una aplicación gráfica que utiliza la API Graphical DeviceInterface (GDI).

CONSOLE 3.10 Una aplicación de modalidad carácter que utiliza la APIConsole.

Predeterminado: /SUBSYSTEM:WINDOWS,4.0

Abreviatura: /SU

/VERBOSEUtilice /VERBOSE para que el enlazador muestre información sobre el proceso deenlace mientras se produce, incluyendo la fase de enlace y los nombres y rutas delos archivos que se están enlazando.

Si tiene algún problema durante el proceso de enlace porque el enlazador noencuentra los archivos correctos o los encuentra en el orden equivocado, utilice/VERBOSE para determinar las ubicaciones de los archivos de objeto que se estánenlazando y el orden en qué se enlazan.

La salida de esta opción se envía a stdout. Puede redirigir la salida a un archivoutilizando los símbolos de redireccionamiento de Windows.

/VERBOSE es lo mismo que /INFORMATION.

Predeterminado: /NOVERBOSE

Abreviaturas: /VERB|/NOV

/VERSIONUtilice /VERSION para escribir un número de versión en la cabecera del archivo deejecución. Los argumentos major y minor son enteros dentro del rango de 0 a 65535.

Predeterminado: /VERSION:0.0

Abreviatura: /VER

Opciones del enlazador de Windows

208 PL/I for WindowsGuía de programación

Page 231: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Parte 3. Ejecutar y depurar su programa

© Copyright IBM Corp. 1998, 2013 209

Page 232: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

210 PL/I for WindowsGuía de programación

Page 233: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 8. Usar opciones de tiempo de ejecución

Cuando haya preparado el ejecutable de su programa PL/I, necesitará comprobarsu comportamiento de ejecución. El primer paso es ejecutar el programa y ver loque ocurre. Dependiendo de la naturaleza de su aplicación, es posible que tengaque realizar configuraciones de entrada y salida (sentencias SET) antes de invocarel programa.

Definir variables de entorno de ejecuciónPuede definit el entorno de ejecución de su programa utilizando variables deentorno.

PATHUtilice la variable de entorno PATH para especificar la ruta de búsqueda dearchivos EXE y CMD que no se encuentran en el directorio actual.

set path=c:\ibm;d:\project

Puede especificar uno o varios directorios con esta variable. Teniendo en cuenta elejemplo anterior, se busca antes en el directorio actual, después en c:\ibm y porúltimo en d:\project.

DPATHUtilice DPATH para especificar la ruta de búsqueda para mensajes de tiempo deejecución. El programa los busca primero en el directorio actual y después en eldirectorio o directorios especificados por la variable DPATH. El siguiente ejemploharía que el programa buscara en el directorio actual seguido de c:\set1 yd:\set2, en ese orden.

set dpath=c:\set1;d:\set2

Especificar opciones de tiempo de ejecuciónCada vez que su aplicación se ejecuta, se crea un conjunto de opciones de tiempode ejecución. Estas opciones determinan algunas de las propiedades de la ejecuciónde la aplicación, como la asignación del almacenamiento y la creación de informes.IBM proporciona valores predeterminados para cada una de las opciones detiempo de compilación,; sin embargo, puede modificar estos valores según susnecesidades antes de ejecutar la aplicación.

Dónde especificar opciones de tiempo de ejecuciónPuede modificar los valores predeterminados de sus opciones de tiempo deejecución en una variable de entorno y en el código fuente de su aplicación. Lasalternativas, de prioridad baja a prioridad alta, son:v Utilizar los valores predeterminados de IBM

v Definir opciones de tiempo de ejecución en la variable de entornoCEE.OPTIONS

Utilice el mandato SET de la línea de mandatos o defínalas en Propiedades delsistema para especificar opciones de tiempo de ejecución por medio de lavariable de entorno CEE.OPTIONS. Por ejemplo:

set cee.options=natlang(enu)

© Copyright IBM Corp. 1998, 2013 211

Page 234: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Como se ha mencionado anteriormente, hay dos métodos para definir opcionesen la variable de entorno CEE.OPTIONS. El primer método, definirCEE.OPTIONS en Propiedades del sistema, tiene una prioridad más baja que elsegundo, utilizar el mandato SET.1. Definir CEE.OPTIONS en Prioridades del sistema

Las opciones de tiempo de ejecución especificadas en Propiedades delsistema son las opciones en vigor para cada sesión que inicie. Es un buenlugar para especificar opciones de tiempo de ejecución que quiere que esténen vigor en cada aplicación que ejecute.Si CEE.OPTIONS ya existe en propiedades del sistema, cámbiela o añádala ala variable existente.

2. Las opciones de tiempo de ejecución especificadas en un mandato SET de lalínea de mandatos solo están en vigor para esa sesión o ventana y anulancualquier opción de tiempo de ejecución especificada en propiedades delsistema. Este es el método recomendado.Para modificar los valores de las opciones de tiempo de ejecución, utilice elmandato SET con los valores deseados. Cada mandato SET sustituye acualquier mandato SET anterior, incluyendo la definición de Propiedades delsistema. Por tanto, tiene que incluir los valores de todas las opciones detiempo de ejecución de cualquier mandato SET anterior si aún quiere queestén en vigor en los mandatos SET posteriores.Por ejemplo, imagine que tiene lo siguiente en sus Propiedades del sistema:

cee.options=natlang(jpn)

y luego escribe este mandato desde la línea de mandatos:set cee.options=natlang(enu)

Esto significa que NATLANG ha vuelto a su valor predeterminado, que esNATLANG(ENU).Para devolver todas las opciones de tiempo de ejecución a los valorespredeterminados suministrados por IBM, defina CEE.OPTIONS con unargumento nulo:

set cee.options=

En Windows, puede agrupar varios mandatos, incluyendo un mandato SETpara CEE.OPTIONS, en un archivo de mandato. Ejecutar ese archivo demandato es lo mismo que emitir cada uno de los mandatos individualmenteen la línea de mandatos.

Especificar varias subopciones u opciones de tiempo deejecución

Cuando se especifica una serie de opciones de tiempo de ejecución, tiene queseparar cada opción con una coma sin incluir espacios.

Utilice comas para separar subopciones de opciones de tiempo de compilación. Sino especifica una subopción, tiene que especificar la coma igual para indicar suomisión. Las comas traseras no son obligatorias. Si no especifica ningunasubopción, se utilizan las predeterminadas. Por ejemplo, la sintaxis NATLANG() esválida.

Los valores predeterminados para las opciones se indican en los diagramas desintaxis de opciones o en las descripciones de subopciones, donde corresponda.

Especificar opciones de tiempo de ejecución

212 PL/I for WindowsGuía de programación

Page 235: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Opciones de tiempo de ejecuciónEn esta sección se describe la opción en tiempo de ejecución NATLANG.

NATLANGLa opción NATLANG especifica el idioma nacional que va a utilizarse para losmensajes en tiempo de ejecución. Las traducciones de mensajes se proporcionan enjaponés y en inglés de estados unidos con mayúsculas y minúsculas. NATLANGtambién determina cómo da formato a los mensajes el recurso de mensajes.

�� NATLANGENU

( JPN ) ��

JPNEs un identificador de tres caracteres que identifica el idioma japonés. El textodel mensaje puede ser una mezcla de caracteres SBCS (juego de caracteres deun solo byte) y DBCS (djuego de caracteres de doble byte).

ENUEs un identificador de tres caracteres que identifica el idioma inglés de EstadosUnidos con mayúsculas y minúsculas. El mensaje está compuesto porcaracteres SBCS y consta de letras mayúsculas y minúsculas.

USO: NATLANG(ENU)

Los informes de almacenamiento y la opción de tiempo de ejecución, así como elvolcado de salida, solo es escriben en inglés de Estados Unidos utilizandomayúsculas y minúsculas.

Si especifica un idioma nacional que no está disponible en su sistema, se utiliza elidioma predeterminado.

Incluir DLL en tiempo de ejecuciónSi incluye bibliotecas de enlace dinámico (DLL) en su aplicación, esta lista deberíaayudarle a determinar cuáles necesita en función de su aplicación.

En Windows, se necesitan los siguiente archivos para una aplicación que no seamultihebra:v BIN\HEPWS20.DLLv BIN\IBMWS20.DLLv BIN\IBMWSTB.DLLv BIN\IBMWS20F.DLLv BIN\IBMWS20G.DLLv BIN\IBMRTENU.DLL

Estos archivos son necesarios para aplicaciones multihebra en Windows:v BIN\HEPWM20.DLLv BIN\IBMWM20.DLLv BIN\IBMWMTB.DLLv BIN\IBMWM20F.DLLv BIN\IBMWM20G.DLLv BIN\IBMRTENU.DLL

Además de los ya citados, si su aplicación Windows utiliza BTRIEVE, tiene queincluir también BIN\IBMPBTRV.DLL.

Opciones de tiempo de ejecución

Capítulo 8. Usar opciones de tiempo de ejecución 213

Page 236: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

La aplicación del Cliente que contenga una copia de cualquiera de estos archivos omódulos deberá etiquetarse del siguiente modo:

CONTAINSIBM PL/I para Windows Versión 9.0.1Módulos de ejecución(c) Copyright IBM Corporation 2013Reservados todos los derechos

Incluir DLL en tiempo de ejecución

214 PL/I for WindowsGuía de programación

Page 237: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 9. Prueba y depuración de programas

Las prácticas de codificación y diseño le ayudan a crear programas de calidad ydeben ir seguidas de pruebas exhaustivas de los programas. Tiene que prestarespecial atención a la fase de prueba de desarrollo para que:v Su programa sea completamente operativo tras el menos número posible de

ejecuciones de prueba, minimizando el tiempo y el coste del desarrollo delprograma.

v Su programa cumpla todos los objetivos de diseño antes de lanzarse al trabajode producción.

v Su programa incluya comentarios suficientes permitir a quienes utilizan y seencargan del mantenimiento del programa realizar tareas sin ayuda adicional.

El proceso de prueba suele desvelar bugs (o errores), un término genérico queabarca todo lo que hace su programa que no se esperaba que hiciese. El proceso desuprimir estos errores del programa se conoce como depuración.

Este capítulo no intenta cubrir de forma exhaustiva los procesos de prueba ydepuración, pero ofrece técnicas y consejos útiles que le ayudarán a producirprogramas PL/I de alta calidad y sin errores. A continuación encontraráinformación general sobre depuración y pruebas e información específica de PL/I.

Comprobación de programasProbar los programas PL/I puede resultar complicado, sobre todo si los programasson lógicamente complejos o implican varios módulos. Sin embargo, no debesaltarse este paso porque es importante detectar y eliminar errores del programaantes de introducirlo en un entorno de producción.

A continuación encontrará tres enfoques de prueba que puede aplicar a todos susprogramas PL/I:

Inspección de códigoTambién denominada comprobación de escritorio, la inspección de códigoimplica la selección de un fragmento de código y su lectura desde el puntode vista del sistema. Siga el flujo del programa, ya sea con una copiaimpresa del programa fuente o mediante a visualización en línea delarchivo de código fuente. Cuando haya datos de entrada, trate de adivinardatos posibles y sustitúyalos por valores de variable. Cuando hayacálculos, realice el cálculo manualmente o con la ayuda de una calculadoray continúe. La inspección de código suele revelar problemas lógicos,errores de sintaxis y errores que el compilador pasa por alto (por ejemplo,“n + 2” en lugar de “n*2”).

Comprobación de datosSe proporciona un programa con datos de prueba para verificar que seejecuta tal y como se espera. El objetivo de la comprobación de datos esver si el programa lanza alguna excepción (por ejemplo un error en tiempode ejecución) ante algún posible dato que tenga que tratar en el entorno deproducción. Tiene que utilizar una gran variedad de datos para probar elprograma.

© Copyright IBM Corp. 1998, 2013 215

Page 238: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Por ejemplo, haga que su programa procese gran cantidad de datos quesabe que van a generar errores (como la condición OVERFLOW) y veacómo responde el programa. Su programa debería incorporarcomprobación de errores (como unidades ERROR ON) para contenercualquier dato posible.

Atención:: No debe realizar pruebas con datos insustituibles, ni almacenardatos insustituible en el acceso de un programa que se estáprobando.

Comprobación de vía de accesoLos datos que utiliza para probar un programa tienes que seleccionarsepara probar todo el programa. En otras palabras, si su programa consta devarios módulos, los datos que utilice para probar el programa deben exigirel uso de todos los módulos. Si su programa puede utilizar cinco vías deacceso en un determinado punto, tiene que utilizar conjuntos de datos quehagan que el programa utilice cada una de las cinco vías.

A medida que un programa se hace más y más complejo, se vuelveprácticamente imposible proporcionar datos para todas las combinacionesde vía de acceso posibles. Sin embargo, es importante que seleccione casosde prueba que comprueben una variedad de vías de acceso representativa.Por ejemplo, en lugar de comprobar todas las iteraciones posibles de unbucle DO, compruebe la primera y la última, y un caso intermedio.

A medida que se prueba un programa se van descubriendo errores, y para eliminaresos errores es necesario poder reproducirlos. Por lo tanto, cuando pruebeprogramas, comience siempre por un estado conocido. Por ejemplo, cuando sedetecta un error debe conocer los valores de variable, las opciones de compilaciónutilizadas, el contenido de la memoria, etc. PL/I proporciona funciones comoSNAP y PLIDUMP que le ayudan a esto.

Como norma, un programa que se ejecutó perfectamente ayer pero que hoypresenta un error lo hace a causa de uno o más cambios en el estado de lamáquina. Por tanto, cuando pruebe programas PL/I, asegúrese de que conoce, endetalle, el estado de la máquina en tiempo de compilación y en tiempo deejecución.

Consejos generales sobre depuraciónLa depuración es un proceso que consiste en dejar que su programa se ejecutehasta que haga algo que no se esperaba que hiciese. Tras encontrar un error,modifique el programa para que no encuentre el error cuando se encuentre en elestado exacto en el que se produjo el error inicialmente. Esto se consigue mediantela combinación de rastreo, intuición, pruebas y errores. El mayor obstáculo de unadepuración eficaz es que al eliminar un error pueden aparecer nuevos errores en elprograma. Tiene que considerar consejos generales de depuración y técnicas dedepuración específicas de PL/I.

Tenga en cuenta los siguientes consejos cuando depure programas:

Realice cambios de uno en unoCuando intente solucionar un error, realice un único cambio en el códigofuente del programa cada vez. Al hacer un solo cambio, puede comparar elcomportamiento del programa antes y después de cambio para observar deforma precisa el efecto del mismo.

Comprobación de programas

216 PL/I for WindowsGuía de programación

Page 239: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Siga la secuencia lógica del programaArregle los errores del programa en el orden en el que se detectaron al ejecutarel programa.

Espere resultados inesperadosLocalice un error determinado en el código fuente del programa en un puntoque corresponde a un cambio inesperado en el estado de ejecución delprograma.

Por ejemplo, el cambio no deseado en el estado de ejecución del programapodría ser la asignación no intencionada de un valor decimal “100” a unavariable de carácter “z”. En este caso, es probable que el código fuente incluyaun error que asigna una variable errónea en una sentencia de asignación.

técnicas de depuración PL/IPL/I le proporciona varios métodos de depuración de programas que se describenen las siguientes secciones:

Opciones de tiempo de compilaciónOcupacionesVolcadosManejo de condiciones y errores

Uso de opciones de tiempo de compilación para ladepuración

Los productos de la estación de trabajo PL/I están diseñados para diagnosticarmuchos de los errores de los programas en tiempo de compilación y le proporcionaun listado del compilador que explica qué errores ha realizado y dónde se hanrealizado. Además, puede utilizar opciones de tiempo de compilación para hacerque el listado del compilador sea mucho más útil.

Las siguientes opciones de tiempo de compilación son útiles para depurar losprogramas PL/I:

FLAGSuprime el listado de mensajes de diagnóstico por debajo de una ciertagravedad y termina la compilación si se alcanza un determinado número demensajes. Si su programa no se comporta de la forma esperada y los mensajesdel compilador no explican el problema, utilice la opción FLAG para incluirmensajes informativos en el listado del compilador. Estos mensajes (que sehabrían suprimido si no de forma predeterminada)pueden explicar losproblemas que hay en el programa. Para obtener más información sobre el usode FLAG, consulte “FLAG” en la página 61.

GONUMBERCrea una tabla de números de sentencias necesaria para la depuración.

PREFIXHabilita o inhabilita condiciones PL/I especificadas. Como puede especificarlas condiciones con una opción de tiempo de compilación, no necesitamodificar el programa fuente. Compilar con PREFIX( SUBRG STRZ STRG)puede resultar muy útil para la depuración. Para obtener más informaciónsobre el uso de PREFIX, consulte “PREFIX” en la página 112.

RULESEspecifica la rigurosidad con la que el compilador hace respetar varias reglasde lenguaje. Puede utilizarla para señalar errores comunes de programación.

Consejos generales sobre depuración

Capítulo 9. Prueba y depuración de programas 217

Page 240: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Puede encontrar las siguientes subopciones para RULES, que resultanparticularmente útiles para la depuración:

NOLAXIFAnula las cláusulas IF, WHILE, UNTIL y WHEN para evaluar por otrovalor distinto a BIT(1) NONVARYING.

NOLAXDCLAnula todas las declaraciones contextuales e implícitas excepto lasincorporadas y los archivos SYSIN y SYSPRINT.

NOLAXQUALEl compilador señala cualquier referencia a miembros de estructura que nosean de nivel 1 y que no estén cualificados con punto.

Por ejemplo, considere el programa:program: proc( ax1xcb, ak2xcb );

dcl (ax1xcb, ax2xcb ) pointer;dcl

1 xcb based,2 xcba13 fixed bin,...

ak1xcb->xcba13 = ax2xcb->xcba13;

Con RULES(NOLAXDCL) en vigor, los dos errores tipográficos de arriba sonconsiderados declaraciones implícitas por el compilador y se marcan comoerrores. Para obtener más información sobre el uso de RULES, consulte“RULES” en la página 120.

SNAPEspecifica que el compilador produce un listado de información de rastreo quees útil para localizar errores en el programa.

Para obtener información detallada sobre el uso de SNAP para depurar,consulte “Volcados SNAP para información de rastreo” en la página 223.

Para obtener más información sobre la sintaxis SNAP, consulte “SNAP” en lapágina 129.

XREFEspecifica que el listado del compilador incluye una tabla de nombresutilizados en el programa junto con los números de la sentencias en los que sedefinen o en los que se les hace referencia. Esto le permite rastrear fácilmentedónde se utilizan los nombres en el programa fuente. Para obtener másinformación sobre el uso de XREF, consulte “XREF” en la página 147.

Usar ocupaciones para la depuraciónAl depurar, es muy útil comprobar periódicamente:v Dónde se encuentra su programa en el flujo de ejecución (por ejemplo, qué

módulo se está ejecutando).v El valor de identificadores para que pueda ver cuándo cambian y qué valores se

asignan.

para llevar a cabo estas tareas, puede utilizar funciones incorporadas, sentenciasPUT DATA y PUT LIST y sentencias de visualización. Estos enfoques se describencon más detalle en las siguientes secciones.

Funciones incorporadasLas funciones incorporadas PROCNAME, PACKAGENAME y SOURCELINEson útiles para seguir la ejecución de programa cuando intenta rastrear la

Técnicas de depuración PL/I

218 PL/I for WindowsGuía de programación

Page 241: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ubicación de un problema y la secuencia de eventos que lo provocaron. Lasiguiente sentencia puede incluirse donde desee para mostrar el nombre deprocedimiento y el número de línea de la sentencia que se está ejecutandoactualmente.

display (procname() { sourceline());

PUT LISTLe permite transmitir cadenas y conjuntos de datos al flujo de datos (porejemplo, a un archivo de salida para impresora). El siguiente procedimiento,por ejemplo, le permite saber si se lanza la condición FIXEDOVERFLOW eimprime el valor de la variable que condujo a la condición (en este caso, z):

Debug: Proc(x);dcl x fixed bin(31);on fixedoverflow

begin;put skip list(’Fixedoverflow raised because z = ’{z);

end;end;get list(z);x = 8 * z;

Si z es demasiado largo, al multiplicarlo por 8 se consigue un valor demasiadolargo para cualquier variable FIXED BIN(31) y se lanzaría una excepciónFIXEDOVERFLOW. PUT SKIP LIST transmite los datos (en este caso la cadena“Fixedoverflow raised because z = ...”) al archivo SYSPRINTpredeterminado. Puede definir SYSPRINT utilizando DD= statements. Paraobtener más información sobre el uso de SYSPRINT, consulte “Uso de losarchivos SYSIN y SYSPRINT” en la página 271.

PUT DATALe permite transmitir el valor de los elementos de datos a la corriente de datosde salida. Por ejemplo, si especificó la siguiente línea en su programa,transmite los valores de string1 y string2 a la corriente de datos de salida(por ejemplo, a SYSPRINT):put data (string1, string2);

DISPLAYPuede utilizar DISPLAY para transmitir información a su monitor. Puede serútil para ver el progreso de un programa, qué procedimiento se estáejecutando, etc. Por ejemplo:

Display (’End of job!’);Display (’Reached the MATH procedure’);Display (’Hurrah! Got past the string manipulation stuff...’);

Si se usa DISPLAY con sentencias PUT la salida puede aparecer en un ordenimpredecible. Para obtener más información sobre el uso de DISPLAY, consulte“Entrada y salida de la sentencia DISPLAY” en la página 259.

Usar volcados para la depuraciónCuando depura sus programas, suele resultar útil conseguir una salida impresa(volcado) de todo o parte del almacenamiento que utiliza el programa. Tambiénpuede utilizar un volcado para proporcionar información de rastreo. Lainformación de rastreo le ayuda a ubicar el origen de los errores de su programa.

Hay dos tipos útiles de volcado:PLIDUMPSNAP

Técnicas de depuración PL/I

Capítulo 9. Prueba y depuración de programas 219

Page 242: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

El uso de la opción de tiempo de compilación IMPRECISE puede conducir a unainformación de rastreo incompleta. Para obtener más información sobre la opciónIMPRECISE, consulte “IMPRECISE” en la página 66.

Volcados PL/I formateados—PLIDUMPUtilice PLIDUMP para obtener:v Información de rastreo que le permite ubicar el punto de origen de una

condición en su programa fuente.v Información sobre el archivo, incluyendo: los atributos de los archivos abiertos

en el momento del volcado, los valores de determinadas funciones incorporadaspara el manejo de archivos y el contenido del almacenamiento intermedio deentrada/salida.

Para conseguir un volcado PL/I formateado, tiene que incluir una llamada aPLIDUMP en el programa. La sentencia CALL PLIDUMP puede aperecer encualquier lado en el que aparezca una sentencia CALL. La forma es la siguiente:

call plidump(’dump options string’, ’dump title string’);

serie de opciones de volcadoUna expresión que especifica una serie que consta de cualquiera de lossiguientes caracteres de opciones de volcado:

T–TracePL/I genera una rastreo de llamada.

NT–No traceEl volcado no proporciona un rastreo de llamada.

F–File informationEl volcado proporciona un conjunto completo de atributos para todos losarchivos abiertos, más el contenido de los almacenamientos intermedios deentrada/salida accesibles.

NF–No file informationEl volcado no incluye información sobre el archivo.

S–StopEl programa termina después del volcado.

E–ExitEl subproceso actual o el programa (si es el subproceso principal) terminadespués del volcado.

K Omitido.

NK Omitido.

C–ContinueEl programa continúa después del volcado.

PL/I lee opciones de izquierda a derecha. Ignora las opciones no válidas y, sihay opciones contradictorias, toma las opciones de más a la derecha.

cadena de título de volcadoUna expresión que se convierte en carácter si es necesario y se imprime comocabecera en el volcado. La cadena no tiene límite de longitud práctico. PL/Iimprime esta cadena como cabecera en el volcado. Si se omite la cadena decaracteres, PL/I no imprime una cabecera.

Si el programa llama a PLIDUMP un número de veces, el programa deberíautilizar una cadena de caracteres de identificador de usuario distinta en cada

Técnicas de depuración PL/I

220 PL/I for WindowsGuía de programación

Page 243: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ocasión. Esto simplifica la identificación del punto en el que se produce elvolcado. Además de esta cabecera, cada invocación nueva de PLIDUMPimprime otra cabecera sobre el identificador de usuario que muestra la fecha,la hora y el número de página 1.

valores predeterminados PLIDUMP: Las opciones de volcado predeterminadasson T, F y C con una cadena de título de volcado nulo:

plidump(’TFC’, ’ ’);

Codificación PLIDUMP recomendada: Un programa puede llamar a PLIDUMPdesde cualquier parte del programa, pero el método habitual para depurar esllamar a PLIDUMP desde una unidad ON. Como la continuación después delvolcado es opcional, el programa puede utilizar PLIDUMP para conseguir unaserie de volcados mientras se ejecuta el programa.

Puede utilizar la variable de entorno DD:plidump para especificar el lugar en el quedebe ubicarse la salida PLIDUMP, por ejemplo:

set dd:plidump = d:\mydump;

En su especificación PLIDUMP, no puede alterar otras opciones como RECSIZE. Laasociación de dispositivo predeterminado para el archivo es stderr:.

Ejemplo de PLIDUMP: Cuando ejecuta el programa que se muestra en laFigura 5, se produce un volcado formateado como el que se ve en la Figura 6 en lapágina 222.

La llamada a PLIDUMP en el procedimiento IssueDump no especifica ningunaopción de PLIDUMP (aparecen como las primeras de las dos cadenas decaracteres). Tenga en cuenta que los archivos predeterminados PL/I SYSIN ySYSPRINT se han abierto de forma explícita para que el volcado formateadomuestre el contenido de sus fragmentos del almacenamiento intermedio deentrada/salida.

TestDump: proc options(main);declare

Sysin input file,Sysprint stream print file;

open file(Sysprint);open file(Sysin);put skip list(’AbCdEfGhIjKlMnOpQrStUvWxYz’);call IssueDump;

IssueDump: proc;call plidump( ’ ’, ’Testing PLIDUMP’);

end IssueDump;

end TestDump;

Figura 5. Código PL/I que produce un volcado formateado

Técnicas de depuración PL/I

Capítulo 9. Prueba y depuración de programas 221

Page 244: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

�1� Fecha y hora en la que se invocó PLIDUMP. Cada llamada PLIDUMPindependiente tiene esta información.

�2� La cadena de caracteres especificada en la llamada PLIDUMP (la segundade las dos cadenas proporcionadas a PLIDUMP) que es muy útil paraidentificar el volcado si se producen varios volcados.

�3� Información de rastreo, incluida entre * * * Calling trace * * * y * * *End of calling trace * * *. Esta información le permite rastrear losprocedimientos desde los que se llamó PLIDUMP. En el ejemplo anterior,PLIDUMP se llamó desde el procedimiento ISSUEDUMP que está anidadoal procedimiento TESTDUMP. Los desplazamientos hexadecimales de cadaprocedimiento también se incluyen en la información de rastreo.

La información de rastreo se proporciona de forma predeterminada comola opción T y se puede suprimir especificando la opción NT paraPLIDUMP.

�4� Atributos de archivo de SYSIN (abierto explícitamente en el programa).

�5� Opciones ENVIRONMENT del archivo SYSIN.

�6� Valores de funciones incorporadas de entrada/salida relevantes para elarchivo SYSIN.

�1� * * * PLIDUMP * * * Date = 910623 Time = 142249090 Page 0001

�2� User identifier: Testing PLIDUMP

�3� * * * Calling trace * * *IBM0092I The PL/I PLIDUMP Service was called with Traceback (T) optionAt offset +00000024 in procedure with entry ISSUEDUMPFrom offset +0000010B in procedure with entry TESTDUMP

* * * End of calling trace * * *

* * * File Information * * *Attributes of file SYSIN

�4� STREAM INPUT EXTERNAL�5� ENVIRONMENT( CONSECUTIVE RECSIZE(80) LINESIZE(0) )�6� I/O Built-in functions: COUNT(0) ENDFILE(0)�7� I/O Buffer: 000D9008 00000000 00000000 00000000 00000000 ’................’

000D9018 00000000 00000000 00000000 00000000 ’................’000D9028 00000000 00000000 00000000 00000000 ’................’000D9038 00000000 00000000 00000000 00000000 ’................’000D9048 00000000 00000000 00000000 00000000 ’................’000D9058 0000 ’..’

Attributes of file SYSPRINTSTREAM OUTPUT PRINT EXTERNALENVIRONMENT( CONSECUTIVE RECSIZE(124) LINESIZE(120) PAGESIZE(60) )I/O Built-in functions: PAGENO(1) COUNT(1) LINENO(1)

�8� I/O Buffer: 000D8008 20416243 64456647 68496A4B 6C4D6E4F ’ AbCdEfGhIjKlMnO’000D8018 70517253 74557657 78597A20 0D0A0000 ’pQrStUvWxYz ....’000D8028 00000000 00000000 00000000 00000000 ’................’000D8038 00000000 00000000 00000000 00000000 ’................’000D8048 00000000 00000000 00000000 00000000 ’................’000D8058 00000000 00000000 00000000 00000000 ’................’000D8068 00000000 00000000 00000000 00000000 ’................’000D8078 00000000 00000000 00000000 ’............’

* * * End of File Information * * ** * * End of Dump * * * * * *

Figura 6. Ejemplo de salida de PLIDUMP

Técnicas de depuración PL/I

222 PL/I for WindowsGuía de programación

Page 245: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

�7� Contenido del almacenamiento intermedio de entrada/salida del archivoSYSIN. La primera columna es la dirección hexadecimal, las siguientescolumnas son el contenido hexadecimal de la memoria.

�8� Contenido del almacenamiento intermedio de entrada/salida deSYSPRINT. Tenga en cuenta que la segunda cadena de caracteres que sesuministra a (AbCd...) está incluida en el almacenamiento intermedio deentrada/salida, tal y como se ve en la representación de texto delalmacenamiento intermedio de entrada/salida en el lado derecho de la fila.

Volcados SNAP para información de rastreoAunque no es un “volcado” en el sentido más estricto, la opción de tiempo decompilación SNAP se utiliza para descubrir qué condiciones de error surgen en elprograma y dónde surgen. SNAP proporciona la misma información de rastreo quela opción PLIDUMP “T” (consulte “Volcados PL/I formateados—PLIDUMP” en lapágina 220). Al igual que PLIDUMP, SNAP puede emitirse varias veces en laejecución de un programa.

Un ejemplo de llamada de un volcado SNAP es:on attention snap;

Esta sentencia llama a un volcado SNAP si surge la condición ATTENTION.

Utilizar el manejo de condiciones y errores para la depuraciónEl manejo de condiciones de PL/I es una herramienta potente para depurarprogramas. Todos los errores detectados en tiempo de ejecución están asociados acondiciones. Puede manejar estas condiciones de una de las siguientes maneras:v Escribiendo unidades ON que especifiquen qué debería hacer el programa si se

lanza una determinada condición.v Aceptando la acción estándar del sistema.

Terminología del manejo de condiciones y erroresDebería familiarizarse con varios términos utilizados en el manejo de condiciones yerrores PL/I. Los términos se muestran a continuación:

EstablecidoUna unidad ON está establecida cuando se ejecuta la sentencia ON. Deja deestar establecida cuando se ejecuta una sentencia ON o REVERT que hacereferencia a la misma condición, o cuando se termina el bloque asociado.

HabilitadoUna condición está habilitada cuando la aparición de la condición resulta en laejecución de una unidad ON o una acción estándar.

Interrupciones y condiciones PL/IAlgunas condiciones PL/I se detectan mediante interrupciones de máquina.Otras se detectan con códigos de prueba especiales en los módulos debiblioteca de tiempo de ejecución o en el programa compilado.

descendiente estáticamente y dinámicamenteDescendiente estático y dinámico son términos utilizados para definir losdispositivos de manejo de errores. Las unidades ON son dinámicamentedescendientes; es decir, se heredan de un procedimiento de llamada en todaslas circunstancias. La habilitación de condiciones es estáticamente descendiente;es decir, se hereda del bloque contenedor en el programa fuente. Losprocedimientos estáticamente descendientes se pueden determinar durante lacompilación. Los procedimientos dinámicamente descendientes pueden no

Técnicas de depuración PL/I

Capítulo 9. Prueba y depuración de programas 223

Page 246: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

conocerse hasta el tiempo de ejecución. Figura 7 muestra un ejemplo deprocedimientos estáticamente y dinámicamente descendientes.

Descendiente estáticamente:La habilitación del prefijo SIZE en el procedimiento B solo la hereda elprocedimiento contenido C, independientemente de qué procedimiento llame a cuál.

Descendiente dinámicamente:La unidad ON ON ERROR SNAP la hereda cualquier procedimiento llamado por By cualquier procedimiento al que se llame después. De ahí que, si B llama a D, quea su vez llama a E, la unidad ON se establece en el procedimiento E.

Retorno normalUn retorno normal es un retorno de un bloque al que se ha llamado despuésde alcanzar la sentencia END o RETURN, en lugar de alcanzar una sentenciaGOTO de un bloque. En un contexto de manejo de errores, la devoluciónnormal significa el retorno normal de una unidad ON. La acción que se tomatras un retorno normal de una unidad ON se especifica en la Referencia delenguaje PL/I.

Acción estándar del sistemaLa acción estándar del sistema hace referencia a la acción predeterminadadefinida por PL/I que se lleva a cabo cuando se produce una condición para loque no se ha establecido una unidad ON.

Conceptos del descriptor de erroresDebería conocer los siguientes conceptos de manejo de errores cuando intentadepurar programas PL/I. Para obtener más información sobre el manejo decondiciones, consulte Referencia de lenguaje PL/I.

Recursos del sistemaEl sistema operativo ofrece recursos de manejo de errores. Hay varias situacionesque puede provocar una interrupción de la máquina, generando una entrada en elsupervisor del sistema. El programa de control de PL/I puede utilizar rutinasespecificadas para definir la acción que se va a llevar a cabo después de estas

┌──────────────│(SIZE):B:PROC;│ON ERROR SNAP;│ .│ .││CALL C;│ ┌───────│ │C:PROC;│ ││ │END C;│ └───────│CALL D;│END B;└──────────────

┌─────── ┌───────│D:PROC; │E:PROC;│. ││. ││ ││CALL E; ││END D; │END E;└─────── └──────

Figura 7. procedimientos descendientes estáticamente y dinámicamente

Técnicas de depuración PL/I

224 PL/I for WindowsGuía de programación

Page 247: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

interrupciones. El programa de control PL/I también puede pasar el control aunidades ON especificadas por el programador PL/I.

Recursos de lenguajeEl lenguaje PL/I y su entorno de ejecución amplían los recursos de manejo deerrores que ofrece el sistema operativo. hay muchas situaciones que puedenprovocar interrupciones en PL/I, y algunas situaciones (como ENDFILE) puedenutilizarse para controlar el flujo de programa normal en lugar de para manejarerrores. Las unidades ON le permiten conseguir el control después de la mayoríade interrupciones.

Si no escribe unidades ON para conseguir el control después de las interrupciones,puede:v Aceptar la acción estándar del sistemav Elegir si determinadas condiciones pueden provocar interrupciones o no

habilitando e inhabilitando dichas condiciones. Si se inhabilita la condición, nose llevará a cabo la acción estándar del sistema ni de la unidad ON cuando seproduzca la condición.

La mayoría de condiciones PL/I se producen a causa de errores en la lógica delprograma o en los datos proporcionados. Sin embargo, hay algunas que no estánconectadas a errores. Se trata de condiciones de tipo ENDFILE, que sin díficiles depredecir porque pueden producirse en cualquier momento durante la ejecución delprograma.

PL/I tiene mensajes system y mensajes snap:

Mensajes del sistemaSi una unidad ON contiene SNAP y SYSTEM, el mensaje PL/I es básicamenteel mensaje SYSTEM de PL/I seguido de una de estas tres líneas (o por unacombinación de ellas):

From offset xxx in a BEGIN block

From offset xxx in procedure xxx

From offset xxx in a condition_name ON-unit

Estos mensajes se repiten con la frecuencia que sea necesaria para seguir elrastro hasta el procedimiento principal.

Mensajes SNAPSi una unidad ON solo contiene SNAP, el mensaje PL/I resultante comienza dela siguiente manera. El mensaje continúa como en los mensajes SNAPSYSTEM.

Condition_name condition was raised at offset xxx in procedure xxx.

Determinar números de sentencias mediante desplazamientos:

Si quiere convertir números de desplazamiento en números de sentencia, siga estospasos:v Utilice la opción de tiempo de compilación OFFSET durante la compilaciónv Abra el archivo de listado de objetos (.cod) resultantev Busque y localice el desplazamiento en la primera columna y busque el número

de sentencia de la última sentencia de origen incluida en el listado.

Funciones incorporadas para el manejo de condiciones:

Técnicas de depuración PL/I

Capítulo 9. Prueba y depuración de programas 225

Page 248: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PL/I también proporciona funciones incorporadas para el manejo de errores yseudovariables. Esto le permite inspeccionar varios campos asociados con lainterrupción y, en ciertos casos, corregir el contenido de los campos que causan elerror.

Estas funciones incorporadas incluyen:

DATAFIELDONCHARONCODEONCONDCONDONCONDID

ONCOUNTONFILEONGSOURCEONKEYONLOC

ONSOURCEONWCHARONWSOURCE

Para obtener información detallada sobre las seudovariables y las funcionesincorporadas de manejo de errores, consulte la Referencia de lenguaje PL/I.

Unidades ON para condiciones cualificadas y no cualificadasSolo puede haber una unidad ON establecida para un condición no cualificada enun determinado punto de programa, pero puede haber más de una unidad ONestablecida para condiciones cualificadas. Por ejemplo, al manejar la condiciónENDFILE como cualificada para archivos distintos, puede tener una unidad ONestablecida para manejar la aparición de ENDFILE para cualquiera de los archivos.

Condiciones utilizadas paras las pruebas y la depuraciónLas siguientes condiciones resultan muy útiles para probar y depurar susprogramas:v SUBSCRIPTRANGEv STRINGSIZEv STRINGRANGE

Al ejecutar su programa con estas condiciones disminuye el rendimiento, pero lasunidades ON de estas condiciones actúan como potentes herramientas paraencontrar el origen de los errores de su programa. Puede habilitar cualquiera deestas condiciones escribiendo unidades ON para ellas. Después, si se lanza lacondición, la unidad ON puede definir una acción que le diga la causa del error.

Por ejemplo, si su programa lanza FIXEDOVERFLOW, resulta útil emitir PUTDATA para descubrir los valores de sus datos que conducen a la condición que selanza.

Además, la opción PREFIX es muy útil porque puede habilitar condiciones sintener que editar su programa.

Errores de programación habitualesUn error en la ejecución de un programa PL/I puede estar producido por:v Errores lógicos en un programa fuentev Uso no válido de PL/I (por ejemplo, variables sin inicializar)v Llamada a variables de entrada sin inicializarv Bucles y otros errores imprevistosv Datos de entrada/salida inesperadosv Terminación inesperada del programav Otros resultados inesperadosv Anomalía de sistemav Bajo rendimiento

Técnicas de depuración PL/I

226 PL/I for WindowsGuía de programación

Page 249: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Errores lógicos en sus programas fuenteLos errores lógicos en un programa fuente suelen ser difíciles de detectar y a vecespuede parecer errores del compilador o la biblioteca.

Algunos errores habituales en los programas fuente son:v Error al convertir correctamente a partir de datos aritméticosv Operaciones aritméticas y de manipulación de cadenas incorrectasv Error de coincidencia entre listas de datos y listas de formatos

Uso no válido de PL/IUn malentendido en el lenguaje puede provocar un fallo aparente del programa.Por ejemplo, cualquiera de los siguientes errores de programación puedenprovocar el el programa falle:v Uso de variables sin inicializarv Uso de variables controladas que no se han asignadov Lectura de registros en estructuras incorrectasv Uso incorrecto de subíndices de matrizv Uso incorrecto de variables de punterov Conversión incorrectav Operaciones aritméticas incorrectasv Operaciones de manipulación de cadenas incorrectasv Liberación o uso de almacenamiento que nunca se asignó o que ya se liberó

Llamar a variables de entrada no inicializadasSi llama a una variable de entrada no inicializada:v Windows lanzará una excepción de protección casi inmediatamente.v Windows 98, sin embargo, no lanza una excepción de protección de forma

inmediata y le permite ejecutar instrucciones en memoria baja lo que puedeprovocar un comportamiento imprevisible del programa.

Bucles y otros errores imprevistosSi se detecta un error durante una ejecución de un programa PL/I, y no seproporciona ninguna unidad ON en el programa para terminar la ejecución ointentar una recuperación, el trabajo termina de forma anómala. Sin embargo,puede registrar el estado de su programa en el punto en el que se produjo el errorutilizando una unidad ERROR ON que contenga las sentencias:

on errorbegin;on error system;call plidump (’TFBS’,’This is a dump’);end;

La sentencia ON ERROR SYSTEM; incluida en la unidad ON garantiza que lossiguientes errores provocados por un intento de transmitir variables noinicializadas no tendrán como resultado un bucle sin fin.

Si quiere actuar en base al tipo específico de la condición que se está tratando,utilice la función ONCONDID (para obtener más información sobre esta función,consulte la Referencia de lenguaje PL/I):

on anyconditionbegin;on anycondition system;select( oncondid() );

when( condid_ofl ).

Errores de programación habituales

Capítulo 9. Prueba y depuración de programas 227

Page 250: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

.

.when( condid_ufl )

.

.

.when( condid_zdiv )

.

.

.otherwise

resignal;end;end;

Consejos para manejar buclesPara evitar que se produzca un bucle permanente en una unidad ON, utilice elsiguiente segmento de código:

on Error begin;on Error System;

.

.

.end;

Si su programa entra en un bucle sin fin, su principal preocupación será salir delbucle sin que se apague la máquina. La siguiente solución es la más recomendadapara manejar bucles sin fin:v Cuando entre en un bucle, pulse Ctrl-Pausa para terminar el programa. En este

entorno no hay ninguna unidad ATTENTION ON.

Datos de entrada/salida inesperadosUn programa tiene que incluir comprobaciones para garantizar que cualquier datode entrada o salida erróneo se detecta antes de que pueda provocar que elprograma falle.

Utilice la opción COPY de las sentencias GET y PUT si quiere comprobar losvalores obtenidos por la entrada y salida orientada a secuencia. Los valores serecogen en el archivo especificado en la opción COPY. Si no se proporcionó ningúnnombre de archivo, se asume SYSPRINT.

Utilice una función incorporada VALID para comprobar la validez de losidentificadores PICTURE y FIXED DECIMAL.

Para obtener más información sobre las características que conducen a unaentrada/salida inesperada, consulte Capítulo 1, “Portar aplicaciones entreplataformas”, en la página 3. Muchas de las características que conducen aproblemas de portabilidad (como diferencias secuencias de clasificación en ASCIIyEBCDIC) también pueden provocar entradas y salidas inesperadas en susprogramas PL/I.

Terminación inesperada del programaSi su programa termina de forma anómala sin un mensaje de diagnóstico entiempo de ejecución, el error que provocó el fallo probablemente impidió que semostrara el mensaje. Las causas posibles de este tipo de comportamiento son:v Intentar ejecutar módulos que no se compilaron con esta versión del compilador.v Exportación incorrecta DD: sentencias.

Errores de programación habituales

228 PL/I for WindowsGuía de programación

Page 251: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v Sobrescribir áreas de almacenamiento que contienen instrucciones ejecutables,particularmente el área de comunicaciones PL/I. Cualquiera de estas opcionespuede hacer que se sobrescriban las áreas de almacenamiento:– Asignar un valor a un elemento de matriz inexistente. Por ejemplo:

dcl array(10);...

do I = 1 to 100;array(I) = value;

Puede detectar este tipo de error en un módulo de compilación habilitando lacondición SUBSCRIPTRANGE. Cada intento de acceder a un elemento que seencuentra fuera del rango declarado de valores subíndice lanzará la condiciónSUBSCRIPTRANGE. Si no hay ninguna unidad ON para esta condición, seimprime un mensaje de diagnóstico y se lanza la condición ERROR.Aunque este método resulta costoso en términos de tiempo de ejecución yespacio de almacenamiento, es una valiosa ayuda para probar el programa.Para obtener más información sobre el manejo de errores, consulte “Utilizar elmanejo de condiciones y errores para la depuración” en la página 223.

– Usa un valor de ubicador incorrecto para una variable de ubicador (puntero odesplazamiento). ESte tipo de error es posible si se obtiene un valor deubicador utilizando una transmisión orientada al registro.Asegúrese de que los valores de ubicador creados en un programa,transmitidos a un conjunto de datos y recuperados posteriormente para suuso en otro programa, son válidos para su uso en el segundo programa.

– Intentar liberar una variable que no sea BASED. Esto puede ocurrir cuandolibera una variable BASED después de que se haya modificado su valor depuntero calificador. Por ejemplo:

dcl a static,b based (p);allocate b;p = addr(a);free b;

– Utilizar un valor incorrecto para una etiqueta, entrada o variable de archivo.Los valores de etiqueta, entrada y archivo que se transmites y se recuperanposteriormente están sujetos a los mismos errores que los descritosanteriormente para los valores de ubicador.

– Utilizar una seudovariable SUBSTR para asignar una cadena a una ubicaciónmás allá del final de la cadena de destino. Por ejemplo:

dcl x char(3);i = 3substr(x,2,i) = ’ABC’;

Para detectar este tipo de error en un nódulo compilado, utilice la condiciónSTRINGRANGE (para más información, consulte “Condiciones utilizadasparas las pruebas y la depuración” en la página 226).

Otros resultados inesperadosComo Windows responde a condiciones de coma flotante de formas diferentes, esposible que experimente un flujo de programa alterado. Una consecuencia del flujode programa alterado es que las condiciones no se lanzan porque pasan a estarinhabilitadas.

Por ejemplo, aunque el uso de la opción de tiempo de compilación NOIMPRECISEproporciona una mejor detección de errores de coma flotante que IMPRECISE, el

Errores de programación habituales

Capítulo 9. Prueba y depuración de programas 229

Page 252: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

sistema operativo Windows no siempre detecta excepciones de coma flotante deforma inmediata. Si tiene una sentencia en su programa que es probable que lanceuna excepción de coma flotante, puede evitar este problema de deteccióndelimitando la sentencia en un bloque BEGIN.

Error de subrutina de compilador o bibliotecaSi tiene la certeza de que el error está provocado por un fallo del compilador o deuna subrutina de biblioteca, póngase en contacto con IBM.

Mientras tanto, puede intentar encontrar un método alternativo de llevar a cabo laoperación que causa el problema.Normalmente es posible eludir el problemaporque el lenguaje PL/I suele proporcionar un método alternativo de llevar a cabouna operación determinada.

Anomalía de sistemaLos errores del sistema incluyen funcionamiento incorrecto y errores del sistemaoperativo. Los mensajes de sistema identifican estos errores en el operador.

Bajo rendimientoEl bajo rendimiento no está necesariamente causado por errores y puede asociarsea requisitos excesivos de memoria y tiempo de ejecución. Una cosa a tener encuenta es que muchas técnicas de depuración (como habilitar SUBSCRIPTRANGE)suelen reducir el rendimiento.

La opción de tiempo de compilación OPTIMIZE puede aumentar el rendimiento(consulte “OPTIMIZE” en la página 101). Para obtener más información sobrecómo mejorar el rendimiento del programa, consulte Capítulo 17, “Mejora delrendimiento”, en la página 363.

Errores de programación habituales

230 PL/I for WindowsGuía de programación

Page 253: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Parte 4. Entrada y salida

© Copyright IBM Corp. 1998, 2013 231

Page 254: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

232 PL/I for WindowsGuía de programación

Page 255: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 10. Utilizar conjuntos de datos y archivos

Sus programas PL/I pueden procesar y transmitir unidades de informacióndenominadas registros. Una colección de registros se denomina conjunto de datos,pero para los productos de la estación de trabajo de PL/I, un conjunto de datospuede ser un archivo o un dispositivo. Los conjuntos de datos son coleccioneslógicas de información externa a los programas PL/I; se pueden crear y modificarmediante programas PL/I y también se puede acceder a ellos mediante estosprogramas.

Su programa PL/I reconoce y procesa información en un conjunto de datosasociándolo a una representación simbólica del conjunto de datos denominadoarchivo PL/I. Este archivo PL/I representa las características independientes deentorno de un conjunto de operaciones de entrada y salida.

Para minimizar confusiones, en este libro se utiliza el término archivo PL/I parareferirse al archivo declarado y utilizado en un programa PL/I. Los términosconjunto de datos y archivo estación de trabajo (o dispositivo estación de trabajo)se utilizan para hacer referencia a la colección de datos en un dispositivo deentrada/salida externo. En algunos casos los conjuntos de datos no tienen nombre;el sistema los conoce por el dispositivo en el que se encuentran.

Tipos de conjuntos de datosPL/I define los dos siguientes tipos de conjuntos de datos:v Conjunto de datos nativo. Es un término PL/I utilizado para definir archivos de

texto convencionales y dispositivos asociados con la plataforma en uso.v Conjunto de datos VSAM de la estación de trabajo. Se utiliza para hacer

referencia a archivos que son similares a los conjuntos de datos VSAM delsistema principal. PL/I utiliza el método de acceso DDM, ISAM o BTRIEVE paracrear y acceder a estos tipos de conjuntos de datos.

Distinciones de plataforma

Este capítulo hace referencia a los métodos de acceso disponibles en los productosde laestación de trabajo de PL/I; sin embargo, no todos los métodos estándisponibles en todas las plataformas. Utilice la siguiente información comoreferencia:v DDM— soportado solo en AIXv ISAM— soportado solo en AIX y Windowsv BTRIEVE— soportado solo en Windowsv REMOTE— soportado en Windows para acceder a archivos de datos de sistema

principal

Para convertir archivos VSAM del sistema principal a los archivosDDM, ISAM oBTRIEVE correspondientes, siga el procedimiento documentado en el prólogo delprograma de utilidad LODVSAM (no compatible con AIX). Asegúrese de queespecifica el método de acceso apropiado AMTHD(DDM|ISAM|BTRIEVE).

Para convertir archivos DDM, ISAM o BTRIEVE a los archivos VSAM del sistemaprincipal correspondientes, siga el procedimiento documentado en el prólogo del

© Copyright IBM Corp. 1998, 2013 233

Page 256: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

programa de utilidad RELOAD (no compatible conAIX). Estos programas deutilidad deberían estar en el directorio de muestras de PL/I for Windows.

El programa PL/I puede acceder remotamente a los conjuntos de datos queresiden en el sistema principal utilizando el producto Distributed FileManagerproduct que se incluye con SMARTdata Utilities (SdU), uno de los componentes dePL/I for Windows. Encontrará información sobre el uso de SdU en el libro en líneadel producto. Los libros en línea de SdU solo se instalan si selecciona esecomponente.

En Windows, consulte la Guía de usuario de Distributed FileManager.

Hay varios tipos de conjuntos de datos nativos:v Archivos de texto convencionalesv Dispositivos de caracteresv Conjuntos de datos de longitud fija

Tanto el registro de E/S como el stream de E/S pueden utilizarse para acceder aestos tipos de conjuntos de datos, a los que solo se puede acceder de formasecuencial.

Otros tipos de conjuntos de datos definidos por PL/I incluyen:v Longitud variantev Regionalv Conjuntos de datos VSAM de la estación de trabajo

Solo se puede utilizar el registro de E/S para acceder a los conjuntos de datosregionales. El acceso puede ser secuencial o directo.

Conjuntos de datos nativosUn conjunto de datos nativos, en términos de PL/I, define archivos de textoconvencionales y dispositivos asociados con la plataforma que se está utilizando.

Dispositivos y archivos de texto convencionalesUn archivo de texto convencional tiene los registros lógicos delimitados por lasecuencia de caracteres CR - LF (retorno de carro y salto de línea) charactersequence. La mayoría de editores de texto crean, y le permiten alterar, archivos detexto convencionales. Sus programas PL/I puede crear archivos de textoconvencionales, o puede acceder a archivos de texto creador por otros programas.

Los dispositivos para los productos de la estación de trabajo son el teclado, lapantalla y la impresora. Los nombres que utilizar para referirse a ellos en PL/Ison:

En un entorno no interactivo, SYSIN y SYSPRINT pueden ser conductos oarchivos.

NUL: (o NUL)Dispositivo de salida nulo (para descartar salida)

STDIN:Archivo de entrada estándar (de forma predeterminada es CON)

Salida estándar:Archivo de salida estándar (de forma predeterminada es CON)

Error estándar:Archivo de mensaje de error estándar (de forma predeterminada es CON)

Tipos de conjuntos de datos

234 PL/I for WindowsGuía de programación

Page 257: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Nota: STDIN:, STDOUT:, y STDERR: puede redirigirse, mientras que otrosnombres de dispositivo no.

Conjuntos de datos de longitud fijaPL/I también le permite tratar un archivo como un conjunto de registros delongitud fija. Sus programas PL/I puede crear conjuntos de datos de longitud fija,o acceder a archivos existentes como conjuntos de datos de longitud fija. El accesoa datos no trata el retorno de carro (CR) oel salto de línea (LF) como caracteres conun significado especial. En concreto, la secuencia CR - LF no delimita registros,aunque estos caracteres se incluyen en el conjunto de datos. Es la longitud queespecifica la que determina qué es lo que PL/I considera un registro dentro delconjunto de datos. Este tipo de conjunto de datos tiene la restricción de que elnúmero total de caracteres del conjunto de datos tiene que poder dividirse deforma exacta entre la longitud que especifique.

A los conjuntos de datos de longitud fija solo se puede acceder de formasecuencial.

Conjuntos de datos adicionalesOtros tipos de conjunto de datos incluyen los conjuntos de datos de longitudvariable, regionales y VSAM de la estación de trabajo.

Conjuntos de datos de longitud variableSu programa PL/I también puede crear y acceder a conjuntos de datos en los quecada registro tiene un prefijo de 2 bytes que especifica el número de bytes del restodel registro. A diferencia de los registros delimitados por CR - LF, estos archivos delongitud variable pueden tener registros que posiblemente contengan patrones debits arbitrarios.

Conjuntos de datos regionalesEn Capítulo 12, “Definir y utilizar conjuntos de datos regionales”, en la página 283encontrará una descripción de los conjuntos de datos regionales y de cómoutilizarlos.

Nota: Regional en este contexto significa los mismo REGIONAL(1) en PL/I paraz/OS.

Conjuntos de datos VSAM de Estación de trabajoLos productos de la estación de trabajo PL/I soportan la organización de archivosVSAM. Hay tres tipos de conjuntos de datos VSAM en la estación de trabajo:v Consecutivo, similar a un conjunto de datos con entrada secuenciada (ESDS)

VSAMv Relativo, similar a un conjunto de datos de registro relativo (RRDS) VSAMv Indexado, similar a un conjunto de datos de secuencia de claves (KSDS) VSAM

Los productos de la estación de trabajo PL/I actualmente soportan los siguientesmétodos para acceder a conjuntos de datos VSAM:v ISAM (AIX y Windows)v BTRIEVE (solo Windows)v REMOTE para acceder a archivos de datos del sistema principal en Windows

Método de acceso DDMLos conjuntos de datos DDM son archivos orientados a registro tal y como sedefine en la arquitectura SMARTdata Utilities (SdU). Los conjuntos de datosVSAM de la Estación de trabajo que utilizan el método de acceso DDM

Tipos de conjuntos de datos

Capítulo 10. Utilizar conjuntos de datos y archivos 235

Page 258: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

pueden existir en los sistemas locales. Puede compilar y ejecutar la mayoría deprogramas del sistema principal existentes que hacen referencia a los conjuntosde datos VSAM del sistema principal.

Un conjunto de datos con clave DDM está representado por dos archivos, unodenominado base y otro índice principal. Los registros del conjunto de datos seconservan en la base; el índice principal contiene información sobre las clavesprimarias del conjunto de datos. Cuando cree un conjunto de datos DDM conclave, especifique el nombre de la base; DDM genera un nombre para el índiceprincipal, que se deriva del nombre de la base.

Cuando utilice conjuntos de datos DDM, no tendrá que preocuparse por lalongitud del registro, siempre y cuando sus registros no superen la longitudmáxima especificada.

Puede compilar y ejecutar la mayoría de programas del sistema principalexistentes que hacen referencia a los conjuntos de datos VSAM del sistemaprincipal creando el conjunto de datos VSAM de la estación de trabajo en susistema PC antes de ejecutar el programa.

Método de acceso ISAMA no ser que se especifique lo contrario, el término ISAM en este capítulo hacereferencia al sistema de archivos STL (lenguaje estándar), que es un método deacceso local y no al ISAM del sistema principal. Los conjuntos de datos ISAMse almacenan en un archivo y solo pueden existir en un sistemas de archivoslocales.

Método de acceso SFSEl términoSFS en este capítulo hace referencia a Encina SFS, que es uno de lossistemas de archivos utilizado por CICS.

Método de acceso BTRIEVE (solo Windows)El método de acceso BTRIEVE se proporciona para permitirle utilizarsentencias de entrada y salida PL/I para acceder a archivos creados en CICS.Actualmente no hay soporte PL/I para BTRIEVE segmentado y clavesmúltiples.

Los conjuntos de datos BTRIEVE se almacenan en un archivo y solo puedenexistir en sistemas de archivos locales.

Método de acceso REMOTE en WindowsEl método de acceso REMOTE se proporciona para permitirle acceder de formaremota a archivos de datos del sistema principal.

Encontrará información detallada sobre VSAM de la estación de trabajo enCapítulo 13, “Definir y utilizar los conjuntos de datos VSAM de la estación detrabajo”, en la página 293.

Establecer características del conjunto de datosCuando declara o abre un archivo en su programa, le describe a PL/I lascaracterísticas del archivo. También puede utilizar una variable de entornoDD:ddname o una expresión en la opción TITLE de la sentencia OPEN paradescribirle a PL/I las características de los datos de los conjuntos de datos o de losarchivos PL/I asociados a ellos. Consulte el apartado “Asociar un archivo PL/I aun conjunto de datos” en la página 254 para obtener más información.

No siempre tiene que describir los datos en el programa y fuera de él;normalmente sirve para los dos conjuntos de datos y para los archivos PL/I

Tipos de conjuntos de datos

236 PL/I for WindowsGuía de programación

Page 259: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

asociados. De hecho, describir las características de los datos en un único lugartiene sus ventajas. Estas ventajas se describen más adelante en este capítulo y enlos capítulos siguientes.

Para describir los datos de programa y los conjuntos de datos que utiliza, tiene queentender cómo mueve y almacena PL/I los datos.

RegistrosUn registro es la unidad de datos transmitida a y desde un programa. Puedeespecificar la longitud de los registros en la opción RECSIZE para cualquiera de lossiguientes elementos:

Variable de entorno DD_ddnameAtributo PL/I ENVIRONMENTOpción TITLE de la sentencia OPEN

Excepto en determinados archivos continuos, en los que se aplican los valorespredeterminados, tiene que especificar la opción RECSIZE cuando su programaPL/I crea un conjunto de datos. Para obtener más información sobre los archivoscontinuos, consulte Capítulo 11, “Definir y utilizar conjuntos de datosconsecutivos”, en la página 261.

Tiene que especificar también la opción RECSIZE cuando su programa accede a unconjunto de datos no creado por PL/I.

Tenga en cuenta que un editor puede alterar un conjunto de datos de formaimplícita. Tiene que tener cuidado cuando examine un archivo no CR - LFutilizando un editor, porque la mayoría de editores insertan automáticamente CR -LF o secuencias de caracteres similares.

Formatos de registroLos registros de un conjunto de datos pueden tener uno de los siguientes formatos:

Longitud sin definirLongitud fijaLongitud variable

En el caso de un archivo nativo, especifique un formato de registro de longitud nodefinida o longitud fija en la opción TYPE de la información DD. No necesitaespecificar un formato de registro para los conjuntos de datos VSAM deestación detrabajo; implícitamente constan de varios registros de longitud variable.

Organización del conjunto de datosLas opciones del atributo ENVIRONMENT de PL/I que especifican lasorganización del conjunto de datos son:

CONSECUTIVEORGANIZATION(CONSECUTIVE)ORGANIZATION(INDEXED)ORGANIZATION(RELATIVE)REGIONAL(1)VSAM

Cada una de ellas se describe en “Especificar característicaa utilizando el atributoPL/I ENVIRONMENT” en la página 238.

Si no especifica la opción del organización del conjunto de datos en el atributoENVIRONMENT, la opción predeterminada es CONSECUTIVE.

Establecer características del conjunto de datos

Capítulo 10. Utilizar conjuntos de datos y archivos 237

Page 260: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Especificar característicaa utilizando el atributo PL/IENVIRONMENT

El atributo ENVIRONMENT de la sentencia DECLARE le permite especificardeterminadas características del conjunto de datos en sus programas. Estascaracterísticas no forman parte del lenguaje PL/I; por lo tanto, su uso en unadeclaración de archivo podría hacer que las opciones no sean transferibles a otrasimplementaciones de PL/I.

Aquí tiene un ejemplo de cómo especificar opciones de entorno para un archivo desu programa:

declare Invoices file environment(regional(1), recsize(64));

Las opciones que puede especificar en el atributo ENVIRONMENT se definen enlas siguientes secciones.

CONSECUTIVALa opción CONSECUTIVE define un archivo con organización de conjuntos dedatos consecutiva En un conjunto de datos con organización CONSECUTIVE, losregistros se colocan en una secuencia física. Partiendo de un registro dado, laubicación del siguiente registro está determinada por su posición física en elconjunto de datos.

�� CONSECUTIVA ��

Puede utilizar la opción CONSECUTIVE para acceder a un conjunto de datosnativo utilizando una transmisión de datos orientada a secuencia u orientada aregistros. También puede utilizarla para archivos de entrada declarados con elatributo SEQUENTIAL y asociados al conjunto de datos VSAM de la estación detrabajo. En este caso, los registros de un conjunto de datos VSAM de la estación detrabajo se presentan en una secuencia de claves.

CONSECUTIVE es la organización de conjunto de datos predeterminada.

CTLASAla opción CTLASA especifica que el primer carácter de un registro se va ainterpretar como un carácter de control de impresión del Instituto nacionalestadounidense de estándares (ANSI). La opción se aplica solo a los archivosRECORD OUTPUT asociados a conjuntos de datos consecutivos.

�� CTLASA ��

Los caracteres de control de impresión ANSI, recogidos en Tabla 11 en la página262, hacen que se realice la acción antes de que se imprima el registro asociado.

Para obtener información sobre el uso de la opción CTLASA, consulte “Archivosdestinados a impresora” en la página 261.

Establecer características del conjunto de datos

238 PL/I for WindowsGuía de programación

Page 261: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Los caracteres de control de impresión de IBM Pro necesitan hasta 3 bytes más queel byte único requerido por un carácter de control de impresión ANSI. Sinembargo, no ajuste la especificación de longitud de registro lógica (consulte laopción de entorno RECSIZE) ya que PL/I añade automáticamente 3 a la longitudde registro lógica cuando especifica CTLASA.

Puede modificar el efecto de CTLASA para que el primer carácter de registros sedeje sin convertir a los caracteres de control de IBM Proprinter. Consulte la opciónde entorno ASA en “ASA” en la página 245.

No especifique la opción de entorno SCALARVARYING para operaciones de salidade impresión, ya que PL/I no sabe cómo interpretar el primer byte de datos de losregistros.

GENKEYLa opción GENKEY (clave genérica) solo se aplica a los conjuntos de datosindexados VSAM de la estación de trabajo. Le permite clasificar claves registradasen el conjunto de datos y utilizar un archivo SEQUENTIAL KEYED INPUT oSEQUENTIAL KEYED UPDATE para acceder a registros según su clase de clave.

�� GENKEY ��

Una clave genérica es una cadena de caracteres que identifica una clase de claves;todas las claves que comienzan con la cadena son miembros de esa clase. Porejemplo, las claves de registro “ABCD”, “ABCE” y “ABDF”, son todas miembrosde las clases identificadas por las claves genéricas “A” y “AB”, y las dos primerastambién son miembros de la clase “ABC”; y las tres claves de registro puedenconsiderarse miembros únicos de las clases “ABCD”, “ABCE” y “ABDF”,respectivamente.

La opción GENKEY le permite iniciar una lectura secuencia o una actualización deun conjunto de datos VSAM desde el primer registro que tiene una clave de unaclase en particular, y para un conjunto de datos INDEXED desde el primer registrono ficticio que tiene una clave de una clase en particular. Puede identificar la claseincluyendo su clave genérica en la opción KEY de una sentencia READ. Losregistros posteriores pueden leerse mediante sentencias READ sin la opción KEY.No se proporciona ninguna indicación cuando se alcanza el final de una clase declave.

Aunque puede recuperar el primer registro que tenga una clave en una claseparticular utilizando READ con la opción KEY, no puede obtener la clave real a noser que los registros tengan claves incluidas, ya que la opción KEYTO no puedeutilizarse en la misma sentencia que la opción KEY.

En el siguiente ejemplo, se asume una longitud de clave de más de 3 bytes:dcl ind file record sequential keyed

update env (indexed genkey);...

read file (ind) into (infield)key (’ABC’);

.

Establecer características del conjunto de datos

Capítulo 10. Utilizar conjuntos de datos y archivos 239

Page 262: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

.

.next: read file (ind) into (infield);

.

.

.go to next;

La primera sentencia READ hace que el primer registro no ficticio del conjunto dedatos con una clave que comienza por 'ABC' se lea en INFIELD. Cada vez que seejecuta la segunda sentencia READ, se recupera el registro no ficticio con lasiguiente clava más alta. La ejecución repetida de la segunda sentencia READpodría resultar en lecturas de registros de clases de clave más altas, ya que no seofrece ninguna indicación cuando se alcanza el final de una clase de clave. Esresponsabilidad suya comprobar cada clave si no quiere leer más allá de la clase declave. Cualquier ejecución posterior de la primera sentencia READ volvería aposicionar el archivo en el primer registro de la clase de clave 'ABC'.

Si el conjunto de datos no incluye registros con claves en la clase especificada, o sitodos los registros con clave de la clase especificada son registros ficticios, se lanzala condición KEY. Después, el conjunto de datos se posiciona en el siguienteregistro que tiene una clave más alta o al final del archivo.

La presencia o ausencia de la opción GENKEY afecta a la ejecución de unasentencia READ que proporciona una clave de origen que es más corta que lalongitud de clave especificada en el subparámetro KEYLENGTH. El subparámetroKEYLENGTH se encuentra en la sentencia de definición de datos (DD) que defineel conjunto de datos indexado. Si especifica la opción GENKEY, la clave de origense interpreta como una clave genérica y el conjunto de datos se posiciona en elprimer registro no ficticio del conjunto de datos cuya clave comience con la clavede origen.

Si no especifica la opción GENKEY, la clave de origen corta de una sentenciaREAD se rellena por la derecha con espacios en blanco hasta alcanzar la longitudde clave especificada, y el conjunto de datos se posiciona en el registro que tieneesta clave rellena (si existe tal registro). En una sentencia WRITE, una clave deorigen corta se rellena siempre con espacios en blanco.

El uso de la opción GENKEY no afecta al resultado de proporcionar una clave deorigen cuya longitud es mayor que o igual a la longitud de clave especificada. Laclave de origen, truncada por la derecha si es necesario, identifica un registroespecífico (cuya clave puede considerarse el único miembro de su clase).

GRAPHICTiene que especificar la opción GRAPHIC si utiliza variables DBCS o constantesDBCS en sentencias GET y PUT para entradas/salidas dirigidas a listados o adatos. También puede especificar la opción GRAPHIC para entradas/salidasdirigidas a edición.

�� GRAPHIC ��

Establecer características del conjunto de datos

240 PL/I for WindowsGuía de programación

Page 263: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PL/I lanza la condición ERROR para entradas/salidas dirigidas a listados o adatos si tiene gráficos en los datos de entrada o salida y no especifica la opciónGRAPHIC.

Para obtener información sobre el tipo de datos gráfico y sobre el elemento deformato G para entradas/salidas dirigidas a edición, consulte Referencia de lenguajePL/I.

KEYLENGTHLa opción KEYLENGTH especifica la longitud, n, de la clave registrada para unarchivo KEYED. Puede especificar KEYLENGTH únicamente para archivosINDEXED (véase ORGANIZATION más adelante en esta sección).

�� KEYLENGTH (n) ��

Si incluye la opción KEYLENGTH en una declaración de archivo y el conjunto dedatos asociado ya existe, el valor se utiliza para fines de comprobación. Si lalongitud de clave que especifica en la opción entra en conflicto con el valordefinido para el conjunto de datos, se lanza la condición UNDEFINEDFILE.

ISAM y BTRIEVELas claves de conservan en las páginas de índice de una archivo ISAM oBTRIEVE. La longitud de la clave tiene que definirse para PL/I cuando se creael archivo.

KEYLOCLa opción KEYLOC especifica la posición de inicio, n, de la clave incluida en losregistros de un archivo KEYED. Puede especificar KEYLOC únicamente paraarchivos INDEXED (véase ORGANIZATION más adelante en esta sección).

�� KEYLOC (n) ��

La posición, n, tiene que estar dentro de los límites:1 ≤ n ≤ recordsize - keylength + 1

Es decir, la clave no puede ser mayor que el registro y tiene que estarcompletamente dentro del registro.

Esto significa que si especifica la opción SCALARVARYING, la clave incluida nodebe solapar los dos primeros bytes del registro; por lo tanto, el valor queespecifique para KEYLOC tiene que ser mayor que 2.

Si no especifica KEYLOC al crear un conjunto de datos indexado, se asume que laclave comienza con el primer byte del registro.

Si incluye la opción KEYLOC en una declaración de archivo y el conjunto de datosasociado ya existe, el valor se utiliza para fines de comprobación. Si la posición declave que especifica en la opción entra en conflicto con el valor definido para elconjunto de datos, se lanza la condición UNDEFINEDFILE.

Establecer características del conjunto de datos

Capítulo 10. Utilizar conjuntos de datos y archivos 241

Page 264: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ISAM y BTRIEVELas claves de conservan en las páginas de índice de una archivo ISAM oBTRIEVE. La ubicación de la clave tiene que definirse para PL/I cuando secrea el archivo.

ORGANIZATIONLa opción ORGANIZATION especifica la organización del conjunto de datosasociado con el archivo PL/I.

�� ORGANIZATIONCONSECUTIVE

( INDEXED )RELATIVE

��

CONSECUTIVEEspecifica que el archivo está asociado a un conjunto de datos consecutivos.Un archivo consecutivo puede ser un conjunto de datos nativo o un conjuntode datos secuencial, directo o con clave VSAM de la estación de trabajo.

INDEXEDEspecifica que el archivo está asociado a un conjunto de datos indexados.INDEXED especifica que el conjunto de datos incluye registros dispuestos enuna secuencia lógica de acuerdo con las claves incluidas en cada registro. Losregistros lógicos se disponen en el conjunto de datos en una secuencia declaves ascendente según la secuencia de clasificación ASCII. Un archivoindexado es un conjunto de datos con clave VSAM de la estación de trabajo.

RELATIVOEspecifica que el archivo está asociado a un conjunto de datos relativos.RELATIVE esppecifica que el conjunto de datos incluye registros que no tienenclaves de registro. Un archivo relativo es un conjunto de datos directos VSAMde la estación de trabajo.Las claves relativas van de 1 a nnnn.

RECSIZELa opción RECSIZE especifica la longitud, n, de registros en un conjunto de datos.

�� RECSIZE (n) ��

En el caso de conjuntos de datos de longitud fija o regionales, RECSIZE especificala longitud de cada registro del conjunto de datos; para el resto de tipos deconjunto de datos, RECSIZE especifica la longitud máxima que pueden tener losregistros.

Si incluye la opción RECSIZE en una declaración de archivo, y el archivo estáasociado a un conjunto de datos VSAM de la estación de trabajo que ya existe, elvalor se utiliza con fines de comprobación. Si la longitud de registro que especificaen la opción entra en conflicto con el valor definido para el conjunto de datos, selanza la condición UNDEFINEDFILE.

Especifique la opción RECSIZE cuando acceda a conjuntos de datos creadosmediante programas no PL/I como editores de texto.

Establecer características del conjunto de datos

242 PL/I for WindowsGuía de programación

Page 265: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ISAM y BTRIEVETiene que especificar RECSIZE cuando utilice el método de acceso BTRIEVE oISAM.

REGIONAL(1)La opción REGIONAL(1) define un archivo con organización regional.

�� REGIONAL(1) ��

Un conjunto de datos con organización regional incluye registros de longitud fijaque no tienen claves de registro. Cada región del conjunto de datos contiene unsolo registro, cada número de región corresponde a un registro relativo delconjunto de datos (es decir, los números de región empiezan por 0 al principio delconjunto de datos).

Para obtener información sobre el uso de conjuntos de datos regionales, consulteCapítulo 12, “Definir y utilizar conjuntos de datos regionales”, en la página 283.

SCALARVARYINGLa opción SCALARVARYING se utiliza en la entrada y salida de las cadenasVARYING.

�� SCALARVARYING ��

Cuando se asigna almacenamiento para una cadena VARYING, el compiladorincluye un prefijo de 2 bytes que especifica la longitud actual de la cadena. Parauna serie de longitud variable de elementos, este prefijo se incluye en la salida, ose reconoce en la salida, únicamente si especifica SCALARVARYING en el archivo.

Cuando utiliza sentencias de modalidad de ubicación (LOCATE y READ SET) paracrear y leer un conjunto de datos con series VARYING de elementos, tiene queespecificar SCALARVARYING para indicar que está presente un prefijo delongitud, ya que el puntero que localice el búfer se asume siempre que apunta alinicio del prefijo de longitud.

Cuando especifica esta opción y se transmiten series VARYING de elementos, tieneque permitir 2 bytes en la longitud de registro para incluir el prefijo de longitud.

Solo se podría acceder a un conjunto de datos creado utilizandoSCALARVARYING mediante un archivo que también especifiqueSCALARVARYING.

SCALARVARYING y CTLASA no deben especificarse para un mismo archivo, yaque provocaría que el primer byte de datos fuese ambiguo.

VSAMLa opción VSAM se proporciona con fines de compatibilidad con PL/I for z/OS.

Establecer características del conjunto de datos

Capítulo 10. Utilizar conjuntos de datos y archivos 243

Page 266: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

�� VSAM ��

Especificar características utilizando las variables de entornoDD:ddname

Utilice el mandato the SET para establecer una variable de entorno que identificael conjunto de datos que se va a asociar con un archivo PL/I y, opcionalmente,proporcionar características de ese conjunto de datos. Esta informaciónproporcionada por la variable de entorno se denomina información de definiciónde datos (o DD).

La sintaxis de la variable de entorno DD:ddname es:

�� DD:ddname=filespec, option

��

La sintaxis acepta espacios en blanco. Además, la sintaxis de la sentencia no secomprueba en el momento en que se introduce el mandato. Se verifica cuando seabre el conjunto de datos. Si la sintaxis es errónea, se lanza UNDEFINEDFILE conel código oncode 96.

DD:ddnameEspecifica el nombre de la variable de entorno.El nombre de definición dedatos (ddname) puede ser el nombre de una constante de archivo o unddname alternativo que especifique en la opción TITLE de su sentencia OPEN.La opción TITLE se describe en “Utilizar la opción TITLE de la sentenciaOPEN” en la página 255.

Si utiliza un ddname alternativo, y supera los 31 caracteres, solo se utilizan losprimeros 31 caracteres para formar el nombre de la variable de entorno.

optionLas opciones que puede especificar como información DD se describen el lassiguientes páginas, comenzando con “AMTHD” y acabando con “TYPE” en lapágina 251.

AMTHDLa opción AMTHD especifica el método de acceso para acceder al conjunto dedatos.

�� AMTHDFSYS

( ISAM )BTRIEVEREMOTE

��

FSYSEspecifica que PL/I utiliza sus métodos de acceso nativos para acceder a unarchivo nativo. Este es el valor predeterminado.

Establecer características del conjunto de datos

244 PL/I for WindowsGuía de programación

Page 267: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ISAMEspecifica que se va a utilizar el método de acceso ISAM para acceder a unarchivo ISAM.

BTRIEVE (Windows)Especifica el método de acceso BTRIEVE que se va a utilizar para acceder a unarchivo BTRIEVE.

REMOTE (Windows)Especifica que el archivo reside en un sistema de destino DDM remoto (comoMVS).

En Windows, el nombre del archivo tiene que estar cualificado por un alias deLU o el nombre de red SNA completo.

FSYS se utiliza de forma predeterminada si no se especifica la opción AMTHD yno se aplica ninguna de las siguientes opciones ENVIRONMENT:

ORGANIZATION(INDEXED)ORGANIZATION(RELATIVE)VSAM

Si especifica alguna de las opciones anteriores, AMTHD(ISAM)es el valorpredeterminado en Windows y AMTHD(DDM) el valor predeterminado en AIX.

APPENDLa opción APPEND especifica si se va a ampliar o a volver a crear un conjunto dedatos existente.

�� APPENDY

( N ) ��

Y Especifica que los registros nuevos se van a añadir al final de un conjunto dedatos secuencial o a insertar en un conjunto de datos indexado o relativo. Estees el valor predeterminado.

N Especifica que, si el archivo existe, se va a volver a crear.

La opción APPEND solo se aplica a archivos OUTPUT. APPEND se ignora si:v El archivo no existev El archivo no tiene el atributo OUTPUTv La organización es REGIONAL(1)

ASALa opción ASA se aplica a archivos que se van a imprimir. Esta opción especificacuando se va a interpretar el carácter de control ANSI de cada registro.

�� ASAN

( Y ) ��

N Especifica que los caracteres de control de impresión ANSI se van a convertiren caracteres de control de IBM Proprinter cuando los registros se graben en elconjunto de datos. Este es el valor predeterminado.

Establecer características del conjunto de datos

Capítulo 10. Utilizar conjuntos de datos y archivos 245

Page 268: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Y Especifica que los caracteres de control de impresión ANSI no se van aconvertir; en lugar de eso se van a dejar tal cual están para convertirlos másadelante mediante el proceso que especifique.

Si el destino del archivo no es la impresora, la opción se ignora. Los archivosdestinados a impresora se describen en “Archivos destinados a impresora” en lapágina 261.

AUTOPAGELa opción AUTOPAGE especifica si una carácter de alimentación de papel es elprimer carácter de control en salir en un archivo PRINT, independientemente de laopción PUT utilizada.

�� AUTOPAGEY

( N ) ��

Y Especifica que la biblioteca coloca un carácter de control de alimentación depapel como primer carácter de control de un archivo PRINT, incluso si laprimera sentencia de E/S del archivo PRINT es una sentencia PUT SKIP.AUTOPAGE(Y) es el valor predeterminado.

N Especifica que la biblioteca interpreta la opción PUT utilizada. Por ejemplo, sila primera sentencia de E/S del archivo PUT es un sentencia PUT SKIP, labiblioteca interpreta la opción SKIP; es decir, se utiliza un carácter de controlretorno de carro.

BUFSIZELa opción BUFSIZE especifica el número de bytes de un almacenamientointermedio.

�� BUFSIZE (n) ��

La salida RECORD se almacena en la memoria intermedia de formapredeterminada y tiene un valor predeterminado para BUFSIZE de 64k. La salidaSTREAM se almacena en la memoria intermedia, pero no de forma predeterminaday tiene un valor predeterminado para BUFSIZE de zero.

Si se da un valor de cero a BUFSIZE, el número de bytes para el almacenamientointermedio es igual al valor especificado en la opción RECSIZE o LRECL.

La opción BUFSIZE solo es válida para un archivo binario consecutivo. Si elarchivo se utiliza para entrada del termina, tiene que asignar el valor de cero aBUFSIZE para aumentar la eficiencia.

CHARSET para registro E/SEsta versión de la opción CHARSET solo se aplica a archivos consecutivos queutilizan el registro E/S. Ofrece al usuario la posibilidad de utilizar archivos dedatos EBCDIC como archivos de entrada, y de especificar el conjunto de caracteresde los archivos de salida.

Establecer características del conjunto de datos

246 PL/I for WindowsGuía de programación

Page 269: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

�� CHARSETASIS

( EBCDIC )ASCII

��

Elija una subopción de CHARSET basada en la forma del archivo (entrada) o en laforma que quiere que tenga el archivo (salida).

CHARSET(ASIS) es el valor predeterminado.

CHARSET para secuencia E/SEsta versión de la opción CHARSET se aplica a archivos de entrada y de salida ensecuencia. Proporciona al usuario la capacidad de utilizar archivos de datosEBCDIC como archivos de entrada y especificar el conjunto de caracteres comoarchivos de salida. Si intenta especificar ASIS al utilizar secuencia E/S, no se emiteningún error y los juegos de caracteres se tratan como ASCII.

�� CHARSETASCII

( EBCDIC ) ��

Elija una subopción de CHARSET basada en la forma del archivo (entrada) o en laforma que quiere que tenga el archivo (salida).

CHARSET(ASCII) es la opción predeterminada.

DELAYLa opción DELAY especifica el número de milisegundos que transcurren antes derepetir una operación que falla cuando no se puede obtener del sistema unbloqueo de registros o un archivo.

�� DELAY (n) ��

El valor predeterminado para DELAY es 0. .

DELIMITLa opción DELIMIT especifica si el archivo de entrada contiene delimitadores decampos o no. Un delimitador de campos es un espacio en blanco o un carácterdefinido por el usuario que separa los campos de un registro. Solo se aplica aarchivos de entrada de ordenación.

�� DELIMITN

( Y ) ��

Establecer características del conjunto de datos

Capítulo 10. Utilizar conjuntos de datos y archivos 247

Page 270: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

El programa de utilidad de ordenación distingue archivos de texto de archivosbinarios por la presencia de delimitadores de campo. Los archivos de entrada quecontienen delimitadores de campos se procesan como archivos de texto, si no, seconsideran archivos binarios. La biblioteca necesita esta información para pasar losparámetros correctos al programa de utilidad de ordenación.

LRECLLa opción LRECL es la misma que RECSIZE.

�� LRECL (n) ��

Si no es especifica LRECL y no está implícito por un valor LINESIZE (exceptoarchivos TYPE(FIXED)), el valor predeterminado es 1024.

LRMSKIPLa opción LRMSKIP permite que la salida comience en la línea nth (n hacereferencia al valor especificado con la opción SKIP de la sentencia PUT o GET) dela primera página para el primer elemento de formato SKIP que se va a ejecutarcuando se abra el archivo.

�� LRMSKIPN

( Y ) ��

Si n es cero o 1, la salida comienza en la primera línea de la primera página.

PROMPTLa opción PROMPT especifica si los dos puntos deberían estar visibles o no comosolicitudes de entrada continúa del terminal.

�� PROMPTN

( Y ) ��

PROMPT(N) es el valor predeterminado.

PUTPAGELa opción PUTPAGE especifica si el carácter de alimentación de papel debería irseguido de un carácter de retorno de carro. Esta opción solo se aplica a archivosdestinados a impresora. Los archivos destinados a impresora son archivos de salidadeclarados con el atributo PRINT, o archivos de salida de registro declarados conla opción de entorno CTLASA.

Establecer características del conjunto de datos

248 PL/I for WindowsGuía de programación

Page 271: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

�� PUTPAGENOCR

( CR ) ��

NOCRIndica que el carácter de alimentación de papel ('0C'x) no va seguido de uncarácter de retorno de carro ('0D'x). Este es el valor predeterminado.

CR Indica que el carácter de retorno de carro va seguido del carácter dealimentación de papel. Esta opción tiene que especificarse si la salida se envíaa impresoras que no sean de IBM.

RECCOUNTLa opción RECCOUNT especifica el número máximo de registros que se puedencargar en conjunto de datos relativo o regional que se crea durante un proceso deapertura de archivo PL/I.

�� RECCOUNT (n) ��

La opción RECCOUNT se ignora si PL/I no crea, o vuelve a crear, el conjunto dedatos. Si la opción RECCOUNT se aplica y es omitida, el valor predeterminado es50 para archivos regionales y relativos.

RECSIZELa opción RECSIZE especifica la longitud, n, de los registros del conjunto de datos.

�� RECSIZE (n) ��

En el caso de conjuntos de datos de longitud fija o regionales, RECSIZE especificala longitud de cada registro del conjunto de datos; para el resto de tipos deconjunto de datos, RECSIZE especifica la longitud máxima que pueden tener losregistros.

El valor predeterminado de n es 512.

RETRYLa opción RETRY especifica el número de veces que debe repetirse una operacióncuando el sistema no puede obtener un archivo o un bloqueo de registros.

�� RETRY (n) ��

El valor predeterminado de RETRY es 10. Esta opción solo se aplica a archivosDDM.

Establecer características del conjunto de datos

Capítulo 10. Utilizar conjuntos de datos y archivos 249

Page 272: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

SAMELINELa opción SAMELINE especifica si el indicador del sistema se produce en lamisma línea que la sentencia que solicita la entrada.

�� SAMELINEN

( Y ) ��

Los siguientes ejemplos muestran los resultados de determinados combinacionesde las opciones PROMPT y SAMELINE:

Ejemplo 1Teniendo en cuenta la sentencia PUT SKIP LIST(’ENTER:’);, la salida es lasiguiente:

prompt(y), sameline(y)prompt(n), sameline(y)prompt(y), sameline(n)

prompt(n), sameline(n)

INTRO: (cursor)INTRO: (cursor)INTRO:(cursor)INTRO:(cursor)

Ejemplo 2Teniendo en cuenta la sentencia PUT SKIP LIST(’ENTER:’);, la salida es lasiguiente:

prompt(y), sameline(y)prompt(n), sameline(y)prompt(y), sameline(n)

prompt(n), sameline(n)

INTRO: (cursor)INTRO (cursor)INTRO:(cursor)INTRO(cursor)

SHARELa opción SHARE especifica el nivel de compartición de archivos que se va apermitir.

�� SHARENONE

( READ )ALL

��

NONEEspecifica que el archivo no se comparte con otros procesos. Este es el valorpredeterminado.

READEspecifica que otros procesos pueden leer el archivo.

Establecer características del conjunto de datos

250 PL/I for WindowsGuía de programación

Page 273: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ALLEspecifica que otros procesos pueden leer o escribir en el archivo. Laintegridad de los datos es responsabilidad del usuario, y PL/I no proporcionaasistencia para su mantenimiento.

Esta opción solo es válida con archivos DDM.

Para habilitar el bloqueo a nivel de registro, especifique SHARE(ALL) y declare elarchivo como archivo de actualización. Esto se recomienda cuando utilizaaplicaciones CICS.

La condición UNDEFINEDFILE surge cuando no se puede obtener el nivelsolicitado o predeterminado de compartición de archivos.

SKIP0La opción SKIP0 especifica si el cursor de línea se mueve cuando la sentenciaSKIP(0) está cifrada en el programa fuente. SKIP0 se aplica a archivos terminalesque no están vinculados como aplicaciones PM.

�� SKIP0N

( Y ) ��

SKIP0(N)Especifica que el cursor se va a mover hasta el comienzo de la siguiente línea.Este es el valor predeterminado.

SKIP0(Y)Especifica que el cursor se va a mover hasta el comienzo de la línea actual.

El siguiente ejemplo muestra cómo puede hacer para que la salida al terminal sesalte cero líneas y el cursor se mueva hasta el inicio de la línea de salida actual:

set dd:sysprint=stdout:,SKIP0(Y)set dd:sysprint=con,SKIP0(Y)

TERMLBUFLa opción TERMLBUF especifica el número máximo de líneas que hay en laventana de un terminal PL/I Presentation Manager (PM).

�� TERMLBUF (n) ��

Si el archivo no está asociado a un terminal PM, la opción se ignora. El valorpredeterminado es 512 líneas.

TYPELa opción TYPE especifica el formato de los registros de un archivo nativo.

Establecer características del conjunto de datos

Capítulo 10. Utilizar conjuntos de datos y archivos 251

Page 274: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

�� TYPECRLF

( LF )TEXTFIXEDVARLSVARLS4X4VARMS4X4VARMSLLLLLSLLZZCRLFEOFU

��

CRLFEspecifica que los registros están delimitados por la combinación de caracteresCR - LF. ('CR' y 'LF' representan los valores ASCII de retorno de carro y saltode línea, '0D'x y '0A'x, respectivamente. Consulte las restricciones en atributosde archivo) En un archivo de salida, PL/I coloca los caracteres al final de cadaregistro; en un archivo de entrada, PL/I descarta los caracteres. Tanto en losarchivos de entrada como de salida, no se toman en consideración loscaracteres para RECSIZE.

El conjunto de datos no puede contener ningún registro más largo que el valordeterminado por la longitud de registro del conjunto de datos.

Este es el valor predeterminado para ISAM y BTRIEVE.

LF Especifica que los registros están delimitados por la combinación de caracteresLF. ('LF' representa los valores ASCII de salto de línea o '0A'x. Consulte lasrestricciones en atributos de archivo) En un archivo de salida, PL/I coloca loscaracteres al final de cada registro; en un archivo de entrada, PL/I descarta loscaracteres. Tanto en los archivos de entrada como de salida, no se toman enconsideración los caracteres para RECSIZE.

El conjunto de datos no puede contener ningún registro más largo que el valordeterminado por la longitud de registro del conjunto de datos.

TEXTEquivale a CRLF.

FIXEDEspecifica que cada registro del conjunto de datos tiene la misma longitud. Lalongitud determinada para los registros del conjunto de datos se utiliza parareconocer los límites del registro.

Todos los caracteres de un archivo TYPE(FIXED) se consideran datos, incluidoslos controles de carácter si es que existen. Asegúrese de que la longitud delregistro que especifica refleja la presencia de estos caracteres o asegúrese deque la longitud de registro que especifica representa todos los caracteres delregistro.

VARLS|VARMSIndica que los registros tienen un prefijo de 2 bytes que especifica el númerode bytes en el resto del registro.

En VARLS, el prefijo de longitud está en formato little endian. Estos registrostienen el aspecto de series NATIVE CHAR VARYING.

Establecer características del conjunto de datos

252 PL/I for WindowsGuía de programación

Page 275: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

En VARMS, el prefijo de longitud está en formato big endian. Estos registrostienen el aspecto de series NONNATIVE CHAR VARYING.

Los conjuntos de datos TYPE(VARLS) proporcionan la forma más rápida deutilizar PL/I para leer y escribir conjuntos de datos que contienen registros delongitud de variable y patrones de bytes arbitrarios. Esto no es posible con losconjuntos de datos TYPE(CRLF) porque cuando se lee un registro que seescribió incluyendo la serie de bits '0d0a'b4, se produce una malainterpretación.

Los conjuntos de datos TYPE(VARMS) proporcionan una forma de leerarchivos SCALARVARYING descargados del sistema principal.

VARLS4X4|VARMS4X4Indica que los registros tienen un prefijo de 4 bytes y un sufijo de 4 bytes. Elprefijo y el sufijo contienen cada uno el número de bytes del resto del registro.Este número no incluye los 4 bytes utilizados por el prefijo ni los 4 bytesutilizados por el sufijo.

En VARLS4X4, los datos están en formato little endian, que se utiliza en un PC.En VARMS4X4, los datos están en formato big endian, que se descargadel sistema z/OS o AIX.

Los conjuntos de datos Type(VARLS4X4) y Type(VARMS4X4) proporcionan unaforma para manejar archivos sin formato secuenciales FORTRAN.

LL|LLLSIndica que los registros tienen un prefijo de 2 bytes que especifica el númerototal de bytes en el registro (incluyendo el prefijo).

Los conjuntos de datos TYPE(LL) proporcionan una forma de leer los archivosdescargados del sistema principal con una herramienta (consulte el programade ejemplo VRECGEN.PLI) que añade 2 bytes. La longitud está en formato bigendian.

Los conjuntos de datos TYPE(LLLS) proporcionan un modo para leer losarchivos descargados del PC. La longitud está en formato little endian.

LLZZEspecifica que los registros tienen un prefijo de 4 bytes al igual que losregistros variables de S/390.

La subopción LLZZ proporciona un modo de leer y escribir conjuntos de datosque incluyen registros de longitud variable y patrones de bytes arbitrarios. Estono es aplicable a los conjuntos de datos TYPE(CRLF). Con CRLF, un registroescrito que contiene la serie de bits '0d0a'b4 se malinterpreta al leerse.

Un conjunto de datos no puede contener ningún registro más largo que elvalor determinado por la longitud de registro del conjunto de datos.

CRLFEOFExcepto en los archivos de salida, esta subopción especifica la mismainformación que CRLF. Cuando uno de estos archivos se cierra para salida, seañade un marcador de fin de archivo al último registro.

U Indica que los registros no tienen formatos. Ninguna sentencia de E/S desecuencia ni registro puede utilizar archivos sin formato a excepción de OPENy CLOSE. Puede leer de un archivo TYPE(U) utilizando la función incorporadaFILEREAD. Puede escribir en un archivo TYPE(U) utilizando la funciónincorporada FILEWRITE.

Establecer características del conjunto de datos

Capítulo 10. Utilizar conjuntos de datos y archivos 253

Page 276: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

La opción TYPE solo se aplica a archivos CONSECUTIVE, pero se ignora enarchivos destinados a impresión con la opción ASA(N) aplicada.

Si su programa intenta acceder a un conjunto de datos existente con la opciónTYPE(FIXED) en vigor y la longitud del conjunto de datos no es un múltiplo de lalongitud de registro lógico que especifica, PL/I lanza la condiciónUNDEFINEDFILE.

Cuando se utilizan archivos no imprimibles con el atributo TYPE(FIXED), SKIP sesustituye por espacios en blanco añadidos al final de la línea. Si se utilizaTYPE(CRLF), SKIP se sustituye por CRLF sin añadir espacios en blanco al final.

Asociar un archivo PL/I a un conjunto de datosUn archivo utilizado en un programa PL/I tiene un nombre de archivo PL/I. Unconjunto de datos también tiene un nombre por el que es conocido en el sistemaoperativo.

PL/I necesita una forma de reconocer los conjuntos de datos a los que hacenreferencia los archivo PL/I de su programa, así que tiene que proporcionar unaidentificación del conjunto de datos que se va a utilizar o permitir que PL/I utiliceuna identificación predeterminada.

Puede identificar el conjunto de datos explícitamente utilizando una variable deentorno o la opción TITLE de la sentencia OPEN.

Utilización de variables de entornoUtilice el mandato SET para establecer una variable de entorno que identifica elconjunto de datos que se va a asociar con un archivo PL/I y, opcionalmente, paraespecificar las características de ese conjunto de datos. La informaciónproporcionada por la variable de entorno se denomina información de definiciónde datos (o DD).

Estos nombres de variable de entorno tienen la forma DD:ddname, donde ddnamees el nombre de una constante de archivo PL/I (o un nombre de definición de datosalternativo, tal y como se define a continuación), por ejemplo:

declare MyFile stream output;

Puede especificar opciones para el mandato SET incluyéndolas en la línea demandatos.

set dd:myfile=c:\datapath\mydata.dat,APPEND(N)

Si está familiarizado con el entorno del sistema principal de IBM, puede pensar enla variable de entorno como en:

una sentencia DD en MVSuna sentencia ALLOCATE en TSOun mandato FILEDEF en CMS

Para obtener más información sobre la sintaxis y las opciones que puede utilizarcon la variable de entorno DD:ddname, consulte “Especificar característicasutilizando las variables de entorno DD:ddname” en la página 244.

Establecer características del conjunto de datos

254 PL/I for WindowsGuía de programación

Page 277: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Utilizar la opción TITLE de la sentencia OPENPuede utilizar la opción TITLE de la sentencia OPEN para identificar el conjuntode datos que se va a asociar con un archivo PL/I, y, de manera opcional, paraproporcionar características adicionales de ese conjunto de datos.

�� TITLE (expresión) ��

La expresiín tiene que producir una cadena de caracteres con la sintaxis siguiente:

�� alternate_ddname/filespec

, dd_option

��

alternate_ddnameEl nombre de una variable de entorno DD:ddname alternativa. Una variable deentorno DD:ddname alternativa es aquella que no se llama despues de unaconstante de archivo. Por ejemplo, si tuviese un archivo denominadoINVENTRY en su programa, y establece dos variables de entornoDD:ddname(la primera denominada INVENTRY y la segunda denominadaPARTS), podría asociar el archivo con el segundo utilizando esta sentencia:

open file(Inventry) title(’PARTS’);

filespecCualquier especificación de archivo del sistema que está utilizando.

dd_option“Especificar características utilizando las variables de entorno DD:ddname” enla página 244 Una o varias opciones permitidas en una variable de entornoDD:ddname. Para obtener más información sobre las opciones de la variable deentorno DD:ddname, consulte “Especificar características utilizando lasvariables de entorno DD:ddname” en la página 244.

Aquí tiene un ejemplo del uso de la sentencia OPEN de esta forma:open file(Payroll) title(’/June.Dat,append(n),recsize(52)’);

De esta forma, PL/I obtiene toda la información DD ya sea mediante laexpresión TITLE o mediante el atributo ENVIRONMENT de una declaraciónde archivo. no se hace referencia a una variable de entorno DD:ddname.

Intentar utilizar archivos no asociados a conjuntos de datosSi intenta utilizar un archivo que no se ha asociado a un conjunto de datos, (ya seamediante el uso de la opción TITLE de la sentencia OPEN o estableciendo unavariable de entorno DD:ddname), se lanza la condición UNDEFINEDFILE. Lasúnicas excepciones son los archivos SYSIN y SYSPRINT; que adoptan los valorespredeterminados el dispositivo CON.

Cómo encuentra PL/I conjuntos de datosPL/I establece la vía de acceso para crear conjuntos de datos nuevos o acceder aconjuntos de datos existentes de una de las formas siguientes:v El directorio actual.

Asociar un archivo PL/I a un conjunto de datos

Capítulo 10. Utilizar conjuntos de datos y archivos 255

Page 278: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v La vías de acceso tal y como se definen en la variable de entorno DPATH.

Abrir y cerrar archivos PL/IEste tema resume lo que hace PL/I cuando su aplicación ejecuta las sentenciasOPEN y CLOSE.

Cómo abrir un archivoLa ejecución de una sentencia PL/I OPEN asocia un archivo a un conjunto dedatos. Esto requiere la fusión de la información que describe el archivo y elconjunto de datos. La información se fusiona utilizando el siguiente orden deprioridad:1. Atributos de la sentencia OPEN2. Opciones ENVIRONMENT de una declaración de archivo3. Valores de la opción TITLE de la sentencia OPEN cuando se utiliza '/'4. Valores de la variable de entorno DD:ddname5. Valores predeterminados de IBM

Cuando el conjunto de datos que se abre no es un dispositivo estación de trabajo,se busca el conjunto de datos en las vías de acceso especificadas en la variable deentorno DPATH. Si no se encuentra el conjunto de datos y el archivo tiene elatributo OUTPUT, se crea el conjunto de datos en el directorio actual.

Si se detecta algún conflicto entre las características del archivo y del conjunto dedatos, se lanza la condición UNDEFINEDFILE.

Cerrar un archivoLa ejecución de una sentencia PL/I CLOSE disocia un archivo del conjunto dedatos al que estaba asociado.

Asociar varios conjuntos de datos a un archivoUn archivo PL/I puede, en distintos momentos, representar conjuntos de datoscompletamente distintos. La opción TITLE le permite elegir dinámicamente, entiempo de apertura, entre varios conjuntos de datos que se van a asociar con unarchivo PL/I particular. Considere el ejemplo siguiente:

do Ident=’A’,’B’,’C’;open file(Master) title(’/MASTER1’{Ident{’.DAT’);

.

.

.close file(Master);

end;

En este ejemplo, cuando se abre Master durante la primera iteración del grupo DO,el archivo se asocia con el conjunto de datos denominado MASTER1A.DAT.Después del procesamiento, el archivo se cierra, desvinculando en archivo PL/IMASTER del conjunto de datos MASTER1A.DAT. Durante la segunda iteración delgrupo DO, se vuelve a abrir MASTER. Esta vez, MASTER se asocia al conjunto dedatos denominado MASTER1B.DAT. De igual modo, durante la iteración final delgrupo DO, MASTER se asocia con el conjunto de datos MASTER1C.DAT.

Asociar un archivo PL/I a un conjunto de datos

256 PL/I for WindowsGuía de programación

Page 279: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Combinaciones de sentencias de E/S, atributos y opcionesA continuación se muestran las sentencias de E/S, los atributos de archivo, lasopciones ENVIRONMENT y las opciones de la variable de entorno DD:ddnameque puede utilizar para las distintas operaciones de archivo PL/I. La Tabla 9 recogelos de los conjuntos de datos nativos y la Tabla 10 en la página 258 recoge los delos conjuntos de datos VSAM de la estación de trabajo VSAM.

Tabla 9. sentencias, atributos y opciones para conjuntos de datos nativos

Sentencias Atributos de archivo Opciones ENVIRONMENT Opciones DD_DDNAME

PUT ENVIRONMENTFILEOUTPUTPRINTSTREAM

CONSECUTIVAGRAPHICRECSIZE(n)1

AMTHD(FSYS)APPEND(Y|N)ASA(Y|N)2

file_specRECSIZE(n)1

SHARE(NONE|READ|ALL)TERMLBUF(n)3

TYPE(CRLF|TEXT|FIXED)

GET ENVIRONMENTFILESTREAMINPUT

CONSECUTIVAGRAPHICRECSIZE(n)4

AMTHD(FSYS)file_specRECSIZE(n)4

SHARE(NONE|READ|ALL)TERMLBUF(n)3

TYPE(CRLF|TEXT|FIXED)

WRITE BUFFERED|UNBUFFEREDDIRECT|SEQUENTIAL5

ENVIRONMENTFILEKEYED6

RECORDOUTPUT|UPDATE

CONSECUTIVE|REGIONAL(1)CTLASA7

RECSIZE(n)1

SCALARVARYING

AMTHD(FSYS)APPEND(Y|N)file_specRECSIZE(n)1

SHARE(NONE|READ|ALL)TERMLBUF(n)3

TYPE(CRLF|TEXT|FIXED)7

LOCATE BUFFEREDENVIRONMENTFILEKEYED6

RECORDOUTPUTSEQUENTIAL

CONSECUTIVE|REGIONAL(1)CTLASA2

RECSIZE(n)1

AMTHD(FSYS)APPEND(Y|N)file_specRECSIZE(n)1

SHARE(NONE|READ|ALL)TYPE(CRLF|TEXT|FIXED)7

READ BUFFERED|UNBUFFEREDDIRECT|SEQUENTIAL5

ENVIRONMENTFILEINPUT|UPDATEKEYED6

RECORD

CONSECUTIVE|REGIONAL(1)RECSIZE(n)4

SCALARVARYING

AMTHD(FSYS)file_specRECSIZE(n)4

SHARE(NONE|READ|ALL)TERMLBUF(n)3

TYPE(CRLF|TEXT|FIXED)7

REWRITE BUFFERED|UNBUFFEREDDIRECT|SEQUENTIAL5

ENVIRONMENTFILEUPDATEKEYED6

RECORD

CONSECUTIVE|REGIONAL(1)RECSIZE(n)4

SCALARVARYING

AMTHD(FSYS)file_specRECSIZE(n)4

SHARE(NONE|READ|ALL)TYPE(CRLF|TEXT|FIXED)7

Sentencias, atributos, opciones

Capítulo 10. Utilizar conjuntos de datos y archivos 257

Page 280: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 9. sentencias, atributos y opciones para conjuntos de datos nativos (continuación)

Sentencias Atributos de archivo Opciones ENVIRONMENT Opciones DD_DDNAME

DELETE6 BUFFERED|UNBUFFEREDDIRECT|SEQUENTIALENVIRONMENTFILEUPDATEKEYEDRECORD

REGIONAL(1)RECSIZE(n)SCALARVARYING

AMTHD(FSYS)file_specRECSIZE(n)SHARE(NONE|READ|ALL)

Notas:

1 Cuando se crea un conjunto de datos nuevo2 Cuando es un archivo PL/I destinado a impresión 3 Cuando se asocia a un terminal PM4 Cuando el programa PL/I no crea el conjunto de datos5 DIRECT solo se aplica a REGIONAL(1)6 Para REGIONAL(1)7 No se aplica a REGIONAL(1)

Tabla 10. Sentencias, atributos y opciones de conjuntos de datos VSAM de estación de trabajo

Sentencias Atributos de archivo Opciones ENVIRONMENT Opciones DD_DDNAME

PUT ENVIRONMENTFILEOUTPUTPRINTSTREAM

ORGANIZATION(CONSECUTIVE)GRAPHICRECSIZE(n)1

AMTHD(DDM|ISAM|BTRIEVE)APPEND(Y|N)ASA(Y|N)2

file_specRECSIZE(n)1

SHARE(NONE|READ|ALL)

GET ENVIRONMENTFILESTREAMINPUT

ORGANIZATION(CONSECUTIVE)GRAPHICRECSIZE(n)

AMTHD(DDM|ISAM|BTRIEVE)file_specRECSIZE(n)SHARE(NONE|READ|ALL)

WRITE BUFFERED|UNBUFFEREDDIRECT|SEQUENTIALENVIRONMENTFILEKEYEDRECORDOUTPUT|UPDATE

ORGANIZATION|VSAMCTLASARECSIZE(n)SCALARVARYING

AMTHD(DDM|ISAM|BTRIEVE)ASA(Y|N)2

APPEND(Y|N)3

file_specRECSIZE(n)SHARE(NONE|READ|ALL)

LOCATE BUFFEREDENVIRONMENTFILEKEYEDRECORDOUTPUTSEQUENTIAL

ORGANIZATION|VSAMCTLASARECSIZE(n)SCALARVARYING

AMTHD(DDM|ISAM|BTRIEVE)APPEND(Y|N)3

file_specRECSIZE(n)SHARE(NONE|READ|ALL)

READ BUFFERED|UNBUFFEREDDIRECT|SEQUENTIALENVIRONMENTFILEINPUT|UPDATEKEYEDRECORD

ORGANIZATION|VSAMRECSIZE(n)SCALARVARYING

AMTHD(DDM|ISAM|BTRIEVE)file_specRECSIZE(n)SHARE(NONE|READ|ALL)

Sentencias, atributos, opciones

258 PL/I for WindowsGuía de programación

Page 281: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 10. Sentencias, atributos y opciones de conjuntos de datos VSAM de estación de trabajo (continuación)

Sentencias Atributos de archivo Opciones ENVIRONMENT Opciones DD_DDNAME

REWRITE BUFFERED|UNBUFFEREDDIRECT|SEQUENTIALENVIRONMENTFILEUPDATEKEYEDRECORD

ORGANIZATION|VSAMRECSIZE(n)SCALARVARYING

AMTHD(DDM|ISAM|BTRIEVE)file_specRECSIZE(n)SHARE(NONE|READ|ALL)

DELETE BUFFERED|UNBUFFEREDDIRECT|SEQUENTIALENVIRONMENTFILEUPDATEKEYEDRECORD

ORGANIZATION|VSAMRECSIZE(n)SCALARVARYING

AMTHD(DDM|ISAM|BTRIEVE)file_specRECSIZE(n)SHARE(NONE|READ|ALL)

Notas:1 Cuando se crea un conjunto de datos nuevo2 Cuando es un archivo PL/I destinado a impresión 3 No se aplica a conjuntos de datos VSAM

Entrada y salida de la sentencia DISPLAYLa REPLY de DISPLAY se lee desde stdin. La salida de la sentencia DISPLAY sedirige a stdout de forma predeterminada. La sintaxis de la variable de entornoIBM.DISPLAY es:

��std

IBM.DISPLAY= con ��

stdEspecifica que la sentencia DISPLAY se va a asociar con el dispositivo de salidaestándar. Es la opción predeterminada.

conEspecifica que la sentencia DISPLAY se va a asociar con el dispositivo CON.

Puede redirigir las sentencias de visualización a un archivo, por ejemplo:set ibm.display=std

Hello: proc options(main);display(’Hello!’);

end;

Después de compilar y enlazar el programa, puede invocarlo desde la línea demandatos introduciendo:

hello > hello1.out

El signo mayor que redirige la salida al archivo que se especifica después de él, eneste caso HELLO1.OUT. Esto significa que la palabra 'HELLO' se escribe en elarchivo HELLO1.OUT.

Sentencias, atributos, opciones

Capítulo 10. Utilizar conjuntos de datos y archivos 259

Page 282: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Archivos estándar PL/I (SYSPRINT y SYSIN)SYSIN se lee desde la entrada estándar (stdin) y SYSPRINT se dirige a la salidaestándar (stdout) de forma predeterminada. Si quiere que se asocien de formadiferente, tiene que utilizar la opción TITLE de la sentencia OPEN, o establecer unavariable de entorno DD:ddname que nombre a un conjunto de datos o a otrodispositivo.

Redirigir dispositivos de error, entrada y salida estándarTambién puede redirigir dispositivos de error, entrada y salida estándar a unarchivo. Puede utilizar la redirección en el siguiente programa , pero antes tieneque emitir dos sentencias SET DD: para que la redirección funcione. Estas son:set dd:sysprint=stdout:set dd:sysin=stdin:

Hello: proc options(main);put list(’Hello!’);

end;

Después de compilar y enlazar el programa, puede invocarlo desde la línea demandatos introduciendo:

hello2 >hello > hello2.out

Como es cierto con las sentencias de visualización, el signo mayor que redirige lasalida al archivo que se especifica después de él, en este caso HELLO2.OUT. Estosignifica que la palabra 'HELLO' se escribe en el archivo HELLO2.OUT. tenga encuenta que la salida incluye caracteres de control de impresora ya que el atributoPRINT se aplica a SYSPRINT de forma predeterminada.

Las sentencias READ acceden a datos desde stdin, sin embargo, tienen queespecificar una LRECL igual a 1.

Archivos estándar

260 PL/I for WindowsGuía de programación

Page 283: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 11. Definir y utilizar conjuntos de datos consecutivos

Las siguientes secciones describen la organización de conjuntos de datosconsecutivos y explican cómo crear, acceder a y actualizar conjuntos de datosconsecutivos.

En un conjunto de datos con organización consecutiva, los registros se organizanúnicamente en base a sus posiciones físicas sucesivas. En otras palabras, cuando secrea el conjunto de datos los registros se graban de forma consecutiva en el ordenen el que se presentan. Solo puede recuperar los registros en el orden en el que segrabaron.

La información incluida en este capítulo se aplica a los archivos que utilizan laopción CONSECUTIVE del atributo ENVIRONMENT asociados a un conjunto dedatos nativo o VSAM de la estación de trabajo. PL/I Presentation Manager soloadmite conjuntos de datos nativos.

Archivos destinados a impresoraLos archivos destinados a impresora son archivos PL/I con el atributo PRINT yarchivos de registro declarados con la opción CTLASA del atributoENVIRONMENT. Puede imprimir estos archivos en su estación de trabajo ocargarlos en su sistema principal.

El primer carácter de cada registro en un carácter de control de carro del Institutonacional estadounidense de estándares (ANSI) (consulte Tabla 11 en la página 262).

Para archivos STREAM, PL/I inserta el carácter, en base a la opción SKIP, LINE oPAGE (o el elemento de formato de control) de la sentencia PUT. Para los registrosRECORD con CTLASA, el programa tiene que insertar los caracteres de control enel primer byte de cada registro.

Si quiere imprimir el conjunto de datos desde la estación de trabajo, seleccione laopción ASA(N) (predeterminada). Para conservar el formato para la impresión enel sistema principal, seleccione ASA(Y), que hace que los caracteres de control nose conviertan.

© Copyright IBM Corp. 1998, 2013 261

Page 284: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 11. Caracteres de control de impresión ANSI

Carácter Significado

(en blanco)0Guión (-)+123456789ABC

Salta 1 línea antes de imprimirSalta 2 líneas antes de imprimirSalta 3 líneas antes de imprimirNo salta ninguna línea antes de imprimirSalta a la siguiente página antes de imprimirSalta 3 líneas antes de imprimirSalta 3 líneas antes de imprimirSalta 3 líneas antes de imprimirSalta 3 líneas antes de imprimirSalta 3 líneas antes de imprimirSalta 3 líneas antes de imprimirSalta 3 líneas antes de imprimirSalta 3 líneas antes de imprimirSalta 3 líneas antes de imprimirSalta 3 líneas antes de imprimirSalta 3 líneas antes de imprimir

La conversión a caracteres de control IBM Proprinter es la siguiente:

Tabla 12. Equivalentes de IBM Proprinter para los caracteres de control ANSI

Carácter ANSI Caracteres Proprinter (en hexadecimal)

(en blanco)0-+12 a 9, A a C

0A0A 0A0A 0A 0A0D0C0A 0A 0A

Nota: Donde:0A = Salto de línea0C = Alimentación de papel0D = Retorno de carro

PL/I solo convierte los cinco primeros caracteres; los otros se tratan como guiones(-).

Uso de la transmisión de datos orientada a la corrienteEsta sección explica cómo definir conjuntos de archivos para utilizarlos conarchivos PL/I que tienen el atributo STREAM. Cubre las opcionesENVIRONMENT que puede utilizar y explica cómo crear y acceder a conjuntos dedatos. Los parámetros esenciales que utiliza en la variable de entorno DD:ddnamepara crear conjuntos de datos y acceder a ellos se resumen en tablas y se incluyenvarios ejemplos de programas PL/I.

Los conjuntos de datos con el atributo STREAM se procesan mediante unatransmisión de datos orientada a secuencia. La transmisión de datos orientada asecuencia permite a su programa PL/I ignorar límites de bloque y registro y tratara un conjunto de datos como una secuencia continúa de valores de datos. Losvalores de datos están en formato SBCS o DBCS. Puede crear conjuntos de datos yacceder a ellos para transmisión de datos orientada a secuencia utilizando lassentencias de entrada y salida dirigidas a list-, data- y edit-, descritas en Referenciade lenguaje PL/I.

Archivos destinados a impresora

262 PL/I for WindowsGuía de programación

Page 285: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Para la salida, PL/I convierte los elementos de datos de variables de programa aformato de caracteres si es necesario, y transforma la secuencia de caracteres ográficos en registros para transmitirlos al conjunto de datos.

Para la entrada, PL/I toma registro del conjunto de datos y los separa enelementos de datos solicitados por su programa, convirtiéndolos a la formaadecuada para asignarlos a variables de programa.

Puede utilizar la transmisión de datos orientada a secuencia para leer oescribirdatos gráficos. Hay terminales, impresoras y dispositivos de entrada dedatos que, con el soporte de programación adecuado, pueden mostrar, imprimir eintroducir gráficos. Tiene que asegurarse de que sus datos están en un formatoaceptable para el dispositivo o programa de utilidad de impresión escogido.

Definir archivos utilizando la secuencia E/SPuede definir archivos para la transmisión de datos orientada a secuenciautilizando una declaración de archivo con los siguientes atributos:

declareFilename file stream

input | {output [print]}environment(options);

El atributo FILE se describe en Referencia de lenguaje PL/I. El atributo PRINT sedescribe más detalladamente en “Utilización de archivos PRINT” en la página 267.

Opciones ENVIRONMENT para transmisiones de datosorientadas a secuencia

Las opciones ENVIRONMENT que puede utilizar con la transmisión de datosorientada a secuencia son:v CONSECUTIVEv RECSIZEv GRAPHICv ORGANIZATION(CONSECUTIVE).

Puede encontrar una descripción de estas opciones y de su sintaxis en “Especificarcaracterísticaa utilizando el atributo PL/I ENVIRONMENT” en la página 238.

Crear un conjunto de datos con stream de E/SPara crear un conjunto de datos, utilice uno de los siguientes elementos:v Atributo ENVIRONMENTv Variable de entorno DD:ddnamev Opción TITLE de la sentencia OPEN

Consulte “Utilizar la opción TITLE de la sentencia OPEN” en la página 255 paraobtener más información sobre la opción TITLE.

Información fundamentalCuando su aplicación crea un archivo STREAM, tiene que suministrar una valor detamaño de línea para ese archivo desde uno de los siguientes orígenes:v opción LINESIZE de la sentencia OPENv opción RECSIZE del atributo ENVIRONMENTv opción RECSIZE de la opción TITLE de la sentencia OPENv opción RECSIZE de la variable de entorno DD:ddnamev valor predeterminado suministrado por PL/I

Transmisión orientada a secuencia

Capítulo 11. Definir y utilizar conjuntos de datos consecutivos 263

Page 286: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

El valor predeterminado de PL/I se utiliza cuando no se suministra ningún valor.Si elige la opción LINESIZE, se sustituyen el resto de orígenes. La opción RECSIZEdel atributo ENVIRONMENT anula el resto de opciones RECSIZE. El valorRECSIZE especificado en la opción TITLE de la sentencia OPEN tiene prioridadsobre la opción RECSIZE de la variable de entorno DD:ddname.

Si no se suministra LINESIZE, pero sí un valor RECSIZE, PL/I deriva el valor detamaño de línea de RECSIZE de la siguiente manera:v Un archivo PRINT con la opción ASA(N) aplicada tiene un valor RECSIZE de 4v Un archivo PRINT con la opción ASA(Y) aplicada tiene un valor RECSIZE de 1v Si no, el valor de RECSIZE se asigna al valor del tamaño de línea.

PL/I determina un valor de tamaño de línea predeterminado basado en losatributos del archivo y en el tipo del conjunto de datos asociado. En los casos enlos que PL/I no puede suministrar un tamaño de línea predeterminado adecuado,se lanza la condición UNDEFINEDFILE.

Se suministra un valor de tamaño de línea predeterminado para un archivoOUTPUT cuando:v El archivo tiene el atributo PRINT. En este caso, el valor se obtiene de la tabla de

control de tabulaciones (consulte Figura 11 en la página 270).v El conjunto de datos asociado es el terminal (CON:, STDOUT:, o STDERR:). En

este caso el valor es 120.

PL/I siempre deriva la longitud de registro del conjunto de datos del valor deltamaño de línea. Un valor de longitud de línea se deriva del valor de tamaño delínea de la siguiente manera:v En el caso de un archivo PRINT, con la opción ASA(N) aplicada el valor es

tamaño de línea + 4v En el caso de un archivo PRINT, con la opción ASA(Y) aplicada el valor es

tamaño de línea + 1v Si no, el valor de tamaño de línea se asigna al valor de longitud de línea.

EjemploFigura 8 en la página 265 muestra el uso de la transmisión de datos orientada astream para crear un conjunto de datos consecutivo. Los datos se leen primerodesde el conjunto de datos bday.inp que contiene una lista de nombres ycumpleaños de varias personas. Después, se crea un conjunto de datos consecutivobday.oct que contiene los nombres y los cumpleaños de las personas que cumplenaños en octubre.

Tiene que utilizarse el mandato SET DD:SYSIN=BDAY.INP para asociar el archivo dedisco bday.inp con el conjunto de datos de entrada. Si el archivo no lo creó unprograma PL/I, también tiene que especificarse la opción RECSIZE.

Tiene que utilizarse el mandato SET DD:WORK=BDAY.OCT para asociar el archivo desalida consecutivo WORK con el conjunto de datos de disco bday.oct.

Transmisión orientada a secuencia

264 PL/I for WindowsGuía de programación

Page 287: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Acceder a conjuntos de datos con secuencia de E/SNo es necesario que un conjunto de datos al que se accede mediante la transmisiónde datos orientada a secuencia se crease utilizando la transmisión orientada asecuencia. Sin embargo, tiene que tener organización CONSECUTIVE, y todos losdatos que incluye tienen que estar en formato gráfico o de carácter. Puede abrir el

/********************************************************************//* *//* DESCRIPTION *//* Create a CONSECUTIVE data set with 30-byte records containing *//* names and birthdays of people whose birthdays are in October. *//* *//* USAGE *//* The following commands are required to establish *//* the environment variables to run this program: *//* *//* SET DD:WORK=BDAY.OCT *//* SET DD:SYSIN=BDAY.INP,RECSIZE(80) *//********************************************************************/

BDAY: proc options(main);

put skip list(’BDAY TEST HAS STARTED’);

dcl Work file stream output,1 Rec,

3 Name char(19),3 BMonth char(3),3 Pad1 char(1),3 BDate char(2),3 Pad2 char(1),3 BYear char(4);

dcl Eof bit(1) init(’0’b);dcl In char(30) def Rec;

on endfile(sysin) Eof=’1’b;

open file(Work) linesize(400);get file(sysin) edit(In)(a(30));do while (¬Eof);if BMonth = ’OCT’

then put file(Work) edit(In)(a(30));else;

get file(sysin) edit(In)(a(30));end;close file(Work);

put skip list(’BDAY TEST HAS ENDED’);

end BDAY;bday.inp contains the input data used at execution time:

LUCY D. MAR 15 1950REGINA W. OCT 09 1971GARY M. DEC 01 1964PETER T. MAY 03 1948JANE K. OCT 24 1939

Figura 8. Crear un conjunto de datos con una transmisión de datos orientada a stream

Transmisión orientada a secuencia

Capítulo 11. Definir y utilizar conjuntos de datos consecutivos 265

Page 288: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

archivo asociado para entrada y leer los elementos que contiene el conjunto dedatos; o puede abrir el archivo para salida y ampliar el conjunto de datosañadiendo elementos al final.

Para acceder a un conjunto de datos, tiene que utilizar uno de los siguienteselementos para identificarlo:v Atributo ENVIRONMENTv Variable de entorno DD:ddnamev Opción TITLE de la sentencia OPEN

Información fundamentalCuando su aplicación accede a un archivo STREAM existente, PL/I tiene queconseguir un valor de longitud de registro para ese archivo. El valor puedeproceder de uno de los siguiente orígenes:v La opción LINESIZE de la sentencia OPENv La opción RECSIZE del atributo ENVIRONMENTv La opción RECSIZE de la variable de entorno DD:ddnamev La opción RECSIZE de la opción TITLE de la sentencia OPENv Un atributo ampliado del conjunto de datosv Un valor predeterminado suministrado por PL/I.

Si utiliza un archivo OUTPUT existente, o si proporciona un valor RECSIZE, PL/Idetermina el valor de longitud del registro tal y como se describe en “Crear unconjunto de datos con stream de E/S” en la página 263.

PL/I utiliza un valor de longitud de registro predeterminado para un archivoINPUT cuando:v El archivo es SYSIN, valor = 80v El archivo está asociado al terminal (CON:, SCREEN$:, STDOUT: o STDERR:),

valor = 120.

EjemploEl programa de Figura 9 en la página 267 lee los datos creados por el programa enFigura 8 en la página 265 y utiliza el conjunto de datos para configurar SYSPRINTpara mostrar los datos. El conjunto de datos SYSPRINT está asociado al dispositivoCON, así que si no se desvincula antes de ejecutar el programa, la salida semostrará en pantalla. )Para obtener más información sobre SYSPRINT, consulte“Uso de los archivos SYSIN y SYSPRINT” en la página 271).

Transmisión orientada a secuencia

266 PL/I for WindowsGuía de programación

Page 289: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Utilización de archivos PRINTEn un programa PL/I, el uso de un archivo PRINT es una buena forma decontrolar el diseño de la salida impresa de una transmisión de datos orientada asecuencia. PL/I inserta automáticamente caracteres de control de impresión enrespuesta a las opciones PAGE, SKIP y LINE y elementos de formato.

Puede aplicar el atributo PRINT a cualquier archivo STREAM OUTPUT, incluso sino pretende imprimir el conjunto de datos asociado directamente. Cuando seasocia un archivo PRINT a un conjunto de datos de acceso directo, los caracteresde control de impresión no tienen efecto sobre el diseño del conjunto de datos,pero aparecen como parte de los datos en los registros.

PL/I reserva el primer byte de cada registro transmitido mediante un archivoPRINT para un carácter de control de impresión ANSI, e inserta los caracteresapropiados automáticamente (consulte “Archivos destinados a impresora” en lapágina 261).

/********************************************************************//* *//* DESCRIPTION *//* Read a CONSECUTIVE data set and print the 30-byte records *//* to the screen. *//* *//* USAGE *//* The following command is required to establish *//* the environment variable to run this program: *//* *//* SET DD:WORK=BDAY.OCT *//* *//* Note: This sample program uses the CONSECUTIVE data set *//* created by the previous sample program BDAY. *//* *//********************************************************************/

BDAY1: proc options(main);

put skip list(’BDAY1 TEST HAS STARTED’);

dcl Work file stream input;

dcl Eof bit(1) init(’0’b);

dcl In char(30);

on endfile(Work) Eof=’1’b;

open file(Work);get file(Work) edit(In)(a(30));do while (¬Eof);put file(sysprint) skip edit(In)(a);get file(Work) edit(In)(a(30));end;close file(Work);

put skip list(’BDAY1 TEST HAS ENDED’);

end BDAY1;

Figura 9. Acceso a un conjunto de datos con transmisión de datos orientada a secuencia

Transmisión orientada a secuencia

Capítulo 11. Definir y utilizar conjuntos de datos consecutivos 267

Page 290: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PL/I maneja las opciones PAGE, SKIP y LINE o elementos de formato insertandoel carácter de control correspondiente en los registros. Si la opción SKIP o la opciónLINE especifica un espacio de más de 3 líneas, PL/I inserta registros en blancosuficientes con los caracteres de control correspondientes para completar el espacionecesario.

Si se transmite un archivo PRINT a un dispositivo de terminal, las opciones PAGE,SKIP y LINE nunca hacen que se salten más de tres líneas, a no ser que seespecifique una salida con formato.

Controlar la longitud de la línea de impresiónPuede limitar la longitud de la línea de impresión producida por un archivoPRINT:v Especificando la longitud del registro en su programa PL/I mediante la opción

RECSIZE del atributo ENVIRONMENT.v Especificando el tamaño de la línea en una sentencia OPEN utilizando la opción

LINESIZE.v Especificando la longitud de registro en la opción TITLE de la sentencia OPEN

mediante la opción RECSIZE.

RECSIZE tiene que incluir el byte adicional para el carácter de control deimpresión; tiene que ser 1 byte más largo que la longitud de la línea de impresión.LINESIZE hace referencia al número de caracteres de la línea de impresión; PL/Iañade el carácter de control de impresión.

No modifique el tamaño de la línea para un archivo durante la ejecución cerrandoel archivo y abriéndolo de nuevo con un nuevo tamaño de línea.

dado que los archivos PRINT tienen un tamaño de línea predeterminado de 120caracteres, no necesita proporcionar información de longitud de registro.

Ejemplo: Figura 10 en la página 269 ilustra el uso de un archivo PRINT y lasopciones de impresión de sentencias de transmisión de datos orientadas asecuencia para dar formato a una tabla y grabarla en un dispositivo de accesodirector para imprimir más adelante. La tabla comprende los senos naturales de losángulos de 0° a 359° 54' en pasos de 6'.

Transmisión orientada a secuencia

268 PL/I for WindowsGuía de programación

Page 291: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Las sentencias de la unidad ON ENDPAGE insertan un número de página al finalde cada página y configuran la cabecera de la página siguiente.

/********************************************************************//* *//* DESCRIPTION *//* Create a SEQUENTIAL data set. *//* *//* USAGE *//* The following command is required to establish *//* the environment variable to run this program: *//* *//* SET DD:TABLE=MYTAB.DAT,ASA(Y) *//* *//********************************************************************/

SINE: proc options(main);

put skip list(’START CON3 TEST’);

/* Build a table of SINE values. */dcl Table file stream output print;dcl Deg fixed dec(5,1) init(0); /* init(0) for endpage */dcl Min fixed dec(3,1);dcl PgNo fixed dec(2) init(0);dcl Oncode builtin;dcl I fixed dec(2);

on errorbegin;

on error system;display (’oncode = ’|| Oncode);

end;

on endpage(Table)begin;

if PgNo ¬= 0 thenput file(Table) edit (’page’,PgNo)

(line(55),col(80),a,f(3));if Deg ¬= 360 then

do;put file(Table) page edit (’Natural Sines’) (a);

put file(Table) edit ((I do I = 0 to 54 by 6))(skip(3),10 f(9));

PgNo = PgNo + 1;end;

elseput file(Table) page;

end;

open file(Table) pagesize(52) linesize(102);signal endpage(Table);

put file(Table) edit((Deg,(sind(Deg+Min) do Min = 0 to .9 by .1) do Deg = 0 to 359))(skip(2), 5 (col(1), f(3), 10 f(9,4) ));put file(Table) skip(52);

put skip list(’END CON3 TEST’);

end SINE;

Figura 10. Crear un archivo de impresión mediante una transmisión de datos continuos. (Elejemplo de Figura 15 en la página 281 imprime este archivo)

Transmisión orientada a secuencia

Capítulo 11. Definir y utilizar conjuntos de datos consecutivos 269

Page 292: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

El programa de Figura 15 en la página 281 utiliza la transmisión de datos orientadaa registro para imprimir la tabla creada por el programa en Figura 10 en la página269.

Sustituir la tabla de control del tabuladorLa salida dirigida a datos y dirigida a lista a un archivo PRINT se alinea en lasposiciones de tabulador preestablecidas, que se definen en la tabla de control deltabulador definida por PL/I. El tabla de control del tabulador es una estructuraexterna denominada PLITABS. Figura 11 muestra su declaración.

Las definiciones de los campos de la tabla son las siguientes:

OffsetEntero binario que aporta el desplazamiento de Number_of_tabs, el campo deindica el número de tabuladores que se van a utilizar, desde la parte superiorde PLITABS.

Tamaño de páginaEntero binario que define el tamaño de página predeterminado. Este tamañode página se utiliza para volcar salidas al conjunto de datos PLIDUMP asícomo para salidas de secuencia.

LinesizeEntero binario que define el tamaño de línea predeterminado.

PagelengthEntero binario que define la longitud de página predeterminada paraimpresión en el terminal. El valor 0 indica una salida sin formato.

Fill1, Fill2, Fill3Tres enteros binarios, reservados para usos futuros.

Number_of_tabsEntero binario que define el número de entradas de posición de tabulador dela tabla (máximo 255). Si el recuento de tabuladores es cero, se ignoran lasposiciones de tabulación especificadas.

Tab1—Tabn:Enteros binarios que definen las posiciones de tabuladores en la línea deimpresión. La primera posición tiene el número 1 y la posición más alta elnúmero 255. El valor de cada tabulador tiene que ser mayor que el del

dcl 1 PLITABS static external,( 2 Offset init (14),

2 Pagesize init (60),2 Linesize init (120),2 Pagelength init (64),2 Fill1 init (0),2 Fill2 init (0),2 Fill3 init (0),2 Number_of_tabs init (5),2 Tab1 init (25),2 Tab2 init (49),2 Tab3 init (73),2 Tab4 init (97),

2 Tab5 init (121)) fixed bin (15,0);

Figura 11. Declaración de PLITABS. (Proporciona el tamaño de página, el tamaño de línea ylas posiciones de tabulación estándar)

Transmisión orientada a secuencia

270 PL/I for WindowsGuía de programación

Page 293: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

tabulador anterior en la tabla; si no, se ignora. El primer campo de datos de lasalida de impresión comienza en la siguiente posición de tabulación disponible.

Puede sustituir los valores de tabulación PL/I predeterminados de su programahaciendo que el enlazador resuelva una referencia externa a PLITABS. Puedehacerlo incluyendo una estructura PL/I con el nombre PLITABS y los atributosEXTERNAL STATIC en el programa fuente que contiene su rutina principal.

Puede ver un ejemplo de estructura PL/I en Figura 12. Este ejemplo crea tresvalores de tabulación, en las posiciones 30, 60 y 90, y utiliza los valorespredeterminados de tamaño de página y tamaño de línea. Tenga en cuenta queTAB1 identifica la posición del segundo elemento impreso en la línea; el primerelemento de una línea siempre empieza en el margen izquierdo. El primerelemento de la estructura es el desplazamiento al campo NO_OF_TABS; FILL1,FILL2 y FILL3 puede omitirse ajustando el valor del desplazamiento en –6.

Uso de los archivos SYSIN y SYSPRINTSi codifica las sentencias GET o PUT sin la opción FILE, PL/I asumecontextualmente los archivos SYSIN y SYSPRINT, respectivamente.

Si no declara SYSPRINT, PL/I da al archivo el atributo PRINT además de losatributos predeterminados normales; el conjunto completo de atributos es:

file stream print external

Como SYSPRINT es un archivo PRINT, se aplica un tamaño de líneapredeterminado de 120 caracteres cuando se abre el archivo.

Puede alterar los atributos suministrados a SYSPRINT por PL/I declarando oabriendo explícitamente el archivo. Sin embargo, cuando se declara oabreSYSPRINT como archivo STREAM OUTPUT, el atributo PRINT se aplica deforma predeterminada, a no ser que también se declare el atributo INTERNAL.

PL/I no proporciona atributos espaciales para el archivo de entrada SYSIN; si no lodeclara, solo recibe los atributos predeterminados.

Controlar la entrada del terminalPara introducir datos para un archivo de entrada, haga lo siguiente:

dcl 1 PLITABS static ext,2 (Offset init(14),

Pagesize init(60),Linesize init(120),Pagelength init(0),Fill1 init(0),Fill2 init(0),Fill3 init(0),No_of_tabs init(3),Tab1 init(30),Tab2 init(60),

Tab3 init(90)) fixed bin(15,0);

Figura 12. Estructura PL/I PLITABS para modificar los valores de tabulación preestablecidos

Transmisión orientada a secuencia

Capítulo 11. Definir y utilizar conjuntos de datos consecutivos 271

Page 294: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v Declare el archivo de entrada de forma explícita o implícita con la opción deentorno CONSECUTIVE (todos los archivos continuos cumplen esta condición).

v Asigne el archivo de entrada al terminal.

Puede utilizar el archivo de entrada predeterminado estándar SYSIN porque es unarchivo continuo que puede asignarse al terminal.

Se le puede solicitar una entrada para archivos continuos mediante dos puntos (:)si especifica PROMPT(Y), consulte “PROMPT” en la página 248. Verá los dospuntos cada vez que se ejecute una sentencia GET en el programa. La sentenciaGET hace que el sistema pase a la siguiente línea. Es entonces cuando puedeintroducir los datos necesarios. Si introduce una línea que no contiene informaciónsuficiente para completar la ejecución de la sentencia GET, se mostrará otrasolicitud que consta de un signo más seguido de dos puntos (+:).

Si no especifica PROMPT(Y), el valor predeterminado es que no haya dos puntosvisibles al inicio de la línea.

Si añade un guión al final de una línea que va a continuar, puede retrasar latransmisión de los datos a su programa hasta que introduzca dos o más líneas. Elguión en una carácter de continuación explícito.

Si su programa incluye sentencias de salida que solicitan datos de entrada, puedeinhibir la solicitud inicial del sistema terminando su propia solicitud con dospuntos. Por ejemplo, la sentencia GET puede ir precedida de una sentencia PUT:

put skip list(’Enter next item:’);

Para inhibir la solicitud del sistema para la siguiente sentencia GET, su propiasolicitud tiene que cumplir las condiciones siguientes:v Tiene que estar dirigida a lista o a edición y, en el caso de estar dirigida a lista,

tiene que ser a un archivo PRINT.v El archivo que transmite la solicitud tiene que asignarse al terminal. Si utiliza la

opción COPY para copiar el archivo en el terminal, la solicitud del sistema no seinhibe.

Utilizar archivos en modo conversacionalPara que sus programas interactúen con un usuario de forma conversacional,utilice el terminal como un dispositivo de entrada y salida para archivosconsecutivos del programa. Cualquier archivo continuo puede utilizarse de estemodo, porque la entrada/salida conversacional no necesita ningún código PL/Iespecial.

Formato de datosLos datos que introduce en el terminal deberían tener exactamente el mismoformato que los datos de entrada de secuencia en modalidad de proceso por lotes,excepto por las variaciones siguientes:v Puntuación simplificada para entrada: si introduce elementos independientes de

entrada en líneas separadas, no es necesario escribir espacios en blanco o comas;PL/I coloca una coma al final de cada línea.Como ejemplo, considere la sentencia siguiente:

get list(I,J,K);

Puede dar la respuesta siguiente pulsando la tecla Intro después de cadaelemento. (Los dos puntos solo aparecen si especifica PROMPT(Y).

Controlar entradas desde el terminal

272 PL/I for WindowsGuía de programación

Page 295: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

:1:2:3

Escribir datos en líneas separadas equivale a especificar::1,2,3

Si quiere que un elemento continúe en otra línea, tiene que terminar la línea conuna carácter de continuación (el guión). De lo contrario, se inserta una comapara las sentencias GET LIST o GET DATA. En una sentencia GET EDIT serellena el elemento.

v Relleno automático para GET EDIT: no hace falta introducir espacios en blanco alfinal de una línea de entrada para una sentencia GET EDIT. El elemento queintroduzca se rellena hasta alcanzar la longitud correcta.Considere la siguiente sentencia PL/I:

get edit(Name)(a(15));

Puede especificar estos cinco caracteres seguidos inmediatamente de ENTER.SMITH

El elemento se rellena con 10 espacios en blanco, de forma que el programarecibe una serie de 15 caracteres de longitud. Si quiere que un elemento continúeen una línea posterior, tiene que añadir una carácter de continuación al final decada línea excepto en la última. Si no, la primera línea que se transmite serellena y se trata como un elemento de datos completo.

v Opción SKIP o elemento de formato: Una opción SKIP en una sentencia GET ignoralos datos que aún no se han introducido. Todos los usos de SKIP(n) en los que nes mayor que uno se interpretan como SKIP(1). SKIP(1) significa que todos losdatos no utilizados de la línea actual se ignoran.

Archivos de registro y de secuenciaPuede asignar archivos de salida y continuos al terminal. Sin embargo, no seproporcionan solicitudes para los archivos de registro. Si asigna más de un archivoal terminal y uno o más son un archivo de registro, el archivo de salida no sesincroniza obligatoriamente. No se garantiza que el orden en el que se transmitenlos datos a y desde el terminal sea el mismo orden en el que se ejecutan lassentencias de E/S de PL/I correspondientes.

Letras mayúsculas y minúsculasEn los archivos de registro y continuos se transmiten series de caracteres alprograma tal y como se han introducido, en mayúsculas o minúsculas.

Fin de archivoLos caracteres /* en posición uno y dos de una línea que no contiene máscaracteres se tratan como una indicación de fin de archivo y lanzan la condiciónENDFILE.

Tenga en cuenta que la secuencia de caracteres /* en una línea no es unaindicación de fin del archivo cuando se añade una entrada a un archivo en lugarde a un terminal. Por ejemplo:cat input.txt | ./plipgm

Controlar entradas desde el terminal

Capítulo 11. Definir y utilizar conjuntos de datos consecutivos 273

Page 296: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

o./plipgm < input.txt

donde una línea que contiene solo /* del archivo input.txt no es una indicaciónde fin del archivo.

Cuando utilice un terminal, utilice la secuencia de teclas Control-D para generaruna indicación de fin del archivo.

Controlar la salida al terminalEn la pantalla, puede mostrar los datos de un archivo PL/I que ha sido:v Declarado explícitamente o implícitamente con la opción de entorno

CONSECUTIVE. Todos los archivos continuos cumplen esta condición.v Asignado al dispositivo del terminal (CON:, STDOUT:, SCREEN$:, o STDERR:).

El archivo de salida estándar SYSPRINT suele cumplir estas dos condiciones.

Formato de archivos PRINTLos datos de SYSPRINT o de otros archivos PRINT no se suelen formatear encolumnas y páginas en el terminal. Siempre se saltan tres líneas en las opcionesPAGE y LINE y en elementos de formato. La condición ENDPAGE no se suelelanzar nunca. SKIP(n), donde n es mayor que tres, hace que solo se salten treslíneas. SKIP(0) se implementa mediante el retorno de carro.

Puede hacer que un archivo PRINT se formatee en páginas insertando una tabla decontrol de tabulación en el programa. La tabla tiene que llamarse PLITABS, y sucontenido se explica en “Sustituir la tabla de control del tabulador” en la página270. Para un diseño distinto al estándar, utilice la información sobre PLITABS quese proporciona en Figura 11 en la página 270. También puede utilizar PLITABSpara alterar las posiciones de tabulación de salida dirigida a lista y dirigida adatos.

La tabulación de la salida dirigida a lista y dirigida a datos se consigue mediantelas transmisión de caracteres de espacio en blanco.

Archivos de registro y de secuenciaPuede asignar archivos de registro y continuos al terminal. Sin embargo, si asignamás de un archivo al terminal y uno o más es un archivo de registro, el archivo desalida no se sincroniza obligatoriamente. No hay ninguna garantía de que el ordenen el que se transmiten los datos entre el programa y el terminal sea el mismo queel orden en el que se ejecutan las sentencias de entrada y salida PL/Icorrespondientes.

En el caso de archivos de registro y continuos, los caracteres se muestran en elterminal tal y como se retienen en el programa. Se pueden mostrar caracteres enmayúsculas y en minúsculas.

Ejemplo de un programa interactivoEl programa de ejemplo en Figura 13 en la página 275 crea un conjunto de datosconsecutivo PHONES utilizando un diálogo con el usuario.De formapredeterminada, SYSIN se asocia con el dispositivo CON. Puede sustituir estaasociación definiendo una variable de entorno para el archivo SYSIN o utilizandola opción TITLE en la sentencia OPEN. El conjunto de datos de salida está

Controlar entradas desde el terminal

274 PL/I for WindowsGuía de programación

Page 297: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

asociado a un archivo de disco INT1.DAT y contiene nombres y números deteléfono que el usuario introduce desde el teclado.

Usar E/S orientado a registrosPL/I soporta varios tipos de conjuntos de datos con el atributo RECORD. Estasección explica cómo utilizar entradas/salidas orientadas a registro con conjuntosde datos consecutivos.

/********************************************************************//* *//* DESCRIPTION *//* Create a SEQUENTIAL data set using a terminal dialog. *//* *//* USAGE *//* The following command is required to establish *//* the environment variable to run this program: *//* *//* SET DD:PHONES=INT1.DAT,APPEND(Y) *//* *//********************************************************************/

INT1: proc options(main);

dcl Phones stream env(recsize(40));

dcl Eof bit(1) init(’0’b);

dcl 1 PhoneBookEntry,3 NameField char(19),3 PhoneNumber char(21);

dcl InArea char(40);

open file (Phones) output;

on endfile(sysin) Eof=’1’b;

/* start creating phone book */put list(’Please enter name:’);get edit(NameField)(a(19));if ¬Eof thendo;

put list(’Please enter number:’);get edit(PhoneNumber)(a(21));

end;do while (¬Eof);

put file(Phones) edit(PhoneBookEntry)(a(40));put list(’Please enter name:’);get edit(NameField)(a(19));if ¬Eof thendo;

put list(’Please enter number:’);get edit(PhoneNumber)(a(21));

end;end;

close file(Phones);

end INT1;

Figura 13. Un programa interactivo de muestra

Controlar salidas al terminal

Capítulo 11. Definir y utilizar conjuntos de datos consecutivos 275

Page 298: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 13 recoge las sentencias de transmisión de datos y las opciones que puedeutilizar para crear y acceder a un conjunto de datos consecutivo utilizando unaentrada/salida orientada a registro.

Un archivo CONSECUTIVE asociado con un conjunto de datos DDM directo o declave solo puede abrirse para INPUT. PL/I lanza UNDEFINEDFILE si se intentaabrir un archivo de este tipo para OUTPUT o UPDATE.

Tabla 13. Sentencias y opciones permitidas para crear y acceder a conjuntos de datosconsecutivos

Declaración de archivo1 Sentencias válidas,2 con opcionesque tiene que especificar

Otras opciones quepuede especificar

SEQUENTIAL OUTPUTBUFFERED

WRITE FILE(file-reference)FROM(reference);

LOCATE based-variableFILE(file-reference);

SET(pointer reference)

SEQUENTIAL OUTPUTUNBUFFERED

WRITE FILE(file-reference)FROM(reference);

SEQUENTIAL INPUTBUFFERED

READ FILE(file-reference)INTO(reference);

READ FILE(file-reference)SET(pointer-reference);

READ FILE(file-reference)IGNORE(expression);

SEQUENTIAL INPUTUNBUFFERED

READ FILE(file-reference)INPUT(reference);

READ FILE(file-reference)IGNORE(expression);

SEQUENTIAL UPDATEBUFFERED

READ FILE(file-reference)INTO(reference);

READ FILE(file-reference)SET(pointer-reference);

READ FILE(file-reference)IGNORE(expression);

REWRITE FILE(file-reference)FROM(reference);

SEQUENTIAL UPDATEUNBUFFERED

READ FILE(file-reference)INTO(reference);

READ FILE(file-reference)IGNORE(expression);

REWRITE FILE(file-reference);

FROM(reference)

Notas:

1 La declaración de archivo completa incluye los atributos FILE, RECORD yENVIRONMENT

2 La sentencia READ FILE (file-reference); es una sentencia válida y equivale a READFILE(file-reference) IGNORE (1);

Usar E/S orientado a registros

276 PL/I for WindowsGuía de programación

Page 299: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Definir archivos usando el registro de entrada/salidaPuede definir archivos para la transmisión de datos orientada a registros utilizandouna declaración de archivo con los siguientes atributos:

declareFilename file record

input | output | updatesequentialbuffered | unbufferedenvironment(options);

Los atributos de archivo se describen en la Referencia de lenguaje PL/I.

Opciones ENVIRONMENT para la transmisión de datosorientada a registro

Las opciones ENVIRONMENT aplicables a los conjuntos de datos consecutivospara transmisión de datos orientada a registro, son:v CONSECUTIVEv CTLASAv ORGANIZATION(CONSECUTIVE)v RECSIZEv SCALARVARYING

Puede encontrar una descripción de estas opciones y de su sintaxis en “Especificarcaracterísticaa utilizando el atributo PL/I ENVIRONMENT” en la página 238.

Crear un conjunto de datos con un registro de entrada/salidaCuando crea un conjunto de datos consecutivos, tiene que abrir el archivo asociadode SEQUENTIAL OUTPUT. Puede utilizar la sentencia WRITE o LOCATE paraescribir registros. Tabla 13 en la página 276 muestra las sentencias y opciones paracrear un conjunto de datos consecutivos.

Para crear un conjunto de datos, tiene que proporcionar determinada informacióna PL/I, ya sea en el atributo ENVIRONMENT, en una variable de entornoDD:ddname o en la opción TITLE de la sentencia OPEN.

Información fundamentalCuando cree un conjunto de datos consecutivos tiene que especificar:v El nombre del conjunto de datos que se va asociar a su archivo PL/I. Un

conjunto de datos con organización consecutiva puede existir en cualquier tipode dispositivo (consulte “Intentar utilizar archivos no asociados a conjuntos dedatos” en la página 255).

v La longitud de registro. Puede especificar la longitud de registro utilizando laopción RECSIZE del atributo ENVIRONMENT, de la variable de entornoDD:ddname o de la opción TITLE de la sentencia OPEN.Para archivos asociados al dispositivo de terminal (CON:, STDOUT:, oSTDERR:), PL/I utiliza una longitud de registro predeterminada de 120 cuandono se especifica la opción RECSIZE.

Acceder y actualizar un conjunto de datos con E/S de registroCuando crea un conjunto de datos consecutivo, puede abrir el archivo que accede aél para buscar entradas secuenciales, salidas secuenciales o conjuntos de datos en

Usar E/S orientado a registros

Capítulo 11. Definir y utilizar conjuntos de datos consecutivos 277

Page 300: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

dispositivos de acceso directo para su actualización. Para ver un ejemplo de unprograma que accede a un conjunto de datos consecutivo y lo actualiza, consulteFigura 14 en la página 279.

Si abre el archivo para salida y quiere ampliar el conjunto de datos añadiendoregistros al final, no necesita especificar APPEND(Y) en la variable de entornoDD:ddname, porque ya es el valor predeterminado. Si especificaAPPEND(N), elconjunto de datos de sobrescribe. Si abre un archivo para actualizarlo, solo puedeactualizar los registros en sus secuencias existentes, y si quiere insertar registrostiene que crear un conjunto de datos nuevo. No puede modificar la longitud deregistro de un conjunto de datos existente.

Cuando accede a un conjunto de datos consecutivo mediante un archivoSEQUENTIAL UPDATE, tiene que recuperar un registro con una sentencia READantes de poder actualizarlo con la sentencia REWRITE. Sin embargo, cada registrorecuperado no necesita volver a escribirse. Una sentencia REWRITE actualizasiempre la última lectura del registr:.

Observe el siguiente código:read file(F) into(A);

.

.

.read file(F) into(B);

.

.

.rewrite file(F) from(A);

La sentencia REWRITE actualiza el registro leído por la segunda sentencia READ.Este registro leído por la primera sentencia no puede volver a escribirse despuésde que se ejecute la segunda sentencia READ.

Para acceder a un conjunto de datos, tiene que identificarlo en PL/I utilizando laopción TITLE de la sentencia OPEN o una variable de entorno DD:ddname.

Tabla 13 en la página 276 muestra las sentencias y opciones para acceder yactualizar un conjunto de datos consecutivo.

Información fundamentalCuando su aplicación accede a un archivo RECORD existente, PL/I tiene queconseguir un valor de longitud de registro para ese archivo. El valor puedeproceder de uno de los siguiente orígenes:v La opción RECSIZE del atributo ENVIRONMENTv La opción RECSIZE de la variable de entorno DD:ddnamev La opción RECSIZE de la opción TITLE de la sentencia OPENv Un valor predeterminado suministrado por PL/I.

PL/I utiliza un valor de longitud de registro predeterminado para un archivoINPUT cuando:v El archivo es SYSIN. En este caso, el valor utilizado es 80.v El archivo está asociado al terminal. En este caso, el valor utilizado es 120.

Ejemplos de conjuntos de datos consecutivosLa creación y acceso a conjuntos de datos consecutivos se ilustra en el programa enFigura 14 en la página 279. El programa fusiona el contenido de dos archivos PL/IINPUT1 e INPUT2, y los escribe en un nuevo archivo PL/I, OUT. INPUT1 e

Usar E/S orientado a registros

278 PL/I for WindowsGuía de programación

Page 301: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

INPUT2 están asociado a los archivos de disco EVENS.INP y ODDS.INP,respectivamente, y contienen registros de 6 bytes dispuestos en una secuencia declasificación ASCII.

/********************************************************************//* *//* DESCRIPTION *//* Merge 2 data sets creating a CONSECUTIVE data set. *//* *//* USAGE *//* The following commands are required to establish *//* the environment variables to run this program: *//* *//* SET DD:OUT=CON4.DAT *//* SET DD:INPUT1=EVENS.INP *//* SET DD:INPUT2=ODDS.INP *//* *//* *//********************************************************************/

MERGE: proc options(main);

put skip list(’START CON4 TEST’);

dcl Input1 file record sequential input env(recsize(6));dcl Input2 file record sequential input env(recsize(6));dcl Out file record sequential env(recsize(15));dcl Sysprint file print; /* normal print file */

dcl Input1_Eof bit(1) init(’0’b); /* eof flag for Input1 */dcl Input2_Eof bit(1) init(’0’b); /* eof flag for Input2 */dcl Out_Eof bit(1) init(’0’b); /* eof flag for Out */dcl True bit(1) init(’1’b); /* constant True */dcl False bit(1) init(’0’b); /* constant False */

dcl Item1 char(6) based(a); /* item from Input1 */dcl Item2 char(6) based(b); /* item from Input2 */dcl A pointer; /* pointer var */dcl B pointer; /* pointer var */

on endfile(Input1) Input1_Eof = True;on endfile(Input2) Input2_Eof = True;on endfile(Out) Out_Eof = True;

open file(Input1),file(Input2),file(Out) output;

read file(Input1) set(A); /* priming read */read file(Input2) set(B);

Figura 14. Fusionar ordenar-crear y acceder a un conjunto de datos consecutivo

Usar E/S orientado a registros

Capítulo 11. Definir y utilizar conjuntos de datos consecutivos 279

Page 302: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

do while ((Input1_Eof = False) & (Input2_Eof = False));if Item1 > Item2 then

do;write file(Out) from(Item2);put file(Sysprint) skip edit(’1>2’, Item1, Item2)

(a(5),a,a);read file(Input2) set(B);

end;else

do;write file(Out) from(Item1);put file(Sysprint) skip edit(’1<2’, Item1, Item2)

(a(5),a,a);read file(Input1) set(A);

end;end;

do while (Input1_Eof = False); /* Input2 is exhausted */write file(Out) from(Item1);put file(Sysprint) skip edit(’1’, Item1) (a(2),a);read file(Input1) set(A);

end;

do while (Input2_Eof = False); /* Input1 is exhausted */write file(Out) from(Item2);put file(Sysprint) skip edit(’2’, Item2) (a(2),a);read file(Input2) set(B);

end;

close file(Input1), file(Input2), file(Out);put file(Sysprint) page;open file(Out) sequential input;

read file(Out) into(Item1); /* display Out file */do while (Out_Eof = False);

put file(Sysprint) skip edit(Item1) (a);read file(Out) into(Item1);

end;close file(Out);

put skip list(’END CON4 TEST’);

end MERGE;

Aquí tiene un ejemplo de evens.inp:

BBBBBB DDDDDDFFFFFFHHHHHHJJJJJJ

Aquí tiene un ejemplo de odds.inp:

AAAAAACCCCCCEEEEEEGGGGGGIIIIIIKKKKKK

Fusionar ordenar-crear y acceder a un conjunto de datos consecutivo

El programa de Figura 15 en la página 281 utiliza una transmisión de datosorientada a registro para escribir la tabla creada por el programa en Figura 10 en lapágina 269 en un archivo denominado out.txt.

Usar E/S orientado a registros

280 PL/I for WindowsGuía de programación

Page 303: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

/********************************************************************//* *//* DESCRIPTION *//* Write a SEQUENTIAL data set created by the SINE program to a *//* file. *//* *//* USAGE *//* The following commands are required to establish *//* the environment variables to run this program: *//* *//* SET DD:TABLE=MYTAB.DAT *//* SET DD:PRINTER=PRN *//* *//********************************************************************/

PRT: proc options(main);

put skip list(’START CON5 TEST’);

dcl Table file record input sequential;dcl Output file record output seql

env(recsize(200));dcl Line char(102) var;

dcl Table_Eof bit(1) init(’0’b); /* Eof flag for Table */dcl True bit(1) init(’1’b); /* constant True */dcl False bit(1) init(’0’b); /* constant False */

on endfile(Table) Table_Eof = True;

open file(Table),file(Output);

read file(Table) into(Line); /* priming read */

do while (Table_Eof = False);if Line=’’ then /* insert blank lines */

Line= ’ ’;write file(Output) from(Line);read file(Table) into(Line);

end;

close file(Table),file(Output);

put skip list(’END CON5 TEST’);

end PRT;

Figura 15. Imprimir la transmisión de datos orientada a registro

Usar E/S orientado a registros

Capítulo 11. Definir y utilizar conjuntos de datos consecutivos 281

Page 304: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Usar E/S orientado a registros

282 PL/I for WindowsGuía de programación

Page 305: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 12. Definir y utilizar conjuntos de datos regionales

Este capítulo cubre la organización de conjuntos de datos regionales, las sentenciasde transmisión de datos y las opciones ENVIRONMENT que definen conjuntos dedatos regionales. También se trata la creación y acceso a conjuntos de datosregionales.

Un conjunto de datos con organización regional se divide en regiones, cada una delas cuales viene identificada por un número de región, y cada una puede incluir unregistro. Las regiones se numeran de forma sucesiva, comenzando por cero, y sepuede acceder a un registro especificando su número de región en una sentenciade transmisión de datos.

Los conjunto de datos regionales se restringen a dispositivos de acceso directo.

La organización regional de un conjunto de datos le permite controlar la colocaciónfísica de registros en el conjunto de datos y optimizar el acceso de datos. Este tipode optimización no está disponible con la organización consecutiva, en la que losregistros sucesivos se escriben en una secuencia física estricta.

Puede crear un conjunto de datos regional de forma muy similar a un conjunto dedatos consecutivo, presentando registros en orden de números de regiónascendentes; o puede utilizar el acceso directo, en el que presenta registros ensecuencias aleatorias y y los inserta directamente en regiones preformateadaspreviamente. Una vez ha creado un conjunto de datos regional, puede acceder a élutilizando un archivo con los atributos SEQUENTIAL o DIRECT así como INPUTo UPDATE. No necesita especificar un número de región ni una clave si elconjunto de datos se asocia a un archivo SEQUENTIAL INPUT o SEQUENTIALUPDATE. Cuando el archivo tiene el atributo DIRECT, puede recuperar, añadir,eliminar y sustituir registros de forma aleatoria.

Los registros de un conjunto de datos regional son registros reales que contienendatos válidos o registros ficticios.

PL/I soporta conjuntos de datos REGIONAL(1). Consulte Tabla 14 para ver unalista de las sentencias de transmisión de datos y opciones que puede utilizar paracrear y a acceder a un conjunto de datos REGIONAL(1).

Tabla 14. Sentencias y opciones permitidas para crear y acceder a conjuntos de datosregionales

ArchivoDeclaración1

Sentencias válidas,2 conopciones que tiene que incluir

Otras opcionesque puede incluir

SEQUENTIAL OUTPUTBUFFERED

WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

Variable basada en LOCATEFROM(archivo-referencia)KEYFROM(expresión);

SET(puntero-referencia)

SEQUENTIAL OUTPUTUNBUFFERED

WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

© Copyright IBM Corp. 1998, 2013 283

Page 306: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 14. Sentencias y opciones permitidas para crear y acceder a conjuntos de datosregionales (continuación)

ArchivoDeclaración1

Sentencias válidas,2 conopciones que tiene que incluir

Otras opcionesque puede incluir

SEQUENTIAL INPUTBUFFERED

READ FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-referencia)SET(puntero-referencia);

READ FILE(archivo-referencia)IGNORE(expresión);

KEYTO(referencia)

KEYTO(referencia)

SEQUENTIAL INPUTUNBUFFERED

READ FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-referencia)IGNORE(expresión);

KEYTO(referencia)

SEQUENTIAL UPDATE3

BUFFEREDREAD FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-referencia)SET(puntero-referencia);

READ FILE(archivo-referencia)IGNORE(expresión);

REWRITE FILE(archivo-referencia);

KEYTO(referencia)

KEYTO(referencia)

FROM(referencia)

SEQUENTIAL UPDATEUNBUFFERED

READ FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-referencia)IGNORE(expresión);

REWRITE FILE(archivo-referencia)FROM(referencia);

KEYTO(referencia)

DIRECT OUTPUT WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

DIRECT INPUT READ FILE(archivo-referencia)INTO(referencia);KEY(expresión);

DIRECT UPDATE READ FILE(archivo-referencia)INTO(referencia);KEY(expresión);REWRITE FILE(archivo-referencia)FROM(referencia)KEY(expresión);WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

DELETE FILE(archivo-referencia)KEY(expresión);

Conjuntos de datos regionales

284 PL/I for WindowsGuía de programación

Page 307: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 14. Sentencias y opciones permitidas para crear y acceder a conjuntos de datosregionales (continuación)

ArchivoDeclaración1

Sentencias válidas,2 conopciones que tiene que incluir

Otras opcionesque puede incluir

Notas:

1 La declaración de archivo completa incluye los atributos FILE, RECORD yENVIRONMENT; si utiliza alguna de las opciones KEY, KEYFROM o KEYTO, tiene queincluir también el atributo KEYED.

2 La sentencia READ FILE(archivo-referencia); equivale a la sentencia READFILE(archivo-referencia) IGNORE(1);

3 El archivo no puede tener el atributo UPDATE cuando se crean conjuntos de datos nuevos.

Definir archivos para un conjunto de datos regionalUtilice una declaración de archivo con los siguientes atributos para definir unconjunto de datos regional secuencial:

declareFilename file record

input | output | updatesequentialbuffered | unbuffered[keyed]environment(options);

Para definir un conjunto de datos regional directo, utilice una declaración dearchivo con los atributos siguientes:

declareFilename file record

input | output | updatedirectunbuffered[keyed]environment(options);

Los atributos de archivo se describen en Referencia de lenguaje PL/I.

Especificar opciones ENVIRONMENTLas opciones ENVIRONMENT aplicables a los conjuntos de datos regionales son:

FIXEDREGIONAL(1)RECSIZESCALARVARYING

Estas opciones se describen en “Especificar característicaa utilizando el atributoPL/I ENVIRONMENT” en la página 238.

Información fundamental para crear y acceder a conjuntos dedatos regionales

Para crear un conjunto de datos regional, tiene que proporcionar determinadainformación a PL/I, ya sea en el atributo ENVIRONMENT o en la variable deentorno DD:ddname.

Conjuntos de datos regionales

Capítulo 12. Definir y utilizar conjuntos de datos regionales 285

Page 308: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tiene que proporcionar la siguiente información durante la creación de un conjuntode datos:v El nombre del conjunto de datos asociado a su archivo PL/I. Un conjunto de

datos con organización REGIONAL(1) solo puede existir en una dispositivo dealmacenamiento de acceso directo (consulte “Intentar utilizar archivos noasociados a conjuntos de datos” en la página 255).

v La longitud de registro. Puede especificar la longitud de registro utilizando laopción RECSIZE del atributo ENVIRONMENT o la variable de entornoDD:ddname o en la opción TITLE de la sentencia OPEN.

v La extensión (el número de regiones) del conjunto de datos. Puede especificareste valor con la opción RECCOUNT de la variable de entorno DD:ddname.El valor predeterminado para RECCOUNT es 50.

Utilizar claves con conjuntos de datos regionalesLas claves de origen se utilizan para acceder a conjuntos de datos REGIONAL(1).Una clave de origen es el valor de carácter de la expresión que aparece en la opciónKEY o KEYFROM de una sentencia de transmisión de datos para identificar elregistro al que hace referencia la sentencia. Cuando accede a un registro en unconjunto de datos regional, la clave de origen es el número de región.

Utilizar conjuntos de datos REGIONAL(1)En un conjunto de datos REGIONAL(1), el número de región sirve comoidentificación única de un registro particular. El valor de carácter de la clave deorigen debería representar un entero decimal sin signo no superior a 2147483647. Siel número de región supera esta cifra, se trata como un módulo 2147483648; porejemplo, 2147483658 se trata como 10.

En la clave de origen solo son válidos los caracteres del 0 al 9 y los caracteres deespacio en blanco; los espacios en blanco delanteros se interpretan como ceros. Losespacios en blanco incluidos no están permitidos en el número de región; el primerespacio en blanco incluido, si lo hay, termina el número de región. Si aparecen másde 10 caracteres en la clave de origen, solo se utilizan los 10 que estén más a laderecha como número de región; si hay menos de 10 caracteres, se añaden espaciosen blanco (interpretados como ceros) por la izquierda.

Registros ficticiosLos registros de un conjunto de datos REGIONAL (1) son registros reales quecontienen datos válidos o registros ficticios.Un registro ficticio en un conjunto dedatos REGIONAL(1) se identifica mediante la constante 'FF'X en su primer byte.Aunque esos registros ficticios se insertan en el conjunto de datos cuando se crea ocuando se elimina el registro, no se ignoran cuando se lee el conjunto de datos. Suprograma PL/I tiene que estar preparado para reconocerlos. Puede sustituir losregistros ficticios pos datos válidos.

Crear un conjunto de datos REGIONAL(1)Puede crear un conjunto de datos REGIONAL(1) ya sea secuencialmente omediante el acceso directo. Tabla 14 en la página 283 muestra las sentencias yopciones para crear un conjunto de datos regional.

Cuando crea un conjunto de datos, al abrir el archivo el conjunto de datos se llenade registros ficticios. Tiene que colocar los registros en orden ascendente denúmeros de región para un archivo SEQUENTIAL OUTPUT. Si se produce un

Definir archivos para un conjunto de datos regional

286 PL/I for WindowsGuía de programación

Page 309: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

error en la secuencia, o si presenta una clave duplicada, se lanza la condición KEY.Si utiliza un archivo DIRECT OUTPUT para crear el conjunto de datos, puedepresentar los registros en orden aleatorio. Si presenta un número de regiónduplicado, el registro existente se sobrescribe.

Si crea un conjunto de datos utilizando un archivo del almacenamiento intermedio,y la última sentencia WRITE o LOCATE antes de que se cierre el archivo intentatransmitir un registro más allá de los límites del conjunto de datos, la sentenciaCLOSE podría lanzar una condición ERROR.

EjemploLa creación de un conjunto de datos REGIONAL(1) se ilustra en Figura 16. Elconjunto de datos es una lista de extensiones telefónicas con los nombres de lossuscriptores a los que están asociadas. Las extensiones telefónicas se correspondencon los números de región del conjunto de datos; los datos en cada región ocupadaes el nombre de un suscriptor.

/********************************************************************//* *//* DESCRIPTION *//* Create a REGIONAL(1) data set. *//* *//* USAGE *//* The following commands are required to establish *//* the environment variables to run this program: *//* *//* SET DD:SYSIN=CRG.INP,RECSIZE(30) *//* SET DD:NOS=NOS.DAT,RECCOUNT(100) *//* *//********************************************************************/

CRR1: proc options(main);

dcl Nos file record output direct keyedenv(regional(1) recsize(20));

dcl Sysin file input record;dcl 1 In_Area,

2 Name char(20),2 Number char( 2);

dcl IoField char(20);dcl Sysin_Eof bit (1) init(’0’b);dcl Ntemp fixed(15);

on endfile (Sysin) Sysin_Eof = ’1’b;

open file(Nos);read file(Sysin) into(In_Area);do while(¬Sysin_Eof);

IoField = Name;Ntemp = Number;write file(Nos) from(IoField) keyfrom(Ntemp);put file(sysprint) skip edit (In_Area) (a);read file(Sysin) into(In_Area);

end;

close file(Nos);

end CRR1;

Figura 16. Crear un conjunto de datos REGIONAL(1)

Utilizar conjuntos de datos REGIONAL(1)

Capítulo 12. Definir y utilizar conjuntos de datos regionales 287

Page 310: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

El archivo de entrada de tiempo de ejecución , crg.inp, podría tener este aspecto:

ACTION,G. 12BAKER,R. 13BRAMLEY,O.H. 28CHEESNAME,L. 11CORY,G. 36ELLIOTT,D. 85FIGGINS,E.S. 43HARVEY,C.D.W. 25HASTINGS,G.M. 31KENDALL,J.G. 24LANCASTER,W.R. 64MILES,R. 23NEWMAN,M.W. 40PITT,W.H. 55ROLF,D.E. 14SHEERS,C.D. 21SURCLIFFE,M. 42TAYLOR,G.C. 47WILTON,L.W. 44WINSTONE,E.M. 37

crear un conjunto de datos REGIONAL(1) (continuación)

Acceder y actualizar un conjunto de datos REGIONAL(1)Una vez haya creado un conjunto de datos REGIONAL(1), puede abrir el archivoque accede a él para SEQUENTIAL INPUT o UPDATE, o para DIRECT INPUT oUPDATE. Puede abrirlo para OUTPUT únicamente si el conjunto de datosexistente se va a sobrescribir. Tabla 14 en la página 283 muestra las sentencias y lasopciones para acceder a un conjunto de datos regional.

Acceso secuencialPara abrir un archivo SEQUENTIAL que se utiliza para procesar un conjunto dedatos REGIONAL(1), utilice el atributo INPUT o UPDATE. No puede incluir laopción KEY en las sentencias de transmisión de datos, pero el archivo puede tenerel atributo KEYED, ya que puede utilizar la opción KEYTO. Si la serie decaracteres de destino a la que se hace referencia en la opción KEYTO tiene más de10 caracteres, el valor devuelto (el número de región de caracteres) se rellena por laizquierda con espacios en blanco. Si la serie de destino tiene menos de diezcaracteres, el valor devuelto se trunca por la izquierda.

El acceso secuencial es en orden de números de región ascendente. Se recuperantodos los registros (sean ficticios o reales) y tiene que asegurarse de que suprograma PL(I reconoce registros ficticios.

Utilizando la entrada secuencial con un conjunto de datos REGIONAL(1), puedeleer todos los registros en secuencia de número de región ascendente, y con laactualización secuencial puede leer y reescribir cada registro.

Las reglas que rigen la relación entre las sentencias READ y REWRITE para unarchivo SEQUENTIAL UPDATE que accede a un conjunto de datos REGIONAL(1)son las mismas que las de un conjunto de datos consecutivos. Encontrará undebate sobre el uso de las sentencias READ y REWRITE en “Acceder y actualizarun conjunto de datos con E/S de registro” en la página 277.

Utilizar conjuntos de datos REGIONAL(1)

288 PL/I for WindowsGuía de programación

Page 311: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Acceso directoPara abrir un archivo DIRECT que se utiliza para procesar un conjunto de datosREGIONAL(1) puede utilizar el atributo INPUT o UPDATE. Todas las sentenciasde transmisión de datos tienen que incluir claves de origen; el atributo DIRECTimplica el atributo KEYED.

Utilice archivos DIRECT UPDATE para recuperar, añadir, eliminar o sustituirregistros de un conjunto de datos REGIONAL(1) de acuerdo con las siguientesconvenciones:

RetrievalSe recuperan todos los registros, ficticios o reales. Su programa tiene quereconocer registros ficticios.

AdditionUna sentencia WRITE sustituye un registro nuevo por el registro actual(real o ficticio) en la región especificada por la clave de origen.

DeletionEl registro que especifica mediante la clave de origen en una sentenciaDELETE se convierte en un registro ficticio.

ReplacementEl registro que especifica mediante la clave de origen en una sentenciaREWRITE, sea ficticio o real, se sustituye.

EjemploLa actualización de un conjunto de datos REGIONAL(1) se ilustra en Figura 17 enla página 290. este programa actualiza el conjunto de datos y recoge su contenido.Antes de grabar cada registro nuevo o actualizado, se prueba el registro existenteen la región para asegurarnos de que es un registro ficticio. Es necesario hacerloporque una sentencia WRITE puede sobrescribir una registro en un conjunto dedatos REGIONAL(1) incluso si no es un registro ficticio. Del mismo modo, durantela lectura e impresión secuencial del contenido del conjunto de datos, cada registrose prueba y los registros ficticios no se imprimen.

Utilizar conjuntos de datos REGIONAL(1)

Capítulo 12. Definir y utilizar conjuntos de datos regionales 289

Page 312: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

/********************************************************************//* *//* DESCRIPTION *//* Update a REGIONAL(1) data set. *//* *//* USAGE *//* The following commands are required to establish *//* the environment variables to run this program: *//* *//* SET DD:SYSIN=ACR.INP,RECSIZE(30) *//* SET DD:NOS=NOS.DAT,APPEND(Y) *//* *//* Note: This sample program is using the regional data set, *//* nos.dat, created by the previous sample program CRR1. *//* *//********************************************************************/

ACR1: proc options(main);

dcl Nos file record keyed env(regional(1));dcl Sysin file input record;dcl Sysin_Eof bit (1) init(’0’b);dcl Nos_Eof bit (1) init(’0’b);dcl 1 In_Area,

2 Name char(20),2 (CNewNo,COldNo) char( 2),2 In_Area_1 char( 1),2 Code char( 1);

dcl IoField char(20);dcl Byte char(1) def IoField;dcl NewNo fixed(15);dcl OldNo fixed(15);

on endfile (Sysin) Sysin_Eof = ’1’b;open file (Nos) direct update;read file(Sysin) into(In_Area);

Figura 17. Actualizar un conjunto de datos REGIONAL(1)

Utilizar conjuntos de datos REGIONAL(1)

290 PL/I for WindowsGuía de programación

Page 313: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

do while(¬Sysin_Eof);if CNewNo ¬=’ ’ then

NewNo = CNewNo;else

NewNo = 0;if COldNo ¬=’ ’ then

OldNo = COldNo;else

OldNo = 0;select(Code);

when(’A’,’C’)do;

if Code = ’C’ thendelete file(Nos) key(OldNo);

read file(Nos) key(NewNo) into(IoField);/* we must test to see if the record exists *//* if it doesn’t exist we create a record there */

if unspec(Byte) = (8)’1’b thenwrite file(Nos) keyfrom(NewNo) from(Name);

else put file(sysprint) skip list (’duplicate:’,Name);end;when(’D’) delete file(Nos) key(OldNo);otherwise put file(sysprint) skip list (’invalid code:’,Name);

end;read file(Sysin) into(In_Area);

close file(Sysin),file(Nos);put file(sysprint) page;open file(Nos) sequential input;on endfile (Nos) nos_Eof = ’1’b;read file(Nos) into(IoField) keyto(CNewNo);do while(¬Nos_Eof);

if unspec(Byte) ¬= (8)’1’b thenput file(sysprint) skip

edit (CNewNo,’ ’,IoField)(a(2),a(1),a);read file(Nos) into(IoField) keyto(CNewNo);

end;close file(Nos);end ACR1;

end;

En tiempo de ejecución, el archivo de entrada, ACR.INP, tendría este aspecto:

NEWMAN,M.W. 5640 CGOODFELLOW,D.T. 89 AMILES,R. 23 DHARVEY,C.D.W. 29 ABARTLETT,S.G. 13 ACORY,G. 36 DREAD,K.M. 01 APITT,W.H. 55 XROLF,D.F. 14 DELLIOTT,D. 4285 CHASTINGS,G.M. 31 DBRAMLEY,O.H. 4928 C

Actualizar un conjunto de datos REGIONAL(1) (continuación)

Utilizar conjuntos de datos REGIONAL(1)

Capítulo 12. Definir y utilizar conjuntos de datos regionales 291

Page 314: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Utilizar conjuntos de datos REGIONAL(1)

292 PL/I for WindowsGuía de programación

Page 315: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 13. Definir y utilizar los conjuntos de datos VSAM dela estación de trabajo

Este capítulo describe cómo se utilizan los conjuntos de datos VSAM (VirtualStorage Access Method, método de acceso de almacenamiento virtual) de laestación de trabajom incluyendo conjuntos de datos gestión de datos distribuidos(DDM), ISAM y BTRIEVE para transmisión de datos orientada a registros.

Distinción de plataforma

Se habla de tres métodos de acceso para productos de la estación de trabajo PL/I;sin embargo, no todos son compatibles con todas las plataformas. Utilice lasiguiente lista como guía:v DDM— soportado solo en AIXv ISAM— soportado solo en AIX y Windowsv BTRIEVE— soportado solo en Windows

Este capítulo describe las sentencias que utiliza para acceder a los tres tipos deconjuntos de datos VSAM: secuenciales, con clave y directos. En muchos aspectos,el VSAM estación de trabajo es parecido al VSAM del sistema principal. En laestación de trabajo, los términos secuenciales, con clave y directos son parecidos alos conjuntos de datos con entrada secuenciada, conjuntos de datos de secuenciade claves y conjuntos de datos de registro relativo de VSAM.

este capítulo concluye con una serie de ejemplos que muestran las sentencias PL/Iy la variable de entorno DD:ddname que hacen falta para crear y acceder a losconjuntos de datos VSAM de la estación de trabajo.

Mover datos entre la estación de trabajo y el sistema principalPara convertir archivos VSAM del sistema principal a los archivosDDM, ISAM oBTRIEVE correspondientes, siga el procedimiento documentado en el prólogo delprograma de utilidad LODVSAM. Asegúrese de que especifica el método de accesoapropiado AMTHD(DDM|ISAM|BTRIEVE).

Para convertir archivos DDM, ISAM o BTRIEVE a los archivos VSAM del sistemaprincipal correspondientes, siga el procedimiento documentado en el prólogo delprograma de utilidad RELOAD. Estos programas de utilidad son compatibles conPL/I for Windows, pero no están actualmente disponibles en PL/I for AIX.

Organización VSAM en la Estación de trabajoPL/I soporta los conjuntos de datos VSAM secuenciales, con clave y directos de laestación de trabajo. Estos conjuntos se corresponden con las organizaciones deconjuntos de datos PL/I consecutivas, indexada y relativa, respectivamente.

Los accesos con clave y secuencial son posibles con los tres tipos de conjuntos dedatos. En los conjuntos de datos con clave, la clave, que forma parte del registrológico, se utiliza para el acceso con clave; el acceso con clave es posible en losconjuntos de datos directos que utilizan números de registro relativos. El accesocon clave también es posible para conjuntos de datos secuenciales que utilizan elvalor de registro secuencial como clave.

© Copyright IBM Corp. 1998, 2013 293

Page 316: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Todos los conjuntos de datos VSAM de la estación de trabajo se almacenan endispositivos de almacenamiento de acceso directo. La organización física de losconjuntos de datos VSAM de laestación de trabajo difiere de las utilizadas porotros métodos de acceso.

Crear y acceder a conjuntos de datos VSAM de la Creatingand accessing estación de trabajo

Su aplicación PL/I puede crear conjuntos de datos VSAM de laestación de trabajo,o puede acceder a conjuntos de datos VSAM creados por otros programas. Cuandoabre un archivo para asociarlo a un conjunto de datos VSAM de la estación detrabajo, y ese conjunto de datos no existe, PL/I lo crea utilizando los atributos yopciones que especifica en la sentencia DECLARE o en una variable de entornoDD:ddname.

Cuando la aplicación accede a un conjunto de datos VSAM existente, PL/Idetermina su tipo: secuencial, directo o con clave.

La operación de escribir los datos iniciales en un conjunto de datos recién creadose denomina carga en esta publicación.

¿Está utilizando el método de acceso correcto?

Utilice cada uno de los métodos de acceso, DDM|ISAM|BTRIEVE, para acceder alos conjuntos de datos creados con ese método de acceso en particular. Porejemplo, no puede utilizar el método de acceso ISAM para acceder a conjuntos dedatos que ha creado con el método de acceso BTRIEVE.

determinar qué tipo de conjunto de datos VSAM de laestación de trabajo necesita

Utilice los tres tipos distintos de conjuntos de datos según los siguientes fines:v Utilice conjuntos de datos secuenciales para datos a los que acceda en el orden en

que se crearon los registros (o en orden inverso).v Utilice conjuntos de datos con clave cuando normalmente accede a los registros

mediante claves (por ejemplo, un archivo de control de existencias en el que seutiliza el número de pieza para acceder a un registro).

v Utilice conjuntos de datos directos para los datos en los que que cada elementotiene un número particular y normalmente accede a cada registro mediante esenúmero (por ejemplo, un sistema telefónico con un registro asociado a cadanúmero).

Acceder a registros en conjuntos de datos VSAM de laestación de trabajo

Puede acceder a registros de todo tipo de conjuntos de datos VSAM de laestaciónde trabajo directamente mediante el uso de una clave o secuencialmente (haciaatrás o hacia delante). También puede utilizar una combinación de las dos formas,seleccionando un punto de inicio con una clave y leyendo después hacia delante yhacia atrás desde ese punto.

Tabla 15 en la página 295 muestra cómo se pueden almacenar datos en los trestipos diferentes de conjunto de datos VSAM de la estación de trabajo y explica lasventajas y desventajas de cada uno de ellos.

Organización VSAM de la estación de trabajo

294 PL/I for WindowsGuía de programación

Page 317: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 15. Tipos y ventajas de conjuntos de datos VSAM de la Types and advantages ofestación de trabajo

Tipo deconjunto dedatos

Método de carga Método delectura

Método deactualización

Pros y contras

Secuencial Secuencialmente(solo haciadelante)

Se puede obtenerel valor deregistrosecuencial decada registro yutilizarlo comoclave

SEQUENTIALhacia delante ohacia atrás

KEYEDutilizando elvalor de registrosecuencial

Posicionamientomediante claveseguido desecuencial haciadelante o haciaatrás

Nuevos registrossolo al final

El acceso puedeser secuencial oKEYED (conclave)

Está permitida lasupresión deregistros

Ventajas creaciónfácil y sencilla

Usos usos en losque se accede alos datosprincipalmentede formasecuencial

Con clave Secuencial oaleatoriamentemediante clave

KEYEDespecificando laclave del registro

SEQUENTIALhacia atrás ohacia delantesiguiendo elorden de algúníndice

Posicionamientomediante claveseguido delecturasecuencial haciadelante o haciaatrás

KEYEDespecificandouna clave

SEQUENTIALsiguiendoposicionamientomediante clave

Está permitida lasupresión deregistros

Está permitida lainserción deregistros

Ventajas accesoy actualizacióncompletos

Usos para usosen los que elacceso estávinculado aclave

Directo Secuencialcomenzando enla ranura 1

KEYEDespecificandonúmero deranura

Posicionamientomediante claveseguido deescriturassecuenciales

KEYEDespecificandonúmeros comoclave

Secuencial haciadelante o haciaatrás omitiendoregistros vacíos

Secuencialmentecomenzando enuna ranuraespecificada ycontinuando enla siguienteranura

Con claveespecificandonúmeros comoclave

Está permitida lasupresión deregistros

Está permitida lainserción deregistros enranuras vacías

Ventajas accesorápido a registromediantenúmero

Inconvenientesestructuravinculada asecuencias denumeración

Usos parautilizar enregistros a losque se accedemediantenúmero

Organización VSAM de la estación de trabajo

Capítulo 13. Definir y utilizar los conjuntos de datos VSAM de la estación de trabajo 295

Page 318: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Utilizar claves para los conjuntos de datos VSAM de estaciónde trabajo

Todos los conjuntos de datos VSAM de la estación de trabajo pueden tener clavesasociadas a sus registros. Para los conjuntos de datos con clave, la clave es uncampo definido dentro del registro lógico. Para los conjuntos de datos secuenciales,la clave es el valor de registro secuencial del registro. Para los conjuntos de datosrelativos, la clave es un número de registro relativo.

Utilizar claves para los conjuntos de datos VSAM con clave deestación de trabajoLas claves de los conjuntos de datos con clave son una parte de los registroslógicos grabados en el conjunto de datos. Puede definir la longitud y la ubicaciónde las claves al crear el conjunto de datos.

Las formas de las que puede referenciar las claves en las opciones KEY, KEYFROMy KEYTO se describen en la “opción KEY(expression),” la “opciónKEYFROM(expression)” y la “opción KEYTO(reference)” enReferencia de lenguajePL/I.

Utilizar valores de registro secuencialesLos valores de registro secuenciales le permiten utilizar accesos con clave en unconjunto de datos secuencial asociado a un archivo KEYED SEQUENTIAL.

BTRIEVE y ISAMLos valores de registro secuenciales, o claves, son cadenas de caracteres delongitud 7, y sus valores se definen mediante el VSAM de la estación detrabajo.

No puede construir o manipular valores de registro secuenciales en PL/I; sinembargo, puede comparar sus valores para determinar las posiciones relativas deregistros en el conjunto de datos. Normalmente, los valores de registro secuencialesno pueden imprimirse.

Puede obtener el valor de registro secuencial de un registro utilizando la opciónKEYTO, ya sea en una sentencia WRITE al cargar o ampliar el conjunto de datos, oen una sentencia READ al leer el conjunto de datos. Después podrá utilizar unvalor de registro secuencial obtenido de cualquiera de estas formas en la opciónKEY de una sentencia READ o REWRITE.

Utilizar números relativos de registroLos registros de un conjunto de datos directo se identifican mediante un númerorelativo de registro que empieza en 1 y se incrementa en una unidad con cadaregistro siguiente. Puede utilizar estos números relativos de registro como clavespara el acceso con clave al conjunto de datos.

Las claves utilizadas como números relativos de registro son cadenas de caracteresde longitud 10. El valor de carácter de una clave de origen que utiliza en la opciónKEY o KEYFROM tiene que representar a un entero sin signo. Si la clave de origenno tiene 10 caracteres de longitud, se trunca o se rellena con espacios en blanco(que se interpretan como ceros) a la izquierda. El valor devuelto por la opciónKEYTO es una cadena de caracteres de longitud 10, con los ceros a la izquierdaeliminados.

Organización VSAM de la estación de trabajo

296 PL/I for WindowsGuía de programación

Page 319: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Elegir un tipo de conjunto de datosCuando planifica su aplicación, tiene que decidir en primer lugar qué tipo deconjunto de datos va a utilizar. Existen tres tipos de conjuntos de datos queutilizan VSAM en la estación de trabajo y cinco tipos de conjuntos de datos que noutilizan VSAM disponibles. Los conjuntos VSAM de laEstación de trabajo puedenproporcionar todas las funciones de los otros tipos de conjuntos de datos, ademásde otras funciones disponibles solo con VSAMestación de trabajo. Normalmente elVSAM de la Estación de trabajo puede igualar o incluso mejorar el rendimiento deotros tipos de conjuntos de datos. Sin embargo, el VSAM de la estación de trabajoestá más sujeto a la degradación de rendimiento por el mal uso de las funciones.

Tabla 15 en la página 295 le muestra las posibilidades disponibles con cada tipo deconjunto de datos VSAM de la estación de trabajo. Cuando elija entre los tipos deconjunto de datos de VSAM de la estación de trabajo, base su decisión en cuál esla secuencia más común con la que su programa accede a los datos. Puede utilizarel siguiente procedimiento para garantizar una combinación de los conjuntos dedatos e índices que proporcionan la función que necesita:1. Determine el tipo de datos y cómo se accede a él.

a. Principalmente por secuencia: ESDS.b. Principalmente por clave: KSDS.c. Principalmente por número: RRDS.

2. Determine cómo carga el conjunto de datos. Tenga en cuenta que tiene quecargar un conjunto de datos de secuencia de claves (KSDS) en secuencia declaves con un índice alternativo que puede ser una alternativa más práctica paraalgunas aplicaciones. Tabla 16 en la página 298 muestra tipos de procesamientoque puede utilizar en vías de acceso de índice alternativo.

3. Determine si necesita acceso a través de una vía de acceso índice alternativo.Solo son compatibles con KSDS y ESDS. Si necesita una vía de acceso índicealternativo, determine si el índice alternativo tiene claves únicas o no únicas. Eluno de claves no únicas puede limitar el procesamiento de claves. Sin embargo,también puede resultar poco práctico asumir que utiliza claves únicas paratodos sus registros futuros; si intenta introducir un registro con una clave noúnica en un índice que ha creado para claves únicas, se producirá un error.

4. Cuando haya determinado los conjuntos de datos y vías de acceso que necesita,asegúrese de que las operaciones que tiene en mente son compatibles. Figura 18en la página 298 muestra los conjuntos de datos VSAM de la estación detrabajo y los atributos de archivo que puede especificar.

No intente acceder a un conjunto de datos VSAM de la estación de trabajo ficticio,ya que obtendrá un mensaje de error indicando que tiene un archivo sin definir.

Tabla 17 en la página 301, Tabla 18 en la página 305 y Tabla 19 en la página 312muestran las sentencias permitidas para datos secuenciales, conjuntos de datos conclave y conjuntos de datos directos, respectivamente.

Elegir un tipo de conjunto de datos

Capítulo 13. Definir y utilizar los conjuntos de datos VSAM de la estación de trabajo 297

Page 320: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 16. Procesamiento permitido en vías de acceso de índice alternativo

Tipo de clúster de base Tipo de clave de índicealternativo

Procesamiento Restricciones

KSDS Clave única

Clave no única

Como KSDS normal

Acceso con clave limitado

Puede no modificar la clavede acceso.

Puede no modificar la clavede acceso.

ESDS Clave única

Clave no única

Como KSDS

Acceso con clave limitado

Sin supresión.

Puede no modificar la clavede acceso.

Sin supresión.

Puede no modificar la clavede acceso.

Definir archivos para los conjuntos de datos VSAM de la estación detrabajo

Defina un conjunto de datos secuenciales VSAM de la estación de trabajoutilizando una declaración de archivo con los atributos siguientes:

SEQUENTIAL KEYED SEQUENTIAL DIRECT

INPUT ESDS ESDS KSDSKSDS KSDS RRDSRRDS RRDS Path(U)Path(N) Path(N)Path(U) Path(U)

OUTPUT ESDS ESDS KSDSRRDS KSDS RRDS

RRDS Path(U)

UPDATE ESDS ESDS KSDSKSDS KSDS RRDSRRDS RRDS Path(U)Path(N) Path(N)Path(U) Path(U)

Key: ESDS Entry-sequenced data setKSDS Key-sequenced data setRRDS Relative record data setPath(N) Alternate index path with nonunique keysPath(U) Alternate index path with unique keys

You can combine the attributes on the left with those atthe top of the figure for the data sets and paths shown.For example, only an ESDS and an RRDS can be SEQUENTIAL OUTPUT.

PL/I does not support dummy VSAM data sets.

Figura 18. Conjuntos de datos VSAM y atributos de archivo permitidos

Elegir un tipo de conjunto de datos

298 PL/I for WindowsGuía de programación

Page 321: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

dcl Filename file recordinput | output | updatesequentialbuffered[keyed]environment(options);

Defina un conjunto de datos con clave VSAM de la estación de trabajo utilizandouna declaración de archivo con los atributos siguientes:

dcl Filename file recordinput | output | updatesequential | directbuffered | unbuffered[keyed]environment(options);

Defina un conjunto de datos directos VSAM de la estación de trabajo utilizandouna declaración de archivo con los atributos siguientes:

dcl Filename file recordinput | output | updatedirect | sequentialunbuffered | buffered[keyed]environment(options);

Los atributos de archivo se describen en la Referencia de lenguaje PL/I de esteproducto.Las opciones de atributo ENVIRONMENT se describen más adelante.

Especificar opciones del atributo PL/I ENVIRONMENTMuchas de las opciones del atributo PL/I ENVIRONMENT que afectan a laestructura del conjunto de datos no son necesarias para los conjuntos de datosVSAM de la estación de trabajo. Si los especifica, se ignoran o se utilizan pararealizar comprobaciones. Si los que se comprueban entran en conflicto con losvalores definidos para el conjunto de datos, se lanza la condiciónUNDEFINEDFILE cuando se intenta abrir el archivo.

Las opciones ENVIRONMENT aplicables a los conjuntos de datos VSAM delaestación de trabajo:

CONSECUTIVECTLASAGENKEYGRAPHICKEYLENGTHKEYLOC ORGANIZATION(CONSECUTIVE|INDEXED|RELATIVE)RECSIZE SCALARVARYINGVSAM

Para obtener una explicación detallada de estas opciones ENVIRONMENT y decómo utilizarlas, consulte “Especificar característicaa utilizando el atributo PL/IENVIRONMENT” en la página 238. Además de esta lista de opcionesENVIRONMENT, hay un conjunto de opciones que se pueden utilizar con unasentencia DD, consulte “Especificar características utilizando las variables deentorno DD:ddname” en la página 244.

Adaptar programas existentes para estación de trabajo VSAMEsta sección está pensada para usuarios PL/I for z/OS que van a transferirprograma a la estación de trabajo.

Definir archivos para los conjuntos de datos VSAM de la estación de trabajo

Capítulo 13. Definir y utilizar los conjuntos de datos VSAM de la estación de trabajo 299

Page 322: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

En la mayoría de los casos, si su programa PL/I utiliza archivos declarados conENVIRONMENT (CONSECUTIVE) o ENVIRONMENT(INDEXED) o sin ningúnatributo ENVIRONMENT de PL/I, puede acceder a los conjuntos de datos VSAMde laestación de trabajo sin alteraciones. PL/I detecta que se está abriendo unconjunto de datos VSAM de la estación de trabajo y puede proporcionan el accesocorrecto.

Puede adaptar programas existentes con archivos CONSECUTIVE, INDEXED,REGIONAL(1) o VSAM para utilizarlos con conjuntos de datos VSAM de laestación de trabajo. Los programas con archivos consecutivos podrían no necesitaralteraciones y nunca hay necesidad de alterar programas con archivos indexados ano ser que l a lógica dependa de archivos EXCLUSIVE. Los programas conconjuntos de datos REGIONAL(1) requieren una revisión mínima.

Las siguientes secciones explican qué modificaciones podría necesitar llevar a cabopara adaptar archivos para la estación de trabajo.

Adaptar programas utilizando archivos CONSECUTIVENo hay ningún concepto de registros de longitud fija en DDM, pero sí lo hay enISAM y BTRIEVE. Si su programa se basa en la condición RECORD para detectarregistros de longitud incorrectos, no funciona del mismo modo utilizandoconjuntos de datos VSAM de laestación de trabajo como hace con los conjuntos dedatos VSAM que no son de la estación de trabajo.

Si la lógica del programa depende del lanzamiento de la condición RECORDcuando se encuentra un registro de longitud incorrecta, tiene que escribir su propiocódigo para comprobar la longitud de registro y realizar la acción necesaria. Estoes así porque los conjuntos de datos VSAM de la estación de trabajo permitenregistros de cualquier longitud hasta la máxima especificada.

Adaptar programas utilizando archivos INDEXEDSe proporciona compatibilidad para archivos INDEXED. Para los archivos quedeclara con la opción INDEXED ENVIRONMENT, PL/I asocia el archivo con unconjunto de datos con clave VSAM de la estación de trabajo. Se lanzaUNDEFINEDFILE si el conjunto de datos es de otro tipo.

Como el manejo de registros ISAM del sistema principal difiere del manejo deregistros VSAM de la estación de trabajo, el procesamiento VSAM de la estación detrabajo puede no dar siempre el resultado necesario.

Debería eliminar la dependencia de la condición RECORD e insertar su propiocódigo para comprobar la longitud de los registros si es necesario. También deberíaeliminar la comprobación para registros suprimidos.

Adaptar programas utilizando archivos REGIONAL(1)Puede alterar programas utilizando conjuntos de datos REGIONAL(1) para utilizarconjuntos de datos directos VSAM de laestación de trabajo. Elimine REGIONAL(1)y cualquier otra opción dependiente de la implementación de la declaración dearchivo y sustitúyalas por ENV(ORGANIZATION(RELATIVE)). También deberíaeliminar cualquier comprobación para registros suprimidos, ya que no puedeacceder a los registros suprimidos VSAM de la estación de trabajo.

Adaptar programas utilizando archivos VSAMSi utiliza la opción VSAM ENVIRONMENT, el conjunto de datos VSAM de laestación de trabajo existe antes de que se abra el archivo. Puede crear susconjuntos de datos con un programa sencillo. Figura 19 en la página 301 es un

Definir archivos para los conjuntos de datos VSAM de la estación de trabajo

300 PL/I for WindowsGuía de programación

Page 323: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ejemplo de la creación de un conjunto de datos con clave VSAM de la estación detrabajo.

Si el conjunto de datos denominado KEYNAMES.DAT no existe ya, PL/I lo creacon ese nombre cuando se ejecuta la sentencia OPEN.

Utilizar conjuntos de datos secuenciales VSAM de la estación detrabajo

Las sentencias y archivas permitidas para archivos asociados a conjuntos de datossecuenciales VSAM de la estación de trabajo se muestran en Tabla 17.

Tabla 17. Sentencias y opciones permitidas para cargar y acceder a conjuntos de datossecuenciales VSAM de la estación de trabajo

Declaración de archivo1 Sentencias válidas,con opciones quetiene que incluir

Otras opciones que puedeincluir

SEQUENTIAL OUTPUTBUFFERED

WRITE FILE(archivo-referencia)FROM(referencia);

Variable basada en LOCATEFILE(archivo-referencia);

KEYTO(referencia)

SET(puntero-referencia)

SEQUENTIAL OUTPUTUNBUFFERED

WRITE FILE(archivo-referencia)FROM(referencia);

KEYTO(referencia)

SEQUENTIAL INPUTBUFFERED

READ FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-referencia)SET(puntero-referencia);

READ FILE(archivo-referencia);

KEYTO(referencia) oKEY(expresión)3

KEYTO(referencia) oKEY(expresión)3

IGNORE(expresión)

/********************************************************************//* *//* NAME - ISAM0.PLI *//* *//* DESCRIPTION *//* Create an ISAM Keyed data set *//* *//* *//********************************************************************/

NewVSAM: proc options(main);declare

NewFile keyed record output fileenv(organization(indexed)

recsize(80)keylength(8)keyloc(17)

);open file(NewFile) title(’/keynames.dat’);close file(NewFile);

End NewVSAM;

Figura 19. Creación de un conjunto de datos con clave VSAM de la estación de trabajo

Definir archivos para los conjuntos de datos VSAM de la estación de trabajo

Capítulo 13. Definir y utilizar los conjuntos de datos VSAM de la estación de trabajo 301

Page 324: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 17. Sentencias y opciones permitidas para cargar y acceder a conjuntos de datossecuenciales VSAM de la estación de trabajo (continuación)

Declaración de archivo1 Sentencias válidas,con opciones quetiene que incluir

Otras opciones que puedeincluir

SEQUENTIAL INPUTUNBUFFERED

READ FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-referencia); 2

KEY(expresión)3 oKEYTO(referencia)

IGNORE(expresión)

SEQUENTIAL UPDATEBUFFERED

READ FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-referencia)SET(puntero-referencia);

READ FILE(archivo-referencia)2

WRITE FILE(archivo-referencia)FROM(referencia);

REWRITEFILE(archivo-referencia);

DELETE FILE(archivo-referencia);

KEYTO(referencia) oKEY(expresión)3

KEYTO(referencia) oKEY(expresión)3

IGNORE(expresión)KEYTO(referencia)

FROM(referencia) y/oKEY(expresión)3

KEY(expresión)

SEQUENTIAL UPDATEUNBUFFERED

READ FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-referencia); 2

WRITE FILE(archivo-referencia)FROM(referencia);

REWRITEFILE(archivo-referencia)FROM(referencia);

KEY(expresión)3 oKEYTO(referencia)

IGNORE(expresión)KEYTO(referencia)

KEY(expresión)3

Notas:

1 La declaración de archivo completa debería incluir los atributos FILE, RECORD yENVIRONMENT; si utiliza las opciones KEY o KEYTO, también debería incluir el atributoKEYED.

2 La sentencia “READ FILE(file-reference);” es equivalente a la sentencia “READFILE(file-reference) IGNORE (1);”

3 La expresión utilizada en la opción KEY tiene que ser un sequential record value, obtenidaanteriormente por medio de la opción KEYTO.

Utilizar un archivo secuencial para acceder a un conjunto dedatos secuencial VSAM de la estación de trabajo

Cuando se carga un conjunto de datos secuenciales, tiene que abrirse el archivoasociado de SEQUENTIAL OUTPUT. Los registros se almacenan en el orden en elque se presentan.

Utilizar conjuntos de datos secuenciales VSAM de la estación de trabajo

302 PL/I for WindowsGuía de programación

Page 325: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Puede utilizar la opción KEYTO para obtener el valor de registro secuencial decada registro tal y como está escrito. Pued utilizar posteriormente estas claves paraconseguir acceso con clave al conjunto de datos.

Puede abrir un archivo secuencial que se utiliza para acceder a un conjunto dedatos secuenciales VSAM de laa estación de trabajo con el atributo INPUT oUPDATE. Si utiliza la opción KEY o KEYTO, el archivo tiene que tener también elatributo KEYED.

El acceso secuencial se produce en el orden en el que se cargaron originalmente losregistros en el conjunto de datos. Puede utilizar la opción KEYTO en las sentenciasREAD para recuperar el valor de registro secuencial de los registros que se leen. Siutiliza la opción KEY, el registro que se recupera es el que tiene el valor de registrosecuencial que especifica. El acceso secuencial posterior continúa desde la posiciónnueva del conjunto de datos.

En un archivo UPDATE, la sentencia WRITE añade un registro nuevo al final delconjunto de datos. En una sentencia REWRITE, el registro reescrito es el que tieneel valor de registro secuencial especificado si utiliza la opción KEY; si no, es elregistro al que se accedió en la sentencia READ anterior.

Definir y cargar un conjunto de datos secuencial VSAM de laestación de trabajo

Figura 20 en la página 304 es un ejemplo de un programa que define y carga unconjunto de datos secuencial VSAM de la estación de trabajo. También puedeutilizar este programa para procesar un archivo DDM o SFS modificando laespecificación AMTHD.

El programa PL/I escribe el conjunto de datos utilizando un archivo SEQUENTIALOUTPUT y una sentencia WRITE FROM.

Los valores de registro secuencial de los registros podrían haberse obtenidodurante la escritura para su uso posterior como claves en un archivo KEYED. Paraello, tendría que haberse declarado una variable adecuada para mantener la clavey la sentencia WRITE...KEYTO utilizada. Por ejemplo:

dcl Chars char(7); /*DDM uses 4; BTRIEVE and ISAM use 7 as shown */write file(Famfile) from (String)

keyto(Chars);

dcl Chars char(4); /* DDM uses 4 */write file(Famfile) from (String)

keyto(Chars);

Las claves no suelen ser imprimibles, pero pueden retenerse para utilizarse másadelante.

Utilizar conjuntos de datos secuenciales VSAM de la estación de trabajo

Capítulo 13. Definir y utilizar los conjuntos de datos VSAM de la estación de trabajo 303

Page 326: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Actualizar un conjunto de datos secuencialesEl programa que se ilustra en Figura 20 puede utilizarse para actualizar unconjunto de datos secuenciales VSAM de la estación de trabajo. Si se ejecuta denuevo, se añaden registros nuevos al final del conjunto de datos.

Puede reescribir registros en un conjunto de datos secuenciales, siempre y cuandola longitud del registro ni varíe. Puede utilizar un archivo de actualización

/********************************************************************//* *//* *//* DESCRIPTION *//* Define and load an ISAM sequential data set. *//* *//* *//* USAGE *//* The following commands are required to establish *//* the environment variables to run this program: *//* *//* SET DD:IN=ISAM1.INP,RECSIZE(38) *//* SET DD:FAMFILE=ISAM1.OUT,AMTHD(ISAM),RECSIZE(38) *//* *//* REMARKS: Restrict test to ASCII format. *//* *//********************************************************************/

CREATE: proc options(main);

put skip list(’START ISAM1 TEST’);

dclFamFile file sequential output

env(organization(consecutive)),In file record input,Eof bit(1) init(’0’b),i fixed(15),String char(38);

on endfile(In) Eof = ’1’b;

read file(In) into (String);do i=1 by 1 while (¬Eof);

put file(sysprint) skip edit (String) (a);write file(FamFile) from (String);read file(In) into (String);

end;

put skip edit(i-1,’ records processed ’)(a);

put skip list(’END ISAM1 TEST’);

end CREATE;

The input data for this program might look like this:

Fred 69 MAndy 70 MSusan 72 F

Figura 20. Definir y cargar un conjunto de datos secuencial VSAM de la estación de trabajo

Utilizar conjuntos de datos secuenciales VSAM de la estación de trabajo

304 PL/I for WindowsGuía de programación

Page 327: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

SEQUENTIAL o KEYED SEQUENTIAL para ello. Si utiliza claves, tienen que servalores de registro secuenciales de una sentencia WRITE o READ anterior.

Conjuntos de datos con clave VSAM de la Estación de trabajoLas sentencias y opciones permitidas para los conjuntos de datos con clave VSAMde laestación de trabajo se muestran en Tabla 18.

Tabla 18. Sentencias y opciones permitidas para cargar y acceder a los conjuntos de datoscon clave VSAM de la estación de trabajo

Declaración de archivo1 Sentencias válidas, conopciones que tieneque incluir

Otras opciones que puedeincluir

SEQUENTIAL OUTPUTBUFFERED

WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

Variable basada en LOCATEFILE(archivo-referencia)KEYFROM(expresión);

SET(puntero-referencia)

SEQUENTIAL OUTPUTUNBUFFERED

WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

SEQUENTIAL INPUTBUFFERED

READ FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-referencia)SET(puntero-referencia);

READ FILE(archivo-referencia); 2

KEY(expresión) oKEYTO(referencia)

KEY(expresión) oKEYTO(referencia)

IGNORE(expresión)

SEQUENTIAL INPUTUNBUFFERED

READ FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-referencia); 2

KEY(expresión) oKEYTO(referencia)

IGNORE(expresión)

SEQUENTIAL UPDATEBUFFERED

READ FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-referencia)SET(puntero-referencia);

READ FILE(archivo-referencia); 2

WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

REWRITEFILE(archivo-referencia);DELETE FILE(archivo-referencia)

KEY(expresión) oKEYTO(referencia)

KEY(expresión) oKEYTO(referencia)

IGNORE(expresión)

FROM(referencia) y/oKEY(expresión)

KEY(expresión)

Utilizar conjuntos de datos secuenciales VSAM de la estación de trabajo

Capítulo 13. Definir y utilizar los conjuntos de datos VSAM de la estación de trabajo 305

Page 328: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 18. Sentencias y opciones permitidas para cargar y acceder a los conjuntos de datoscon clave VSAM de la estación de trabajo (continuación)

Declaración de archivo1 Sentencias válidas, conopciones que tieneque incluir

Otras opciones que puedeincluir

SEQUENTIAL UPDATEUNBUFFERED

READ FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-referencia); 2

WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

REWRITEFILE(archivo-referencia)FROM(referencia);

DELETEFILE(archivo-referencia);

KEY(expresión) oKEYTO(referencia)

KEY(expresión)

KEY(expresión)

DIRECT3 INPUTBUFFERED

READ FILE(archivo-referencia)INTO(referencia);KEY(expresión);READ FILE(archivo-referencia)SET(puntero-referencia)KEY(expresión);

DIRECT3 INPUTUNBUFFERED

READ FILE(archivo-referencia)INTO(referencia);KEY(expresión);

DIRECT OUTPUTBUFFERED

WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

DIRECT OUTPUTUNBUFFERED

WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

DIRECT3 UPDATEBUFFERED

READ FILE(archivo-referencia)INTO(referencia);KEY(expresión);READ FILE(archivo-referencia)SET(puntero-referencia)KEY(expresión);REWRITEFILE(archivo-referencia)FROM(referencia)KEY(expresión);DELETE FILE(archivo-referencia)KEY(expresión);WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

Conjuntos de datos con clave VSAM de la estación de trabajo

306 PL/I for WindowsGuía de programación

Page 329: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 18. Sentencias y opciones permitidas para cargar y acceder a los conjuntos de datoscon clave VSAM de la estación de trabajo (continuación)

Declaración de archivo1 Sentencias válidas, conopciones que tieneque incluir

Otras opciones que puedeincluir

DIRECT3 UPDATEUNBUFFERED

READ FILE(archivo-referencia)INTO(referencia);KEY(expresión);REWRITEFILE(archivo-referencia)FROM(referencia)KEY(expresión);DELETE FILE(archivo-referencia)KEY(expresión);WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

Notas:

1 La declaración de archivo completa podría incluir los atributos FILE y RECORD. Si utilizaalguna de las opciones KEY, KEYFROM o KEYTO, tiene que incluir también el atributoKEYED en la declaración.

2 La sentencia READ FILE(archivo-referencia); equivale a la sentencia READFILE(archivo-referencia) IGNORE(1);

3 No asocie un archivo DIRECT a un conjunto de datos VSAM de la estación de trabajo quetenga la capacidad de clave duplicada.

Cargar un conjunto de datos con clave VSAM de la estaciónde trabajo

Cuando se carga un conjunto de datos con clave, tiene que abrir el archivoasociado de KEYED SEQUENTIAL OUTPUT. Tiene que presentar los registros enorden de clave ascendente y utilizar la opción KEYFROM.

Si un conjunto de datos con clave ya contiene algunos registros y abre el archivoasociado con los atributos SEQUENTIAL y OUTPUT, solo puede añadir registros alfinal del conjunto de datos. De nuevo, tiene que presentar los registros en orden declave ascendente y utilizar la opción KEYFROM.Además, el primer registro quepresente tiene que tener una clave mayor que la clave más alta presente en elconjunto de datos.

Figura 21 en la página 308 es un ejemplo de un programa que carga un conjuntode datos con clave VSAM de la estación de trabajo. En el programa PL/I, se utilizaun archivo KEYED SEQUENTIAL OUTPUT con una sentenciaWRITE...FROM...KEYFROM. Los datos se presentan en orden de clave ascendente.Los conjuntos de datos con clave tienen que cargarse de esta manera. Tambiénpuede utilizar este programa para procesar un archivo DDM o SFS modificando laespecificación AMTHD.

Conjuntos de datos con clave VSAM de la estación de trabajo

Capítulo 13. Definir y utilizar los conjuntos de datos VSAM de la estación de trabajo 307

Page 330: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

/********************************************************************//* *//* DESCRIPTION *//* Load an ISAM keyed data set. *//* *//* *//* USAGE *//* The following commands are required to establish *//* the environment variables to run this program: *//* *//* SET DD:DIREC=ISAM2.OUT,AMTHD(ISAM) *//* SET DD:SYSIN=ISAM2.INP,RECSIZE(80) *//* *//********************************************************************/

NAMELD: proc options(main);

put skip list(’START ISAM2 TEST’);

dcl Direc file record keyed sequential outputenv(organization(indexed)

recsize(23)keyloc(1)keylength(20));

dcl Eof bit(1) init(’0’b);

dcl 1 IoArea,5 Name char(20),5 Number char(3);

on endfile(sysin) Eof = ’1’b;

open file(Direc);

get file(sysin) edit(Name,Number) (a(20),a(3));do while (¬Eof);

write file(Direc) from(IoArea) keyfrom(Name);get file(sysin) edit(Name,Number) (a(20),a(3));

end;

close file(Direc);

put skip list(’END ISAM2 TEST’);

end NAMELD;

Figura 21. Definir y cargar un conjunto de datos con clave VSAM de laestación de trabajo

Conjuntos de datos con clave VSAM de la estación de trabajo

308 PL/I for WindowsGuía de programación

Page 331: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

The input file for this program could be:

ACTION,G. 162BAKER,R. 152BRAMLEY,O.H. 248CHEESMAN,D. 141CORY,G. 336ELLIOTT,D. 875FIGGINS,S. 413HARVEY,C.D.W. 205HASTINGS,G.M. 391KENDALL,J.G. 294LANCASTER,W.R. 624MILES,R. 233NEWMAN,M.W. 450PITT,W.H. 515ROLF,D.E. 114SHEERS,C.D. 241SURCLIFFE,M. 472TAYLOR,G.C. 407WONG, X-G. 509WILTON,L.W. 404WINSTONE,E.M. 307VISWANATHAN, I. 411

Definir y cargar un conjunto de datos con clave VSAM de laestación de trabajo(continuación)

Utilizar un archivo SEQUENTIAL para acceder a un conjuntode datos con clave VSAM deestación de trabajo

Puede abrir un archivo SEQUENTIAL que se utiliza para acceder a un conjunto dedatos con clave con el atributo INPUT o UPDATE.

En las sentencias READ sin opción KEY, los registros se recuperan en orden declave ascendente. Puede obtener la clave de un registro recuperado de este modoutilizando la opción KEYTO.

Si utiliza la opción KEY, el registro recuperado por una sentencia READ es el quetiene la clave especificada. Esta sentencia READ coloca el conjunto de datos en elregistro especificado; las lecturas secuenciales posteriores recuperan los registrossiguientes en secuencia de claves.

Las sentencias WRITE con la opción KEYFROM están permitidas en archivosKEYED SEQUENTIAL UPDATE. Puede realizar inserciones en cualquier parte delconjunto de datos, sin respetar la posición de ningún acceso anterior. La condiciónKEY se lanza si se intenta insertar un registro con la misma clave que un registroque ya existe en el conjunto de datos.

Las sentencias REWRITE con o sin opción KEY están permitidas en archivosUPDATE. Si utiliza la opción KEY, el registro que se vuelve a escribir es el registrocon la clave especificada; si no, es el registro al que se accedió mediante lasentencia READ anterior.

Utilizar un archivo DIRECT para acceder a un conjunto dedatos con clave VSAM de la estación de trabajo

Puede abrir un archivo DIRECT que se utilizar para acceder a un conjunto dedatos VSAM de la estación de trabajo con el atributo INPUT, OUTPUT o UPDATE.

Conjuntos de datos con clave VSAM de la estación de trabajo

Capítulo 13. Definir y utilizar los conjuntos de datos VSAM de la estación de trabajo 309

Page 332: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Si utiliza un archivo DIRECT OUTPUT para añadir registros al conjunto de datos yse intenta insertar un registro con la misma clave que un registro que ya existe, selanza la condición KEY.

Si utiliza un archivo DIRECT INPUT o DIRECT UPDATE, puede leer, escribir ysuprimir registros del mismo modo que con un archivo KEYED SEQUENTIAL.

Figura 22 muestra un método que puede utilizar para actualizar un conjunto dedatos con clave. También puede utilizar este programa para procesar un archivoDDM o SFS modificando la especificación AMTHD.

/********************************************************************//* *//* *//* DESCRIPTION *//* Update an ISAM keyed data set by key. *//* *//* *//* USAGE *//* The following commands are required to establish *//* the environment variables to run this program: *//* *//* SET DD:DIREC=ISAM2.OUT,AMTHD(ISAM) *//* SET DD:SYSIN=ISAM3.INP,RECSIZE(80) *//* *//* Note: This program is using isam2.out file created by the *//* previous sample program NAMELD. *//* *//********************************************************************/

DIRUPDT: proc options(main);

put skip list(’ISAM3 TEST START’);

dcl Direc file record keyed updateenv(organization(indexed)

recsize(23)keyloc(1)keylength(20));

dcl 1 IoArea,5 NewArea,

10 Name char(20),10 Number char(3),

5 Code char(1);

dcl oncode builtin;dcl Eof bit(1) init(’0’b);

on endfile(sysin) Eof = ’1’b;

on key(Direc)begin;

if oncode=51 then put file(sysprint) skip edit(’Not found: ’,Name)(a(15),a);

if oncode=52 then put file(sysprint) skip edit(’Duplicate: ’,Name)(a(15),a);

end;

open file(Direc) direct update;

Figura 22. Actualizar un conjunto de datos con clave VSAM de la estación de trabajo

Conjuntos de datos con clave VSAM de la estación de trabajo

310 PL/I for WindowsGuía de programación

Page 333: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

get file(sysin) edit (Name,Number,Code) (a(20),a(3),a(1));do while (¬Eof);

put file(sysprint) skip edit (’ ’,Name,’#’,Number,’ ’,Code)(a(1),a(20),a(1),a(3),a(1),a(1));

select (Code);when(’A’) write file(Direc) from(NewArea) keyfrom(Name);when(’C’) rewrite file(Direc) from(NewArea) key(Name);when(’D’) delete file(Direc) key(Name);otherwise put file(sysprint) skip edit

(’Invalid code: ’,Name) (a(15),a);end;get file(sysin) edit (Name,Number,Code) (a(20),a(3),a(1));

end;

close file(Direc);put file(sysprint) page;

/* Display the updated file */

open file(Direc) sequential input;

Eof = ’0’b;on endfile(Direc) Eof = ’1’b;

read file(Direc) into(NewArea);do while(¬Eof);

put file(sysprint) skip edit(Name,Number)(a,a);read file(Direc) into(NewArea);

end;close file(Direc);

put skip list(’ISAM3 TEST END’);

end DIRUPDT;

An input file for this program might look like this one:

NEWMAN,M.W. 516CGOODFELLOW,D.T. 889AMILES,R. DHARVEY,C.D.W. 209ABARTLETT,S.G. 183ACORY,G. DREAD,K.M. 001APITT,W.H. XROLF,D.E. DELLIOTT,D. 291CHASTINGS,G.M. DBRAMLEY,O.H. 439CGABRIELLI, M. X

Actualizar un conjunto de datos con clave VSAM de la estación de trabajo (continuación)

El programa utiliza un archivo de actualización DIRECT y altera los datos deacuerdo a un código que se pasa a los registros en el archivo SYSIN:A Añade un registro nuevoC Cambia el número de un nombre existenteD Suprime un registro

El programa lee el nombre, el número y el código y realiza la acción según el valordel código. Se utiliza una unidad KEY ON para manejar cualquier clave incorrecta.

Conjuntos de datos con clave VSAM de la estación de trabajo

Capítulo 13. Definir y utilizar los conjuntos de datos VSAM de la estación de trabajo 311

Page 334: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Cuando se completa la actualización el archivo DIREC se cierra y se vuelve a abrircon los atributos SEQUENTIAL INPUT. Después, el archivo se lee de formasecuencial y se imprime.

a conjuntos de datos directos VSAM de la Estación de trabajoLas sentencias y opciones permitidas para los conjuntos de datos directos VSAMde laestación de trabajo son:

Tabla 19. Sentencias y opciones permitidas para cargar y acceder a los conjuntos de datosdirectos VSAM de la estación de trabajo

Declaración de archivo1 Sentencias válidas,con opciones quetiene que incluir

Otras opciones que puedeincluir

SEQUENTIAL OUTPUTBUFFERED

WRITE FILE(archivo-referencia)FROM(referencia);

Variable basada en LOCATEFILE(archivo-referencia);

KEYFROM(expresión)o KEYTO(referencia)

SET(puntero-referencia)

SEQUENTIAL OUTPUTUNBUFFERED

WRITE FILE(archivo-referencia)FROM(referencia);

KEYFROM(expresión)o KEYTO(referencia)

SEQUENTIAL INPUTBUFFERED

READ FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-referencia)SET(puntero-referencia);

READ FILE(archivo-referencia); 2

KEY(expresión) oKEYTO(referencia)

KEY(expresión) oKEYTO(referencia)

IGNORE(expresión)

SEQUENTIAL INPUTUNBUFFERED

READ FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-referencia); 2

KEY(expresión) oKEYTO(referencia)

IGNORE(expresión)

SEQUENTIAL UPDATEBUFFERED

READ FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-referencia)SET(puntero-referencia);

READ FILE(archivo-referencia); 2

WRITE FILE(archivo-referencia)FROM(referencia);

REWRITEFILE(archivo-referencia);DELETE FILE(archivo-referencia);

KEY(expresión) oKEYTO(referencia)

KEY(expresión) oKEYTO(referencia)

IGNORE(expresión)KEYFROM(expresión)o KEYTO(referencia)

FROM(referencia) y/oKEY(expresión)

KEY(expresión)

Conjuntos de datos con clave VSAM de la estación de trabajo

312 PL/I for WindowsGuía de programación

Page 335: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 19. Sentencias y opciones permitidas para cargar y acceder a los conjuntos de datosdirectos VSAM de la estación de trabajo (continuación)

Declaración de archivo1 Sentencias válidas,con opciones quetiene que incluir

Otras opciones que puedeincluir

SEQUENTIAL UPDATEUNBUFFERED

READ FILE(archivo-referencia)INTO(referencia);

READ FILE(archivo-expresión); 2

WRITE FILE(archivo-referencia)FROM(referencia);

REWRITEFILE(archivo-referencia)FROM(referencia);

DELETEFILE(archivo-referencia);

KEY(expresión) oKEYTO(referencia)

IGNORE(expresión)KEYFROM(expresión)o KEYTO(referencia)

KEY(expresión)

KEY(expresión)

DIRECT OUTPUTBUFFERED

WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

DIRECT OUTPUTUNBUFFERED

WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

DIRECT INPUTBUFFERED

READ FILE(archivo-referencia)INTO(referencia);KEY(expresión);READ FILE(archivo-referencia)SET(puntero-referencia)KEY(expresión);

DIRECT INPUTUNBUFFERED

READ FILE(archivo-referencia)KEY(expresión);

DIRECT UPDATEBUFFERED

READ FILE(archivo-referencia)INTO(referencia);KEY(expresión);READ FILE(archivo-referencia)SET(puntero-referencia)KEY(expresión);REWRITEFILE(archivo-referencia)FROM(referencia)KEY(expresión);DELETE FILE(archivo-referencia)KEY(expresión);WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

Conjuntos de datos directos VSAM de la estación de trabajo

Capítulo 13. Definir y utilizar los conjuntos de datos VSAM de la estación de trabajo 313

Page 336: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 19. Sentencias y opciones permitidas para cargar y acceder a los conjuntos de datosdirectos VSAM de la estación de trabajo (continuación)

Declaración de archivo1 Sentencias válidas,con opciones quetiene que incluir

Otras opciones que puedeincluir

DIRECT UPDATEUNBUFFERED

READ FILE(archivo-referencia)INTO(referencia);KEY(expresión);REWRITEFILE(archivo-referencia)FROM(referencia)KEY(expresión);DELETE FILE(archivo-referencia)KEY(expresión);WRITE FILE(archivo-referencia)FROM(referencia)KEYFROM(expresión);

Notas:

1 La declaración de archivo completa podría incluir los atributos FILE y RECORD. Si utilizaalguna de las opciones KEY, KEYFROM o KEYTO, su declaración tiene que incluir tambiénel atributo KEYED.

2 La sentencia READ FILE(archivo-referencia); equivale a la sentencia READFILE(archivo-referencia) IGNORE(1);

Cargar un conjunto de datos directos VSAM de la estación detrabajo

Cuando se carga un conjunto de datos directo, tiene que abrir el archivo asociadode OUTPUT. Utilice un archivo DIRECT o SEQUENTIAL.

En un archivo DIRECT OUTPUT, cada registro se coloca en la posiciónespecificada por el número relativo de registro (o clave) en la opción KEYFROM dela sentencia WRITE (consulte “Utilizar claves para los conjuntos de datos VSAMde estación de trabajo” en la página 296).

En una archivo SEQUENTIAL OUTPUT, utilice sentencias WRITE con o sin laopción KEYFROM. Si especifica la opción KEYFROM, el registro se coloca en laranura especificada; si la omite, el registro se coloca en la ranura que sigue a laposición actual. No es obligatorio que los registros estén presente en orden denúmero relativo de registro ascendente. Si omite la opción KEYFROM, puedeobtener el número relativo del registro escrito utilizando la opción KEYTO.

Si quiere cargar un conjunto de datos directo de forma secuencial, sin utilizar lasopciones KEYFROM o KEYTO, no tiene obligación de utilizar el atributo KEYED.

Es un error intentar cargar un registro en una posición que ya contiene un registro.Si utiliza la opción KEYFROM, se lanza la condición KEY; si la omite, se lanza lacondición ERROR.

Figura 23 en la página 316 es un ejemplo de un programa que define y carga unconjunto de datos directo VSAM de la estación de trabajo. En el programa PL/I, elconjunto de datos se carga con un archivo DIRECT OUTPUT y se utiliza unasentencia WRITE...FROM...KEYFROM. También puede utilizar este programa paraprocesar un archivo DDM o SFS modificando la especificación AMTHD.

Conjuntos de datos directos VSAM de la estación de trabajo

314 PL/I for WindowsGuía de programación

Page 337: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Si los datos estuviesen en orden y las claves en secuencia, se podría utilizar unarchivo SEQUENTIAL y escribir el conjunto de datos desde el principio. Losregistros se colocarían en la siguiente ranura disponible y se les asignaría elnúmero correspondiente. El número de clave de cada registro se devolveríautilizando la opción KEYTO.

Conjuntos de datos directos VSAM de la estación de trabajo

Capítulo 13. Definir y utilizar los conjuntos de datos VSAM de la estación de trabajo 315

Page 338: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

/**********************************************************************//* DESCRIPTION *//* Load an ISAM direct data set. *//* *//* USAGE *//* The following commands are required to establish *//* the environment variables to run this program: *//* *//* SET DD:SYSIN=ISAM4.INP,RECSIZE(80) *//* SET DD:NOS=ISAM4.OUT,AMTHD(ISAM),RECCOUNT(100) *//*********************************************************************/CREATD: proc options(main);

put skip list(’ISAM4 TEST START’);

dcl Nos file record output direct keyedenv(organization(relative) recsize(20) );

dcl Sysin file input record;dcl 1 In_Area,

2 Name char(20),2 Number char( 2);

dcl Sysin_Eof bit (1) init(’0’b);dcl Ntemp fixed(15);

on endfile (Sysin) Sysin_Eof = ’1’b;

open file(Nos);read file(Sysin) into(In_Area);do while(¬Sysin_Eof);

Ntemp = Number;write file(Nos) from(Name) keyfrom(Ntemp);put file(sysprint) skip edit (In_Area) (a);read file(Sysin) into(In_Area);

end;

close file(Nos);

put skip list(’ISAM4 TEST END’);

end CREATD;

Este podría ser el archivo de entrada para este programa:ACTION,G. 12BAKER,R. 13BRAMLEY,O.H. 28CHEESNAME,L. 11CORY,G. 36ELLIOTT,D. 85FIGGINS,E.S. 43HARVEY,C.D.W. 25HASTINGS,G.M. 31KENDALL,J.G. 24LANCASTER,W.R. 64MILES,R. 23NEWMAN,M.W. 40PITT,W.H. 55ROLF,D.E. 14SHEERS,C.D. 21SURCLIFFE,M. 42TAYLOR,G.C. 47WILTON,L.W. 44WINSTONE,E.M. 37

Figura 23. Cargar un conjunto de datos directos VSAM de la estación de trabajo

Conjuntos de datos directos VSAM de la estación de trabajo

316 PL/I for WindowsGuía de programación

Page 339: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Utilizar un archivo SEQUENTIAL para acceder a un conjuntode datos directo VSAM deestación de trabajo

Puede abrir un archivo SEQUENTIAL que se utiliza para acceder a un conjunto dedatos directos con el atributo INPUT o UPDATE. Si utiliza algunas de las opcionesKEY, KEYTO o KEYFROM, su archivo tiene que utilizar también el atributoKEYED.

Utilizar sentencias READEn las sentencias READ sin opción KEY, los registros se recuperan en ordenascendente de número relativo de registro. Las ranuras vacías de un con junto dedatos se saltan.

Si utiliza la opción KEY, el registro recuperado por una sentencia READ es elregistro que tiene el número relativo de registro que ha especificado. Una sentenciaREAD así, coloca el conjunto de datos en el registro especificado; las lecturassecuenciales posteriores recuperan los registros siguientes en secuencia.

Utilizar sentencias WRITELas sentencias WRITE con o sin la opción KEYFROM están permitidas en archivosKEYED SEQUENTIAL UPDATE. Puede realizar inserciones en cualquier parte delconjunto de datos, independientemente de la posición de cualquier acceso anterior.En el caso de WRITE con la opción KEYFROM, se lanza la condición KEY si seintenta insertar un registro con el mismo número relativo de registro que unregistro que ya existe en el conjunto de datos.Si omite la opción KEYFROM, seintenta escribir el registro en la siguiente ranura, en relación a la posición actual. Selanza la condición ERROR si la ranura no está vacía.

Puede utilizar la opción KEYTO para recuperar la clave de un registro que seañade mediante una sentencia WRITE sin la opción KEYFROM.

Utilizar las sentencias REWRITE y DELETELas sentencias REWRITE, con o sin opción KEY, están permitidas en archivosUPDATE. Si utiliza la opción KEY, el registro que se vuelve a escribir es el registrocon el número relativo de registro especificado; si no, es el registro al que seaccedió mediante la sentencia READ anterior.

Puede utilizar sentencias DELETE, con o sin la opción KEY, para suprimir registrosdel conjunto de datos.

Utilizar un archivo DIRECT para acceder a un conjunto dedatos directo VSAM deestación de trabajo

Un archivo DIRECT utilizado para crear un conjunto de datos directo puede tenerel atributo OUTPUT, INPUT o UPDATE. Puede leer, escribir, reescribir o eliminarregistros exactamente igual que si estuviera utilizando el archivo KEYEDSEQUENTIAL.

Figura 24 en la página 318 muestra un conjunto de datos directo que está siendoactualizado. Se utiliza un archivo DIRECT UPDATE y se escriben registros nuevospor clave. No necesita buscar registros vacíos porque no están disponibles enestación de trabajo. También puede utilizar este programa para procesar un archivoDDM o SFS modificando la especificación AMTHD.

Conjuntos de datos directos VSAM de la estación de trabajo

Capítulo 13. Definir y utilizar los conjuntos de datos VSAM de la estación de trabajo 317

Page 340: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

En la segunda mitad del programa, se imprime el archivo de actualización. Denuevo, no tiene que buscar registros vacíos porque están en REGIONAL(1).

/********************************************************************//* *//* *//* DESCRIPTION *//* Update an ISAM direct data set by key. *//* *//* *//* USAGE *//* The following commands are required to establish *//* the environment variables to run this program. *//* *//* SET DD:SYSIN=ISAM5.INP,RECSIZE(80) *//* SET DD:NOS=ISAM4.OUT,AMTHD(ISAM),APPEND(Y) *//* *//* Note: This sample program is using the direct ISAM data set *//* isam4.out created by the previous sample program CREATD. *//* *//********************************************************************/

UPDATD: proc options(main);

put skip list(’ISAM5 TEST START’);

dcl Nos file record keyedenv(organization(relative));

dcl Sysin file input record;

dcl Sysin_Eof bit (1) init(’0’b);dcl Nos_Eof bit (1) init(’0’b);

dcl 1 In_Area,2 Name char(20),2 (CNewNo,COldNo) char( 2),2 In_Area_1 char( 1),2 Code char( 1);

dcl IoField char(20);dcl NewNo fixed(15);dcl OldNo fixed(15);

dcl oncode builtin;

on endfile (Sysin) sysin_Eof = ’1’b;open file (Nos) direct update;

Figura 24. Actualizar un conjunto de datos directos VSAM de la estación de trabajo por clave

Conjuntos de datos directos VSAM de la estación de trabajo

318 PL/I for WindowsGuía de programación

Page 341: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

/* trap errors */

on key(Nos)begin;

if oncode=51 thenput file(sysprint) skip edit(’Not found:’, Name) (a(15), a);

if oncode=52 thenput file(sysprint) skip edit(’Duplicate:’, Name) (a(15), a);

end;

/* update the direct data set */

read file(Sysin) into(In_Area);

do while(¬Sysin_Eof);if CNewNo¬=’ ’ then

NewNo = CNewNo;else

NewNo = 0;if COldNo¬=’ ’ then

OldNo = COldNo;else

OldNo = 0;select(Code);

when (’A’) write file(Nos) keyfrom(NewNo) from(Name);when (’C’)do;

delete file(Nos) key(OldNo);write file(Nos) keyfrom(NewNo) from(Name);

end;when(’D’) delete file(Nos) key(OldNo);otherwise put file(sysprint) skip list (’Invalid code:’,Name);

end;read file(Sysin) into(In_Area);

end;

close file(Sysin),file(Nos);

/* open and print updated file */

open file(Nos) sequential input;on endfile (Nos) Nos_Eof = ’1’b;

Actualizar un conjunto de datos directos VSAM de la estación de trabajo por clave (continuación)

Conjuntos de datos directos VSAM de la estación de trabajo

Capítulo 13. Definir y utilizar los conjuntos de datos VSAM de la estación de trabajo 319

Page 342: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

read file(Nos) into(IoField) keyto(CNewNo);do while(¬Nos_Eof);

put file (sysprint) skipedit (CNewNo,IoField)(a(5),a);

read file(Nos) into(IoField) keyto(CNewNo);end;close file(Nos);

put skip list(’ISAM5 TEST END’);

end UPDATD;

An input file for this program might look like this:

NEWMAN,M.W. 5640 CGOODFELLOW,D.T. 89 AMILES,R. 23 DHARVEY,C.D.W. 29 ABARTLETT,S.G. 13 ACORY,G. 36 DREAD,K.M. 01 AWONG,X-G. 20 CPITT,W.H. 55 XROLF,D.F. 14 DELLIOTT,D. 4285 CHASTINGS,G.M. 31 DBRAMLEY,O.H. 4928 CVISWANATHAN, I. 4115 D

Actualizar un conjunto de datos directos VSAM de la estación de trabajo por clave (continuación)

Conjuntos de datos directos VSAM de la estación de trabajo

320 PL/I for WindowsGuía de programación

Page 343: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Parte 5. Utilizar PL/I con bases de datos

© Copyright IBM Corp. 1998, 2013 321

Page 344: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

322 PL/I for WindowsGuía de programación

Page 345: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 14. Open Database Connectivity

Este capítulo contiene información que le ayudará a utilizar la interfaz de OpenDatabase Connectivity (ODBC) en sus aplicaciones PL/I. Con ODBC, no solopuede acceder a datos desde distintas bases de datos y sistemas de archivos quesoportan la interfaz ODBC, sino que puede hacerlo dinámicamente.

Sus aplicaciones PL/I que utilizan SQL incorporado para acceder a las bases dedatos tiene que ser procesadas por un preprocesador para una base de datos enconcreto y tienen que volver a compilarse si la base de datos de destino cambia.Como ODBC en una interfaz CALL, no hay una designación en tiempo decompilación de la base de datos de destino como ocurre con SQL incorporado. Nosolo evita el tener varias versiones de su aplicación para varias bases de datos, sinoque su aplicación puede determinar dinámicamente qué base de datos usar comodestino.

Introducción a ODBCODBC es una especificación de una interfaz de programación de aplicaciones (API)que permite a las aplicaciones acceder a varios sistemas de gestión de bases dedatos utilizando el lenguaje de consulta estructurado (SQL).

ODBC permite una interoperabilidad máxima: una única aplicación puede accedera varios sistemas de gestión de bases de datos. Esto le permite desarrollar,compilar e incluir una aplicación sin especificar como destino un tipo específico deorigen de datos. Después los usuarios pueden añadir controladores de base dedatos, que enlazan la aplicación con el sistema de gestión de bases de datos queelijan.

Segundo planoX/Open Company y SQL Access Group desarrollaron conjuntamente unaespecificación para una interfaz SQL de llamada, denominada Call Level Interface deX/Open. El objetivo de esta interfaz es aumentar la portabilidad de las aplicaciones,permitiéndoles que sean independientes de cualquier interfaz de programación delproveedor de bases de datos.

Microsoft desarrolló Open Database Connectivity (ODBC) para los sistemasoperativos de Microsoft basándose en un borrador preliminar de X/Open CLI.Desde entonces, otros proveedores han suministrado controladores ODBC que seejecutan en otras plataformas, como sistemas OS/2 y UNIX.

Las descripciones y ejemplos de este capítulo se aplican a ODBC versión 3.0. Paraobtener más información sobre los archivos de inclusión de ODBC, consulte“Utilizar los archivos de inclusión proporcionados” en la página 327.

Gestor de controladores ODBCCuando utiliza la interfaz ODBC, su aplicación hace llamadas a través deladministrador de controladores. El administrador de controladores cargadinámicamente el controlador necesario para el servidor de bases de datos al quese conecta la aplicación. El controlador, a su ves, acepta la llamada, envía el SQL alorigen de datos especificado (base de datos) y devuelve cualquier resultado.

© Copyright IBM Corp. 1998, 2013 323

Page 346: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Elegir SQL incorporado u ODBCSQL incorporado y ODBC tienen ventajas que les son exclusivas. Algunas de lasventajas de SQL incorporado son las siguientes:v El SQL estático suele ofrecer mejor rendimiento que el SQL dinámico. No tiene

que prepararse en tiempo de ejecución, reduciendo el tráfico de procesamiento yde red.

v Con SQL estático, el administrador de bases de datos tiene que conceder a losusuarios acceso un solo paquete en lugar de conceder acceso a cada tabla o vistaque se utiliza.

Algunas de las ventajas de ODBC son las siguientes:v Proporciona una interfaz coherente independientemente del tipo de servidor de

bases de datos que se utilice.v Puede tener más de una conexión al mismo tiempo.v Las aplicaciones no tienen que estar vinculadas a cada base de datos en la que

se ejecutan. Aunque PL/I for Windows realiza este enlace automáticamente, seenlaza únicamente a una base de datos. Si quiere elegir a qué base de datosconectarse dinámicamente en tiempo de ejecución, tiene que realizar unos pasosextra para enlazar con una base de datos diferente.

Utilizar controladores ODBCPara habilitar ODBC para acceder a datos en PL/I, tiene que instalar el gestor decontroladores ODBC y controladores seleccionando el componente “ControladoresODBC” durante la instalación.

Importante: Durante el proceso de instalación, se instala un archivo de licencia delcontrolador ODBC en el sistema.

Se instalará un archivo denominado ivib.lic en x:\plidir\ODBC, donde x y plidirson el controlador y el directorio respectivamente, en el que se instala PL/I forWindows.

Tiene que conservar este archivo en el directorio de instalación porque se utilizar alejecutar la aplicación para comprobar que tiene licencia para utilizar el controladorODBC. En “Definir información de licencia para el gestor de controladores/controlador ODBC” en la página 329 aprenderá a utilizar una llamada a funciónpara activar la verificación.

Ayuda en líneaLa ayuda en línea está disponible para los controladores ODBC como libro dereferencia y como ayuda según contexto. Los nombres de archivo específico ydemás pueden variar; tiene que anotar los nombres de esta sección para losnombres de archivo PL/I.

Información específica de entornoLos controladores ODBC con controladores de 31 bits. El software de red necesariosuministrado por sus proveedores de sistema de base de datos tiene que sercompatible con versiones de 32 bits.

Nombres de controladorLos controladores para Windows tienen que ser ODBC de nivel 3.0 o superior.ODBC.INI es una subclave de la clave HKEY_CURRENT_USER\\SOFTWARE\\

Introducción a ODBC

324 PL/I for WindowsGuía de programación

Page 347: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ODBC en el registro de Windows. La subclave ODBC.INI la mantiene eladministrador de ODBC, que se encuentra en el grupo de programas PL/Iprincipal. Como Windows puede soportar varios usuarios, la subclave ODBC.INIse almacena en una única clave de usuario en el registro.

Configurar orígenes de datosUn origen de datos consta de un sistema de gestión de bases de datos (DBMS) ycualquier red o sistema operativo remoto para acceder a él. Una vez instalados loscontroladores, el origen de datos tiene que configurarse utilizando el programaODBC Administrator, que se encuentra en el grupo de programas PL/I principal.Como Windows puede tener varios usuarios, cada usuario tiene que configurar suspropios orígenes de datos. Para obtener información de configuración detalladasobre el controlador específico que quiere configurar, consulte la seccióncorrespondiente de la ayuda en línea.

Conexión con un origen de datosSu aplicación ODBC tiene que conectarse al origen de datos utilizando un cuadrode diálogo de inicio de sesión o una cadena de conexión, dependiendo del origende datos.

Utilizar un cuadro de diálogo de inicio de sesiónAlgunas aplicaciones ODBC muestran un cuadro de diálogo de inicio de sesióncuando se conecta a un origen de datos. En estos casos, el nombre del origen dedatos ya se ha especificado.

En el cuadro de diálogo de inicio de sesión, haga lo siguiente:1. Escriba el nombre de la base de datos remota o seleccione el nombre de la base

de datos remota en la lista desplegable Nombre de la base de datos.Tiene que haber catalogado las bases de acceso a las que quiera acceder desdeel cliente.

2. Si es necesario, escriba el nombre de usuario (ID de autorización).3. Si es necesario, escriba su contraseña.

Si deja el nombre de usuario y la contraseña en blanco, la aplicación ODBCasume que ya ha iniciado sesión utilizando SQLLOGN2 (en DOS) o utilizandola gestión de perfiles de usuario. Si no, la aplicación devuelve un error. Tieneque escribir su nombre de usuario y contraseña en el cuadro de diálogo oiniciar sesión utilizando SQLLOGN2 y STARTDRQ (en DOS) o utilizando lagestión de perfiles de usuario.

4. Pulse Aceptar para completar el inicio de sesión y actualizar los valores enODBC.INI.

Utilizar una cadena de conexiónSi su aplicación requiere una cadena de conexión para conectarse al origen dedatos, tiene que especificar el nombre del origen de datos que le dice alcontrolador qué sección de ODBC.INI tiene que utilizar para la información deconexión predeterminada. También puede especificar pares atributo=valor en lacadena de conexión para sustituir los valores predeterminados almacenados enODBC.INI. Estos valores no se escriben en ODBC.INI.

Puede especificar nombres largos o cortos en la cadena de conexión. La serie deconexión tiene la siguiente forma:DSN=data_source_name[;attribute=value[;attribute=value]...]

Un ejemplo de una cadena de conexión para INFORMIX 5 es

Introducción a ODBC

Capítulo 14. Open Database Connectivity 325

Page 348: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

DSN=INFORMIX TABLES;DB=PAYROLL

Mensajes de errorLos mensajes de error pueden proceder de los siguientes orígenes:v Un controlador ODBCv El sistema de bases de datosv El administrador de controladores.

Un error detectado en un controlador ODBC tiene el siguiente formato:[vendor] [ODBC_component] message

ODBC_component es el componente en el que se produjo el error. Por ejemplo, unmensaje de error del controlador SQL Server de INTERSOLV tendría este aspecto:[INTERSOLV] [ODBC SQL Server driver] Login incorrect.

Si recibe este tipo de error, compruebe si hay algún problema en la última llamadaODBC que realizó su aplicación o póngase en contacto con su proveedor deaplicaciones ODBC.

Un error producido en el origen de datos incluye el nombre de origen de datos conel siguiente formato:[vendor] [ODBC_component] [data_source] message

Con este tipo de mensaje, ODBC_component es el componente que recibe el errordel origen de datos indicado. Por ejemplo, puede obtener el siguiente mensaje deun origen de datos de Oracle:[INTERSOLV] [ODBC Oracle driver] [Oracle] ORA-0919: specifiedlength too long for CHAR column

Si obtiene este tipo de error, ha realizado algo de forma incorrecta en el sistema debases de datos. Revise la documentación de su sistema de bases de datos paraobtener más información o póngase en contacto con su administrador de bases dedatos. En este ejemplo, debería consultar la documentación de Oracle.

Driver Manager es una aplicación que establece conexiones con controladores,envía solicitudes a controladores y devuelve resultados a aplicaciones. Un errorque se produce en Driver Manager tiene el siguiente formato:[vendor] [ODBC DLL] message

el proveedor puede ser Microsoft o INTERSOLV. Por ejemplo, un error deMicrosoft Driver Manager podría tener este aspecto:[Microsoft] [ODBC DLL] Driver does not supportthis function

API de ODBC de PL/ICon VA PL/I se incluyen archivos de inclusión que le facilitan el acceso a bases dedatos con controladores utilizando llamadas ODBC desde sus programas PL/I. Enesta sección se describen los archivos de inclusión ODBC proporcionado, cómo elargumento ODBC API escribe correlaciones en las descripciones de datos de PL/Iy funciones PL/I adicionales y consideraciones aplicables a las API de ODBC.

Para obtener más información sobre las interfaces de usuario de ODBC, consulte laayuda en línea.

Introducción a ODBC

326 PL/I for WindowsGuía de programación

Page 349: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Para información específica relacionada con un controlador ODBC, como el nivelODBC o extensiones soportadas por ele controlador, consulte las especificacionesdisponibles para ese controlador.

A continuación se muestra cómo acceder a ODBC desde programas PL/I:“Convención de interfaz CALL”“Utilizar los archivos de inclusión proporcionados”“Correlación de tipos C de ODBC” en la página 329“Definir información de licencia para el gestor de controladores/controladorODBC” en la página 329

Archivos LIB:

Cuando enlaza sus aplicaciones ODBC, tiene que incluir la biblioteca deimportación ODBC32.LIB, que se incluye en el ODBC SDK (de Microsoft).

Convención de interfaz CALLLos programas que realizan llamadas ODBC tienen que estar compilados son lasopciones de tiempo de compilación DEFAULT(BYVALUE) yLIMITS(EXTNAME(31)).

Utilizar los archivos de inclusión proporcionadosLos archivos de inclusión aquí descritos pertenecen a ODBC Versión 3.0.

Tabla 20. Archivos de inclusión proporcionados para ODBC

Nombre de archivo Descripción

ODBCSQL.CPY Archivo de inclusión principal para funciones ODBC

ODBCEXT.CPY Archivo de inclusión para ampliaciones ODBC deMicrosoft

ODBCTYPE.CPY Archivo de inclusión para definiciones de tipo ODBC

ODBCUCOD.CPY Archivo de inclusión Unicode

ODBCSAMP.PLI Programa de ejemplo

Los archivos de inclusión proporcionados definen los símbolos para valoresconstantes descritos para las API de ODBC, las constantes de correlación utilizadasen llamadas a las API de ODBC para símbolos especificados en las guías ODBC deforma que los valores de retorno de funciones y argumentos (entrada y salida)pueden especificarse y probarse. Estos archivos deberían incluirse en el programaPL/I para utilizar llamadas ODBC API.

En PL/I, los nombres que contengan más de 31 caracteres se truncan o abrevianhasta los 31 caracteres. Tabla 21 muestra los nombres que superan los 31 caracteresy sus nombres PL/I correspondientes.

Tabla 21. Nombres ODBC truncados o abreviados para PL/I

ODBC símbolo de definición C # > 31 caracteres delongitud

Nombre PL/I correspondiente

SQL_AD_ADD_CONSTRAINT_DEFERRABLE SQL_AD_ADD_CONSTR_DEFERRABLE

SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED SQL_AD_ADD_CONSTR_INITLY_DEFERD

SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE SQL_AD_ADD_CONSTR_INITLY_IMMEDT

SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE SQL_AD_ADD_CONSTR_NON_DEFERRABL

API de ODBC de PL/I

Capítulo 14. Open Database Connectivity 327

Page 350: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 21. Nombres ODBC truncados o abreviados para PL/I (continuación)

ODBC símbolo de definición C # > 31 caracteres delongitud

Nombre PL/I correspondiente

SQL_AD_CONSTRAINT_NAME_DEFINITION SQL_AD_CONSTR_NAME_DEFINITION

SQL_API_ODBC3_ALL_FUNCTIONS_SIZE SQL_API_ODBC3_ALL_FUNCTIONS_SZ

SQL_AT_CONSTRAINT_INITIALLY_DEFERRED SQL_AT_CONSTR_INITIALLY_DEFRD

SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE SQL_AT_CONSTR_INITIALLY_IMMED

SQL_AT_CONSTRAINT_NAME_DEFINITION SQL_AT_CONSTR_NAME_DEFINITION

SQL_AT_CONSTRAINT_NON_DEFERRABLE SQL_AT_CONSTR_NON_DEFERRABLE

SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE SQL_AT_DROP_TBL_CONSTR_CASCADE

SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT SQL_AT_DROP_TBL_CONSTR_RESTRICT

SQL_CA_CONSTRAINT_INITIALLY_DEFERRED SQL_CA_CONSTR_INITLY_DEFERRED

SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE SQL_CA_CONSTR_INITLY_IMMEDIATE

SQL_CA_CONSTRAINT_NON_DEFERRABLE SQL_CA_CONSTR_NON_DEFERRABLE

SQL_CDO_CONSTRAINT_NAME_DEFINITION SQL_CDO_CONSTR_NAME_DEFINITION

SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED SQL_CDO_CONSTR_INITLY_DEFERRED

SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE SQL_CDO_CONSTR_INITLY_IMMEDIAT

SQL_CDO_CONSTRAINT_NON_DEFERRABLE SQL_CDO_CONSTR_NON_DEFERRABLE

SQL_CT_CONSTRAINT_INITIALLY_DEFERRED SQL_CT_CONSTR_INITLY_DEFERRED

SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE SQL_CT_CONSTR_INITLY_IMMEDIATE

SQL_CT_CONSTRAINT_NON_DEFERRABLE SQL_CT_CONSTR_NON_DEFERRABLE

SQL_CT_CONSTRAINT_NAME_DEFINITION SQL_CT_CONSTR_NAME_DEFINITION

SQL_DESC_DATETIME_INTERVAL_PRECISION SQL_DESC_DATETIME_INTERVAL_PREC

SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR SQL_DL_SQL92_INTERVAL_DAY_TO_HR

SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE SQL_DL_SQL92_INTERVAL_DY_TO_MIN

SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND SQL_DL_SQL92_INTERVAL_DY_TO_SEC

SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE SQL_DL_SQL92_INTERVAL_HR_TO_MIN

SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND SQL_DL_SQL92_INTERVAL_HR_TO_SEC

SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND SQL_DL_SQL92_INTERVAL_MN_TO_SEC

SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH SQL_DL_SQL92_INTERVAL_YR_TO_MTH

SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 SQL_FORWARD_ONLY_CURSOR_ATTRIB1

SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 SQL_FORWARD_ONLY_CURSOR_ATTRIB2

SQL_MAX_ASYNC_CONCURRENT_STATEMENTS SQL_MAX_ASYNC_CONCURRENT_STMTS

SQL_MAXIMUM_CONCURRENT_ACTIVITIES SQL_MAXIMUM_CONCURRENT_ACTIVITI

SQL_SQL92_FOREIGN_KEY_DELETE_RULE SQL_SQL92_FOREIGN_KEY_DEL_RULE

SQL_SQL92_FOREIGN_KEY_UPDATE_RULE SQL_SQL92_FOREIGN_KEY_UPD_RULE

SQL_SQL92_NUMERIC_VALUE_FUNCTIONS SQL_SQL92_NUMERIC_VALUE_FUNCT

SQL_SQL92_RELATIONAL_JOIN_OPERATORS SQL_SQL92_RELATIONAL_JOIN_OPER

SQL_TRANSACTION_ISOLATION_OPTION SQL_TRANSACTION_ISOLATION_OPTN

SQL_TRANSACTION_READ_UNCOMMITTED SQL_TRANSACTION_READ_UNCOMMITTD

API de ODBC de PL/I

328 PL/I for WindowsGuía de programación

Page 351: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Correlación de tipos C de ODBCLos tipos de datos especificados en las API de ODBC se definen en términos detipos C de ODBC en las definiciones de API. La siguiente tabla muestradeclaraciones PL/I correspondientes a los tipos C de ODBC indicados de losargumentos.

Tabla 22. Correlación de ODBC tipo C a declaraciones de datos PL/I

ODBC tipo C formato PL/I Descripción

SQLSMALLINT FIXED BIN(15) Entero corto con signo (binario de 2 bytes)

SQLUSMALLINT FIXED BIN(16)UNSIGNED

Entero corto sin signo (binario de 2 bytes)

SQLINTEGER FIXED BIN(31) Entero largo con signo (binario de 4 bytes)

SQLUINTEGER FIXED BIN(31)UNSIGNED

Entero largo sin signo (binario de 4 bytes)

SQLREAL FLOAT Coma flotante (4 bytes)

SQLFLOAT DOUBLE Coma flotante (8 bytes)

SQLDOUBLE DOUBLE Coma flotante (8 bytes)

SQLCHAR * CHAR(*) VARZBYADDR

Puntero a carácter sin signo.

SQLHDBC POINTER Descriptor de conexión

SQLHENV POINTER Descriptor de contexto de entorno

SQLHSTMT POINTER Descriptor de contexto de sentencia

SQLHWND POINTER Handle de ventana

Definir información de licencia para el gestor decontroladores/controlador ODBC

Cuando utilice controladores ODBC o el gestor de controladores ODBC, necesitarállamar aibmODBCLicInfo inmediatamente después de una llamada a las funcionesSQLConnect, SQLDriverConnect o SQLBrowseConnect. Tiene que pasar el argumento'hdbc' a ibmODBCLicInfo así:sql_rc = ibmODBCLicInfo(myHDBC);

La rutina ibmODBCLicInfo se incluye en la bibliotecaibmodlic.lib que tiene queincluirse en el paso de enlace de su programa. Consulte el programa de ejemplo,odbcsamp.pli para obtener más información.

API de ODBC de PL/I

Capítulo 14. Open Database Connectivity 329

Page 352: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Programa de ejemplo utilizando los archivos de inclusiónproporcionados

Se incluye un programa PL/I que ilustra el uso de algunas funciones ODBCcomunes, entre ellas:

SQLAllocEnvSQLAllocConnectSQLAllocStmtSQLBindColSQLBindParameterSQLConnectSQLDisconnectSQLErrorSQLExecDirect

SQLExecuteSQLFetchSQLFreeConnectSQLFreeEnvSQLFreeStmtSQLGetInfoSQLNativeSQLSQLPrepareSQLTransact

Notas de ejemplo:

1. Utilice las opciones DEFAULT(BYVALUE) y LIMITS(EXTNAME(31)) paracompilar programas ODBC.

2. En Windows, se incluye un programa PL/I de ejemplo en el directorio..\samples\. Utilice el archivo de mandatosbldodbc.bat que encontrará en elmismo directorio para compilar y enlazar el programa de ejemplo.

3. Los archivos de inclusión ODBC están disponibles en el subdirectorio\include\.

Programa de ejemplo

330 PL/I for WindowsGuía de programación

Page 353: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 15. Utilizar el generador de declaraciones (Dclgen)Java

PL/I for Windows incluye un generador de declaraciones(java Dclgen) queproduce sentencias DECLARE que puede utilizar en sus aplicaciones PL/I.

Usuarios de java Dclgen

Para utilizar java Dclgen en el entorno Windows, tiene que tener el kit deherramientas de desarrollador Java (V1.3 o posterior) y DB2 instalados en susistema.

La herramienta java Dclgen:v Genera una declaración de tabla y la coloca en un archivo que puede incluir en

su programa.v Obtiene información sobre la definición de la tabla y cada columna de la misma

a partir del catálogo de base de datos.Ahora java Dclgen soporta los servicios de directorio del protocolo LightweightDirectory Access Protocol (LDAP) cuando actualiza a DB2 Universal DatabaseVersión 8 o posterior.

v Utiliza la información para crear una sentencia SQL DECLARE completa para latabla (o vista) y una declaración de estructura PL/I que coincida.

Para utilizar declaraciones en el programa, utilice la sentencia SQL INCLUDE.

Si quiere invocar java Dclgen y sus nombres de tabla incluyen caracteres DBCS,tiene que utilizar un terminal que acepte y muestre caracteres de doble byte.

Terminología de java DclgenLa siguiente información explica los términos utilizados en los cuadros de diálogojava Dclgen:

TablasEl nombre de tabla no cualificado para el que quiere que java Dclgen produzcadeclaraciones de datos SQL. También puede calificar el nombre de tablaescribiendo el calificador de tablas en el campo de entrada calificador detablas. La herramienta genera un nombre de tabla en dos partes a partir delnombre de tabla y del calificador de tabla.

Calificador de tablaEl calificador de nombre de tabla. Si no especifica este valor, se asume que suID de inicio de sesión es el calificador de tabla.

Vía de acceso de salida para guardadoLa vía de acceso marcada como destino para las declaraciones que producejava Dclgen.

Nombre de archivo de salida para guardadoEl nombre de archivo marcado como destino para las declaraciones queproduce java Dclgen.

© Copyright IBM Corp. 1998, 2013 331

Page 354: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Nombre de estructuraNombre de la estructura de datos generada que puede tener hasta 31caracteres de longitud.

Si deja este campo en blanco, java Dclgen genera un nombre que contiene latabla o nombre de vista con un prefijo DCL. Si el nombre de la tabla o la vistaconsta de una cadena DCBS, el prefijo consta de caracteres DBCS.

Prefijo de nombre de campo>El nombre de prefijo generado para campos en la salida javaDclgen. El valorque elija puede ser de hasta 28 caracteres de longitud y se utiliza como prefijopara el nombre de campo.

Por ejemplo, si elige ABCDE, los nombres de campo generados son ABCDE001,ABCDE002, y así sucesivamente.

Si deja este campo en blanco, los nombres de campos son los mismos que losnombres de columna de la tabla o la vista. Si el nombre es una cadena DBCS,se generan los equivalentes DBCS de los números de sufijo.

Se genera un nombre de columna o tabla en la sentencia DECLARE comoidentificador no delimitado a no ser que el nombre contenga caracteres especiales yno sea una cadena DBCS.

Si utiliza una palabra reservada SQL como identificador, tiene que editar la salidade java Dclgen para añadir los delimitadores SQL apropiados.

Soporte java Dclgen de PL/ILos nombres de variables y los atributos de datos generados por java Dclgen sederivan de la información incluida en bases de datos

Tabla 23. Declaraciones generadas por java Dclgen

Tipo de datos de SQL PL/I

SMALLINT BIN FIXED(15)

INTEGER BIN FIXED(31)

DECIMAL(p,s) o NUMERIC(p,s) DEC FIXED(p,s)

FLOAT BIN FLOAT(53)

CHAR(1) CHAR(1)

CHAR(n) CHAR(n)

VARCHAR(n) CHAR(n) VARYING

LONG VARCHAR CHAR(32700) VARYING

GRAPHIC(n) GRAPHIC(n)

VARGRAPHIC(n) GRAPHIC(n) VARYING

LONG VARGRAPHIC GRAPHIC(16350) VARYING

DATE CHAR(10)

TIME CHAR(8)

TIMESTAMP CHAR(26)

CLOB(nnn) SQL TYPE IS CLOB(nnn)

BLOB(nnn) SQL TYPE IS BLOB(nnn)

DBCLOB(nnn) SQL TYPE IS DBCLOB(nnn)

Terminología de java Dclgen

332 PL/I for WindowsGuía de programación

Page 355: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Crear una declaración de tabla y una estructura de lenguaje principalPuede iniciar java Dclgen de dos formas:1. Escriba 'java javaDclgen' en el indicador MS/DOS.2. Pulse dos veces en el icono java Dclgen en el grupo de programas PL/I

principal.

Selección de una base de datosAparece una ventana que le proporciona una lista de bases de datos disponibles enel cuadro de lista bases de datos. Para seleccionar una base de datos, mueva elpuntero del ratón hasta la entrada de la base de datos y pulse una vez con elbotón izquierdo del ratón. De este modo se resalta su selección.Justo debajo del cuadro de lista Bases de datos se encuentra el campo de entrada

Calificador de tabla (obligatorio). Este campo se llena con el ID de usuario actual.Puede utilizar este calificador de tabla predeterminado o puede sustituirlo por otrocalificador de tabla válido.

Para continuar, pulse en el botón Obtener una lista de tablas para la base dedatos.

Seleccionar una tabla y generar una declaración PL/IEl cuadro de lista Tablas debería llenarse con las tablas creadas por el calificadorde tablas en la base de datos. Puede seleccionar una tabla en la base de datoshaciendo clic sobre ella con el puntero del ratón.

Figura 25. Selección de una base de datos

Crear una declaración de tabla y una estructura de lenguaje principal

Capítulo 15. Utilizar el generador de declaraciones (Dclgen) Java 333

Page 356: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

También puede especificar un nombre de nivel 1 en el campo Nombre deestructura además de un prefijo de nombre de campo que se utilizará en cadanombre de nivel 2 de la estructura. Por ejemplo, si especifica MYSTRUCT comoprefijo de nombre de campo, los nombres de nivel 2 son MYSTRUCT001,MYSTRUCT002, y así sucesivamente.

Pulse sobre el botón Generar estructura de inclusión para tabla para continuar.

Modificar y guardar la declaración de PL/I generadaEn la siguiente ventana debería ver un área de texto que contiene la declaraciónPL/I generada. Puede editar el contenido de esta área directamente si fuesenecesario.

Figura 26. Visualización de las tablas creadas por el calificador

Crear una declaración de tabla y una estructura de lenguaje principal

334 PL/I for WindowsGuía de programación

Page 357: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

En PL/I, el generador de declaraciones java guarda el contenido del área de textoen un archivo en ibmpliw\include utilizando el nombre de tabla como nombre dearchivo con una extensión .CPY.

Si decide guardar la declaración generada en otro lugar, pulse el botón Cambiarubicación y guardar. Puede modificar el directorio de salida y el nombre dearchivo utilizando el cuadro de diálogo Guardar como....

Puede modificar el calificador de tabla o el nombre de editor (incluyendo lasextensiones) reescribiendo sobre la información predeterminada.

Nota: Si el nombre de la tabla contiene algún carácter especial que no forma partedel nombre de archivo, puede especificar un nombre de archivo nuevo.

Salir del generador de declaraciones JavaPara salir del generador de declaraciones Java, pulse los botones Salirsucesivamente hasta que la aplicación termine.

Incluir declaraciones de datos en su programaUtilice la siguiente sentencia SQL INCLUDE para insertar la declaración de tabla yla declaración de estructura PL/I producidas por el generador de declaracionesJava en su programa fuente:

exec sqlinclude name ;

Por ejemplo, para incluir una descripción de la tabla BALKBJ.ORG, utilice:exec sql

include org ;

Si por alguna razón el generador de declaraciones Java produce resultadosinesperados, puede utilizar el editor para ajustar la salida a sus necesidades.

Figura 27. Declaraciones PL/I generadas

Crear una declaración de tabla y una estructura de lenguaje principal

Capítulo 15. Utilizar el generador de declaraciones (Dclgen) Java 335

Page 358: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Crear una declaración de tabla y una estructura de lenguaje principal

336 PL/I for WindowsGuía de programación

Page 359: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Parte 6. Temas avanzados

© Copyright IBM Corp. 1998, 2013 337

Page 360: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

338 PL/I for WindowsGuía de programación

Page 361: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 16. Uso del programa de utilidad de mantenimientodel programa, NMAKE

El programa de utilidad de mantenimiento del programa (NMAKE) automatiza elproceso de actualizar archivos de proyecto. NMAKE compara las fechas demodificación de un conjunto de archivos (archivos de destino) con las de otroconjunto de archivos (archivos dependientes). Si algún archivo dependiente se hamodificado más recientemente que los archivos de destino, NMAKE ejecuta unaserie de mandatos para actualizar los archivos de destino.

Por qué utilizar NMAKEEl uso más común de NMAKE es el de automatizar el proceso de actualización deproyecto tras realizar un cambio en un archivo de origen. Los proyectos grandessuelen tener varios archivos de origen. Normalmente, solo hace falta compilar unospocos archivos cuando realiza un cambio. Tiene que configurar un archivo de textoespecial, denominado archivo de descripción (o archivo make), que le dice a NMAKE:v Qué archivos dependen de otrosv Qué mandatos, como mandatos de enlace y compilación, tienen que llevarse a

cabo para actualizar el programa.

Este uso de NMAKE es solo un ejemplo de lo que puede hacer. Si construye losarchivos de descripción adecuados, puede usar NMAKE para:v Realizar copias de seguridadv Configurar archivos de datosv Ejecutar programas cuando se modifican archivos de datos.

Ejecutar NMAKEEjecute NMAKE escribiendo nmake en la línea de mandatos del sistema operativo.Proporcione datos de entrada para NMAKE con cualquiera de estos métodos:v Escriba los datos de entrada directamente en la línea de mandatos.v Coloque los datos de entrada en un archivo de mandato (un archivo de texto,

también llamado archivo de respuestas) y escriba el nombre de archivo en la líneade mandatos.

Pulse Ctrl+C en cualquier momento durante una ejecución de NMAKE para volveral sistema operativo.

Utilizar la línea de mandatosCuando utilice NMAKE en la línea de mandatos, tenga en cuenta lo siguiente:v Todos los campos son opcionales.v NMAKE siempre busca primero en el directorio actual un archivo de descripción

denominado makefile. Si makefile no existe, NMAKE utiliza el filename que seproporciona con la opción /F (especificar archivo de descripción) (consulte“Especificar archivo de descripción (/F)” en la página 342).

Sintaxis de línea de mandatos

�� nmakeoptions macrodefinitions targets /F filename

��

© Copyright IBM Corp. 1998, 2013 339

Page 362: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

optionsEspecifica las opciones que modifican las acciones de NMAKE.

macrodefinitionsRecoge las definiciones de macros que va a utilizar NMAKE. Las definicionesde macros que contienen espacios tienen que ir entre comillas.

targetsEspecifica los nombres de uno o varios archivos de destino que se van a crear.Si no enumera ningún destino, NMAKE crea el primer destino en el archivo dedescripción.

/F filenameDa el nombre del archivo de descripción en el que especifica dependencias dearchivo y determina qué mandatos se ejecutan cuando un archivo estádesactualizado.

El siguiente ejemplo:nmake /s "program = flash" sort.exe search.exe

v Invoca NMAKE con la opción /sv Define una macros, asignando la cadena "flash" a la macro "program"v Especifica dos destinos: sort.exe y search.exe

De forma predeterminada, NMAKE utiliza el archivo denominado makefile comoarchivo de descripción.

Ayuda de la línea de mandatosPara ver la ayuda de NMAKE, escriba nmake /? en la solicitud. Aparece ladeclaración de copyright correspondiente junto con el siguiente código:Usage:

NMAKE @commandfileNMAKE /help

NMAKE [/nologo] [/acdeinpqrst?] [/f makefile] [/x stderrfile]

[macrodefs][targets]

What the options stand for/a Force all targets to be built/c Cryptic mode; suppress sign-on banner & warning messages/d Display modification dates/e Environment variables override macros in the makefile/i Ignore exit codes of commands invoked/n No execute mode; display commands only/p Print macro definitions & target descriptions/q Query if target is up to date; for use in batch files/r Inference Rules from ’TOOLS.INI’ to be ignored/s Silent execution of commands/t Touch targets with current date & time/? Help message/help Help message/nologo Do not display sign-on banner

Utilizar archivos de mandato NMAKEUn archivo de mandato es un archivo de respuestas utilizado para ampliar la entradade la línea de mandatos a NMAKE.

Puede dividir la entrada a NMAKE entre la línea de mandatos y un archivo demandato. Utilice el nombre de un archivo de mandato (precedido de @) dondenormalmente escribiría la información de entrada en la línea de mandatos.

Ejecutar NMAKE

340 PL/I for WindowsGuía de programación

Page 363: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Por qué utilizar un archivo de mandatoUtilice un archivo de mandato para:v Mandatos largos y complejos que escribe con frecuenciav cadenas de argumentos de línea de mandatos, como definiciones de macro, que

superan el la longitud límite de la línea de mandatos.

Un archivo de mandato no es lo mismo que un archivo de descripción. Paraobtener información sobre los archivos de descripción, consulte “Archivos dedescripción” en la página 344.

Sintaxis del archivo de mandatosPara proporcionar datos de entrada a NMAKE con un archivo de mandato, escribanmake @commandfile

en el campo commandfile, escriba el nombre de un archivo que contenga la mismainformación que suele escribirse en la línea de mandatos.

NMAKE trata los saltos de línea que se producen entre argumentos como espacios.Las definiciones de macros pueden abarcar múltiples líneas si termina cada líneaexcepto la última con una barra inclinada invertida (\). Las definiciones de macroque incluyen espacios tienen que ir entre comillas, al igual que si las introdujeradirectamente en la lista de mandatos.

EjemploEl siguiente ejemplo es una archivo de mandato denominado update:/s "program \= flash" sort.exe search.exe

Puede utilizar este archivo de mandato escribiendo el siguiente mandato:nmake @update

Así se ejecuta NMAKE utilizando:v La opción /sv La definición de macros "program = flash"v Los destinos especificados como sort.exe y search.exev El archivo de descripción makefile predeterminado

La barra inclinada invertida permite que la definición de macros ocupe dos líneas.

Opciones NMAKEPuede utilizar varias opciones con NMAKE. Tenga en cuenta lo siguiente cuandoutilice opciones:v Los caracteres de opción no distinguen entre mayúsculas y minúsculas; /I e /i

son equivalentes.v Puede utilizar una barra inclinada o un guión antes de los caracteres de opción;

-a y /a son equivalentes.

Producir un archivo de error (/X)Sintaxis:/X stderrfile

Esta opción produce un archivo de error estándar.

Construir todos los destinos (/A)Sintaxis:/A

Ejecutar NMAKE

Capítulo 16. Uso del programa de utilidad de mantenimiento del programa, NMAKE 341

Page 364: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Esta opción construye todos los destinos especificados, incluso si no estándesactualizados respecto a sus archivos dependientes.

Consulte “Archivos de descripción” en la página 344.

Suprimir mensajes (/C)Sintaxis:/C

Esta opción suprime la visualización del banner de inicio de sesión de NMAKE,los mensajes de aviso y los mensajes no graves. Para suprimir el banner de iniciode sesión sin suprimir otros mensajes, utilice la opción /NOLOGO.

Mostrar fechas de modificación (/D)Sintaxis: /D

Esta opción muestra la fecha de modificación de cada archivo cuando secomprueban las fechas de archivos de destino y archivos dependientes.

Consulte “Archivos de descripción” en la página 344.

Sustituir variables de entorno (/E)Sintaxis:/E

Esta opción inhabilita la redefinición de macros.

NMAKE hereda todas las variables de entorno actuales como macros, que puedenredefinirse en una archivo de descripción. La opción /E inhabilita cualquierredefinición; la macro heredada siempre tiene el valor de la variable de entorno.

Especificar archivo de descripción (/F)Syntax:/F filename

Esta opción especifica filename como el nombre del archivo de descripción que seva a utilizar. Si se introduce un guión (-) en lugar de un nombre de archivo,NMAKE lee un archivo de descripción del dispositivo de entrada estándar,normalmente el teclado.

Si no se especifica un nombre de archivo, el valor predeterminado es makefile.

Mostrar ayuda (/HELP or /?)Sintaxis: /HELP or /?

Esta opción muestra un breve resumen de la sintaxis NMAKE.

Ignorar códigos de salida (/I)Sintaxis:/I

Esta opción ignora los códigos de salida (también llamados nivel de error ocódigos de retorno) devueltos por programas tales como compiladores oenlazadores invocados por NMAKE. Si no se especifica esta opción, NMAKEtermina cuando un programa devuelve un código de salida no cero.

Opciones NMAKE

342 PL/I for WindowsGuía de programación

Page 365: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Mostrar mandatos (/N)Sintaxis:/N

Esta opción hace que se muestren los mandatos NMAKE pero no se ejecuten.Utilice la opción /N para:v Compruebe qué destinos están desactualizados con respecto a sus archivos

dependientesv Depurar archivos de descripción

Suprimir el banner de inicio de sesión (/NOLOGO)Sintaxis:/NOLOGO

Esta opción suprime el inicio de sesión de inicio de sesión que se ve al iniciarNMAKE. Si quiere evitar los mensajes de error que no sea graves y los mensajesde aviso, utilice la opción para suprimir mensajes (/C).

Imprimir definiciones de destino y macros (/P)Sintaxis:/P

Esta opción escribe todas las definiciones de macros y de destino. La salida seenvía al dispositivo de salida estándar (normalmente la pantalla).

Código de salida de retorno (/Q)Sintaxis:/Q

Esta opción hace que NMAKE devuelva uno de los elementos siguientes:v Un código de salida de cero si todos los destinos construidos durante una

ejecución de NMAKE están actualizadosv Un código de salida distinto de cero si no están actualizados

Utilice esta opción para especificar NMAKE desde un archivo de proceso por lotes.

Ignorar el archivo TOOLS.INI (/R)Sintaxis:/R

Esta opción ignora:v Todas las reglas de inferencia contenidas en el archivo TOOLS.INIv Todas las reglas de inferencia y macros predefinidas

Suprimir la visualización del mandato (/)Sintaxis:/S

Esta opción suprime la visualización de mandatos mientras se están ejecutando conNMAKE. No suprime la visualización de los mensajes generados por los propiosmandatos.

El mandato /N (Mostrar mandatos) tiene precedencia sobre la opción /S. Si utiliza/N y /S juntas, los mandatos se muestran pero no se ejecutan.

Cambiar fechas de modificación de destino (/T)Sintaxis:/T

Opciones NMAKE

Capítulo 16. Uso del programa de utilidad de mantenimiento del programa, NMAKE 343

Page 366: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Esta opción cambia o "toca" las fechas de modificación de los archivos de destinodesactualizados por la fecha actual. No se ejecutan mandatos, y el archivo dedestino no se modifica.

Archivos de descripciónNMAKE utiliza un archivo de descripción para determinar qué hacer. En su formamás simple, un archivo de descripción le dice a NMAKE qué archivos dependende otros y qué mandatos hay que ejecutar si se modifica un archivo.

Un archivo de descripción tiene un aspecto similar a este:destinos...: dependientes...

mandato :

destinos...: dependientes...mandato

Bloques de descripciónUna relación dependiente entre archivos se define en un bloque de descripción. Unbloque de descripción indica la relación entre varias partes del programa. Incluyemandatos para actualizar todos los componentes. El archivo de descripcióncontiene hasta 1048 bloques de descripción.

Características especialesA continuación se citan las características especiales de los archivos y bloques dedescripción:v Los archivos de descripción pueden incluir definiciones de macros y utilizar

macros en bloques de descripción. Las macros permiten la fácil sustitución deuna cadena de texto por otra.

v Los archivos de descripción pueden incluir reglas de inferencia. Las reglas deinferencia permiten que NMAKE deduzca qué archivos ejecutar basándose enlas extensiones de nombre de archivo utilizadas por los archivos dependientes yde destino.

v Puede especificar directorios para que NMAKE busque archivos dependientesutilizando la siguiente sintaxis:targets : {directory1;directory2...}dependents

NMAKE busca primero en el directorio actual, después en directory1, directory2 yasí sucesivamente.

v Puede incluirse un mandato en la misma línea que los archivos dependientes yde destino utilizando un punto y coma, tal y como se explica a continuación:targets... : dependents... ; command

Description File Description Block┌──────────────┐ ┌──────── 1 ┌────────────────────────────┐│ Description │ │ │ ││ Block 1 │ │ │targets... : dependents... │├──────────────┼─────┘ │ command ││ Descr Blk 2 │ │ command │├──────────────┼─────┐ │ command ││ : │ │ │ : │├──────────────┤ │ │ ││ Descr Blk n │ │ │ ││ │ │ │ │└──────────────┘ └───────── 2 └────────────────────────────┘

Opciones NMAKE

344 PL/I for WindowsGuía de programación

Page 367: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v Un mandato largo puede abarcar varias libras si cada línea termina con unabarra inclinada invertida ( \ ):command \

continuation of command

v La ejecución de un mandato puede ejecutarse si coloca un carácter especialdelante del mandato.

v Si no especifica un mandato en un bloque de descripción, NMAKE busca unaregla de inferencia para crear el destino.

v Los caracteres comodín (* y ?) pueden utilizarse en bloques de descripción. Porejemplo, el siguiente bloque de descripción compila todos los archivos de origencon la extensión .PLI:astro.exe : *.pli

pli $**

v NMAKE amplía la especificación *.pli hasta la lista completa de archivos PL/Ien el directorio actual. $** es una lista completa de archivos dependientesespecificados para el destino actual.

v NMAKE utiliza varios caracteres de puntuación en la sintaxis. Para utilizar unode estos caracteres como carácter literal, coloque un carácter de escape ( ^ )delante de él..Para obetener una lista completa de caracteres de puntuación,consulte “Caracteres de escape” en la página 358.

v Normalmente un archivo de destino solo puede aparecer en un bloque dedescripción. Una sintaxis especial le permite utilizar un destino en variosbloques de descripción.

v Una sintaxis especial le permite determinar el controlador, la vía de acceso, elnombre base y la extensión del primer archivo dependiente de un bloque dedescripción.

Destinos en varios bloques de descripciónEl uso de un archivo como destino en más de un bloque de descripción hace queNMAKE termine. Puede superar esta limitación utilizando dos signos de dospuntos (::) como separador destino/dependiente en lugar de solo uno.

El siguiente bloque de descripción es aceptable:X :: A

commandX :: B

command

El siguiente hace que NMAKE termine:X : A

commandX : B

command

Se puede utilizar un único signo de dos puntos si las líneas dedestino/dependiente están agrupadas en los mismos mandatos. El siguiente códigoes aceptable:X : AX : B

command

Ejemplo de separador de destino/dependiente doble signo de dos puntos (::)target.lib :: a.asm b.asm c.asm

ml a.asm b.asm c.asmilib target a.obj b.obj c.obj

Archivos de descripción

Capítulo 16. Uso del programa de utilidad de mantenimiento del programa, NMAKE 345

Page 368: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

target.lib :: d.pli e.plipli d.plipli e.pliilib target d.obj e.obj

Estos dos bloques de descripción actualizan la biblioteca denominadatarget.lib.Si alguno de los archivos de lenguaje del ensamblador se ha modificado másrecientemente que el archivo de biblioteca, NMAKE ejecuta los mandatos en elprimer bloque para ensamblar los archivos de origen y actualizar la biblioteca. Delmismo modo, si se ha modificado alguno de los archivos de lenguaje PL/I,NMAKE ejecuta el segundo grupo de mandatos para compilar los archivos PL/I yactualizar la biblioteca.

Utilizar macrosLas macros son una forma muy práctica de sustituir una cadena por otra en elarchivo de descripción. El texto se sustituye automáticamente cada vez que seejecuta NMAKE. Esta función facilita modificar texto en el archivo de descripciónsin tener que editar cada línea que utiliza el texto.

Dos usos comunes de las macros son:v Para crear una archivo de descripción estándar para varios proyectos. La macro

representa los nombres de archivo en mandatos. Estos nombres de archivo sedefinen cuando se ejecuta NMAKE. Cuando cambia a otro proyecto diferente, alcambiar la macro se cambian los nombres de archivo que utiliza NMAKE en elarchivo de descripción.

v Para controlar las opciones que pasa NMAKE al compilador, al ensamblador o alenlazador. Cuando se utiliza una macro para especificar las opciones, puedecambiar rápidamente por el archivo de descripción con un simple paso.

Una macro puede definirse:En un archivo de descripciónEn la línea de mandatosEn TOOLS.INIA través de herencias de variables de entorno

Ejemplo de macroprogram = flashc = ilinkoptions =

$(program).exe : $(program).obj$c $(options) $(program).obj;

En el ejemplo anterior se definen tres macros. El bloque de descripción ejecuta lossiguientes mandatos:flash.exe : flash.obj

ilink flash.obj;

Características especialesLas macros tienen las siguientes características especiales:v Cuando utilice una macro, puede sustituir el texto en la propia macro.v Se han predefinido varias macros para fines especiales.

Archivos de descripción

346 PL/I for WindowsGuía de programación

Page 369: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v Si una macro se define más de una vez, las normas de precedencia determinanqué definición se utiliza.

v También puede añadir macros a su archivo TOOLS.INI.

Macros en un archivo de descripciónAntes de utilizar una macro, tiene que definirla, ya sea en la línea de mandatosNMAKE o en su archivo de descripción. Las definiciones de macros de un archivode descripción tienen este aspecto:macroname = macrostring

Los nombres de macro pueden ser cualquier combinación de caracteresalfanuméricos y el carácter de subrayado (_), y distinguen entre mayúsculas yminúsculas. Una cadena de macro puede ser cualquier cadena de caracteres.

El primer carácter del nombre de macro tiene que el primer carácter de la línea.NMAKE ignora los espacios antes y después de un signo igual (=).

La cadena de macro puede ser una serie vacía y contener espacios. No encierre lacadena de macro entre comillas en el archivo de descripción, las comillas solo seutilizan cuando se definen macros en la línea de mandatos.

Macros en la línea de mandatosAntes de utilizar una macro, tiene que definirla, ya sea en la línea de mandatosNMAKE o en su archivo de descripción. Las definiciones de macros de la línea demandatos tienen este aspecto:macroname=macrostring

No puede haber espacios junto al signo igual. Si incluye espacios, NMAKE podríamalinterpretar la macro. Si su cadena de macro contiene espacios, añada comillas,así.

macroname="macro string"

También puede entrecomillar toda la definición de macro, así:"macroname = macro string"

Los nombres de macro pueden ser cualquier combinación de caracteresalfanuméricos y el carácter de subrayado (_), y distinguen entre mayúsculas yminúsculas. Una cadena de macro puede ser cualquier cadena de caracteres o unaserie vacía.

Macros heredadasNMAKE hereda todas las variables de entorno actuales como macros. Por ejemplo,si tiene una variable de entorno PATH definida como PATH = C:\TOOLS\BIN, laserie C:\TOOLS\BIN se sustituye cuando utiliza PATH en el archivo de descripción.

Puede redefinir macros heredadas incluyendo una línea como en el ejemploanterior en un archivo de descripción. Mientras se ejecuta NMAKE, la macro tomala definición redefinida. Sin embargo, cuando NMAKE termina, la variable deentorno retoma su valor original.

La opción Sustituir variables de entorno (/E) inhabilita la redefinición de macroheredada. Si utiliza esta opción, NMAKE ignora cualquier intento de redefinir unamacro heredada.

Utilizar macros

Capítulo 16. Uso del programa de utilidad de mantenimiento del programa, NMAKE 347

Page 370: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

El nombre de macro, para cualquier macro que defina, distingue entre mayúsculasy minúsuclas. Considere esta macro:UPPER=UpperCase

En este ejemplo, $(UPPER) devuelve el valor, pero $(upper) no. Los nombres demacros heredados (es decir, los que se crean automáticamente a partir de variablesde entorno) tiene que estar siempre en MAYÚSCULAS.

Macros definidasDespués de definir una macro, puede utilizarla en cualquier parte del archivo dedescripción con la siguiente sintaxis:$(macroname)

Los paréntesis no son necesarios si el nombre de la macro solo tiene un carácter.Para utilizar el símbolo del dólar ($) sin utilizar una macro, escriba dos símbolosde dólar ($$) o utilice el signo de intercalación (^) antes del símbolo del dólarcomo carácter de escape.

Cuando se ejecuta NMAKE, sustituye todas las apariciones de $(macroname) porla cadena de macros definida. Si la macro no se ha definido, no se sustituye nada.Después de definir una macro, puede cancelarla únicamente con la directiva!UNDEF.

Sustituciones de macrosAl igual que utiliza las macros para sustituir texto en un archivo de descripción,puede utilizar la siguiente sintaxis para sustituir texto en una macro:$(macroname: string1 = string2)

Cada aparición de string1 se sustituye por string2 en macroname. Los espacios quehay entre los dos puntos y string1 se consideran parte de string1. Si string2 es unaserie vacía, todas las apariciones de string1 se eliminan de la macro. Los dospuntos (:) tiene que inmediatamente después de macroname.

La sustitución en la macro de string1 por string2 no es un cambio permanente. Siutiliza la macro de nuevo sin una sustitución, obtiene la macro original sinmodificar.

EjemploSOURCES = one.pli two.pli three.pliprogram.exe : $(SOURCES:.pli=.obj)

ilink $**;

El ejemplo anterior define una macro denominada SOURCES, que contiene losnombres de tres archivos de origen PL/I. Con esta macro, la línea dedestino/dependiente sustituye la extensión .obj por la extensión .pli. Por lo tanto,NMAKE ejecuta el siguiente mandato:

ilink one.obj two.obj three.obj;

$** es una macro especial que convierte todos los archivos dependientes de undestino en concreto.

Utilizar macros

348 PL/I for WindowsGuía de programación

Page 371: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Macros especialesNMAKE predefine varias macros. Las primeras seis macros que se incluyen acontinuación devuelven una o varias especificaciones de archivo para los archivosde la línea de destino/dependiente de un bloque de descripción. Excepto cuandose especifique, la especificación de archivo incluye la vía de acceso del archivo, elnombre de archivo base y la extensión de nombre de archivo.

Macro Valor

$@ La especificación del archivo de destino.

$* El nombre base (sin extensión) del archivo de destino. La información de lavía de acceso también se devuelve si la vía de acceso se especificó comoparte del nombre de archivo de destino. Esta macro no puede utilizarse enuna lista dependiente.

$** Las especificaciones de los archivos dependientes.

$? Las especificaciones para los archivos dependientes desactualizadosrespecto a los destinos.

$< La especificación de un archivo dependiente único que está desactualizadorespecto a los archivos de destino. Esta macro se utiliza únicamente enreglas de inferencia.

$$@ La especificación de archivo del destino que NMAKE está evaluandoactualmente. Es un parámetro de dependencia dinámico, utilizado solo enlistas dependientes.

$(AS) La cadena MASM, que es el mandato para ejecutar el Macro Assembler(MASM). Puede redefinir esta macro para utilizar un mandato distinto.

$(MAKE)El nombre de mandato utilizado para ejecutar NMAKE. Esta macro seutiliza para invocar a NMAKE de forma recursiva. Si redefine esta macro,NMAKE envía un mensaje de aviso.

NMAKE ejecuta la línea de mandatos en la que aparece $(MAKE), inclusosi está activada la opción de mostrar mandatos (/N).

$(MAKEFLAGS)Las opciones de NMAKE actualmente en vigor. No puede redefinir estamacro.

Las macros especiales $** y $$@ son las únicas excepciones a la regla de que losnombres de macro mayores de un carácter tienen que escribirse entre paréntesis.

Puede añadir caracteres a cualquiera de las seis primeras macros de esta lista paramodificar el significado de la macro. Sin embargo, no puede utilizar sustitucionesde macro en estas macros.

Ejemplos de macros especialestrig.lib : sin.obj cos.obj arctan.obj

!ilib trig.lib $?

En este ejemplo, la macro $? representa a todos los archivos dependientesdesactualizados respecto al archivo de destino. El signo de exclamación (!) queprecede al mandato ILIB hace que NMAKE ejecute el mandato ILIB una vez porcada archivo dependiente de la lista. Como resultado de esta descripción, elmandato ILIB hace que NMAKE ejecute el mandato ILIB una vez por cada archivo

Macros especiales

Capítulo 16. Uso del programa de utilidad de mantenimiento del programa, NMAKE 349

Page 372: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

dependiente de la lista. Como resultado de esta descripción, el mandato ILIB seejecuta hasta tres veces, cada una de ellas sustituyendo un módulo por una versiónnueva.DIR=c:\include$(DIR)\globals.inc : globals.inccopy globals.inc $@$(DIR)\types.inc : types.inccopy types.inc $@$(DIR)\macros.inc : macros.inccopy macros.inc $@

Este ejemplo muestra cómo se actualiza un grupo de archivos de inclusión. Cadauno de los archivos, globals.inc, types.inc y macros.inc, del directorioc:\include depende de su equivalente en el mismo directorio. Si uno de losarchivos de inclusión está desactualizado, NMAKE lo sustituye por el archivo conel mismo nombre del directorio actual.

EL siguiente archivo de descripción, que utiliza la macro especial $$@, esequivalente:DIR=c:\include$(DIR)\globals.inc $(DIR)\types.inc $(DIR)\macros.inc : $$(@F)!copy $? $@

La macro especial $$(@F) expresa el nombre de archivo (sin vía de acceso) deldestino actual.

Cuando NMAKE evalúa el bloque de descripción, evalúa los tres destinos, unocada vez, con respecto a sus dependientes. Por tanto, NMAKE comprueba primerosi c:\include\globals.inc está desactualizado en comparación conglobals.inc enel directorio actual. Si es así, ejecuta el mandato para copiar el archivo dependienteglobals.inc en el destino. NMAKE repite el procedimiento para los otros dosdestinos.

Tenga en cuenta que en la línea de mandatos, la macro $? hace referencia alarchivo dependiente de este destino. La macro $@ especifica la especificación dearchivo completa del archivo de destino.

Componentes de la especificación de archivoUna especificación de archivo completa proporciona el nombre base de un archivo,la extensión del nombre de archivo y la vía de acceso. La vía de acceso ofrece elidentificador de unidad de disco y la secuencia de directorios necesarios paraubicar el archivo en el disco.

Por ejemplo, la especificación de archivoc:\source\prog\sort.obj

tiene las siguientes partes:Path Name c:\source\progBase File Name sortFile-Name Extension .obj

Caracteres que modifican macros especialesLas siguientes seis macros resuelven una especificación de archivo (o posiblementevarias especificaciones de archivos para $** y $?):

$* $@ $** $< $? $$@

Macros especiales

350 PL/I for WindowsGuía de programación

Page 373: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Puede añadir caracteres a cualquiera de estas macros para modificar el nombre dearchivo devuelto por la macro. Dependiendo del b que utilice, se devuelve partes otoda la especificación de archivo.

Appended CharacterFile Part Returned D F B R

File Path Yes No No YesBase File Name No Yes Yes YesFile Name Extension No Yes No No

Ejemplo de macros especiales modificadasSi la macro $@ htiene el valorc:\source\prog\sort.obj

se devuelven los siguientes valores para la macro modificada:

Macro Valor

$(@D) c:\source\prog

$(@F) sort.obj

$(@B) sort

$(@R) c:\source\prog\sort

Las macros modificadas siempre son más largas que un carácter único; tienen queir entre paréntesis cuando se utilizan.

Reglas de precedencia de la macroCuando se define la misma macro en más de un lugar, se utiliza la macro demayor prioridad:

PrioridadDefinición

1 (Más alta)Línea de mandatos

2 Archivo descriptivo3 Variables de entorno4 Archivo TOOLS.INI5 (Más baja)

Macros predefinidas (como CC y AS)

Si invoca NMAKE con la opción Sustituir definiciones de macro (/E), las macrosdefinidas por variables de entorno toman precedencia sobre las definidas en unarchivo de descripción.

Reglas de inferenciaLas reglas de inferencia son plantillas a partir de las cuales NMAKE deduce quéhacer con una bloque de descripción cuando no se suministran mandatos.Únicamente las extensiones definidas en una lista .SUFFIXES pueden tener reglasde inferencia. Las extensiones .c, .obj, .asm y .exe se incluyen automáticamente en.SUFFIXES.

Macros especiales

Capítulo 16. Uso del programa de utilidad de mantenimiento del programa, NMAKE 351

Page 374: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Programadores PL/I

Tiene que añadir las extensiones de archivo PL/I manualmente utilizando elpseudodestino .SUFFIXES. Consulte “Pseudodestino .SUFFIXES” en la página 357.

Cuando NMAKE encuentra un bloque de descripción sin mandatos, busca unaregla de inferencia que especifique cómo crear el destino a partir de archivosdependientes, teniendo en cuenta las dos extensiones de archivo. Igualmente, si unarchivo dependiente no existe, NMAKE busca una regla de inferencia queespecifique cómo crear el archivo dependiente a partir de otro archivo con elmismo nombre base.

NMAKE aplica una regla de inferencia únicamente si el nombre base del archivointenta crear coincidencias del nombre base de un archivo que ya existe.

Realmente, las reglas de inferencia solo son útiles cuando hay una correspondenciauno a uno entre los archivos con la extensión "from" y los archivos con la extensión"to". No puede, por ejemplo, definir una regla de inferencia que inserte un númerode módulos en una biblioteca.

El uso de reglas de inferencias elimina la necesidad de colocar los mismosmandatos en varios bloques de descripción. Por ejemplo, puede utilizar reglas deinferencia para especificar un mandato pli único que modifique cualquier archivode origen PL/I (con una extensión.pli) y lo convierta en un archivo de objeto (conuna extensión .obj).

Puede definir una regla de inferencia incluyendo texto de la siguiente manera ensu archivo de descripción o en su archivo TOOLS.INI (véase “Característicasespeciales”..fromext.toext:commands:

Los elementos de la regla de inferencia son:

fromextLa extensión de nombre de archivo de los archivos dependientes para crearun destino

toext La extensión de nombre de archivo para los archivos de destino que se vana crear

mandatosLos mandatos para construir el destino toext a partir del dependientefromext.

Por ejemplo, una regla de inferencia para convertir archivos de origen PL/I (con laextensión .pli) en archivos de objeto PL/I (con la extensión .obj) sería.pli.obj:pli $<

La macro especial $< representa el nombre de un archivo dependientedesactualizado relativo al destino.

Características especialesv Puede especificar una vía de acceso en la que NMAKE tiene que buscar archivos

dependientes y de destino utilizados en la regla de inferencia.

Reglas de inferencia

352 PL/I for WindowsGuía de programación

Page 375: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v Las reglas de inferencia están predefinidas para programas de compilación yenlace en C y para programas de ensamblaje.

v NMAKE busca reglas de inferencia en el archivo TOOLS.INI si no encuentra unaregla en un archivo de descripción.

v Únicamente las extensiones definidas en una lista .SUFFIXES pueden tenerreglas de inferencia. Las extensiones .c, .obj, .asm y .exe se incluyenautomáticamente en .SUFFIXES.

v Tiene que añadir las extensiones de archivo PL/I manualmente utilizando elpseudodestino .SUFFIXES. Consulte “Pseudodestino .SUFFIXES” en la página357.

Ejemplo de reglas de inferencia.obj.exe:

ilink $<;

example1.exe: example1.obj

example2.exe: example2.objilink /co example2,,,libv3.lib

La primera línea define una regla de inferencia que hace que el mandato ILINKcree un un archivo ejecutable siempre que se realiza un cambio en el archivo deobjeto correspondiente. El nombre de archivo de la regla de inferencia se especificacon una macro especial $< para que la regla se aplique a cualquier archivo .obj conun archivo ejecutable desactualizado.

Cuando NMAKE no encuentra mandatos en el primer bloque de descripción,busca una regla que pueda aplicarse y encuentra la regla definida en las dosprimeras líneas del archivo de descripción. NMAKE aplica la regla, sustituyendo$< por example1.obj cuando ejecuta el mandato, para que el mandato ILINK seconvierta enilink example1.obj;

NMAKE no busca una regla de inferencia cuando examina el segundo bloque dedescripción, porque se ha proporcionado un mandato de forma explícita.

Especificaciones de vía de acceso de regla de inferenciaCuando se define una regla de inferencia, puede indicarle a NMAKE dónde tieneque buscar archivos dependientes y de destino. Utilice la siguiente sintaxis:{frompath}.fromext{topath}.toextcommands:

NMAKE busca en el directorio especificado por frompath para archivos con laextensión fromext. Ejecuta los mandatos para crear archivos con la extensión toexten el directorio especificado por topath.

Reglas de inferencia predefinidasNMAKE predefine varias reglas de inferencia:

Tabla 24. Reglas de inferencia predefinidas por NMAKE

Reglas de inferencia Acción de mandato Predeterminado

.c.obj $(CC) $(CFLAGS) /c $*.c icc /c $*.c

.c.exe $(CC) $(CFLAGS) $*.c icc $*.c

Reglas de inferencia

Capítulo 16. Uso del programa de utilidad de mantenimiento del programa, NMAKE 353

Page 376: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 24. Reglas de inferencia predefinidas por NMAKE (continuación)

Reglas de inferencia Acción de mandato Predeterminado

.asm.obj $(AS) $(AFLAGS) $*; masm $*;

v Las dos primeras reglas compilas y enlazan automáticamente programas en C.v La última regla ensambla programas automáticamente.v Las reglas anteriores son las reglas de inferencia predefinidas más utilizadas.

Para ver una lista completa de reglas de inferencia predefinidas, ejecute unarchivo make y especifique la opción /p. Se mostrarán todas las reglas deinferencia.

DirectivasUtilizando directivas, puede construir archivos de descripción similares a losarchivos de proceso por lotes. NMAKE proporciona directivas que:v Ejecutan mandatos con condicionesv Muestran mensajes de errorv Incluyen el contenido de otros archivosv Activan o desactivan opciones NMAKE

Cada directiva comienza con un signo de exclamación de cierre ( ! ) en la primeracolumna del archivo de descripción. Entre puntos de exclamación y la palabraclave de la directiva puede colocar espacios.

La lista siguiente describe las directivas:

!IF expressionEjecuta las sentencias entre la palabra clave !IF y la siguiente directiva!ELSE o !ENDIF si expression evalúa un valor no cero.

La expression utilizada con la directiva !IF puede constar de constantesenteras, constantes de tipo serie o códigos de salida devueltos medianteprogramas. Las constantes enteras pueden utilizar los operadores unarios Cpara la negación numérica ( - ), complemento a uno ( ~ ) y negaciónlógica ( ! ). También puede utilizar cualquiera de los operadores binarios Cque se citan a continuación:

OperadorDescripción

+ Adición

- Resta

* Multiplicación

/ División

% Módulos

& AND a nivel de bit

| OR a nivel de bit

^^ XOR a nivel de bit

&& AND lógico

|| OR lógico

Reglas de inferencia

354 PL/I for WindowsGuía de programación

Page 377: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

<< Desplazamiento a la izquierda

>> Desplazamiento a la derecha

== Igualdad

!= No es igual a

< Menor que

> Mayor que

<= Menor que o igual a

>= Mayor o igual quev Puede utilizar paréntesis para agrupar expresiones.v Se asume que los valores son valores decimales a no ser que se

especifique con un 0 interlineado (octal) o 0x interlineado (hexadecimal).v Las series se encierran entre comillas ( " ). Puede utilizar los operadores

de igualdad ( == ) y desigualdad ( != ) para comparar dos cadenas.v Puede invocar un programa en una expresión encerrando el nombre del

programa entre corchetes ( [ ] ). El código de salida devuelto por elprograma se utiliza en la expresión.

!ELSE Ejecuta las sentencias entre las directivas !ELSE y !ENDIF si las sentenciasque preceden a la directiva !ELSE no se han ejecutado.

!ENDIFMarca el final del bloque de sentencias !IF, !IFDEF o !IFNDEF.

!IFDEF macronameEjecuta sentencias entre la palabra clave !IFDEF y la siguiente directiva!ELSE o !ENDIF si macroname se define en el archivo de descripción. Si seha definido una macro como nula, se considera que se ha definido.

!IFNDEF macronameEjecuta las sentencias entre la palabra clave !IFNDEF y la siguientedirectiva !ELSE o !ENDIF si macroname no se define en el archivo dedescripción.

!UNDEF macronameAnula la definición de una macro ya definida.

!ERROR textImprime texto y define la ejecución.

!INCLUDE filenameLee y evalúa el archivo filename antes de continuar con el archivo dedescripción actual. Sifilename se encierra entre paréntesis (<>), NMAKEbusca el archivo en los directorios especificados por la macro INCLUDE;de lo contrario, busca en el directorio actual. La macro INCLUDE se defineinicialmente en el valor de la variable de entorno INCLUDE.

!CMDSWITCHES {+|-}optActiva y desactiva una de las cuatro opciones de NMAKE: /D, /I, /N y/S. Si no se especifica ninguna opción, las opciones se restablecen a losvalores que tenían cuando se inició NMAKE. Para activar una opción,coloque delante un signo (+); para desactivarla, coloque delante un signomenos (-). Esta directiva actualiza la macro MAKEFLAGS.

Consulte “Macros especiales” en la página 349.

Directivas

Capítulo 16. Uso del programa de utilidad de mantenimiento del programa, NMAKE 355

Page 378: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Ejemplo de directivas!INCLUDE <infrules.txt>!CMDSWITCHES +Dwinner.exe:winner.obj!IFDEF DEBUG! IF "$(DEBUG)"=="y"

ilink /de winner.obj;! ELSE

ilink winner.obj;! ENDIF!ELSE! ERROR Macro named DEBUG is not defined.!ENDIF

Las directivas de este ejemplo hacen lo siguiente:v La directiva !INCLUDE hace que el archivo infrules.txt se lea y se evalúe

como si formara parte del archivo de descripción.v La directiva !CMDSWITCHES activa la opción /D, que muestra las fechas de los

archivos cuando se comprueban.v Si winner.exe está desactualizado con respecto a winner.obj, la directiva !IFDEF

realiza una comprobación para ver si se ha definido la macro DEBUG. Si se hadefinido, la directiva !IF realiza una comprobación para ver si se ha definido eny. Si es así se invoca el enlazador utilizando la opción /DE; si no, se invoca sin/DE. Si la macro DEBUG no se ha definido, la directiva !ERROR imprime elmensaje y NMAKE deja de ejecutarse.

PseudodestinosUn pseudodestino es un destino de un bloque de descripción que no es un archivo.En lugar de eso, es un nombre que actúa como "descriptor de contexto" para crearun grupo de archivos o ejecutar un grupo de mandatos. En el siguiente ejemplo,UPDATE es un pseudodestino:UPDATE: *.*

!copy $** a:\product

Cuando NMAKE evalúa un pseudodestino, siempre considera que los archivosdependientes están desactualizados. En la descripción anterior, NMAKE copia cadaarchivo dependiente en la unidad y directorio especificados.

NMAKE predefine varios pseudodestinos para fines especiales.

Consulte “Pseudodestinos predefinidos”.

Pseudodestinos predefinidosNMAKE predefine varios pseudodestinos que proporcionan reglas especiales en unarchivo de descripción:

Pseudodestino .SILENTSintaxis: .SILENT : dependents...

Este pseudodestino suprime la visualización de mandatos ejecutados para unbloque de descripción único. La opción /S hace lo mismo para todos los bloquesde descripción.

Consulte “Suprimir la visualización del mandato (/)” en la página 343.

Directivas

356 PL/I for WindowsGuía de programación

Page 379: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Pseudodestino .IGNORESintaxis: .IGNORE : dependents...

Este pseudodestino ignora los códigos de salida devueltos por programas para unbloque de descripción único. La opción /I hace lo mismo para todos los bloques dedescripción.

Consulte “Ignorar códigos de salida (/I)” en la página 342.

Pseudodestino .SUFFIXESSintaxis: .SUFFIXES : extensions...

Este pseudodestino define extensiones se archivos para probarlas cuando NMAKEnecesita crear un archivo de destino para el que no se han especificado archivosdependientes. NMAKE busca un archivo con el mismo nombre que el archivo dedestino en el directorio actual y una extensión en <extensiones...>. Si NMAKEencuentra el archivo, y si se aplica una regla de inferencia al archivo, NMAKE trataal archivo como un dependiente del destino.

El pseudodestino .SUFFIXES está predefinido como.SUFFIXES : .obj .exe .c .asm

Para añadir extensiones a la lista, especifique .SUFFIXES : seguido de lasextensiones nuevas. Por ejemplo, el siguiente código le permitiría escribir reglas deinferencia para archivos de origen PL/I..SUFFIXES: .pli

Para borrar la lista, especifique.SUFFIXES:

únicamente las extensiones especificadas en .SUFFIXES pueden tener reglas deinferencia. NMAKE ignora las reglas de inferencia a no ser que se hayanespecificado las extensiones en un listado .SUFFIXES.

Pseudodestino .PRECIOUSSintaxis: .PRECIOUS : targets...

Este pseudodestino le dice a NMAKE que no elimine un destino ni siquiera si losmandatos que lo forman han terminado o se han interrumpido. Este pseudodestinoanula el valor predeterminado de NMAKE. De forma predeterminada, NMAKEelimina el destino si no está seguro de que se haya creado correctamente.

Por ejemplo,.PRECIOUS : tools.libtools.lib : a2z.obj z2a.objcommand:

Si los mandatos para construir tools.lib se interrumpen, dejando un archivoincompleto, NMAKE no elimina la creación parcial de tools.lib.

El pseudodestino .PRECIOUS solo es útil en determinadas circunstancias. Lamayoría de herramientas de desarrollo personal tienen su propios manejadores deinterrupciones y hacen "limpieza" cuando se producen errores.

Directivas

Capítulo 16. Uso del programa de utilidad de mantenimiento del programa, NMAKE 357

Page 380: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Archivos en líneaEs posible que necesite emitir un mandato en el archivo de descripción con unalista de argumentos que supera el límite de línea de mandatos del sistemaoperativo. Al igual que NMAKE admite el uso de archivos de mandato, puedegenerar archivos en línea que otros programas leen como archivos de respuesta.

Para generar un archivo en línea, utilice la siguiente sintaxis para su bloque dedescripción:target : dependents

command @<<[filename]inline file text<< [KEEP | NOKEEP]

Todo el texto entre los dos conjuntos de signos menor que dobles (<<) se coloca enun archivo en línea y recibe el nombre filename. Puede hacer referencia al archivoen línea más adelante utilizando filename. Si no se proporciona filename, NMAKEda al archivo un nombre único en el directorio especificado por la variable deentorno TMP si se ha definido. De lo contrario, NMAKE crea un nombre dearchivo único en el directorio actual.

El archivo en línea puede ser temporal o permanente. Si no especifica lo contrario,o si especifica la palabra clave NOKEEP, el archivo en línea será temporal.Especifique KEEP para conservar el archivo.

La arroba (@) no forma parte de la sintaxis de NMAKE pero es un carácter típicoutilizado por los programas de utilidad para designar un archivo como archivo derespuesta.

Ejemplo de archivos en líneamath.lib : add.obj sub.obj mul.obj div.obj

ilib @<<math.libadd.obj sub.obj mul.obj div.obj/L:listing<<

El ejemplo anterior crea un archivo en línea y lo utiliza para invocar al gestor debiblioteca (ILIB). El archivo en línea es utilizado por (ILIB) como archivo derespuesta. Especifica qué biblioteca se va a utilizar, qué mandatos se utilizan y quéarchivo de listado se va a producir. El archivo en línea contiene lo siguiente:

math.libadd.obj sub.obj mul.obj div.obj/L:listing

Como no se enumera ningún archivo después del mandato ILIB, el archivo enlínea recibe un nombre exclusivo y se coloca en el directorio actual (o en eldirectorio definido mediante la variable de entorno TMP.

Caracteres de escapeNMAKE utiliza los siguientes caracteres de puntuación en su sintaxis:

( ) # $ ^ \

{ } ! @ -

Archivos en línea

358 PL/I for WindowsGuía de programación

Page 381: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Para utilizar uno de estos caracteres en un mandato y que NMAKE no lointerprete, utilice un signo de intercalación ( ^ ) delante del carácter ..

Por ejemplo,BIG^#.PLI

se trata comoBIG#.PLI

Con el signo de intercalación, puede incluir un carácter de nueva línea literal en unarchivo de descripción. Esta prestación es útil para las definiciones de macros,como en el siguiente ejemplo:XYZ=abc^<ENTER>def

El efecto es equivalente al efecto de asignar la serie de estilo C abc\ndef a la macroXYZ. Tenga en cuento que este efecto difiere del efecto de utilizar la barrainclinada invertida ( \ ) para continuar una línea. Un carácter de nueva línea quesigue a una barra inclinada invertida se sustituye con un espacio.

NMAKE ignora un signo de intercalación que no va seguido de ninguno de loscaracteres que se utilizan en su sintaxis. Un signo de intercalación que aparece concomillas no se trata como un carácter de escape.

El carácter de escape no puede utilizarse en la porción del mandato de un bloquede dependencia.

Caracteres que modifican mandatosCualquiera de estos caracteres puede colocarse delante de un mandato paramodificar el modo en que se ejecuta:

— (guión)Desconecta la comprobación de errores en el mandato

@ (arroba)Suprime la visualización del mandato

! (signo final de exclamación)Ejecuta el mandato para cada archivo dependiente

Los espacios pueden separar el carácter de modificación del mandato. Cualquiermandato en una línea independiente, modificado o no, tiene que tener una sangríade uno o varios espacios o tabulaciones.

Puede utilizar más de un carácter para modificar un mandato único.

Desconectar la comprobación de errores (-)Sintaxis: -[n] command

La opción /I desconecta la comprobación de errores a nivel global. El modificadorde mandatos guión (-) anula el valor global para desactivar la comprobación demandatos individualmente. Este modificador se utiliza de dos maneras:v Un guión sin número desconecta la comprobación de errores.

Archivos en línea

Capítulo 16. Uso del programa de utilidad de mantenimiento del programa, NMAKE 359

Page 382: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v Un guión seguido de un número hace que NMAKE termine de forma anómalaúnicamente si el código de retorno devuelto por el mandato es mayor que elnúmero.

Consulte “Ignorar códigos de salida (/I)” en la página 342.

Ejemplos del modificador de mandatos Guiónlight.lst : light.txt

- flash light.txt

En el ejemplo anterior, NMAKE no termina nunca, independientemente del códigode salida devuelto por flash.light.lst : light.txt

-1 flash light.txt

En el ejemplo anterior, NMAKE termina su el código de salida devuelto por flashes mayor que 1.

Suprimir la visualización del mandato (@)Sintaxis: @ command

La opción /S suprime de forma global la visualización de mandatos mientras seejecuta NMAKE. El modificador arroba (@) suprime la visualización de mandatosindividuales.

Independientemente de la opción /S o del modificador @, la salida generada por elmandato siempre aparece.

Consulte “Suprimir la visualización del mandato (/)” en la página 343.

Ejemplo del modificador de mandatos símbolo arroba (@)Suprimir visualización del mandato (@)sort.exe:sort.obj

@ echo sorting

La línea de mandatos que llama al mandato echo no se muestra. Sin embargo, sí semuestra la salida del mandato echo.

Ejecutar un mandato para dependientes (!)Sintaxis: ! command

El modificador de mandatos signo de exclamación hace que el mandato se ejecutepara cada archivo dependiente si el mandato utiliza solo una de las macrosespeciales $? o $**. La macro $? hace referencia a todos los archivos dependientesdesactualizados respecto al destino. La macro $** hace referencia a todos losarchivos dependientes del bloque de descripción.

Consulte “Macros especiales” en la página 349.

Signo de exclamación (!) ejemplos de modificador de mandatoleap.txt : hop.asm skip.c jump.pli

! print $** lpt1:

Caracteres que modifican mandatos

360 PL/I for WindowsGuía de programación

Page 383: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

El ejemplo anterior ejecuta los tres siguientes mandatos, independientemente de lasfechas de modificación de los archivos dependientes:

print hop.asm lpt1:print skip.c lpt1:print jump.pli lpt1:

leap.txt : hop.asm skip.c jump.pli! print $? lpt1:

El ejemplo anterior ejecuta el mandato de impresión únicamente para los archivosdependientes con fechas de modificación posteriores a las del archivo leap.txt. Sihop.asm y jump.pli tienen fechas de modificación posteriores a leap.txt, seejecutan los siguientes dos mandatos:print hop.asm lpt1:print jump.pli lpt1:

Sintaxis EXTMAKELos archivos de descripción pueden utilizar una sintaxis especial para determinarel controlador, la vía de acceso, el nombre base y la extensión del primer archivodependiente de un bloque de descripción. Esta sintaxis se denomina sintaxisextmake.

Los caracteres %s representan la especificación de archivo completa del primerarchivo dependiente. Varias partes de la especificación de archivo se representanmediante la siguiente sintaxis:%<parts>

<componentes>Una combinación de las letras siguientes:d Controladorp Vía de accesof Nombre basee Extensión

Por ejemplo, para especifica el nombre de vía de acceso y el controlador delprimer archivo dependiente de un bloque de descripción, utilice:

%<dp>

El símbolo de porcentaje (%) es una sustitución en líneas de mandatos DOS yWindows. Para utilizar el símbolo de porcentaje en argumentos de línea demandatos, utilice un porcentaje doble (%%).

Reglas de inferencia y macros en TOOLS.INIPuede colocar macros o reglas de inferencia en su archivo TOOLS.INI. NMAKEbusca primero el archivo TOOLS.INI en el directorio actual y, a continuación, en eldirectorio indicado por la variable de entorno INIT.

Si NMAKE encuentra un archivo TOOLS.INI, busca la siguiente etiqueta:[nmake]

Puede colocar macros y reglas de inferencia por debajo de esta etiqueta con elmismo formato que utilizaría en un archivo de descripción.

Si una macro o regla de inferencia de define en el archivo TOOLS.INI y en elarchivo de descripción, la definición del archivo de descripción tiene precedencia.Además, si utiliza la opción /R, se ignora el archivo TOOLS.INI.

Caracteres que modifican mandatos

Capítulo 16. Uso del programa de utilidad de mantenimiento del programa, NMAKE 361

Page 384: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Ejemplo de TOOLS.INI[nmake].SUFFIXES: .pliCOMPILE_OPTS = gonumber source.pli.obj:

PLI $*.pli ($(COMPILE_OPTS)

Estas líneas del archivo TOOLS.INI sirven para:v Añadir la extensión de archivo .pli a la lista de extensiones que pueden tener

reglas de inferencia.v Definir la macro COMPILE_OPTS como gonumber source.v Definir une regla de inferencia para crear archivos .obj a partir de archivos de

origen .pli.

Reglas de inferencia y macros en TOOLS.INI

362 PL/I for WindowsGuía de programación

Page 385: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 17. Mejora del rendimiento

Muchas consideraciones para mejorar la velocidad de su programa sonindependientes del compilador que utilice y la plataforma en la que se ejecute. Estecapítulo, sin embargo, identifica esas consideraciones que son exclusivas de laestación de trabajo PL/I del compilador y del código que genera.

Seleccionar opciones de tiempo de compilación para conseguir unrendimiento óptimo

Las opciones de tiempo de compilación que escoja pueden mejorarsignificativamente el rendimiento del código generado por el compilador. Sinembargo, al igual que la mayoría de consideraciones de rendimiento, estasopciones tienen efectos positivos y negativos. Afortunadamente, puede sopesar lospros y contras de las opciones de tiempo de compilación sin editar el código fuenteporque estas opciones pueden especificarse en la línea de mandatos o en el archivode configuración variable de entorno IBM.OPTIONS.

Si quiere evitar detalles, la forma más sencilla de mejorar el rendimiento delcódigo generado es especificar las siguientes opciones de tiempo de compilación(no predeterminadas):

PREFIX(NOFOFL)IMPRECISEOPT(2)DFT(REORDER)

Las dos primeras opciones pueden afectar a la semántica de su programa, peronormalmente solo lo hace en situaciones poco frecuentes. Si especifica las dosprimeras opciones, su código se mejora incluso cuando se compila con laoptimización desconectada. Si utiliza estas opciones es menos probable que elcompilador cometa errores.

Las secciones siguientes describen, más detalladamente, las mejoras de rendimientoy los pros y contras asociados a las opciones de tiempo de compilación específicas.

OPTIMIZEPuede especificar la opción OPTIMIZE para mejorar la velocidad del programa, sino, el compilador realiza únicamente los esfuerzos de optimización básicos.

Si elige OPTIMIZE(2) el compilador genera código para ofrecer un mejorrendimiento. Normalmente, el código que resulta es más breve que cuando secompila el programa con NOOPTIMIZE. Sin embargo, a veces, se ejecuta másrápido una secuencia larga de instrucciones que una breve. Esto puede ocurrir, porejemplo, cuando se crea una tabla de secciones para una sentencia SELECT en laque los valores de las cláusulas WHEN contienen espacios. El número aumentadode instrucciones generado en esta cláusula suele desplazarse por la ejecución demenos instrucciones en otros lugares.

IMPRECISECuando selecciona esta opción, el compilador genera secuencias de instruccionesmás cortas y más rápidas para operaciones de coma flotante. Esto puede tener un

© Copyright IBM Corp. 1998, 2013 363

Page 386: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

efecto significativo en el rendimiento de programas que contienen expresiones decoma flotante, ya sean de forma independiente o en bucles.

Sin embargo, cuando los programas se compilan con la opción IMPRECISE, lasexcepciones de coma flotante podrían no señalarse en el lugar exacto en el que seproducen. (Esto es especialmente cierto cuando está en vigor la opción OPTIMIZE).Además, las operaciones de coma flotante pueden producir resultados que nocumplen con IEEE.

GONUMBEREl uso de esta opción resulta en una tabla de número de sentencia utilizada para ladepuración. Esta información añadida puede ser muy útil para la depuración, peroincluir una tabla de número de sentencia aumenta el tamaño de su archivoejecutable. Los archivos ejecutables pueden tardar más en cargarse.

Al utilizar una de las opciones del enlazador, puede incluir las tablas de númerode sentencia en su ejecutable durante el desarrollo para que le ayude con ladepuración. La opción /DEBUG (/DE) ordena al enlazador que incluya estastablas en el archivo ejecutable, así que al no especificar /DE con el mandatoILINK, podrá controlar mejor el tamaño de sus archivos ejecutables. Si el tamañode su archivo ejecutable es algo a tener en cuenta, puede dejar las tablas fuera enla modalidad de producción.

SNAPCuando utiliza la opción SNAP, el compilador genera instrucciones adicionales enprólogo y el epílogo del código de cada bloque. Estas instrucciones garantizan quelos mensajes de rastreo inverso de tiempo de ejecución (producidos por PLIDUMPy la opción SNAP en una sentencia ON) incluyen todos los procedimientos queestaban activos cuando se solicitó el rastreo inverso.

Uno de los inconvenientes de utilizar la opción SNAP y crear estas instruccionesadicionales es que puede tener un impacto negativo en el rendimiento de laaplicación. Esto ocurre sobre todo en los procedimientos que se llaman a menudo.

RULESCuando utiliza la opción RULES(IBM), el compilador soporta FIXED BINARYescalado y, lo que es más importante para el rendimiento, genera resultados FIXEDBINARY escalados en algunas operaciones. Con RULES(ANS), no se soportaFIXED BINARY escalado y los resultados FIXED BINARY escalados nunca segeneran. Esto significa que el código generado con RULES(ANS) siempre se ejecutapor lo menos igual de rápido que el código generado con RULES(IBM), y a vecesmás rápido.

Considere, por ejemplo, el siguiente fragmento de código:dcl (i,j,k) fixed bin(15);

.

.

.i = j / k;

Con RULES(IBM), el resultado de la división tiene los atributos FIXED BIN(31,16).Esto significa que hace falta una instrucción de desplazamiento antes de la divisióny varias instrucciones más para realizar la asignación.

Mejora del rendimiento

364 PL/I for WindowsGuía de programación

Page 387: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Con RULES(ANS), el resultado de la división tiene los atributos FIXED BIN(15,0).Esto significa que no hace falta realizar un desplazamiento antes de la división yque no se necesitan más instrucciones para realizar la asignación.

Cuando utiliza la opción RULES(LAXCTL), el compilador le permite declarar unavariable CONTROLLED con una extensión de constante y asignarla (ALLOCATE)después a una extensión diferente, como en

DECLARE X BIT(1) CTL;

ALLOCATE X BIT(63);

Sin embargo, esta práctica de programación obliga al compilador a asumir queninguna variable CONTROLLED tiene extensiones de constante y, por lo tanto,generará código mucho menos eficiente cuando se haga referencia a esas variables.

Pero, si especifica una extensión de constante para la variable CONTROLLED solocuando tenga siempre esa longitud (o límite), conseguirá un rendimiento mejor siespecifica la opción RULES(NOLAXCTL).

PREFIXesta opción determina si las condiciones PL/I seleccionadas están habilitadas deforma predeterminada. Las subopciones predeterminadas para PREFIX estándefinidas para cumplir con la definición de lenguaje de PL/I. Sin embargo, alterarlos valores predeterminados puede tener un efecto significativo sobre elrendimiento de su programa. Las subopciones predeterminadas son:

CONVERSIONINVALIDOPFIXEDOVERFLOWOVERFLOWINVALIDOPNOSIZENOSTRINGRANGENOSTRINGSIZENOSUBSCRIPTRANGEUNDERFLOWZERODIVIDE

Al especificar las subopciones SIZE, STRINGRANGE, STRINGSIZE oSUBSCRIPTRANGE, el compilador genera código adicional que le ayuda a ubicarvarias áreas problemáticas en el origen que serían difíciles de localizar de otromodo. Este código adicional, sin embargo, también puede ralentizar el rendimientodel programa de forma significativa.

CONVERSIONCuando inhabilita la condición CONVERSION, algunas conversiones de caracteresa números se realizan en línea y sin comprobar la validez del origen. Por tanto,especificar NOCONVERSION también afecta al rendimiento del programa.

FIXEDOVERFLOWEn algunas plataformas, el hardware lanza la condición FIXEDOVERFLOW y elcompilador no necesita generar código adicional para detectarla. En losordenadores personales, sin embargo, el hardware no lanza esta condición, por loque el compilador tiene que generar código adicional. Este código adicional puedetener un impacto negativo en el rendimiento de su programa y a no ser que elprograma necesite (o espere) esta condición, especifiquePREFIX(NOFIXEDOVERFLOW) para mejorar el rendimiento.

Mejora del rendimiento

Capítulo 17. Mejora del rendimiento 365

Page 388: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

DEFAULTAl utilizar la opción DEFAULT, puede seleccionar los valores predeterminados delatributo. Al igual que ocurre con la opción PREFIX, las subopciones de DEFAULTse definen para cumplir con la definición de lenguaje PL/I. En algunos casos,modificar los valores predeterminados puede afectar al rendimiento. Lassubopciones predeterminadas son:

IBMBYADDRRETURNS(BYVALUE)NONCONNECTEDDESCRIPTOR

ORDERASSIGNABLE LINKAGE(OPTLINK)ASCIIIEEENATIVENODIRECTEDNOINLINE

Las subopciones IBM/ANS, ASSIGNABLE/NONASSIGNABLE yDIRECTED/NODIRECTED no tienen efecto sobre el rendimiento del programa. Elresto de subopciones pueden afectar al rendimiento en diferentes medidas y, si seaplican erróneamente, puede hacer que el programa no sea válido.

BYADDR o BYVALUECuando la opción DEFAULT(BYADDR) está en vigor, los argumentos se pasanmediante referencias (tal y como requiere PL/I) a no ser que un atributo de unadeclaración de entrada indique otra cosa. Como los argumentos se pasan mediantereferencias, la dirección del argumento se pasa de una rutina (rutina de llamada) aotra (rutina llamada) cuando se pasa la propia variable. Cualquier cambiorealizado al argumento mientras se encuentra en la rutina llamada se refleja en larutina de llamada cuando reanuda la ejecución.

La lógica del programa depende de la transferencia de variables mediantereferencias. Sin embargo, pasar una variable mediante referencias puede dificultarel rendimiento de dos maneras:1. Cada referencia a ese parámetro requiere una instrucción adicional.2. Como la dirección de la variable se pasa a otra rutina, se fuerza al compilador

a asumir supuestos sobre cuándo podría cambiar la rutina y generar códigomuy conservador para cualquier referencia de esa variable.

Por lo tanto, tiene que pasar parámetros mediante valores utilizando la subopciónBYVALUE siempre que la lógica del programa se lo permita. Incluso si utiliza elatributo BYADDR para indicar que debería pasarse un parámetro por referencia,puede utilizar la opción DEFAULT(BYVALUE) para garantizar que el resto deparámetros se pasan por valor.

Si un procedimiento recibe y modifica solo un parámetro que se pasa medianteBYADDR, considere convertir el procedimiento en una función que recibe eseparámetro por valor. La función terminará con una sentencia RETURN quecontiene el valor actualizado del parámetro.

Mejora del rendimiento

366 PL/I for WindowsGuía de programación

Page 389: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Procedimiento con el parámetro BYADDRa: proc( parm1, parm2, ..., parmN );

dcl parm1 byaddr ...;dcl parm2 byvalue ...;

.

.

.dcl parmN byvalue ...;

/* program logic */

end;

Más rápido, función equivalente con un parámetro BYVALUEa: proc( parm1, parm2, ..., parmN )

returns( ... /* attributes of parm1 */ );

dcl parm1 byvalue ...;dcl parm2 byvalue ...;

.

.

.dcl parmN byvalue ...;

/* program logic */

return( parm1 );

end;

(NON)CONNECTEDLa opción DEFAULT(NONCONNECTED) indica que el compilador asume quecualquier parámetro agregado es NONCONNECTED. Las referencias a loselementos de parámetros agregados NONCONNECTED requieren que elcompilador genere código para acceder al descriptor del parámetro, incluso si elagregado se declara con extensiones constantes.

El compilador no genera estas instrucciones si el parámetro agregado tieneextensiones de contante y está CONNECTED. Por lo tanto, si su aplicación nuncapasa parámetros NONCONNECTED, su código será menor si utiliza la opciónDEFAULT(CONNECTED).

RETURNS(BYVALUE) o RETURNS(BYADDR)Cuando la opción DEFAULT(RETURNS(BYVALUE)) está en vigor, el atributoBYVALUE se aplica a todas las listas de descripción RETURNS que no especificanBYADDR. Esto significa que estas funciones devuelven valores en registros, cuandoes posible, para producir el mejor código posible.

(NO)DESCRIPTORLa opción DEFAULT(DESCRIPTOR) indica que, de forma predeterminada, se pasaun descriptor para cualquier serie, área o parámetro agregado. Sin embargo, eldescriptor se utiliza únicamente si el parámetro tiene extensiones no constantes o siel parámetro es una matriz con el atributo NONCONNECTED.

En esta caso, las instrucciones y el espacio requeridos para pasar al descriptor noproporcionan ningún beneficio e incurren en un gasto sustancial (el tamaño de undescriptor de estructura es mayor que el tamaño de la propia estructura). Por lotanto, al especificar DEFAULT(NODESCRIPTOR) y utilizar

Mejora del rendimiento

Capítulo 17. Mejora del rendimiento 367

Page 390: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

OPTIONS(DESCRIPTOR) solamente cuando es necesario en sentenciasPROCEDURE y declaraciones ENTRY, el código se ejecuta mejor.

(RE)ORDERLa opción DEFAULT(ORDER) indica que la opción ORDER se aplica a todos losbloques, lo que significa que las variables del bloque referenciado en unidades ON(o bloques que descienden dinámicamente de unidades ON) tienen los últimosvalores. Esto prohíbe de forma efectiva casi todas las optimizaciones en dichasvariables. Por lo tanto, si la lógica de su programa se lo permite, utiliceDEFAULT(REORDER) para generar código superior.

LINKAGEEsta subopción le dice al compilador qué enlace predeterminado debe utilizarcuando no se ha especificado la subopción LINKAGE del atributo uopciónOPTIONS para una entrada.

El compilador admite varios enlaces, cada uno con características de rendimientoúnicas. Cuando invoca una ENTRY proporcionada por una entidad externa (comoun sistema operativo), tiene que utilizar el enlace definido anteriormente para esaENTRY.

Sin embargo, cuando crea sus propias aplicaciones puede elegir la convención deenlace. Se recomienda utilizar el enlace OPTLINK porque ofrece un mejorrendimiento que otras convenciones de enlace.

ASCII o EBCDICLa opción DEFAULT(ASCII) indica que, de forma predeterminada, los datos decaracteres se mantienen en el estilo Intel nativo. Cuando especifica la subopciónEBCDIC, el compilador tiene que generar instrucciones adicionales para la mayoríade operaciones que implican a las variables de caracteres de entrada y salida.

IEEE o HEXADECLa opción DEFAULT(IEEE) indica que, de forma predeterminada, los datosflotantes se mantienen en el estilo Intel nativo. Cuando especifica la subopciónHEXADEC, el compilador tiene que ejecutar significativamente más instruccionespara la mayoría de operaciones que implican a variables de coma flotante.

(NON)NATIVELa opción DEFAULT(NATIVE) indica que, de forma predeterminada, los datosbinarios fijos, los datos ordinales y el prefijo de longitud de series variables semantienen en estilo Intel nativo. Cuando especifica NONNATIVE, se generaninstrucciones adicionales para las operaciones que implican a esos tipos de datoscitados anteriormente.

(NO)INLINELa subopción NOINLINE indica que los bloques de inicio y de procedimiento nodeberían incorporarse.

La incorporación se produce cuando especifica optimización.

El código de usuario de incorporación elimina la sobrecarga de la llamada afunción y enlace, y expone el código de la función al optimizador, consiguiendo unrendimiento de código más rápido. La incorporación produce los mejoresresultados cuando la sobrecarga de la función es nontrivial, por ejemplo, cuandolas funciones se llaman dentro de bucles anidados. La incorporación también es

Mejora del rendimiento

368 PL/I for WindowsGuía de programación

Page 391: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

beneficiosa cuando las funciones incorporadas proporcionan oportunidadesadicionales de optimización, como cuando se utilizan argumentos de constante.

En el caso de programas que contienen varios procedimientos no anidados:v Si los procedimientos son breves y solo se llaman desde algunos sitios, puede

aumentar el rendimiento especificando INLINE.v Si los procedimientos son largos y se llaman desde muchos sitios, la

incorporación duplica el código del programa. Este aumento en el tamaño delprograma puede desplazar cualquier aumento de velocidad. En este caso, quizásprefiera dejar NOINLINE como opción predeterminada y especificarOPTIONS(INLINE) únicamente en procedimientos seleccionadosindividualmente.

Cuando utiliza la incorporación, necesita más espacio de pila. Cuando se llama unafunción, el almacenamiento local se asigna en el momento de la llamada y se liberacuando vuelve a la función de llamada. Si se incorpora esa misma función, sualmacenamiento se asigna cuando se introduce la función que llama, y no se liberahasta que termina la función de llamada. Asegúrese de que tiene suficiente espaciode pila para el almacenamiento local de las funciones incorporadas.

Resumen de opciones de tiempo de compilación que mejoranel rendimiento

En resumen, las siguientes opciones (si son adecuadas para su aplicación) puedenmejorar el rendimiento:v OPTIMIZE(2)v IMPRECISEv NOSNAPv PREFIX(NOFIXEDOVERFLOW)v RULES(ANS NOLAXCTL)v DEFAULT con las siguientes subopciones

(BYVALUERETURNS(BYVALUE)CONNECTEDNODESCRIPTORREORDERASCIIIEEENATIVELINKAGE(OPTLINK)

Codificación para lograr un mejor rendimientoCuando escribe código, suele haber más de una forma correcta de completar unadeterminada tarea. Hay muchos factores que influyen en el estilo de codificaciónque elige, entre ellos la legibilidad y el mantenimiento. En las siguientes seccionesse debaten distintas opciones que tiene durante la codificación y que puedenafectar al rendimiento de su programa.

Entradas y salidas dirigidas a datosUtilizar sentencias GET DATA y PUT DATA para depurar puede resultar muy útil.Sin embargo, el uso de estas sentencias puede mermar el rendimiento. Este costede rendimiento suele ser muy elevado cuando utiliza GET DATA o PUT DATA sinuna lista de variables.

Mejora del rendimiento

Capítulo 17. Mejora del rendimiento 369

Page 392: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Muchos programadores utilizan sentencias PUT DATA en su código ON ERRORtal y como se muestra en el el siguiente ejemplo:

on errorbegin;

on error system;...

put data;...

end;

En este caso, el programa se ejecuta de forma óptima, incluyendo una lista devariables seleccionadas con la sentencia PUT DATA.

En bloque ON ERROR del ejemplo anterior contenía una sentencia ON ERRORantes de la sentencia PUT DATA. De esta forma se impide que el programa entreen un bucle infinito si se produce un error en la sentencia PUT DATA (lo quepodría ocurrir si alguna de las variables incluye valores FIXED DECIMAL noválidos) o en otro lugar del bloque ON ERROR.

Parámetros solo de entradaSi un procedimiento tiene un parámetro BYADDR que solo se utiliza como entrada,es mejor declarar ese parámetro como NONASSIGNABLE (en lugar de permitirleobtener el atributo predeterminado ASSIGNABLE). Si ese procedimiento se invocamás adelante con una constante para ese parámetro, el compilador puede poner laconstante en un almacenamiento estático y pasar la dirección de esa área estática.

Esta práctica es especialmente útil para series y otros parámetros que no puedenpasarse en registros (los parámetros de solo entrada que pueden pasarse registroses mejor declararlos como BYVALUE).

En la siguiente declaración, por ejemplo, el primer parámetro de

dosScanEnv en una serie CHAR VARYINGZ de solo entrada:dcl dosScanEnv entry( char(*) varyingz nonasgn byaddr,

pointer byaddr )returns( native fixed bin(31) optional )options( nodescriptor linkage(system) );

Si esta función se invoca con la serie 'IBM.OPTIONS', el compilador puede pasar ladirección de esa serie en lugar de asignarla a un área de almacenamiento temporalgenerada por el compilador y pasar la dirección de esa área.

Asignaciones de seriesCuando se asigna una serie a otra, el compilador garantiza que:v El destino tiene el valor correcto incluso si el origen y el destino se solapanv La serie de origen se trunca si es mayor que el destino.

Esta garantía implica unas cuantas instrucciones más. El compilador intentagenerar estas instrucciones adicionales solo cuando es necesario, pero usted, comoprogramador, sabrá que no son necesarias cuando el compilador no esté seguro.Por ejemplo, si el origen y el destino son series de caracteres de base y sabe que nose pueden solapar, puede utilizar la función incorporada PLIMOVE para eliminarel código adicional que el compilador se vería obligado a generar.

Codificación para lograr un mejor rendimiento

370 PL/I for WindowsGuía de programación

Page 393: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

En el ejemplo siguiente, se genera código más rápido para la segunda sentencia deasignación:

dcl based_Str char(64) based( null() );dcl target_Addr pointer;dcl source_Addr pointer;

target_Addr->based_Str = source_Addr->based_Str;

call plimove( target_Addr, source_Addr, stg(based_Str) );

Si tiene alguna duda acerca de si el origen y el destino podrían solaparse o sobre siel destino es lo suficientemente grande para mantener el origen, no debería utilizarla función incorporada PLIMOVE.

Variables de control de bucleEl rendimiento del programa mejora si las variables de control de bucle son uno delos tipos que se recogen en la siguiente lista. Normalmente no debería utilizar otrotipo de variable.

FIXED BINARY con factor de escala ceroFLOATORDINALHANDLEPOINTEROFFSET

El rendimiento también mejora si las variables de control de bucle no sonmiembros de matrices, estructuras ni uniones. El compilador emite un mensaje deaviso cuando lo son. Las variables de control de bucle AUTOMATIC no se utilizancon ningún otro fin que conseguir la mejor generación de código.

El rendimiento disminuye si el programa depende no solo del valor de la variablede control de bucle, sino también de su dirección. Por ejemplo, si la funciónincorporada se aplica a la variable o si la variable se pasa BYADDR a otra rutina.

PAQUETES y PROCEDIMIENTOS anidadosLa llamada a procedimientos anidados requiere que se pase un “parámetro oculto”(el puntero de cadena hacia atrás). Como resultado, cuantos menos procedimientosanidados tenga la aplicación, más rápido se ejecutará.

Para mejorar el rendimiento de su aplicación, puede convertir un par madre-hijade procedimientos anidados en procedimientos hermana de nivel 1 dentro de unpaquete. Esta conversión es posible si su procedimiento anidado no se basa enninguna de las variables automáticas y estáticas internas declaradas en susprocedimientos padre.

Si el procedimiento b de “Ejemplo con procedimientos anidados” no utilizaninguna de las variables declaradas en a, puede mejorar el rendimiento de ambosprocedimientos reorganizándolos en el paquete que se ilustra en “Ejemplo deprocedimientos en paquetes” en la página 372.

Ejemplo con procedimientos anidadosa: proc;

dcl (i,j,k) fixed bin;dcl ib based fixed bin;

.

.

Codificación para lograr un mejor rendimiento

Capítulo 17. Mejora del rendimiento 371

Page 394: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

.call b( addr(i) );

.

.

.b: proc( px );

dcl px pointer;display( px->ib );

end;end;

Ejemplo de procedimientos en paquetesp: package exports( a );

dcl ib based fixed bin;

a: proc;

dcl (i,j,k) fixed bin;...

call b( addr(i) );...

end;

b: proc( px );dcl px pointer;display( px->ib );

end;

end p;

Funciones REDUCIBLEREDUCIBLE indica que un procedimiento o entrada no tiene que invocarse variasveces si el argumento no varía y que la invocación del procedimiento no tieneefectos secundarios.

Por ejemplo, una función escrita por el usuario que computa como resultadobasándose en datos invariables debería declararse como REDUCIBLE. Una funciónque computa como resultado basándose en datos variables, como un númeroaleatorio o la hora del día, debería declararse como IRREDUCIBLE.

En el siguiente ejemplo, f se invoca una sola vez porque REDUCIBLE forma partede la declaración. Si se hubiera utilizado IRREDUCIBLE en la declaración, f sehabría invocado dos veces.dcl (f) entry options( reducible ) returns( fixed bin );

select;when( f(x) < 0 )

.

.

.when( f(x) > 0 )

.

.

.otherwise

Codificación para lograr un mejor rendimiento

372 PL/I for WindowsGuía de programación

Page 395: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

.

.

.end;

DEFINED y UNIONEl atributo UNION es más potente que el atributo DEFINED y proporciona másfunciones. Además, el compilador genera mejor código para las referencias deunión.

En el siguiente ejemplo, el par de variables b3 y b4 realiza las mismas funcionesque b1 y b2, pero el compilador genera mejor código para el par de la unión.

dcl b1 bit(32);dcl b2 bit(16) def b1;

dcl1 * union,

2 b3 bit(32),2 b4 bit(16);

El código que utiliza UNION en lugar del atributo DEFINED está expuesto amenos interpretaciones erróneas. Las declaraciones variables de uniones seencuentran en una única ubicación haciendo que sea más fácil darse cuenta de quecuando se modifica un miembro de la unión se modifican también los demás. Estecambio dinámico es menos obvio en declaraciones que utilizan variables DEFINEDya que las sentencias de declaración pueden lejos.

Constantes con nombre y variables estáticasPuede definir constantes con nombre declarando una variable con el atributoVALUE. Si utiliza variables estáticas con el atributo INITIAL y no altera la variable,tiene que declarar la variable como constante con nombre utilizando el atributoVALUE. Sin embargo, el compilador no trata las variables estáticas escalaresNONASSIGNABLE como constantes con nombre auténticas.

El compilador genera mejor código cuando las expresiones se evalúan durante lacompilación, de forma que puede utilizar constantes con nombre para producircódigo eficiente sin perder legibilidad. Por ejemplo, en el siguiente ejemplo seproduce código objeto idéntico para los dos usos de la función incorporadaVERIFY:

dcl numeric char value(’0123456789’);

jx = verify( string, numeric );

jx = verify( string, ’0123456789’ );

Los siguientes ejemplos muestran cómo puede utilizar el atributo VALUE paraconseguir código óptimo sin sacrificar la legibilidad.

Ejemplo con código óptimo pero sin nombres significativosdcl x bit(8) aligned;

select( x );when( ’01’b4 )

.

.

.when( ’02’b4 )

.

Codificación para lograr un mejor rendimiento

Capítulo 17. Mejora del rendimiento 373

Page 396: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

.

.when( ’03’b4 )

.

.

.end;

Ejemplo con nombres significativos pero sin código óptimodcl ( a1 init( ’01’b4)

,a2 init( ’02’b4),a3 init( ’03’b4),a4 init( ’04’b4),a5 init( ’05’b4)

) bit(8) aligned static nonassignable;

dcl x bit(8) aligned;

select( x );when( a1 )

.

.

.when( a2 )

.

.

.when( a3 )

.

.

.end;

Ejemplo con código óptimo Y nombres significativosdcl ( a1 value( ’01’b4)

,a2 value( ’02’b4),a3 value( ’03’b4),a4 value( ’04’b4),a5 value( ’05’b4)

) bit(8);

dcl x bit(8) aligned;

select( x );when( a1 )

.

.

.when( a2 )

.

.

.when( a3 )

.

.

.end;

Evitar llamadas a rutinas de bibliotecaLas operaciones bit a bit (prefijo NOT, infijo AND, infijo OR, e infijo EXCLUSIVEOR) suelen evaluarse mediante llamadas a rutinas de biblioteca. Estas operaciones,sin embargo, se manejan sin ninguna llamada a la biblioteca si se da alguna de lassiguientes condiciones:v Los dos operandos son(1)

Codificación para lograr un mejor rendimiento

374 PL/I for WindowsGuía de programación

Page 397: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v Los dos operandos son bit(8n) alineado siendo n una constante.

Para determinadas asignaciones, expresiones y referencias de funcionesincorporadas, el compilador genera llamadas a las rutinas de biblioteca. Si evitaestas llamadas, el código suele ejecutarse más rápido.

Para ayudarle a determinar cuándo genera el compilador dichas llamas, elcompilador crea un mensaje siempre que se realiza una conversión utilizando unarutina de biblioteca. Las conversiones realizadas con código generado en línea semuestran en Tabla 25.

Tabla 25. Condiciones en las que las conversiones se manejan en línea

Destino Origen Condición

fixed bin(p1,q1) fixed bin(p2,q2)float(p2)bit(1)bit(n) alineadochar(1)pic'(n)9'pic'(n)Z(m)9'

siempresi SIZE está inhabilitadosiempresi n se conoce y n ≤ 31

si CONV está inhabilitadosi n ≤ 6

si n + m ≤ 6

fixed dec(p1,q1) fixed dec(p2,q2) se realiza utilizando unarutina de bibliotecaespecialmente rápida

float(p1) fixed bin(p2,q2)float(p2)bit(1)bit(n) alineadochar(1)pic'(n)9'pic'(n)Z(m)9'

siempresiempresiempresi n se conoce y n ≤ 31

si CONV está inhabilitadosi n ≤ 6

si n + m ≤ 6

pictured fixed pictured fixed si la imagen coincide

pictured float pictured float si la imagen coincide

char char nonvaryingchar varyingchar varyingzpictured fixedpictured floatpictured char

siempresiempresiempresiempresiempresiempre

pictured char pictured char si la imagen coincide

bit(1) nonvarying bit(1) nonvarying siempre

bit(n) nonvarying bit(m) nonvarying ver nota

Nota: Si se cumple lo siguiente:1) el origen y el destino están alineados por bytes2) n y m se conocen3) mod(m,8)=0 o n=m o el origen es una constante4) mod(n,8)=0 o el destino es una escalar STATIC,atributos AUTOMATIC o CONTROLLED

Codificación para lograr un mejor rendimiento

Capítulo 17. Mejora del rendimiento 375

Page 398: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Muchas funciones incorporadas de manejo de series se evalúan a través dellamadas a las rutinas de biblioteca, pero algunas se manejan sin una llamada a labiblioteca. Tabla 26 recoge estas funciones y las condiciones bajo las cuales semanejan en línea.

Tabla 26. Condiciones bajo las cuales las funciones incorporadas de serie se manejan enlínea

Función String Comentarios y condiciones

BOOL Cuando el tercer argumento es una constante. Los dos primerosargumentos tiene que ser bit(1) o bit(n) alineado, siendo n 8, 16 o32. La función también se maneja en línea si puede reducirse a unaoperación de infijo bit a bit y los dos argumentos están alineadospor bit.

COPY Cuando el primer argumento tiene tipo carácter.

EDIT Cuando el primer argumento es REAL FIXED BIN, la condiciónSIZE está inhabilitada y el segundo argumento es una serie deconstante compuesta de nueves.

HIGH Siempre

INDEX Cuando solo se proporcionan dos argumentos y tienen tipo carácter.

LENGTH Siempre

LOW Siempre

MAXLENGTH Siempre

SEARCH Cuando solo se proporcionan dos argumentos y tienen tipo carácter.

SEARCHR Cuando solo se proporcionan dos argumentos y tienen tipo carácter.

SUBSTR Cuando STRINGRANGE se ha inhabilitado.

TRANSLATE Cuando el segundo y el tercer argumento son constantes.

TRIM Cuando solo se proporciona un argumento y tiene tipo carácter.

UNSPEC Siempre

VERIFY Cuando solo se proporcionan dos argumentos y tienen tipo carácter.

VERIFYR Cuando solo se proporcionan dos argumentos y tienen tipo carácter.

Codificación para lograr un mejor rendimiento

376 PL/I for WindowsGuía de programación

Page 399: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 18. Utilizar salidas de usuario

PL/I proporciona un número de salidas de usuario que le permite personalizar elproducto PL/I para que se ajuste a sus necesidades. La estación de trabajo PL/I losproductos PL/I for AIX proporcionan salidas predeterminadas y los archivos deorigen asociados a ellas.

Si quiere que las salidas lleven a cabo funciones distintas de las suministradas porlas salidas predeterminadas, le recomendamos que modifique los archivos deorigen proporcionados de la forma adecuada.

Entre los tipos de archivos proporcionados se incluyen:v Archivos de origen PL/I con la extensión PLI que se encuentran en ..\samples.v Archivos de inclusión PL/I con extensión CPY que se encuentran en ..\include.

Al compilar salidas se usuario, asegúrese de definir las variables de entornoINCLUDE o IBM.SYSLIB de forma que puedan encontrarse los archivos CPY.

v Los archivos de definición del enlazador con extensión DEF que se encuentranen ..\samples.

v Archivos de control (si son aplicables a la salida) con extensión INF que seencuentran en ..\samples. Al utilizar las salidas de usuario, asegúrese de que eldirectorio que contiene los archivos INF se especifica utilizando las variables deentorno correctas (normalmente DPATH).

Utilizar la salida de usuario del compiladorA veces, es útil poder adaptar el compilador para que satisfaga las necesidades desu empresa. Puede querer, por ejemplo, eliminar ciertos mensajes o modificar lasgravedad de otros. Quizás quiera realizar una función específica con cadacompilación, como registrar información estadística sobre la compilación en unarchivo.

La salida de usuario del compilador maneja este tipo de funciones. Con PL/I,puede escribir su propia salida de usuario o utilizar la salida que se incluye con elproducto, ya sea "tal como está" o modificada según lo que quiera hacer con ella.El objetivo de este capítulo es describir:v Los procedimientos que soporta la salida de usuario del compiladorv Cómo activar la salida de usuario del compiladorv IBMUEXIT, la salida de usuario del compilador suministrada por IBMv Requisitos para escribir su propia salida de usuario

Procedimientos llevados a cabo por la salida de usuario delcompilador

La salida de usuario del compilador realiza tres procedimientos específicos:v Inicializaciónv Intercepción y filtrado de mensajes del compiladorv Terminación

Tal y como se muestra en la Figura 28 en la página 378, el compilador le pasa elcontrol al procedimiento de inicialización, al procedimiento de filtro de mensaje yal procedimiento de terminación. Cada uno de estos procedimientos, a su vez, le

© Copyright IBM Corp. 1998, 2013 377

Page 400: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

devuelven el control al compilador cuando se completa el procedimiento solicitado.

A cada uno de estos procedimientos se les pasa dos bloques de control:v Un bloque de control global que contiene información sobre la compilación. Se pasa

como primer parámetro. Para obtener información específica sobre el bloque decontrol global, consulte “Estructura de bloques de control globales” en la página380.

v Un bloque de control específico de la función que se pasa como segundo parámetro.El contenido de este bloque de control depende del procedimiento que se hayainvocado. Para obtener información detallada, consulte “Escribir elprocedimiento de inicialización” en la página 381, “Escribir el procedimiento defiltrado de mensajes” en la página 381 y “Escribir el procedimiento determinación” en la página 383.

Activar la salida de usuario del compiladorPara activar la salida de usuario del compilador, tiene que especificar la opción detiempo de compilación EXIT. Para obtener más información sobre la opción EXIT,consulte “EXIT” en la página 59.

La opción en tiempo de compilación EXIT le permite especificar una cadena deopción de usuario que especifica el archivo de control del mensaje. Si no especificauna cadena, se utiliza IBMUEXIT.INF (consulte “Modificar IBMUEXIT.INF” en lapágina 379) pero tiene que decirle al sistema dónde se encuentra. Elcomportamiento predeterminado, siempre y cuando no modifique el programa demuestra IBMUEXIT.PLI, es que el compilador busque IBMUEXIT.INF en eldirectorio En el directorio primero y después en los directorios especificados enDPATH.

La cadena de opción de usuario se pasa a las funciones de la salida de usuario enel bloque de control global, lo cual se trata en “Estructura de bloques de controlglobales” en la página 380. Consulte el campo “Uex_UIB_User_char_str” de lasección “Estructura de bloques de control globales” en la página 380 para obtenermás información.

La salida de usuario suministrada por IBM, IBMUEXITIBM le proporciona la salida de usuario del compilador de muestra, IBMUEXIT,que filtra los mensajes por usted. Supervisa mensajes, en función del númeromensajes que especifique, elimina los mensajes o modifica la gravedad del mensaje.

┌───────┐│ ││ │ ┌───────────────┐│ │──────�│Initialization ││ C │�──────│procedure ││ O │ └───────────────┘│ M │ ┌───────────────┐│ P │──────�│Message filter ││ I │�──────│procedure ││ L │ └───────────────┘│ E │ ┌───────────────┐│ R │──────�│Termination ││ │�──────│procedure ││ │ └───────────────┘│ │└───────┘

Figura 28. Procedimientos de salida de usuario del compilador PL/I

Utilizar la salida de usuario del compilador

378 PL/I for WindowsGuía de programación

Page 401: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Hay varios archivos que componen IBMUEXIT:

IBMUEXIT.PLIContiene el código fuente PL/I.

IBMUEXIT.DLLDLL ejecutable de IBMUEXIT.PLI. Para crear este archivo, emita los siguientesmandatos desde la línea de mandatos:

En Windows:pli ibmuexitilib /geni ibmuexit.defilink /dll ibmuexit.obj ibmuexit.exp

IBMUEXIT.DEFEl archivo DEF que se utiliza para crear IBMUEXIT.DLL.

IBMUEXIT.INFEl archivo de control que especifica el filtrado de mensajes.

El archivo de origen PLI se incluye a modo informativo y puede modificarse. Elarchivo de control INF contiene los números de mensajes que hay que supervisar yle dice a IBMUEXIT que acciones tiene que llevar a cabo. El módulo ejecutable leeel archivo de control INF, e ignora los mensajes o modifica su gravedad.

Personalizar la salida de usuario del compiladorComo ya mencionamos anteriormente, puede escribir su propia salida de usuariodel compilador o modificar IBMUEXIT.PLI. En cualquier caso, el nombre delarchivo ejecutable para la salida de usuario del compilador tiene que serIBMUEXIT.DLL.

En esta sección se describe:v Cómo modificar IBMUEXIT.INF para un filtrado de mensajes personalizadov Cómo crear su propia salida de usuario del compilador

Modificar IBMUEXIT.INFEn lugar de dedicar tiempo a escribir una salida de usuario de compiladortotalmente nueva, puede modificar el programa de muestra, IBMUEXIT.INF.

Edite el archivo INF para indicar qué números de mensaje quiere suprimir, y quéniveles de gravedad quiere modificar. En Figura 29 se incluye un archivoIBMUEXIT.INF de muestra.

Las primeras dos líneas son líneas de encabezado y IBMUEXIT las ignora. Lasdemás líneas incluyen datos de entrada separados por un número variable deespacios en blanco.

Fac Id Msg No Severity Suppress Comment+--------+--------+----------+----------+--------------------------------

’IBM’ 1041 -1 1 Comment spans multiple lines’IBM’ 1044 -1 1 FIXED BIN 7 mapped to 1 byte’IBM’ 1172 0 0 Select without OTHERWISE’IBM’ 1052 -1 1 Nodescriptor with * extent args’IBM’ 1047 12 0 Reorder inhibits optimization’IBM’ 8009 -1 1 Semicolon in string constant’IBM’ 1107 12 0 Undeclared ENTRY’IBM’ 1169 0 1 Precision of result determined by arg

Figura 29. Ejemplo de un archivo IBMUEXIT.INF

Utilizar la salida de usuario del compilador

Capítulo 18. Utilizar salidas de usuario 379

Page 402: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Cada columna del archivo es relevante para la salida de usuario del compilador:v La primera columna tiene que incluir las letras 'IBM' entre comillas simples, que

son el prefijo del mensaje.v La segunda columna contiene los cuatro dígitos del número de mensaje.v La tercera columna muestra la gravedad del mensaje nuevo. La gravedad -1

indica que debe mantenerse el valor predeterminado de gravedad.v La cuarta columna indica si el mensaje se va a suprimir o no. Un '1' indica que

se va a suprimir el mensaje y un '0' indica que debe imprimirse.v El campo de comentario, que aparece en la última columna, es informativo y

IBMUEXIT lo ignora.

Escribir su propia salida del compiladorPara escribir su propia salida de usuario, puede utilizar IBMUEXIT (que se incluyecomo programa de muestra con el producto) como modelo. Mientras escribe lasalida, asegúrese de que cubre las áreas de inicialización, filtrado de mensajes yterminación.

Estructura de bloques de control globalesEl bloque de control global se pasa a cada uno de los tres procedimientos de salidade usuario (inicialización, filtrado y terminación) cada vez que se invocan. Elsiguiente código y las explicaciones que lo acompañan describen el contenido decada campo del bloque de control global.

Dcl1 Uex_UIB native based( null() ),

2 Uex_UIB_Length fixed bin(31),

2 Uex_UIB_Exit_token pointer, /* for user exit’s use */

2 Uex_UIB_User_char_str pointer, /* to exit option str */2 Uex_UIB_User_char_len fixed bin(31),

2 Uex_UIB_Filename_str pointer, /* to source filename */2 Uex_UIB_Filename_len fixed bin(31),

2 Uex_UIB_return_code fixed bin(31), /* set by exit procs */2 Uex_UIB_reason_code fixed bin(31), /* set by exit procs */

2 Uex_UIB_Exit_Routs, /* exit entries set atinitialization */

3 ( Uex_UIB_Termination,Uex_UIB_Message_Filter, /* call for each msg */*, *, *, * )

limited entry (*, /* to Uex_UIB */*, /* to a request area */

);

Campos de entrada de datos

v Uex_UIB_ Length: contiene la longitud del bloque de control en bytes. EL valores storage (Uex_UIB).

v Uex_UIB_Exit_token: utilizado por el procedimiento de salida de usuario. Porejemplo, la inicialización puede definirlo en una estructura de datos que utilizanel filtro de mensaje y los procedimientos de terminación.

v Uex_UIB_User_char_str: a punta a una cadena de caracteres opcional, si loespecifica. Por ejemplo, en pli filename (EXIT (’string’))...fn puede haberuna cadena de caracteres de hasta 31 caracteres de longitud.

v Uex_UIB_char_len: contiene la longitud de la cadena a la que apuntaUser_char_str. El compilador define este valor.

Utilizar la salida de usuario del compilador

380 PL/I for WindowsGuía de programación

Page 403: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v Uex_UIB_Filename_str: contiene el nombre del archivo de origen que estácompilando e incluye la unidad y los subdirectorios además del nombre dearchivo. El compilador define este valor.

v Uex_UIB_Filename_len: contiene la longitud del nombre del archivo de origenal que apunta Filename_str. El compilador define este valor.

v Uex_UIB_return_code: contiene el código de retorno del procedimiento de salidade usuario. El usuario define este valor.

v Uex__UIB_reason_code: contiene el código de razón del procedimiento. Elusuario define este valor.

v Uex_UIB_Exit_Routs: contiene las entradas de salida configuradas por elprocedimiento de inicialización.

v Uex_UIB_Termination: contiene la entrada a la que va llamar el compilador enel momento de la terminación. El usuario define este valor.

v Uex_UIB_Message_Filter: contiene la entrada a la que va a llamar el compiladorcada vez que haya que generar un mensaje. El usuario define este valor.

Escribir el procedimiento de inicializaciónTu procedimiento de inicialización tiene que llevar a cabo toda inicialización querequiera la salida, como abrir archivos y asignar almacenamiento. El bloque decontrol específico del procedimiento de inicialización tiene el siguiente código:

Dcl 1 Uex_ISA native based( null() ),2 Uex_ISA_Length_fixed bin(31); /* storage(Uex_IS A) */

La sintaxis del bloque de control global para el procedimiento de inicialización setrata en el apartado “Estructura de bloques de control globales” en la página 380.

Tras completarse el procedimiento de inicialización, debería definir los códigos deretorno/razón de la siguiente manera:

0/0Continuar compilación

4/nReservado para uso futuro

8/nReservado para uso futuro

12/nReservado para uso futuro

16/nAbortar compilación

Escribir el procedimiento de filtrado de mensajesEl procedimiento de filtrado de mensajes le permite suprimir mensajes o modificarla gravedad de los mensajes. Puede aumentar la gravedad de cualquiera de losmensajes pero no puede reducir la severidad solo de mensajes de ERROR (códigode gravedad 8) o WARNING (código de gravedad 4).

El bloque de control específico del procedimiento contiene información sobre losmensajes. Se utiliza para pasar información de vuelta al compilador indicandocómo debería tratarse un mensaje en concreto.

A continuación se muestra un ejemplo de un bloque de control de filtro de mensajeespecífico del procedimiento:

Utilizar la salida de usuario del compilador

Capítulo 18. Utilizar salidas de usuario 381

Page 404: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Dcl 1 Uex_MFX native based( null() ),2 Uex_MFX_Length fixed bin(31),

2 Uex_MFX_Facility_Id char(3), /* of component writingmessage */

2 * char(1),2 Uex_MFX_Message_no fixed bin(31),2 Uex_MFX_Severity fixed bin(15),2 Uex_MFX_New_Severity fixed bin(15), /* set by exit proc */2 Uex_MFX_Inserts fixed bin(15),2 Uex_MFX_Inserts_Data( 6 refer(Uex_MFX_Inserts) ),

3 Uex_MFX_Ins_Type fixed bin(7),3 Uex_MFX_Ins_Type_Data union unaligned,

4 * char(8),4 Uex_MFX_Ins_Bin fixed bin(31),4 Uex_MFX_Ins_Str,

5 Uex_MFX_Ins_Str_Len fixed bin(15),5 Uex_MFX_Ins_Str_Addr pointer,

4 Uex_MFX_Ins_Series,5 Uex_MFX_Ins_Series_Sep char(1),5 Uex_MFX_Ins_Series_Addr pointer;

Campos de entrada de datos

v Uex_MFX_Length: contiene la longitud del bloque de control en bytes. El valores almacenamiento (Uex_MFX).

v Uex_MFX_Facility_Id: contiene el identificador del recurso; para el compiladorel identificador es IBM. PAra el SQL del preprocesador SQL, el identificador esSQL. El compilador define este valor.

v Uex_MFX_Message_no: contiene el número de mensaje que va a generar elcompilador. El compilador define este valor.

v Uex_MFX_Severity: incluye el nivel de gravedad del mensaje, puede tener entre1 y 15 caracteres de longitud. El compilador define este valor.

v Uex_MFX_New_Severity: incluye el nuevo nivel de gravedad del mensaje;puede tener entre 1 y 15 caracteres de longitud. El usuario define este valor.

v Uex_MFX_Inserts: incluye el número de inserciones para el mensaje, puede ir decero a seis. El compilador define este valor.

v Uex_MFX_Inserts_Data: incluye campos para describir cada una de lasinserciones. El compilador define estos valores.

v Uex_MFX_Ins_Type: incluye el tipo de inserción. Los tipos de insercionesposibles son:– Uex_Ins_Type_Xb31: se utiliza para un tipo entero y tiene el valor 1.– Uex_Ins_Type_Char: se utiliza para un tipo entero y tiene el valor 2.– Uex_Ins_Type_Series: se utiliza para un tipo entero y tiene el valor 3.

El compilador define este valor.v Uex_MFX_Ins_Bin: incluye el valor entero para una inserción que tiene tipo

entero. El compilador define este valor.v Uex_MFX_Ins_Str_Len: incluye la longitud (en bytes) para una inserción que

tiene tipo de carácter. El compilador define este valor.v Uex_MFX_Ins_Str_Addr: incluye la dirección de la cadena de caracteres de para

una inserción con tipo de carácter. El compilador define este valor.v Uex_MFX_Ins_Series_Sep: contiene el carácter que debe insertarse entre cada

elemento para una inserción con tipo de serie. Normalmente, es un espacio enblanco, un punto o una coma. El compilador define este valor.

v Uex_MFX_Ins_Series_Addr: contiene la dirección de las series de varias cadenasde caracteres para una inserción que tiene tipo de series. La dirección apunta a

Utilizar la salida de usuario del compilador

382 PL/I for WindowsGuía de programación

Page 405: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

un campo FIXED BIN(31) que contiene el número de cadenas a concatenarseguido de las direcciones de esas cadenas. El compilador define este valor.

Tras la terminación del procedimiento de filtrado de mensajes, defina los códigosde retorno/razón en una de las opciones siguientes:

0/0Continuar compilación, salida de mensajes

0/1Continuar compilación, sin salida de mensajes

4/nReservado para uso futuro

8/nReservado para uso futuro

16/nTerminar compilación

Escribir el procedimiento de terminaciónDebería utilizar el procedimiento de terminación para realizar cualquier limpiezarequerida, como cerrar archivos. Quizás también quiera escribir informesestadísticos finales basándose en la información recogida durante losprocedimientos de filtrado de mensajes de error y los procedimientos deinicialización.

EL bloque de control específico del procedimiento de terminación tiene el siguientecódigo:

Dcl 1 Uex_ISA native based,2 Uex_ISA_Length_fixed bin(31); /* storage(Uex_ISA) */

La sintaxis del bloque de control global para el procedimiento de terminación setrata en “Estructura de bloques de control globales” en la página 380. Trascompletar el procedimiento de terminación, defina los códigos de retorno/razón auna de las siguientes opciones:

0/0Continuar compilación

4/nReservado para uso futuro

8/nReservado para uso futuro

12/nReservado para uso futuro

16/nAbortar compilación

Utilizar la salida de usuario e tiempo de ejecución CICSUna de las principales funciones de la salida de tiempo de ejecución CICS,CEEFXITA, es permitirle controlar si se produce o no la restitución detransacciones dinámicas (DTB) de CICS cuando fallan las transacciones de PL/I. Lasalida de tiempo de ejecución CICS se controla inmediatamente antes einmediatamente después de cada programa PL/I de una transacción en CICS.

Utilizar la salida de usuario del compilador

Capítulo 18. Utilizar salidas de usuario 383

Page 406: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Cada vez que se invoca la salida, la estructura introducida CXIT (que forma partedel archivo de inclusión IBMVCXT.INC) se utiliza para la comunicación entre eltiempo de ejecución PL/I y la salida.

Se recomienda revisar y modificar (si es necesario) la salida de usuario.

Esta estructura contiene información pertinente del programa PL/I, incluyendo:v La razón de invocación (inicialización o terminación) de la salida.v Un código de razón que indica cómo termina el programa cuando se invoca tras

la terminación del programa.v Punteros a bloques de control CICS claves.

Antes de la invocación del programaCuando la salida se invoca antes de la invocación del programa PL/I, la salidapuede decirla al tiempo de ejecución PL/I que eluda la invocación del programa.En este caso, se produce una DTB si es necesario.

Durante esta invocación de la salida, no se pueden llevar a cabo otras funciones(como interrogación o configuración de opciones de tiempo de ejecución).

La salida proporcionada por IBM vuelve permitiendo que continúe la invocacióndel programa PL/I.

Después de la terminación del programaCuando la salida se invoca después de la invocación del programa PL/I, la salidapuede examinar el motivo de la terminación del programa y solicitar DTB. Elcódigo de razón de la terminación indica por qué terminó el programa. El archivoIBMVCXT.INC contiene información detallada.

En este caso, la salida suministrada por IBM solicita DTB si:v El código de retorno del programa PL/I (definido mediante PLIRETC) es no cerov El motivo de la terminación es cualquier otro distinto a una terminación normal

Modificar CEEFXITASe suministran los siguientes archivos de origen:

CEEFXITA.PLICódigo fuente PL/I.

Para volver a compilar la salida, defina la opción de tiempo de compilaciónINCDIR para que incluya el directorio de IBMVCXT.INC. Escriba el siguientemandato en la línea de mandatos:

pli CEEFXITA

IBMVCXT.INCEstructura tipográfica CXIT y otra información de la interfaz.

CEEFXITA.DLLDLL ejecutable.

Para recrear esta biblioteca de enlace dinámico (DLL), emita el siguientemandato desde la línea de mandatos:

ilink /dll ceefxita.obj ceefxita.def

CEEFXITA.DEFEl archivo DEF se utiliza para crear CEEFXITA.DLL.

Utilizar la salida de usuario e tiempo de ejecución CICS

384 PL/I for WindowsGuía de programación

Page 407: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Utilizar tablas de conversión de datosEl compilador, el preprocesador, la biblioteca y el depurador pueden convertirbytes dobles y únicos de ASCII a EBCDIC y de EBCDIC a ASCII. Las rutinas deconversión se encuentran en Archivos DLL.

Para Windows, las rutinas se encuentran en estos dos archivos:v ibmwstb.dll (no multihilo)v ibmwmtb.dll (multihilo)

El origen de estas rutinas, incluyendo las tablas que utilizan, se incluyen con elproducto para que pueda utilizar tablas distintas si es necesario. Las tablas estánen el directorio de ejemplo del producto, /usr/lpp/pli/samples. Si los archivos seconvierten de EBCDIC a ASCII al descargarlos, quizás quiera utilizar una tabladistinta a la que se incluye.

Los nombres de las rutinas de conversión son IBMPBE2A (EBCDIC a ASCII),IBMPBA2E (ASCII a EBCDIC), IBMPBE4A (DBCS EBCDIC a ASCII) y IBMPBA4E(DBCD ASCII a EBCDIC). No cambie los nombres de los archivos que se incluyencon el producto.

Los archivos de definición también se suministran con el producto:

Para Windows, los archivos de definición:v ibmwstb.defv ibmwmtb.def

Debería utilizar estos archivos de definición cuando se crean los DDLcorrespondientes.

Utilizar tablas de conversión de datos

Capítulo 18. Utilizar salidas de usuario 385

Page 408: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Utilizar tablas de conversión de datos

386 PL/I for WindowsGuía de programación

Page 409: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 19. Compilar bibliotecas de enlace dinámico

El enlace dinámico es el proceso de resolver referencias externas mediante el usode bibliotecas de enlace dinámico (DLL). Estas son algunas de las ventajas delenlace dinámico:v Requisitos de memoria reducidosv Modificación de aplicaciones simplificadav Soporte de software flexiblev Migración transparente de funciónv Soporte para varios lenguajes de programaciónv Uso de memoria controlado por la aplicación.

Las bibliotecas de enlace dinámico suelen utilizarse para proporcionar funcionescomunes que pueden utilizar varias aplicaciones. Una aplicación que utiliza unabiblioteca de enlace dinámico (DLL) puede utiliza un enlace dinámico de tiempode carga o un enlace dinámico de tiempo de ejecución.

Puede enlazar dinámicamente con las DLL de tiempo de ejecución proporcionadas,así como con sus propias DLL. Los siguientes pasos para crear y utilizar unabiblioteca de enlace dinámico se describen en este capítulo:v Crear los archivos de origen para una biblioteca de enlace dinámicov Crear un archivo de definición de módulo (.DEF) para la biblioteca de enlace

dinámicov Compilar los archivos de origen y enlazar los archivos de objeto resultantes para

construir un archivo DLLv Escribir un archivo de definición de módulo para utilizar al enlazar el módulo

externo que identifica qué hay en la DLL.

Cada sección contiene un ejemplo relevante del programa de ejemplo SORT.PLI,que se incluye con el compilador.

Crear archivos de origen DLLpara crear una biblioteca de enlace dinámico, tiene que crear primero los archivosde origen que contienen los datos o rutinas que quiere incluir en su DLL. No hacefalta una extensión de archivo especial para los archivos de origen DLL.

Cada rutina que quiere exportar desde la DLL (es decir, una rutina a la que planeallamar desde otros módulos ejecutables o bibliotecas de enlace dinámico) tiene queser una rutina externa, ya sea predeterminada o cualificada con la palabra claveexterna.

Compilar el código fuente de la biblioteca de enlace dinámicoPuede compilar sus archivos de origen para crear una DLL de la misma forma quecompilaría cualquier otro archivo (utilizando el mandato PLI) con una excepción,tiene que compilar al menos un archivo con la opción DLLINIT. Puede compilartodas las rutinas de una DLL con la opción DLLINIT; sin embargo, no se puedeenlazar ninguna rutina compilada con DLLINIT a un EXE.

© Copyright IBM Corp. 1998, 2013 387

Page 410: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Es posible que también quiera compilar sus programas con la opción XINFO(DEF).Esta opción crea un archivo .DEF para cada programa. Estos archivos .DEF sonesenciales para preparar el enlace de su biblioteca de enlace dinámico.

Pasos previos para enlazar su DLLCuando enlaza la biblioteca de enlace dinámico, tiene que decirle al enlazador losnombres que se van a exportar fuera de la biblioteca.

Especificar nombres exportados en WindowsEn Windows, tiene que decirle al enlazador qué partes se exportan utilizando unarchivo .EXP. El archivo .EXP es un archivo binario que se construye invocandoilib con la opción /GENI y utilizando uno de los siguientes elementos comoentrada:v El archivo .DEF de la DLLv Todos los nombres que contienen .OBJ que va a exportar la DLL

Es preferible utiliza archivos .DEF ya que le permite controlar exactamente lo queexporta la DLL. Si especifica nombres .OBJ, todos los nombres externos de losarchivos de objeto se exportan.

El siguiente ejemplo muestra un mandato que puede utilizar para crear un archivo.EXP:

ilib /geni myliba.def

El archivo .DEF de Windows creado tiene estas características:v La versión de Windows solo incluye una sentencia EXPORTSv La versión de Windows incluye nombres que se han "adornado"

El "adorno" depende de un enlace de rutina, pero si utiliza los archivos .DEFcreados por el compilador. no tiene que preocuparse de esto.

Enlazar su DLLPara enlazar su biblioteca de enlace dinámico, utilice las siguientes opciones ycampos de entrada:

opciones del enlazadorv /dll,v /out: seguido del nombre de su dll

Archivos de entradav Todos los OBJ que componen su DLLv El archivo .DEF o .EXP que especifica lo que se va a exportar

Por ejemplo, para enlazar mydlla.obj y mydllb.obj en mydlla.dll, emita elsiguiente mandato de enlace en Windows:

ilink /dll /out:mydlla.dll mydlla.obj mydllb.obj mydlla.exp

Uso de la DLLUna vez haya creado su biblioteca de enlace dinámico, otras rutinas de suaplicación podrán acceder a las variables y rutinas exportadas mediante esa DLLutilizando uno de los siguientes métodos:v Una sentencia FETCHv Enlace con una biblioteca de importación

Compilar el origen DLL

388 PL/I for WindowsGuía de programación

Page 411: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Si su aplicación accede a un elemento de una DLL utilizando una sentenciaFETCH, no necesita realizar ninguna acción especial al enlazar. A no ser que suaplicación ejecute esa sentencia FETCH, lla biblioteca de enlace dinámico nisiquiera tiene que existir.

Si su aplicación accede a un elemento de una DLL como si estuviese enlazadodinámicamente con esa DLL, el enlazador tiene que ser capaz de resolver elnombre de ese elemento.

En Windows, el enlazador puede resolver nombres de una DLL si enlaza con unabiblioteca de importación para esa DLL. De hecho, así es como se resuelven losnombres de las rutinas de bibliotecas PL/I. Por ejemplo, cuando enlaza conibmws20i.lib, está enlazando con biblioteca de importación de ibmws20.dll.

En Windows, la biblioteca de importación de DLL se crea al crear el archivo .EXPcuando se prepara para enlazar la DLL.

Nota: Para que el cargador encuentre una DLL, la DLL tiene que residir en sudirectorio de trabajo actual o en uno de los directorios recogidos por lavariable de entorno PATH en Windows.

Programa de ejemplo para compilar una DLLLos programas de ejemplo SORT.PLI y DRIVER1.PLI muestran cómo se crea y seutiliza una DLL que contiene tres funciones de ordenación diferentes. Estasfunciones realizan un seguimiento del número de operaciones de intercambio ycomparación necesarias para la ordenación.

Los archivos para el programa de ejemplo son:

SORT.PLIEl archivo de origen para la DLL.

SORT.DEFEl archivo de definición de módulo de la DLL.

DRIVER1.DEFEl archivo de definición de módulo del ejecutable.

EXTDCL.CPYEl archivo de inclusión del usuario.

DRIVER1.PLIEl programa principal que utiliza SORT.DLL.

Si ha instalado los programas de muestra, estos archivos se encuentran en..\SAMPLES\ directory.

Utilice la siguiente secuencia de mandatos para compilar, enlazar y ejecutar elprograma:1. pli sort2. ilib /geni sort.def3. ilink /dll /out:sort.dll sort.obj sort.exp4. pli driver15. ilink driver1.obj /stack:80000 sort.lib6. driver1

Enlazar su DLL

Capítulo 19. Compilar bibliotecas de enlace dinámico 389

Page 412: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Utilizar FETCH y RELEASE en el programa principalEl directorio SAMPLES también incluye DRIVER2.PLI que es una versiónmodificada de DRIVER1.PLI que utiliza las sentencias FETCH y RELEASE paraenlazar dinámicamente las rutinas SORT.DLL en tiempo de ejecución en lugar deen tiempo de carga.

La principal ventaja de utilizar esta versión del programa DRIVER es que puedecontrolar cuándo entran y salen las rutinas de ordenación de la memoria. Utilizarlas sentencias FETCH y RELEASE, sin embargo, puede aumentar el tiempo deejecución del programa.

Utilice la siguiente secuencias de mandatos para compilar, enlazar y ejecutar estaversión del programa DRIVER en Windows:1. pli sort2. ilib /geni sort.def3. ilink /dll /out:sort.dll sort.obj sort.exp4. pli driver25. ilink driver2.obj /stack:800006. driver2

Exportar datos de una biblioteca de enlace dinámicoLa discusión anterior describía cómo exportar entradas externas desde una DLL.También puede exportar datos externos desde una DLL. Para exportar datosexternos desde una DLL, los datos tienen que declararse como RESERVED en laaplicación. Deben tenerse en cuenta las condiciones siguientes:v La DLL qie exporta una variable debe nombrar a la variable de la opción

RESERVES de algún paquete de la DLL.v Todas las DLL y EXE que importan una variable desde otra DLL tienen que

declarar también esa variable como RESERVED(IMPORTED).

Por ejemplo, para crear una DLL exportando solo la variable datatab, tiene queutilizarse la siguiente rutina:*process dllinit;

edata: package reserves( datatab );

dcl datatab char(256) reserved external init( .... );end;

Para importar datatab a un procedimiento fuera de esta DLL, tiene que declararsecomo:

dcl datatab char(256) reserved(imported) external;

Utilizar FETCH y RELEASE

390 PL/I for WindowsGuía de programación

Page 413: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 20. Utilizar el gestor de biblioteca de IBM enWindows

Utilice el gestor de biblioteca de IBM (también denominado ILIB) para crear ymantener bibliotecas de código de objeto, crear pares de biblioteca de importacióny objeto de exportación y generar archivos de definición de módulo (.def).Utilizando el programa de utilidad ILIB, puede:v Crear una biblioteca a partir de un conjunto de objetosv Mantener una biblioteca

– Añadir objetos a una biblioteca existente– Eliminar objetos de una biblioteca existente– Copiar objetos de una biblioteca existente– Sustituir objetos en una biblioteca existente

v Enumerar el contenido de una biblioteca existente nuevav Crear pares de biblioteca de importación/objeto de exportación a partir de:

– Archivos de definición de módulo (.def)– Objetos generados a partir de archivos de origen que contienen sentencias

#pragma export y _Export– Una combinación de lo anterior

v Generar archivos de definición de módulo (.def) a partir de:– Una biblioteca de enlace dinámico existente– Objetos generados a partir de archivos de origen que contienen sentencias

#pragma export y _Export– Una combinación de lo anterior

Ejecutar ILIBEjecute ILIB escribiendo ilib en el indicador de mandatos.

Puede especificar parámetros de las siguientes formas:1. Escríbalos directamente en la línea de mandatos2. Utilice la variable de entorno ILIB3. Colóquelos en un archivo de texto, llame un archivo de respuestas y

especifique el nombre de archivos después del mandato ilib.4. Una combinación de lo anterior

Pulse Ctrl+C o Ctrl+Pausa en cualquier momento mientras ejecutaILIB para volveral sistema operativo. Si se interrumpeILIB antes de terminar se restaura labiblioteca original a partir de una copia de seguridad.

Notas:

1. Cuando se inicia, ILIB realiza una copia de seguridad de la bibliotecaoriginal por si se interrumpe o se produce un error. Asegúrese de quetiene suficiente espacio en disco para su biblioteca original y para lacopia modificada.

2. La biblioteca tiene que terminar con la extensión .lib. Si no se especificauna extensión, se añade la extensión predeterminada, .lib. Los nombresde archivo del sistema de archivos de alto rendimiento (HPFS) soncompatibles. Por tanto, mylibraryname.new.lib es una biblioteca válida.

© Copyright IBM Corp. 1998, 2013 391

Page 414: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Utilizar la línea de mandatosPuede especificar todos los datos de entrada que ILIB necesita en la línea demandatos. LA sintaxis de la línea de mandatos es:ilib [options] [libraries] [@responsefile] [objects]

OptionsLas opciones que afectan al comportamiento de ILIB

LibrariesLa biblioteca de entrada que se va a crear o a modificar

Response fileEl nombre de un archivo de texto que contiene las opciones deILIB

ObjectsLos mandatos que se utilizan para añadir, suprimir, sustituir, copiar ymover módulos de objeto en la biblioteca

La línea de mandatos ILIB es una línea de mandatos de formato libre; es decir, losargumentos de entrada pueden especificarse todas las veces que se quiera y encualquier orden. La única excepción es la opción /FREEFORMAT, que tiene unarestricción de posición. Consulte el apartado “/FREEFORMAT” en la página 400para obtener más información.

Nota: Para proporcionar compatibilidad con el release OS/2 de ILIB, también sesoporta una línea de mandatos de formato fijo. Para utilizar la línea demandatos de formato fijo, tiene que especificarse la opción/NOFREEFORMAT justo después de ilib en la línea de mandatos, o comoprimer parámetro de la variable de entorno ILIB. El formato de línea demandatos predeterminado es el formato libre.

En este documento solo se describe detenidamente la línea de mandatos deformato libre.

Utilizar la variable de entorno ILIBPuede utilizar la variable de entorno ILIB para especificar cualquier opción ILIBpredeterminada. Cuando se invoca el mandato ilib, se analiza la variable deentorno antes que la línea de mandatos.

Utilice el mandato SET para dar valor a la variable de entorno ILIB. Esto se puedehacer de las maneras siguientes:

Línea de mandatosCuando se utiliza el mandato SET en la línea de mandatos, los valores queespecifica están en vigor solo durante esa sesión. Sustituyen a los valoresespecificados previamente.

Puede añadir el valor original de la variable utilizando %variable%. El siguienteejemplo podía provocar que la variable de entornoILIB se establezca en el valororiginal de la variable de entorno ILIB, con la opción /NOFREEFORMATespecificada antes que cualquier otra opción existente.

SET ILIB=/FREEFORMAT %ILIB%

Panel de control de WindowsWindows le permite actualizar variables de entorno y hacer que entren en vigorinmediatamente (es decir, no hace falta reiniciar) utilizando el panel de control deWindows.

Utilizar ILIB en Windows

392 PL/I for WindowsGuía de programación

Page 415: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Para definir la variable de entorno de ILIB:v Seleccione el grupo Principal pulsando dos veces sobre el icono Principal.v Seleccione el icono Sistema en el grupo Principal pulsando dos veces sobre él.v Escriba ILIB en el campo Variable.v Escriba el valor de la variable de entorno ILIB en el campo Valor.v Seleccione Establecer.

Archivo AUTOEXEC.BAT de Windows 98Windows 98 le permite establecer variables de entorno en el archivo AUTOEXEC.BAT.Cualquier variable de entorno establecida de este modo está disponible para cadasesión de usuario.

Añada una línea a su archivo AUTOEXEC.BAT que establezca la variable de entornoen el valor que desea. Considere el ejemplo siguiente:

SET ILIB=/NOBACKUP

Como las variables de entorno especificadas en el archivo AUTOEXEC.BAT están envigor para cada sesión que inicie, este es un buen lugar para especificar opcionesque quiere aplicar cada vez que invoque ILIB. Sin embargo, después de realizarcambios en el archivo AUTOEXEC.BAT, tiene que reiniciar el sistema para aplicar loscambios.

Utilizar un archivo de respuestas de ILIBPara proporcionar datos de entrada a ILIB con un archivo de respuestas, escriba:ilib @responsefile

responsefile es el nombre de un archivo que contiene la misma información que sepuede especificar en la línea de mandatos.

Por qué utilizar un archivo de respuestas

Utilice un archivo de respuestas para:v Mandatos largos y complejos que escribe con frecuenciav Series o mandatos que superan en límite de longitud de línea de mandatos.

Un archivo de respuesta amplía la línea de mandatos para incluir todo en elarchivo de respuestas. Para repartir datos de entrada aILIB entre la línea demandatos y un archivo de respuestas, coloque parte de su entrada en la línea demandatos y especifique un archivo de respuestas (precediendo el nombre delarchivo de respuestas de un signo (@)). No puede haber ningún espacio entre laarroba y el nombre de archivo.

El nombre del archivo de respuestas puede ser cualquier nombre de archivo válidode Windows. Para utilizar caracteres especiales en el nombre de archivo, como unespacio o el símbolo @, el nombre de archivo tiene que ir entre comillas.

ILIB responde a la entrada que coloca en un archivo de respuestas al igual quehace con los datos que introduce en la línea de mandatos. Cualquier carácter denueva línea que haya entre argumentos se trata como un espacio. Esto le permiteampliar un mandato ILIB en múltiples líneas.

Nota: Las opciones que especifican qué formato utiliza la línea de mandatos(/FREEFORMAT o /NOFREEFORMAT) tienen que especificarse como el

Utilizar ILIB en Windows

Capítulo 20. Utilizar el gestor de biblioteca de IBM en Windows 393

Page 416: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

primer parámetros detrás de ilib en la línea de mandatos o como el primerparámetro de la variable de entorno ILIB. No pueden especificarse dentrodel archivo de respuestas.

Ejemplos que especifican parámetros ILIBLos siguientes ejemplos muestran diferentes métodos para especificar parámetrospara ILIB.

Las operaciones que se muestran en cada ejemplo crean una biblioteca nueva,newlib.lib, y su archivo de listado, newlib.lst, a partir de la biblioteca mylib.libexistente. mylib.lib no se modifica, pero newlib.lib sufre estos cambios:v Se suprime el módulo textv El archivo de objeto root.obj es añade como un módulo de objeto con el

nombrerootv El módulo table se suprime y se sustituye por un módulo table nuevo que se

añade detrás de rootv El módulo string se copia en un archivo de objeto denominado string.obj

Método de línea de mandatos

En la solicitud de línea de mandatos, escriba lo siguiente:ilib /out:newlib.lib /list:newlib.lst mylib.lib /remove:text root table/extract:string

Método de archivo de respuestas

Primero, cree un archivo de respuestas con el siguiente contenido:/out:newlib.lib/list:newlib.lstmylib.lib/remove:textroot table/extract:string

A continuación, asumiento que el nombre del archivo de respuestas esresponse.fil, invoque ILIB con:

ilib @response.fil

Controlar la entrada de ILIBILIB determina el formato de los archivos de entrada examinando el contenido delarchivo. La mayoría de formatos de archivo pueden identificarse mediante lainformación de cabecera de archivo. Si no se reconoce el formato de un archivo deentrada y parece no contener solo ASCII, se asume que es un archivo definición demódulo (.def).

ILIB le permite colocar la extensión que quiera en un archivo y que aún así semaneje correctamente.

Controlar la salida de ILIBILIB determina qué salida va a producirse examinando las opciones que sesuministran en la línea de mandatos. Las siguientes opciones controlan la salida deILIB:

Utilizar ILIB en Windows

394 PL/I for WindowsGuía de programación

Page 417: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

OpciónDescripción

/O[UT]:filenameSe produce una biblioteca estática.

/GEND[EF]:filenameSe produce un archivo de definición de módulo (.def). También se puedeutilizar la forma abreviada, /gd.

/GENI[MPLIB]:filenameSe produce un par biblioteca de importación/objeto de exportación.También se puede utilizar la forma abreviada, /gi.

/L[IST]:filenameSe produce un archivo de lista.

Si no se especifica ninguna de las anteriores, ILIB determinará qué es lo que se vaa producir, de la siguiente manera:v Si un archivo DEF es la entrada de ILIB, se producirá un par biblioteca de

importación/objeto de exportación.

Nota: Si no hay símbolos exportados, no se producirá ninguna biblioteca deimportación.

v Si una biblioteca o un objeto son la entrada de ILIB, se producirá una bibliotecaque combine ambos.

ILIB le permitirá generar un archivo DEF directamente a partir de una DLL. Sinembargo, dado que la única información que tiene una DLL son los nombres(exportados) sin adornar, no se puede determinar el adorno de símbolos (conveniode llamada) ni la información de tipo (función o datos). ILIB asumirá que todos lossímbolos exportados de la DLL son _Optlink (la convención de enlacepredeterminada), a no ser que que proporcione un archivo de objeto que indiqueotra cosa.

La mejora manera de utilizar ILIB con una DLL es utilizar ILIB para crear unarchivo DEF mediante la opción /gd. Edite el archivo DEF para cambiar losadornos, donde corresponda, y ejecutar el archivo DEF en ILIB utilizando la opción/gi para producir un par biblioteca de importación/objeto de exportación.

Si se solicita un par biblioteca de importación/objeto de exportación, y solo seespecifica una DLL como entrada, ILIB generará un error.

Controlar salidas ILIBA continuación se incluyen ejemplos que muestran cómo controlar las salidas deILIB.

Biblioteca

El siguiente ejemplo crea la biblioteca newlib.lib a partir de los objetos detext.objy mylib.lib.

ilib /out:newlib.lib text.obj mylib.lib

Nota: A no ser que newlib.lib se especifique como archivo de entrada, sucontenido no se incluirá en la biblioteca. Si ya existe un archivo de salida, yno se utiliza como archivo de entrada, se sustituirá.

Utilizar ILIB en Windows

Capítulo 20. Utilizar el gestor de biblioteca de IBM en Windows 395

Page 418: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Archivo DEF

Este ejemplo crea el archivo de definición de módulos winner.def a partir de labiblioteca de enlace dinámico winner.dll.

ilib /gd:winner.def winner.dll

Par biblioteca de importación/objeto de exportación

El siguiente ejemplo crea una biblioteca de importación llamada winner.lib y unobjeto de exportación denominado winner.exp. Sin embargo, si no se incluyensímbolos exportados en winner.def, no se creará winner.lib.

ilib /gi winner.def

Archivo de lista

El siguiente ejemplo genera la lista que producirá el archivo de lista mylib.lst,basado en la biblioteca mylib.lib, en el directorio actual.

ilib /list:mylib.lst mylib.lib

Objetos ILIBLos objetos ILIB se utilizan para manipular los módulos de una biblioteca. Cuandoejecuta ILIB, puede especificar múltiples objetos en cualquier orden.

Cada objeto consta del mandato ILIB, seguido del nombre del módulo de objetoque es el asunto del mandato. Separe los objetos de la línea de mandatos con unespacio o un carácter de tabulación.

Resumen de objetos ILIBA continuación encontrará un resumen de los objetos ILIB en Windows.

Tabla 27. Objetos ILIB en Windows

Sintaxis Descripción Valorpredeterminado

Página

filename Añade/sustituye el objeto con nombre de labiblioteca

Ninguno “Añadir/Reempl.”en la página 397

/E[XTRACT]:obj Copia el objeto con nombre en el directorio actual ylos sobrescribe si ya existe

Ninguno “/EXTRACT” enla página 398

/R[EMOVE]:obj Elimina el objeto con nombre de la lista de objetosque se van a colocar en la biblioteca de salida

Ninguno “/REMOVE” enla página 398

Notas:

1. Los objetos de ILIB no distinguen entre mayúsculas y minúsculas, asíque puede especificarlos en mayúsculas, en minúsculas o enmayúsculas y minúsculas.También puede sustituir un guión (-) por la barra inclinada (/) que vaantes del objeto. Por ejemplo, -REMOVE:filename es equivalente a/REMOVE:filename.

2. Puede especificar objetos en formato breve o largo. Por ejemplo,/R:filename y /RE:filename son equivalentes a /REMOVE:filename.

Utilizar ILIB en Windows

396 PL/I for WindowsGuía de programación

Page 419: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

3. El orden de las operaciones cuando se procesa una línea mandatos esde izquierda a derecha.

4. ILIB nunca realiza cambios en la biblioteca de entrada mientras seejecuta. Copia la biblioteca y realiza cambios en la copia. Si seinterrumpe ILIB, se restaurará su biblioteca original.Si no especifica una biblioteca de salida, ILIB no producirá ningunasalida.

Añadir/Reempl.

�� nombrearchivo ��

La acción predeterminada, cuando se especifica filename en la línea de mandatossin un objeto asociado, es añadirlo a la biblioteca. Si filename ya existe en labiblioteca, se sustituirá.

Añadir un módulo de objeto a la biblioteca

Escriba el nombre del archivo de objeto que se va a añadir a la línea de mandatos.Se puede omitir la extensión .obj.

ILIB utiliza el nombre base del archivo de objeto como nombre del módulo deobjeto de la biblioteca. Por ejemplo, si se añade el archivo de objeto cursor.obj aun archivo de biblioteca, el nombre del módulo de objeto correspondiente escursor.

Los módulos de objeto siempre se añaden al final del archivo de biblioteca.

Sustituir un módulo de objeto en la biblioteca biblioteca

Escriba el nombre del módulo de objeto que se va a sustituir en la línea demandatos. Se puede omitir la extensión .obj.

Si el módulo de objeto ya existe en la biblioteca, ILIB los sustituirá por una copianueva.

Combinar dos bibliotecas

Especifique el nombre del archivo de biblioteca que se va a añadir, incluyendo laextensión .lib, en la línea de mandatos. Se añade una copia del contenido de esabiblioteca al archivo de biblioteca que se está modificando. Si las dos bibliotecascontienen un módulo con el mismo nombre, ILIB genera un mensaje de aviso ysolo utiliza el primer módulo con ese nombre.

ILIB añade los módulos de la biblioteca al final de la biblioteca que se estámodificando. La biblioteca añadida aún existe como biblioteca independienteporque ILIB copia los módulos sin eliminarlos.

Ejemplos

El siguiente mandato añade el archivo sample.obj a la biblioteca mylib.lib. Sisample.obj ya existe en la biblioteca mylib.lib, ILIB lo sustituye.ilib /out:mylib.lib mylib.lib sample.obj

Utilizar ILIB en Windows

Capítulo 20. Utilizar el gestor de biblioteca de IBM en Windows 397

Page 420: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Este ejemplo añade el contenido de la biblioteca mylib.lib a labibliotecanewlib.lib. La biblioteca mylib.lib no se modifica después de laejecución de este mandato.ilib /out:newlib.lib newlib.lib mylib.lib

/EXTRACT

�� /E[XTRACT]: obj ��

Utilice /EXTRACT para copiar un módulo de la biblioteca en un archivo de objetocon el mismo nombre. El módulo permanece en la biblioteca.

Cuando ILIB copia el módulo en un archivo de objeto, añade la extensión .obj alnombre del módulo y coloca el archivo en el directorio actual. Si ya existe unarchivo con este nombre, ILIB lo sobrescribe.

Ejemplo El mandato anterior copia el módulo muestra de la biblioteca mylib.lib aun archivo denominado sample.obj del directorio actual. EL módulo muestra demylib.lib no se modifica.ilib mylib.lib /extract:sample

/REMOVE

�� /R[EMOVE]: obj ��

Utilice /REMOVE para eliminar un módulo de objeto de una biblioteca. Despuésde /REMOVE, especifique el nombre del módulo que se va a eliminar. Losnombres de módulo no tienen nombres de vía de acceso ni extensiones.

Ejemplo

El siguiente mandato elimina el módulo sample de la biblioteca mylib.lib.ilib /out:mylib.lib mylib.lib /remove:sample

El siguiente mandato copia sample.obj desde la biblioteca mylib.lib a un archivode objeto en el directorio actual. Después se elimina sample.obj de la biblioteca.ilib /out:mylib.lib mylib.lib /extract:sample /remove:sample

Opciones ILIBLas opciones de ILIB afectan al comportamiento de ILIB. Cuando ejecutaILIB,puede especificar varias opciones en cualquier orden. La única excepción es laopción /FREEFORMAT, que tiene una restricción de posición.

Separe las opciones de la línea de mandatos con un espacio o carácter detabulación.

Utilizar ILIB en Windows

398 PL/I for WindowsGuía de programación

Page 421: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Resumen de opciones ILIBA continuación se incluye un resumen de las opciones ILIB de Windows.

Tabla 28. Opciones ILIB en Windows

Sintaxis Descripción Valorpredeter-minado

Página

/?Visualizar ayuda Ninguno “/?” en la página

400

/BA[CKUP]/NOBA[CKUP]

Realiza una copia de seguridad del archivo desalida (si existe) entes de sobrescribirlo.

/BA “/BACKUP” en lapágina 400

/DEF:defEspecifica nombre de un archivo .def que seva a utilizar para conseguir información sobrelos símbolos exportados y los parámetros delenlazador.

Ninguno “/DEF” en lapágina 400

/F[REEFORMAT]/NOF[REEFORMAT]

Utiliza la línea de mandatos de formato libre /F “/FREEFORMAT”en la página 400

/GEND[EF]:filenameGenera un archivo .def Ninguno “/GENDEF” en la

página 400

/GENI[MPLIB]:filenameGenera una biblioteca de importación Ninguno “/GI” en la página

401

/H[ELP]Muestra ayuda Ninguno “/HELP” en la

página 401

/L[IST]:filenameGenera un archivo de lista Ninguno “/LIST” en la

página 401

/NOE[XTDICTIONARY]/EXTD[ICTIONARY]

No genera un directorio ampliado en unabiblioteca OMF

/EXTD “/NOEXT” en lapágina 401

/O[UT]:filenameEspecifica el nombre de la biblioteca de salida Ninguno “/OUT” en la

página 402

/Q[UIET], /NOL[OGO]/LO[GO], /NOQ[UIET]

No muestra el banner en el inicio /LO “/QUIET” en lapágina 402

/W[ARN:msgnum,msgnum[,...]]/NOW[ARN:msgnum,msgnum[,...]]

Permite imprimir el número del mensaje deaviso msgnum

Ninguno “/WARN” en lapágina 402

Notas:

1. Las opciones de ILIB no distinguen entre mayúsculas y minúsculas, asíque puede especificarlas en mayúsculas, en minúsculas o en mayúsculasy minúsculas.También puede sustituir un guión (-) por la barra inclinada (/) que vaantes de la opción. Por ejemplo, -FREEFORMAT equivale a/FREEFORMAT.

2. Puede especificar opciones en formato breve o largo. Por ejemplo, /F,/FR y /FREE equivalen a /FREEFORMAT.

A continuación encontrará más información sobre cada opción de ILIB.

Utilizar ILIB en Windows

Capítulo 20. Utilizar el gestor de biblioteca de IBM en Windows 399

Page 422: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

/?

�� /? ��

Utilice /? para mostrar una lista de opciones ILIB válidas. Esta opción equivale a/HELP.

/BACKUP

��/BA[CKUP]/NOBA[CKUP] ��

Utilice /BACKUP para realizar una copia de seguridad del archivo de salida (siexiste) entes de sobrescribirlo.

ILIB utiliza el nombre base de la biblioteca como nombre de la biblioteca de copiade seguridad, y le añade la extensión .bak. por ejemplo, si la biblioteca que semodifica es mylib.lib y se solicita una copia de seguridad, ILIB creará mylib.baken el directorio actual.

/DEF

�� /DEF :filename ��

Utilice /DEF para especificar el nombre del archivo .def que se va a utilizar paraconseguir información sobre los símbolos exportados y los parámetros delenlazador.

Esta opción no es obligatoria ya que ILIB reconocerá los archivos .def por sucontenido si se colocan con otros archivos de entrada en la línea de mandatos.

/FREEFORMAT

��/F[REEFORMAT]/NOF[REEFORMAT] ��

Utilice la opción /FREEFORMAT para decirle a ILIB que está utilizando la línea demandatos de formato libre. La línea de mandatos de formato libre le permiteespecificar argumentos de entrada ILIB las veces que quiera y en cualquier orden.

Nota: Esta opción tiene que especificarse inmediatamente después de ilib en lalínea de mandatos, o como primer argumento en la variable de entorno ILIB.Si no especifica /FREEFORMAT o /NOFREEFORMAT, ILIB asumirá el valorpredeterminado de línea de mandatos de formato libre.

/GENDEF

��/GEND[EF]:

filename ��

Utilizar ILIB en Windows

400 PL/I for WindowsGuía de programación

Page 423: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Utilice la opción /GENDEF para crear un archivo de definición de módulo (.def).

Ejemplo

El siguiente mandato crea el archivo de definición del módulo sample.def a partirde la DLL sample.dll.

ilib /gd:sample.def sample.dll

/GI

�� /GENI[IMPLIB] :filename ��

Utilice la opción /GENIMPLIB para crear un par importar biblioteca/exportarobjeto.

Ejemplo

El mandato anterior creará una biblioteca de importación denominada sample.lib yun objeto de exportación denominadosample.exp a partir del archivo de definiciónde módulosample.def. Sin embargo, si no se incluyen símbolos exportados, no secreará la biblioteca sample.lib.

ilib /gi sample.def

/HELP

�� /H[ELP] ��

Utilice /HELP para mostrar una lista de opciones ILIB válidas. Esta opciónequivale a /?.

/LIST

�� /L[IST] nombre de archivo ��

Utilice la opción /LIST para generar un archivo de lista. Si no es especifica nombrede archivo, ILIB añadirá la extensión .lst al nombre de archivo de entrada.

Ejemplo

El siguiente mandato dirige ILIB para coloca una lista de los contenidos demylib.lib en el archivo mylib.lst. No se proporciona ninguna especificación devía de acceso para mylib.lst. De forma predeterminada, el archivo creado secoloca en el directorio actual.

ilib mylib /list:mylib.lst

Nota: La opción /LISTLEVEL no es compatible en la release de ILIB de Windows.

/NOEXT

Utilizar ILIB en Windows

Capítulo 20. Utilizar el gestor de biblioteca de IBM en Windows 401

Page 424: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

��

/NOE[XTDICTIONARY]/EXTD[ICTIONARY]

��

Utilice /NOEXTDICTIONARY para inhabilitar la generación del diccionarioampliado.

El diccionario ampliado es un componente opcional de la biblioteca que aumentala velocidad de enlace. Sin embargo, el uso de un diccionario ampliado requieremás memoria. El espacio reservado para el diccionario ampliado está limitado a64K. Si ILIB informa de un error de falta de espacio, es posible que quiera utilizaresta opción. Como alternativa, puede partir bibliotecas más grandes en otras máspequeñas para utilizar en enlaces.

/OUT

�� ��

/QUIET

�� ��

Utilice las opciones /QUIET o /NOLOGO para suprimir el aviso de copyrightILIB.

/WARN

�� ��

Utilice la opción /WARN para habilitar la impresión del número de mensajeespecificada en el parámetro msgnum.

Utilizar ILIB en Windows

402 PL/I for WindowsGuía de programación

Page 425: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 21. Convenios de llamada

Este capítulo trata los convenios de llamada utilizados por PL/I for Windows:OPTLINKSYSTEMSTDCALLCDECL

El convenio de enlace OPTLINK (consulte “Enlace OPTLINK” en la página 404para obtener más información) también es compatible con VisualAge para C++(OS/2 y Windows) y es el método más rápido para llamar a procedimientos PL/I,funcionesC o rutinas del ensamblador. Sin embargo, OPTLINK no es estándar paratodas las aplicaciones Windows.

En Windows, especificar el enlace SYSTEM es lo mismo que el enlace STDCALL yse implementa igual que STDCALL. El compilador, sin embargo, considera que losnombres SYSTEM y STDCALL son distintos y protesta si los mezcla. El conveniode enlace STDCALL se describe en “Enlace STDCALL (solo en Windows)” en lapágina 413.

Puede especificar el convenio de llamada para todas las funciones de un programautilizando la subopción LINKAGE de la opción en tiempo de compilaciónDEFAULT. También puede utilizar la opción LINKAGE del atributo OPTIONS paraespecificar el enlace de funciones individuales.

Nota: No puede llamar a una función utilizando un convenio de llamada distintoal utilizado para compilarla. Por ejemplo, si una función se compila con elenlace SYSTEM, después no puede llamarla especificando el enlaceOPTLINK.

Consideraciones de enlaceEn Windows, hay tren enlaces primarios que soporta el compilador PL/I:OPTLINK, CDECL y STDCALL. En Windows, todos los servicios del sistemautilizan el enlace STDCALL.

Estos enlaces difieren en sus convenciones para pasar parámetros:v El enlace OPTLINK es el único que intenta pasar algunos parámetros de los

registros; los otros enlaces pasan todos los parámetros de la pila.v El enlace es el único que hace que el receptor de la llamada sea responsable de

limpiar la pila; en los otros enlaces el emisor es el responsable.

El compilador de PL/I for Windows interpreta cualquier especificación del enlaceSYSTEM como si se pretendiese realizar el enlace STDCALL. El compiladorVisualAge C hace lo mismo.

En Windows, se adornan todos los nombres externos. Si el atributo externo noespecifica un nombre, el adorno del nombre depende del enlace:v A las rutinas con enlace CDECL se les añade un '_' como prefijo, de forma que

FUNKY pasaría a ser _FUNKY.v A las rutinas con enlace OPTLINK se les añade un '?' como prefijo, de forma que

el nombre FUNKY pasaría a ser ?FUNKY.

© Copyright IBM Corp. 1998, 2013 403

Page 426: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v A las rutinas con enlace STDCALL se les añade un '_' como prefijo y una '@'seguida de los bytes utilizados por sus parámetros como sufijo. Por ejemplo, siel nombre FUNKY tuviese dos punteros byvalue (por valor) o cualquierparámetro byaddr (por dirección), se convertiría en _FUNKY@8.

Una consecuencia de estos adornos de nombres que si el emisor de la llamada deuna rutina especifica el enlace erróneo para esa rutina, el programa no se puedeenlazar.

De momento, el debate sobre adornos de nombres solo se aplicado a las rutinascuyos atributos externos no especifican un nombre. También se aplica cuando elatributo externo especifica un nombre que solo se distingue del nombre declaradoen el uso de mayúsculas y minúsculas. En estas situaciones, el nombre especificadocomo parte del atributo externo se adorna.

Por ejemplo, dada la siguiente declaración, el nombre que ve el enlazador es?getenv.

dcl getenv ext(’getenv’)entry( char(*) varz byaddr nonasgn )returns( pointer )options( nodescriptor linkage(optlink) );

De igual modo, en la siguiente declaración (para la rutina del sistema Windowsque carga una DLL), se adorna el nombre especificado como parte del atributoexterno y el enlazador ve el nombre como _LoadLibraryA@4.

dcl loadlibrarya ext(’LoadLibraryA’)entry( char(*) varz byaddr nonasgn )returns( pointer byvalue )options( linkage(stdcall) nodescriptor );

Sin embargo, si se especifica un nombre como parte del atributo externo y elnombre difiere del nombre declarado en más aspectos que en el uso de mayúsculasy minúsculas, no se adorna el nombre.

Por ejemplo, dada la siguiente declaración, no se añade ningún adorno y elnombre que ve el enlazador es ?getenv.

dcl getenv ext(’?getenv’)entry( char(*) varz byaddr nonasgn )returns( pointer )options( nodescriptor linkage(optlink) );

Añadir adornos al nombre como se muestra en este último ejemplo, suele hacerque el código sea menos transferible. Por ejemplo, solo la primera declaración degetenv de los ejemplos anteriores es válida para Windows y AIX.

Enlace OPTLINKEs el convenio de llamada predeterminado. Es una alternativa al enlace SYSTEMque suele utilizarse para llamadas al sistema operativo. Este enlace proporciona unmejor rendimiento total que el enlace SYSTEM.

Características de OPTLINKLa convención OPTLINK tiene las siguientes características:v Los parámetros se pasan de derecha a izquierda en la pila.v El interlocutor limpia la pila.v Los registros generales EBX, EDI y ESI están protegidos en la llamada.

Consideraciones de enlace

404 PL/I for WindowsGuía de programación

Page 427: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v Los registros generales EAX, ECX y EDX no están protegidos en la llamada.v Los registros de coma flotante no están protegidos en la llamada.v Los tres parámetros conformes que están léxicamente más a la izquierda (los

parámetros conformes son las direcciones de todos los parámetros BYADDR ylos siguientes valores BYVALUE: puntero, descriptor de contexto,desplazamiento, entrada limitada, binario fijo real, carácter(1) y bits no variablesque ocupan 1 byte o menos) se pasan en tres registros generales no protegidos.

v Se pasan hasta cuatro parámetros de coma flotante reales o dos parámetroscomplejos (los cuatro primeros desde el punto de vista léxico) en un formato deprecisión ampliada (80 bits) en la pila de registro de coma flotante.

v Todos los parámetros conformes que no se pasen en registros y todos losparámetros no conformes se pasan en la pila 80386.

v El espacio para los parámetros de registros se asigna en la pila, pero losparámetros no se copian en ese espacio.

v Los valores de retorno conformes se devuelven en EAX.v Los valores de retorno de coma flotante se devuelven en formato de precisión

ampliada en el registro superior de la pila de coma flotante.v Los valores de retorno de coma flotante complejos se devuelven en formato de

precisión ampliada en los dos registros superiores de la pila de coma flotante.v Cuando invoca a funciones externas, la pila de registros de coma flotante

contiene únicamente registros de parámetros válidos en entrada y valores deretorno válidos en salida.

v Las funciones que devuelven agregados pasan la dirección de un área dealmacenamiento determinada por el interlocutor como parámetro oculto. Esteárea se convierte en el agregado devuelto. La dirección de este agregado sedevuelve en EAX.

v El distintivo de dirección tiene que estar claro en la entrada a funciones y en lasalida de funciones. El estado del resto de distintivos se ignora en la entrada auna función y está sin definir a la salida.

v El compilador no cambia el contenido del registro de control de coma flotante. Siquiere cambiar el contenido del registro de control para una operacióndeterminada, guarde el contenido antes de realizar cambios y restáurelo despuésde la operación.

Consejos para utilizar OPTLINKPuede mejorar el rendimiento de sus aplicaciones siguiendo los consejos aquíexpuestos cuando utilice el enlace OPTLINK.v Los parámetros de coma flotante y conformes más utilizados tienen que estar

léxicamente a la izquierda de la lista de parámetros para que se consideren comoregistros antes. Si están uno junto a otro, la preparación de la lista de parámetrosserá más rápida.

v Si tiene un parámetro que se utiliza cerca del final de una función, colóquelo alfinal o cerca del final de una lista de parámetros. Si todos sus parámetros seutilizan cerca del final de funciones, utilice el enlace SYSTEM.

v Compilar con OPTIMIZE. (Consulte “OPTIMIZE” en la página 101.)

Implicaciones del registro general

ParámetrosEAX, EDX y ECX se utilizan para los tres primeros parámetros léxicamenteconformes, conteniendo EAX el primer parámetro, EDX el segundo y ECX el

Enlace OPTLINK

Capítulo 21. Convenios de llamada 405

Page 428: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

tercero. Se asignan cuatro bytes del almacenamiento de pila para cada parámetrode registro que esté presente, pero los parámetros solo existen en los registros en elmomento de la llamada.

Ejemplos de pasos de parámetrosLos siguientes ejemplos se incluyen solo a modo ilustrativo y no se hanoptimizado. En estos ejemplos se asume que conoce la programación en unensamblador. En cada ejemplo, la pila crece hacia el final de la página y ESPsiempre apunta al inicio de la pila.

Paso de parámetros a una rutinaEl siguiente ejemplo muestra las secuencias de código u una imagen de la pilapara una llamada a la función FUNC1. Se asume que el programa se compila conla opción PREFIX(NOFIXEDOVERFLOW).dcl func1 entry( char(1),

fixed bin(15),fixed bin(31),fixed bin(31) )

returns( fixed bin(31) )options( byvalue nodescriptor );

dcl x fixed bin(15);dcl y fixed bin(31);

y = func1(’A’, x, y+x, y);

caller’s Code Up Until Call:

PUSH y ; Push p4 onto the 80386 stackSUB ESP, 12 ; Allocate stack space for

; register parametersMOV AL, ’A’ ; Put p1 into ALMOV DX, x ; Put p2 into DXMOVSX ECX, DX ; Sign-extend x to longADD ECX, y ; Calculate p3 and put it into ECXCALL FUNC1 ; Make call

callee’s Prolog Code:

PUSH EBP ; Save caller’s EBPMOV EBP, ESP ; Set up callee’s EBPSUB ESP, callee’s local size ; Allocate callee’s LocalPUSH EBX ; Save preserved registers -PUSH EDI ; will optimize to savePUSH ESI ; only registers callee uses

Stack Just After Call Register Set Just After Call

. . ┌─────────┬────┬───┐│ caller’s Local │ EAX │ undefined │p1 │├───────────────────┤ ├─────────┼────┼───┤│ p4 │ EBX │ caller’s EBX │├───────────────────┤ ├─────────┼────┼───┤│ Blank Slot For p3 │ ECX │ p3 │ │├───────────────────┤ ├─────────┼────┼───┤│ Blank Slot For p2 │ EDX │undefined│ p2 │├───────────────────┤ ├─────────┼────┴───┤│ Blank Slot For p1 │ EDI │ caller’s EDI │├───────────────────┤ ├─────────┼────────┤│ caller’s EIP │ ESI │ caller’s ESI │

ESP ───� └───────────────────┘ └─────────┴────────┘

Implicaciones del registro general

406 PL/I for WindowsGuía de programación

Page 429: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Stack After Prolog Register Set After Prolog

. . ┌──────────┬────┬────┐│ caller’s Local │ EAX │ undefined │p1 │├──────────────────┤ ├──────────┼────┼────┤│ p4 │ EBX │ undefined │├──────────────────┤ ├──────────┼────┴────┤│Blank Slot For p3 │ ECX │ p3 │├──────────────────┤ ├──────────┼────┬────┤│Blank Slot For p2 │ EDX │undefined │ p2 │├──────────────────┤ ├──────────┼────┴────┤│Blank Slot For p1 │ EDI │ undefined │├──────────────────┤ ├──────────┼─────────┤│ caller’s EIP │ ESI │ undefined │├──────────────────┤ └──────────┴─────────┘│ caller’s EBP │├──────────────────┤ The term "undefined" in│ │ registers EBX, EDI and ESI. . refers to the fact that they. callee’s Local . can be safely overwritten by. . the code in FUNC1.│ │├──────────────────┤│ Saved EBX │├──────────────────┤│ Saved EDI │├──────────────────┤│ Saved ESI │

ESP ───� └──────────────────┘

callee’s Epilog Code:

MOV EAX, RetVal ; Put return value in EAXPOP ESI ; Restore preserved registersPOP EDIPOP EBXMOV ESP, EBP ; Deallocate callee’s localPOP EBP ; Restore caller’s EBPRET ; Return to caller

caller’s Code Just After Call:

ADD ESP, 16 ; Remove parameters from stackMOV y, EAX ; Use return value.

Stack After Epilog Register Set After Epilog

. . ┌─────────┬────┬──┐│ caller’s Local │ EAX │ Return │Value │├──────────────────┤ ├─────────┼────┼──┤│ p4 │ EBX │ caller’s EBX │├──────────────────┤ ├─────────┼────┼──┤│Blank Slot For p3 │ ECX │ undefined │├──────────────────┤ ├─────────┼────┼──┤│Blank Slot For p2 │ EDX │ undefined │├──────────────────┤ ├─────────┼────┴──┤│Blank Slot For p1 │ EDI │ caller’s EDI ││ │ ├─────────┼───────┤

ESP ───� └──────────────────┘ ESI │ caller’s ESI │└─────────────────┘

Implicaciones del registro general

Capítulo 21. Convenios de llamada 407

Page 430: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Paso de parámetros de coma flotante a una rutina:

El siguiente ejemplo muestra las secuencias de código, diseños de pila 80386 y losestados de pila de registro de coma flotante de una llamada a la rutina FUNC2.Para simplificarlo, no se muestran los registros generales. Se asume que elprograma se compila con la opción IMPRECISE.dcl func2 entry( float bin(21),

float bin(53),float bin(64),float bin(21),float bin(53) )

returns( float bin(53) )options( byvalue nodescriptor );

dcl (a, b, c) float bin(53);dcl (d, e) float bin(21);

a = b + func2(a, d, prec(a + c, 53), e, c);

caller’s Code Up Until Call:

PUSH 2ND DWORD OF c ; Push upper 4 bytes of c onto stackPUSH 1ST DWORD OF c ; Push lower 4 bytes of c onto stackFLD DWORD_PTR e ; Load e into 80387, promotion

; requires no conversion codeFLD QWORD_PTR a ; Load a to calculate p3FADD ST(0), QWORD_PTR c ; Calculate p3, result is float bin(64)

; from nature of 80387 hardwareFLD QWORD_PTR d ; Load d, no conversion necessaryFLD QWORD_PTR a ; Load a, demotion requires conversionFSTP DWORD_PTR [EBP - T1] ; Store to a temp (T1) to convert to floatFLD DWORD_PTR [EBP - T1] ; Load converted value from temp (T1)SUB ESP, 32 ; Allocate the stack space for

; parameter listCALL FUNC2 ; Make call

Stack After Cleanup Register Set After Cleanup

. . ┌─────────┬────┬──┐│caller’s Local │ EAX │ Return │Value │

ESP ───� └───────────────┘ ├─────────┼────┼──┤EBX │ caller’s EBX │

├─────────┼────┼──┤ECX │ undefined │

├─────────┼────┼──┤EDX │ undefined │

├─────────┼────┴──┤EDI │ caller’s EDI │

├─────────┼───────┤ESI │ caller’s ESI │

└─────────────────┘

Implicaciones del registro general

408 PL/I for WindowsGuía de programación

Page 431: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

callee’s Prolog Code:

PUSH EBP ; Save caller’s EBPMOV EBP, ESP ; Set up callee’s EBPSUB ESP, callee’s local size ; Allocate callee’s LocalPUSH EBX ; Save preserved registers -PUSH EDI ; will optimize to savePUSH ESI ; only registers callee uses

Stack Just After Call 80387 Register Set Just After Call

┌ ┐ ┌──────────────────┐│ caller’s Local │ ST(7) │ Empty │├────────────────────┤ ├──────────────────┤│Upper Dword of p5 │ ST(6) │ Empty │├─ ── ── ── ── ── ─ ─┤ ├──────────────────┤│Lower Dword of p5 │ ST(5) │ Empty │├────────────────────┤ ├──────────────────┤│Blank Dword for p4 │ ST(4) │ Empty │├────────────────────┤ ├──────────────────┤│ Four │ ST(3) │ p4 (e) │├─ ── ── ── ── ── ─ ─┤ ├──────────────────┤│ Blank │ ST(2) │ p3 (a + c) │├─ ── ── ── ── ── ─ ─┤ ├──────────────────┤│ Dwords │ ST(1) │ p2 (d) │├─ ── ── ── ── ── ─ ─┤ ├──────────────────┤│ for p3 │ ST(0) │ p1 (a) │├────────────────────┤ └──────────────────┘│ Two Blank │├─ ── ── ── ── ── ─ ─┤│ Dwords for p2 │├────────────────────┤│Blank Dword for p1 │├────────────────────┤│ caller’s EIP │

ESP ───� └────────────────────┘

Implicaciones del registro general

Capítulo 21. Convenios de llamada 409

Page 432: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

callee’s Epilog Code:

FLD RETVAL ; Load return value onto floating-point stackPOP ESI ; Restore preserved registersPOP EDIPOP EBXMOV ESP, EBP ; Deallocate callee’s localPOP EBP ; Restore caller’s EBPRET ; Return to caller

Stack After Prolog 80387 Register Set After Prolog

. . ┌────────────────┐│ caller’s Local │ ST(7) │ Empty │├───────────────────┤ ├────────────────┤│Upper Dword of p5 │ ST(6) │ Empty │├─ ── ── ── ── ── ──┤ ├────────────────┤│Lower Dword of p5 │ ST(5) │ Empty │├───────────────────┤ ├────────────────┤│Blank Dword for p4 │ ST(4) │ Empty │├───────────────────┤ ├────────────────┤│ Four │ ST(3) │ p4 │├─ ── ── ── ── ── ──┤ ├────────────────┤│ Blank │ ST(2) │ p3 │├─ ── ── ── ── ── ──┤ ├────────────────┤│ Dwords │ ST(1) │ p2 │├─ ── ── ── ── ── ──┤ ├────────────────┤│ for p3 │ ST(0) │ p1 │├───────────────────┤ └────────────────┘│ Two Blank │├─ ── ── ── ── ── ──┤│ Dwords for p2 │├───────────────────┤│Blank Dword for p1 │├───────────────────┤│ caller’s EIP │├───────────────────┤│ caller’s EBP │├───────────────────┤│ │. .. callee’s Local .. .│ │├───────────────────┤│ Saved EBX │├───────────────────┤│ Saved EDI │├───────────────────┤│ Saved ESI │

ESP ───� └───────────────────┘

Implicaciones del registro general

410 PL/I for WindowsGuía de programación

Page 433: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

caller’s Code Just After Call:

ADD ESP, 40 ; Remove parameters from stackFADD QWORD_PTR b ; Use return valueFSTP QWORD_PTR a ; Store expression to variable a

Enlace SYSTEMPara utilizar esta convención de enlace, tiene que especificar el atributoOPTIONS(LINKAGE(SYSTEM)) en la declaración de la función, o especificar laopción en tiempo de compilación DEFAULT(LINKAGE(SYSTEM)).

Características de SYSTEMLas reglas siguientes se aplican a la convención de enlace SYSTEM:v Todos los parámetros se pasan en la pila 80386.v Los parámetros se llevan a la pila de derecha a izquierda.

Stack After Epilog 80387 Register Set After Epilog

. . ┌─────────────────┐│ caller’s Local │ ST(7) │ Empty │├────────────────────┤ ├─────────────────┤│Upper Dword of p5 │ ST(6) │ Empty │├─ ── ── ── ── ── ─ ─┤ ├─────────────────┤│Lower Dword of p5 │ ST(5) │ Empty │├────────────────────┤ ├─────────────────┤│Blank Dword for p4 │ ST(4) │ Empty │├────────────────────┤ ├─────────────────┤│ Four │ ST(3) │ Empty │├─ ── ── ── ── ── ─ ─┤ ├─────────────────┤│ Blank │ ST(2) │ Empty │├─ ── ── ── ── ── ─ ─┤ ├─────────────────┤│ Dwords │ ST(1) │ Empty │├─ ── ── ── ── ── ─ ─┤ ├─────────────────┤│ for p3 │ ST(0) │ Return Value │├────────────────────┤ └─────────────────┘│ Two Blank │├─ ── ── ── ── ── ─ ─┤│ Dwords for p2 │├────────────────────┤│Blank Dword for p1 │

ESP ───� └────────────────────┘

Stack After Cleanup 80387 Register Set After Cleanup

. . ┌───────────────────┐│ caller’s Local │ ST(7) │ Empty ││ │ ├───────────────────┤

ESP ───� └────────────────┘ ST(6) │ Empty │├───────────────────┤

ST(5) │ Empty │├───────────────────┤

ST(4) │ Empty │├───────────────────┤

ST(3) │ Empty │├───────────────────┤

ST(2) │ Empty │├───────────────────┤

ST(1) │ Empty │├───────────────────┤

ST(0) │ Return Value │└───────────────────┘

Implicaciones del registro general

Capítulo 21. Convenios de llamada 411

Page 434: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v La función de llamada es responsable de eliminar los parámetros de la pila.v Todos los parámetros son palabras dobles (4 byte) alineadas.v Los valores se devuelven de las misma forma que el enlace OPTLINK.v El distintivo de dirección tiene que estar claro a la entrada a las funciones y a la

salida de las funciones. El estado del resto de distintivos se ignora en la entradaa una función y está sin definir a la salida.

v El compilador no cambia el contenido del registro de control de coma flotante. Siquiere cambiar el contenido del registro de control para una operacióndeterminada, guarde el contenido antes de realizar cambios y restáurelo despuésde la operación.

Ejemplo de uso del enlace SYSTEMEl siguiente ejemplo se incluye solo a modo ilustrativo y no se ha optimizado. Eneste ejemplo se asume que conoce la programación en un ensamblador. En elejemplo, la pila crece hacia el final de la página y ESP siempre apunta al inicio dela pila.

El siguiente ejemplo muestra las secuencias de código u una imagen de la pilapara una llamada a la función FUNC3 que tiene dos variables locales x e y (ambasfixed bin (31)). Para la llamadadcl func3 entry( fixed bin(31),

fixed bin(31),fixed bin(31) )

returns( fixed bin(31) )options( byvalue nodescriptor linkage(system) );

m = func3(a,b,c);

la pila de la llamada a FUNC3 tendría este aspecto:Stack

┌───────────────────────┐ Higher Memory│ c │├───────────────────────┤│ b │├───────────────────────┤│ a │├───────────────────────┤│ caller’s EIP │├───────────────────────┤│ caller’s EBP │

EBP ─────→ ├───────────────────────┤│ x │├───────────────────────┤│ y │├───────────────────────┤ �─┐│ Saved EDI │ │├───────────────────────┤ │These would only│ Saved ESI │ │be pushed if they├───────────────────────┤ │were used in this│ Saved EBX │ │function.

ESP ─────→ └───────────────────────┘ ←─┘Lower Memory

Las instrucciones utilizadas para crear este registro de activación en la pila tieneeste aspecto en el lado de la llamada:

PUSH cPUSH bPUSH a

Enlace SYSTEM

412 PL/I for WindowsGuía de programación

Page 435: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

MOV AL, 3HCALL func3

.

.ADD ESP, 12 ; Cleaning up the parameters

.

.MOV m, EAX

.

.

Para el llamado, el código tiene este aspecto:func3 PROC

PUSH EBPMOV EBP, ESP ; Allocating 8 bytes of storageSUB ESP, 8 ; for two local variables.PUSH EDI ; These would only bePUSH ESI ; pushed if they were usedPUSH EBX ; in this function...MOV EAX, [EBP - 8] ; Load y into EAXMOV EBX, [EBP + 12] ; Load b into EBX..XOR EAX, EAX ; Zero the return valuePOP EBX ; Restore the saved registersPOP ESIPOP EDILEAVE ; Equivalent to MOV ESP, EBP

; POP EBPRET

func3 ENDP

El conjunto de registros guardados es EBX, ESI y EDI. Una rutina llamada puedemodificar el contenido de los otros registros (EAX, ECX y EDX).

En algunas circunstancias, el compilador no utiliza EBP para acceder a valores deparámetro y automáticos, por lo que se aumenta la eficiencia de la aplicación.Independientemente de si se utiliza o no, EBP no varía durante la llamda.

Cuando se pasan agregados por valor, el compilador genera código para copiar elagregado en la pila 80386. Si el tamaño del agregado es mayor que un tamaño depágina de 80386 (4K), el compilador genera código para copiar el agregado haciaatrás (es decir, el último byte del agregado será el primero que se copie).

Los agregados no se devuelven a la pila. El interlocutor envía la dirección en laque se va a colocar el agregado devuelto como primer parámetro léxicamenteoculto. Una función que devuelve un agregado tiene que tener en cuenta que todoslos parámetros están 4 bytes más lejos de EBP de lo que estarían si no hubieraningún agregado implicado. La dirección del agregado devuelto se devuelve enEAX.

Enlace STDCALL (solo en Windows)Para utilizar esta convención de enlace, tiene que especificar el atributoOPTIONS(LINKAGE(STDCALL)) en la declaración de la función, o especificar laopción en tiempo de compilación DEFAULT(LINKAGE(STDCALL)).

Enlace SYSTEM

Capítulo 21. Convenios de llamada 413

Page 436: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Características de STDCALLLas reglas siguientes se aplican a la convención de llamada STDCALL:v Todos los parámetros se pasan a la pila.v Los parámetros se llevan a la pila en orden léxico de derecha a izquierda.v La función llamada elimina los parámetros de la pila.v Los valores de coma flotante se devuelven en ST(0), el registro superior de la

pila de registro de coma flotante. Las funciones que devuelven valoresagregados los devuelven de la siguiente manera:

Tamaño del agregadoValor devuelto en

8 bytespar EAX-EDX

5, 6, 7 bytesEAX La dirección para colocar los valores de retorno se pasa como unparámetro oculto en EAX.

4 bytesEAX

3 bytesEAX La dirección para colocar los valores de retorno se pasa como unparámetro oculto a EAX.

2 bytesAX

1 byte ALEn las funciones que devuelven agregados de 5, 6, 7 o más de 8 bytes detamaño, la dirección para colocar los valores de retorno se pasa como parámetrooculto, y la dirección se vuelve a pasar en EAX.

v STDCALL tiene la restricción de que una función STDCALL sin prototipo con unnúmero variable de argumentos no funcionará.

v Los nombres de las funciones se adornan con un guión bajo y un sufijo queconsta de una arroba (@) seguida del número de bytes de parámetros (endecimal). Los parámetros de menos de cuatro bytes se redondean hasta los 4bytes. Los tamaños de estructura también se redondean hasta un múltiplo de 4bytes. Por ejemplo, imagine una función fred con el siguiente prototipo:

dcl fred ext entry (fixed bin(31) byvalue, fixed bin(31) byvalue,fixed bin(15) byvalue);

It would appear as follows in the object module:_FRED@12

Cuando se crean listas de exportación en archivos .DEF, debe utilizarse la versiónadornada del nombre. Si utiliza los nombres sin adornar en el archivo DEF, tieneque entregar los archivos de objeto a ILIB junto con el archivo DEF. ILIB utiliza losarchivos de objeto para determinar cómo terminaba cada nombres después deladorno.

Ejemplos de uso de la convención STDCALLLos siguientes ejemplos se incluyen a modo ilustrativo. En estos ejemplos se asumeque conoce la programación en un ensamblador. En los ejemplos, la pila crecehacia el final de la página y ESP siempre apunta al inicio de la pila.

Enlace STDCALL

414 PL/I for WindowsGuía de programación

Page 437: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Para la siguiente llamada, a, b, y c son enteros de 32 bits y func tiene dosvariables locales, x y y (ambas enteros de 32 bits):

m = func(a,b,c)

La pila para la llamada a FUNC tendría este aspecto:Stack

┌───────────────────────┐ Higher Memory│ c │├───────────────────────┤│ b │├───────────────────────┤│ a │├───────────────────────┤│ caller’s EIP │├───────────────────────┤│ caller’s EBP │

EBP ─────� ├───────────────────────┤│ x │├───────────────────────┤│ y │├───────────────────────┤ �─┐│ Saved EDI │ │├───────────────────────┤ │These would only│ Saved ESI │ │be pushed if they├───────────────────────┤ │were used in this│ Saved EBX │ │function.

ESP ─────� └───────────────────────┘ �─┘Lower Memory

Las instrucciones utilizadas para crear este registro de activación en la pila tieneeste aspecto en el lado de la llamada:

PUSH cPUSH bPUSH aCALL _func@12

.

.MOV m, EAX

.

.

Para el llamado, el código tiene este aspecto:_func@12 PROC

PUSH EBPMOV EBP, ESP ; Allocating 8 bytes of storageSUB ESP, 8 ; for two local variables.PUSH EDI ; These would only bePUSH ESI ; pushed if they were usedPUSH EBX ; in this function...MOV EAX, [EBP - 8] ; Load y into EAXMOV EBX, [EBP + 12] ; Load b into EBX..XOR EAX, EAX ; Zero the return valuePOP EBX ; Restore the saved registersPOP ESIPOP EDILEAVE ; Equivalent to MOV ESP, EBP

; POP EBPRET 0CH

_func@12 ENDP

Enlace STDCALL

Capítulo 21. Convenios de llamada 415

Page 438: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

El conjunto de registros guardados es EBX, ESI y EDI.

Las estructuras no se devuelven a la pila. El interlocutor envía la dirección en laque se va a colocar la estructura devuelta como primer parámetro léxicamenteoculto. Una función que devuelve una estructura tiene que tener en cuenta quetodos los parámetros están cuatro bytes más lejos de EBP de lo que estarían si nohubiera ningún estructura implicada. La dirección de la estructura devuelta sedevuelve en EAX.

Utilizar WinMain (solo en Windows)Puede utilizar WinMain especificando OPTIONS(WINMAIN) en la sentencia deprocedimiento (consulteReferencia de lenguaje PL/I para ver la sintaxis). Estoimplica automáticamente LINKAGE(STDCALL) yEXT('WinMain').

Su rutina WinMain necesita cuatro parámetros:v Un descriptor de contexto de instanciav Un descriptor de contexto anteriorv Un puntero a la línea de mandatosv Un entero para pasar a ShowWindow

Son los mismos cuatro parámetros que espera WinMain en C. Las llamadas hechasdentro de esta rutina son las mismas que las que se esperan de una rutina en C.

En el directorio de muestras se incluye un ejemplo de guisamp.pli (consulte elprólogo del programa para obtener más información).

Enlace CDECLPara utilizar esta convención de enlace, tiene que especificar el atributoOPTIONS(LINKAGE(CDECL)) en la declaración de la función, o especificar laopción en tiempo de compilación DEFAULT(LINKAGE(CDECL)).

Características de CDECLLas reglas siguientes se aplican a la convención de llamada CDECL:v Todos los parámetros se pasan a la pila.v Los parámetros se llevan a la pila en orden léxico de derecha a izquierda.v La función que llama elimina los parámetros de la pila.v Los valores de coma flotante se devuelven en ST(0). Todas las funciones que

devuelven valores que no sean de coma flotante los devuelven en EAX, exceptoen el caso especial de devolver agregregados con un tamaño menor que o iguala 8 bytes. En las funciones que devuelven agregados con un tamaño menor queo igual a 4 bytes, los valores se devuelven de la siguiente manera:

Tamaño del agregadoValor devuelto en

8 bytespar EAX-EDX

5, 6, 7 bytesEAX La dirección para colocar los valores de retorno se pasa como unparámetro oculto en EAX.

4 bytesEAX

Enlace STDCALL

416 PL/I for WindowsGuía de programación

Page 439: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

3 bytesEAX La dirección para colocar los valores de retorno se pasa como unparámetro oculto a EAX.

2 bytesAX

1 byte ALEn las funciones que devuelven agregados de 5, 6, 7 o más de 8 bytes detamaño, la dirección para colocar los valores de retorno se pasa como parámetrooculto, y la dirección se vuelve a pasar en EAX.

v Los nombres de función se adornan con un prefijo de guión bajo cuandoaparecen en módulos de objeto. Por ejemplo, una función denominada fred enel programa fuente aparecería como _fred en el objeto.

Cuando se crean listas de exportación o importación en archivos .DEF, debeutilizarse la versión adornada del nombre. Si utilizó los nombres sin adornar en elarchivo DEF, tiene que entregar los archivos de objeto a ILIB junto con el archivoDEF. ILIB utiliza los archivos de objeto para determinar cómo terminaba cadanombres después del adorno.

Ejemplos de uso de la convención CDECLLos siguientes ejemplos se incluyen a modo ilustrativo. No se han optimizado. Enestos ejemplos se asume que conoce la programación en un ensamblador. En losejemplos, la pila crece hacia el final de la página y ESP siempre apunta al inicio dela pila.

Considere la siguiente llamada:m = func(a,b,c);

Las variables a, b, y c son enteros de 32 bits y FUNC tiene dos variables locales, xy y (ambas enteros de 32 bits).

La pila para la llamada a FUNC tendría este aspecto:Stack

┌───────────────────────┐ Higher Memory│ c │├───────────────────────┤│ b │├───────────────────────┤│ a │├───────────────────────┤│ caller’s EIP │├───────────────────────┤│ caller’s EBP │

EBP ─────� ├───────────────────────┤│ x │├───────────────────────┤│ y │├───────────────────────┤ �─┐│ Saved EDI │ │├───────────────────────┤ │These would only│ Saved ESI │ │be pushed if they├───────────────────────┤ │were used in this│ Saved EBX │ │function.

ESP ─────� └───────────────────────┘ �─┘Lower Memory

Enlace CDECL

Capítulo 21. Convenios de llamada 417

Page 440: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Las instrucciones utilizadas para crear este registro de activación en la pila tieneeste aspecto en el lado de la llamada:

PUSH cPUSH bPUSH aCALL _func

.

.ADD ESP, 12 : cleaning up the parameters

.

.MOV m, EAX

.

.

Para el llamado, el código tiene este aspecto:_func PROC

PUSH EBPMOV EBP, ESP ; Allocating 8 bytes of storageSUB ESP, 08H ; for two local variables.PUSH EDI ; These would only bePUSH ESI ; pushed if they were usedPUSH EBX ; in this function...MOV EAX, [EBP - 8] ; Load y into EAXMOV EBX, [EBP + 12] ; Load b into EBX..XOR EAX, EAX ; Zero the return valuePOP EBX ; Restore the saved registersPOP ESIPOP EDILEAVE ; Equivalent to MOV ESP, EBP

; POP EBPRET

_func ENDP

El conjunto de registros guardados es EBX, ESI y EDI. En el caso en el que laestructura se pase como un parámetro de valor y el tamaño de la estructura sea 5,6, 7 o más de 8 bytes, la dirección para colocar los valores de retorno se pasa comoparámetro oculto, y la dirección se vuelve a pasar en EAX.

Enlace CDECL

418 PL/I for WindowsGuía de programación

Page 441: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 22. Utilizar PL/I en aplicaciones de lenguaje mixto

En el entorno estación de trabajo, hay ocasiones en las que quiere desarrollaraplicaciones de lenguaje mixto con PL/I como uno de los lenguajes implicados.Por ejemplo, una aplicación podría construirse con el programa principal escrito enC y una biblioteca de enlace dinámico (DLL) escrita en PL/I. Otra posibilidad esuna aplicación que utilice REXX que puede cargar y llamar rutinas PL/I incluidasen una biblioteca de enlace dinámico PL/I.

Es posible que quiera construir una aplicación utilizando software de otrovendedor. Al utilizar un programa de otro proveedor, puede proporcionar unasalida de usuario en forma de biblioteca de enlace dinámico escrita en PL/I.

La creación de aplicaciones de lenguaje mixto suele ser un reto y tiene que tener encuenta muchos factores que no existen cuando se codifica en un solo lenguaje.Normalmente, los lenguajes de programación de alto nivel de otros proveedores(como, C, C++, COBOL y PL/I) requieren el uso de entornos de tiempo deejecución específicos como los que implementan las bibliotecas de tiempo deejecución de los distintos lenguajes. Entre las áreas en las que estos lenguajespodrían no funcionar bien juntos se encuentran:v Implementaciones y usos de tipos de datosv Alineaciones de datosv Recursos de manejo de excepcionesv Inicialización y terminación de un entorno de ejecuciónv Rutinas de salida de usuariov Recursos de entrada y salida

Estas inconsistencias pueden provocar un comportamiento en tiempo de ejecucióninesperado que puede surgir en ciertos casos de ejecución de programas delenguaje mixto.

Coincidencia de datos y enlacesPara que una rutina invoque a otra correctamente, las dos rutinas tienen que tenervistas coincidentes de las interfaces compartidas. Cuando una de las rutinas noestá codificada en PL/I, las interfaces están limitadas porv los datos que se pasanv cómo se pasan los datosv dónde se pasan los datos

Las secciones que siguen describen estas situaciones con más detalle. Las vistas nocoincidentes de interfaces compartidas son un problema común en las aplicacionesde lenguaje mixto. Es importante recordar que:v Los argumentos y los parámetros tienen que coincidirv Los datos que se van a recibir por valor tienen que pasarse por valorv Las rutinas que emiten la llamada y las que reciben tienen que utilizar el mismo

enlace.

Qué datos se pasanLas rutinas PL/I y C se comunican pasando y devolviendo datos de tipos de datosequivalentes. Las rutinas PL/I y no PL/I no deberían comunicarse utilizandovariables estáticas externas. Tabla 29 en la página 420 enumera los tipos de datosescalares equivalentes entre PL/I y C.

© Copyright IBM Corp. 1998, 2013 419

Page 442: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 29. Tipos de datos equivalentes entre C y PL/I

Tipo de datos C Tipo de datos PL/I

signed char FIXED BIN(7,0)

unsigned char UNSIGNED FIXED BIN(8,0) or CHAR(1)

signed short FIXED BIN(15,0)

unsigned short UNSIGNED FIXED BIN(16,0)

signed (long) int FIXED BIN(31,0)

unsigned (long) int UNSIGNED FIXED BIN(31,0)

float FLOAT BIN(21) FLOAT DEC(6)

double FLOAT BIN(53) FLOAT DEC(16)

long double FLOAT BIN(64) FLOAT DEC 18)

enum ORDINAL

<non-function-type> * POINTER or HANDLE

<function-type> * ENTRY LIMITED

Tal y como se muestra en la última fila de la tabla, un puntero de función C no esequivalente a una variable de entrada PL/I a no ser que la variable de entrada seaLIMITED. Los fallos provocados por este error son muy difíciles de detectar.

Las matrices de tipos equivalentes on equivalentes siempre y cuando tengan elmismo número de dimensiones y los mismos límites inferiores y superiores. En C,no puede especificar límites inferiores y el límite superior real es uno menos delnúmero especificado. Considere, por ejemplo, esta matriz declarada en C:

short x [ 6 ];

En PL/I, la matriz debería declararse así:dcl x(0:5) fixed bin(15);

Las estructuras y uniones de tipos equivalentes también son equivalentes si suselementos están correlacionados con los mismos desplazamientos. Losdesplazamientos son los mismos si no hay relleno entre los elementos. Si loselementos de una estructura (o unión) son todos UNALIGNED, PL/I no utilizarelleno. Cuando algunos elementos son ALIGNED, puede determinar si hay algúnrelleno examinando el listado AGGREGATE. PL/I considera la serie comoescalares, pero C no; por lo tanto, ninguna de las discusiones anteriores se aplicana estas series.

Los campos de bits de C solo tienen un parecido nominal con las series de bits dePL/I.v Los campos de bits de C están limitados a 32 bits, pero las series de bits de PL/I

pueden tener hasta 32767 bitsv Los campos de bits de C no siempre están correlacionados de izquierda a

derecha. Algunos compiladores C de Intel correlacionarían la siguiente estructutaC como si fuera equivalente a la estructura PL/I:Estructura en C

struct { unsigned byte1 :8;unsigned byte2 :8;unsigned byte3 :8;unsigned byte4 :8;

} bytes;

Coincidencia de datos y enlaces

420 PL/I for WindowsGuía de programación

Page 443: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Estructura en PL/Idcl

1 bytes,2 byte1 bit(8),2 byte2 bit(8),2 byte3 bit(8),2 byte4 bit(8);

Otros compiladores C correlacionarían la estructura original con bytes invertidospara que sea equivalente a la estructura PL/I.Estructura en PL/I

dcl1 bytes,

2 byte4 bit(8),2 byte3 bit(8),2 byte2 bit(8),2 byte1 bit(8);

Estrictamente hablando, C no tiene series de caracteres, sino punteros a caracteres.Sin embargo, por el uso común, una serie C es una secuencia de caracteres de loscuales el último tiene un valor '00'X. Por lo tanto, en el ejemplo siguiente, addresses una "serie" C que podría tener hasta 30 caracteres no nulos.

char address [ 31 ];

La siguiente declaración PL/I se parece más a una "serie" C.dcl address char(30) varyingz;

En las declaraciones de funciones C, las series suelen declararse como char*. Porejemplo, la función de biblioteca C strcspn podría declararse como:

int strcspn( char * string1, char * string2 );

La declaración PL/I para la misma función sería:dcl strcspn entry( char(*) varyingz,

char(*) varyingz )returns( fixed bin(31) );

En los ejemplos anteriores, tanto las declaraciones C como PL/I están incompletas.Las versiones completas se explican más adelante en este capítulo.

Cómo se pasan los datosTanto PL/I como C admiten varios métodos para transferir datos. Para comprenderestos métodos, tiene que conocer los siguientes términos:

ParámetroUna variable declarada en una definición de función o un procedimiento PL/I.Por ejemplo, seed es un parámetro en la siguiente definición de función PL/I.

funky:proc( seed )returns( fixed bin(31) );

dcl seed fixed bin(31);...

end funky;

Coincidencia de datos y enlaces

Capítulo 22. Utilizar PL/I en aplicaciones de lenguaje mixto 421

Page 444: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

ArgumentoUna variable o un valor que se pasa a una rutina. Cuando la función funky (delejemplo anterior) es invocada por rc = funky( seed );, seed es un argumento.

Por valorSe pasa el valor del argumento. Cuando una rutina de llamada pasa unargumento por valor, la rutina llamada no puede alterar el argumento original.

Por direcciónSe pasa la dirección del argumento. Cuando una rutina de llamada pasa unargumento por dirección, la rutina llamada puede alterar el argumento delinterlocutor.

C pasa todos los parámetros por valor, pero PL/I (de forma predeterminada) pasalos parámetros por dirección. PL/I también puede pasar los parámetros por valor,excepto en el caso de matrices, estructuras, uniones y cadenas con la longituddeclarada como *.

Tal y como se describe en Referencia de lenguaje PL/I, puede indicar su un parámetrose pasa por dirección o por valor declarándolo con el atributo BYADDR oBYVALUE. En el siguiente ejemplo, el primer parámetro de modf se pasa por valormientras que el segundo se pasa por dirección.

dcl modf entry( float bin(53) byvalue,float bin(53) byaddr )

returns( float bin(53) );

La declaración correspondiente en C es la siguiente:double modf( double x, double * intptr );

Si los atributos BYADDR o BYVALUE no se han definido explícitamente en ladeclaración, puede especificarlos en la lista de opciones de esa entrada. Lasiguiente declaración utiliza la lista de opciones y la hace equivalente al ejemploanterior.

dcl modf entry( float bin(53),float bin(53) byaddr )

returns( float bin(53) )options( byvalue );

Incluso cuando se pasa un parámetro por dirección, la rutina que se recibe podríano modificar su valor. Puede indicar esto en PL/I añadiendo el atributoNONASSIGNABLE (o NONASGN) a la declaración para el parámetro. Lasiguiente declaración parcial indica que ninguno de los argumentos de la funciónstrcspn se altera por esa función:

dcl strcspn entry( nonasgn char(*) varyingz,nonasgn char(*) varyingz )

returns( fixed bin(31) );

La declaración en C correspondiente es:int strcspn( const char * string1, const char * string2 );

Una rutina tiene que estar de acuerdo con el resto de rutinas que la llamen acercadel modo en que se pasan los datos entre ellas. Puede evitar problemas potencialesproporcionando al compilador información suficiente para detectar este tipo defaltas de coincidencia. Por ejemplo, mientras que la siguiente declaración equivaletécnicamente a la declaración de modf en el código de muestra mostrado

Coincidencia de datos y enlaces

422 PL/I for WindowsGuía de programación

Page 445: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

anteriormente, permite que se pase la dirección de cualquier argumento comosegundo argumento. Las declaraciones anteriores necesitarán que el segundoargumento sea del tipo correcto.

dcl modf entry( float bin(53),pointer )

returns( float bin(53) )options( byvalue );

Por último, cuando PL/I pasa tipos de datos (series, matrices, estructuras yuniones), también pasa, de forma predeterminada, un descriptor que describeextensiones de datos (longitud de serie máxima, límites de matriz, etc.). Como lasrutinas C no pueden consumir descriptores PL/I, tiene que evitar que losdescriptores se pasen entre rutinas C y PL/I. Puede hacerlo añadiendo la opción alatributo OPTIONS en la declaración para le entrada C, por ejemplo:

dcl strcspn entry( nonasgn byaddr char(*) varyingz,nonasgn byaddr char(*) varyingz )

returns( fixed bin(31) )options( nodescriptor );

Dónde se pasan los datosEs tan importante que las rutinas que interactúan se pongan de acuerdo sobre quéy dónde van a pasar los datos como que se pongan de acuerdo sobre cómo van ahacerlo. Con PL/I y C, los datos pueden pasarse en la pila, en registros generales oen registros de coma flotante.

En PL/I, la opción LINKAGE (en la opción OPTIONS de la sentencia deprocedimiento y declaración de entrada) determina dónde se pasan los datos. Unaforma muy común de que se produzcan errores en la ubicación de datos esespecificar tipos de enlace que no coinciden (o no especificar un tipo de enlacecuando el predeterminado es incorrecto).

PL/I for Windows soporta tres tipos de enlace de 32 bits: OPTLINK, CDECL ySTDCALL. La siguiente declaración PL/I indica que la función dosSleep utiliza elenlace SYSTEM:

dcl dosSleep entry( fixed bin(31) byvalue )returns( fixed bin(31) )options( linkage(system) );

La lista de opciones debería especificar el enlace utilizado por las rutinas en C queinvoca. Tanto PL/I como VisualAge para compiladores en C++ utilizan OPTLINKcomo enlace predeterminado. Muchas rutinas en C en Windows utilizan el enlaceSTDCALL, y para esas rutinas hay qe especificar LINKAGE(STDCALL) en elatributo OPTIONS. Por ejemplo, puede declarar el equivalente en Windows deDosSleep como:

dcl Sleep ext(’Sleep’)entry( fixed bin(31) byvalue )returns( fixed bin(31) )options( linkage(stdcall) );

Mantenimiento del entornoPara que PL/I (y muchos otros lenguajes) funcionen correctamente, no puededañar el entorno de ejecución que establecen. Cuando entran en juego llamadas enlenguaje intermedio, significa que:v Cualquier rutina que registre un manejador de excepciones debería anular el

registro de dicho manejador antes de volver a PL/I.

Coincidencia de datos y enlaces

Capítulo 22. Utilizar PL/I en aplicaciones de lenguaje mixto 423

Page 446: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v Las opciones GOTO fuera de bloque solo se permiten si los bloques de origen ydestino están codificados en el mismo lenguaje y cualquier bloque queintervenga está codificado en ese mismo lenguaje.

Invocar rutinas no PL/I desde PL/I MAINSi su rutina principal está programa en PL/I, puede invocar dos tipos de rutina noPL/I:v Rutinas de sistema (como servicios DOS y Windows)v C o COBOL

Las rutinas de sistema no requieren su propio entorno de ejecución, y puedenenlazarse directamente en un archivo ejecutable (.EXE) de PL/I o en una bibliotecade enlace dinámico (.DLL). A excepción de las rutinas de IBM VisualAge C/C++,el resto de rutinas no PL/I no deben enlazarse directamente en un .EXE o .DLL.En lugar de eso, tienen que enlazarse a una .DLL para que cualquier inicializaciónde entorno de ejecución que necesiten pueda llevarse a cabo cuando se cargue la.DLL .

Las rutinas IBM VisualAge C/C++ pueden enlazarse con PL/I. Sin embargo, si seenlazan rutinas en C con PL/I y alguna de ellas utiliza funciones de biblioteca enC (o son directamente funciones de biblioteca en C), el tiempo de ejecución en Ctiene que inicializarse antes de que se llama ninguna rutina. El tiempo de ejecuciónen C puede inicializarse invocando la siguiente rutina:dcl _CRT_init ext(’_CRT_init’)

entry()returns( optional fixed bin(31) )options( linkage(optlink) );

Además, para garantizar que el tiempo de ejecución en C cierra todos los archivosque abrió y devuelve cualquier otro recurso de sistema que pueda haber adquirido,tiene que terminar el tiempo de ejecución en C invocandodcl _CRT_term ext(’_CRT_term’)

entry()returns( optional fixed bin(31) )options( linkage(optlink) );

Invocar rutinas PL/I desde un sistema principal no PL/IEl entorno de ejecución de PL/I tiene la capacidad de:v Iniciarse automáticamente cuando se carga dinámicamente una DLL PL/I desde

un programa principal no PL/I.v Existir con un entorno de ejecución de lenguaje no PL/I con conflictos mínimos.

Una rutina PL/I invocada desde una rutina no PL/I debería manejar cualquierexcepción que se produzca en código PL/I y volver a la no PL/I utilizando unasentencia RETURN o END en el primer procedimiento PL/I (consulte “Utilizar ONANYCONDITION” en la página 425)

El tiempo de ejecución PL/I libera implícitamente cualquier recurso adquirido porPL/I, pero no hasta que la aplicación termine.

También puede especificar recursos explícitamente a través de varias sentenciasPL/I:v RELEASE * - libera todos los módulos captados

Mantenimiento del entorno

424 PL/I for WindowsGuía de programación

Page 447: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v FLUSH FILE(*) - vacía todos los almacenamientos intermedios de archivosv CLOSE FILE(*) - cierra todos los archivos abiertos

Utilizar ON ANYCONDITIONCualquier aplicación debería poder manejar todas las excepciones que produzcanen ella y devolver el control "normal" al programa de llamada. Los recursos demanejo de excepciones PL/I y las unidades ON ANYCONDITION ayudan a haceresto posible.

La primera sentencia ejecutable de cualquier rutina PL/I que se llame desde unarutina no PL/I debería ser una sentencia ON ANYCONDITION. Esta sentenciadebería incluir código para manejar cualquier condición no manejadaexplícitamente por otras unidades ON. Si surge una condición que no puedemanejarse, utilice una sentencia GOTO que apunte a la última sentencia que seejecutó normalmente en la rutina, por ejemplo:

pliapp:proc( p1, ..., pn )returns( ... )options( fromalien );

/* declarations of paramaters, if any */

/* declarations of other variables */

on anyconditionbegin;

/* handle condition if possible */

/* if unhandled, set return value */goto return_stmt;

end;

/* mainline code */

return_Stmt:return( ... );

end_stmt:end pliapp;

Para las rutinas PL/I que no son funciones, el destino de GOTO debería ser lasentencia END de la rutina.

Invocar rutinas PL/I

Capítulo 22. Utilizar PL/I en aplicaciones de lenguaje mixto 425

Page 448: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

426 PL/I for WindowsGuía de programación

Page 449: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 23. Trabajar con Java

Este capítulo describe brevemente Java y la interfaz nativa Java (JNI) y explica porqué puede resultarle interesante utilizar Java con PL/I. Se describirá una aplicaciónsimple Java - PL/I y se proporcionará información sobre la compatibilidad entrelos dos lenguajes.

Antes de comunicarse con Java desde PL/I tiene que instalar Java en su sistema.Puede descargar la última versión del Kit de desarrollo de Java (JDK) en muchossitios diferentes.

Qué es la interfaz nativa Java (JNI)?Java es un lenguaje programación orientada a objetos creado por Sun Microsystemsque ofrece una forma potente de hacer interactivos los documentos de Internet.

La interfaz nativa Java (JNI) es la interfaz de Java para lenguajes de programaciónnativa y forma parte del Kit de desarrollo de Java. Al escribir programas queutilizan la interfaz nativa Java, tiene que asegurarse que su código se puedetransferir a distintas plataformas.

La JNI permite que el código Java que se ejecuta en una máquina virtual Java(JVM) funcione en aplicaciones y bibliotecas creadas en otros lenguajes, porejemplo PL/I. Además, Invocation API le permite incluir una máquina virtual Javaen sus aplicaciones PL/I nativas.

Java es un lenguaje de programación muy completo; sin embargo, hay situacionesen las que podría querer invocar a un programa escrito en otro lenguaje deprogramación. Puede hacerlo desde Java con una llamada de método a un lenguajenativo, conocido como método nativo.

A continuación se citan algunas de las razones por que que puede querer utilizarmétodos nativos:v El lenguaje nativo tiene una prestación especial que necesita su aplicación y que

las bibliotecas de clase Java no tienen.v Ya tiene muchas aplicaciones en su lenguaje nativo y quiere que sean accesibles

para una aplicación Java.v Quiere implementar una serie intensiva de cálculos complejos en su lenguaje

nativo y que sus aplicaciones Java invoquen esas funciones.v Usted o sus programadores tienen un conjunto de habilidades más amplio en su

lenguaje nativo y no quieren perder esta ventaja.

La programación mediante JNI le permite utilizar métodos nativos para llevar acabo operaciones distintas. Un método nativo puede:v Utilizar objetos de Java del mismo modo que los utiliza un método Java.v Crear objetos de Java, incluyendo matrices y cadena, e inspeccionar u utilizar

estos objetos para realizar tareas.v Inspeccionar y utilizar objetos creados mediante código de aplicaciones Java.v Actualizar objetos de Java que ha creado o que se le han transferido, y hacer que

estos objetos estén disponibles para la aplicación Java.

© Copyright IBM Corp. 1998, 2013 427

Page 450: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Por último, los métodos nativos también pueden llamar a métodos Java existentes,aprovechando la funcionalidad ya incorporada a la infraestructura deinfraestructura de Java. De esta forma, tanto el lado del lenguaje nativo como ellado Java de la aplicación, pueden crear, actualizar y acceder a objetos de Java ycompartir estos objetos entre ellos.

Programa de ejemplo JNI #1 - "Hello World"El primer programa de ejemplo que escribiremos es otra variante del "HelloWorld!" ("Hola mundo")

Nuestro programa "Hello World!" tiene una clase Java, callingPLI.java. Nuestrométodo nativo, escrito en PL/I, está en hiFromPLI.pli. Aquí tiene una brevedescripción general de los pasos necesarios para crear este programa de ejemplo:1. Escriba un programa Java que defina una clase que contiene un método nativo,

carga la biblioteca de carga nativa y llama al método nativo.2. Compile el programa Java para crear una clase Java.3. Escriba un programa PL/I que implemente el método nativo y muestre el texto

"Hello!" .4. Compile y enlace el programa PL/I.5. Ejecute el programa Java que invoca al método nativo en el programa PL/I.

Paso 1: escribir el programa Java

Declarar el método nativoTodos los métodos, ya sean métodos Java o nativos, tienen que estar declarados enuna clase Java. La única diferencia entre la declaración de un método Java y unmétodo nativo es la palabra clave native. La palabra clave native le dice a Java quela implementación de ese método se encontrará en una biblioteca nativa que secargará durante la ejecución del programa. La declaración de nuestro métodonativo tiene este aspecto:public native void callToPLI();

En la sentencia anterior, void significa que no se espera ningún valor de retorno deeste método de llamada nativo. El paréntesis vacío en el nombre del métodocallToPLI( ), indica que no se pasan parámetros en la llamada al método nativo.

Cargar la biblioteca nativaTiene que incluirse un paso que cargue la biblioteca nativa para que esta se cargueen tiempo de ejecución. La sentencia Java que carga la biblioteca nativa tiene esteaspecto:static {

System.loadLibrary("hiFromPLI");}

En la sentencia anterior, se llama el método del sistema Java System.loadLibrary(...)para que localice y cargue la biblioteca de enlace dinámico (DLL). La biblioteca deenlace dinámico PL/I, hiFromPLI.dll, se creará durante el paso que compila yenlaza el programa PL/I.

Escribir el método principal de JavaLa clase callingPLI también incluye un método main para crear una instancia de laclase y llamar al método nativo. El método main crea una instancia de callingPLI yllama al método nativo callToPLI().

428 PL/I for WindowsGuía de programación

Page 451: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

La definición completa de la clase callingPLI, que incluye todos los puntos citadosen esta sección, tiene este aspecto:public class callingPLI {

public native void callToPLI();static {

System.loadLibrary("hiFromPLI");}public static void main(String[] argv) {

callingPLI callPLI = new callingPLI();callPLI.callToPLI();System.out.println("And Hello from Java, too!");

}}

Paso 2: compilar el programa JavaUtilice el compilador Java para compilar la clase callingPLI en un formatoejecutable. El mandato tendría un aspecto similar a este:javac callingPLI.java

Paso 3: escribir el programa PL/ILa implementación PL/I del método nativo se parece mucho a cualquier otrasubrutina PL/I.

Opciones útiles del compilador PL/IEl programa de ejemplo contiene una serie de sentencias *PROCESS que definenlas opciones del compilador importantes.*Process Limits( Extname( 31 ) ) Margins( 1, 100 ) ;*Process Dllinit xinfo(def);*Process Default( IEEE );

A continuación encontrará una breve descripción de cada una de ellas y de suutilidad:

Extname(31)Permite nombres externos de estilo Java más largos.

Margins(1,100)Ampliar los márgenes le proporciona más espacio para nombres eidentificadores de estilo Java.

DllinitIncluye el código de inicialización necesario para crear una biblioteca de enlacedinámico.

xinfo(def)Indica al compilador que construya un archivo *.DEF que se va a utilizar paracrear una biblioteca de enlace dinámico.

Predeterminado ( IEEE );IEEE especifica que los datos FLOAT se mantienen en formato IEEE (elformato en el que los mantiene Java).

Forma correcta de se la sentencia de procedimiento y el nombrede procedimiento PL/IEl nombre del procedimiento PL/I tiene que cumplir el convenio de denominaciónde Java para el cargador de clases Java lo encuentre en tiempo de ejecución. Elesquema de denominación de Java consta de tres partes. La primera parte

Capítulo 23. Trabajar con Java 429

Page 452: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

identifica la rutina en el entorno Java, la segunda parte es el nombre de la claseJava que define el método nativo y la tercera parte es el nombre del propio métodonativo.

A continuación se muestra el desglose del nombre de procedimiento PL/I externo_Java_callingPLI_callToPLI en el programa de ejemplo:

_JavaTodos los métodos nativos que residen en una biblioteca dinámica tienen quecomenzar por _Java

_callingPLIEl nombre de la clase Java que declara el método nativo

_callToPLIEl nombre del método nativo.

Nota: Hay una diferencia importante entre codificar un método nativo en PL/I yhacerlo en C. La herramienta javah, que se incluye con el Kit de desarrollode Java, genera el formato de las referencias externas requerido paraprogramas en C. Cuando escribe sus métodos nativos en PL/I y sigue lasnormas anteriores sobre la denominación de referencias externas PL/I, nonecesita realizar el pasojavah para métodos nativos PL/I.

La sentencia de procedimiento completa para el programa de ejemplo tiene elsiguiente aspecto:

Java_callingPLI_callToPLI:Proc( JNIEnv , MyJObject )

External( "_Java_callingPLI_callToPLI" )Options( NoDescriptor ByValue linkage(stdcall) );

Archivo de inclusión JNIEl archivo de inclusión PL/I que contiene la definición PL/I de la interfaz de Javase incluye en dos archivos de inclusión, jni.cpy que a su vez incluye jni_md.cpy.Estos archivos de inclusión se incluyen con esta sentencia:

%include jni;

Para obtener una lista completa del archivo jni.cpy consulte el directorio\ibmpliw\include

El procedimiento PL/I completoAquí tiene el programa PL/I completo que define el método nativo:*Process Limits( Extname( 31 ) ) Margins( 1, 100 ) ;*Process Dllinit xinfo(def);*Process Default( IEEE );PliJava_Demo: Package Exports(*);

Java_callingPLI_callToPLI:Proc( JNIEnv , MyJObject )

External( "Java_callingPLI_callToPLI" )Options( NoDescriptor ByValue linkage(stdcall) );

%include jni;

Display(’Hello from PL/I for Windows!’);

End;

430 PL/I for WindowsGuía de programación

Page 453: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Paso 4: compilar y enlazar el programa PL/I

Compilar el programa PL/ICompile el programa de ejemplo PL/I con el siguiente mandato:

pli hiFromPLI.pli

Enlazar la biblioteca de enlace dinámicoEnlace el objeto PL/I resultante en una biblioteca de enlace dinámico con estosmandatos:

ilib /nologo /geni hiFromPLI.defilink /dll hiFromPLI.obj hiFromPLI.exp

Paso 5: ejecutar el programa de ejemploEjecute el programa de ejemplo Java - PL/I con este mandato:

java callingPLI

La salida del programa de ejemplo será parecida a esta:Hello from PL/I for Windows!And Hello from Java, too!

La primera línea está escrita desde el método nativo de PL/I. La segunda desde laclase Java de llamada después de ejecutarse desde el método nativo de PL/I.

Programa de ejemplo JNI #2 - Pasar una cadenaEste programa de ejemplo pasa una entre Java y PL/I. Consulte Figura 30 en lapágina 432 para ver la lista completa del programa jPassString.java. La porción Javatiene una clase Java, jPassString.java. Nuestro método nativo, escrito en PL/I, estáen passString.pli. Mucha de la información del primer programa de ejemplotambién es aplicable a este programa de ejemplo. Solo se hablará de los aspectosdiferentes o nuevos de este programa de ejemplo.

Paso 1: escribir el programa Java

Declarar el método nativoEl método nativo para este programa de ejemplo tiene este aspecto:public native void pliShowString();

Cargar la biblioteca nativaLa sentencia Java que carga la biblioteca nativa para este programa de ejemplotiene este aspecto:static {

System.loadLibrary("passString");}

Escribir el método principal de JavaLa clase jPassString también incluye un método main para crear una instancia de laclase y llamar al método nativo. El método main crea una instancia de jPassString yllama al método nativo pliShowString().

Este programa de ejemplo le pide al usuario una cadena y lee ese valor en la líneade mandatos. Esto se hace en una sentenciatry/catch tal y como se muestra enFigura 30 en la página 432.

Capítulo 23. Trabajar con Java 431

Page 454: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Paso 2: compilar el programa JavaEl mandato para compilar el código Java tendría un aspecto similar a este:javac jPassString.java

// Read a string, call PL/I, display new string upon returnimport java.io.*;

public class jPassString{

/* Field to hold Java string */String myString;

/* Load the PL/I native library */static {

System.loadLibrary("passString");}

/* Declare the PL/I native method */public native void pliShowString();

/* Main Java class */public static void main(String[] arg) {

System.out.println(" ");

/* Instantiate Java class and initilize string */jPassString myPassString = new jPassString();myPassString.myString = " ";

/* Prompt user for a string */try {

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

/* Process until ’quit’ received */while (!myPassString.myString.equalsIgnoreCase("quit")) {

System.out.println("From Java: Enter a string or ’quit’ to quit.");

System.out.print("Java Prompt > ");/* Get string from command line */myPassString.myString = in.readLine();if (!myPassString.myString.equalsIgnoreCase("quit"))

{/* Call PL/I native method */myPassString.pliShowString();/* Return from PL/I and display new string */System.out.println(" ");System.out.println(

"From Java: String set by PL/I is: "+ myPassString.myString );

}}} catch (IOException e) {}

}}

Figura 30. Programa de muestra Java #2 - Pasar una cadena

432 PL/I for WindowsGuía de programación

Page 455: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Paso 3: escribir el programa PL/IToda la información sobre escribir el programa de muestra PL/I "Hello World" seaplica también a este programa.

Forma correcta de se la sentencia de procedimiento y el nombrede procedimiento PL/IEl nombre de procedimiento PL/I externo para este programa sería_Java_jPassString_pliShowString.

La sentencia de procedimiento completa de este programa de ejemplo tiene esteaspecto:

Java_jPassString_pliShowString:Proc( JNIEnv , myjobject )

external( "_Java_jPassString_pliShowString" )options( byvalue nodescriptor linkage(stdcall) );

Archivo de inclusión JNIEl archivo de inclusión PL/I que contiene la definición PL/I de la interfaz de Javase incluye en dos archivos de inclusión, jni.cpy que a su vez incluye jni_md.cpy.Estos archivos de inclusión se incluyen con esta sentencia:

%include jni;

Para obtener una lista completa del archivo jni.cpy consulte el directorio\ibmpliw\include

El procedimiento PL/I completoEl programa PL/I completo se puede ver en Figura 31 en la página 434. Esteprograma PL/I de ejemplo hace varias llamadas a través de la interfaz nativa Java(JNI).

Tras la entrada, un referencia al objeto Java de llamada, myObject se pasa alprocedimiento PL/I. El programa PL/I utilizará esta referencia para conseguirinformación sobre el objeto de llamada. El primer fragmento de información es laclase del objeto de llamada que se recupera utilizando la función GetObjectClassJNI. Este valor de clase lo utiliza después la función GetFieldID JNI para conseguirla identidad del campo de serie Java del objeto Java que nos interesa. Este campode Java se identifica proporcionando el nombre del campo, myString, y eldescriptor de campo de la interfaz nativa Java Ljava/lang/String;, que identifica elcampo como un campo de serie Java. El valor del campo de serie Java se recuperautilizando la función JNI GetObjectField. Antes de que PL/I pueda utilizar el valorde serie Java, tiene que adoptar una forma que PL/I pueda comprender. Lafunción JNI GetStringUTFChars se utiliza para convertir la serie Java en una serievariable PL/I que muestra después el programa PL/I.

Después de mostrar la serie Java recuperada, el programa PL/I pide al usuario unaserie PL/I para actualizar el campo de serie en el objeto Java de llamada. El valorde serie PL/I se convierte a serie Java utilizando la función JNI NewString. Estanueva serie Java se utiliza entonces para actualizar el campo de serie en el objetoJava de llamada utilizando la función JNI SetObjectField.

Cuando el programa PL/I termina se devuelve el control a Java,donde el programaJava muestra la serie Java recién actualizada.

Capítulo 23. Trabajar con Java 433

Page 456: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Paso 4: compilar y enlazar el programa PL/I

Compilar el programa PL/ICompile el programa de ejemplo PL/I con el siguiente mandato:

pli passString.pli

*Process Limits( Extname( 31 ) ) Margins( 1, 100 ) ;*Process Dllinit xinfo(def);*Process Default( IEEE );plijava_demo: package exports(*);

Java_passString_pliShowString:Proc( JNIEnv , myJObject )

external( "_Java_jPassString_pliShowString" )options( byvalue nodescriptor linkage(stdcall) );

%include jni;

Dcl myBool Type jBoolean;Dcl myClazz Type jClass;Dcl myFID Type jFieldID;Dcl myJObject Type jObject;Dcl myJString Type jString;Dcl newJString Type jString;Dcl myID Char(9) Varz static init( ’myString’ );Dcl mySig Char(18) Varz static

init( ’Ljava/lang/String;’ );Dcl pliStr Char(132) Varz Based(pliStrPtr);Dcl pliReply Char(132) Varz;Dcl pliStrPtr Pointer;Dcl nullPtr Pointer;

Display(’ ’);

/* Get information about the calling Class */myClazz = GetObjectClass(JNIEnv, myJObject);

/* Get Field ID for String field from Java */myFID = GetFieldID(JNIEnv, myClazz, myID, mySig );

/* Get the Java String in the string field */myJString = GetObjectField(JNIEnv, myJObject, myFID );

/* Convert the Java String to a PL/I string */pliStrPtr = GetStringUTFChars(JNIEnv, myJString, myBool );

Display(’From PLI: String retrieved from Java is: ’ || pliStr );Display(’From PLI: Enter a string to be returned to Java:’ )

reply(pliReply);

/* Convert the new PL/I string to a Java String */newJString = NewString(JNIEnv, trim(pliReply), length(pliReply) );

/* Change the Java String field to the new string value */nullPtr = SetObjectField(JNIEnv, myJObject, myFID, newJString);

End;

end;

Figura 31. Programa de muestra PL/I #2 - Pasar una cadena

434 PL/I for WindowsGuía de programación

Page 457: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Enlazar la biblioteca de enlace dinámicoEnlace el objeto PL/I resultante en una biblioteca de enlace dinámico con estosmandatos:

ilib /nologo /geni passString.defilink /dll passString.obj passString.exp

Paso 5: ejecutar el programa de ejemploEjecute el programa de ejemplo Java - PL/I con este mandato:

java jPassString

La salida del programa de ejemplo, con las solicitudes de entrada de usuario deJava y PL/I, tiene un aspecto similar a este:>java jPassString

From Java: Enter a string or ’quit’ to quit.Java Prompt > A string entered in Java

From PLI: String retrieved from Java is: A string entered in JavaFrom PLI: Enter a string to be returned to Java:A string entered in PL/I

From Java: String set by PL/I is: A string entered in PL/IFrom Java: Enter a string or ’quit’ to quit.Java Prompt > quit>

Programa de ejemplo JNI #3 - Pasar un enteroEste programa de ejemplo pasa un entero entre Java y PL/I. Consulte Figura 32 enla página 436 para ver la lista completa del programa jPassInt.java. La porción Javatiene una clase Java, jPassInt.java. El método nativo, escrito en PL/I, está enpassInt.pli. Mucha de la información del primer programa de ejemplo también esaplicable a este programa de ejemplo. Solo se hablará de los aspectos diferentes onuevos de este programa de ejemplo.

Paso 1: escribir el programa Java

Declarar el método nativoEl método nativo para este programa de ejemplo tiene este aspecto:public native void pliShowInt();

Cargar la biblioteca nativaLa sentencia Java que carga la biblioteca nativa para este programa de ejemplotiene este aspecto:static {

System.loadLibrary("passInt");}

Escribir el método principal de JavaLa clase jPassInt también incluye un método main para crear una instancia de laclase y llamar al método nativo. El método main crea una instancia de jPassInt yllama al método nativo pliShowInt().

Este programa de ejemplo le pide al usuario un entero y lee ese valor en la líneade mandatos. Esto se hace en una sentenciatry/catch tal y como se muestra enFigura 32 en la página 436.

Capítulo 23. Trabajar con Java 435

Page 458: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

// Read an integer, call PL/I, display new integer upon returnimport java.io.*;import java.lang.*;

public class jPassInt{

/* Fields to hold Java string and int */int myInt;String myString;

/* Load the PL/I native library */static {

System.loadLibrary("passInt");}

/* Declare the PL/I native method */public native void pliShowInt();

/* Main Java class */public static void main(String[] arg) {

System.out.println(" ");

/* Instantiate Java class and initilize string */jPassInt pInt = new jPassInt();pInt.myInt = 1024;pInt.myString = " ";

/* Prompt user for an integer */try {

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

/* Process until ’quit’ received */while (!pInt.myString.equalsIgnoreCase("quit")) {

System.out.println("From Java: Enter an Integer or ’quit’ to quit.");

System.out.print("Java Prompt > ");/* Get string from command line */pInt.myString = in.readLine();if (!pInt.myString.equalsIgnoreCase("quit"))

{/* Set int to integer value of String */pInt.myInt = Integer.parseInt( pInt.myString );/* Call PL/I native method */pInt.pliShowInt();/* Return from PL/I and display new string */System.out.println(" ");System.out.println

("From Java: Integer set by PL/I is: " + pInt.myInt );}

}} catch (IOException e) {

/* Say something bad happened */System.out.println("Something bad happened... ");

}}

}

Figura 32. Programa de muestra Java #3 - Pasar un entero

436 PL/I for WindowsGuía de programación

Page 459: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Paso 2: compilar el programa JavaEl mandato para compilar el código Java tendría un aspecto similar a este:javac jPassInt.java

Paso 3: escribir el programa PL/IToda la información sobre escribir el programa de muestra PL/I "Hello World" seaplica también a este programa.

Forma correcta de se la sentencia de procedimiento y el nombrede procedimiento PL/IEl nombre de procedimiento PL/I externo para este programa sería_Java_jPassInt_pliShowInt.

La sentencia de procedimiento completa de este programa de ejemplo tiene esteaspecto:

Java_passNum_pliShowInt:Proc( JNIEnv , myjobject )

external( "_Java_jPassInt_pliShowInt" )options( byvalue nodescriptor linkage(stdcall) );

Archivo de inclusión JNIEl archivo de inclusión PL/I que contiene la definición PL/I de la interfaz de Javase incluye en dos archivos de inclusión, jni.cpy que a su vez incluye jni_md.cpy.Estos archivos de inclusión se incluyen con esta sentencia:

%include jni;

Para obtener una lista completa del archivo jni.cpy consulte el directorio\ibmpliw\include

El procedimiento PL/I completoEl programa PL/I completo se puede ver en Figura 33 en la página 438. Esteprograma PL/I de ejemplo hace varias llamadas a través de la interfaz nativa Java(JNI).

Tras la entrada, un referencia al objeto Java de llamada, myObject, se pasa alprocedimiento PL/I. El programa PL/I utilizará esta referencia para conseguirinformación sobre el objeto de llamada. El primer fragmento de información es laclase del objeto de llamada que se recupera utilizando la función GetObjectClassJNI. Este valor de clase lo utiliza después la función GetFieldID JNI para conseguirla identidad del campo de entero Java del objeto Java que nos interesa. Este campode Java se identifica proporcionando el nombre del campo, myInt, y el descriptorde campo de la interfaz nativa Java I, que identifica el campo como un campo deentero. El valor del campo de entero Java se recupera utilizando la función JNIGetIntField que el programa PL/I muestra posteriormente.

Después de mostrar el entero Java recuperado, el programa PL/I pide al usuarioun entero PL/I para actualizar el campo de entero en el objeto Java de llamada. Elvalor entero PL/I se utiliza entonces para actualizar el campo de entero en elobjeto Java de llamada utilizando la función JNI SetIntField.

Cuando el programa PL/I termina, se devuelve el control a Java, donde elprograma Java muestra el entero Java recién actualizado.

Capítulo 23. Trabajar con Java 437

Page 460: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Paso 4: compilar y enlazar el programa PL/I

Compilar el programa PL/ICompile el programa de ejemplo PL/I con el siguiente mandato:

pli passInt.pli

Enlazar la biblioteca de enlace dinámicoEnlace el objeto PL/I resultante en una biblioteca de enlace dinámico con estosmandatos:

ilib /nologo /geni passInt.defilink /dll passInt.obj passInt.exp

*Process Limits( Extname( 31 ) ) Margins( 1, 100 ) ;*Process Dllinit xinfo(def);*Process Default( IEEE );plijava_demo: package exports(*);

Java_passNum_pliShowInt:Proc( JNIEnv , myjobject )

external( "_Java_jPassInt_pliShowInt" )options( byvalue nodescriptor linkage(stdcall) );

%include jni;

Dcl myClazz Type jClass;Dcl myFID Type jFieldID;Dcl myJInt Type jInt;dcl rtnJInt Type jInt;Dcl myJObject Type jObject;Dcl pliReply Char(132) Varz;Dcl nullPtr Pointer;

Display(’ ’);

/* Get information about the calling Class */myClazz = GetObjectClass(JNIEnv, myJObject);

/* Get Field ID for int field from Java */myFID = GetFieldID(JNIEnv, myClazz, "myInt", "I");

/* Get Integer value from Java */myJInt = GetIntField(JNIEnv, myJObject, myFID);

display(’From PLI: Integer retrieved from Java is: ’ || trim(myJInt) );display(’From PLI: Enter an integer to be returned to Java:’ )

reply(pliReply);

rtnJInt = pliReply;

/* Set Integer value in Java from PL/I */nullPtr = SetIntField(JNIEnv, myJObject, myFID, rtnJInt);

End;

end;

Figura 33. Programa de muestra PL/I #3 - Pasar un entero

438 PL/I for WindowsGuía de programación

Page 461: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Paso 5: ejecutar el programa de ejemploEjecute el programa de ejemplo Java - PL/I con este mandato:

java jPassInt

La salida del programa de ejemplo, con las solicitudes de entrada de usuario deJava y PL/I, tiene un aspecto similar a este:>java jPassInt

From Java: Enter an Integer or ’quit’ to quit.Java Prompt > 12345

From PLI: Integer retrieved from Java is: 12345From PLI: Enter an integer to be returned to Java:54321

From Java: Integer set by PL/I is: 54321From Java: Enter an Integer or ’quit’ to quit.Java Prompt > quit>

Determinar tipos de datos Java y PL/I equivalentesCuando se comunica con Java desde PL/I necesita que coincidan los tipos de datosentre los dos lenguajes de programación. Esta table muestra los tipos primitivos deJava y sus equivalentes PL/I:

Tabla 30. Tipos primitivos Java y sus equivalentes nativos PL/I

Tipo Java Tipo PL/I Tamaño en bits

boolean jboolean 8, unsigned

byte jbyte 8

char jchar 16, unsigned

short jshort 16

int jint 32

long jlong 64

float jfloat 21

double jdouble 53

void jvoid n/a

Capítulo 23. Trabajar con Java 439

Page 462: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

440 PL/I for WindowsGuía de programación

Page 463: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 24. Usar rutinas de clasificación

PL/I for Windows admite las subrutinas incorporadas PLISRTx (x = A, B, C o D).Para utilizar las subrutinas PLISRTx, tiene que:v Incluir una llamada a una de las subrutinas y pasarle la información sobre los

campos que se van a clasificar. Esta información incluye la longitud de losregistros, el nombre de una variable que se va a utilizar como código de retornoy otra información necesaria para llevar a cabo la clasificación.

v Especificar los conjuntos de datos requeridos por el programa de clasificación ensentencias de definición de datos.

Cuando se utiliza desde PL/I, estas subrutinas clasifican registros de todas laslongitudes normales en un gran número de campos de clasificación. Los datos dela mayoría de tipos pueden clasificarse en orden ascendente y descendente. Elorigen de los datos que se van a clasificar puede ser un conjunto de datos o unprocedimiento PL/I escrito por el programador al que invoca el programa declasificación cada vez que la clasificación requiere un registro. De igual manera, eldestino de la clasificación puede ser un conjunto de datos o un procedimientoPL/I que maneja los registros clasificados.

Comparar programas de ordenación de S/390 y estación de trabajoSi los programas de su sistema principal contienen CALL PLISRTx, puededescargarlos y ejecutarlos en su estación de trabajo. Muchos de los parámetrospermitidos en S/390 se ignoran y alteran en cierto en modo el comportamiento entiempo de ejecución. La siguiente tabla indica qué argumentos aceptados por OSPL/I son ignorados por el compilador de estación de trabajo.

Tabla 31. estación de trabajo PLISRTx

Subrutina incorporada Argumentos

PLISRTA

Ordenar entrada: conjunto de datosOrdenar salida: conjunto de datos

(sentencia de ordenación, sentencia de registro,almacenamiento, código de retorno[,prefijo de conjunto de datos, nivel de mensaje,técnica de ordenación])

PLISRTBOrdenar entrada: subrutina PL/IOrdenar salida: conjunto de datos

(sentencia de ordenación,sentencia de registro, almacenamiento, código deretorno, rutina de entrada[,prefijo de conjunto de datos, nivel de mensaje,técnica de ordenación])

PLISRTCOrdenar entrada: conjunto de datosOrdenar salida: subrutina PL/I

(sentencia de ordenación,sentencia de registro, almacenamiento, código deretorno, rutina de salida[,prefijo de conjunto de datos, nivel de mensaje,técnica de ordenación])

PLISRTDOrdenar entrada: subrutina PL/IOrdenar salida: subrutina PL/I

(sentencia de ordenación, sentencia de registro,almacenamiento, código de retorno, rutina deentrada, rutina de salida [,prefijo de conjunto dedatos, nivel de mensaje, técnica de ordenación])

© Copyright IBM Corp. 1998, 2013 441

Page 464: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 31. estación de trabajo PLISRTx (continuación)

Subrutina incorporada Argumentos

Definiciones de argumentos:

Sentencia de ordenaciónSerie de caracteres que describe el formato y los campos de ordenación. Consulte “Especificar el campo declasificación” en la página 445.

Sentencia de registroExpresión de serie de caracteres que describe la longitud y el formato de registro de los datos. Consulte“Especificar los registros que se van a clasificar” en la página 446.

AlmacenamientoIgnorado por estación de trabajo PL/I.

Código de retornoVariable binaria fija de precisión (31,0) en la que SORT coloca una código de retorno cuando se ha completado.El significado del código de retorno es:

0=la ordenación se ha completado correctamente16=la ordenación ha fallado

Rutina de entrada(PLISRTB y PLISRTD) Nombre del procedimiento externo o interno PL/I que se utiliza para suministrar losregistros al programa de ordenación en la salida de ordenación 15. Para ver los requisitos específicosutilizandoestación de trabajo PL/I, consulte “E15 — rutina entrada-manejo (salida de SORT E15)” en la página450.

Rutina de salida(PLISRTC y PLISRTD) Nombre del procedimiento externo o interno PL/I al que SORT pasa los registrosordenados desde la salida de ordenación 35. Para ver los requisitos específicos utilizandoestación de trabajoPL/I, consulte “E35 — rutina de salida-manejo (salida SORT E35)” en la página 452.

Prefijo de conjunto de datosIgnorado por estación de trabajo PL/I, que solo procesa SORTIN y SORTOUT como ddnames.

Nivel de mensajeIgnorado por estación de trabajo PL/I.

Técnica de ordenaciónIgnorado por estación de trabajo PL/I.

Pasos previos para usar la ordenaciónAntes de utilizar la ordenación, tiene que determinar qué tipo de ordenaciónnecesita, la longitud y el formato de los campos de ordenación y la longitud de susregistros de datos.

Para determinar qué subrutina PLISRTx utilizar, tiene que decidir el origen de losdatos sin ordenar y el destino de los datos ordenados. También tiene que elegirentre conjuntos de datos y subrutinas PL/I. Utilizar conjuntos de datos es mássencillo y ofrece un rendimiento mejor. El uso de subrutinas PL/I proporciona másflexibilidad y más funciones, permitiéndole manipular los datos antes de laordenación y utilizarlos inmediatamente después de la ordenación. Si decideutilizar una subrutina de manejo de entrada o salida, lea “Ordenar rutinas demanejo de datos” en la página 450.

Las subrutinas incorporadas de ordenación y el origen y destino de los datos sonlos siguientes:

Subrutina incorporada Origen Destino

PLISRTA Conjunto de datos Conjunto de datos

Comparar programas de ordenación

442 PL/I for WindowsGuía de programación

Page 465: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Subrutina incorporada Origen Destino

PLISRTB Subrutina Conjunto de datos

PLISRTC Conjunto de datos Subrutina

PLISRTD Subrutina Subrutina

Los conjuntos de datos de origen se definen utilizando la variable de entornoSORTIN mientras que los conjuntos de datos de destino se definen utilizandoSORTOUT. También puede utilizar la función incorporada PUTENV para definiresas funciones.

Una vez determinada la subrutina que va a utilizar, tiene que determinar unnúmero de cosas sobre el conjunto de datos y especificar la información en lasentencia SORT:v La posición de los campos de ordenación; que pueden ser el registro completa o

partes de él.v El tipo de datos que representan estos campos, por ejemplo, de carácter o

binario.v Si quiere que la ordenación de cada campo se realice en orden ascendente o

descendente.

A continuación, tiene que determinar dos cosas sobre los registros para suordenación y especificar la información en la sentencia RECORD:v Si el formato de registro es fijo o variablev La longitud de registro (longitud máxima para variable)

Utilice esto en la sentencia RECORD, que es el segundo argumento de PLISRTx.

Elegir el tipo de ordenaciónPara hacer el mejor uso posible del programa de ordenación, tiene que entendercómo funciona. Especifique una ordenación en su programa PL/I utilizando unasentencia CALL en la subrutina incorporada PLISRTx. Cada una especifica unorigen distinto para los datos sin ordenar y un destino para los datos cuando sehayan ordenado.

Por ejemplo, una llamada a PLISRTA especifica que los datos no ordenados (laentrada a ordenación) están en un conjunto de datos y que los datos ordenados (lasalida de ordenación) se van a colocar en otro conjunto de datos. La sentenciaCALL PLISRTx tiene que incluir una lista de argumentos que proporcionainformación al programa de ordenación sobre los datos que se van a ordenar, loscampos en los que se van a ordenar, el nombre de una variable en la que SORTcoloca un código de retorno indicando el éxito o el fallo de la ordenación y elnombre de cualquier procedimiento de manejo de entrada o salida que se puedautilizar.

La rutina de la interfaz de SORT crea una lista de argumentos para la ordenación apartir de la información proporcionada por la lista de argumentos PLISRTx ydepende de que elija A, B, C o D para x. Después el control se pasa al programade ordenación. Si ha especificado una rutina de manejo de entrada o salida, elprograma de ordenación la invoca tantas veces como sea necesario para manejarlos registros ordenados o no ordenados.

La operación de ordenación termina de una de estas dos maneras:

Pasos previos para usar la ordenación

Capítulo 24. Usar rutinas de clasificación 443

Page 466: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

1. El éxito o error se comunica enviando un código de retorno al procedimientode llamada PL/I.

2. Se lanza una condición de error cuando se detectan determinados errores y elcódigo de retorno no está definido.

Figura 34 se un diagrama de flujo simplificado que describe la operación deordenación.

┌─────────────┐│ ││CALL PLISRTx ││ │└──┬─┬─┬─┬────┘

│ │ │ │┌────────────────────────────┘ │ │ └───────────────────────────────┐│ ┌────────┘ └───────────┐ │↓ ↓ ↓ ↓

PLISRTA PLISRTB PLISRTC PLISRTD│ │ │ │↓ ↓ ↓ ↓

┌───────────┴─────────────────────┴──────────────────────┴─────────────────────┴───────┐│ SORT PROGRAM │├───────────┬──────────────────┬──────────────────┬─────────────────────┬──────────────┤│ ↓ ↓ ↓ ↓ ││┌──────────┴──────┐ ┌─────────┴────────┐ ┌───────┴─────────┐ ┌─────────┴────────┐ │││Get records from │ │Call PL/I sub- │ │Get records from │ │Call PL/I sub- │ │││data set until │ │routine receiving │ │data set until │ │routine receiving │ │││end of file │ │one record on │ │end of file │ │one record on │ │││ │ │each call (E15) │ │ │ │each call (E15) │ ││└─────────┬───────┘ └──────────┬───────┘ └─────────┬───────┘ └──────────┬───────┘ ││ │ │ │ │ ││ │ └───────┐ ┌───────┘ │ ││ └──────────────────────────┐ │ │ ┌──────────────────────────┘ ││ │ │ │ │ ││ ↓ ↓ ↓ ↓ ││ ┌─┴─┴───┴─┴───┐ ││ │ │ ││ │Sort records │ ││ │ │ ││ └─┬─┬───┬─┬───┘ ││ │ │ │ │ ││ ┌──────────────────────────┘ │ │ └───────────────────────────┐ ││ │ ┌───────┘ └─────────┐ │ ││ │ │ │ │ ││ ↓ ↓ ↓ ↓ ││┌─────────┴───────┐ ┌──────────┴───────┐ ┌───────────┴─────┐ ┌───────────┴──────┐ │││Place sorted │ │Place sorted │ │Call PL/I sub- │ │Call PL/I sub- │ │││records on │ │records on │ │routine passing │ │routine passing │ │││data set │ │data set │ │one record on │ │one record on │ │││ │ │ │ │each call (E35) │ │each call (E35) │ ││└─────────┬───────┘ └──────────┬───────┘ └───────────┬─────┘ └────────────┬─────┘ ││ │ │ │ │ ││ │ └───────┐ ┌──────────┘ │ ││ └──────────────────────────┐ │ │ ┌─────────────────────────────┘ ││ │ │ │ │ ││ ↓ ↓ ↓ ↓ ││ ┌────┴─┴──┴─┴─────────┐ ││ │Set up return code │ ││ │to indicate success │ ││ │or failure of sort │ ││ └──────────┬──────────┘ ││ │ │└───────────────────────────────────────────┼──────────────────────────────────────────┘ │

↓┌───────┴─────────┐│Return to caller ││ of PLISRTx │└─────────────────┘

Figura 34. Flujo de control del programa de ordenación

Pasos previos para usar la ordenación

444 PL/I for WindowsGuía de programación

Page 467: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

En el propio programa de ordenación, el flujo de control entre el programa deordenación y las rutinas de manejo de entrada o salida se controla mediantecódigos de retorno. El programa de ordenación, llama a estas rutinas en puntoapropiado de su procesamiento. (En el programa de ordenación, estas rutinas seconocen como salidas de usuario. La rutina que pasa datos para ordenar es lasalida de usuario de ordenación E15. La rutina que procesa la salida ordenada es lasalida de usuario de ordenación E35). Desde las rutinas, el programa deordenación espera un código de retorno que indique que debería volver a llamar ala rutina o que debería continuar con la siguiente fase del proceso.

EL resto de este capítulo ofrece información detallada sobre cómo utilizar laordenación en PL/I. Primero se describen las sentencias obligatorias de PL/Iseguidas de los requisitos del conjunto de datos. El capítulo termina con una seriede ejemplos sobre el uso de las cuatro subrutinas incorporadas.

Especificar el campo de clasificaciónla sentencia SORT es el primer argumento de PLISRTx. La sintaxis de la sentenciaSORT tiene que ser una expresión de cadena de caracteres con el siguiente formato:

�� 'bSORTbFIELDS= ( �

,

start,length,form,seq )otras opciones

b' ��

b Uno o varios espacios en blanco. Los espacios en blanco son obligatorios. Nose permiten otros espacios en blanco.

start,length,form,seqCampos de clasificación. Puede especificar cualquier número de campo, perohay un límite para la longitud total de los campos. Si se va a clasifica r más deun campo, los registros se ordenan primero en función del primer campo, y acontinuación, los que tengan el mismo valor se ordenan en función d elsegundo campo y así sucesivamente. Si todos los valores de ordenación soniguales, se conserva el orden de los registros iguales. La superposición decampos de ordenación no está soportada.

startLa posición de inicio en el registro. Proporcione el valor en bytes. Elprimer byte de una serie se considera el byte 1.

lengthLa longitud del campo de ordenación. Proporcione el valor en bytes. Lalongitud de los campos de ordenación está restringida en función del tipode datos.

formEl formato de los datos. Es el formato que se asume para el fin de laordenación. Todos los datos que se pasan entre rutinas PL/I y laordenación tienen que tener el formato de serie de caracteres. Acontinuación se muestran los principales tipos de datos y las restriccionesde longitud.

CódigoTipo de datos y longitud

CH carácter 1–65535ZD decimal con zona y signo 1–255PD decimal empaquetado con signo 1–255BI binario, 1 bit sin signo hasta 4095 bytes

Pasos previos para usar la ordenación

Capítulo 24. Usar rutinas de clasificación 445

Page 468: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Nota: Si el archivo es EBCDIC, la biblioteca PL/I cambia el argumento deordenación de CH a BI para utilizar la secuencia de intercalaciónbinaria para el campo especificado. El límite del campo binario es4095.

seqLa secuencia con la que se ordenan los datos:

A – ascendente (es decir, 1,2,3,...)D – descendente (es decir, ...,3,2,1).

Tenga en cuenta que no puede especificar E, porque PL/I no proporcionaun método para pasar una secuencia suministrada por el usuario.

otras opcionesLa única opción soportada por estación de trabajo PL/I es la predeterminada,EQUALS. El código fuente del sistema principal, sin embargo, no necesitamodificarse.

Ejemplo:’ SORT FIELDS=(1,10,CH,A) ’

Especificar los registros que se van a clasificarUtilice la sentencia RECORD como el segundo argumento de PLISRTx. La sintaxisde la sentencia RECORD tiene que ser una expresión de cadena de caracteres que,cuando se evalúa, acepta la siguiente sintaxis:

�� 'bRECORDbTYPE=rectype,LENGTH=(n)

b' ��

b Uno o varios espacios en blanco. Los espacios en blanco son obligatorios. Nose permiten otros espacios en blanco.

TYPEEspecifica el tipo de registro de la siguiente manera:F Longitud fijaV Longitud variable

Incluso cuando utiliza rutinas de entrada y salida para manejar los datosclasificados y sin clasificar, tiene que especificar el tipo de registro ya que seaplica a los conjuntos de datos de trabajo utilizados para la clasificación.

Si se pasan series de longitud variable para la clasificación desde una rutina deentrada (salida E15), normalmente tendrá que especificar V como formato deregistro. Sin embargo, si especifica F, los registros se rellenan con espacios enblanco hasta alcanzar la longitud máxima.

LENGTHEspecifica la longitud del registro que se va a ordenar. Puede omitir LENGTHsi utiliza PLISRTA o PLISRTC, porque la longitud se toma del conjunto dedatos de entrada. La longitud máxima de un registro que puede ordenarse es32.767 bytes. Para los registros de longitud variable, tiene que incluir el prefijode 2 bytes.

n La longitud del registro que se va a ordenar.

Nota: PL/I estación de trabajo ignora otras especificaciones de longitud que sepueden utilizar.

Pasos previos para usar la ordenación

446 PL/I for WindowsGuía de programación

Page 469: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Ejemplo:’ RECORD TYPE=F,length=(80) ’

Llamar al programa de clasificaciónCuando haya determinado las especificaciones de tipo de registro y campo deordenación, estará en posición de escribir la sentencia CALL PLISRTx.

Ejemplos PLISRTEl siguiente ejemplo indica las formas de llama a PLISRTx más utilizadas.

Ejemplo 1Una llamada a PLISRTA que ordena registros de 80 bytes de SORTIN a SORTOUT,y un ordenación, RETCODE, declarado como FIXED BINARY (31,0).

call plisrta (’ SORT FIELDS=(1,80,CH,A) ’,’ RECORD TYPE=F,LENGTH=(80) ’,

0,retcode);

Ejemplo 2Este ejemplo es el mismo que el ejemplo 1 pero la ordenación se va a llevar a caboen dos campos. Primero, los bytes del 1 al 10 que son caracteres, y después, si soniguales, los bytes 11 y 12 que contienen un campo binario. Los dos campos seordenan de forma ascendente.

call plisrta (’ SORT FIELD =(1,10,CH,A,11,2,BI,A) ’,’ RECORD TYPE=F,LENGTH=(80) ’,

0,retcode);

Ejemplo 3Una llamada a PLISRTB. La entrada se pasa a SORT mediante la rutina PL/IPUTIN, la ordenación se va a llevar a cabo en los caracteres del 1 al 10 de unregistro de longitud fija de 80 bytes. Otra información como antes.

call plisrtb (’ SORT FIELDS=(1,10,CH,A) ’,’ RECORD TYPE=F,LENGTH=(80) ’,

0,retcode,putin);

Ejemplo 4Una llamada a PLISRTD. La entrada se va a suministrar mediante la rutina PL/IPUTIN y la salida se pasa a la rutina PL/I PUTOUT. El registro que se va aordenar es variable de 82 bytes (incluyendo prefijo de longitud). Se va a ordenaren bytes del 1 al 5 de datos en orden ascendente, si los campos son iguales, enbytes del 6 al 10 en orden descendente. Si estos dos campos son iguales, seconserva el orden de la entrada. (La opción EQUALS se encarga de esto).

call plisrtd (’ SORT FIELDS=(1,5,CH,A,6,5,CH,D),EQUALS ’,’ RECORD TYPE=V,LENGTH=(82) ’,

0,retcode,putin, /* input routine (sort exit 15) */putout); /* output routine (sort exit 35) */

Pasos previos para usar la ordenación

Capítulo 24. Usar rutinas de clasificación 447

Page 470: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Determinar si la ordenación se ha realizado correctamenteCuando se completa la ordenación, SORT define un código de retorno en lavariable con nombre en cuatro argumento de la llamada a PLISRTx. Despuésdevuelve el control a la sentencia que sigue a la sentencia CALL PLISRTx. El valordevuelto indica si la ordenación se ha realizado satisfactoriamente o no de lasiguiente manera:

0 Sort successful16 Sort failed

Tiene que declarar esta variables como FIXED BINARY (31,0). Es una prácticageneralizada probar el valor del código de retorno después de la sentencia CALLPLISRTx y llevar a cabo la acción correspondiente según la operación se realice ono correctamente.

Por ejemplo (asumiendo que el código de retorno se llamó RETCODE):if retcode¬=0 then do;

put data(retcode);signal error;

end;

Se lanza la condición de error si se detectan errores. Cuando la ordenación detectaun error muy grave y el código de error correspondiente es mayor que 16, se lanzala condición de error.

Si el paso de trabajo que sigue a la ordenación depende del éxito o el error de laordenación, tiene que definir el valor devuelto en el programa de clasificacióncomo el código de retorno del programa PL/I. Este código de retorno está entoncesdisponible para el siguiente paso de trabajo. El código de retorno PL/I se definemediante una llamada a PLIRETC. El siguiente ejemplo muestra cómo puedellamar a PLIRETC con el valor devuelto de la ordenación:

call pliretc(retcode);

No debería confundir la llamada a PLIRETC con las llamadas hechas en las rutinasde entrada (E15) y salida (E35), en las que se utiliza un código de retorno parapasar información de control a la ordenación.

Obtención de información de diagnósticoEste tema describe las variables de entorno que puede especificar para conseguirinformación de diagnóstico.

La variable de entorno IBM_SORT_RCCuando define el valor de una variable de entorno IBM_SORT_RC en 1, labiblioteca PL/I devuelve más códigos de retorno informativos de las llamadasPLISRTx, por ejemplo:export IBM_SORT_RC=1

Tabla 32 enumera los posibles códigos de retorno de las llamadas PLISRTx y lostipos de errores que se detectan cuando especifica IBM_SORT_RC=1.

Tabla 32. Códigos de retorno de PLISRTx

Código de retorno Tipo de error detectado

1-32 Se ha detectado un error interno.

Llamar al programa de clasificación

448 PL/I for WindowsGuía de programación

Page 471: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 32. Códigos de retorno de PLISRTx (continuación)

Código de retorno Tipo de error detectado

34 Se ha detectado un error de lectura en elarchivo.

35 Se ha detectado un error de escritura en elarchivo.

36 No se puede abrir el archivo de entrada.

37 No se puede abrir el archivo de mensaje.

38 Se ha detectado un error interno.

39 Se ha detectado un error interno.

40 No ha suficiente espacio en el discotemporal.

43-47 Se ha detectado un error interno.

49 No hay suficiente espacio dealmacenamiento para continuar la ejecución.

50-55 Se ha detectado un error interno.

57 No se puede abrir el archivo de salida.

58 No se puede abrir el archivo temporal.

61-62 Se ha detectado un error interno.

112 No hay mensaje disco lleno.

232-233 Se ha detectado un error interno.

254-255 Se ha detectado un error interno.

La variable de entorno IBM_SORT_DIRCuando especifica la variable de entorno IBM_SORT_DIR, los archivos de trabajotemporales se guardan en el directorio que ha especificado en lugar de en eldirectorio actual, por ejemplo:export IBM_SORT_DIR=/tmp

La variable de entorno IBM_SORT_MSGFILECuando se define la variable de entorno IBM_SORT_MSGFILE para una nombre dearchivo o vía de acceso, se escriben mensajes SORT en el archivo especificado, porejemplo:export IBM_SORT_MSGFILE=./msg.txt

Estos mensajes son mensajes de error SORT internos y proporcionan másinformación sobre el problema.

Ordenar datos de entrada y de salidaEl origen de los datos que se van a ordenar se proporciona directamente desde unconjunto de datos o de forma indirecta mediante una rutina (salida de ordenaciónE15) escrita por el usuario. De igual manera, el destino de la salida ordenada es unconjunto de datos o una rutina (salida de ordenación E35) proporcionada por elusuario.

PLISRTA es la más sencilla de todas las interfaces porque ordena de un conjuntode datos a un conjunto de datos. Puede ver un ejemplo de un programa PLISRTA

Llamar al programa de clasificación

Capítulo 24. Usar rutinas de clasificación 449

Page 472: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

en Figura 38 en la página 454. Otras interfaces requieren una rutina de manejo deentrada o la rutina de manejo de salida o ambas.

Para ordenar registros de longitud variable, antes tiene que convertir los conjuntosde datos al formato TYPE(VARLS) y después utilizar el archivoTYPE(VARLS) comoentrada para el programa de clasificación. Los registros TYPE(VARLS) tienen uncampo de longitud de 2 bytes al principio, por lo que el tamaño de registro es enrealidad dos menos que la longitud del registro. Esto significa que el tamaño deregistro que especifique tiene que ser dos menos que la longitud de registromáxima del archivo.

Puede convertir su conjunto de datos en un archivo TYPE(VARLS) escribiendo unprograma PL/I que lea desde el archivo de datos existente y escribe en un archivode salida declarado como TYPE(VARLS) .

Ordenar rutinas de manejo de datosSORT llama a las rutinas de manejo de entrada y salida cuando se utiliza PLISRTB,PLISRTC o PLISRTD. Tienen que estar escritas en PL/I y pueden serprocedimientos internos o externos. Si son internos a la rutina que llama aPLISRTx, se comportan igual que los procedimientos internos normales conrespecto al ámbito de nombres. Los nombres del procedimiento de entrada y desalida tienen que conocerse en el procedimiento que realiza la llamada a PLISRTx.

Las rutinas se llaman individualmente para cada registro requerido por SORT opasado desde SORT. Por lo tanto cada rutina tiene que escribirse para manejar unregistro cada vez. Las variables declaradas como AUTOMATIC en losprocedimientos no retienen sus valores entre llamadas. Por tanto, elementos comolos contadores, que tienen que retenerse de una llamada a otra, tienen quedeclararse como STATIC o declararse en el bloque contenedor.

E15 — rutina entrada-manejo (salida de SORT E15)Las rutinas de entrada suelen utilizarse para procesar datos antes de ordenarlos,por ejemplo imprimirlos, (consulte Figura 39 en la página 455 y Figura 41 en lapágina 457), o generar o manipular los archivos d e ordenación para conseguir losresultados correctos.

SORT utiliza la rutina de entrada-manejo cuando se realiza una llamada a PLISRTBo PLISRTD. Cuando SORT necesita un registro, llama a la rutina de entrada quedevuelve un registro en formato de cadena de caracteres, y un código de retornode 12, lo que significa que el registro que se pasa se va a incluir en la ordenación.SORT continúa llamando a la rutina hasta que se pasa un código de retorno de 8.Esto significa que ya se han pasado todos los registros y que SORT no va a volvera llamar a la rutina. Si se devuelve un registro cuando el código de retorno es 8,SORT lo ignora.

Nota: Tiene que compilar el programa que llama a PLISRTB o PLISRTD con lasmismas opciones (ASCII o EBCDIC; NATIVE o NONNATIVE; HEXADEC oIEEE) que utilizó para compilar la rutina de manejo E15.

Los datos devueltos por la rutina E15 tienen que ser una cadena de caracteres fija ovariable. Si es variable, los normal sería que especificase V como formato deregistro en la sentencia RECORD que es el segundo argumento de la llamada aPLISRTx. Sin embargo, puede especificar F, en cuyo caso la cadena se rellena hastaalcanzar su longitud máxima con espacios en blanco.

Ordenar datos de entrada y de salida

450 PL/I for WindowsGuía de programación

Page 473: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

El registro se devuelve con una sentencia RETURN, y tiene que especificar elatributo RETURNS en la sentencia PROCEDURE. El código de retorno se define enuna llamada a PLIRETC. Encontrará objetos de una rutina de entrada en Figura 39en la página 455 yFigura 41 en la página 457.

Además de los códigos de retorno de 12 (incluye el registro actual en ordenación)y 8 (todos los registros enviados), SORT permite el uso de un código de retorno de16. Termina la ordenación y define un código de retorno de SORT a su programaPL/I de 16-la ordenación ha fallado.

Tiene que tener en cuenta que una llamada a PLIRETC define un código de retornoque se pasa mediante el programa PL/I y está disponible para cualquier paso detrabajo que lo siga. Cuando se ha utilizado una rutina de manejo de salida, esbueno restablecer el código de retorno con una llamada a PLIRETC después de lallamada a PLISRTx para evitar recibir un código de terminación no cero. Al llamara PLIRETC con el código de retorno desde SORT como argumento, puede hacerque el código de retorno PL/I refleje si la ordenación se ha realizado correctamenteo no. Esta práctica se muestra en Figura 40 en la página 456.

Además, para codificar la rutina de salida de usuario de entrada, tienen queespecificarse los atributos explícitos de la rutina E15 en la unidad de programa quellama a PLISRTx si E15 no está anidada a la unidad de programa.

E15: proc returns (char(80));/* Returns attribute must be used specifying

length of data to be sorted, maximum lengthif varying strings are passed to sort. */

dcl string char(80); /* A character string variable is normallyrequired to return the data to sort */

if Last_Record_Sent then do;/* A test must be made to see if all the

records have been sent, if they have, areturn code of 8 is set up and controlreturned to sort */

call pliretc(8); /* Set return code of 8, meaning last recordalready sent. */

end;

else do;/* If another record is to be sent to sort,

do the necessary processing, set a returncode of 12 by calling PLIRETC, and returnthe data as a character string to sort */

/* The code to do your processing goes here */

call pliretc (12);/* Set return code of 12, meaning thisrecord is to be included in the sort */

return (string); /* Return data with RETURN statement */end;end; /* End of the input procedure */

Figura 35. Código esquemático de un procedimiento de entrada

Ordenar rutinas de manejo de datos

Capítulo 24. Usar rutinas de clasificación 451

Page 474: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

E35 — rutina de salida-manejo (salida SORT E35)Tiene que compilar el programa que llama a PLISRTC o PLISRTD con las mismasopciones (ASCII o EBCDIC; NATIVE o NONNATIVE) que utilizó para compilar larutina de manejo E35.

Las rutinas de salida-manejo suelen utilizarse para cualquier proceso necesariodespués de la ordenación. Como imprimir los datos ordenados, tal y como semuestra en Figura 40 en la página 456 and Figura 41 en la página 457, o utilizar los

plisort: proc options(main);

dcl e15 entry returns(char(2000) varying);

/* Code to do your processing goes here */

call plisrtb(’ SORT FIELDS=(5,10,CH,A) ’’ RECORD TYPE=V,LENGTH=(2000) ’,

0,retcode,e15);

/* Code to do your processing goes here */

end plisort;

*PROCESS

E15: proc returns (char(2000) varying);/* Returns option must be used specifying

length of data to be sorted, maximum lengthif varying strings are passed to sort. */

dcl string char(2000) varying;/* A character string variable is normally

required to return the data to sort */

if Last_Record_Sent then do;/* A test must be made to see if all the

records have been sent, if they have, areturn code of 8 is set up and controlreturned to sort */

call pliretc(8); /* Set return code of 8, meaning last recordalready sent. */

end;

else do;/* If another record is to be sent to sort,

do the necessary processing, set a returncode of 12 by calling PLIRETC, and returnthe data as a character string to sort */

/* Code to do your processing goes here */

call pliretc (12);/* Set return code of 12, meaning thisrecord is to be included in the sort */

return (string); /* Return data with RETURN statement */end;end; /* End of the input procedure */

Figura 36. Cuando E15 es externa a la llamada de procedimiento PLISRTx

Ordenar rutinas de manejo de datos

452 PL/I for WindowsGuía de programación

Page 475: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

datos ordenados para generar más información. La rutina de manejo de salidas lautiliza SORT cuando se realiza una llamada a PLISRTC o PLISRTD.

Cuando se han ordenado los registros, SORT lo pasa (de uno en uno) a la rutina demanejo de salidas. A continuación, la rutina de salida los procesa. Cuando se hanpasado todos los registros, SORT define su código de retorno y vuelve a lasentencia después de la sentencia CALL PLISRTx. SORT no indica a la rutina demanejo de salidas que se ha alcanzado el último registro. Cualquier manejo de finde los datos tiene que realizarse en el procedimiento que llama a PLISRTx.

El registro se pasa de SORT a la rutina de salida como una serie de caracteres, ytiene que declarar un parámetro de serie de caracteres en la subrutina de manejode salida para recibir los datos. La subrutina de manejo de salidas también tieneque pasar un código de retorno de 4 a SORT para indicar que está lista para otroregistro. El código de retorno se define mediante una llamada a PLIRETC.

La ordenación puede detenerse pasando un código de retorno de 16 a SORT. Deesta forma SORT devuelve al programa de llamada un código de retorno de 16 (laordenación ha fallado).

El registro pasado a la rutina mediante SORT es un parámetro de serie decaracteres. Si especificó el tipo de registro como F en el segundo argumento de lallamada a PLISRTx, tiene que declarar el parámetro con la longitud del registro. Siespecificó el tipo de registro como V, tiene que declarar el parámetro comoajustable, por ejemplo:dcl string char(*);

El código esquemático de una rutina de manejo de salidas típica se muestra enFigura 37.

Tenga en cuenta que una llamada a PLIRETC define un código de retorno que sepasa mediante el programa PL/I y está disponible para cualquier paso de trabajoque lo siga. Cuando se ha utilizado una rutina de manejo de salida, es buenorestablecer el código de retorno con una llamada a PLIRETC después de la llamadaa PLISRTx para evitar recibir un código de terminación no cero. Al llamar aPLIRETC con el código de retorno desde SORT como argumento, puede hacer queel código de retorno PL/I refleje si la ordenación se ha realizado correctamente ono. Esta práctica se describe en los ejemplos del final del capítulo.

E35: proc(String);/* The procedure must have a character string

parameter to receive the record from sort */

dcl String char(80); /* Declaration of parameter */

/* Your code goes here */

call pliretc(4); /* Pass return code to sort indicating thatthe next sorted record is to be passed tothis procedure. */

end E35; /* End of procedure returns control to sort */

Figura 37. Código esquemático de un procedimiento de manejo de salidas

Ordenar rutinas de manejo de datos

Capítulo 24. Usar rutinas de clasificación 453

Page 476: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Llamar a PLISRTA

Contenido de EX106.DAT para utilizar con Figura 38003329HOOKER S.W. RIVERDALE, SATCHWELL LANE, BACONSFIELD002886BOOKER R.R. ROTORUA, LINKEDGE LANE, TOBLEY003077ROOKER & SON, LITTLETON NURSERIES, SHOLTSPAR059334HOOK E.H. 109 ELMTREE ROAD, GANNET PARK, NORTHAMPTON073872HOME TAVERN, WESTLEIGH000931FOREST, IVER, BUCKS

/*******************************************************************//* *//* DESCRIPTION *//* Sorting from an input data set to an output data set *//* *//* Use the following statements: *//* set dd:sortin=ex106.dat,type(crlf),lrecl(80) *//* set dd:sortout=ex106.out,type(crlf),lrecl(80) *//* *//* *//*******************************************************************/

ex106: proc options(main);dcl Return_code fixed bin(31,0);

call plisrta (’ SORT FIELDS=(7,74,CH,A) ’,’ RECORD TYPE=F,LENGTH=(80) ’,

0,Return_code);

select (Return_code);when(0) put skip edit

(’Sort complete return_code 0’) (a);when(16) put skip edit

(’Sort failed, return_code 16’) (a);other put skip edit (

’Invalid sort return_code = ’, Return_code) (a,f(2));end /* Select */;/* Set pl/i return code to reflect success of sort */call pliretc(Return_code);

end ex106;

Figura 38. PLISRTA—Ordenación desde un conjunto de datos de entrada a un conjunto dedatos de salida

Ordenar rutinas de manejo de datos

454 PL/I for WindowsGuía de programación

Page 477: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Llamar a PLISRTB

Contenido de EX107.DAT para utilizar con Figura 39

/*******************************************************************//* *//* DESCRIPTION *//* Sorting from an input-handling routine to an output data set *//* *//* Use the following statements: *//* *//* set dd:sysin=ex107.dat,type(crlf),lrecl(80) *//* set dd:sortout=ex107.out,type(crlf),lrecl(80) *//* *//*******************************************************************/ex107: proc options(main);

dcl Return_code fixed bin(31,0);

call plisrtb (’ SORT FIELDS=(7,74,CH,A) ’,’ RECORD TYPE=F,LENGTH=(80) ’,0,Return_code,e15x);

select(Return_code);when(0) put skip edit

(’Sort complete return_code 0’) (a);when(16) put skip edit

(’Sort failed, return_code 16’) (a);other put skip edit

(’Invalid return_code = ’,Return_code)(a,f(2));end /* Select */;

/* Set pl/i return code to reflect success of sort */call pliretc(Return_code);

e15x: /* Input-handling routine gets records from the inputstream and puts them before they are sorted */

proc returns (char(80));dcl sysin file stream input,

Infield char(80);

on endfile(sysin) begin;put skip(3) edit (’End of sort program input’)(a);call pliretc(8); /* Signal that last record has

already been sent to sort */goto ende15;end;

get file (sysin) edit (infield) (l);put skip edit (infield)(a(80)); /* Print input */call pliretc(12); /* Request sort to include current

record and return for more */return(Infield);

ende15:end e15x;

end ex107;

Figura 39. PLISRTB—Ordenación desde una rutina de manejo de entradas a un conjunto dedatos de salida

Ordenar rutinas de manejo de datos

Capítulo 24. Usar rutinas de clasificación 455

Page 478: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

003329HOOKER S.W. RIVERDALE, SATCHWELL LANE, BACONSFIELD002886BOOKER R.R. ROTORUA, LINKEDGE LANE, TOBLEY003077ROOKER & SON, LITTLETON NURSERIES, SHOLTSPAR059334HOOK E.H. 109 ELMTREE ROAD, GANNET PARK, NORTHAMPTON073872HOME TAVERN, WESTLEIGH000931FOREST, IVER, BUCKS

Llamar a PLISRTC

Contenido de EX108.DAT para utilizar con Figura 40003329HOOKER S.W. RIVERDALE, SATCHWELL LANE, BACONSFIELD002886BOOKER R.R. ROTORUA, LINKEDGE LANE, TOBLEY003077ROOKER & SON, LITTLETON NURSERIES, SHOLTSPAR059334HOOK E.H. 109 ELMTREE ROAD, GANNET PARK, NORTHAMPTON073872HOME TAVERN, WESTLEIGH000931FOREST, IVER, BUCKS

/*******************************************************************//* *//* DESCRIPTION *//* Sorting from an input data set to an output-handling routine *//* *//* Use the following statement: *//* *//* set dd:sortin=ex108.dat,type(crlf),lrecl(80) *//* *//*******************************************************************/

ex108: proc options(main);

dcl Return_code fixed bin(31,0);

call plisrtc (’ SORT FIELDS=(7,74,CH,A) ’,’ RECORD TYPE=F,LENGTH=(80) ’,0,Return_code,e35x);

select(Return_code);when(0) put skip edit

(’Sort complete return_code 0’) (a);when(16) put skip edit

(’Sort failed, return_code 16’) (a);other put skip edit

(’Invalid return_code = ’, Return_code) (a,f(2));end /* Select */;

/* Set pl/i return code to reflect success of sort */call pliretc (return_code);

e35x: /* Output-handling routine prints sorted records */proc (Inrec);

dcl inrec char(*);put skip edit (inrec) (a);call pliretc(4); /* Request next record from sort */

end e35x;end ex108;

Figura 40. PLISRTC—ordenación de conjunto de datos de entrada a rutina de manejo desalida

Ordenar rutinas de manejo de datos

456 PL/I for WindowsGuía de programación

Page 479: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Invocar a PLISRTD, ejemplo 1

/*******************************************************************//* *//* DESCRIPTION *//* Sorting an input-handling to output-handling routine *//* *//* Use the following statement: *//* *//* set dd:sysin=ex109.dat,type(crlf),lrecl(80) *//* *//*******************************************************************/

ex109: proc options(main);dcl Return_code fixed bin(31,0);call plisrtd (’ SORT FIELDS=(7,74,CH,A) ’,

’ RECORD TYPE=F,LENGTH=(80) ’,0,Return_code,e15x,e35x);

select(Return_code);when(0) put skip edit

(’Sort complete return_code 0’) (a);when(16) put skip edit

(’Sort failed, return_code 16’) (a);other put skip edit

(’Invalid return_code = ’, Return_code) (a,f(2));end /* select */;

/* Set pl/i return code to reflect success of sort */call pliretc(Return_code);

e15x: /* Input-handling routine prints input before sorting */proc returns(char(80));

dcl infield char(80);

on endfile(sysin) begin;put skip(3) edit (’end of sort program input. ’,

’sorted output should follow’)(a);call pliretc(8); /* Signal end of input to sort */goto ende15;

end;

get file (sysin) edit (infield) (l);put skip edit (infield)(a);call pliretc(12); /* Input to sort continues */return(Infield);

ende15:end e15x;

e35x: /* Output-handling routine prints the sorted records */proc (Inrec);

dcl inrec char(80);put skip edit (inrec) (a);

next: call pliretc(4); /* Request next record from sort */end e35x;

end ex109;

Figura 41. PLISRTD—ordenación de rutina de manejo de entrada a rutina de manejo de salida

Ordenar rutinas de manejo de datos

Capítulo 24. Usar rutinas de clasificación 457

Page 480: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Contenido de los EX109.DAT y EX110.DAT utilizados con Figura 41 en la página457 and Figura 42 en la página 459003329HOOKER S.W. RIVERDALE, SATCHWELL LANE, BACONSFIELD002886BOOKER R.R. ROTORUA, LINKEDGE LANE, TOBLEY003077ROOKER & SON, LITTLETON NURSERIES, SHOLTSPAR059334HOOK E.H. 109 ELMTREE ROAD, GANNET PARK, NORTHAMPTON073872HOME TAVERN, WESTLEIGH000931FOREST, IVER, BUCKS

Ordenar rutinas de manejo de datos

458 PL/I for WindowsGuía de programación

Page 481: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Invocar a PLISRTD, ejemplo 2

ex110: proc options(main);

/*****************************************************************//* *//* PLISRTD: sorting from an input-handling rtn to an *//* output-handling routine. Records are varying-length. *//* *//*****************************************************************/

dcl rc fixed bin(31,0);

call plisrtd(’ SORT FIELDS=(7,4,CH,A) ’,’ RECORD TYPE=V,LENGTH=(80) ’,

256000,rc,e15x,e35x );

select( rc );when(0) put skip edit

(’Sort complete return code = 0’) (a);when(16) put skip edit

(’Sort failed return code = 16’) (a);other put skip edit

(’Invalid return code = ’, rc) (a,f(2));end;

call pliretc(rc);

e15x: proc returns( char(80) varying );

dcl infield char(80) var;

on endfile(sysin) begin;put skip(3) edit(’End of sort program input. ’,

’Sortout output should follow’) (a);call pliretc(8);goto ende15;

end;

get file(sysin) edit(infield) (l);put skip edit( infield ) (a);call pliretc(12);

return(infield);ende15:end e15x;

e35x: proc ( inrec );

dcl inrec char(*);

put skip edit(inrec) (a);call pliretc(4);

end e35x;end ex110;

Figura 42. PLISRTD—ordenación de rutina de manejo de entrada a rutina de manejo desalida

Ordenar rutinas de manejo de datos

Capítulo 24. Usar rutinas de clasificación 459

Page 482: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Ordenar rutinas de manejo de datos

460 PL/I for WindowsGuía de programación

Page 483: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 25. Utilizar en analizador SAX

El compilador proporciona una interfaz denomina PLISAXx (x = A o B) queproporciona las capacidad XML básica a PL/I. El soporte incluye un analizadorXML de alta velocidad, que permite a los programas consumir programas XML deentrada, comprobar si tienen la forma apropiada y transformar su contenido aestructuras de datos PL/I.

La función incorporada XMLCHAR proporciona soporte para la generación XML.

Visión generalHay dos tipos principales de interfaz para el análisis de XML: basada en eventos ybasada en árbol.

En una interfaz de programación de aplicaciones basada en eventos, el analizadorinforma de los eventos a la aplicación mediante callbacks (retrollamadas). Taleseventos incluyen: el inicio del documento, el inicio de un elemento, etc. Laaplicación proporciona controladores para hacer f rente a los eventos de los queinforma el analizador. La API simple para XML o SAX es un ejemplo de interfazde programación de aplicaciones basada en eventos estándar.

En una interfaz de programación de aplicaciones basada en árbol (como el modelode objetos de documento o DOM), el analizador convierte el XML en unarepresentación basada en árbol interna. Se proporcionan interfaces para navegar elárbol.

IBM PL/I proporciona una interfaz basada en eventos de tipo SAX para analizardocumentos XML. El analizador invoca a un controlador proporcionado por laaplicación para eventos de análisis, pasando referencias a los fragmentos dedocumentos correspondientes.

El analizador tiene las siguientes características:v Ofrece alto rendimiento, pero no porporciona interfaces estándar.v Soporta archivos XML codificados en Unicode UTF-16 o cualquiera de las

páginas de códigos de un solo byte que se citan a continuación.v El analizador no es de validación, pero realiza comprobaciones parciales de

forma apropiada. Véase la sección 2.5.10,

Los documentos XML tienen dos niveles de conformidad: forma apropiada yvalidez, ambos definidos en el estándar XML, que puede encontrar enhttp://www.w3c.org/XML/. Recapitulando estas definiciones, un documento XMLtiene la forma apropiada si cumple con la gramática XML básica, y con ciertasreglas específicas, como el requerimiento de que los nombres de etiquetas deelemento de inicio y fin tienen que coincidir. Un documento XML de formaapropiada también es válido si tiene una definición de tipo de documento asociada(DTD) y si cumple con las restricciones expresadas en la definición de tipo dedocumento DTD.

El analizador no es de validación, pero realiza comprobaciones parciales en buscade errores de forma apropiada y genera sucesos de excepción si detecta alguno.

© Copyright IBM Corp. 1998, 2013 461

Page 484: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

La subrutina incorporada PLISAXALa subrutina incorporada PLISAXA le permite invocar al analizador XML para undocumento XML que reside en un almacenamiento intermedio de su programa.

�� PLISAXA(e,p,x,n ),c

��

e Una estructura de eventos

p Un valor de puntero o "señal" que el analizador devuelve a las funciones desuceso

x La dirección del almacenamiento intermedio que contiene el XML de entrada

n El número de bytes de datos de ese almacenamiento intermedio

c Una expresión numérica que especifica la supuesta página de códigos de eseXML.

Tenga en cuenta que si el XML se incluye en una cadena CHARACTER VARYINGo WIDECHAR VARYING, debería utilizarse la función incorporada ADDRDATApara conseguir la dirección del primer byte de datos.

Tenga en cuenta también que si el XML se incluye en una cadena WIDECHAR, elvalor del número de bytes es dos veces el valor devuelto por la funciónincorporada LENGTH.

La subrutina incorporada PLISAXBLa subrutina incorporada PLISAXB le permite invocar al analizador XML para undocumento XML que reside en un archivo.

�� PLISAXB(e,p,x ),c

��

e Una estructura de eventos

p Un valor de puntero o "señal" que el analizador devuelve a las funciones desuceso

x Una cadena de caracteres que especifica el archivo de entrada

c Una expresión numérica que especifica la supuesta página de códigos de eseXML

En el procesamiento por lotes, la cadena de caracteres que especifica el archivo deentrada debería tener el formato 'file://dd:ddname', siendo ddname el nombre dela sentencia de definición de datos que especifica el archivo.

En z/OS UNIX, la cadena de caracteres que especifica el archivo de entradadebería tener el formato 'file://filename', siendo filename el nombre de un archivoz/OS UNIX.

La estructura de eventos SAXLa estructura de eventos es una estructura que consta de 24 variables LIMITEDENTRY que apuntan a funciones que el analizador invocará para varios "eventos".

462 PL/I for WindowsGuía de programación

Page 485: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Las siguientes descripciones de cada evento hacen referencia al ejemplo de undocumento XML en Figura 43. En estas descripciones el término "XML text" hacereferencia a la serie basada en puntero y la longitud pasada al evento.

En el orden de aparición de esta estructura, el analizador puede reconocer loselementos siguientes:

start_of_documentEste evento se produce una vez, cuando se comienza a analizar el documento. Elanalizador pasa la dirección y la longitud del documento completo, incluyendo loscaracteres de control de línea, como LF (salto de línea) o NL (línea nueva). En elejemplo anterior, el documento tiene 305 caracteres de longitud.

version_informationEste evento se produce en la declaración XML opcional para la información de laversión. El analizador pasa la dirección y la longitud del texto que contiene elvalor de la versión, "1.0" en el ejemplo anterior.

encoding_declarationEste evento se produce en la declaración XML para la declaración de codificadoopcional. El analizador pasa la dirección y la longitud del texto que contiene elvalor de codificación.

standalone_declarationEste evento se produce en la declaración XML para la declaración independienteopcional. El analizador pasa la dirección y la longitud del texto que contiene elvalor independiente, "yes" en el ejemplo anterior.

document_type_declarationEste evento se produce cuando en analizador encuentra una declaración de tipo dedocumento. Las declaraciones de tipo de documento comienzan con la secuenciade caracteres "<!DOCTYPE" y terminan con una carácter ">", con algunas reglasgramaticales bastante complicadas que describen el contenido que hay entremedias. El analizador pasa la dirección y la longitud del texto que contiene ladeclaración completa, incluyendo las secuencias de caracteres de apertura y cierre,y es el único evento en el que el texto XML incluye delimitadores. El ejemploanterior no tiene una declaración de tipo de documento.

xmlDocument =’<?xml version="1.0" standalone="yes"?>’

|| ’<!--This document is just an example-->’|| ’<sandwich>’|| ’<bread type="baker’s best"/>’|| ’<?spread please use real mayonnaise ?>’|| ’<meat>Ham & turkey</meat>’|| ’<filling>Cheese, lettuce, tomato, etc.</filling>’|| ’<![CDATA[We should add a <relish> element in future!]]>’|| ’</sandwich>’|| ’junk’;

Figura 43. Documento XML de ejemplo

Capítulo 25. Utilizar en analizador SAX 463

Page 486: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

end_of_documentEste evento se produce una vez, cuando el análisis del documento se hacompletado.

start_of_elementeste suceso se produce para cada etiqueta de inicio del elemento o etiqueta deelemento vacía. El analizador pasa la dirección y la longitud del texto que contieneel nombre del elemento. Para el primer suceso start_of_element (inicio deelemento) durante el análisis del ejemplo, debería ser la cadena "sandwich".

attribute_nameEste evento se produce para cada atributo en una etiqueta de inicio del elemento oen una etiqueta de elemento vacía, tras reconocer un nombre válido. El analizadorpasa la dirección y la longitud del texto que contiene el nombre del atributo. Elúnico nombre de atributo del ejemplo es "type".

attribute_charactersEste evento se produce con cada fragmento de un valor de atributo. El analizadorpasa la dirección y la longitud del texto que contiene el fragmento. Normalmenteun valor de atributo consta de una cadena única, incluso si se divide en líneas.<element attribute="El valor de este atributo sedivide en dos líneas"/>

Aunque el valor del atributo puede constar de varios fragmentos. Por ejemplo, elvalor del atributo "type" en el ejemplo "sandwich" del comienzo de la secciónconsta de tres fragmentos: la cadena "baker", el carácter único "'" y la cadena "sbest". El analizador pasa los tres fragmentos como tres eventos independientes.Pasa cada cadena, "baker" y "s best" en el ejemplo, comoeventosattribute_characters y el carácter único "'" como un eventoattribute_predefined_reference, descrito a continuación.

attribute_predefined_referenceEste evento se produce en valores de atributo para las cinco referencias de entidaddefinidas previamente "&", "'", ">", "<" y "'". El analizador pasa un valor CHAR(1)o WIDECHAR(1) que contiene "&", "'", ">", "<" o '"', respectivamente.

attribute_character_referenceEste evento se produce en valores de atributo de referencias de caracteresnuméricos (puntos de código Unicode o "valores escalares") de la forma "&#dd;" o"&#xhh;", donde "d" y "h" representan dígitos decimales y hexadecimalesrespectivamente. El analizador pasa un valor FIXED BIN(31) que contiene el valorentero correspondiente.

end_of_elementEste evento ocurre una vez por cada etiqueta de final de elemento o etiqueta definal vacía cuando el analizador reconoce el paréntesis de cierre de la etiqueta. Elanalizador pasa la dirección y la longitud del texto que contiene el nombre delelemento.

start_of_CDATA_sectionESte evento se produce al inicio de una sección CDATA. Las secciones CDATAcomienzan con la cadena “<![CDATA[” y terminan con la cadena “]]”, y se utilizan

464 PL/I for WindowsGuía de programación

Page 487: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

para "escapar" de bloques de texto que contienen caracteres que si no sereconocerían como marcación XML. El analizador pasa la dirección y la longituddel texto que contiene los caracteres de apertura “<![CDATA[”. El analizador pasael contenido de una sección CDATA entre estos delimitadores como una evento decontenido de características único. Por ejemplo, en el ejemplo anterior, al evento decontenido de caracteres pasa el texto "We should add a <relish> element infuture!".

end_of_CDATA_sectionEste evento se produce cuando el analizador reconoce el final de una secciónCDATA. El analizador pasa la dirección y la longitud del texto que contiene lasecuencia de caracteres de cierre, “]]”.

content_charactersEste evento representa el "alma" de un documento XML: los datos de caracteresentre la etiqueta de inicio y de final de un elemento. El analizador pasa ladirección y la longitud del texto que contiene esta información, que suele constarde una cadena única, incluso si se divide en líneas:<element1>El contenido de este carácter se divide en dos líneas</element1>

Si el contenido de un elemento incluye alguna referencia u otros elementos, elcontenido completo puede contar de varios segmentos. Por ejemplo, el contenidodel elemento "meat" (carne) del ejemplo está compuesto de la cadena "Ham "(jamón), el carácter "&" y la cadena " turkey" (pavo). Tenga en cuenta los espaciosiniciales y finales, respectivamente, en estos dos fragmentos de cadena. Elanalizador pasa los tres fragmentos de contenido como eventos independientes.Pasa los fragmentos de contenido de cadena, "Ham " y " turkey", como eventoscontent_characters, y el carácter "&" como un evento content_predefined_reference.El analizador también utiliza el evento content_characters para pasar el texto de lassecciones CDATA a la aplicación.

content_predefined_referenceEste evento se produce en contenido de elementos para las cinco referencias deentidad definidas previamente "&", "'", ">", "<" y "'". El analizador pasa un valorCHAR(1) o WIDECHAR(1) que contiene "&", "'", ">", "<" o '"', respectivamente.

content_character_referenceEste evento se produce en contenido de elementos de referencias de caracteresnuméricos (puntos de código Unicode o "valores escalares") de la forma "&#dd;" o"&#xhh;", donde "d" y "h" representan dígitos decimales y hexadecimalesrespectivamente. El analizador pasa un valor FIXED BIN(31) que contiene el valorentero correspondiente.

processing_instructionLas instrucciones de procesamiento (PI) permiten que los documentos XMLcontengan instrucciones especiales para aplicaciones. Este evento se producecuando el analizador reconoce el nombre que sigue a la secuencia de caracteres deapertura PI, "<?". El evento también cubre los datos que siguen al destino de lainstrucción de proceso (PI), hasta pero sin incluir la secuencia de caracteres decierre PI, "?>". Se incluyen los caracteres de espacio en blanco detrás de los datos,pero no los de delante. El analizador pasa la dirección y la longitud del texto quecontiene el destino, "spread" en el ejemplo, y la dirección y la longitud del textoque contiene los datos, "please use real mayonnaise " en el ejemplo.

Capítulo 25. Utilizar en analizador SAX 465

Page 488: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

commentEste evento se produce en los comentarios del documento XML. El analizador pasala dirección y la longitud del texto entre los delimitadores de apertura y cierre delcomentario, "<!--" y "-->", respectivamente. En el ejemplo, el texto del comentario es"This document is just an example".

unknown_attribute_referenceEste evento se produce en los valores de atributo para referencias de entidadesdistintas a las cinco referencias de entidades predefinidas que se enumeran en elevento attribute_predefined_character. El analizador pasa la dirección y la longituddel texto que contiene el nombre de la entidad.

unknown_content_referenceEste evento se produce en el contenido del elemento para referencias de entidadesdistintas a las cinco referencias de entidades predefinidas que se enumeran en elevento content_predefined_character. El analizador pasa la dirección y la longituddel texto que contiene el nombre de la entidad.

start_of_prefix_mappingEste evento no se genera actualmente.

end_of_prefix_mappingEste evento no se genera actualmente.

excepciónEl analizador genera este evento cuando detecta un error en el procesamiento deldocumento XML.

Parámetros de las funciones de eventoTodas estas funciones tienen que devolver un valor BYVALUE FIXED BIN(31) quees un código de retorno para el analizador. Para que el analizador continúe deforma normal, este valor tiene que ser cero.

A todas estas funciones se les pasará como primer argumento un BYVALUEPOINTER que es el valor de cadena pasado originalmente como segundoargumento en la función incorporada.

Con las siguientes excepciones, a todas las funciones se les pasará un BYVALUEPOINTER y un BYVALUE FIXED BIN(31) que suministran la dirección y lalongitud del elemento de texto para el evento. Las funciones/eventos que sondiferentes son:

end_of_documentNo se pasa ningún argumento aparte de la señal del usuario.

attribute_predefined_referenceAdemás de la señal del usuario, se pasa un argumento adicional: un BYVALUECHAR(1) o, para un documento UTF-16, un BYVALUE WIDECHAR(1) quemantiene el valor del carácter predefinido.

content_predefined_referenceAdemás de la señal del usuario, se pasa un argumento adicional: un BYVALUECHAR(1) o, para un documento UTF-16, un BYVALUE WIDECHAR(1) quemantiene el valor del carácter predefinido.

466 PL/I for WindowsGuía de programación

Page 489: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

attribute_character_referenceAdemás de la señal del usuario, se pasa un argumento adicional: un BYVALUEFIXED(31) que mantiene el valor de la referencia numérica.

content_character_referenceAdemás de la señal del usuario, se pasa un argumento adicional: un BYVALUEFIXED(31) que mantiene el valor de la referencia numérica.

processing_instructionAdemás de la señal del usuario, se pasan cuatro argumentos adicionales:1. un BYVALUE POINTER que es la dirección del texto de destino2. un BYVALUE FIXED BIN(31) que es la longitud del texto de destino3. un BYVALUE POINTER que es la dirección del texto de datos4. un BYVALUE FIXED BIN(31) que es la longitud del texto de datos

excepciónAdemás de la señal del usuario, se pasan tres argumentos adicionales:1. un BYVALUE POINTER que es la dirección del texto que comete la

infracción2. un BYVALUE FIXED BIN(31) que es el desplazamiento de bytes del texto

que comete la infracción en el documento3. un BYVALUE FIXED BIN(31) que es el valor del código de excepción

Conjuntos de caracteres codificados para documentos XMLLa subrutina incorporada PLISAX soporta únicamente documentos XML enWIDECHAR codificados mediante Unicode UTF-16, o en CHARACTERcodificados con uno de los juegos de caracteres de byte único soportadosexplícitamente que se citan a continuación. El analizador utiliza hasta tres fuentesde información sobre la codificación de su documento XML, y señala un eventoXML de excepción si descubre algún conflicto entre estas fuentes:1. El analizador determina la codificación básica de un documento inspeccionado

sus caracteres iniciales.2. Si el paso 1 se realiza con éxito, el analizador busca declaraciones de

codificación.3. Por último, hace referencia al valor de la página de códigos en la llamada de la

subrutina incorporada PLISAX. Si se ha omitido este parámetro, se adopta elvalor proporcionado por la opción del compilador CODEPAGE que especificóexplícitamente o de forma predeterminada.

Si el documento XML comienza con una declaración XML que incluye unadeclaración de codificación que especifica una de las páginas de códigoscompatibles que se incluyen a continuación, el analizador cumple la declaración decodificación si no entra en conflicto con la codificación de documento básica ni conla información de codificación de la subrutina incorporada PLISAX. Si eldocumento XML no tiene una declaración XML, o si la declaración XML omite ladeclaración de codificación, el analizador utiliza la información de codificación dela subrutina incorporada PLISAX para procesar el documento, siempre y cuandono entre en conflicto con la codificación del documento básica.

Páginas de códigos EBCDIC soportadasEn la siguiente tabla, el primer número es para la página de códigos ampliada depaíses europeos (ECECP) y el segundo es para la página de códigos ampliadasegún país (CECP).

Capítulo 25. Utilizar en analizador SAX 467

Page 490: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

CCSID Descripción

01047 Latin 1 / Sistemas abiertos

01140, 00037 Estados Unidos, Canadá, etc.

01141, 00273 Austria, Alemania

01142, 00277 Dinamarca, Noruega

01143, 00278 Finlandia, Suecia

01144, 00280 Italia

01145, 00284 España, Latinoamérica (español)

01146, 00285 Reino Unido

01147, 00297 Francia

01148, 00500 Internacional

01149, 00871 Islandia

Páginas de códigos ASCII soportadas

CCSID Descripción

00813 ISO 8859-7 Griego /Latino

00819 ISO 8859-1 Latin 1 / Sistemas abiertos

00920 ISO 8859-9 Latin 5 (ECMA-128, Turco TS-5881)

Especificar la página de códigosSi su documento no incluye una declaración de código en la declaración XML, odirectamente no tiene una declaración XML, el analizador utiliza la información decodificación facilitada por la llamada de la subrutina incorporada PLISAX enconjunción con la codificación básica del documento.

También puede especificar la información de codificación para el documento en ladeclaración XML, con la que comienzan la mayoría de documentos XML. Unejemplo de declaración XML que incluye una declaración de codificación es:

<?xml version="1.0" encoding="ibm-1140"?>

Si su documento XML incluye una declaración de codificación, asegúrese de queconcuerda con con la información de codificación proporcionada por la subrutinaincorporada PLISAX y con la codificación básica del documento. Si hay algúnconflicto entre la declaración de codificación, la información de codificaciónproporcionada por la subrutina incorporada PLISAX y la codificación básica deldocumento, el analizador señala un evento XML de excepción.

Especifique la declaración de codificación de la siguiente manera:

Utilizar un númeroPuede especificar el número CCSID (con o sin ceros delanteros), con unos de loselementos siguientes como prefijo (con cualquier combinación de mayúsculas yminúsculas):

IBM_IBM-

CPCP_CP-

CCSID_CCSID-

468 PL/I for WindowsGuía de programación

Page 491: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Utilizar un aliasPuede utilizar cualquiera de los siguientes alias soportados (con cualquiercombinación de mayúsculas y minúsculas):

Página de códigos Alias soportados

037 EBCDIC-CP-US, EBCDIC-CP-CA, EBCDIC-CP-WT,EBCDIC-CP-NL

500 EBCDIC-CP-BE, EBCDIC-CP-CH

813 ISO-8859-7, ISO_8859-7

819 ISO-8859-1, ISO_8859-1

920 ISO-8859-9, ISO_8859-9

1200 UTF-16

ExcepcionesPara la mayoría de excepciones, el texto XML contiene la parte del documento quese ha analizado incluyendo el punto en el que se detectó la excepción. En el casode excepciones de conflicto de codificación, que se señalan antes de que comienceel análisis, la longitud del texto XML es cero o el texto XML contiene solo el valorde declaración de codificación del documento. El ejemplo anterior contiene unelemento que provoca un evento de excepción, el "junk" superfluo que va detrás dela etiqueta de final del elemento "sandwich".

Hay dos tipos de excepciones:1. Excepciones que le permiten continuar con el análisis. Las excepciones

continuables tienen códigos de excepción comprendidos entre 1 y 99, 100.001 y165.535 o 200.001 y 265.535. El suceso de excepción del ejemplo anterior tieneun número de excepción de 1, así que es continuable.

2. Excepciones fatales, que no le permiten continuar. Las excepciones fatalestienen códigos mayores que 99 (pero inferiores a 100.000).

El retorno de un suceso de excepción con un código de retorno no cero suele hacerque el analizador deje de procesar el documento y devuelva el control al programaque invocó la subrutina incorporada PLISAXA o PLISAXB.

En el caso de excepciones continuables, el retorno de un suceso de excepción conun código de retorno cero pide al analizador que continúe procesando eldocumento, aunque pueden producirse más excepciones más adelante. Consulte lasección 2.5.6.1, "Excepciones continuables" para obtener información detalladasobre las acciones que realiza el analizador cuando solicita que continúe.

Se aplica un caso especial a las excepciones con números en los rangos entre100.001 y 165.535, y 200.001 y 265.535. Estos rangos de código de excepción indicanque el identificador de juego de caracteres codificados (CCSID) del documento(determinado al examinar el inicio del documento, incluyendo cualquierdeclaración codificada) no es idéntico al valor CCSID proporcionado (deformaexplícita o implícita) por la subrutina incorporada PLISAXA o PLISAXB, incluso silos dos CCSID son para la misma codificación básica, EBCDIC o ASCII.

Para estas excepciones, el código de excepción que se pasa al suceso de excepcióncontiene el CCSID del documento, más 100.000 para CCSID de EBCDIC y 200.000para CCSID de ASCII. Por ejemplo, si el código de excepción contiene 101.140, elCCSID del documento es 01140. El valor CCSID proporcionado por la subrutina

Capítulo 25. Utilizar en analizador SAX 469

Page 492: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

PLISAXA o PLISAXB se ha definido explícitamente como último argumento en lallama o implícitamente al omitir el último argumento y se usa el valor delcompilador CODEPAGE.

Dependiendo del valor del código de retorno que se devuelve de la función delsuceso de excepción para estas excepciones de conflicto CCSID, el analizador llevaa cabo una de estas tres acciones:1. Si el código de retorno es cero, el analizador continúa utilizando el CCSID

proporcionado por la subrutina incorporada.2. Si el código de retorno contiene el CCSID del documento (es decir, el valor del

código de excepción original menos 100.000 o 200.000), el analizador continúautilizando el CCSID del documento. Este es el único caso en el que elanalizador continúa después de un valor no cero devuelto por uno de loseventos de análisis.

3. Si no, el analizador detiene el procesamiento del documento y devuelve elcontrol a la rutina incorporada PLISAXA o PLISAXB que lanza una condiciónERROR.

EjemploEl siguiente ejemplo ilustra el uso de la subrutina incorporada PLISAXA y utilizael documento XML de muestra citado anteriormente:

saxtest: package exports(saxtest);

define alias eventlimited entry( pointer, pointer, fixed bin(31) )returns( byvalue fixed bin(31) )options( byvalue );

define alias event_end_of_documentlimited entry( pointer )returns( byvalue fixed bin(31) )options( byvalue );

define alias event_predefined_reflimited entry( pointer, char(1) )returns( byvalue fixed bin(31) )options( byvalue nodescriptor );

define alias event_character_reflimited entry( pointer, fixed bin(31) )returns( byvalue fixed bin(31) )options( byvalue );

define alias event_pilimited entry( pointer, pointer, fixed bin(31),

pointer, fixed bin(31) )returns( byvalue fixed bin(31) )options( byvalue );

define alias event_exceptionlimited entry( pointer, pointer, fixed bin(31),

fixed bin(31) )returns( byvalue fixed bin(31) )options( byvalue );

Figura 44. ejemplo de codificación PLISAXA - declaraciones de tipo

470 PL/I for WindowsGuía de programación

Page 493: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

saxtest: proc options( main );

dcl1 eventHandler static

,2 e01 type eventinit( start_of_document )

,2 e02 type eventinit( version_information )

,2 e03 type eventinit( encoding_declaration )

,2 e04 type eventinit( standalone_declaration )

,2 e05 type eventinit( document_type_declaration )

,2 e06 type event_end_of_documentinit( end_of_document )

,2 e07 type eventinit( start_of_element )

,2 e08 type eventinit( attribute_name )

,2 e09 type eventinit( attribute_characters )

,2 e10 type event_predefined_refinit( attribute_predefined_reference )

,2 e11 type event_character_refinit( attribute_character_reference )

,2 e12 type eventinit( end_of_element )

,2 e13 type eventinit( start_of_CDATA )

,2 e14 type eventinit( end_of_CDATA )

,2 e15 type eventinit( content_characters )

,2 e16 type event_predefined_refinit( content_predefined_reference )

,2 e17 type event_character_refinit( content_character_reference )

,2 e18 type event_piinit( processing_instruction )

,2 e19 type eventinit( comment )

,2 e20 type eventinit( unknown_attribute_reference )

,2 e21 type eventinit( unknown_content_reference )

,2 e22 type eventinit( start_of_prefix_mapping )

,2 e23 type eventinit( end_of_prefix_mapping )

,2 e24 type event_exceptioninit( exception )

;

Figura 45. ejemplo de codificación PLISAXA - estructura de eventos

Capítulo 25. Utilizar en analizador SAX 471

Page 494: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

dcl token char(8);

dcl xmlDocument char(4000) var;

xmlDocument =’<?xml version="1.0" standalone="yes"?>’

|| ’<!--This document is just an example-->’|| ’<sandwich>’|| ’<bread type="baker’s best"/>’|| ’<?spread please use real mayonnaise ?>’|| ’<meat>Ham & turkey</meat>’|| ’<filling>Cheese, lettuce, tomato, etc.</filling>’|| ’<![CDATA[We should add a <relish> element in future!]]>’.|| ’</sandwich>’|| ’junk’;

call plisaxa( eventHandler,addr(token),addrdata(xmlDocument),length(xmlDocument) );

end;

Figura 46. ejemplo de codificación PLISAXA - rutina principal

472 PL/I for WindowsGuía de programación

Page 495: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

dcl chars char(32000) based;

start_of_document:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ length=’ || tokenlength );

return(0);end;

version_information:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

encoding_declaration:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

Figura 47. ejemplo de codificación PLISAXA - rutinas de eventos

Capítulo 25. Utilizar en analizador SAX 473

Page 496: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

standalone_declaration:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

document_type_declaration:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

end_of_document:proc( userToken )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;

put skip list( lowercase( procname() ) );

return(0);end;

ejemplo de codificación PLISAXA - rutinas de eventos (continuación)

474 PL/I for WindowsGuía de programación

Page 497: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

start_of_element:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

attribute_name:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

attribute_characters:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

ejemplo de codificación PLISAXA - rutinas de eventos (continuación)

Capítulo 25. Utilizar en analizador SAX 475

Page 498: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

attribute_predefined_reference:proc( userToken, reference )returns( byvalue fixed bin(31) )options( byvalue nodescriptor );

dcl userToken pointer;dcl reference char(1);

put skip list( lowercase( procname() )|| ’ ’ || hex(reference ) );

return(0);end;

attribute_character_reference:proc( userToken, reference )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl reference fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || hex(reference ) );

return(0);end;

end_of_element:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

ejemplo de codificación PLISAXA - rutinas de eventos (continuación)

476 PL/I for WindowsGuía de programación

Page 499: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

start_of_CDATA:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

end_of_CDATA:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

content_characters:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

ejemplo de codificación PLISAXA - rutinas de eventos (continuación)

Capítulo 25. Utilizar en analizador SAX 477

Page 500: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

content_predefined_reference:proc( userToken, reference )returns( byvalue fixed bin(31) )options( byvalue nodescriptor );

dcl userToken pointer;dcl reference char(1);

put skip list( lowercase( procname() )|| ’ ’ || hex(reference ) );

return(0);end;

content_character_reference:proc( userToken, reference )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl reference fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || hex(reference ) );

return(0);end;

processing_instruction:proc( userToken, piTarget, piTargetLength,

piData, piDataLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl piTarget pointer;dcl piTargetLength fixed bin(31);dcl piData pointer;dcl piDataLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(piTarget->chars,1,piTargetLength ) || ’>’ );

return(0);end;

ejemplo de codificación PLISAXA - rutinas de eventos (continuación)

478 PL/I for WindowsGuía de programación

Page 501: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

comment:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

unknown_attribute_reference:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

unknown_content_reference:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

ejemplo de codificación PLISAXA - rutinas de eventos (continuación)

Capítulo 25. Utilizar en analizador SAX 479

Page 502: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

start_of_prefix_mapping:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

end_of_prefix_mapping:proc( userToken, xmlToken, TokenLength )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl tokenLength fixed bin(31);

put skip list( lowercase( procname() )|| ’ <’ || substr(xmltoken->chars,1,tokenlength ) || ’>’ );

return(0);end;

exception:proc( userToken, xmlToken, currentOffset, errorID )returns( byvalue fixed bin(31) )options( byvalue );

dcl userToken pointer;dcl xmlToken pointer;dcl currentOffset fixed bin(31);dcl errorID fixed bin(31);

put skip list( lowercase( procname() )|| ’ errorid =’ || errorid );

return(0);end;end;

ejemplo de codificación PLISAXA - rutinas de eventos (continuación)

El programa anterior produce la salida siguiente:

480 PL/I for WindowsGuía de programación

Page 503: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Códigos de excepción continuablesPara cada valor del parámetro de código de excepción que se pasa al suceso deexcepción (recogido bajo la cabecera "Número"), la siguiente tabla describe laexcepción, y la acción que toma el analizador cuando se solicita que continúedespués de la excepción. En estas descripciones, el término "XML text" hacereferencia a la cadena basada en el puntero y en la longitud pasada al evento.

Tabla 33. Excepciones continuables

Número Descripción Acción del analizador en lacontinuación

1 El analizador encuentra un carácterno válido mientras explora un espacioen blanco fuera del contenido delelemento.

El analizador genera un eventocontent_characters con texto XML quecontiene el carácter no válido (único).El análisis continúa en el carácter quese encuentra después del carácter noválido.

2 El analizador encontró un inicio noválido de una declaración deinstrucción de proceso, elemento,comentario o tipo de documentofuera del contenido del elemento.

El analizador genera un eventocontent_characters con el texto XMLque contiene los 2 o 3 caracteres noválidos de la secuencia de carácterinicial. El análisis continúa en elcarácter que se encuentra después dela secuencia no válida.

start_of_dcoument length= 305version_information <1.0>standalone_declaration <yes>comment <This document is just an example>start_of_element <sandwich>start_of_element <bread>attribute_name <type>attribute_characters <baker>attribute_predefined_reference 7Dattribute_characters <s best>end_of_element <bread>processing_instruction <spread>start_of_element <meat>content_characters <Ham >content_predefined_reference 50content_characters < turkey>end_of_element <meat>start_of_element <filling>content_characters <Cheese, lettuce, tomato, etc.>end_of_element <filling>start_of_cdata <<![CDATA[>content_characters <We should add a <relish> element in future!>end_of_cdata <]]>end_of_element <sandwich>exception errorid = 1content_characters <j>exception errorid = 1content_characters <u>exception errorid = 1content_characters <n>exception errorid = 1content_characters <k>end_of_document

Figura 48. ejemplo de codificación PLISAXA - salida de programa

Capítulo 25. Utilizar en analizador SAX 481

Page 504: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 33. Excepciones continuables (continuación)

Número Descripción Acción del analizador en lacontinuación

3 El analizador encontró un nombre deatributo duplicado.

El analizador genera un eventoattribute_name con el texto XML quecontiene el nombre de atributoduplicado.

4 El analizador encontró el carácter demarcación "<" en un valor de atributo.

Antes de generar un suceso deexcepción, el analizador genera unevento attribute_characters para laparte del valor de atributo que vayaantes del carácter "<". Después delsuceso de excepción, el analizadorgenera un evento attribute_characterscon texto XML que contiene "<". Elanálisis continúa en el carácter quesigue a "<".

5 Los nombres de etiqueta de inicio yfinal de un elemento no coinciden.

El analizador genera un eventoend_of_element con texto XML quecontiene el nombre final que nocoincide.

6 El analizador encontró un carácter noválido en el contenido del elemento.

El analizador incluye el carácter noválido en el texto XML para el eventocontent_characters posterior.

7 El analizador ha encontrado un iniciono válido de un elemento,comentario, instrucción deprocesamiento o sección CDATA en elcontenido del elemento.

Antes de generar el suceso deexcepción, el analizador genera unevento content_characters para laspartes del contenido anteriores alcarácter de marcación "<". Despuésdel suceso de excepción, el analizadorgenera un evento content_characterscon texto XML que contiene 2caracteres: "<" seguido del carácter noválido. El análisis continúa en elcarácter que se encuentra detrás delcarácter no válido.

8 El analizador ha encontrado en elcontenido del elemento las secuenciade caracteres de cierre CDATA “]]”sin la secuencia de caracteres deapertura coincidente “<![CDATA[”.

Antes de generar el suceso deexcepción, el analizador genera unevento content_characters para laspartes del contenido anteriores a lasecuencia de caracteres “]]”. Tras elsuceso de excepción, el analizadorgenera un evento content_characterscon texto XML que contiene lasecuencia de tres caracteres “]]”. Elanálisis continúa en el carácter que seencuentras después de esta secuencia.

9 El analizador ha encontrado uncarácter no válido en un comentario.

El analizador incluye el carácter noválido en texto XML para el siguienteevento de comentario.

10 El analizador ha encontrado en uncomentario la secuencia de caracteres"--" sin ir seguida de ">".

El analizador asume que la secuenciade caracteres "--" termina elcomentario y genera un evento decomentario. El análisis continúa en elcarácter que sigue a la secuencia "--".

482 PL/I for WindowsGuía de programación

Page 505: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 33. Excepciones continuables (continuación)

Número Descripción Acción del analizador en lacontinuación

11 El analizador ha encontrado un uncarácter no válido en un segmento dedatos de instrucción de proceso.

El analizador incluye el carácter noválido en texto XML para el siguienteevento processing_instruction.

12 Un nombre de destino de instrucciónde proceso fue "xml" en minúsculas,mayúsculas o minúsculas ymayúsculas.

EL analizador genera un eventoprocessing_instruction con texto XMLque contiene "xml" en el caso original.

13 El analizador ha encontrado un dígitono válido en una referencia decaracteres hexadecimales (de la forma&#xdddd;).

El analizador genera un eventoattribute_characters ocontent_characters con texto XML quecontiene el dígito no válido. Elanálisis de la referencia continúa en elcarácter que sigue al dígito no válido.

14 El analizador ha encontrado un dígitono válido en una referencia decaracteres decimales (de la forma&#dddd;).

El analizador genera un eventoattribute_characters ocontent_characters con texto XML quecontiene el dígito no válido. Elanálisis de la referencia continúa en elcarácter que sigue al dígito no válido.

15 El valor de declaración de cifrado dela declaración XML no comienza conun valor del alfabeto (A-Z) enmayúsculas o minúsculas.

El analizador genera el evento decifrado con texto XML que contiene elvalor de declaración de cifrado tal ycomo se especificó.

16 Una referencia de carácter no hacereferencia a un carácter XML legal.

El analizador genera un eventoattribute_character_reference ocontent_character_reference conXML-NTEXT que contiene el carácterUnicode único especificado en lareferencia del carácter.

17 El analizador ha encontrado uncarácter no válido en un nombre dereferencia de entidad.

El analizador incluye el carácter noválido en el texto XML para loseventos unknown_attribute_referenceo unknown_content_referenceposteriores.

18 El analizador ha encontrado uncarácter no válido en un valor deatributo.

El analizador incluye el carácter noválido en texto XML para el siguienteevento attribute_characters.

50 El documento se ha codificado enEBCDIC y la opción del compiladorCODEPAGE especificaba una páginade códigos EBCDIC compatible, perola declaración de cifrado deldocumento no especificaba unacodificación reconocible.

EL analizador utiliza la codificaciónespecificada por la opción delcompilador CODEPAGE.

51 El documento se codificó en EBCDICy la declaración de codificación deldocumento especificaba unacodificación EBCDIC compatible, peroel analizador no soporta la página decódigos especificada por la opción delcompilador CODEPAGE.

El analizador utiliza la codificaciónespecificada por la declaración decodificación del documento.

Capítulo 25. Utilizar en analizador SAX 483

Page 506: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 33. Excepciones continuables (continuación)

Número Descripción Acción del analizador en lacontinuación

52 El documento se ha codificado enEBCDIC y la opción del compiladorCODEPAGE especificaba una páginade códigos EBCDIC compatible, perola declaración de cifrado deldocumento especificaba unacodificación ASCII.

EL analizador utiliza la codificaciónespecificada por la opción delcompilador CODEPAGE.

53 El documento se ha codificado enEBCDIC y la opción del compiladorCODEPAGE especificaba una páginade códigos EBCDIC compatible, perola declaración de cifrado deldocumento especificaba unacodificación Unicode compatible.

EL analizador utiliza la codificaciónespecificada por la opción delcompilador CODEPAGE.

54 El documento se ha codificado enEBCDIC y la opción del compiladorCODEPAGE especificaba una páginade códigos EBCDIC compatible, perola declaración de cifrado deldocumento especificaba unacodificación Unicode no soportadapor el analizador.

EL analizador utiliza la codificaciónespecificada por la opción delcompilador CODEPAGE.

55 El documento se ha codificado enEBCDIC y la opción del compiladorCODEPAGE especificaba una páginade códigos EBCDIC compatible, perola declaración de cifrado deldocumento especificaba unacodificación no soportada por elanalizador.

EL analizador utiliza la codificaciónespecificada por la opción delcompilador CODEPAGE.

56 El documento se ha codificado enASCII y la opción del compiladorCODEPAGE especificaba una páginade códigos ASCII compatible, pero ladeclaración de cifrado del documentono especificaba una codificaciónreconocible.

EL analizador utiliza la codificaciónespecificada por la opción delcompilador CODEPAGE.

57 El documento se codificó en ASCII yla declaración de codificación deldocumento especificaba unacodificación ASCII compatible, pero elanalizador no soporta la página decódigos especificada por la opción delcompilador CODEPAGE.

El analizador utiliza la codificaciónespecificada por la declaración decodificación del documento.

58 El documento se ha codificado enASCII y la opción del compiladorCODEPAGE especificaba una páginade códigos ASCII compatible, pero ladeclaración de cifrado del documentoespecificaba una codificación EBCDICcompatible.

EL analizador utiliza la codificaciónespecificada por la opción delcompilador CODEPAGE.

484 PL/I for WindowsGuía de programación

Page 507: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 33. Excepciones continuables (continuación)

Número Descripción Acción del analizador en lacontinuación

59 El documento se ha codificado enASCII y la opción del compiladorCODEPAGE especificaba una páginade códigos ASCII compatible, pero ladeclaración de cifrado del documentoespecificaba una codificación Unicodecompatible.

EL analizador utiliza la codificaciónespecificada por la opción delcompilador CODEPAGE.

60 El documento se ha codificado enASCII y la opción del compiladorCODEPAGE especificaba una páginade códigos ASCII compatible, pero ladeclaración de cifrado del documentoespecificaba una codificación Unicodeno soportada por el analizador.

EL analizador utiliza la codificaciónespecificada por la opción delcompilador CODEPAGE.

61 El documento se ha codificado enASCII y la opción del compiladorCODEPAGE especificaba una páginade códigos ASCII compatible, pero ladeclaración de cifrado del documentoespecificaba una codificación nosoportada por el analizador.

EL analizador utiliza la codificaciónespecificada por la opción delcompilador CODEPAGE.

De 100.001hasta165.535

El documento se codificado enEBCDIC, y la codificaciónespecificada por la opción delcompilador CODEPAGE y ladeclaración de codificación deldocumento son compatibles con laspáginas de códigos EBCDIC, pero noson la misma. El código de excepcióncontiene el CCSID para la declaraciónde codificación más 100.000.

Si se devuelve cero del suceso deexcepción, el analizador utiliza lacodificación especificada por laopción del compilador CODEPAGE.Si se devuelve el CCSID de ladeclaración de codificación deldocumento (restando 100.000 delcódigo de excepción), el analizadorutiliza esta codificación.

200.001hasta265.535

El documento se codificado en ASCII,y la codificación especificada por laopción del compilador CODEPAGE yla declaración de codificación deldocumento son compatibles con laspáginas de códigos ASCII, pero noson la misma. El código de excepcióncontiene el CCSID para la declaraciónde codificación más 200.000.

Si se devuelve cero del suceso deexcepción, el analizador utiliza lacodificación especificada por laopción del compilador CODEPAGE.Si se devuelve el CCSID de ladeclaración de codificación deldocumento (restando 200.000 delcódigo de excepción), el analizadorutiliza esta codificación.

Códigos de excepción de terminaciónTabla 34. Excepciones de terminación

Número Descripción

100 El analizador alcanzó el final del documento mientras exploraba el inicio de la declaraciónXML.

101 El analizador alcanzó el final del documento mientras buscaba el final de la declaraciónXML.

102 El analizador alcanzó el final del documento mientras buscaba el final del elemento raíz.

Capítulo 25. Utilizar en analizador SAX 485

Page 508: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 34. Excepciones de terminación (continuación)

Número Descripción

103 El analizador alcanzó el final del documento mientras buscaba información de la versión enla declaración XML.

104 El analizador alcanzó el final del documento mientras buscaba el valor de información de laversión en la declaración XML.

106 El analizador alcanzó el final del documento mientras buscaba el valor de la declaración decodificación en la declaración XML.

108 El analizador alcanzó el final del documento mientras buscaba el valor de la declaraciónindependiente en la declaración XML.

109 El analizador alcanzó el final del documento mientras exploraba un nombre de atributo.

110 El analizador alcanzó el final del documento mientras exploraba un valor de atributo.

111 El analizador alcanzó el final del documento mientras exploraba una referencia de carácter ouna referencia de entidad en un valor de atributo.

112 El analizador alcanzó el final del documento mientras exploraba un código de elementovacío.

113 El analizador alcanzó el final del documento mientras exploraba el nombre del elementoraíz.

114 El analizador alcanzó el final del documento mientras exploraba un nombre de elemento.

115 El analizador alcanzó el final del documento mientras exploraba datos de caracteres en elcontenido del elemento.

116 El analizador alcanzó el final del documento mientras exploraba una instrucción de procesoen el contenido del elemento.

117 El analizador alcanzó el final del documento mientras exploraba un comentario o secciónCDATA en el contenido del elemento.

118 El analizador alcanzó el final del documento mientras exploraba un comentario en elcontenido del elemento.

119 El analizador alcanzó el final del documento mientras exploraba una sección CDATA en elcontenido del elemento.

120 El analizador alcanzó el final del documento mientras exploraba una referencia de carácter ouna referencia de entidad en el contenido del elemento.

121 El analizador alcanzó el final del documento mientras exploraba tras el cierre del elementoraíz.

122 El analizador ha detectado un posible inicio no válido de una declaración de tipo dedocumento.

123 El analizador ha detectado una segunda declaración de tipo de documento.

124 El primer carácter del nombre del elemento raíz no es una letra, '_' ni ':'.

125 El primer carácter del primer nombre de atributo de un elemento no es una letra, '_' ni ':'.

126 El analizador ha encontrado un carácter no válido en un nombre de elemento o detrás de él.

127 El analizador ha encontrado un carácter distinto a '=' detrás de un nombre de atributo.

128 El analizador ha encontrado un delimitador de valor de atributo no válido.

130 El primer carácter de un nombre de atributo no es una letra, '_' ni ':'.

131 El analizador ha encontrado un carácter no válido en un nombre de atributo o detrás de él.

132 Un código de elemento vacío no se terminó mediante un '>' detrás de '/'.

133 El primer carácter del nombre de etiqueta de final de un elemento no es una letra, '_' ni ':'.

134 Un nombre de etiqueta de final de elemento no se ha terminado mediante '>'.

486 PL/I for WindowsGuía de programación

Page 509: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 34. Excepciones de terminación (continuación)

Número Descripción

135 El primer carácter de un nombre de elemento no es una letra, '_' ni ':'.

136 El analizador ha detectado un inicio no válido de un comentario o sección CDATA en elcontenido del elemento.

137 El analizador ha detectado un inicio no válido de un comentario.

138 El primer carácter del nombre de destino de una instrucción de proceso no es una letra, '_'ni ':'.

139 El analizador ha encontrado un un carácter no válido en un nombre de destino deinstrucción de proceso o detrás de él.

140 No se ha terminado una instrucción de proceso con la secuencia de caracteres de cierre '?>'.

141 El analizador ha detectado un carácter no válido detrás de '&' en una referencia de caráctero en una referencia de entidad.

142 La información de la versión no estaba presente en una declaración XML.

143 El fragmento 'version' de la declaración XML no iba seguido de un '='.

144 Falta el valor de declaración de la versión de la declaración XML o se ha delimitado deforma errónea.

145 El valor de información de la versión de la declaración XML incluía un carácter erróneo olos delimitadores de inicio y fin no coincidían.

146 El analizador ha detectado un carácter no válido detrás del delimitador de cierre del valorde información de la versión de la declaración XML.

147 El analizador ha detectado un atributo no válido en lugar de la declaración de códigoopcional de la declaración XML.

148 El fragmento 'encoding' de la declaración XML no iba seguido de un '='.

149 Falta el valor de declaración del código de la declaración XML o se ha delimitado de formaerrónea.

150 El valor de declaración de código de la declaración XML incluía un carácter erróneo o losdelimitadores de inicio y fin no coincidían.

151 El analizador ha detectado un carácter no válido detrás del delimitador de cierre del valorde declaración de código de la declaración XML.

152 El analizador ha detectado un atributo no válido en lugar de la declaración independienteopcional de la declaración XML.

153 El fragmento 'standalone' de la declaración XML no iba seguido de un '='.

154 Falta el valor de declaración independiente de la declaración XML o se ha delimitado deforma errónea.

155 EL valor de la declaración independiente no era ni "si" ni "no".

156 El valor de declaración independiente de la declaración XML incluía un carácter erróneo olos delimitadores de inicio y fin no coincidían.

157 El analizador ha detectado un carácter no válido detrás del delimitador de cierre del valorde declaración independientede la declaración XML.

158 La declaración XML no se ha terminado con la secuencia de caracteres '?>' adecuada ocontenía un atributo no válido.

159 El analizador ha detectado el inicio de una declaración de tipo de documento después delfinal del elemento raíz.

160 El analizador ha detectado Tel inicio de un elemento después del final del elemento raíz.

300 El documento estaba codificado en EBCDIC, pero la opción del compilador CODEPAGEespecificaba un página de códigos ASCII compatible.

Capítulo 25. Utilizar en analizador SAX 487

Page 510: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Tabla 34. Excepciones de terminación (continuación)

Número Descripción

301 El documento estaba codificado en EBCDIC, pero la opción del compilador CODEPAGEespecificaba Unicode.

302 El documento estaba codificado en EBCDIC, pero la opción del compilador CODEPAGEespecificaba un página de códigos no compatible.

303 El documento estaba codificado en EBCDIC, pero lo opción del compilador CODEPAGE noes compatible y la declaración de código del documento estaba vacía o incluía un alias decodificación alfabética no compatible.

304 El documento estaba codificado en EBCDIC, pero lo opción del compilador CODEPAGE noes compatible y el documento no contenía una declaración de código.

305 El documento estaba codificado en EBCDIC, pero lo opción del compilador CODEPAGE noes compatible y la declaración de código del documento no especificaba un código EBCDICcompatible.

306 El documento estaba codificado en ASCII, pero la opción del compilador CODEPAGEespecificaba un página de códigos EBCDIC compatible.

307 El documento estaba codificado en ASCII, pero la opción del compilador CODEPAGEespecificaba Unicode.

308 El documento estaba codificado en ASCII, pero la opción del compilador CODEPAGE noespecificaba un página de códigos EBCDIC compatible, ASCII o Unicode.

309 La opción del compilador CODEPAGE especificaba una página de códigos ASCIIcompatible, pero el documento estaba codificado en Unicode.

310 La opción del compilador CODEPAGE especificaba una página de códigos EBCDICcompatible, pero el documento estaba codificado en Unicode.

311 La opción del compilador CODEPAGE especificaba una página de códigos no compatible,pero el documento estaba codificado en Unicode.

312 El documento se ha codificado en ASCII, pero los códigos proporcionados externamente y enla declaración de código del documento no son compatibles.

313 El documento estaba codificado en ASCII, pero lo opción del compilador CODEPAGE no escompatible y el documento no contenía una declaración de código.

314 El documento estaba codificado en ASCII, pero lo opción del compilador CODEPAGE no escompatible y la declaración de código del documento no especificaba un código ASCIIcompatible.

315 El documento se ha codificado en UTF-16 Little Endian, y el analizador no lo soporta en estaplataforma.

316 El documento se ha codificado en UCS4 y el analizador no lo soporta.

317 El analizador no puede determinar la codificación del documento. El documento puede estardañado.

318 El documento se ha codificado en UTF-8 y el analizador no lo soporta.

319 El documento se ha codificado en UTF-16 Big Endian y el analizador no lo soporta en estaplataforma.

500a99.999

Error interno. Informe del error a su representante del servicio.

488 PL/I for WindowsGuía de programación

Page 511: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Capítulo 26. Utilizar PL/I MLE en sus aplicaciones

Con la introducción de MLE, PL/I for Windows da soporte a un número defunciones de lenguaje adicionales. El objetivo de este capítulo es que se familiaricecon los atributos, opciones de tiempo de compilación, funciones incorporadas ypatrones de datos nuevos. A medida que avance en el capítulo, se irá haciendo unaidea de cómo utilizarlos en sus aplicaciones existentes.

Aplicar atributos y opcionesLas características de lenguaje introducidas en estas secciones se encuentran en laGuía de programación y referencia de lenguaje, pero se repiten en este capítulopara que comprenda mejor cómo funcionan juntas.

Atributo DATELas conversiones y comparaciones de fechas implícitas se realizan mediante elcompilador su los dos operandos tienen el atributo DATE. El atributoDATEespecifica que una variable, argumento o valor devuelto tiene una fecha con unpatrón especificado. Extensiones del lenguaje del milenio soporta varios patronesde datos tal y como se describe en “Comprender los modelos de datos” en lapágina 491.

patternUno de los patrones de datos soportados. Si no especifica ningún patrón, esvalor predeterminado es AAMMDD.

El atributo fecha solo es válido con variables que tienen uno de los atributossiguientes:v CHAR(n) NONVARYINGv PIC'(n)9' REALv FIXED DEC(n,0) REAL

La longitud o precisión, n, tiene que ser una constante igual a la longitud delpatrón de fecha o del patrón predeterminado.

Cuando se ha especificado la opción de tiempo de compilación RESPECT (de laque hablaremos más adelante en este capítulo), la función incorporada DATEdevuelve un valor con el atributo DATE('YYMMDD'). Esto permite asignar DATE()a una variable con el atributo DATE('YYMMDD') sin que se genere un mensaje deerror. Sin embargo, si se asigna DATE() a una variable que no tiene un atributoDATE, se genera un mensaje de error.

Aquí tiene unos cuantos ejemplos que utilizan el atributo DATE:dcl gregorian_Date char(6) date;

dcl julian_Date pic’(5)9’ date (’YYDDD’);

dcl year fixed dec(2) date(’YY’);

El atributo DATE es útil incluso si no tiene problemas de año 2000 en susaplicaciones. Puede utilizarlo para manipular distintas fechas tal y como semuestra en estos ejemplos:

© Copyright IBM Corp. 1998, 2013 489

Page 512: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

dcl gregorian_Date char(8) date (’YYYYMMDD’);

dcl julian_Date pic’(7)9’ date (’YYYYDDD’);

if julian_Date > gregorian_Date then ...

opción de tiempo de compilación RESPECTUtilice la opción RESPECT para especificar qué atributos debería reconocer elcompilador. Actualmente, DATE es la única selección posible para esta opción detiempo de compilación.

El valor predeterminado es RESPECT() y hace que el compilador ignore cualquierespecificación del atributo DATE. Por lo tanto, el atributo DATE no se aplica alresultado de la función incorporada DATE. NORESPECT es sinónimo deRESPECT()

Por otro lado, especificar RESPECT(DATE) hace que el compilador cumplacualquier especificación del atributo DATE y aplique el atributo DATE al resultadode la función incorporada DATE.

RESPECT() no se acepta cuando se compila con el mandato PLI en TSO/MVS.

opción de tiempo de compilación WINDOWDe forma predeterminada, todas las fechas con años de dos dígitos se visualizanen una ventana que empieza en 1950 y termina en 2049. Puede utilizar la opciónWINDOW para modificar el valor de su ventana de siglo.

Como ya hemos mencionado, el valor predeterminado para esta opción esWINDOW(1950). Puede especificar el valor de w de las siguientes formas:v Un entero sin signo entre 1582 y 9999 (inclusive) que represente el inicio de una

ventana de siglo fijav Un entero negativo entre -1 y -99 (inclusive) que crea una ventana de siglo

"deslizante"v Cero, que indica que el valor de w es el año actual.

Para crear una venta fija, puede especificar WINDOW(1900) y se asume que todoslos años de dos dígitos que introduzca se refieren al siglo XX.

Si el año actual fuera 1998, y quisiera crear una ventana deslizante, podríaespecificar WINDOW(-5). La ventana de siglo resultante abarcaría del año 1993 al2092, inclusive. Cuando el año cambiase a 1999, la ventana también avanzaría unaño.

Si define un valor para la ventana de siglo utilizando la opción de tiempo decompilación WINDOW, ese valor se utiliza para el argumento de ventana de lasfunciones incorporadas que lo permiten, a no ser que se especifique lo contrario.Consulte “Usar funciones incorporadas con MLE” en la página 492 para obtenermás información.

opción de tiempo de compilación RULESEn general, la opción RULES permite o rechaza determinadas capacidades delenguaje y le permite escoger la semántica cuando hay alternativas disponibles.Actualmente, LAXCOMMENT es la única selección disponible para esta opción.

atributo DATE

490 PL/I for WindowsGuía de programación

Page 513: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

El valor predeterminado es RULES(NOLAXCOMMENT). LAXCOM yNOLAXCOM son abreviaturas aceptables para las subopciones.

Si especifica RULES(LAXCOMMENT), el compilador ignora los caracteresespeciales /*/; por lo tanto, sea lo que sea lo que se incluya entre los juegos decaracteres se interpreta como parte de la sintaxis en lugar de como un comentario.Si especifica RULES(NOLAXCOMMENT), el compilador trata /*/ como el inicio deun comentario que continúa hasta que se encuentra un */ de cierre.

Si resulta que tiene código de la estación de trabajo que va a transferir al sistemaprincipal y utiliza /*/ alrededor del atributo DATE, necesita utilizar la opciónRULES(LAXCOMMENT) para que el compilador cumpla el atributo.

Comprender los modelos de datosPL/I MLE soporta una serie de modelos de fecha que se muestran en la siguientetabla.

Tabla 35. Modelos de fecha soportados por PL/I MLE

Año de 4 dígitos Ejemplo Año de 2 dígitos Ejemplo

Primero el año AAAAAAAAMMAAAAMMDDAAAAMMMAAAAMMMDDAAAAMmmAAAAMmmDDAAAADDD

1999199912199912251999DIC1999DIC251999Dic1999Dic251999359

AAAAMMAAMMDDAAMMMAAMMMDDAAMmmAAMmmDDAADDD

99991299122599DIC99DIC2599Dic99Dic2599359

El mes primero MMAAAAMMDDAAAAMMMAAAAMMMDDAAAAMmmAAAAMmmDDAAAA

12199912251999DIC1999DIC251999Dic1999Dic251999

MMAAMMDDAAMMMAAMMMDDAAMmmAAMmmDDAA

1299122599DIC99DIC2599Dic99Dic2599

El día primero DDMMAAAADDMMMAAAADDMmmAAAADDDAAAA

2512199925DIC199925Dic19993591999

DDMMAADDMMMAADDMmmAADDDAA

25129925DIC9925Dic9935999

Cuando se omiten el día o el mes de uno de estos patrones, el compilador asumeque tiene un valor de 1.

Si el día o el mes no se omiten pero están fuera de rango, por ejemplo 00/30/11, seenvía un mensaje si la fecha implica una comparación. La excepción a la regla sonlos casos de patrones AAMM y AAMMDD con valores de todo ceros que se convierten auna fecha juliana de 1, que es la fecha válida más pequeña.

Patrones y sistema de ventanasPara definir cómo se interpreta una fecha con un año de dos dígitos (AA), se defineuna ventana de siglo utilizando la opción de tiempo de compilación WINDOW. Laventana de siglo define el inicio de un espacio de cien años al que hace referenciael año de dos dígitos.

opción de tiempo de compilación RULES

Capítulo 26. Utilizar PL/I MLE en sus aplicaciones 491

Page 514: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Sin la ayuda de la Millennium Language Extensions de PL/I, tendría queimplementar algo similar a la lógica que se muestra a continuación que conviertey2 de un año de dos dígitos en un año de cuatro dígitos con una ventana (w).

dcl y4 pic’9999’;dcl cc pic’99’;

cc = w/100;

if y2 < mod(w,100) theny4 = (100 * cc) + 100 + y2;

elsey4 = (100 * cc) + y2;

Si utiliza este ejemplo y especifica WINDOW(1900), 19 se interpreta como el año1919. Sin embargo, si especifica WINDOW(1950), 10 se interpreta como el año 2019.

De forma inversa, esta lógica calcula el año de dos dígitos (y2) cuando se conviertea partir de un año de cuatro dígitos.

dcl y4 pic’9999’;

if y4 < w | y4 >= w + 100 thensignal error;

y2 = mod(y4,100);

Usar funciones incorporadas con MLELos modelos de datos para MLE PL/I son compatibles con las funcionesincorporadas DAYS y DAYSTODATE. Estas funciones incorporadas aceptan elargumento opcional (w) que especifica una ventana que se va a utilizar paramanejar patrones de años de dos cifras. Si especifica w como parte de DAYS oDAYSTODATE, el valor que introduzca sustituirá al valor definido por la opciónde tiempo de compilación WINDOW.

DAYSDAYS devuelve un valor FIXED BINARY(31,0) que es el número de días (enformato liliano) correspondientes a la fecha d.

d Expresión de serie que representa una fecha. Si se omite, se asume que es elvalor devuelto por DATETIME().

El valor de d tiene que ser de tipo de carácter. Si no, d se convierte a carácter.

p Uno de los modelos de datos compatibles que se muestran en Tabla 35 en lapágina 491. Si se omite, el compilador asume que p es el modelopredeterminado devuelto por la función incorporada DATETIME(AAAAMMDDHHMISS999).

p tiene que ser de tipo de carácter. Si no, se convierte en carácter.

w Una expresión entera que define una ventana de siglo que se utiliza paramanejar cualquier formato de año de dos dígitos.v Si el valor es positivo, como 1950, se trata como año.v Si es negativo o cero, el valor especifica un desplazamiento que tiene que

restarse del año suministrado por el sistema actual.v Si se omite, w adopta de forma predeterminada el valor especificado en la

opción de tiempo de compilación WINDOW.

Patrones y sistema de ventanas

492 PL/I for WindowsGuía de programación

Page 515: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

El siguiente ejemplo muestra el uso de las funciones incorporadas DAYS yDAYSTODATE:

dcl date_format char(8) static init(’MMDDYYYY’);dcl todays_date char(8);dcl sep2_1993 char(8);dcl days_of_july4_1993 fixed bin(31);dcl msg char(100) varying;dcl date_due char(8);

todays_date = daystodate(days(),date_format);

days_of_july4_1993 = days(’07041993’,’MMDDYYYY’);sep2_1993 = daystodate(days_of_july4_1993 + 60, Date_format);

/* 09021993 */

date_due = daystodate(days() + 60, date_format);/* assuming today is July 4, 1993, this would be Sept. 2, 1993

msg = ’Please pay amount due on or before ’ {

substr(date_due, 1, 2) { ’/’ {

substr(date_due, 3,2) { ’/’ {

substr(date_due, 5);

DAYSTODATEDAYSTODATE devuelve una cadena de caracteres no variable que contiene lafecha en formato p que corresponde a d días (en formato liliano).

d El número de días (en formato liliano).

d tiene que ser de tipo computacional y se convierte a FIXED BINARY(31,0) sies necesario.

p Uno de los modelos de datos compatibles que se muestran en Tabla 35 en lapágina 491. Si se omite, el compilador asume que p es el modelopredeterminado devuelto por la función incorporada DATETIME(AAAAMMDDHHMISS999).

p tiene que ser de tipo de carácter. Si no, se convierte en carácter.

w Una expresión entera que define una ventana de siglo que se utiliza paramanejar cualquier formato de año de dos dígitos.v Si el valor es positivo, como 1950, se trata como año.v Si es negativo o cero, el valor especifica un desplazamiento que tiene que

restarse del año suministrado por el sistema actual.v Si se omite, w adopta de forma predeterminada el valor especificado en la

opción de tiempo de compilación WINDOW.

Realizar comparaciones y cálculos de datosCuando comprenda cuáles son las características del lenguaje PL/I y hayarealizado los cambios pertinentes en la sintaxis, podrá utilizar MLE para realizarcálculos y comparaciones en sus aplicaciones.

Cálculos de fecha explícitaPuede utilizar las funciones incorporadas DAYS y DAYSTODATE para hacercomparaciones de fechas y cálculos manualmente.

Comparar fechasPara comparar dos fechas d1 y d2 que tienen el patrón de fecha YYMMDD, puedeutilizar el código siguiente:

DAYS

Capítulo 26. Utilizar PL/I MLE en sus aplicaciones 493

Page 516: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

DAYS (d1, ’YYMMDD’, w) < DAYS(d2, ’YYMMDD’, w)

Convertir fechasPuede convertir entre fechas de dos dígitos (d1) con el patrón YYMMDD y una fechade cuatro dígitos(d2) con el patrón YYYYMMDD utilizando asignaciones:d2 = DAYSTODATE(DAYS(d1,’YYMMDD’,w), ’YYYYMMDD’);d1 = DAYSTODATE(DAYS(d2,’YYYYMMDD’), ’YYMMDD’ ,w);

Restar fechasPara restar dos años de dos dígitos, y1 y y2, tiene que calcular la diferencia que seimpone:

DAYSTODATE(DAYS(y1,’YY’,w), ’YYYY’) -DAYSTODATE(DAYS(y2,’YY’,w),’YYYY’)

Cálculos de fecha implícitaPuede utilizar MLE para aprovechar las conversiones y comparaciones de fechasimplícitas si antes completa los pasos siguientes:v Otorgue a los dos operandos el atributo DATEv Especifique la opción de tiempo de compilación RESPECT

Comparaciones de fechas implícitasEl atributo DATE provoca un commoning implícito cuando se comparan dosvariables declaradas con el atributo DATE. Las comparaciones en las que solo unavariable tiene el atributo DATE se señalan y el otro elemento de comparación sueletratarse como si tuviera el mismo atributo DATE, aunque más adelante veremosalgunas excepciones.

Commomning implícito significa que el compilador genera código para convertirlas fechas en una representación común y comparable. Este proceso convierte añosde dos dígitos utilizando la ventana que especifica en la opción de tiempo decompilación WINDOW.

En el siguiente fragmento de código, si el atributo DATE se cumple, lacomparación en la segunda sentencia de visualización en en ventana. Esto significaque si la ventana comienza en 1900, la comparación devolvería un valor "false". Sinembargo, si la ventana comenzase en 1950, la comparación devolvería un valor"true".

dcl a pic’(6)9’ date;dcl b pic’(6)9’ def(a);dcl c pic’(6)9’ date;dcl d pic’(6)9’ def(c);

b = ’670101’;d = ’010101’;

display( b || ’ < ’ || d || ’ ?’ );display( a < c );

Las comparaciones de fechas también se pueden llevar a cabo en los siguienteslugares:v Sentencias IF y SELECTv Cláusulas WHILE o UNTILv Comparaciones implícitas provocadas por una cláusula TO.

Comparar fechas con patrones igualesEl compilador no genera código especial para comparar fechas con patronesidénticos en las siguientes circunstancias:

Cálculos de fecha explícita

494 PL/I for WindowsGuía de programación

Page 517: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v Se utiliza el operador de comparación = o ¬=v El patrón es igual que AAAA, AAAAMM, AAAADDD o AAAAMMDD.

Comparar fechas con patrones distintosPara comparaciones que implican fechas con patrones distintos, el compiladorgenera código para convertir las fechas en una representación comparable común.Una vez realizada la conversión, el compilador compara los dos valores.

Comparaciones en las que participan un atributo DATE y unliteralSi realiza comparaciones en las que un elemento tiene el atributo DATE y el otro esun literal, el compilador emite un mensaje de nivel W. La acción del compiladordepende del valor del literal de la siguiente manera:v Si el literal parece ser una fecha válida, se trata como si tuviera el mismo patrón

de fecha y ventana que el elemento de la comparación que tiene el atributoDATE.

v Si el literal no parece ser una fecha válida, el atributo DATE se ignora en el otroelemento de la comparación.dcl start_date char(6) date;if start_date >= ’’ then /* no windowing */...if start_date >= ’851003’ then /* windowed */...

Comparaciones en la que participan el atributo DATE y un noliteralEn las comparaciones en las que uno de los elementos tiene el atributo DATE y elotro no es una fecha ni un literal, el compilador envía un mensaje de nivel E. Elvalor que no es una fecha se trata como si tuviera el mismo patrón de fecha que elotro elemento y como si tuviera la misma ventana.

dcl start_date char(6) date;dcl non_date char (6);

if start_date >= non_date then /* windowed */...

Asignaciones DATE implícitasEl atributo DATE también puede hacer que se produzcan conversiones implícitasen asignaciones de dos variables declaradas con patrones de fecha.v Si el origen y el destino tienen los mismos atributos de datos y DATE, la

asignación continúa como si ninguno tuviera el atributo DATE.v Si el origen y el destino tienen distintos atributos DATE, el compilador genera

código para convertir la fecha de origen antes de realizar la asignación.v En las asignaciones en la que el origen tiene el atributo DATE pero el destino no,

el compilador emite un mensaje de nivel E e ignora el atributo DATE.v En las asignaciones en las que el destino tiene el atributo DATE pero el origen

no ( y el origen NO ES un literal), el compilador emite un mensaje de nivel E eignora el atributo DATE.

v En las asignaciones en las que el destino tiene el atributo DATE pero el origenno ( y el origen ES un literal), el compilador emite un mensaje de nivel W eignora el atributo DATE.

dcl start_date char(6) date;start_date = ’’;...

Comparaciones de fechas implícitas

Capítulo 26. Utilizar PL/I MLE en sus aplicaciones 495

Page 518: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

v Si el origen tiene un año de 4 dígitos y el destino tiene un año de dos dígitos, elorigen puede tener un año que no está en la ventana de destino. En este caso selanza la condición ERROR.

dcl x char(6) date;dcl y char(8) date(’YYYYMMDD’);

y = ’20600101’;

x = y; /* raises error if window is <= 1960 */

v El atributo DATE se ignora en:– El depurador– Asignaciones realizadas en sentencias de E/S de registro– Asignaciones realizadas en sentencias de E/S de secuencia (como GET

DATA).

Incluso si no escoge una solución de ventana, es posible que tenga código quenecesite manipular años de dos y cuatro dígitos. Puede utilizar varios patrones dedatos para que le ayuden en estas situaciones:

dcl old_date char(6) date(’YYMMDD’);dcl new_date char(8) date(’YYYYMMDD’);

new_date = old_date;

Asignaciones DATE implícitas

496 PL/I for WindowsGuía de programación

Page 519: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Parte 7. Apéndices

© Copyright IBM Corp. 1998, 2013 497

Page 520: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

498 PL/I for WindowsGuía de programación

Page 521: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Avisos

Esta información se ha desarrollado para productos y servicios ofrecidos en losEstados Unidos. Es posible que IBM no ofrezca los productos, servicios ocaracterísticas que se describen en este documento en otros países. Consulte con elrepresentante local de IBM para obtener información acerca de los productos yservicios que actualmente están disponibles en su localidad. Las referencias hechasa productos, programas o servicios IBM no pretenden afirmar ni dar a entenderque únicamente puedan utilizarse dichos productos, programas o servicios IBM. Ensu lugar, se puede utilizar cualquier producto, programa o servicio funcionalmenteequivalente que no vulnere ningún derecho de propiedad intelectual de IBM. Sinembargo, es responsabilidad del usuario evaluar y comprobar el funcionamiento detodo producto, programa o servicio que no sea de IBM.

IBM puede tener patentes o aplicaciones de patente pendientes que afecten a lostemas tratados en este documento. El suministro de este documento noproporciona ninguna licencia sobre estas patentes. Puede realizar consultas sobrelicencias escribiendo a:

IBM Director of LicensingIBM CorporationNorth Castle DriveArmonk, NY 10504-1785Estados Unidos

Para consultas sobre licencias relacionadas con información de doble byte (DBCS),póngase en contacto con el departamento de propiedad intelectual de IBM en supaís o envíe sus consultas, por escrito, a:

IBM World Trade Asia CorporationLicensing2-31 Roppongi 3-chome, Minato-kuTokyo 106, Japón

El siguiente párrafo no se aplica al Reino Unido ni a ningún otro país donde estasdisposiciones sean sean incompatibles con la legislación vigente:

INTERNATIONAL BUSINESS MACHINES CORPORATION FACILITA ESTAPUBLICACIÓN "TAL CUAL" SIN GARANTÍAS DE NINGÚN TIPO, NIEXPLÍCITAS NI IMPLÍCITAS, INCLUYENDO, PERO SIN LIMITARSE A, LASGARANTÍAS IMPLÍCITAS DE NO INFRACCIÓN, COMERCIALIZACIÓN OADECUACIÓN A UN FIN CONCRETO. Algunas legislaciones no contemplan ladeclaración de limitación de responsabilidades, ni implícitas ni explícitas, endeterminadas transacciones, por lo que cabe la posibilidad de que esta declaraciónno se aplique en su caso.

Esta información puede contener imprecisiones técnicas o errores tipográficos.Periódicamente se realizan cambios en la información aquí contenida; estoscambios se incorporarán en nuevas ediciones de la publicación. IBM puede realizarmejoras o cambios en los productos o programas descritos en esta publicación encualquier momento y sin previo aviso.

Los titulares de licencias de este programa que deseen obtener información sobre elmismo con el fin de permitir: (i) el intercambio de información entre programas

© Copyright IBM Corp. 1998, 2013 499

Page 522: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

creados independientemente y otros programas (incluido éste) y el uso mutuo deinformación que se haya intercambiado, deben ponerse en contacto con:

IBM CorporationJ74/G4555 Bailey AvenueSan Jose, CA 95141-1099Estados Unidos

Dicha información puede estar disponible, sujeta a los términos y condicionescorrespondientes, incluyendo, en algunos casos, el pago de una tarifa.

El programa bajo licencia descrito en este documento y todo el material bajolicencia disponible para el mismo los proporciona IBM bajo los términos de lasCondiciones Generales de IBM, el Acuerdo Internacional de Programas BajoLicencia de IBM o cualquier acuerdo equivalente entre IBM y el cliente.

LICENCIA DE COPYRIGHT

Esta información contiene programas de aplicación de ejemplo en el lenguajefuente, que muestran técnicas de programación en diversas plataformas operativas.Puede copiar, modificar y distribuir estos programas de ejemplo de cualquiermanera sin realizar ningún pago a IBM, a fin de desarrollar, utilizar, comercializary distribuir programas de aplicación que se adecuen a la interfaz de programaciónde aplicaciones para la plataforma operativa para la que se han escrito losprogramas de ejemplo. Estos ejemplos no se han comprobado detenidamente bajotodas las condiciones. Por tanto, IBM no puede garantizar la fiabilidad, capacidadde servicio o funcionamiento de estos programas.

Si está viendo la copia software de la información, es posible que las fotografías olas ilustraciones a color no aparezcan.

Información sobre interfaces de programaciónEsta publicación documenta interfaces de programación que permiten al clienteescribir programas para obtener servicios de IBM PL/I para Windows.

Macros para uso del clienteIBM PL/I para Windows no proporciona macros que permitan una instalación decliente escribir programas que utilicen los servicios de IBM PL/I para Windows.

Atención: no utilice como interfaces de programación ninguna macro IBM PL/Ipara Windows.

Marcas registradasLos siguientes términos son marcas registradas de IBM Corporation en EstadosUnidos y/o en otros países:

AIXCICSCICS/ESADFSMS/MVSDFSORTIBMIMS

IMS/ESALanguage EnvironmentOS/2OS/390ProprinterRationalVisualAgeWebSphere

500 PL/I for WindowsGuía de programación

Page 523: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Windows es una marca registrada de Microsoft Corporation en los Estados Unidosy/o en otros países.

UNIX es una marca registrada en Estados Unidos y/o en otros países con licenciaotorgada de forma exclusiva a través de X/Open Company Limited.

Avisos 501

Page 524: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

502 PL/I for WindowsGuía de programación

Page 525: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Bibliografía

Publicaciones PL/I

PL/I para AIXGuía de programación, SC14-7319Referencia de lenguaje, SC14-7320Mensajes y códigos, GC14-7321Guía de instalación, GC14-7322

Publicaciones de Enterprise PL/IGuía de programación, GI11-9145Referencia de lenguaje, SC14-7285Mensajes y códigos, GC14-7286Guía de diagnóstico, GC27-1459Guía del compilador y de la migración en tiempo de ejecución, GC14-7284

Publicaciones relacionadas

DB2 UDB para OS/390 y z/OSGuía de administración, SC26-9931Referencia de mandatos, SC26-9934Referencia SQL, SC26-9944Guía de rogramación de aplicaciones y SQL, SC26-9933Mensajes y códigos, GC26-9940

TXSeries para multiplataformasGuía de administración de Encina Volumen 2: Administración del servidor, SC09-4474Guía de programación SFS Encina, SC09-4483Consulte también el Information Center: publib.boulder.ibm.com/infocenter/txformp/v7r1/index.jsp

© Copyright IBM Corp. 1998, 2013 503

Page 526: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

504 PL/I for WindowsGuía de programación

Page 527: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Glosario

Este glosario define términos de todas lasplataformas y releases de PL/I. Puede incluirtérminos que no se utilicen en este manual. Si noencuentra los términos que busca, consulte elíndice del manual o el Diccionario de términosinformáticos de IBM, SC20-1699.

A

acceso Hacer referencia o recuperar datos.

accesorio de una tareaLa invocación de un procedimiento y elestablecimiento de un flujo de controlindependiente para ejecutar elprocedimiento invocado (y losprocedimientos que este invoque) deforma asíncrona, con la ejecución delprocedimiento que invoca.

acción de sentencia ONLa acción establecida explícitamente parauna condición que se ejecuta cuando selanza la condición. Cuando se encuentrala sentencia ON en el flujo de control delprograma, se ejecuta, estableciendo laacción para la condición. La acción seejecuta cuando se lanza la condición si launidad ON sigue establecida o larestablece una sentencia RESIGNAL. Encontraposición a acción implícita.

acción establecidaLa acción que se lleva a cabo cuandosurge una condición. Véase también acciónimplícita y acción de sentencia ON.

acción estándar del sistemaAcción especificada por el lenguaje que seva a tomar para una condición habilitadaen ausencia de una unidad ON paradicha condición.

acción implícitaLa acción se toma cuando se lanza unacondición habilitada y no se haestablecido una unidad ON para dichacondición. En contraposición a acción desentencia ON.

activar (una variable del preprocesador o unpunto de entrada del preprocesador)

Hacer que un identificador de recursosmacro sea apto para sustituir en códigofuente posterior. La sentencia

%ACTIVATE activa las variables delpreprocesador o el punto de entrada delpreprocesador.

activar (un bloque)Iniciar la ejecución de un bloque. Unbloque de procedimiento se activa alinvocarlo. Un bloque de comienzo seactiva cuando se encuentra en el flujonormal de control, incluyendo unaramificación. No se puede activar unpaquete.

activo El estado de un bloque después de laactivación y antes de la terminación. Elestado en el que se dice que está unnombre de variable de preprocesador o deentrada de preprocesador cuando su valorpuede sustituir al identificadorcorrespondiente en el texto del programafuente. El estado en el que se dice queestá una variable de evento durante eltiempo que está asociada a una operaciónasíncrona. El estado en el que se dice queestá una variable de tarea cuando estáadjunta su tarea asociada. El estado en elque se dice que está una tarea antes deque se termine.

agregadover agregado de datos.

agregado conectadoUna matriz o estructura cuyos elementosocupan almacenamiento contiguo sinintervenir elementos de datos. Encontraposición a agregado no conectado.

agregado de datosUn elemento de datos es una colección deotros elementos de datos.

alfabeto extendidoLos caracteres alfabéticos en mayúsculas yminúsculas de la A a la Z, $, @ y #, o losespecificados en la opción del compiladorNAMES.

alineaciónEl almacenamiento de elementos de datosen relación a determinados límitesdependientes de la máquina (por ejemploun límite de palabra completa o mediapalabra).

© Copyright IBM Corp. 1998, 2013 505

Page 528: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

almacenamiento conectadoAlmacenamiento principal de unasecuencia lineal ininterrumpida deelementos a los que se puede hacerreferencia mediante un nombre único.

almacenamiento no conectadoAlmacenamiento ocupado por elementosde datos no conectados. por ejemplo, lasmatrices intercaladas y las estructuras condimensiones heredadas se encuentran enalmacenamientos no conectados.

ámbito (de una declaración o nombre)La porción de un programa en el que seconoce un nombre en particular.

ámbito (de un prefijo de condición)La porción de programa en el que seaplica un prefijo de condicióndeterminado.

anidamientoLa aparición de:v Un bloque dentro de otro bloquev Un grupo dentro de otro grupov Una sentencia IF en una cláusula

THEN o en una cláusula ELSEv Una referencia de función como

argumento de una referencia de funciónv Un elemento de formato remoto en la

lista de formatos de una sentenciaFORMAT

v Una lista de descriptores de parámetrosen otra lista de descriptores deparámetros

v Una especificación de atributo en unalista de nombres entre paréntesis parala que factorizan uno o varios atributos.

apertura (de un archivo)La asociación de un archivo con unconjunto de datos.

apertura implícitaLa apertura de un archivo como resultadode una sentencia de entrada o salidadistinta a la sentencia OPEN.

archivoUna representación con nombre, dentrode un programa, de un conjunto de datoso de conjuntos de datos. Un archivo estáasociado con los conjuntos de datos paracada apertura.

archivo de vertidoConjunto de datos denominado SYSUT1que se utiliza como archivo de trabajotemporal.

archivo estándarUn archivo asumido por PL/I en ausenciade una opción FILE o STRING en unasentencia GET o PUT. SYSIN es el archivode entrada estándar y SYSPRINT es elarchivo de salida estándar.

área Una porción de almacenamiento en la quepueden asignarse variables de base.

argumentoUna expresión de una lista de argumentoscomo parte de una invocación de unasubrutina o función.

argumento ficticioAlmacenamiento temporal que se creaautomáticamente para guardar el valor deun argumento que no puede pasarsecomo referencia.

artículo baseLa variable automática, controlada oestática o el parámetro según el cual sedefine una variable definida.

ASCII Código Nacional Americano de Normaspara el Intercambio de la Información(ASCII)

asignaciónEl proceso de otorgar un valor a unavariable.

asignaciónLa reserva de almacenamiento principalpara una variable. Una generación de unavariable asignada. La asociación de unarchivo PL/I con un conjunto de datosdel sistema, un dispositivo o un archivo.

asignación de almacenamiento automáticoLa asignación de almacenamiento paravariables automáticas.

asignación de almacenamiento basadoLa asignación de almacenamiento paravariables basadas.

asignación de almacenamiento de controlLa asignación de almacenamiento paravariables controladas.

asignación de almacenamiento estáticoLa asignación de almacenamiento paravariables estáticas.

506 PL/I for WindowsGuía de programación

Page 529: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

atenciónUna incidencia, ajena a una tarea, quepuede hacer que una tarea se interrumpa.

atributoUna propiedad descriptiva asociada a unnombre para describir una característicarepresentada. Una propiedad descriptivautilizada para describir una característicadel resultado de la evaluación de unaexpresión.

atributo aditivoUn atributo de descripción de archivo queno tiene valores predeterminados, y que,si es necesario, tiene que estar indicadoexplícita o implícitamente por otroatributo indicado explícitamente. Encontraposición al atributo alternativo.

atributo alternativoUn atributo de descripción de archivo quese elige de un grupo de atributos. Si no seespecifica ninguno, se asume un valorpredeterminado. En contraposición alatributo aditivo.

atributo de datosUna palabra clave que especifica el tipode datos que representa el elemento dedatos, como FIXED BINARY.

atributo de dimensiónUn atributo que especifica el número dedimensiones de una matriz y que indicalos límites de cada dimensión.

atributos de descripción de archivoPalabras clave que describen lascaracterísticas individuales de cadaconstante de archivo. Véase tambiénatributo alternativo y atributo aditivo.

B

base El sistema de números con el que serepresenta un valor aritmético.

BCDIC(Código de intercambio decimal ampliadocodificado en binario). Un juego decaracteres codificado compuesto decaracteres codificados de 8 bits.

bibliotecaUn conjunto de datos particionados MVSo un CMS MACLIB que puede utilizarsepara almacenar otros conjuntos de datosdenominados miembros.

binarioUn sistema de números cuyos únicosnumerales son el 0 y el 1.

bit Un 0 o un 1. La cantidad más pequeña deespacio de almacenamiento del sistema.

bloqueUna secuencia de sentencias, procesadascomo una unidad, que especifica elámbito de los nombres y la asignación dealmacenamiento de los nombresdeclarados en ella. Un bloque puede serun paquete, un procedimiento o unbloque de inicio.

bloque contenedorEl bloque de inicio, paquete oprocedimiento que contiene ladeclaración, sentencia, procedimiento otexto de origen en cuestión.

bloque contenido, declaración o texto de origenTodos los bloques, procedimientos,sentencias, declaraciones o texto de origendentro de un bloque de paquete,procedimiento o inicio. Todo el paquete,el procedimiento y la sentencia BEGIN ysus correspondientes sentencias END noestán contenidas en el bloque.

bloque de inicioUn conjunto de sentencias delimitadaspor las sentencias BEGIN y END, queforman un ámbito de nombre. Un bloquede inicio se activa al lanzarse unacondición (si el bloque de inicio es laespecificación de acción de una unidadON) o a través de flujo normal de control,incluyendo cualquier bifurcación derivadade una sentencia GOTO.

bloque de llamadaUn bloque que activa un procedimiento.

bloque internoUn bloque contenido por otro bloque.

bucle Una secuencia de instrucciones que seejecuta de forma iterativa.

Búfer (almacenamiento intermedio)Almacenamiento intermedio, que seutiliza en operaciones entrada/salida, enel que se lee un registro durante unaentrada y se graba un registro duranteuna salida.

C

Glosario 507

Page 530: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

campo (de una especificación de imagen)Cualquier especificación de imagen decadena de caracteres o el fragmento (o eltodo) de una especificación de imagen decarácter numérico que describe unnúmero de coma fija.

campo (en el flujo de datos)La porción del flujo de datos en la que elnúmero de caracteres está definido por unelemento de formato espaciado o de datoúnico.

carácter alfabéticoCualquiera de los caracteres de la A a la Zdel alfabeto inglés, además de loscaracteres #, $ y @ (que pueden tener unarepresentación gráfica distinta en otrospaíses).

carácter comercial

v carácter de especificación de imagenCR (crédito)

v carácter de especificación de imagenDB (dédito)

carácter de controlUna carácter de un juego de caracterescuya aparición en un contexto enparticular especifica una función decontrol. Un ejemplo es el marcador fin delarchivo (EOF).

carácter de enlaceEl símbolo de guión bajo ( _ ). Puedeutilizarse para mejorar la legibilidad delos identificadores. Por ejemplo, unavariable podría llamarseOLD_INVENTORY_TOTAL en lugar deOLDINVENTORYTOTAL.

carácter de imagen de dígito decimalEl carácter de especificación de imagen 9.

carácter de punto de inserciónUn carácter de especificación de imagenque, bajo asignación de los datosasociados a una cadena de caracteres, seasigna en la posición indicada. Cuando seutiliza en un elemento de formato P paradatos de entrada, el carácter de insercióntiene fines de comprobación.

caracteres alfanuméricosUn carácter alfabético o un dígito.

caracteres de especificación de imagenCualquiera de los caracteres que puedenutilizarse en una especificación deimagen.

caracteres de exponenteLos siguientes caracteres de especificaciónde imagen:1. K y E, que se utilizan en

especificaciones de imagen de comaflotante para indicar el inicio delcampo del exponente.

2. F, el carácter de factor de escala,especificado con una constante enteraque indica el número de posicionesdecimales que se va a mover la comadecimal desde su posición asumidahacia la derecha (si la constante espositiva) o la izquierda (si la constantees negativa).

caracteres de símbolo de moneda y signoLos caracteres de especificación deimagen. S, +, - y $ (u otros símbolos demoneda nacionales delimitados entre < y>).

caracteres de supresión de cerosLos caracteres de especificación deimagen Z y *, que se utilizan parasuprimir ceros en las posiciones de dígitoscorrespondientes y sustituirlos porespacios en blanco o asteriscosrespectivamente.

carácter extralingüísticosCaracteres (como $, @ y #) que no seclasifican como caracteres alfanuméricosni especiales. Este grupo incluyecaracteres determinados con la opción delcompilador NAMES.

ceros no significativosCeros que no tienen relevancia en unvalor aritmético. Todos los ceros situadosa la izquierda de un no cero en unnúmero.

cierre (de un archivo)La disociación de un archivo de unconjunto de datos o dispositivo.

cláusula de selecciónUna cláusula WHEN o OTHERWISE deun grupo de selección.

clave Datos que identifican un registro en unconjunto de datos de acceso directo.Véase clave de origen y clave de registro.

clave de origenUna clave a la que se hace referencia enuna sentencia de transmisión orientada a

508 PL/I for WindowsGuía de programación

Page 531: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

registro que identifica un registroparticular en un conjunto de datos deacceso directo.

clave de registroUna cadena de caracteres que identificaun registro en un conjunto de datos deacceso directo donde la cadena decaracteres también forma parte de losdatos.

clave genéricaUna cadena de caracteres que identificauna clase de claves. Todas las claves quecomienzan con la cadena son miembrosde esa clase. Por ejemplo, las claves deregistro 'ABCD', 'ABCE' y'ABDF', sontodas miembros de las clases identificadaspor las claves genéricas 'A' y 'AB', y lasdos primeras también son miembros de laclase 'ABC'; y las tres claves de registropueden considerarse miembros únicos delas clases 'ABCD', 'ABCE', 'ABDF',respectivamente.

comentarioUna cadena de cero o más caracteres quese utiliza para documentación y que estádelimitada por /* y */.

comparación aritméticaUna comparación de valores numéricos.Consulte también comparación de bits,comparación de caracteres.

comparación de bitsUna comparación bit a bit de izquierda aderecha de dígitos binarios. Véasetambién comparación aritmética, comparaciónde caracteres.

comparación de caracteresUna comparación carácter por carácter deizquierda a derecha según la secuencia declasificación. Véase también comparaciónaritmética, comparación de bits.

concatenaciónLa operación que une dos cadenas en elorden especificado, formando una cadenacuya longitud es igual a la suma de laslongitudes de las dos cadenas originales.Se especifica mediante el operador ||.

condiciónUna situación excepcional, ya sea un error(como un desbordamiento), o unasituación inesperada (como el final de unarchivo de entrada). Cuando surge unacondición (se detecta), se procesa la acción

establecida para ella. Véase también acciónestablecida y acción ímplicita.

condición ONUna aparición, en un programa PL/I quepuede provocar la interrupción de unprograma. Puede ser la detección de unaerror inesperado o de una apariciónesperada, pero en un momentoimprevisible.

conjunto de datosUna colección de datos externa alprograma a la que se puede accedermediante la referencia a un nombre dearchivo único. Un dispositivo al que sepuede hacer referencia.

conocido (aplicado a un nombre)Reconocido con su significado declarado.Un nombre es conocido en todo suámbito.

ConstanteUn elemento de datos de cadena oaritméticos que no tiene nombre y cuyovalor no puede cambiar. Un identificadordeclarado con el atributo VALUE. Unidentificador declarado con el atributoFILE o ENTRY pero sin el atributoVARIABLE.

constante aritméticaUna constante de coma fija o unaconstante de coma flotante. Aunque lamayoría de las constantes aritméticaspueden ir acompañadas de un signo, elsigno no forma parte de la constante.

constante de archivoUn nombre declarado con el atributo FILEpero no el atributo VARIABLE.

constante de cadena de caracteresUna secuencia de caracteres delimitadospor comillas simples, por ejemplo'Shakespeare''s 'Hamlet:''.

constante de coma fijaVéase constante aritmética.

constante de coma fija decimalUna constante formada por uno o variosdígitos decimales con una coma decimalopcional.

constante de coma flotanteVéase constante araritmética.

constante de coma flotante decimalUn valor compuesto por un significante

Glosario 509

Page 532: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

formado por una constante de coma fijadecimal y un exponente compuesto de laletra E seguida de una constante deentero que no supere los tres dígitos yque puede estar firmada o no.

constante de entradaEl prefijo de etiqueta de una sentenciaPROCEDURE (un nombre de entrada). Ladeclaración de un nombre con el atributoENTRY pero sin el atributo VARIABLE.

constante de etiquetaUn nombre escrito como el prefijo deetiqueta de una sentencia (distinta aPROCEDURE, ENTRY, FORMAT oPACKAGE) para que, durante laejecución, el control del programa puedatransferirse a esa sentencia a través deuna referencia a un prefijo de etiqueta.

constante de formatoEl prefijo de etiqueta o una sentenciaFORMAT.

constante de paqueteEl prefijo de etiqueta de una sentenciaPACKAGE.

constante de serie de bitsUna serie de dígitos binarios delimitadosy seguidos por el sufijo B. Encontraposición a constante de tipo carácter.Una serie de dígitos hexadecimalesdelimitados por comillas simples yseguidos por el sufijo B4.

consulta de funciones incorporadasEl nombre de una función incorporada,que tiene una lista de argumentosopcional.

conversiónLa transformación de un valor desde unarepresentación a otra para someterse a undeterminado conjunto de atributos. Porejemplo, convertir una cadena decaracteres en un valor aritmético comoFIXED BINARY (15,0).

conversión aritméticaLa transformación de un valor de unarepresentación aritmética a otra.

cualificación de ubicadorEn una referencia a una variable de base,puede ser la variable de localizador o unareferencia de función conectada medianteuna flecha a la izquierda de una variablede base para especificar la generación de

la variable a la que hace referencia lareferencia. Puede ser una referenciaimplícita.

cuerpo de sentenciaUn cuerpo de sentencia puede ser unasentencia compuesta o una sentenciasimple.

D

datos Representación de información o devalores en una forma apta para suprocesamiento.

datos aritméticosDatos que tienen las características debase, escala, modalidad y precisión. Seincluyen datos aritméticos cifrados ycaracteres numéricos en imagen.

datos aritméticos cifradosElementos de datos que representanvalores numéricos y se caracterizan porsu base (decimal o binaria), escala (comafija o coma flotante) y precisión (elnúmero de dígitos que puede tener cadauno). Esta información se almacena en unformulario que es aceptable, sinconversiones, para los cálculosaritméticos.

datos autodefinidoresUn agregado que contiene elementos dedatos cuyos límites, longitudes y tamañosse determinan en el tiempo de ejecucióndel programa y se almacenan en unmiembro del agregado.

datos complejosDatos aritméticos, cada elemento constade una parte real y una parte imaginaria.

datos de carácter numéricoVéase datos de imagen decimales.

datos de control de programaDatos de área, área, etiqueta, formato,entrada y archivo que se utilizan paracontrolar el procesamiento de unprograma PL/I.

datos de entradaUn elemento de datos que representa unpunto de entrada para un procedimiento.

datos de etiquetaUna constante de etiqueta o el valor deuna variable de etiqueta.

510 PL/I for WindowsGuía de programación

Page 533: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

datos de imagenDatos numéricos, datos de caracteres ouna mezcla de ambos, representados enforma de caracteres.

Datos de imagen de cadena de caracteresdatos de imagen que solo tienen un valorde carácter. Este tipo de datos de imagentiene que tener al menos un carácter deespecificación de imagen A o X. Encontraposición a datos de imagen numéricos.

datos de imagen decimalesConsulte datos de imagen numéricos.

datos de imagen numéricosDatos de imagen que tienen un valoraritmético además de un valor de carácter.Este tipo de datos de imagen no puedecontener los caracteres 'A' o 'X.'

datos del problemaDatos de imagen, gráficos, carácter, bit yaritmética codificados.

DBCS En el conjunto de caracteres, cada carácterestá representado por dos bytesconsecutivos.

decimalEl sistema numérico cuyos número vandel 0 al 9.

decimal empaquetadoLa representación interna de un elementode datos decimales de coma fija.

declaraciónEl establecimiento de un identificadorcomo un nombre y la especificación de unconjunto de atributos (parcial o completo)para el mismo. Un origen de atributos deun nombre particular.

declaración contextualLa aparición de un identificador que nose ha declarado explícitamente en unasentencia DECLARE, pero cuyo contextode uso permite la asociación de atributosespecíficos con el identificador.

declaración explícitaEl aspecto de un identificador (unnombre) en una sentencia DECLARE,como un prefijo de etiqueta, o en una listade parámetros. En contraposición adeclaración implícita.

declaración implícitaUn nombre no declarado explícitamenteen una sentencia DECLARE o declaradocontextualmente.

declaración múltipleDos o más declaraciones del mismoidentificador de uso interno para elmismo bloque sin cualificaciones distintas.Dos o más declaraciones externas delmismo identificador.

delimitadorTodos los comentarios y los siguientescaracteres: porcentaje, paréntesis, coma,punto, punto y coma, dos puntos, símbolode asignación, espacio en blanco, puntero,asterisco y comilla simple. Definen loslímites de identificadores, constantes,especificaciones de imagen, ISUB ypalabras claves.

delimitarEncerrar uno o varios elementos osentencias entre caracteres o palabrasclaves.

depuraciónProceso de eliminar errores de unprograma.

desactivadoEl estado en el que se dice que está unidentificador cuando su valor no puedesustituir a un identificador delpreprocesador en el texto del programade origen. En contraposición a activo.

descriptorUn bloque de control que tieneinformación sobre una variable, comotamaño de área, límites de matriz olongitud de serie.

descriptor de parámetrosEl conjunto de atributos especificadospara un parámetro en una especificaciónde atributos ENTRY.

descriptor genéricoUn descriptor utilizado en un atributoGENERIC.

descriptor RETURNSUn descriptor utilizado en un atributoRETURNS, y en la opción RETURNS delas sentencias PROCEDURE y ENTRY.

Glosario 511

Page 534: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

desplazamientoCambio de datos en el almacenamientohacia la izquierda o la derecha de suposición original.

desplazamiento a datos estándarSímbolo utilizado para señalar elcompilador al final de una serie de doblebyte.

desplazamiento a datos ideográficosSímbolo utilizado para señalar elcompilador al principio de una serie dedoble byte.

destinoAtributos en los que se convierte unelemento de datos (origen).

Diccionario de símbolos externos (ESD)Tabla que contiene los símbolos externosque aparecen en el módulo de objeto.

dígito Uno de los caracteres que van del 0 al 9.

dígito binarioVéase bit.

dígito hexadecimalUno de los dígitos del 0 al 9 y de la A ala F. Los caracteres de la A a la Frepresentan los valores decimales del 10al 15, respectivamente.

dimensiones heredadasEn una estructura, unión o elemento, lasdimensiones que se derivan de lasestructuras contenedoras. Si el nombre esun elemento que no es una matriz, lasdimensiones están compuestascompletamente de sus dimensionesheredadas. Si el nombre es un elementoque es una matriz, sus dimensionesconstan de las dimensiones heredadas yde las dimensiones declaradasexplícitamente. Una estructura con una ovarias estructuras heredadas se denominaagregado no conectado. En contraposicióna agregado conectado.

dirigido a listaEl tipo de transmisión orientada asecuencia en la que los datos de lasecuencia aparecen como constantesdeparadas por espacios en blanco o comasy para los que se proporciona un formatode manera automática.

do-loopVéase grupo DO iterativo.

E

elementoUn elemento de datos único en oposicióna una colección de elementos de datos,como una matriz; un elemento escalar.

elemento baseUn miembro de una estructura o uniónque no es otra estructura o unión.

elemento de datosUna unidad de datos con nombre única.

elemento de formato de controlUna especificación utilizada en latransmisión dirigida a edición paraespecificar el posicionamiento de unelemento de datos en la secuencia opágina impresa.

elemento de formato remotoLa letra R seguida de la etiqueta (entreparéntesis) de una sentencia FORMAT. Lasentencia de formato la utilizan sentenciasde transmisión de datos dirigidos aedición para controlar el formato de losdatos que se transmiten.

entero Una secuencia de dígitos con o sin signoo una secuencia de bits sin una comabinaria o decimal. Un número entero cono sin signo, comúnmente descrito comoFIXED BINARY (p,0) o FIXED DECIMAL(p,0).

entorno (de una activación)Información que utiliza el bloqueinvocado relativa a los datos declaradosen los bloques contenedores.

entorno (de una constante de etiqueta)Identidad de la activación particular deun bloque al que se aplica una referenciaa una constante sentencia-etiqueta. Estainformación se determina en el momentoen el que se pasa una constantesentencia-etiqueta como argumento o seasigna a una variable sentencia-etiqueta, yse pasa o asigna junto a la constante.

entrada/salidaLa transferencia de datos entre unalmacenamiento principal y medioauxiliar.

epílogoLos procesos que se producenautomáticamente al final de un bloque ouna tarea.

512 PL/I for WindowsGuía de programación

Page 535: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

escala Un sistema de notación matemática cuyarepresentación de un valor aritmético esuna coma flotante o una coma fija.

especificación de acciónEn una sentencia ON, la unidad ON o lapalabra clave única SYSTEM, cualquierade las cuales especifica la acción que seva a realizar cuando se formule lacondición adecuada.

especificación de datosLa porción de una sentencia detransmisión orientada a secuencia queespecifica el modo de transmisión (DATA,LIST o EDIT) e incluye la lista de datos y,para la modalidad dirigida a edición, lalista de formatos.

especificación de imagenUn elemento de datos que se describeutilizando los caracteres de imagen deuna declaración con el atributo PICTUREo en un elemento de formato P.

especificación repetitivaUn elemento de una lista de datos queespecifica una iteración controlada paratransmitir uno o varios elementos dedatos, normalmente utilizados enconjunción con matrices.

estándar predeterminadoEl atributo alternativo u opción que seasume cuando no se ha especificadoninguno y no hay ninguna sentenciaDEFAULT aplicable.

estructuraUna colección de elementos de datos queno tienen que tener atributos idénticos. Encontraposición a matriz.

estructura de matricesUna estructura que tiene el atributo dedimensión.

estructura menorUna estructura contenida en otraestructura o unión. El nombre de unaestructura menor está declarado con unnúmero de nivel mayor que uno y mayorque su unión o estructura padre.

estructura principalUna estructura cuyo nombre estádeclarado con el número de nivel 1.

estructurarLa jerarquía de una estructura en

términos del número de miembros, elorden en que aparecen, sus atributos y sunivel lógico.

etiquetaUn nombre antepuesto a una sentencia.Un nombre en una sentenciaPROCEDURE se denomina constante deentrada; un nombre en una sentenciaFORMAT se denomina contante deformato; un nombre en otro tipo desentencia se denomina constante deetiqueta. Un elemento de datos que tieneel atributo LABEL.

etiqueta de formatoEl prefijo de etiqueta de una sentenciaFORMAT.

etiqueta de sentenciaVéase constante de etiqueta.

evaluaciónLa reducción de una expresión a un valorúnico, una matriz de valores o unaconjunto de valores estructurado.

eventoUna actividad en un programa cuyoestado y terminación puede determinarsemediante una variable de eventoasociada.

expresiónUna notación, dentro de una programa,que representa un valor, una matriz devalores o un conjunto de valoresestructurado. Una constante o unareferencia que aparece sola, o unacombinación de constantes y/o referenciascon operadores.

expresión de archivoUna expresión cuya evaluación produceun valor del archivo tipo.

expresión de elementosUna expresión cuya evaluación produceen valor de elemento.

expresión de entradaUna expresión cuya evaluación produceun nombre de entrada.

expresión de estructuraUna expresión cuya evaluación produceun conjunto de valores de estructura.

expresión de matrizUna expresión cuya evaluación produceuna matriz de valores.

Glosario 513

Page 536: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

expresiones agregadasUna expresión de matriz, estructura ounión.

expresión operacionalUna expresión que consta de uno o variosoperadores

expresión REFERLa expresión que precede a la palabraclave REFER, que se utiliza como límite,longitud o tamaño cuando se asigna lavariable de base que contiene una opciónREFER, ya sea mediante una sentenciaALLOCATE o LOCATE.

expresión restringidaUna expresión que puede evaluarsemediante el compilador durante lacompilación, resultando en una constante.Los operandos de una expresión así sonconstantes, constantes con nombre yexpresiones restringidas.

extensiónEl rango indicado por los límites de unadimensión de matriz, por la longitud deuna serie, o por el tamaño de un área. Eltamaño del área de destino si está área seasignase al área de destino.

extensión ajustableEl límite (de una matriz), la longitud (deuna cadena) o el tamaño (de un área) quepueden ser diferentes para distintasgeneraciones de la variable asociada. Lasextensiones ajustables se especifican comoexpresiones o asteriscos (o por opcionesREFER para variables basadas) que seevalúan de forma independiente en cadageneración. No se pueden utilizar paravariables estáticas.

F

factor de escalaUna especificación del número de dígitosfraccionarios en un número de coma fija.

factor de escaladoVéase factor de escala.

factor de iteraciónEn una especificación de atributoINITIAL, una expresión que especifica elnúmero de elementos consecutivos de unamatriz que se van a inicializar con elvalor dado. En una lista de formatos, unaexpresión que especifica el número deveces que un determinado elemento de

formato o lista de elementos de formatosse utiliza en sucesión.

factor de repeticiónUna constante de entero sin signo entreparéntesis que especifica:1. El número de veces que se repite la

constante de tipo serie que sigue.2. El número de veces que se repite el

carácter de imagen que sigue.

factorizaciónLa aplicación de uno o varios atributos auna lista de nombres entre paréntesis deuna sentencia DECLARE, eliminando larepetición de atributos idénticos paravarios nombres.

flujo de controlSecuencia de ejecución

Formatear datosUna variable con el atributo FORMAT.

formatoUna especificación utilizada en unatransmisión de datos dirigida a ediciónpara describir la representación delelemento de datos en la corriente(elemento de formato de datos) o elposicionamiento específico de unelemento de datos dentro de la secuencia(elemento de formato de control).

función incorporadaUna función predefinida suministrada porel lenguaje, como SQRT (raíz cuadrada).

función (procedimiento)Un procedimiento que tiene una opciónRETURNS en la sentencia PROCEDURE.Un nombre declarado con el atributoRETURNS. Se invoca mediante laaparición de uno de sus nombres deentrada en una referencia de función ydevuelve un valor escalar al punto dereferencia. En contraposición a subrutina.

G

generación actualLa generación de una variable automáticao controlada que está actualmentedisponible haciendo referencia al nombrede la variable.

generación (de una variable)La asignación de una variable estática,una asignación particular de una variableautomática o controlada, o el

514 PL/I for WindowsGuía de programación

Page 537: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

almacenamiento indicado por unacualificación de base particular de unavariable de base o mediante una variableo un parámetro definido.

grupo Un conjunto de sentencias incluidas enunidades de programa más grandes. Ungrupo puede ser un grupo DO o ungrupo SELECT y se puede utilizar encualquier lugar en el que pueda apareceruna sentencia única, excepto como unaunidad on.

grupo de selecciónUna secuencia de sentencias delimitadapor las sentencias SELECT y END.

grupo DOUna secuencia de sentencias delimitadapor una sentencia DO que concluye consu correspondiente sentencia END,utilizada con fines de control. Encontraposición a bloqueo.

grupo DO iterativoUn grupo DO cuya sentencia DOespecifica una variable de control o unaopción WHILE o UNTIL.

H

habilitadoEl estado de una condición en el cual lacondición puede provocar unainterrupción y, a continuación lainvocación de unidad ON establecidaadecuada.

hex Véase dígito hexadecimal.

hexadecimalPerteneciente al sistema de numeracióncon base 16; los números válidos utilizanlos dígitos del 0 al 9 y los caracteres de laA a la F, donde A representa 10 y Frepresenta 15.

I

identificadorUna cadena de caracteres, no incluida enun comentario o una constante, yprecedida y seguida por un delimitador.El primer carácter del identificador tieneque ser uno de los 26 caracteresalfabéticos y extralingüísticos, si los hay.Los otros caracteres, si los hay, puedenincluir también caracteres alfabéticosampliados, dígitos o el carácter deespacio.

IEEE Instituto de ingenieros eléctricos yelectrónicos.

implícitoLa acción se toma en ausencia de unaespecificación explícita.

inhabilitadoEl estado de una condición en el que nose produce ninguna interrupción y no serealizará ninguna acción establecida.

interrupciónLa redirección del flujo de control delprograma como resultado de lanzar unacondición o atención.

invocaciónLa activación de un procedimiento.

invocarActivar un procedimiento.

J

juego de caracteresUna colección definida de caracteres.Véase juego de caracteres de lenguaje y juegode caracteres de datos. Véase también ASCIIy EBCDIC.

juego de caracteres PL/IUn juego de caracteres que se ha definidopara representar elementos de programaen PL/I.

L

léxicamenterelativo al orden de izquierda a derechade las unidades.

límite inferiorEl límite inferior de una dimensiónmatriz.

límite integralUna dirección de múltiplos de bytes decualquier unidad de 8 bits en la quepueden alinearse datos. Suele ser unlímite de media palabra, una palabracompleta o una palabra doble (múltiplosde 2-, 4-, u 8 bytes respectivamente).

límitesLos límites superior e inferior de unadimensión matriz.

límite superiorEl límite superior de una dimensión dematriz.

Glosario 515

Page 538: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

lista de argumentosUna lista entre paréntesis de cero o másargumentos, separados por comas,siguiendo a una constante de nombre deentrada, una variable de nombre deentrada, un nombre genérico o un nombrede función incorporada. La lista seconvierte en la lista de parámetros delpunto de entrada.

lista de datosUna transmisión orientada a secuencia,una lista entre paréntesis de los elementosde datos utilizados en sentencias GET yPUT. Contraste con lista de formato.

lista de descriptores de parámetrosLa lista de todos los descriptores deparámetros de una especificación deatributo ENTRY.

lista de formatosUna transmisión orientada a secuencia,una lista que especifica el formato de unelemento de datos en el medio externo.En contraposición a lista de datos.

lista de parámetrosUna lista entre paréntesis de uno o variosparámetros, separados por comas ysiguiendo a la palabra clave PROCEDUREen una sentencia de procedimiento o a lapalabra clave ENTRY en una sentenciaENTRY. La lista se corresponde con unalista de argumentos que se pasan en lainvocación.

lista de subíndiceUna lista entre paréntesis de uno o variossubíndices, uno para cada dimensión dela matriz, que en conjunto solo identificana un elemento único o a una seccióncruzada de la matriz.

llamada de subrutinaUna referencia de entrada que tiene querepresentar a una subrutina, seguida deuna lista de argumentos opcional queaparece en una llamada CALL. Encontraposición a referencia de función.

llamar Para invocar una subrutina utilizando lasentencia CALL o la opción CALL.

M

matriz Una colección ordenada y con nombre deuno varios elementos de datos conatributos idénticos, agrupados en una ovarias dimensiones.

matriz de estructurasUna colección ordenada de estructurasidénticas especificadas al dar el atributode dimensión a un nombre de estructura.

matriz intercaladaUna matriz que hace referencia a unalmacenamiento no conectado.

mensaje fin de pasoMensaje que sigue el listado de lassentencias de control de trabajo y losmensajes del planificador de trabajos ycontiene códigos de retorno que indican sicada paso se ha realizado o nosatisfactoriamente.

miembroUn nombre de estructura, unión oelemento de una estructura o unión.Conjuntos de datos de una biblioteca.

miembro de estructuraVéase miembro.

modo (de datos aritméticos)Un atributo de datos aritméticos. Es real ocomplejo.

multiprocesoEl uso de un sistema informático con doso más unidades de proceso para ejecutardos o más programas a la vez.

multiprogramaciónEl uso de un sistema informático paraejecutar más de un programa al mismotiempo, utilizando una única unidad deproceso.

N

name Un identificador que el usuario otorga auna variable o a una constante. Unidentificador que aparece en un contextoen el que no es una palabra clave. A vecesse denomina nombre definido por elusuario.

nivel lógico (de una estructura o miembro deunión)

La profundidad indicada por un númerode nivel cuando todos los números denivel están en secuencia directa (cuandoel incremento entre números de nivelsucesivos es uno).

nombre básicoVéase elemento base.

516 PL/I for WindowsGuía de programación

Page 539: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

nombre calificadoUna secuencia jerárquica de nombres deestructura o miembros de unión,conectados por puntos, utilizada paraidentificar un nombre en una estructura.Cualquiera de los nombres puedeutilizarse como subíndice.

nombre completoUn nombre que incluye todos losnombres de la secuencia jerárquica porencima del miembro al que hacereferencia el nombre, así como el nombredel propio miembro.

nombre de archivoUn nombre declarado para un archivo.

nombre de condiciónNombre de la condición definida por elprogramador o definida por PL/I.

nombre de entradaUn identificador para el que se declara deforma explícita o contextual tener elatributo ENTRY (a no ser que seproporcione el atributo VARIABLE) o unidentificador que tiene el valor de unavariable de entrada con el atributoENTRY implícito.

nombre de tareaUn identificador utilizado para hacerreferencia a una variable de tarea.

nombre externoUn nombre (con el atributo EXTERNAL)cuyo ámbito no está necesariamenteconfinado a un bloque y los bloques quecontiene.

nombre genéricoEl nombre de una familia de nombres deentrada. Una referencia al nombregenérico se sustituye por el nombre deentrada cuyos descriptores de parámetrocoinciden con los atributos de losargumentos de la lista de argumentos enel punto de invocación.

nombre incorporadoEl nombre de entrada de una subrutinaincorporada.

nombre internoUn nombre conocido solo dentro delbloque en el que está declarado y,posiblemente dentro de cualquier bloquecontenido.

nombre parcialmente calificadoUn nombre calificado incompleto. Incluyeuno o varios de los nombres, pero notodos, de una secuencia jerárquica sobreel miembro de unión oestructura al quehace referencia el nombre, así como elnombre del propio miembro.

número de nivelUn número que precede a un nombre enuna sentencia DECLARE y especifica suposicionamiento relativo en la jerarquíade nombres de estructura.

O

objeto Una colección de datos a la que se hacereferencia mediante un nombre único.

objeto REFERLa variable de una opción REFERmantiene o mantendrá el límite, lalongitud o el tamaño actual del miembro.El objeto REFER tiene que ser unmiembro de la misma estructura o unión.No puede ser un subíndice ni estarcalificado por el ubicador, y tiene quepreceder al miembro con la opciónREFER.

opciónUna especificación en una sentencia quepuede utilizarse para influenciar laejecución o interpretación de la sentencia.

opciones del compiladorPalabras claves que se especifican paracontrolar determinados aspectos de unacompilación, como: la naturaleza delmódulo de objeto generado, los tipos desalida impresa que se producen, etc.

operación asíncronaEl solapamiento de una operaciónentrada/salida con la ejecución desentencias. La ejecución sumultánea deprocedimientos que utilizan varios flujosde control para diferentes tareas.

operadorUn símbolo que especifica una operaciónque se va a llevar a cabo.

operador compuestoUn operador que consta de más de uncarácter especial, como <=, **, y /*.

operador de comparaciónUn operador que puede utilizarse en unrelación aritmética, de localizador de

Glosario 517

Page 540: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

cadenas o lógica para indicar lacomparación que se va a realizar entre lostérminos de la relación. Los operadores decomparación son:

= (igual a)> (mayor que)< (menor que)>= (mayor que o igual a)<= (menor que o igual a)¬= (distinto a)¬> (no mayor que)¬< (no menor que)

operador de prefijoUn operador que precede a un operandoy se aplica solo a ese operando. Losoperador de prefijo son más (+), menos (-)y no (¬).

operadores aritméticosCualquiera de los operadores de prefijo +y -, o cualquiera de los siguientesoperadores intercalados: + - * / **

operadores de serie de bitsLos operadores lógicos not y ORexclusivo (¬), y (&), y o (|).

operadores lógicosLos operadores de serie de bits not y ORexclusivo (¬), y (&), y o (|).

operador infijoUn operador que aparece entre dosoperandos.

operandoEl valor de un identificador, constante ouna expresión a la que se aplica unoperador, posiblemente en conjunción conotro operando.

origen Elemento de datos que se va a convertirpara datos de problema.

origen real (AO)La ubicación del primer elemento de lamatriz o estructura.

origen virtual relativo (RVO)El origen real de una matriz menos elorigen virtual de una matriz.

origen virtual (VO)La ubicación en la que se mantiene elelemento de la matriz cuyos subíndicesson ceros. Si no aparece este elemento enla matriz, el origen virtual es el lugar enel que estaría.

P

palabra claveUn identificador que tiene un significadoespecífico en PL/I cuando se utiliza en uncontexto definido.

parámetroUn nombre de la lista de parámetros quesigue a la sentencia PROCEDURE,especificando un argumento que se pasaráal invocar al procedimiento.

parámetro controladoUn parámetro para el que se especificó elatribuuto CONTROLLED en unasentencia DECLARE. Solo puede estarasociado con argumentos que tengan elatributo CONTROLLED.

parámetro simpleUn parámetro para el que no se puedeespecificar un atributo de clase dealmacenamiento. Puede representar unargumento de cualquier clase dealmacenamiento, pero solo la generaciónactual de un argumento controlado.

precisiónEl número de dígitos o bits contenidos enun elemento de datos de coma fija, o elnúmero mínimo de dígitos significativos(excluyendo el exponente) que semantienen para un elemento de datos decoma flotante.

predeterminadoDescribe un valor, atributo u opción quese asume cuando no se ha especificadoningún otro.

prefijoUna etiqueta o una lista entre paréntesisde uno o varios nombres de condiciónincluidos al principio de una sentencia.

prefijo de condiciónUna lista entre paréntesis de uno o variosnombres de condición como prefijo deuna sentencia. Especifica si lascondiciones citadas se van a habili tar oinhabilitar.

prefijo de etiquetaUna etiqueta antepuesta a una sentencia.

preprocesadorUn programa que examina el programafuente antes de que se realice lacompilación.

518 PL/I for WindowsGuía de programación

Page 541: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

prioridadUn valor asociado a una tarea, queespecifica la precedencia de la tarearelativa a otras tareas.

procedimientoUna colección de sentencias, delimitadaspor sentencias PROCEDURE y END. Unprocedimiento es un programa o unaparte de un programa, delimita el ámbitode los nombres y se activa mediante unareferencia al procedimiento o a uno desus nombres de entrada. Véase tambiénprocedimiento externo yprocedimiento interno.

procedimiento externoUn procedimiento que no está contenidoen otro procedimiento. Un procedimientode nivel 2 contenido en un paquete quetambién se exporta.

procedimiento internoUn procedimiento contenido en otrobloque. En contraposición a procedimientoexterno.

procedimiento invocadoUn procedimiento que ha sido activado.

procedimiento principalUn procedimiento externo cuya sentenciaPROCEDURE tiene el atributo OPTIONS(MAIN). Este procedimiento se invocaautomáticamente como primer paso en laejecución de un programa.

procedimiento recursivoUn procedimiento que puede serinvocado desde él mismo o desdecualquier otro procedimiento activo.

procedimiento reentranteUn procedimiento que puede activarsemediante múltiples tareas, subprocesos, oprocesos simultáneamente sin causarinterferencias entre estas tareas,subprocesos y procesos.

proceso de tareasUn recurso que permite que un programaejecute más de un procedimiento PL/I almismo tiempo.

profundidad de anidamiento combinadoEl nivel más profundo de anidamiento,que se determina contando los niveles deanidamientos PROCEDURE/BEGIN/ON,DO, SELECT, e IF...THEN...ELSE en elprograma.

programaUn conjunto de uno o variosprocedimientos externos o paquetes. Unode los procedimientos externos tiene quetener la especificación OPTIONS(MAIN)en su sentencia de procedimiento.

programa de estado de problemaUn programa que opera en el estado deproblema del sistema operativo. Noincluye instrucciones de entrada/salida niotras instrucciones privilegiadas.

programa fuenteUn programa que sirve como entradapara los procesadores del programafuente y el compilador.

prólogoLos procesos que se producenautomáticamente a la activación de unbloqueo.

Prompter de PL/IPrograma procesador de mandatos delmandato P/LI que comprueba losoperandos y asigna los conjuntos de datosrequeridos por el compilador.

punteroUn tipo de variable que identifica unaubicación en el almacenamiento.

punto de entradaUn punto de un procedimiento en el quepuede invocarse. punto de entrada primarioy punto de entrada secundario.

punto de entrada primarioEl punto de entrada identificado porcualquiera de los nombres de la lista deetiquetas de la sentencia PROCEDURE.

punto de entrada secundarioUn punto de entrada identificado por unode los nombres de la lista de etiquetas deuna sentencia de nombre.

punto de invocaciónEl punto del bloque de invocación en elque aparece la referencia al procedimientoinvocado.

R

rango (de una especificación predeterminada)Un conjunto de identificadores odescriptores de parámetro a los que seaplican los atributos de una sentenciaDEFAULT.

Glosario 519

Page 542: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

referenciaLa aparición de un nombre, excepto en uncontexto que provoca una declaraciónexplícita.

referencia ambiguaUna referencia que no está losuficientemente cualificada paraidentificar un único nombre conocido enel punto de referencia.

referencia baseUna referencia que tiene la clase dealmacenamiento basado.

referencia conectadaUna referencia a un almacenamientoconectado. Tiene que estar claro, antes dela ejecución del programa, que elalmacenamiento está conectado.

referencia de constanteUna referencia de valor que tiene unaconstante como objeto

referencia de entradaUna constante de entrada, una referenciade variable de entrada o una referencia defunción que devuelve un valor deentrada.

referencia de funciónUna constante de entrada o una variablede entrada, que tiene que representar auna función, seguida de una lista deargumentos posiblemente vacía. Encontraposición a llamada de subrutina.

referencia de procedimientoUna variable o constante de entrada.Puede ir seguida de una lista deargumentos. Puede aparecer en unasentencia CALL o en la opción CALL, ocomo referencia de función.

referencia destinoUna referencia que designa una variablede recepción (o una parte de una variablede recepción).

referencia de valorUna referencia utilizada para obtener envalor de un elemento de datos.

referencia de variableUna referencia que designa a toda lavariable o a parte de ella.

registroLa unidad lógica de una transmisión enuna operación de entrada o salida

orientada a registros. Una colección deuno a varios elementos de datosrelacionados. Los elementos suelen tenerdiferentes atributos de datos y suelenestar descritos por una estructura odeclaración de unión.

registro bloqueadpUn registro en un archivo EXCLUSIVEDIRECT UPDATE que está disponiblepara una única tarea y al que no puedenacceder otras tareas hasta que la tarea quelo utiliza renuncia a él.

rellenoUno o varios caracteres, gráficos o bitsconcatenados a la derecha de una cadenapara ampliarla hasta la longitud necesaria.Uno o varios bytes o bits insertados enuna estructura o unión de forma que elsiguiente elemento de la estructura ounión se alinee dentro de los límitesintegrales correctos.

reparaciónUna solución, llevada a cabo por elcompilador después de detectar un errordurante la compilación, que permite quese ejecute el programa compilado.

S

secciones de controlInstrucciones de máquina agrupadas enun módulo de objeto.

sección transversal de una matrizLos elementos representados por laextensión de al menos una dimensión deuna matriz. Un asterisco en el lugar de unsubíndice en una referencia de matrizindica la extensión completa de esadimensión.

secuencia de datosLos datos que se transmiten desde o a unconjunto de datos mediante latransmisión orientada a secuencia, comouna secuencia continúa de elementos dedatos en forma de caracteres.

sentenciaUna sentencia PL/I, compuesta porpalabras clave, delimitadores,identificadores, operadores y constantes yterminada por un punto y coma (;).Además, puede tener una lista de prefijosde condición y una lista de etiquetas.

520 PL/I for WindowsGuía de programación

Page 543: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Véase también sentencia de palabra clave,sentencia de asignación y sentencia vacía.

sentencia compuestaUna sentencia que incluye otrassentencias. En PL/I, IF, ON, OTHERWISEy WHEN son las únicas sentenciascompuestas. Véase cuerpo de sentencia.

sentencia de palabra claveUna sentencia simple que comienza conuna palabra clave, indicando la funciónde la sentencia.

sentencia de preprocesadorUna sentencia especial que aparece en elprograma fuente y especifica las accionesque tiene que llevar a cabo elpreprocesador. Se ejecuta cuando ladetecta el preprocesador.

sentencia nulaUna sentencia que contiene solo elsímbolo del punto y coma (;). Indica queno se realiza ninguna acción.

sentencia simpleUna sentencia distinta de IF, ON, WHENy OTHERWISE.

separadorVéase delimitador.

serie Una secuencia contigua de caracteres,gráficos o bits que se trata como un únicoelemento de datos.

serie de bitsUna serie compuesta de cero o más bits.

serie nulaUna serie de bits, gráfica o de caracterescon una longitud de cero.

seudovariableCualquiera de los nombres de unafunción incorporada que pueda utilizarsepara especificar una variable de destino.Suele estar en el lado izquierdo de unasentencia de asignación.

símbolo externoNombre al que se puede hacer referenciaen una sección de control aparte delnombre en el que se ha definido.

síncronoUn flujo de control único para ejecucionesen serie de un programa.

sin definirIndica algo que el usuario no debe hacer.

El uso de una función sin definir esprobable que produzca resultadosdiferentes en implementaciones distintasde un producto PL/I. En ese caso, elprograma de aplicación tiene errores.

subíndiceUna expresión de elemento que especificauna posición dentro de la dimensión deuna matriz. Si el subíndice es un asterisco,especifica todos los elementos de ladimensión.

subíndices intercaladosSubíndices que existen en niveles distintosal nivel más bajo de una referencia consubíndice.

subrutinaUn procedimiento que no tiene opciónRETURNS en la sentencia PROCEDURE.En contraposición a función.

subrutina incorporadaUna subrutina que tiene un nombre deentrada definido en tiempo decompilación y que se invoca medianteuna sentencia CALL.

subtareaUna tarea que se adjunta mediante latarea dada o cualquiera de las tareas deuna línea directa desde la tarea dada a laúltima tarea adjunta.

T

tarea La ejecución de uno o variosprocedimientos mediante un único flujode control.

terminación (de una tarea)Cese del flujo de control de una tarea.

terminación (de un bloque)Cese de ejecución de un bloque, y ladevolución de control al bloque deactivación por medio de una sentenciaRETURN o END, o la transferencia decontrol al bloque de activación o a algúnotro bloque activo mediante una sentenciaGO TO.

tiempo de compilaciónEn general, el tiempo durante el cual unprograma fuente se convierte en unmódulo de objeto. En PL/I, es el tiempodurante el cual un programa fuentepuede alterarse, si se desea, y convertirsedespués en un programa objeto.

Glosario 521

Page 544: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

tipo EL conjunto de atributos de datos y dealmacenamiento que se aplican a unageneración, a un valor o a un elemento dedatos.

tipo de agregadoPara cada elemento de datos, laespecificación de si es una estructura, unaunión o una matriz.

tipo de datosUn conjunto de atributos de datos.

transmisión de datosLa transmisión de datos desde unconjunto de datos al programa oviceversa.

transmisión de datos orientada a registroLa transmisión de datos en forma deregistros separados. En contraposición atransmisión de datos en secuencia.

transmisión de datos orientada a secuenciaLa transmisión de datos en la que losdatos se tratan como si fueran unasecuencia continua de valores de datosindividuales en forma de caracteres. Encontraposición a transmisión de datosorientada a registro.

transmisión dirigida a datosEl tipo de transmisión orientada asecuencia en la que se transmiten losdatos. Se parece a una sentencia deasignación y tiene la forma nombre =constante.

transmisión dirigida a ediciónEl tipo de transmisión orientada asecuencia en la que los datos aparecencomo una corriente continúa de caracteresy para la que hace falta un lista deformatos que especifique la edicióndeseada para lista de datos asociada.

truncamientoLa eliminación de uno o varios dígitos,caracteres, gráficos o bits del final de unelemento de datos cuando se ha excedidola longitud de una cadena o la precisiónuna variable de destino.

U

ubicadorUn bloque de control que mantiene ladirección de una variable o su descriptor.

ubicador/descriptorUn ubicador seguido de un descriptor. El

ubicador mantiene la dirección de unavariable no la dirección del descriptor.

Unidad ONLa acción especificada que se va aejecutar cuando se lanza la condiciónapropiada.

unión Un conjunto de elementos de datos que sereemplazan unos a otros, ocupando elmismo almacenamiento. Los miembrospueden ser estructuras, variableselementales o matrices. No es necesarioque tengan atributos idénticos.

unión de matricesUna unión que tiene el atributoDIMENSION.

V

valor de bitUn valor que representa un tipo de bit.

valor de coma fija binarioUn entero formado por dígitos binariosque tiene un binario opcional y un signoopcional. En contraposición a valor decoma fija decimal.

valor de coma fija decimalUn número racional que consta de unasecuencia de dígitos decimales con unaposición asumida de la coma decimal. Encontraposición avalor de coma fija binario.

valor de coma flotante binarioUna aproximación de un número real enforma de significante, que puedeconsiderarse como una fracción binaria, yun exponente, que puede considerarsecomo una exponente entero de base 2. Encontraposición a valor de coma flotantedecimal.

valor de coma flotante decimalUna aproximación de un número real enforma de significante, que puedeconsiderarse como una fracción decimal, yun exponente, que puede considerarsecomo una exponente entero de base 10.En contraposición a valor de coma flotantebinario.

valor de entradaEl punto de entrada representado por unavariable o constante de entrada; el valorincluye el entorno de la activación que seasocia con la constante de entrada.

522 PL/I for WindowsGuía de programación

Page 545: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

valor de punteroUn valor que identifica el tipo de puntero

valor de ubicadorUn valor que identifica o puede utilizarsepara identificar la dirección dealmacenamiento.

valor de ubicador nuloUn valor de ubicador especial que nopuede identificar ninguna ubicación en elalmacenamiento interno. Oferece unaindicación positiva de que una variablede ubicador no identifica actualmenteninguna generación de datos.

valor devueltoEl valor devuelto por un procedimientode función.

variableUna entidad con nombre utilizada parahacer referencia a datos y a la que sepueden asignar valores. Sus atributospermanecen constantes, pero puede hacerreferencia a diferentes valores en distintosmomentos.

variable asignadaUna variable con la que está asociado elalmacenamiento principal y no se deja enlibertad.

variable automáticaUna variable cuyo almacenamiento seasigna automáticamente con la activaciónde un bloque y se libera automáticamentecon la terminación de ese bloque.

variable basadaUna variable cuya dirección dealmacenamiento viene proporcionada porun ubicador. Se puede acceder a variasgeneraciones de la misma variable. Noidentifica una ubicación fija delalmacenamiento.

variable controladaUna variable en la que la asignación y laliberación están controladas por lassentencias ALLOCATE y FREE, conacceso a la generación actual únicamente.

variable de archivoUna variable a la que pueden asignarseconstantes de archivo. Tiene los atributosFILE y VARIABLE y no puede tenerninguno de los atributos de descripciónde archivo.

variable de cadenaUna variable declarada con el atributoBIT, CHARACTER o GRAPHIC, cuyosvalores pueden ser cadenas de gráficos,caracteres o bits.

variable de controlUna variable que se utiliza para controlarla ejecución iterativa de una sentenciaDO.

variable de desplazamientoUna variable de localizador con unatributo OFFSET, cuyo valor identificauna ubicación en el almacenamientorelativa al inicio de un área.

variable de destinoUna variable a la que se le asigna unvalor.

variable de elementoUna variable que representa un elemento;una variable escalar.

variable de entradaUna variable a la que se puede asignar unvalor de entrada. Tiene que tener losatributos ENTRY y VARIABLE.

variable de etiquetaUna variable declarada con el atributoLABEL. Su valor es una constante deetiqueta en el programa.

variable de eventoUna variable con el atributo EVENT quepuede estar asociada un evento. Si valorindica si la acción se ha completado y elestado de terminación.

variable definidaUna variable asociada a todo o parte delalmacenamiento de la variable basedesignada.

variable de localizadorUna variable cuyo valor identifica laubicación en el almacenamiento principalde una variable o un almacenamientointermedio. Tiene el atributo POINTER uOFFSET.

variable de matrizUna variable que representa un agregadode elementos de datos que tienen quetener atributos idénticos. Encontraposición a la variable de estructura.

variable de nivel unoUna estructura principal o nombre de

Glosario 523

Page 546: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

unión. Cualquier variable sin subíndicecontenida en una estructura o unión.

variable de origenUna variable cuyo valor participa en otraoperación, pero no se modifica mediantela operación. En contraposición a lavariable de destino.

variable de punteroUna variable de localizador con elatributo POINTER que contiene un valorde puntero.

variable de tareaUna variable con el atributo TASK cuyovalor da la prioridad relativa de unatarea.

variable escalarUna variable que no es una estructura,una unión ni una matriz.

variable estáticaUna variable asignada antes de quecomience la ejecución del programa y quepermanece asignada durante la ejecución.

volcadoSalida impresa de parte o todo elalmacenamiento utilizado por unprograma así como otra información delprograma, como el rastreo del origen deun error.

524 PL/I for WindowsGuía de programación

Page 547: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Índice

CaracteresEspeciales? opción para ILIB 400

Aa conjuntos de datos directos VSAM de la

estación de trabajocargar 314utilizar un archivo DIRECT para

acceder 317utilizar un archivo SEQUENTIAL para

acceder 317acceder a conjuntos de datos

E/S de registro 277ejemplos de REGIONAL(1) 278REGIONAL(1) 288secuencia E/S 265

acceso de archivo remoto 234acceso directo 286acceso remoto 234adaptar programas existentes para VSAM

de la estación de trabajo 300agregados

tabla de longitud, ejemplo 185almacenamiento

informe en lista 134ANS

caracteres de control deimpresión 262

subopción en tiempo decompilación 47

ANSIcarácter de control 238, 261caracteres de control de

impresión 262añadir o reemplazar objetos en una

biblioteca, ILIB 397aplicaciones de lenguaje mixto 419aplicaciones de sistema principal

ejecutar en la estación de trabajo 7archivo base del conjunto de datos con

clave VSAM 293archivo de definición

crear 387archivo de texto

convencional 233LF 233

archivo DIRECTuso para acceder a un conjunto de

datos con clave VSAM deestación detrabajo 309

uso para acceder a un conjunto dedatos directo VSAM deestación detrabajo 317

Archivo DRIVER1.DEFprograma de muestra para crear una

DLL 389

Archivo DRIVER1.PLIprograma de ejemplo que utiliza una

DLL 389archivo RECORD 241archivo SEQUENTIAL

uso para acceder a un conjunto dedatos con clave VSAM deestación detrabajo 309

uso para acceder a un conjunto dedatos directo VSAM deestación detrabajo 317

utilizar para acceder a un conjunto dedatos secuencial VSAM de laestación de trabajo 302

Archivo SORT.DEF 389Archivo SORT.PLI 389archivos

abrir 256adaptar programas existentes para

VSAM de la estación de trabajoutilizar archivos

CONSECUTIVE 300utilizar archivos INDEXED 300utilizar archivos

REGIONAL(1) 300utilizar archivos VSAM 300

atributo STREAM 262cerrar 256declaraciones para conjuntos de datos

REGIONAL(1) 283definir

E/S de registro 277secuencia E/S 263

destinados a impresora 262PL/I

definición 233estándar 260

SYSIN 271SYSPRINT 271

archivos de inclusióncon ODBC 327

archivos de registro y de secuencia 274archivos DEF

crear 387archivos destinados a impresora 261

caracteres de control deimpresión 261

caracteres de control de impresiónANSI

equivalentes de IBMProprinter 262

lista 262controlar la longitud de la línea de

impresión 268ejemplo de creación de un

archivo 269opción ASA 261sustituir la tabla de control del

tabulador 270archivos INDEXED, adaptar

programas 300

archivos PRINTaplicar el atributo PRINT 267controlar la longitud de la línea de

impresión 268formato en terminal 274insertar caracteres de control de

impresión ANSI 267sustituir la tabla de control del

tabulador 270archivos RECORD OUTPUT

asociado con conjuntos de datosconsecutivos 238

utilizando CTLASA 238archivos SYSIN

atributos 271redirigir entrada estándar 260

archivos SYSPRINTatributos 271redirigir salida estándar 260

área de comunicaciones, SQL 161área de descriptor, SQL 162AREA y atributo INITIAL 12argumentos numéricos para el

enlazador 198ASCII

consideraciones de portabilidad 8portabilidad DBCS 10subopción en tiempo de compilación

descripción 47efecto en rendimiento 368

tablas de conversión de datos 385atributo DATE

cuando se ignora 496definición y sintaxis 489

atributo ENVIRONMENTespecificar características 238

BUFSIZE 246CONSECUTIVA 238GENKEY 239KEYLENGTH 241KEYLOC 241ORGANIZATION 242RECSIZE 242REGIONAL(1) 243SCALARVARYING 243VSAM 243

especificar opcionesConjuntos de datos VSAM de la

estación de trabajo 299para registro E/S 277stream de E/S 263

Atributo ENVIRONMENTespecificar características

CTLASA 238atributo INITIAL 12atributo STREAM

conjuntos de datos 262discusión 262

avisos 499

© Copyright IBM Corp. 1998, 2013 525

Page 548: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Bbajo rendimiento 230biblioteca, error de subrutina de

compilador 230bibliotecas de enlace dinámico

compilar 387compilar, enlazar, ejecutar 389crear archivos de origen DLL 387utilizar FETCH y RELEASE en el

programa principal 390bloques de control

control global 380específico de la función 378

bloques de control globalescampos de entrada de datos 380escribir el procedimiento de filtrado

de mensajes 381escribir el procedimiento de

inicialización 381escribir el procedimiento de

terminación 383bucles

codificación de unidades ON 227sugerencias de utilización 227variables de control 371

BYADDRdescripción 366efecto en rendimiento 366usar con la opción DEFAULT 48

BYVALUEdescripción 366efecto en rendimiento 367usar con la opción DEFAULT 48

Ccálculos utilizando fechas 493carácter de control de impresora,

ASA 261caracteres de control

ANSI en la opción CTLASA 238impresora 261

caracteres nacionales 3CICS

opciones de preprocesador 175salida de usuario de tiempo de

ejecución 383soporte 173variables de entorno 175

IBM.PPCICS 23clave

acceder a un conjunto de datossecuencial 296

genérica 239número de registro relativo

relleno 296truncamiento 296

posición de inicio 241clave de origen 286claves

utilizar números relativos deregistro 296

utilizar para conjuntos de datosVSAM con clave de estación detrabajo 296

claves (continuación)utilizar valores de registro

secuenciales 296codificación

caracteres de control incluidos 3mejorar rendimiento 369sentencias CICS 176sentencias SQL 161

codificación óptimaestilo de codificación 369opciones de tiempo de

compilación 363Código Java, compilación 429, 432, 437Código Java, escritura 428, 431, 435código PL/I, compilación 431, 434, 438código PL/I, enlace 431, 434, 438código PL/I, escribir 429, 433, 437códigos de retorno, enlazador 195comparar fechas

con patrones de comparación 493con patrones distintos 495con patrones iguales 494implícito 494utilizar literales 495utilizar no literales 495

compatibilidad de archivos PL/I paraz/OS para la estación de trabajo 300

compilaciónaplicaciones del sistema principal en

su estación de trabajo 3error 230opciones de tiempo de

compilación 27preparar su programa fuente 18salida de usuario

activar 378IBMUEXIT 378personalizar 379procedimientos 377

utilizar el mandato PLI para invocaral compilador 24

variables de entornoIBM.DECK 24IBM.OBJECT 24IBM.OPTIONS 22IBM.PRINT 23IBM.SOURCE 23IBM.SYSLIB 23INCLUDE 24TMP 24

compiladordescripciones de opciones 27listado

almacenamiento de pilautilizado 134

comprobación de escritorio 215comprobación de vía de acceso 216comunicación en lenguaje intermedio

(ILC) 419concatenación 21condición RECORD

adaptar archivo INDEXED paraVSAM de la estación de trabajo 300

adaptar un archivo CONSECUTIVEpara VSAM de laestación detrabajo 300

condición UNDEFINEDFILEarchivos no asociados a conjuntos de

datos 254se lanza cuando se abre un

archivo 254condiciones

funciones incorporadas de manejo deseries en línea 376

manejo de conversiones en línea 375conjunto de datos

VSAMatributo de archivo 297

VSAM de la estación de trabajoconjunto de datos ficticio 297

conjuntos de datosabrir un archivo PL/I 256acceder

E/S de registro 277ejemplos de REGIONAL(1) 278

acceso a registro de E/S 234acceso con clave 235acceso secuencial 234ampliación en salida 245archivos continuos 262Archivos estándar PL/I (SYSPRINT y

SYSIN) 260asociar a más de un archivo 256asociar un archivo PL/I a un conjunto

de datoscómo encuentra PL/I conjuntos de

datos 255utilizar archivos no asociados 255utilizar la opción TITLE de la

sentencia OPEN 255utilizar variables de entorno 254

asociar varios conjuntos de datos a unarchivo 256

características 233combinaciones de sentencias de E/S,

atributos y opciones 257definir y utilizar 294disociar 256entrada y salida de la sentencia

DISPLAY 259especificar características 236establecer características

atributo PL/IENVIRONMENT 238

formatos de registro 237organización del conjunto de

datos 237registros 237Variable de entorno

DD:ddname 244establecer una vía de acceso 255estación de trabajoVSAM

conjuntos de datos con clave 305conjuntos de datos directos 312conjuntos de datos

secuenciales 301definir archivos 294organización 293

identificación predeterminada 254métodos de acceso 235nativo, longitud fija 235número de regiones 249número máximo de regiones 249

526 PL/I for WindowsGuía de programación

Page 549: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

conjuntos de datos (continuación)organización

DDM y VSAM 244opciones 237predeterminado 237regional 243

recrear salida 245redirigir entrada estándar

salida y dispositivos de error 260regional 235REGIONAL(1) 235tipos

conjuntos de datos de longitudfija 235

conjuntos de datos nativos 234conjuntos de datos regionales 235dispositivos y archivos de texto

convencionales 234Variable de entorno DD:ddname 244,

254VSAM 235

conjuntos de datos con clavesentencias y opciones para 305tipos y ventajas 295

Conjuntos de datos con clave VSAM dela estación de trabajo

cargar 307utilizar un archivo DIRECT para

acceder 309utilizar un archivo SEQUENTIAL para

acceder 309conjuntos de datos consecutivos

archivos destinados a impresora 261archivos PRINT 274controlar entrada desde el terminal

archivos de registro y desecuencia 273

fin de archivo 273formato de datos 272letras mayúsculas y

minúsculas 273utilizar archivos en modo

conversacional 272controlar salida al terminal

archivos de registro y desecuencia 274

ejemplo de un programainteractivo 274

formato de archivos PRINT 274descripción 261ejemplos 278usar E/S orientada a registros

crear un conjunto de datos 277definir archivos 277Opciones ENVIRONMENT para la

transmisión de datos 277usar E/S orientado a registros

acceder y actualizar un conjuntode datos 277

utilizar una transmisión de datosorientada a secuencia

definir archivos utilizando lasecuencia E/S 263

opciones ENVIRONMENTpara 263

conjuntos de datos consecutivos(continuación)

utilizar una transmisión de datosorientada a stream

acceder a un conjunto de datos constream de E/S 265

crear un conjunto de datos constream de E/S 263

utilizar archivos PRINT 267utilizar los archivos SYSIN y

SYSPRINT 271conjuntos de datos DDM

formatos de registro 237valor de AMTHD 244

conjuntos de datos indexados 235conjuntos de datos nativos

acceder 234archivos de texto convencionales 234conjuntos de datos de longitud

fija 235conjuntos de datos regionales 235DDMconjuntos de d atos 235dispositivos de caracteres 234tipos 234

conjuntos de datos regionalesdefinición de archivo

especificar opcionesENVIRONMENT 285

utilizar claves con conjuntos dedatos regionales 286

descripción 283información necesaria 285mandatos y opciones 283utilizar conjuntos de datos

REGIONAL(1)acceso directo 289acceso secuencial 288actualizar 288ejemplo 289registros ficticios 286

Conjuntos de datos secuenciales VSAMde la estación de trabajo

acceder desde un archivoSEQUENTIAL 302

actualizar 304definir y cargar 303utilizar un archivo SEQUENTIAL para

acceder 302Conjuntos de datos VSAM de estación de

trabajoacceder a registros 294adaptar programas

utilizar archivosCONSECUTIVE 300

utilizar archivos INDEXED 300utilizar archivos

REGIONAL(1) 300utilizar archivos VSAM 300

con clavearchivo base 294archivo de índice principal 294

declaración de archivo 298definir archivos

adaptar programas existentes 299especificar opciones del atributo

PL/I ENVIRONMENT 299directo 294

Conjuntos de datos VSAM de estación detrabajo (continuación)

elegir un tipo 297secuencial 294tipos y ventajas 294

CONSECUTIVAopción

definición 238secuencia de E/S 263

CONSECUTIVEarchivos 300

constantes con nombredefinir 373y variables estáticas 373

continuación de línea 20convenciones de interfaz CALL

con ODBC 327convenios de llamada 403

implicaciones del registro generalejemplos de pases de

parámetros 406parámetros 405

convertir fechas 494

Ddatos

acceso de archivo remoto 236archivos

asociar un archivo de datos aOPEN 256

cerrar un archivo PL/I 256crear 255

comprobación 215conversión 254estructuras 331registro 237representaciones, portabilidad 8tablas de conversión 385tipos

Java y PL/I equivalente 439SQL y PL/I equivalente 167

transmisión 238datos de coma flotante 9datos gráficos y stream de E/S 262DBCS (juego de caracteres de doble byte)

nombres de tabla 331y opción GRAPHIC 240

DCLGEN 331DD:ddname 244

nombre de definición de datosalternativo 255

declaraciónvariables host, preprocesador

SQL 164DECLARE

definición STATEMENT 170sentencia TABLE 170

DEFINEDy UNION 373

definir archivospara conjuntos de datos 298para conjuntos de datos

REGIONAL(1) 285del atributo ENVIRONMENT

especificar característicasGRAPHIC 240

Índice 527

Page 550: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

del atributo ENVIRONMENT(continuación)

opcionesCTLASA 261

descendencia dinámica 223descendencia estática 223desplazamiento

determinar números desentencia 225

recuento de tabuladores 270diferencias de entorno, S/390 y AIX 10direccionamiento E/S 259directiva %LINE 20DISPLAY 219dispositivo

carácter 233con 259estándar 233std 259

dispositivo de caracteres 234DLL 387

EE/S

DDM 235inesperados 228métodos de acceso

BTRIEVE 235, 236ISAM 236REMOTE 236SFS 236

redirección 260tabla de atributos 257tabla de opciones 257tabla de sentencias 257utilizar el programa de

clasificación 449E/S orientada a registro

crear un conjunto de datos 277definir archivos utilizando 277Opciones ENVIRONMENT para la

transmisión de datos 277E/S orientado a registro

acceder a un conjunto de datos 277actualizar un conjunto de datos 277ejemplos de conjuntos de datos

consecutivos 278información fundamental 278

EBCDICconsideraciones de portabilidad 8efecto en rendimiento 368portabilidad DBCS 10subopción en tiempo de

compilación 47tablas de conversión de datos 385

ejecutar su programaejecutar variables de entorno de

ejecución 211especificar opciones de tiempo de

ejecución 211ejercicio práctico 17

programa HELLO 17usar opciones de tiempo de

compilación 18utilizar los programas de ejemplo

incluidos con el producto 18

el atributo ENVIRONMENT(REREAD) en la sentencia CLOSE

conjuntos de datos regionales 285enlace

OPTLINKcaracterísticas 404consejos para utilizar 405ejemplo 406

SYSTEMdescripción 411ejemplo 412

enlace estático 189enlazar el programa

códigos de retorno 195crear archivos

archivos ejecutables 194biblioteca de enlace dinámico 194correlación 195

enlace estático 189entrada y salida 191especificar directorios 192iniciar el enlazador 189reglas de búsqueda 192utilización de archivos de

respuestas 193utilizar la línea mandatos 189utilizar un archivo make 190

enteros de byte invertido 9entrada

al terminalarchivos de registro y de

secuencia 274ejemplo de un programa

interactivo 274formato de archivos PRINT 274

controlar desde el terminal 271definir conjuntos de datos para

archivos continuos 263ejemplo de programa interactivo 274SEQUENTIAL 276

entrada/salida dirigida a datoscodificación para rendimiento 369constantes DBCS 240especificar opción GRAPHIC 240

entrada/salida dirigida a edición 240entrada/salida dirigida a listado

constantes DBCS 240especificar opción GRAPHIC 240

entrada y salida con conjuntos de datosVSAM de laestación de trabajo

descripción 293organización

acceder a registros en 294crear y acceder 294determinar qué tipo necesita 294uso de claves 296

utilizar conjuntos de datos con claveVSAM de la estación de trabajo

cargar 307utilizar un archivo DIRECT para

acceder 309utilizar un archivo SEQUENTIAL

para acceder 309utilizar conjuntos de datos directos

VSAM deestación de trabajocargar 314

entrada y salida con conjuntos de datosVSAM de laestación de trabajo(continuación)

utilizar conjuntos de datos directosVSAM deestación de trabajo(continuación)

utilizar un archivo DIRECT paraacceder 317

utilizar un archivo SEQUENTIALpara acceder 317

utilizar los conjuntos de datossecuenciales VSAM de la estación detrabajo

actualizar 304definir y cargar 303utilizar un archivo SEQUENTIAL

para acceder 302ERROR

unidades ON 12errores

bajo rendimiento 230bucles 227compilador o biblioteca 230diferencias en la emisión desde PL/I

para z / OS 12errores imprevistos 227errores lógicos en el programa

fuente 227fallos del sistema 230inesperado

terminación del programa 228inesperados

datos de entrada/salida 228resultados del programa 229

llamar a variables de entrada noinicializadas 227

mensajes de tiempo de ejecución 225uso no válido de PL/I 227

errores lógicos en origen 227especificación de archivo 244especificar opciones de tiempo de

ejecución 211establecer opciones del enlazador 197estación de trabajo

archivo de texto 234conjuntos de datos nativos 233formato del registro 237

estándaracción del sistema 224dispositivo, estación de trabajo 233

estructura de bloques de control globalesescribir el procedimiento de filtrado

de mensajes 381escribir el procedimiento de

inicialización 381escribir el procedimiento de

terminación 383evitar llamadas a rutinas de

biblioteca 374exportar datos de una biblioteca de

enlace dinámico 390

Fficticio

registros 283FILLERS 270

528 PL/I for WindowsGuía de programación

Page 551: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

filtrado de mensajes 378fin de caracteres de archivo (/*) 273FIXED

BINARY, correlación yportabilidad 12

opción TYPE 252formato de registro de longitud fija 237formato de registro de longitud sin

definir 237formatos de registro 237función de macros

definición de macro 150portabilidad 7variables de entorno 152

IBM.PPMACRO 22función incorporada DAYS 492función incorporada DAYSTODATE 493funciones definidas por el usuario,

preprocesador SQL 171funciones incorporadas

DAYS 492DAYSTODATE 493restringidos 6

funciones REDUCIBLE 372

Ggenerar sentencias de declaración 331Gestión de datos distribuidos 233gestionar biblioetcas (archivos .LIB) 391gestor de biblioteca 391GRAPHIC

opción ENVIRONMENT 240, 263

HHEXADECIMAL

consideraciones de portabilidad 9subopción en tiempo de

compilación 50

IIEEE

consideraciones de portabilidad 9subopción en tiempo de

compilación 50ILIB

entrada 394especificar parámetros 391introducción 391invocar 391objetos 396opciones 398salida 394utilizar un archivo de respuestas 393

implicaciones de registro de finesgenerales

ejemplopaso de parámetros a una

rutina 406paso de parámetros de coma

flotante a una rutina 408parámetros 405

INCLUDEprocesamiento 19

INCLUDE (continuación)sentencia, utilizar DCLGEN 335variable de entorno 24

incluidoscaracteres de control 3sentencias CICS 176

incluir en tiempo de ejecución 213incrustado

sentencias SQL 162inesperada

fin de programa 228inesperado

fin de programa 229inesperados

datos de entrada/salida 228información DD

formato del registro 237sentencia TITLE 255

información de rastreo 220inspección de código 215Instituto (ANSI)

en archivos destinados aimpresora 261

Instituto nacional estadounidense deestándares (ANSI)

en opción CTLASA 238interrupciones 217interrupciones de máquina 223invocación

compilador 24

JJava 428, 429, 431, 432, 433, 434, 435,

437, 438, 439JAVA 427jni

programa de ejemplo JNI 428, 431,435

KKEY

claves para los conjuntos de datosVSAM con clave de estación detrabajo 296

números relativos de registro 296valores de registro secuenciales 296

KEYFROM 296KEYFROM, números relativos de

registro 296KEYTO

archivo secuencial para acceder a unconjunto de datos secuencialesVSAM de la estación de trabajo 302

claves para los conjuntos de datosVSAM con clave de estación detrabajo 296

números relativos de registro 296valores de registro secuenciales 296

Llínea de mandatos, definir opciones de

tiempo de ejecución 211longitud de clave, comprobación 241

longitud de registroespecificar 249máximo 242

MMandato PLI

especificar opciones de tiempo decompilación 25

invocar al compilador 24mandato SET

variables de entorno deejecución 211

manejo de condicionesámbito y descendencia 223codificación de unidades ON 225conceptos generales 223condiciones cualificadas y no

cualificadas 226formatos de mensajes de error en

tiempo de ejecución PL/I 225mensajes del sistema 225Mensajes SNAP 225

funciones incorporadas para el manejode condiciones 225

interrupciones 223lista de condiciones y sus

atributos 226orígenes de condiciones 225terminología 223

manejo de condiciones y erroresacción estándar del sistema 224conceptos generales 223condiciones utilizadas para pruebas y

depuraciones 226interrupciones y condiciones

PL/I 223retorno normal 224terminología 223unidades ON para condiciones 226

manejo de errores y condicionesdescendencia dinámica 223descendencia estática 223

márgenes 20mejora de rendimiento

codificación para rendimientoconstantes con nombre y variables

estáticas 373DEFINED y UNION 373entradas y salidas dirigidas a

datos 369evitar llamadas a rutinas de

biblioteca 374funciones REDUCIBLE 372PAQUETES y PROCEDIMIENTOS

anidados 371variables de control de bucle 371

seleccionar opciones de tiempo decompilación

DEFAULT 366GONUMBER 364IMPRECISE 363OPTIMIZE 363PREFIX 365RULES 364SNAP 364

Índice 529

Page 552: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

mejorar el rendimiento de laaplicación 363

mensajesfunción de filtro 381modificar una salida de usuario del

compilador 379método de acceso BTRIEVE 236Método de acceso DDM 233, 235método de acceso ISAM 236método de acceso REMOTE 236método de acceso SFS 236métodos de acceso

DDM 233E/S 235

migraciónArchivos PL/I para z/OS para la

estación de trabajoarchivo CONSECUTIVE 300Archivo EXCLUSIVE 300archivo INDEXED 300archivo REGIONAL(1) 300archivo VSAM 300manejo de registros ISAM 300

compatibilidad con PL/I paraz/OS 3

Millennium Language Extensionsutilizar en aplicaciones PL/I 489

modelos para datos 491

NNATLANG

opción de tiempo de ejecución 213números de región 286números de sentencia, determinar a partir

de desplazamientos 225números relativos de registro en

conjuntos de datos VSAM de estaciónde trabajo 296

OObjeto EXTRACT para ILIB 398Objeto REMOVE para ILIB 398ODBC 323

archivos de inclusiónproporcionados 327

ayuda en línea 324conexión 325convención de interfaz CALL 327correlación de tipos de datos C 329gestor de controladores 323información específica del

entorno 324segundo plano 323SQL incrustado 324utilizar API de PL/I 326ventajas 324

opción ADDBUFF ENVIRONMENT 4opción AMTHD 244opción APPEND 245opción ASA 245opción ASCII ENVIRONMENT 4opción AUTOPAGE 246Opción BACKUP para ILIB 400opción BUFFERS ENVIRONMENT 4

opción BUFND ENVIRONMENT 4opción BUFNI ENVIRONMENT 4opción BUFOFF ENVIRONMENT 4opción BUFSIZE 246opción CTLASA 238opción de compilador ADDEXT 32opción de compilador AGGREGATE 33opción de compilador ATTRIBUTES 34opción de compilador BIFPREC 35opción de compilador BLANK 36opción de compilador CASERULES 37opción de compilador CHECK 38opción de compilador CMPAT 39opción de compilador CODEPAGE 40opción de compilador COPYRIGHT 42opción de compilador CURRENCY 43opción de compilador DBCS 44opción de compilador DEFAULT 45

subopcionesALIGNED 47ANS o IBM 47ASCII o EBCDIC 47ASSIGNABLE o

NONASSIGNABLE 47BIN1ARG o NOBIN1ARG 48BYADDR o BYVALUE 48CONNECTED o

NONCONNECTED 48DESCLIST o DESCLOCATOR 48

opción de compilador DEPRECATE 54opción de compilador

DEPRECATENEXT 56opción de compilador DLLINIT 57opción de compilador ENCODING 58opción de compilador EXTRN 60opción de compilador

FLOATINMATH 62opción de compilador GONUMBER 63,

364opción de compilador IMPRECISE 66

mejorar rendimiento 363opción de compilador INITAUTO 69opción de compilador INITBASED 70opción de compilador INITSTATIC 72opción de compilador LANGLVL 74opción de compilador LIBS 75opción de compilador LINECOUNT 77opción de compilador LISTVIEW 80opción de compilador MACRO 82opción de compilador MAXGEN 85opción de compilador MAXNEST 87opción de compilador MAXSTMT 88opción de compilador MAXTEMP 89opción de compilador MDECK 90opción de compilador MSG 91opción de compilador

MSGSUMMARY 92Opción de compilador NAMES 93opción de compilador NATLANG 94opción de compilador NEST 95opción de compilador NOT 96opción de compilador NUMBER 97opción de compilador OBJECT 98opción de compilador OFFSET 99opción de compilador ONSNAP 100opción de compilador OR 103opción de compilador PP 104

opción de compilador PPINCLUDE 106opción de compilador PPLIST 107opción de compilador PPMACRO 108opción de compilador PPSQL 109opción de compilador PRECTYPE 111opción de compilador PREFIX 112, 365

utilizar subopcionespredeterminadas 365

opción de compilador PROBE 113opción de compilador PROCEED 114opción de compilador QUOTE 116opción de compilador REDUCE 117opción de compilador RESPECT 119,

490opción de compilador RULES 120, 490

efecto en rendimiento 364opción de compilador SEMANTIC 128opción de compilador SNAP 129

efecto en rendimiento 364opción de compilador SOSI 130opción de compilador SOURCE 131opción de compilador STATIC 132opción de compilador STMT 133opción de compilador STORAGE 134opción de compilador SYNTAX 135opción de compilador SYSPARM 136opción de compilador SYSTEM 137opción de compilador TERMINAL 138opción de compilador TEST 139opción de compilador USAGE 140opción de compilador WIDECHAR 141opción de compilador WINDOW 142,

490opción de compilador XINFO 143opción de compilador XML 146opción de tiempo de compilación

CURRENCYportabilidad 3

opción de tiempo de compilaciónDEFAULT

subopcionesDUMMY 49LOWERINC o UPPERINC 51

opción de tiempo de compilaciónDESCRIPTOR

efecto en rendimiento 367opción de tiempo de compilación FLAG

usar al depurar 217opción de tiempo de compilación

GONUMBERusar al depurar 217

opción de tiempo de compilaciónNOLAXDCL 218

opción de tiempo de compilaciónNOLAXIF 218

opción de tiempo de compilación NOTportabilidad 3

opción de tiempo de compilación ORportabilidad 3

opción de tiempo de compilaciónPPTRACE 110

opción de tiempo de compilación PREFIXusar al depurar 217

opción de tiempo de compilación RULESusar al depurar 217

opción de tiempo de compilación SNAPmensajes 225

530 PL/I for WindowsGuía de programación

Page 553: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

opción de tiempo de compilación SNAP(continuación)

usar al depurar 218volcados 218

opción de tiempo de compilaciónWINDOW 142

opción de tiempo de compilación XREFusar al depurar 218

Opción DEF para ILIB 400opción del compilador COMPILE 41opción del compilador DEFAULT

subopcionesDESCRIPTOR o

NODESCRIPTOR 49E 49EVENDEC o NOEVENDEC 50IEEE o HEXADEC 50INITFILL o NOINITFILL 50INLINE o NOINLINE 50LINKAGE 50NATIVE o NONNATIVE 51NATIVEADDR o

NONNATIVEADDR 51NULLS TRPTR 51NULLSTRADDR o

NONULLSTRADDR 51NULLSYS o NULL370 52ORDER o REORDER 52ORDINAL 52OVERLAP o NOOVERLAP 52PSEUDODUMMY 52RECURSVIE o

NONRECURSIVE 52RETCODE 52RETURNS 53SHORT 53

utilizar subopcionespredeterminadas 366

opción del compilador EXIT 59opción del compilador FLAG 61opción del compilador GRAPHIC 64opción del compilador IGNORE 65opción del compilador INCAFTER 67opción del compilador INCLUDE 68opción del compilador INITCTL 71opción del compilador INSOURCE 73opción del compilador LIMITS 76opción del compilador LINEDIR 78opción del compilador LIST 79opción del compilador MARGINI 83opción del compilador MARGINS 84opción del compilador MAXMSG 86opción del compilador OPTIMIZE 101,

363opción del compilador OPTIONS 102opción del compilador PPCICS 105opción del compilador PPTRACE 110opción del compilador RESEXP 118opción DELAY

descripción y sintaxis 247opción DELIMIT

descripción y sintaxis 247opción en tiempo de compilación

salida en lista 185opción en tiempo de compilación

NUMBER 184opción EXTDICTIONARY para ILIB 401

Opción FREEFORMAT para ILIB 400Opción GENDEF (/gd) para ILIB 400Opción GENIMPLIB (/gi) para ILIB 401opción GENKEY 239Opción HELP para ILIB 401opción INDEXAREA ENVIRONMENT 4opción KEYLENGTH 241opción KEYLOC 241opción LEAVE ENVIRONMENT 4opción LINE

cuando se utilizan archivosPRINT 267

de la sentencia PUT 261en controlar la salida al terminal 274utilizar con archivos PRINT 267

opción LINESIZEacceder a un conjunto de datos con

stream de E/S 264campo de tabla de conjunto de

tabulaciones 270crear un conjunto de datos con stream

de E/S 263definición 268sentencia OPEN 264

Opción LIST para ILIB 401opción LRECL 248opción LRMSKIP 248opción NCP ENVIRONMENT 4Opción NOBACKUP para ILIB 400opción NOEXTDICTIONARY para

ILIB 401Opción NOFREEFORMAT para ILIB 400Opción NOWARN para ILIB 402opción NOWRITE ENVIRONMENT 4opción ORGANIZATION 242opción PAGE

de la sentencia PUT 261utilizar con archivos PRINT 267

opción PROMPT 248opción PUTPAGE 248opción RECCOUNT 249opción RECSIZE

atributo PL/I ENVIRONMENT 242descripción y sintaxis 249especificar la longitud de los

registros 237para secuencia E/S 263

opción REGIONAL ENVIRONMENT 4opción REREAD ENVIRONMENT 4opción RETRY 249opción SAMELINE 250opción SCALARVARYING 243opción SHARE 250opción SIS ENVIRONMENT 4opción SKIP ENVIRONMENT 4opción SKIP0 251opción TERMLBUF 251opción TITLE

abrir y cerrar un archivo 256descripción 255especificar la longitud de los

registros 237usar

opción RECSIZE 263utilizar

archivos SYSPRINT y SYSIN 260

opción TITLE (continuación)utilizar archivos no asociados a

conjuntos de datos 255opción TOTAL ENVIRONMENT 4opción TP ENVIRONMENT 4opción TRKOFL ENVIRONMENT 4opción TYPE 251

especificar formatos de registro 237Opción WARN para ILIB 402opciones

atributo PL/I ENVIRONMENTCONSECUTIVA 238GENKEY 239GRAPHIC 240KEYLENGTH 241KEYLOC 241ORGANIZATION(CONSECUTIVE) 242ORGANIZATION(INDEXED) 242ORGANIZATION(RELATIVE) 242RECSIZE 242REGIONAL(1) 243SCALARVARYING 243VSAM 243

Atributo PL/I ENVIRONMENTBUFSIZE 246CTLASA 238

atributo PRINTLINE 267PAGE 267SKIP 267

tabla de E/S 257tiempo de compilación

DEFAULT 403tiempo de ejecución

NATLANG 213utilizar

información DD 255TITLE 255

variables de entorno DD:ddnameAMTHD 244APPEND 245ASA 245AUTOPAGE 246DELAY 247DELIMIT 247LRECL 248LRMSKIP 248PUTPAGE 248RECCOUNT 249RECSIZE 249RETRY 249SAMELINE 250SHARE 250SKIP0 251TERMLBUF 251TYPE 251

opciones de compiladorabreviaturas 27ADDEXT 32AGGREGATE 33ATTRIBUTES 34BIFPREC 35BLANK 36CASERULES 37CHECK 38COPYRIGHT 42DEFAULT 45

Índice 531

Page 554: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

opciones de compilador (continuación)DEPRECATE 54DEPRECATENEXT 56DLLINIT 57ENCODING 58IGNORE 65INCLUDE 68INITAUTO 69INITBASED 70MSGSUMMARY 92PPTRACE 110predeterminada 27PREFIX 365RESPECT 119RULES 120STMT 133

opciones de ENVIRONEMENT nocompatibles 4

opciones de tiempo de compilación 4dónde especificar 25usar en la depuración 217

opciones del compiladorANID 95CMPAT 39CODEPAGE 40COMPILE 41CURRENCY 43DBCS 44DEFAULT 366EXIT 59EXTRN 60FLAG 61FLOATINMATH 62GONUMBER 63, 364GRAPHIC 64IMPRECISE 66, 363INCAFTER 67INITCTL 71INITSTATIC 72INSOURCE 73LANGLVL 74LIBS 75LIMITS 76LINECOUNT 77LINEDIR 78LIST 79LISTVIEW 80MACRO 82MARGINI 83MARGINS 84MAXGEN 85MAXMSG 86MAXNEST 87MAXSTMT 88MAXTEMP 89MDECK 90MSG 91NAMES 93NATLANG 94NOT 96NUMBER 97OBJECT 98OFFSET 99ONSNAP 100OPTIMIZE 101, 363OPTIONS 102OR 103

opciones del compilador (continuación)PP 104PPCICS 105PPINCLUDE 106PPLIST 107PPMACRO 108PPSQL 109PPTRACE 110PRECTYPE 111PREFIXE 112PROBE 113PROCEED 114QUOTE 116REDUCE 117RESEXP 118RESPECT 490RULES 364, 490SEMÁNTICA 128SNAP 129, 364SOSI 130SOURCE 131STATIC 132STORAGE 134SYNTAX 135SYSPARM 136SYSTEM 137TERMINAL 138TEST 139USAGE 140WIDECHAR 141WINDOW 142, 490XINFO 143XML 146

opciones en tiempo de ejecucióndónde especificar opciones de tiempo

de ejecución 211especificar varias subopciones u

opciones de tiempo deejecución 212

NATLANG 213opciones ENVIRONMENT

para transmisión de datos orientada aregistro

CONSECUTIVE 277CTLASA 277ORGANIZATION(CONSECUTIVE) 277RECSIZE 277SCALARVARYING 277

transmisión de datos orientada astream 263

Open Database Connectivity (véaseODBC) 323

operaciones de pantalla y teclado 259options

variables de entorno DD:ddnamePROMPT 248

organizaciónconjuntos de datos 237conjuntos de datos regionales 243predeterminado 238VSAM 243

Ppágina

campo de tabla de conjunto detabulaciones PAGELENGTH 270

página (continuación)campo de tabla de conjunto de

tabulaciones PAGESIZE 270PAQUETES y PROCEDIMIENTOS

anidados 371parámetros de ILIB 391Parámetros de la línea de mandatos de

ILIB 392personalizar

definir variables de entorno en tiempode compilación 21

salida de usuarioescribir su propia salida del

compilador 380estructura de bloques de control

globales 380modificar IBMUEXIT.INF 379

PL/Iarchivos

asociar a un conjunto dedatos 254

definición 233estructura 18preparación para compilación 18

archivos estándar 260atributo ENVIRONMENT

sentencia OPEN 237compilador

procedimientos de salida deusuario 378

uso de lenguaje no válido 227del atributo ENVIRONMENT

de su programa transferibles aotras implementacionesSAA 238

plataformadiferencias 10

PLIDUMPcodificación recomendada 221discusión 220leer un volcado formateado de

PL/I 222obtener

información sobre el archivo 220información TCA 220

PLISRTxdeterminar qué subrutina

utilizar 442especificar el campo de

clasificación 445éxito o error en la comunicación 443,

448llamar al programa de

clasificación 447ordenar datos de entrada y de

salida 449parámetros 441rutinas de manejo de entrada y

salida 450PLITABS 271portabilidad

cambios en el comportamiento entiempo de ejecución 7

caracteres de control incluidos 3caracteres nacionales y otros

símbolos 3crear archivos ejecutables 7

532 PL/I for WindowsGuía de programación

Page 555: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

portabilidad (continuación)diferencias de entorno 10diferencias del sistema operativo 3elementos de lenguaje 11evitar errores lógicos 8representaciones de datos 8utilizando función de macros 7

preparar el programa fuente paracompilación

continuación de línea 20estructura de archivo de

programa 18, 19formato de archivo de programa 20márgenes 20procesamiento INCLUDE 19

preprocesador de inclusiónsintaxis 149variables de entorno 150

preprocesador de macrosdefinición de macro 150

preprocesador SQLárea de comunicaciones 161funciones definidas por el

usuario 171opciones 154utilizar variables de indicación 169utilizar variables de sistema

principal 164variables de entorno 23

Preprocesador SQLárea de descriptor 162códigos de retorno de error,

manejar 172sentencias EXEC SQL 152soporte de objetos grandes 170utilizar estructuras de lenguaje

principal 168variables de entorno 161

preprocesadoresdisponibles con PL/I 149función de macros 150inclusión 149Opciones CICS 175opciones SQL 154preprocesador de macros 150Preprocesador SQL 152

procedimiento de inicialización de salidade usuario del compilador 381

procedimiento de terminaciónejemplo de bloque de control

específico del procedimiento 383salida de usuario del compilador 383sintaxis

específico 383global 380

programaformato de archivo

continuación de línea 20discusión 20expectativas 20formato correcto 19márgenes 20preparación para compilación 18procesamiento INCLUDE 19

programa de aplicacióncodificar sentencias SQL

declaraciones de datos 331

programa de clasificaciónespecificar el campo de

clasificación 445éxito o error en la comunicación 448llamar al programa de

clasificación 447PLISRTx 441rutinas de manejo de entrada y

salida 450programa de ejemplo, ejecutar 431, 435,

439programa de ejemplo DRIVER

compilar, enlazar y ejecutar 390ejemplo de aplicar FETCH a un DLL

en tiempo de ejecución 390programa de ejemplo DSNTIAR.PLI 172programa de ordenación

comparar S/390 y estación detrabajo 441

éxito o error en la comunicación 443ordenar datos de entrada y de

salida 449pasos previos para usar la

ordenación 442registros de longitud variable 449

programa de utilidad del archivo make(NMAKE) 339

programa de utilidad NMAKEArchivo TOOLS.INI 361archivos en línea 358caracteres que modifican

mandatos 359descripciones 344directivas 354introducción 339macros especiales 349opciones 341programa de utilidad del archivo

make (NMAKE) 339reglas de inferencia 351sintaxis 339utilizar archivos de mandato 340utilizar la línea mandatos 339utilizar macros 346

programa HELLO 17programa interactivo, ejemplo 274programas de depuración

consejos generales sobredepuración 216

errores PL/I habitualesanomalía del sistema 230bajo rendimiento 230bucles y otros errores

imprevistos 227datos de entrada/salida

inesperados 228error de subrutina de compilador o

biblioteca 230errores lógicos en origen 227resultados inesperados 229terminación inesperada del

programa 228uso no válido de PL/I 227variables de entrada no

inicializadas 227manejo de condiciones 223opción FLAG 217

programas de depuración (continuación)opción GONUMBER 217opción NOLAXDCL 218opción NOLAXIF 218opción PREFIX 217opción RULES 217opción SNAP 218opción XREF 218usar ocupaciones para la depuración

DISPLAY 219PUT DATA 219PUT LIST 219PUT SKIP LIST 219

usar opciones de tiempo decompilación 217

volcados 219programas de ejemplo 18programas de prueba

comprobación de datos 215comprobación de vía de acceso 216inspección de código 215

programas de utilidad SMARTdata 234Proprinter, IBM, caracteres de

control 239prueba de módulo 216PUT

DATA 219LIST 219sentencia

atributos y opciones 257controlar entrada desde el

terminal 272opción GRAPHIC 240sin opción FILE 271

SKIP LIST 219

RRECORD de E/S

restricciones 4REGIONAL(1)

archivos 300conjuntos de datos

acceder y actualizar 288crear 286discusión 283ejemplo 287utilizar acceso directo 289utilizar acceso secuencial 288

opción ENVIRONMENT 243regiones 249registro de formato U 237registros

acceder a conjuntos de datos VSAMde la estación de trabajo 294

especificar longitud 237longitud 249

registros de longitud variableformato 237ordenar 449

registros ficticiosVSAM de la estación de trabajo 297

reglas de búsquedaenlazador 192

restar fechas 494restricciones de DBCS 6restricciones de definición iSUB 6

Índice 533

Page 556: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

restricciones de expresión deestructura 5

restricciones de expresiones de matriz 5restricciones de la sentencia DEFAULT 5restricciones del compilador

DBCS 6definición iSUB 6expresiones de estructura 5expresiones de matriz 5extensiones de variables

automáticas 5funciones incorporadas 6preprocesador de macros 6RECORD de E/S 4Sentencia DEFAULT 5seudovariables 6STREAM de E/S 4

retorno de carro-salto de línea (CR -LF) 252

rutinas, biblioteca, conversiones 376rutinas de manejo de entrada y salida,

programa de clasificación 450

Ssalida

al terminalarchivos de registro y de

secuencia 274ejemplo de un programa

interactivo 274formato de archivos PRINT 274

definir conjuntos de datos paraarchivos continuos 263

SEQUENTIAL 276salida de compilación

salida del compilador 187utilizar el listado del compilador 179

salida de usuariocompilador 377funciones 378personalizar

escribir su propia salida delcompilador 380

estructura de bloques de controlglobales 380

modificar IBMUEXIT.INF 379tiempo de ejecución CICS 383

salida del compilador IBMUEXIT 378salida SORT

E15 450E35 452

salto de línea (LF)Archivos LF 237definición 252delimitar registros lógicos 234

secuencia E/Sacceder a conjuntos de datos 265

secuencialacceso 286conjuntos de datos

estación de trabajoVSAM 295sentencias y opciones 301

valor de registroen conjunto de datos secuencial

VSAM deestación detrabajo 296

secuencial (continuación)valor de registro (continuación)

usar KEYTO para encontrar 302sentencia %INCLUDE 19sentencia %PROCESS

especificar opciones de tiempo decompilación con 25

y sentencia PROCEDURE 18sentencia *PROCESS 18sentencia CONNECT TO 170Sentencia DELETE 258sentencia FETCH

utilizar en el programa principal 390sentencia GET 257Sentencia LOCATE 257sentencia OPEN

abrir un archivo 256especificar la longitud de los

registros 237usar

opción LINESIZE 263utilizar

opción TITLE 237, 256Sentencia PUT

opciones PAGE, SKIP y LINEoptions 261

Sentencia READ, atributos yopciones 257

sentencia RELEASE, ejemplo 390Sentencia REWRITE 257sentencia REWRITE, atributos y

opciones 259sentencia UNLOCK 4sentencia WRITE, atributos y

opciones 257sentencias

DELETE 258GET 257LOCATE 257READ 257REWRITE 257WRITE 257

sentencias EXEC SQL 152Sentencias GET

controlar entrada desde elterminal 272

opción GRAPHIC 240sentencias SQL

INCLUDE 335SEQUENTIAL

OUTPUT 276seudovariables restringidas 6sintaxis ilink 189sistema

acción estándar para condiciones 224error 230mensajes 225recursos de manejo de errores 224

Sistema operativoinformación de definición de datos

(DD) 254sistema principal

estructuras 168variables, uso en sentencias SQL 164

SKIP, opcióncontrolar entrada desde el

terminal 273

SKIP, opción (continuación)de la sentencia PUT 261utilizar con archivos PRINT 267

soporte de idioma nacional 213soporte de objetos grandes (LOB) 170SQL incrustado

ventajas 324SQLCA 161SQLDA 162stream de E/S

crear un conjunto de datos 263ejemplo 264información fundamental 263

STREAM de E/Srestricciones 4

subopción de compilador BIN1ARG 48subopción de compilador

NOBIN1ARG 48subopción de tiempo de compilación

DESCLIST 48subopción de tiempo de compilación

DESCLOCATOR 48subopción de tiempo de compilación

DESCRIPTORdescripción 49

subopción de tiempo de compilaciónDUMMY 49

subopción de tiempo de compilaciónE 49

subopción de tiempo de compilaciónEVENDEC 50

subopción de tiempo de compilaciónINITFILL 50

subopción de tiempo de compilaciónINLINE 50

subopción de tiempo de compilaciónLOWERINC 51

subopción de tiempo de compilaciónNATIVE

consideraciones de portabilidad 9descripción 51efecto en rendimiento 368

subopción de tiempo de compilaciónNATIVEADDR 51

subopción de tiempo de compilaciónNODESCRIPTOR 49

subopción de tiempo de compilaciónNOEVENDEC 50

subopción de tiempo de compilaciónNOINITFILL 50

subopción de tiempo de compilaciónNOINLINE 50

subopción de tiempo de compilaciónNONNATIVE 51

subopción de tiempo de compilaciónNONNATIVEADDR 51

subopción de tiempo de compilaciónNONRECURSIVE 52

subopción de tiempo de compilaciónNOOVERLAP

descripción 52subopción de tiempo de compilación

NULL370 52subopción de tiempo de compilación

NULLSYS 52

534 PL/I for WindowsGuía de programación

Page 557: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

subopción de tiempo de compilaciónORDER

descripción 52efecto en rendimiento 368

subopción de tiempo de compilaciónORDINAL 52

subopción de tiempo de compilaciónOVERLAP

descripción 52subopción de tiempo de compilación

PSEUDODUMMY 52subopción de tiempo de compilación

RECURSIVE 52subopción de tiempo de compilación

REORDERdescripción 52efecto en rendimiento 368

subopción de tiempo de compilaciónRETCODE 52

subopción de tiempo de compilaciónRETURNS 53, 367

subopción de tiempo de compilaciónSHORT 53

subopción de tiempo de compilaciónUPPERINC 51

subopción del compiladorNONULLSTRADDR 51

subopción del compiladorNULLSTRADDR 51

subopción del compiladorNULLSTRPTR 51

subopción en tiempo de compilaciónALIGNED 47

subopción en tiempo de compilaciónASSIGNABLE 47

subopción en tiempo de compilaciónCONNECTED

descripción 48efecto en rendimiento 367

subopción en tiempo de compilaciónIBM 47

subopción en tiempo de compilaciónLINKAGE

convenios de llamada 403efecto en rendimiento 368sintaxis 50

subopción en tiempo de compilaciónNONASSIGNABLE 47

subopción en tiempo de compilaciónNONCONNECTED 48

SYSTEMenlace, convenios de llamada 411mensaje 225

Ttabla de control del tabulador 270tabla de referencias cruzadas en salida de

compilación 185tabla de referencias cruzadas y

atributos 185tablas de conversión 385teclado

operaciones de pantalla 259terminal

ejemplo de un programainteractivo 274

terminal (continuación)entrada 271entrada/salida conversacional 272salida 274

tiempo de ejecucióndiferencias de comportamiento

El atributo INITIAL para AREA seignora 12

elementos de lenguaje 11emisión de mensaje ERROR 12utilizar variables declaradas como

FIXED BIN 12diferencias entre plataformas 8incluir DLL 213mensajes

SNAP 225SYSTEM 225

opciones, especificar 211TMP, variable de entorno 24transmisión de datos orientada a

secuenciaacceder a un conjunto de datos con

stream de E/Sejemplo 266información fundamental 266

definir archivos utilizando lasecuencia E/S 263

Opciones ENVIRONMENT paratransmisiones de datos orientadas asecuencia 263

utilizar archivos PRINT 267utilizar los archivos SYSIN y

SYSPRINT 271transmisión de datos orientada a stream

crear un conjunto de datos con streamde E/S 263

Uubicaciones para depurar 218Uso de Millennium Language Extensions

patrones de fecha 491utilizar

matrices como variable host,preprocesador SQL 164

utilizar el programa de clasificación 441Utilizar Millennium Language Extensions

características de lenguajes 489utilizar variables de host, preprocesador

SQL 164

Vvariable de entorno CEE.OPTIONS 211variable de entorno de ejecución

PATH 211variable de entorno de tiempo de

ejecución DPATH 211variable de entorno ILINK 197variables

variables de entorno en tiempo decompilación 21

variables de entornofunción de macros 152preprocesador CICS 175preprocesador de inclusión 150

variables de entorno (continuación)Preprocesador SQL 161tiempo de compilación 21

variables de entorno DD:ddnameAMTHD 244APPEND 245ASA 245AUTOPAGE 246DELAY 247DELIMIT 247especificar características 244LRECL 248LRMSKIP 248PROMPT 248PUTPAGE 248RECCOUNT 249RECSIZE 249RETRY 249SAMELINE 250SHARE 250SKIP0 251TERMLBUF 251TYPE 251

variables de entrada no inicializadas 227variables de indicador, SQL 169volcados

cadena de título 220manejo de condiciones 223manejo de errores 223opciones predeterminadas 221serie de opciones 220volcados PL/I

formateados—PLIDUMP 221volcados SNAP para información de

rastreo 223volcados PL/I formateados 220VSAM

archivos, adaptar programas 300opción 243

VSAM (método de acceso dealmacenamiento virtual) de la estaciónde trabajo

conjuntos de datosatributo de archivo 297conjunto de datos ficticio 297

Índice 535

Page 558: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

536 PL/I for WindowsGuía de programación

Page 559: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Hoja de Comentarios

Rational Developer for System z, Versión 9.0.1PL/I for WindowsGuía de programaciónVersión 9.0.1

Número de Publicación SC18-9977-06

Por favor, sírvase facilitarnos su opinión sobre esta publicación, tanto a nivel general (organización, contenido,utilidad, facilidad de lectura,...) como a nivel específico (errores u omisiones concretos). Tenga en cuenta que loscomentarios que nos envíe deben estar relacionados exclusivamente con la información contenida en este manualy a la forma de presentación de ésta.

Para realizar consultas técnicas o solicitar información acerca de productos y precios, por favor diríjase a susucursal de IBM, business partner de IBM o concesionario autorizado.

Para preguntas de tipo general, llame a "IBM Responde" (número de teléfono 901 300 000).

Al enviar comentarios a IBM, se garantiza a IBM el derecho no exclusivo de utilizar o distribuir dichoscomentarios en la forma que considere apropiada sin incurrir por ello en ninguna obligación con el remitente.

Comentarios:

Gracias por su colaboración.

Envíelos por correo a la dirección indicada en el reverso.

Si desea obtener respuesta de IBM, rellene la información siguiente:

Nombre Dirección

Compañía

Número de teléfono Dirección de e-mail

Page 560: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

Hoja de ComentariosSC18-9977-06

SC18-9977-06

���

IBMH150/090555 Bailey AvenueSan Jose, CAUSA

Page 561: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257
Page 562: Guía de programación - United States · PDF file21.08.2012 · Asociar varios conjuntos de datos a un archivo . . 256 Combinaciones de sentencias de E/S, atributos y opciones .....257

����

Número de Programa: 5724-T07

Impreso en España

SC18-9977-06